diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/discard/dto/CargoDiscardRequests.java b/lastleg-service/src/main/java/com/baiyue/lastleg/discard/dto/CargoDiscardRequests.java index 82d603b03..75c21ab9b 100644 --- a/lastleg-service/src/main/java/com/baiyue/lastleg/discard/dto/CargoDiscardRequests.java +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/discard/dto/CargoDiscardRequests.java @@ -34,11 +34,5 @@ public final class CargoDiscardRequests { public record Query(@Min(1) long page, @Min(1) @Max(200) long size, String discardNo, String inboundCode, String overseasWarehouseId, String status, LocalDateTime createdFrom, LocalDateTime createdTo, - LocalDateTime completedFrom, LocalDateTime completedTo) { - /** 未筛完成时间的调用保持创建时间查询语义。 */ - public Query(long page, long size, String discardNo, String inboundCode, String overseasWarehouseId, - String status, LocalDateTime createdFrom, LocalDateTime createdTo) { - this(page, size, discardNo, inboundCode, overseasWarehouseId, status, createdFrom, createdTo, null, null); - } - } + LocalDateTime completedFrom, LocalDateTime completedTo) {} } diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/discard/mapper/CargoDiscardDimensionMapper.java b/lastleg-service/src/main/java/com/baiyue/lastleg/discard/mapper/CargoDiscardDimensionMapper.java new file mode 100644 index 000000000..5f62485bc --- /dev/null +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/discard/mapper/CargoDiscardDimensionMapper.java @@ -0,0 +1,22 @@ +package com.baiyue.lastleg.discard.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import java.util.List; + +/** 只读取废弃明细真实关联的本库托盘身份。 */ +@Mapper +public interface CargoDiscardDimensionMapper { + /** 无托盘事实以空串保留,避免把不适用维度伪造为零。 */ + @Select(""" + SELECT COALESCE(CASE WHEN i.return_carton_id IS NOT NULL THEN r.pallet_code + WHEN i.inventory_position_id IS NOT NULL THEN p.pallet_no ELSE d.pallet_no END,'') + FROM ll_cargo_discard_item i + LEFT JOIN ll_return_inventory_carton r ON r.id=i.return_carton_id AND r.customer_id=i.customer_id + LEFT JOIN ll_inventory_position p ON p.id=i.inventory_position_id AND p.customer_id=i.customer_id + LEFT JOIN ll_dropship_order_profile d ON d.id=i.profile_id AND d.customer_id=i.customer_id + WHERE i.customer_id=#{customerId} AND i.application_id=#{applicationId} + """) + List palletNos(@Param("customerId") String customerId, @Param("applicationId") Long applicationId); +} diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/discard/repository/CargoDiscardDimensionRepository.java b/lastleg-service/src/main/java/com/baiyue/lastleg/discard/repository/CargoDiscardDimensionRepository.java new file mode 100644 index 000000000..b375f8202 --- /dev/null +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/discard/repository/CargoDiscardDimensionRepository.java @@ -0,0 +1,19 @@ +package com.baiyue.lastleg.discard.repository; + +import com.baiyue.lastleg.discard.entity.CargoDiscardItem; +import com.baiyue.lastleg.discard.mapper.CargoDiscardItemMapper; +import com.baiyue.lastleg.discard.mapper.CargoDiscardDimensionMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Repository; +import java.util.List; + +/** 封装数量统计的明细与来源托盘读取。 */ +@Repository +public class CargoDiscardDimensionRepository { + @Resource private CargoDiscardItemMapper items; + @Resource private CargoDiscardDimensionMapper dimensions; + /** 读取一票客户隔离明细。 */ + public List items(String customer, Long application) { return items.listApplication(customer, application); } + /** 读取一票托盘身份,保留无事实行。 */ + public List pallets(String customer, Long application) { return dimensions.palletNos(customer, application); } +} diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/discard/repository/CargoDiscardQueryRepository.java b/lastleg-service/src/main/java/com/baiyue/lastleg/discard/repository/CargoDiscardQueryRepository.java new file mode 100644 index 000000000..0a121de66 --- /dev/null +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/discard/repository/CargoDiscardQueryRepository.java @@ -0,0 +1,36 @@ +package com.baiyue.lastleg.discard.repository; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baiyue.lastleg.discard.dto.CargoDiscardRequests; +import com.baiyue.lastleg.discard.entity.CargoDiscardApplication; +import com.baiyue.lastleg.discard.mapper.CargoDiscardApplicationMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Repository; +import org.springframework.util.StringUtils; +import java.util.List; + +/** 列表和全筛选统计共用同一客户及时间过滤条件。 */ +@Repository +public class CargoDiscardQueryRepository { + @Resource private CargoDiscardApplicationMapper applications; + + /** 返回全部筛选单据,不受页面大小影响。 */ + public List list(String customerId, CargoDiscardRequests.Query query) { + return applications.selectList(filter(customerId, query)); + } + + /** 完成时间使用客户确认时间,与客户端完成时间展示保持一致。 */ + public static LambdaQueryWrapper filter(String customerId, CargoDiscardRequests.Query query) { + return new LambdaQueryWrapper() + .eq(StringUtils.hasText(customerId), CargoDiscardApplication::getCustomerId, customerId) + .like(StringUtils.hasText(query.discardNo()), CargoDiscardApplication::getDiscardNo, query.discardNo()) + .like(StringUtils.hasText(query.inboundCode()), CargoDiscardApplication::getInboundCodes, query.inboundCode()) + .eq(StringUtils.hasText(query.overseasWarehouseId()), CargoDiscardApplication::getOverseasWarehouseId, query.overseasWarehouseId()) + .eq(StringUtils.hasText(query.status()), CargoDiscardApplication::getStatus, query.status()) + .ge(query.createdFrom() != null, CargoDiscardApplication::getCreatedAt, query.createdFrom()) + .le(query.createdTo() != null, CargoDiscardApplication::getCreatedAt, query.createdTo()) + .ge(query.completedFrom() != null, CargoDiscardApplication::getCustomerConfirmedAt, query.completedFrom()) + .le(query.completedTo() != null, CargoDiscardApplication::getCustomerConfirmedAt, query.completedTo()) + .orderByDesc(CargoDiscardApplication::getCreatedAt).orderByDesc(CargoDiscardApplication::getId); + } +} diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/discard/service/CargoDiscardStatisticsService.java b/lastleg-service/src/main/java/com/baiyue/lastleg/discard/service/CargoDiscardStatisticsService.java new file mode 100644 index 000000000..76508b8e8 --- /dev/null +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/discard/service/CargoDiscardStatisticsService.java @@ -0,0 +1,54 @@ +package com.baiyue.lastleg.discard.service; + +import com.baiyue.lastleg.discard.dto.CargoDiscardRequests; +import com.baiyue.lastleg.discard.model.CargoDiscardQuantities; +import com.baiyue.lastleg.discard.repository.CargoDiscardQueryRepository; +import com.baiyue.lastleg.discard.repository.CargoDiscardDimensionRepository; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import java.util.HashSet; + +/** 按全部筛选单据统计票、SKU、件、箱和真实来源托盘。 */ +@Service +public class CargoDiscardStatisticsService { + @Resource private CargoDiscardQueryRepository queries; + @Resource private CargoDiscardDimensionRepository dimensions; + + public record Statistics(long orderCount, int skuCount, long requestedPackages, Long actualPackages, + Long requestedPieces, Long actualPieces, Integer palletCount) {} + + /** 已确认实际数独立汇总;缺失件数或托盘事实返回空值,不从箱数换算。 */ + public Statistics statistics(String customer, CargoDiscardRequests.Query query) { + var applications = queries.list(customer, query); + var skus = new HashSet(); var pallets = new HashSet(); + long boxes = 0, actualBoxes = 0, pieces = 0, actualPieces = 0; + boolean piecesKnown = true, actualPiecesKnown = true, actualKnown = false, palletsKnown = true; + for (var application : applications) { + var lines = dimensions.items(application.getCustomerId(), application.getId()); + boxes += lines.isEmpty() ? application.getTotalPackages() : CargoDiscardQuantities.boxes(lines, false); + if (lines.isEmpty()) { piecesKnown = false; palletsKnown = false; } + var confirmed = lines.stream().filter(i -> i.getActualDiscardPackages() != null).toList(); + if (!confirmed.isEmpty()) { actualKnown = true; actualBoxes += CargoDiscardQuantities.boxes(confirmed, true); } + for (var line : lines) { + if (line.getSkuCode() != null && !line.getSkuCode().isBlank()) skus.add(line.getSkuCode()); + if (line.getReturnCartonId() == null) { + piecesKnown = false; + if (line.getActualDiscardPackages() != null) actualPiecesKnown = false; + } else { + pieces += line.getDiscardPackages(); + if (line.getActualDiscardPackages() != null) actualPieces += line.getActualDiscardPackages(); + } + } + var sourcePallets = dimensions.pallets(application.getCustomerId(), application.getId()); + if (sourcePallets.isEmpty()) palletsKnown = false; + for (var pallet : sourcePallets) { + if (pallet == null || pallet.isBlank() || "散箱".equals(pallet)) palletsKnown = false; + else pallets.add(application.getCustomerId() + ":" + application.getOverseasWarehouseId() + ":" + pallet); + } + } + return new Statistics(applications.size(), skus.size(), boxes, actualKnown ? actualBoxes : null, + !applications.isEmpty() && piecesKnown ? pieces : null, + actualKnown && actualPiecesKnown ? actualPieces : null, + !applications.isEmpty() && palletsKnown ? pallets.size() : null); + } +} diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/model/RelabelQueryFilter.java b/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/model/RelabelQueryFilter.java new file mode 100644 index 000000000..d0c131111 --- /dev/null +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/model/RelabelQueryFilter.java @@ -0,0 +1,34 @@ +package com.baiyue.lastleg.relabel.model; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baiyue.lastleg.relabel.dto.RelabelRequests; +import com.baiyue.lastleg.relabel.entity.RelabelApplication; +import org.springframework.util.StringUtils; +import org.springframework.web.server.ResponseStatusException; +import org.springframework.http.HttpStatus; + +/** 列表与数量汇总共用客户范围及筛选条件,避免分页和汇总口径漂移。 */ +public final class RelabelQueryFilter { + /** 禁止创建无状态筛选工具实例。 */ + private RelabelQueryFilter() { } + + /** 构造完整筛选条件;同时间单据再按主键排序,保持分页稳定。 */ + public static LambdaQueryWrapper build(String customerId, RelabelRequests.Query query) { + if (query.createdFrom() != null && query.createdTo() != null && query.createdFrom().isAfter(query.createdTo())) + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "createdFrom must not be after createdTo"); + var wrapper = new LambdaQueryWrapper() + .eq(StringUtils.hasText(customerId), RelabelApplication::getCustomerId, customerId) + .like(StringUtils.hasText(query.relabelNo()), RelabelApplication::getRelabelNo, query.relabelNo()) + .like(StringUtils.hasText(query.customerOrderNo()), RelabelApplication::getCustomerOrderNo, query.customerOrderNo()) + .eq(StringUtils.hasText(query.overseasWarehouseId()), RelabelApplication::getOverseasWarehouseId, query.overseasWarehouseId()) + .ge(query.createdFrom() != null, RelabelApplication::getCreatedAt, query.createdFrom()) + .le(query.createdTo() != null, RelabelApplication::getCreatedAt, query.createdTo()) + .apply(StringUtils.hasText(query.skuCode()), "EXISTS (SELECT 1 FROM ll_relabel_item ri WHERE ri.application_id=ll_relabel_application.id AND ri.customer_id=ll_relabel_application.customer_id AND (ri.sku_code LIKE CONCAT('%',{0},'%') OR JSON_SEARCH(CASE WHEN JSON_VALID(ri.sku_relabel_items_json) THEN ri.sku_relabel_items_json ELSE JSON_ARRAY() END, 'one', CONCAT('%',{0},'%'), NULL, '$[*].skuCode') IS NOT NULL))", query.skuCode()) + .orderByDesc(RelabelApplication::getCreatedAt).orderByDesc(RelabelApplication::getId); + String status = query.status() == null ? "" : query.status().trim(); + if ("PENDING_PROCESSING".equals(status)) wrapper.eq(RelabelApplication::getStatus, status); + else if ("COMPLETED".equals(status)) wrapper.in(RelabelApplication::getStatus, "READY_FOR_OUTBOUND", "COMPLETED"); + else if (StringUtils.hasText(status)) wrapper.eq(RelabelApplication::getStatus, status); + return wrapper; + } +} diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/repository/RelabelQuantityRepository.java b/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/repository/RelabelQuantityRepository.java new file mode 100644 index 000000000..77a0cb979 --- /dev/null +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/repository/RelabelQuantityRepository.java @@ -0,0 +1,31 @@ +package com.baiyue.lastleg.relabel.repository; + +import com.baiyue.lastleg.relabel.dto.RelabelRequests; +import com.baiyue.lastleg.relabel.entity.RelabelApplication; +import com.baiyue.lastleg.relabel.entity.RelabelItem; +import com.baiyue.lastleg.relabel.mapper.RelabelApplicationMapper; +import com.baiyue.lastleg.relabel.mapper.RelabelItemMapper; +import com.baiyue.lastleg.relabel.model.RelabelQueryFilter; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.stereotype.Repository; +import jakarta.annotation.Resource; +import java.util.List; + +/** 数量查询只读取本服务申请与箱任务,不跨服务读库存库。 */ +@Repository +public class RelabelQuantityRepository { + @Resource private RelabelApplicationMapper applications; + @Resource private RelabelItemMapper items; + + /** 读取全部筛选结果,不附加当前页限制。 */ + public List filtered(String customerId, RelabelRequests.Query query) { + return applications.selectList(RelabelQueryFilter.build(customerId, query)); + } + + /** 明细同时限定客户与申请,避免跨客户聚合关联。 */ + public List items(RelabelApplication application) { + return items.selectList(new LambdaQueryWrapper() + .eq(RelabelItem::getApplicationId, application.getId()) + .eq(RelabelItem::getCustomerId, application.getCustomerId())); + } +} diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/service/RelabelQuantityService.java b/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/service/RelabelQuantityService.java new file mode 100644 index 000000000..d270b043c --- /dev/null +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/service/RelabelQuantityService.java @@ -0,0 +1,89 @@ +package com.baiyue.lastleg.relabel.service; + +import com.baiyue.lastleg.relabel.dto.RelabelRequests; +import com.baiyue.lastleg.relabel.entity.RelabelItem; +import com.baiyue.lastleg.relabel.repository.RelabelQuantityRepository; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.*; + +/** 分开统计贴标件数、真实箱任务和未知维度,不按固定箱规换算。 */ +@Service +public class RelabelQuantityService { + @Resource private RelabelQuantityRepository repository; + @Resource private ObjectMapper objectMapper; + public record Quantity(Long labelPieceCount, Long cartonCount, int skuCount, boolean duplicateCarton, + String quantityUnit, Long sourcePalletCount, Long targetPalletCount) { } + public record Totals(long orderCount, long skuCount, long knownLabelPieceCount, long unknownPieceOrders, + long knownCartonCount, long unknownCartonOrders, + Map orders) { } + + /** 按全部筛选单据聚合;未知件数和箱数保留未知单数,不伪造为零。 */ + @Transactional(readOnly = true) + public Totals totals(String customerId, RelabelRequests.Query query) { + var dimensions = new LinkedHashMap(); + var skus = new HashSet(); + long pieces = 0, cartons = 0, unknownPieces = 0, unknownCartons = 0; + for (var application : repository.filtered(customerId, query)) { + var detail = repository.items(application); + Quantity quantity = measure(detail); + dimensions.put(application.getRelabelNo(), quantity); + detail.forEach(item -> collectSkus(item, skus)); + if (quantity.labelPieceCount() == null) unknownPieces++; else pieces = Math.addExact(pieces, quantity.labelPieceCount()); + if (quantity.cartonCount() == null) unknownCartons++; else cartons = Math.addExact(cartons, quantity.cartonCount()); + } + return new Totals(dimensions.size(), skus.size(), pieces, unknownPieces, cartons, unknownCartons, dimensions); + } + + /** 箱级任务按箱唛去重;历史重复关联不重复增加件数并显式告警。 */ + public Quantity measure(List items) { + if (items.isEmpty()) return new Quantity(null, null, 0, false, "UNKNOWN", null, null); + long pieces = 0; + boolean unknownPieces = false, bulk = false, duplicate = false, missingCarton = false; + var cartons = new HashSet(); + var piecesSeen = new HashSet(); + var skus = new HashSet(); + for (var item : items) { + collectSkus(item, skus); + String mark = item.getCartonMark() == null ? "" : item.getCartonMark().trim(); + if (mark.isEmpty()) missingCarton = true; + else if (!cartons.add(mark) && !"RETURN_BULK_SKU_LABEL".equals(item.getOperationType())) duplicate = true; + if ("RETURN_BULK_SKU_LABEL".equals(item.getOperationType())) { + bulk = true; + if (item.getNotifiedPackageCount() == null) unknownPieces = true; + else if (piecesSeen.add(mark + "|" + item.getSkuCode() + "|" + item.getNewSkuCode())) pieces = Math.addExact(pieces, item.getNotifiedPackageCount()); + else duplicate = true; + } else if ("CARTON_LABEL".equals(item.getOperationType())) { + // 只换箱唛不能推导商品件数,保留未提供口径。 + unknownPieces = true; + } else { + try { + var lines = objectMapper.readTree(Objects.requireNonNullElse(item.getSkuRelabelItemsJson(), "[]")); + if (!lines.isArray() || lines.isEmpty()) unknownPieces = true; + for (var line : lines) { + String key = mark + "|" + line.path("skuCode").asText() + "|" + line.path("newSkuCode").asText(); + if (!line.path("quantity").canConvertToLong()) unknownPieces = true; + else if (piecesSeen.add(key)) pieces = Math.addExact(pieces, line.path("quantity").asLong()); + } + } catch (Exception exception) { unknownPieces = true; } + } + } + // 按件退货来源可能是托盘或包裹标识,不能将标识数冒充真实箱数。 + return new Quantity(unknownPieces || duplicate ? null : pieces, bulk || missingCarton ? null : (long) cartons.size(), + skus.size(), duplicate, bulk ? "PIECE" : "CARTON", null, null); + } + + /** SKU种数来自子项;旧快照无子项时才采用旧SKU汇总字段。 */ + private void collectSkus(RelabelItem item, Set skus) { + try { + var lines = objectMapper.readTree(Objects.requireNonNullElse(item.getSkuRelabelItemsJson(), "[]")); + if (lines.isArray() && !lines.isEmpty()) { + for (var line : lines) if (!line.path("skuCode").asText().isBlank()) skus.add(line.path("skuCode").asText().trim()); + return; + } + } catch (Exception ignored) { /* 旧快照解析失败时只展示已有旧SKU,不推算件数。 */ } + for (var sku : Objects.requireNonNullElse(item.getSkuCode(), "").split(",")) if (!sku.isBlank()) skus.add(sku.trim()); + } +} diff --git a/lastleg-service/src/main/resources/openapi/relabel-quantities-v1.yaml b/lastleg-service/src/main/resources/openapi/relabel-quantities-v1.yaml new file mode 100644 index 000000000..4777b1eda --- /dev/null +++ b/lastleg-service/src/main/resources/openapi/relabel-quantities-v1.yaml @@ -0,0 +1,83 @@ +openapi: 3.0.3 +info: + title: 贴标申请数量维度 + version: 1.0.0 + description: 全部筛选结果汇总,不受 page/size 影响。件、箱、SKU分别统计;未知不能解释为零,禁止固定箱规换算。 +paths: + /api/platform/v1/last-leg/relabel-applications/quantity-summary: + get: + operationId: platformRelabelQuantitySummary + description: 平台列表权限 platform:overseas-warehouse:relabel:list;范围遵循平台认证访问域。 + parameters: + - $ref: '#/components/parameters/RelabelNo' + - $ref: '#/components/parameters/CustomerOrderNo' + - $ref: '#/components/parameters/SkuCode' + - $ref: '#/components/parameters/Status' + - $ref: '#/components/parameters/Warehouse' + - $ref: '#/components/parameters/CreatedFrom' + - $ref: '#/components/parameters/CreatedTo' + responses: + '200': + $ref: '#/components/responses/Summary' + /api/merchant/v1/last-leg/relabel-applications/quantity-summary: + get: + operationId: merchantRelabelQuantitySummary + description: 仅认证客户范围;不接受请求参数覆盖客户身份。权限 merchant:warehouse:relabel:list。 + parameters: + - $ref: '#/components/parameters/RelabelNo' + - $ref: '#/components/parameters/CustomerOrderNo' + - $ref: '#/components/parameters/SkuCode' + - $ref: '#/components/parameters/Status' + - $ref: '#/components/parameters/Warehouse' + - $ref: '#/components/parameters/CreatedFrom' + - $ref: '#/components/parameters/CreatedTo' + responses: + '200': + $ref: '#/components/responses/Summary' +components: + parameters: + RelabelNo: {name: relabelNo, in: query, schema: {type: string}, description: 单号模糊匹配} + CustomerOrderNo: {name: customerOrderNo, in: query, schema: {type: string}} + SkuCode: {name: skuCode, in: query, schema: {type: string}, description: 旧SKU字段或SKU子项匹配} + Status: {name: status, in: query, schema: {type: string}, description: PENDING_PROCESSING精确匹配;COMPLETED包含READY_FOR_OUTBOUND与COMPLETED} + Warehouse: {name: overseasWarehouseId, in: query, schema: {type: string}} + CreatedFrom: {name: createdFrom, in: query, schema: {type: string, format: date-time}} + CreatedTo: {name: createdTo, in: query, schema: {type: string, format: date-time}} + responses: + Summary: + description: 标准ApiResponse;code为200时读取data + content: + application/json: + schema: + type: object + properties: + code: {type: string} + message: {type: string} + requestId: {type: string} + traceId: {type: string} + data: {$ref: '#/components/schemas/Totals'} + schemas: + Totals: + type: object + required: [orderCount, skuCount, knownLabelPieceCount, unknownPieceOrders, knownCartonCount, unknownCartonOrders, orders] + properties: + orderCount: {type: integer, format: int64, minimum: 0} + skuCount: {type: integer, format: int64, minimum: 0, description: 全部筛选结果的不同旧SKU数} + knownLabelPieceCount: {type: integer, format: int64, minimum: 0} + unknownPieceOrders: {type: integer, format: int64, minimum: 0} + knownCartonCount: {type: integer, format: int64, minimum: 0} + unknownCartonOrders: {type: integer, format: int64, minimum: 0} + orders: + type: object + description: 以换标业务单号为键,覆盖全部筛选单据 + additionalProperties: {$ref: '#/components/schemas/Quantity'} + Quantity: + type: object + properties: + labelPieceCount: {type: integer, format: int64, nullable: true, description: 按件任务采用通知件数;箱任务采用SKU子项件数;重复关联或缺失为null} + cartonCount: {type: integer, format: int64, nullable: true, description: 箱级任务按箱唛去重;按件来源标识不作为箱数} + skuCount: {type: integer, minimum: 0} + duplicateCarton: {type: boolean, description: 历史重复任务关联提示,不将同一来源不同SKU按件任务视为重复} + quantityUnit: {type: string, enum: [PIECE, CARTON, UNKNOWN]} + sourcePalletCount: {type: integer, format: int64, nullable: true, description: 缺少不可变原托快照时为null} + targetPalletCount: {type: integer, format: int64, nullable: true, description: 未提供汇总,详情以本轮有效绑定历史为准} diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/discard/CargoDiscardTransferCartonMapperTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/discard/CargoDiscardTransferCartonMapperTest.java new file mode 100644 index 000000000..3df612690 --- /dev/null +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/discard/CargoDiscardTransferCartonMapperTest.java @@ -0,0 +1,61 @@ +package com.baiyue.lastleg.discard; + +import com.baiyue.lastleg.discard.mapper.CargoDiscardInventoryMapper; +import org.apache.ibatis.mapping.Environment; +import org.apache.ibatis.session.Configuration; +import org.apache.ibatis.session.SqlSessionFactoryBuilder; +import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; +import org.junit.jupiter.api.Test; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import java.util.List; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +/** 使用真实 SQL 核对转运实收箱与库存仓位的关联及废弃状态流转。 */ +class CargoDiscardTransferCartonMapperTest { + /** 同批多托盘、多 SKU 时仅返回本仓位实收箱,排除预报、短收、占用及其他客户的箱。 */ + @Test + void receivedBoxesFollowTheirActualPalletAndSku() { + var source = new DriverManagerDataSource("jdbc:h2:mem:" + UUID.randomUUID() + ";MODE=MySQL;DB_CLOSE_DELAY=-1", "sa", ""); + var db = new JdbcTemplate(source); + db.execute("CREATE TABLE ll_inbound_plan_carton(id BIGINT,customer_id VARCHAR(20),order_id BIGINT,warehouse_pallet_id BIGINT,status VARCHAR(30),received_at TIMESTAMP,destination_warehouse_code VARCHAR(20),carton_mark VARCHAR(80),sku_code VARCHAR(20))"); + db.execute("CREATE TABLE ll_inventory_balance(id BIGINT,customer_id VARCHAR(20),inbound_order_id BIGINT,destination_warehouse_code VARCHAR(20),sku_code VARCHAR(20))"); + db.execute("CREATE TABLE ll_inventory_position(id BIGINT,customer_id VARCHAR(20),balance_id BIGINT,pallet_id BIGINT,batch_no VARCHAR(80),overseas_warehouse_id VARCHAR(20))"); + db.execute("CREATE TABLE ll_warehouse_transfer_order(id BIGINT,customer_id VARCHAR(20),inbound_order_id BIGINT,transfer_no VARCHAR(80),operating_warehouse_id VARCHAR(20))"); + db.execute("CREATE TABLE ll_warehouse_transfer_pallet(id BIGINT,customer_id VARCHAR(20),transfer_order_id BIGINT,warehouse_pallet_id BIGINT,status VARCHAR(30))"); + db.execute("CREATE TABLE ll_warehouse_transfer_item(id BIGINT,customer_id VARCHAR(20),transfer_order_id BIGINT,sku_code VARCHAR(20))"); + db.execute("CREATE TABLE ll_warehouse_transfer_carton(id BIGINT,customer_id VARCHAR(20),transfer_order_id BIGINT,transfer_item_id BIGINT,transfer_pallet_id BIGINT,status VARCHAR(30),carton_mark VARCHAR(80),updated_at TIMESTAMP)"); + db.update("INSERT INTO ll_inventory_balance VALUES(1,'C',10,'FBA','SKU'),(2,'C',10,'FBA','OTHER')"); + db.update("INSERT INTO ll_inventory_position VALUES(41,'C',1,100,'ZY-BYWL-261019194301','W'),(42,'C',1,200,'ZY-BYWL-261019194301','W'),(43,'C',2,100,'ZY-BYWL-261019194301','W')"); + db.update("INSERT INTO ll_warehouse_transfer_order VALUES(10,'C',10,'ZY-BYWL-261019194301','W')"); + db.update("INSERT INTO ll_warehouse_transfer_pallet VALUES(11,'C',10,100,'COMPLETED'),(12,'C',10,200,'COMPLETED'),(13,'C',10,100,'BOUND')"); + db.update("INSERT INTO ll_warehouse_transfer_item VALUES(21,'C',10,'SKU'),(22,'C',10,'OTHER')"); + db.update("INSERT INTO ll_warehouse_transfer_carton(id,customer_id,transfer_order_id,transfer_item_id,transfer_pallet_id,status,carton_mark) VALUES " + + "(1,'C',10,21,11,'COUNTED','BOX-1'),(2,'C',10,21,11,'COUNTED','BOX-2')," + + "(3,'C',10,21,12,'COUNTED','OTHER-PALLET'),(4,'C',10,22,11,'COUNTED','OTHER-SKU')," + + "(5,'C',10,21,11,'EXPECTED','FORECAST'),(6,'C',10,21,11,'NOT_RECEIVED','SHORT')," + + "(7,'C',10,21,11,'DISCARD_PENDING','HELD'),(8,'OTHER',10,21,11,'COUNTED','FOREIGN')," + + "(9,'C',10,21,13,'COUNTED','NOT-STOCKED')"); + var config = new Configuration(new Environment("test", new JdbcTransactionFactory(), source)); + config.setMapUnderscoreToCamelCase(true); + config.addMapper(CargoDiscardInventoryMapper.class); + try (var session = new SqlSessionFactoryBuilder().build(config).openSession(true)) { + var mapper = session.getMapper(CargoDiscardInventoryMapper.class); + assertEquals(List.of("BOX-1", "BOX-2"), mapper.genericCartons("C", 41L).stream().map(c -> c.getCartonMark()).toList()); + assertEquals(List.of("OTHER-PALLET"), mapper.genericCartons("C", 42L).stream().map(c -> c.getCartonMark()).toList()); + assertEquals(List.of("OTHER-SKU"), mapper.genericCartons("C", 43L).stream().map(c -> c.getCartonMark()).toList()); + assertTrue(mapper.genericCartons("OTHER", 41L).isEmpty()); + assertEquals(1, mapper.changeTransferCartonStatus("C", 2L, "COUNTED", "DISCARD_PENDING")); + assertEquals(1, mapper.genericCartons("C", 41L).size()); + assertEquals(0, mapper.changeTransferCartonStatus("OTHER", 2L, "DISCARD_PENDING", "COUNTED")); + assertEquals(1, mapper.changeTransferCartonStatus("C", 2L, "DISCARD_PENDING", "COUNTED")); + assertEquals(2, mapper.genericCartons("C", 41L).size()); + assertEquals(1, mapper.changeTransferCartonStatus("C", 2L, "COUNTED", "DISCARD_PENDING")); + assertEquals(1, mapper.changeTransferCartonStatus("C", 2L, "DISCARD_PENDING", "DISCARDED")); + assertEquals(1, mapper.genericCartons("C", 41L).size()); + } + } +} diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/discard/controller/MerchantCargoDiscardControllerTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/discard/controller/MerchantCargoDiscardControllerTest.java index d61b43786..2defcb9df 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/discard/controller/MerchantCargoDiscardControllerTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/discard/controller/MerchantCargoDiscardControllerTest.java @@ -34,7 +34,7 @@ class MerchantCargoDiscardControllerTest { private final CargoDiscardService service = mock(CargoDiscardService.class); private final MerchantCargoDiscardController controller = controller(); private final CargoDiscardRequests.Query query = new CargoDiscardRequests.Query( - 1, 20, null, null, null, null, null, null); + 1, 20, null, null, null, null, null, null, null, null); @Test void merchantQueriesUseOnlyAuthenticatedTenant() { diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/discard/service/CargoDiscardStatisticsServiceTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/discard/service/CargoDiscardStatisticsServiceTest.java new file mode 100644 index 000000000..6081879d2 --- /dev/null +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/discard/service/CargoDiscardStatisticsServiceTest.java @@ -0,0 +1,60 @@ +package com.baiyue.lastleg.discard.service; + +import com.baiyue.lastleg.discard.dto.CargoDiscardRequests; +import com.baiyue.lastleg.discard.entity.CargoDiscardApplication; +import com.baiyue.lastleg.discard.entity.CargoDiscardItem; +import com.baiyue.lastleg.discard.repository.CargoDiscardQueryRepository; +import com.baiyue.lastleg.discard.repository.CargoDiscardDimensionRepository; +import org.junit.jupiter.api.Test; +import org.springframework.test.util.ReflectionTestUtils; +import java.util.List; +import static org.mockito.Mockito.*; +import static org.junit.jupiter.api.Assertions.*; + +/** 全筛选统计不能受当前页影响,混装退货箱和缺失维度必须分别处理。 */ +class CargoDiscardStatisticsServiceTest { + private final CargoDiscardQueryRepository queries = mock(CargoDiscardQueryRepository.class); + private final CargoDiscardDimensionRepository dimensions = mock(CargoDiscardDimensionRepository.class); + private final CargoDiscardStatisticsService service = new CargoDiscardStatisticsService(); + private final CargoDiscardRequests.Query query = new CargoDiscardRequests.Query(1, 1, null, null, null, null, null, null, null, null); + + /** 给当前服务注入隔离只读仓储。 */ + CargoDiscardStatisticsServiceTest() { + ReflectionTestUtils.setField(service, "queries", queries); + ReflectionTestUtils.setField(service, "dimensions", dimensions); + } + /** 合成两票同托盘退货,第一页大小为一仍汇总两票;同箱SKU不重复计箱。 */ + @Test void allFilteredOrdersDeduplicateMixedCartonsAndPallets() { + var a = application(1L); var b = application(2L); + when(queries.list("C", query)).thenReturn(List.of(a, b)); + when(dimensions.items("C", 1L)).thenReturn(List.of(item(10L, "A", 2, 2), item(10L, "B", 3, 3))); + when(dimensions.items("C", 2L)).thenReturn(List.of(item(20L, "A", 7, null))); + when(dimensions.pallets("C", 1L)).thenReturn(List.of("P", "P")); + when(dimensions.pallets("C", 2L)).thenReturn(List.of("P")); + var result = service.statistics("C", query); + assertEquals(2, result.orderCount()); assertEquals(2, result.skuCount()); + assertEquals(2, result.requestedPackages()); assertEquals(1L, result.actualPackages()); + assertEquals(12L, result.requestedPieces()); assertEquals(5L, result.actualPieces()); assertEquals(1, result.palletCount()); + } + /** 非退货箱级记录不包含件数,实际零与未作业空值必须区分。 */ + @Test void unknownPiecesAndLoosePalletNeverBecomeZero() { + when(queries.list("C", query)).thenReturn(List.of(application(1L))); + when(dimensions.items("C", 1L)).thenReturn(List.of(item(null, "A", 2, 0))); + when(dimensions.pallets("C", 1L)).thenReturn(List.of("")); + var result = service.statistics("C", query); + assertEquals(2, result.requestedPackages()); assertEquals(0L, result.actualPackages()); + assertNull(result.requestedPieces()); assertNull(result.actualPieces()); assertNull(result.palletCount()); + } + /** 空筛选有零票零申请箱,但不能伪造实际作业或商品、托盘事实。 */ + @Test void emptySelectionHasNoInventedActualFacts() { + when(queries.list("C", query)).thenReturn(List.of()); + var result = service.statistics("C", query); + assertEquals(0, result.orderCount()); assertEquals(0, result.requestedPackages()); + assertNull(result.actualPackages()); assertNull(result.requestedPieces()); assertNull(result.palletCount()); + verifyNoInteractions(dimensions); + } + /** 创建一票同客户同仓的隔离单据。 */ + private static CargoDiscardApplication application(long id) { var a = new CargoDiscardApplication(); a.setId(id); a.setCustomerId("C"); a.setOverseasWarehouseId("W"); return a; } + /** 明确退货件数和实际值,不引入固定箱规。 */ + private static CargoDiscardItem item(Long carton, String sku, int planned, Integer actual) { var i = new CargoDiscardItem(); i.setReturnCartonId(carton); i.setSkuCode(sku); i.setDiscardPackages(planned); i.setActualDiscardPackages(actual); return i; } +} diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/relabel/service/RelabelQuantityServiceTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/relabel/service/RelabelQuantityServiceTest.java new file mode 100644 index 000000000..f2411c501 --- /dev/null +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/relabel/service/RelabelQuantityServiceTest.java @@ -0,0 +1,75 @@ +package com.baiyue.lastleg.relabel.service; + +import com.baiyue.lastleg.relabel.entity.RelabelItem; +import com.baiyue.lastleg.relabel.entity.RelabelApplication; +import com.baiyue.lastleg.relabel.repository.RelabelQuantityRepository; +import com.baiyue.lastleg.relabel.dto.RelabelRequests; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import org.springframework.test.util.ReflectionTestUtils; +import java.util.List; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class RelabelQuantityServiceTest { + /** 以真实对象测试件数、箱数的不同业务口径。 */ + private RelabelQuantityService service() { + var service = new RelabelQuantityService(); + ReflectionTestUtils.setField(service, "objectMapper", new ObjectMapper()); + return service; + } + /** 构造单个箱任务,件数由SKU子项提供。 */ + private RelabelItem item(String type, String mark, int quantity) { + var item = new RelabelItem(); + item.setOperationType(type); item.setCartonMark(mark); item.setSkuCode("A"); + item.setNotifiedPackageCount(quantity); item.setTotalPackageCount(quantity); + item.setSkuRelabelItemsJson("[{\"skuCode\":\"A\",\"newSkuCode\":\"B\",\"quantity\":8}]"); + return item; + } + @Test void bulkPiecesNeverBecomeCartons() { + var result = service().measure(List.of(item("RETURN_BULK_SKU_LABEL", "PALLET-1", 50))); + assertEquals(50L, result.labelPieceCount()); assertNull(result.cartonCount()); + assertNull(result.sourcePalletCount()); assertNull(result.targetPalletCount()); + } + @Test void skuPiecesAndCartonCountAreIndependent() { + var result = service().measure(List.of(item("SKU_LABEL", "BOX-1", 1))); + assertEquals(8L, result.labelPieceCount()); assertEquals(1L, result.cartonCount()); assertEquals(1, result.skuCount()); + } + @Test void duplicateAssociationIsFlaggedAndCannotInflateCartonsOrGuessPieces() { + var result = service().measure(List.of(item("SKU_LABEL", "BOX-1", 1), item("SKU_LABEL", "BOX-1", 1))); + assertTrue(result.duplicateCarton()); assertEquals(1L, result.cartonCount()); assertNull(result.labelPieceCount()); + } + @Test void cartonOnlyAndMissingDataDoNotInventZeroPieces() { + var result = service().measure(List.of(item("CARTON_LABEL", "BOX-1", 1))); + assertNull(result.labelPieceCount()); assertEquals(1L, result.cartonCount()); + assertNull(service().measure(List.of()).cartonCount()); + } + @Test void mixedStagesDoNotDoubleCountTheBox() { + var result = service().measure(List.of(item("CARTON_AND_SKU", "BOX-1", 1))); + assertEquals(1L, result.cartonCount()); assertEquals(8L, result.labelPieceCount()); + } + @Test void differentBulkSkusInOneSourceAreNotDuplicateTasks() { + var first = item("RETURN_BULK_SKU_LABEL", "PALLET-1", 2); + var second = item("RETURN_BULK_SKU_LABEL", "PALLET-1", 3); + second.setSkuCode("C"); second.setSkuRelabelItemsJson("[]"); first.setSkuRelabelItemsJson("[]"); + var result = service().measure(List.of(first, second)); + assertFalse(result.duplicateCarton()); assertEquals(5L, result.labelPieceCount()); + assertNull(result.cartonCount()); assertEquals(2, result.skuCount()); + } + @Test void totalsUseAllFilteredApplicationsAndPreserveUnknownDimensions() { + var service = service(); var repository = mock(RelabelQuantityRepository.class); + ReflectionTestUtils.setField(service, "repository", repository); + var query = new RelabelRequests.Query(2, 1, null, null, "A", null, null, null, null); + var first = new RelabelApplication(); first.setRelabelNo("R1"); first.setCustomerId("C1"); + var second = new RelabelApplication(); second.setRelabelNo("R2"); second.setCustomerId("C1"); + when(repository.filtered("C1", query)).thenReturn(List.of(first, second)); + when(repository.items(first)).thenReturn(List.of(item("RETURN_BULK_SKU_LABEL", "P1", 50))); + when(repository.items(second)).thenReturn(List.of(item("CARTON_LABEL", "B1", 1))); + var totals = service.totals("C1", query); + assertEquals(2, totals.orderCount()); assertEquals(50, totals.knownLabelPieceCount()); + assertEquals(1, totals.unknownPieceOrders()); assertEquals(1, totals.knownCartonCount()); + assertEquals(1, totals.unknownCartonOrders()); assertEquals(1, totals.skuCount()); + verify(repository).filtered("C1", query); + assertEquals(2, totals.orders().size()); + } +} diff --git a/order/src/main/java/com/baiyue/order/dto/UnifiedOrderStatusCountQuery.java b/order/src/main/java/com/baiyue/order/dto/UnifiedOrderStatusCountQuery.java new file mode 100644 index 000000000..76776ae1b --- /dev/null +++ b/order/src/main/java/com/baiyue/order/dto/UnifiedOrderStatusCountQuery.java @@ -0,0 +1,40 @@ +package com.baiyue.order.dto; + +import jakarta.validation.constraints.Size; +import jakarta.validation.constraints.Pattern; +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** 页签统计独立接收筛选条件,避免未传分页时基本类型构造绑定失败。 */ +public record UnifiedOrderStatusCountQuery( + @Size(max = 64) String keyword, + @Size(max = 64) String orderNo, + Long customerId, + Long receivingWarehouseId, + Long destinationWarehouseId, + @Size(max = 64) String inboundCode, + @Size(max = 32) String internalOrderStatus, + LocalDate expectedArrivalDate, + @Size(max = 32) String feeReviewStatus, + @Size(max = 128) String channelName, + @Size(max = 64) String containerNo, + @Size(max = 64) String cabinetNo, + LocalDate sailingDate, + Boolean loaded, + Boolean fullContainer, + @Size(max = 32) String measurementReviewStatus, + @Size(max = 64) String fbaCode, + LocalDateTime createdFrom, + LocalDateTime createdTo, + @Schema(allowableValues = {"TAX_REFUND", "BUY_DECLARATION"}) + @Pattern(regexp = "TAX_REFUND|BUY_DECLARATION") String taxMode +) { + /** 复用列表查询条件,统计不受当前页签和分页影响。 */ + public UnifiedOrderQuery toOrderQuery() { + return new UnifiedOrderQuery(keyword, orderNo, null, customerId, receivingWarehouseId, + destinationWarehouseId, inboundCode, internalOrderStatus, expectedArrivalDate, + feeReviewStatus, channelName, containerNo, cabinetNo, sailingDate, loaded, fullContainer, + measurementReviewStatus, fbaCode, createdFrom, createdTo, 1, 200, taxMode); + } +} diff --git a/order/src/test/java/com/baiyue/order/controller/UnifiedOrderStatusCountBindingTest.java b/order/src/test/java/com/baiyue/order/controller/UnifiedOrderStatusCountBindingTest.java new file mode 100644 index 000000000..e4464e347 --- /dev/null +++ b/order/src/test/java/com/baiyue/order/controller/UnifiedOrderStatusCountBindingTest.java @@ -0,0 +1,91 @@ +package com.baiyue.order.controller; + +import com.baiyue.common.security.AuthenticatedUser; +import com.baiyue.order.dto.UnifiedOrderQuery; +import com.baiyue.order.service.UnifiedOrderQueryService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.core.MethodParameter; +import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; +import java.time.LocalDateTime; +import java.util.Map; +import java.util.Set; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +class UnifiedOrderStatusCountBindingTest { + private UnifiedOrderQueryService service; + private MockMvc mvc; + + /** 使用真实 MVC 构造绑定,复现浏览器不传分页的调用。 */ + @BeforeEach + void setup() { + service = mock(UnifiedOrderQueryService.class); + when(service.statusCounts(any(), any())).thenReturn( + new UnifiedOrderQueryService.StatusCounts(Map.of("WAIT_WEIGHT_CONFIRM", 125L, "SIGNED", 0L))); + var controller = new PlatformUnifiedOrderController(); + ReflectionTestUtils.setField(controller, "service", service); + mvc = MockMvcBuilders.standaloneSetup(controller).setCustomArgumentResolvers(new HandlerMethodArgumentResolver() { + /** 仅为测试注入已认证的平台身份。 */ + public boolean supportsParameter(MethodParameter p) { return p.getParameterType() == AuthenticatedUser.class; } + /** 保持平台作用域守卫正常执行。 */ + public Object resolveArgument(MethodParameter p, ModelAndViewContainer c, NativeWebRequest r, WebDataBinderFactory f) { + return new AuthenticatedUser(1L, 0L, null, 1L, "operator", "PLATFORM", "WEB", Set.of("platform:order:list")); + } + }).build(); + } + + /** 不传分页时正常返回,并保留零数量。 */ + @Test + void acceptsRequestWithoutPagination() throws Exception { + mvc.perform(get("/api/platform/v1/orders/status-counts")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.data.counts.WAIT_WEIGHT_CONFIRM").value(125)) + .andExpect(jsonPath("$.data.counts.SIGNED").value(0)); + var query = org.mockito.ArgumentCaptor.forClass(UnifiedOrderQuery.class); + verify(service).statusCounts(isNull(), query.capture()); + assertThat(query.getValue().mainStatus()).isNull(); + } + + /** 筛选值完整保留,外部附带的页签和分页不会缩小统计范围。 */ + @Test + void preservesFiltersAndIgnoresPaginationAndStatus() throws Exception { + mvc.perform(get("/api/platform/v1/orders/status-counts") + .param("tenantId", "11").param("customerId", "11").param("loaded", "false") + .param("fullContainer", "false").param("taxMode", "TAX_REFUND") + .param("fbaCode", "FBA123").param("measurementReviewStatus", "APPROVED") + .param("createdFrom", "2026-10-01T00:00:00") + .param("mainStatus", "LOADED").param("page", "null").param("size", "null")) + .andExpect(status().isOk()); + var captured = org.mockito.ArgumentCaptor.forClass(UnifiedOrderQuery.class); + verify(service).statusCounts(eq(11L), captured.capture()); + var query = captured.getValue(); + assertThat(query.customerId()).isEqualTo(11L); + assertThat(query.loaded()).isFalse(); + assertThat(query.fullContainer()).isFalse(); + assertThat(query.taxMode()).isEqualTo("TAX_REFUND"); + assertThat(query.fbaCode()).isEqualTo("FBA123"); + assertThat(query.measurementReviewStatus()).isEqualTo("APPROVED"); + assertThat(query.createdFrom()).isEqualTo(LocalDateTime.of(2026, 10, 1, 0, 0)); + assertThat(query.mainStatus()).isNull(); + assertThat(query.page()).isEqualTo(1); + assertThat(query.size()).isEqualTo(200); + } + + /** 独立统计对象仍执行原有筛选值校验。 */ + @Test + void rejectsInvalidFilter() throws Exception { + mvc.perform(get("/api/platform/v1/orders/status-counts").param("taxMode", "INVALID")) + .andExpect(status().isBadRequest()); + verifyNoInteractions(service); + } +} diff --git a/output/local-schema-repair/actual-changes.json b/output/local-schema-repair/actual-changes.json new file mode 100644 index 000000000..bc1a05aa7 --- /dev/null +++ b/output/local-schema-repair/actual-changes.json @@ -0,0 +1,224 @@ +{ + "baiyue_lastleg": { + "createdTables": [ + "event_delivery_retry_audit", + "ll_appointment_cargo_verification", + "ll_appointment_followup", + "ll_appointment_impact", + "ll_appointment_impact_history", + "ll_delivery_facts_changed", + "ll_dispatch_command", + "ll_dispatch_delivery_arrangement", + "ll_dispatch_draft_command", + "ll_dispatch_history", + "ll_fba_appointment_command", + "ll_fba_receiving_agreement", + "ll_fba_receiving_change", + "ll_fba_receiving_member", + "ll_fba_receiving_plan", + "ll_fba_receiving_revision", + "ll_procurement_budget_authorization", + "ll_procurement_carton", + "ll_procurement_carton_source", + "ll_procurement_closure", + "ll_procurement_closure_item", + "ll_procurement_command", + "ll_procurement_control_note", + "ll_procurement_disposition", + "ll_procurement_estimate_review", + "ll_procurement_fee_correction", + "ll_procurement_fee_correction_item", + "ll_procurement_flow", + "ll_procurement_label_item", + "ll_procurement_label_set", + "ll_procurement_manifest", + "ll_procurement_receipt", + "ll_procurement_repack", + "ll_procurement_shipment", + "ll_procurement_shipment_item", + "ll_procurement_wallet_attempt", + "ll_return_carton_stock_receipt", + "ll_selfop_inventory_daily", + "ll_selfop_inventory_day_version", + "ll_selfop_inventory_flow", + "ll_selfop_inventory_snapshot", + "ll_selfop_outbound_discovery_scope", + "ll_selfop_outbound_item", + "ll_selfop_outbound_order", + "ll_selfop_owner", + "ll_selfop_product", + "ll_selfop_sku_daily_sales", + "ll_selfop_sku_profile", + "ll_selfop_sync_run", + "ll_selfop_sync_scope", + "ll_selfop_sync_stage", + "ll_selfop_sync_task", + "ll_selfop_warehouse_daily_sales" + ], + "addedColumns": [ + "ll_cargo_discard_carton.source_type", + "ll_dispatch_draft.warehouse_id", + "ll_dispatch_draft.record_version", + "ll_dispatch_draft.sources_json", + "ll_dispatch_draft_container.source_keys_json", + "ll_dispatch_item.customer_name", + "ll_dispatch_item.source_key", + "ll_dispatch_item.source_version", + "ll_dispatch_item.source_snapshot_json", + "ll_dispatch_order.trip_id", + "ll_dispatch_order.overseas_warehouse_code", + "ll_dispatch_order.stage", + "ll_dispatch_order.record_version", + "ll_dispatch_order.cargo_revision", + "ll_dispatch_order.cargo_hash", + "ll_dispatch_order.review_state", + "ll_dispatch_order.review_round", + "ll_dispatch_order.review_basis_hash", + "ll_dispatch_order.dispatch_review_json", + "ll_dispatch_order.loading_review_json", + "ll_dispatch_order.resources_json", + "ll_dispatch_order.planned_departure_at", + "ll_dispatch_order.loading_completed_at", + "ll_dispatch_order.loading_completion_hash", + "ll_dispatch_order.loading_confirmation_json", + "ll_dispatch_order.arrangement_key", + "ll_dispatch_order.arrangement_business_hash", + "ll_dispatch_order.departed_at", + "ll_dispatch_order.delivery_completed_at", + "ll_dispatch_order.remark", + "ll_dispatch_pallet_lock.active_warehouse_pallet_id", + "ll_dropship_carton.product_quantity", + "ll_dropship_order_profile.manifest_version", + "ll_dropship_order_profile.manifest_package_count", + "ll_dropship_order_profile.manifest_fragment_count", + "ll_dropship_order_profile.manifest_hash", + "ll_exception_order.return_context_json", + "ll_exception_return_item.return_carton_id", + "ll_exception_return_item.return_carton_mark", + "ll_exception_return_item.received_packages", + "ll_inbound_fba_appointment.confirmation_no", + "ll_inbound_fba_appointment.planned_date", + "ll_inbound_fba_appointment.planned_at", + "ll_inbound_fba_appointment.planned_end_at", + "ll_inbound_fba_appointment.appointment_start_utc", + "ll_inbound_fba_appointment.appointment_end_utc", + "ll_inbound_fba_appointment.timezone", + "ll_inbound_fba_appointment.origin_warehouse_id", + "ll_inbound_fba_appointment.replacement_keys_json", + "ll_inbound_fba_appointment.repartition_reason", + "ll_inbound_fba_appointment_item.cargo_verification_version", + "ll_inbound_fba_appointment_item.shipment_references_json", + "ll_local_looseboard_order.product_name", + "ll_local_looseboard_order.estimated_pallet_count", + "ll_local_looseboard_order.origin_contact_name", + "ll_local_looseboard_order.origin_contact_phone", + "ll_local_looseboard_order.destination_contact_name", + "ll_local_looseboard_order.destination_contact_phone", + "ll_local_looseboard_order.pickup_at", + "ll_local_looseboard_order.delivery_at", + "ll_outbound_pallet_item.dispatch_item_id", + "ll_outbound_pallet_item.source_attribution_id", + "ll_outbound_pallet_item.source_order_id", + "ll_outbound_pallet_item.source_inventory_position_id", + "ll_outbound_pallet_item.source_return_receipt_id", + "ll_outbound_pallet_item.source_return_carton_id", + "ll_overseas_procurement_fee.purpose", + "ll_overseas_procurement_fee.confirmation_origin", + "ll_overseas_procurement_fee.fee_version", + "ll_overseas_procurement_fee.active", + "ll_overseas_procurement_fee.determination", + "ll_overseas_procurement_fee.original_currency", + "ll_overseas_procurement_fee.original_amount", + "ll_overseas_procurement_fee.exchange_rate", + "ll_overseas_procurement_fee.exchange_rate_month", + "ll_overseas_procurement_fee.business_date", + "ll_overseas_procurement_fee.wallet_business_id", + "ll_overseas_procurement_fee.wallet_business_no", + "ll_overseas_procurement_fee.wallet_hold_id", + "ll_overseas_procurement_fee.wallet_ledger_id", + "ll_overseas_procurement_fee.settled_command_event_id", + "ll_overseas_procurement_fee.source_fee_id", + "ll_overseas_procurement_fee.parent_fee_id", + "ll_overseas_procurement_fee.request_hash", + "ll_overseas_procurement_status_history.operation_type", + "ll_overseas_procurement_status_history.change_detail", + "ll_receiving_container_session.source_container_booking_id", + "ll_receiving_container_session.container_fact_hash", + "ll_receiving_container_session.overseas_warehouse_code", + "ll_return_inventory_outbound_movement.return_sku_quantity", + "ll_us_truck_order.vehicle_type", + "ll_us_truck_order.origin_contact_name", + "ll_us_truck_order.origin_contact_phone", + "ll_us_truck_order.destination_contact_name", + "ll_us_truck_order.destination_contact_phone", + "ll_us_truck_order.pickup_at", + "ll_us_truck_order.delivery_at" + ], + "addedIndexes": [ + "ll_cargo_discard_item.uk_ll_discard_position_sku", + "ll_dispatch_draft_container.uk_ll_dispatch_draft_container_sequence", + "ll_dispatch_order.uk_dispatch_trip", + "ll_dispatch_pallet_lock.uk_ll_dispatch_active_warehouse_pallet", + "ll_dispatch_pda_pick_order.idx_dispatch_pick_return_receipt", + "ll_dropship_order_profile.idx_ll_dropship_profile_manifest", + "ll_dropship_sku_inventory.uk_ll_dropship_sku_inventory", + "ll_exception_order.idx_ll_exception_delivery_return", + "ll_exception_return_item.uk_ll_exception_return_carton", + "ll_fleet_trip_dispatch.uk_fleet_trip_dispatch_trip", + "ll_inbound_fba_appointment.idx_ll_fba_appointment_planned", + "ll_inbound_fba_appointment_item.idx_ll_fba_active_source", + "ll_inbound_fba_appointment_item.idx_ll_fba_active_order", + "ll_inbound_plan_pallet.idx_ll_inbound_pallet_no", + "ll_outbound_pallet_item.uk_outbound_source_attribution", + "ll_overseas_procurement_fee.uk_ll_procurement_fee_version", + "ll_return_packing_plan.idx_ll_return_packing_plan_warehouse", + "ll_warehouse_transfer_inventory_allocation.idx_ll_wh_transfer_allocation_position" + ] + }, + "baiyue_firstleg": { + "createdTables": [ + "event_delivery_retry_audit", + "fl_chargeable_weight_confirmation", + "fl_customs_broker_submission", + "fl_customs_clearance_result", + "fl_customs_completion_action_history", + "fl_customs_declaration_batch", + "fl_sailing", + "fl_sailing_assignment", + "fl_sailing_booking_link", + "fl_sailing_channel", + "fl_sailing_history", + "fl_sailing_inbound_volume_forecast", + "fl_sailing_receipt_batch_fact", + "fl_sailing_template" + ], + "addedColumns": [ + "fl_customs_completion_document.customer_confirm_status", + "fl_customs_completion_document.customer_confirmed_by", + "fl_customs_completion_document.customer_confirmed_by_name", + "fl_customs_completion_document.customer_confirmed_at", + "fl_customs_completion_document.customer_reject_reason", + "fl_fee_item.default_price" + ], + "addedIndexes": [ + "fl_carrier_schedule_node_fact.idx_container_shipping_node_timeline", + "fl_container_booking.uk_container_booking_ocean_container", + "fl_container_booking.idx_container_booking_container_no", + "fl_container_booking.idx_container_booking_merge", + "fl_container_booking.idx_container_booking_transit_summary", + "fl_container_fee_detail.idx_container_fee_review", + "fl_container_transport_history.uk_container_transport_history_operation", + "fl_customer_charge_rule.idx_charge_rule_initialization", + "fl_inbound_measurement.idx_measure_inbound_status_id", + "fl_inbound_measurement_item.idx_measure_item_candidate", + "fl_inbound_order.idx_inbound_smart_loading", + "fl_inbound_split_item.idx_inbound_split_candidate", + "fl_loading_plan_item.uk_loading_item_plan_assignment", + "fl_loading_plan_item.idx_loading_item_candidate", + "fl_loading_plan_item.idx_loading_item_pallet", + "fl_ocean_booking.uk_ocean_booking_bill_of_lading", + "fl_truck_appointment.uk_truck_active_ocean_booking", + "fl_truck_appointment.idx_truck_appointment_ocean" + ] + } +} \ No newline at end of file diff --git a/output/local-schema-repair/actual-incremental-review.sql b/output/local-schema-repair/actual-incremental-review.sql new file mode 100644 index 000000000..a168a19ee --- /dev/null +++ b/output/local-schema-repair/actual-incremental-review.sql @@ -0,0 +1,2420 @@ +-- 本次本机结构修复的实际增量,仅用于审阅与原始快照对照。已执行,禁止在当前库重复执行。 + +SET NAMES utf8mb4; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +CREATE TABLE `event_delivery_retry_audit` ( + `request_id` varchar(36) NOT NULL COMMENT '人工重试请求UUID和幂等键', + `producer_table` varchar(64) NOT NULL COMMENT '本服务发件箱表名', + `entry_id` varchar(64) NOT NULL COMMENT '发件箱记录主键', + `event_id` varchar(128) NOT NULL COMMENT '原事件全局标识', + `event_type` varchar(64) NOT NULL COMMENT '原事件类型', + `payload_hash` varchar(71) NOT NULL COMMENT '原事件不可变负载摘要', + `operator_name` varchar(128) NOT NULL COMMENT '持有运维凭据的操作人标识', + `reason` varchar(500) NOT NULL COMMENT '人工重试原因', + `previous_failures` int NOT NULL COMMENT '重试前累计失败次数', + `previous_error` varchar(1000) DEFAULT NULL COMMENT '重试前最后一次脱敏错误', + `requested_at` datetime(3) NOT NULL COMMENT '重试申请提交时间', + PRIMARY KEY (`request_id`), + KEY `idx_event_retry_entry` (`producer_table`,`entry_id`,`requested_at`), + KEY `idx_event_retry_event` (`event_id`,`requested_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='业务事件人工重试审计,与恢复待发送状态同事务提交'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_appointment_cargo_verification` ( + `id` bigint NOT NULL COMMENT '核实记录主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原货源所属客户', + `source_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定ORDER或BOOKING原来源键', + `destination_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '核实时的原目的地', + `source_version` varchar(160) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核实时的原来源版本', + `source_packages` int DEFAULT NULL COMMENT '核实时的原来源箱数,未知为空', + `version` int NOT NULL COMMENT '同一来源的核实版本,从一递增', + `package_count` int DEFAULT NULL COMMENT '独立核实箱数,不回写原订单', + `shipment_references_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本票货件号或追踪号列表,不回写原订单', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核实说明', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '登录操作人', + `operator_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人名称快照', + `command_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源内幂等命令键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源、操作人及请求摘要', + `created_at` datetime(3) NOT NULL COMMENT '核实UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_cargo_verification_version` (`customer_id`,`source_key`,`version`), + UNIQUE KEY `uk_ll_cargo_verification_command` (`customer_id`,`source_key`,`command_key`), + CONSTRAINT `chk_ll_cargo_verification_quantity` CHECK (((`package_count` is null) or (`package_count` > 0))), + CONSTRAINT `chk_ll_cargo_verification_version` CHECK ((`version` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约货物核实资料及不可覆盖的版本历史'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_appointment_followup` ( + `id` bigint NOT NULL COMMENT '预约筹划跟进记录ID', + `source_key` varchar(160) NOT NULL COMMENT '稳定ORDER、BOOKING或CONTAINER及接仓点来源键', + `customer_id` varchar(128) NOT NULL COMMENT '货源客户;整柜共享记录由服务端固定为平台作用域0', + `source_order_id` bigint DEFAULT NULL COMMENT '已形成的真实尾程货源ID,尚未生成时为空', + `stage` varchar(32) NOT NULL COMMENT '跟进对象:DRAYAGE_CONTACT/TERMINAL_APPOINTMENT/WAREHOUSE_RECEIVING/FBA_RECEIVING', + `version` int NOT NULL COMMENT '同一货源及跟进对象的记录版本', + `contacted_party` varchar(200) DEFAULT NULL COMMENT '本次联系对象,不替代承运主档', + `result` varchar(1000) NOT NULL COMMENT '本次反馈事实,不自动确认预约或推进实物作业', + `next_action` varchar(500) DEFAULT NULL COMMENT '下一步安排', + `followup_date` date DEFAULT NULL COMMENT '按业务地点当地日期记录的下次跟进日', + `operator_id` varchar(128) NOT NULL COMMENT '登录平台操作者ID', + `operator_name` varchar(200) DEFAULT NULL COMMENT '操作人姓名快照', + `command_key` varchar(64) NOT NULL COMMENT '持久幂等键', + `request_hash` char(64) NOT NULL COMMENT '含操作者身份的请求SHA256摘要', + `created_at` datetime(3) NOT NULL COMMENT 'UTC记录时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_appointment_followup_version` (`source_key`,`stage`,`version`), + UNIQUE KEY `uk_appointment_followup_command` (`source_key`,`stage`,`command_key`), + KEY `idx_appointment_followup_date` (`followup_date`,`source_order_id`), + KEY `fk_appointment_followup_order` (`source_order_id`), + CONSTRAINT `fk_appointment_followup_order` FOREIGN KEY (`source_order_id`) REFERENCES `ll_order` (`id`), + CONSTRAINT `chk_appointment_followup_stage` CHECK ((`stage` in (_utf8mb4'DRAYAGE_CONTACT',_utf8mb4'TERMINAL_APPOINTMENT',_utf8mb4'WAREHOUSE_RECEIVING',_utf8mb4'FBA_RECEIVING'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='真实在途货源的预约筹划联系记录,追加留痕'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_appointment_impact` ( + `container_booking_id` varchar(64) NOT NULL COMMENT '稳定柜次关联键,不作业务编号展示', + `impact_no` varchar(40) NOT NULL COMMENT '船期核对事项业务号', + `baseline_json` longtext NOT NULL COMMENT '已核对基准或首次变化前观察,原来源时间口径', + `latest_json` longtext NOT NULL COMMENT '最新已读取观察,未知可为JSON null', + `forecast_token` char(64) NOT NULL COMMENT '最新观察摘要,处理时防止旧预测结案', + `status` varchar(20) NOT NULL COMMENT '事项状态:MONITORING监测/OPEN待处理/RESOLVED已完成', + `reason` varchar(64) DEFAULT NULL COMMENT '预测变化或资料待核实原因', + `owner_id` varchar(128) DEFAULT NULL COMMENT '认领平台人员ID', + `owner_name` varchar(200) DEFAULT NULL COMMENT '负责人姓名快照', + `version` int NOT NULL COMMENT '观察及人工处理共同版本', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + PRIMARY KEY (`container_booking_id`), + UNIQUE KEY `uk_appointment_impact_no` (`impact_no`), + KEY `idx_appointment_impact_work` (`status`,`updated_at`), + CONSTRAINT `chk_appointment_impact_status` CHECK ((`status` in (_utf8mb4'MONITORING',_utf8mb4'OPEN',_utf8mb4'RESOLVED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一柜一个稳定船期变化核对事项,不改写预约或运输'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_appointment_impact_history` ( + `id` bigint NOT NULL COMMENT '历史记录标识', + `container_booking_id` varchar(64) NOT NULL COMMENT '关联柜次标识', + `version` int NOT NULL COMMENT '记录版本', + `action` varchar(20) NOT NULL COMMENT '操作类型:OBSERVED观察/CLAIM认领/RECORD记录/RESOLVE完成', + `operator_id` varchar(128) NOT NULL COMMENT '操作人标识', + `operator_name` varchar(200) DEFAULT NULL COMMENT '操作人姓名', + `result` varchar(1000) DEFAULT NULL COMMENT '人工处理结果;观察记录为空', + `next_action` varchar(500) DEFAULT NULL COMMENT '下一步处理事项', + `followup_date` date DEFAULT NULL COMMENT '业务跟进日期', + `command_key` varchar(64) DEFAULT NULL COMMENT '人工命令幂等键;观察记录为空', + `request_hash` char(64) DEFAULT NULL COMMENT '请求内容摘要', + `response_json` longtext NOT NULL COMMENT '该版本完整响应快照,支持精确重放', + `created_at` datetime(3) NOT NULL COMMENT 'UTC记录时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_appointment_impact_version` (`container_booking_id`,`version`), + UNIQUE KEY `uk_appointment_impact_command` (`container_booking_id`,`operator_id`,`command_key`), + CONSTRAINT `fk_appointment_impact_history` FOREIGN KEY (`container_booking_id`) REFERENCES `ll_appointment_impact` (`container_booking_id`), + CONSTRAINT `chk_appointment_impact_action` CHECK ((`action` in (_utf8mb4'OBSERVED',_utf8mb4'CLAIM',_utf8mb4'RECORD',_utf8mb4'RESOLVE'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期观察及人工处理追加历史'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_cargo_discard_carton` ADD COLUMN `source_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'DROPSHIP' COMMENT '箱子来源:一件代发DROPSHIP、入仓箱INBOUND、转运箱TRANSFER'; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_cargo_discard_item` ADD UNIQUE KEY `uk_ll_discard_position_sku` (`application_id`,`inventory_position_id`,`sku_code`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_delivery_facts_changed` ( + `id` bigint NOT NULL COMMENT '持久信号内部主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实签收货物客户ID', + `dispatch_id` bigint NOT NULL COMMENT '整车排车主单ID', + `dispatch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实排车业务号', + `delivery_id` bigint NOT NULL COMMENT '本客户派送单ID', + `delivery_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实派送业务号', + `delivery_version` bigint NOT NULL COMMENT '触发信号的真实派送版本', + `facts_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '该版本真实签收事实摘要', + `occurred_at` datetime(3) NOT NULL COMMENT '签收事实实际发生时间', + `state` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING' COMMENT '待核对PENDING或已核对PROCESSED', + `attempt_count` int NOT NULL DEFAULT '0' COMMENT '已记录的汇总失败次数', + `next_attempt_at` datetime(3) NOT NULL COMMENT '下次可重试时间', + `last_error_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近失败诊断码不保存敏感异常正文', + `processed_at` datetime(3) DEFAULT NULL COMMENT '与主阶段汇总同事务确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_delivery_fact_version` (`customer_id`,`delivery_id`,`delivery_version`), + KEY `idx_delivery_fact_due` (`state`,`next_attempt_at`,`id`), + KEY `idx_delivery_fact_dispatch` (`dispatch_id`,`state`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='正常签收事实变化的本地持久待汇总信号'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_dispatch_command` ( + `id` bigint NOT NULL COMMENT '持久命令内部主键', + `dispatch_id` bigint NOT NULL COMMENT '命令所属整车排车主单ID', + `dispatch_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令所属真实排车业务号', + `action` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次整车作业动作', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始可信操作主体ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '跨操作主体全局唯一的原始请求键', + `record_version` bigint NOT NULL COMMENT '原请求明确提交的排车版本,零为合法首版', + `command_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '绑定原主体动作业务号版本和完整载荷的严格摘要', + `result_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '按动作类型恢复的不可变成功结果JSON', + `created_at` datetime(3) NOT NULL COMMENT '成功命令记录时间,使用UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dispatch_command_key` (`idempotency_key`), + KEY `idx_dispatch_command_history` (`dispatch_id`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车公共持久命令账本'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_dispatch_delivery_arrangement` ( + `id` bigint NOT NULL COMMENT '安排事实内部主键', + `dispatch_order_id` bigint NOT NULL COMMENT '唯一整车排车主单ID', + `dispatch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实排车业务号', + `arrangement_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次唯一安排业务事实标识', + `business_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '排除操作者及纯并发版本的安排业务摘要', + `cargo_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本车实际拣货来源摘要', + `loading_completion_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '装车完成事实摘要', + `original_command_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '首次安排的全局请求键', + `original_operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '首次安排操作主体', + `result_json` json NOT NULL COMMENT '全部客户出库及客户目的地派送不可变结果', + `cargo_json` json NOT NULL COMMENT '逐客户逐拣货归属的不可变真实来源', + `created_at` datetime(3) NOT NULL COMMENT '本次安排实际创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dispatch_arrangement_dispatch` (`dispatch_order_id`), + UNIQUE KEY `uk_dispatch_arrangement_key` (`arrangement_key`), + UNIQUE KEY `uk_dispatch_arrangement_command` (`original_command_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车唯一派送安排事实'; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_dispatch_draft` ADD COLUMN `warehouse_id` bigint DEFAULT NULL COMMENT '本草稿唯一起运公共仓库引用'; + +ALTER TABLE `ll_dispatch_draft` ADD COLUMN `record_version` bigint NOT NULL DEFAULT '0' COMMENT '草稿并发版本,显式零版本合法'; + +ALTER TABLE `ll_dispatch_draft` ADD COLUMN `sources_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '服务端核验的真实来源及客户版本快照数组'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_dispatch_draft_command` ( + `id` bigint NOT NULL COMMENT '草稿命令内部主键', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '草稿操作全局唯一幂等键', + `operator_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原命令操作主体,恢复必须为本人', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '草稿创建、维护、选货、释放或转换动作', + `target_token` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令目标草稿标识或创建范围标识', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原动作、主体、版本及完整载荷摘要', + `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '本事务完成后保存的不可变原结果,不提交空结果', + `created_at` datetime(3) NOT NULL COMMENT '命令创建UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_draft_command_key` (`idempotency_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='智能排车草稿持久命令及原结果'; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_dispatch_draft_container` ADD COLUMN `source_keys_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '本装车容器已取得本草稿占用的来源键数组'; + +ALTER TABLE `ll_dispatch_draft_container` ADD UNIQUE KEY `uk_ll_dispatch_draft_container_sequence` (`draft_id`,`sequence_no`); + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_dispatch_history` ( + `id` bigint NOT NULL COMMENT '排车历史内部主键', + `dispatch_id` bigint NOT NULL COMMENT '本次历史所属整车主单ID', + `record_version` bigint NOT NULL COMMENT '操作完成后的整车公共版本', + `action` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次真实业务动作', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '可信操作主体ID', + `reason` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核驳回或变更原因', + `snapshot_json` json NOT NULL COMMENT '动作完成当时的完整主单事实快照', + `occurred_at` datetime(3) NOT NULL COMMENT '真实操作发生时间', + PRIMARY KEY (`id`), + KEY `idx_dispatch_history_version` (`dispatch_id`,`record_version`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车版本与审核轮次的追加历史'; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_dispatch_item` ADD COLUMN `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本条真实客户名称快照'; + +ALTER TABLE `ll_dispatch_item` ADD COLUMN `source_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本条货物稳定权威来源键'; + +ALTER TABLE `ll_dispatch_item` ADD COLUMN `source_version` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '选货时核对的真实来源版本摘要'; + +ALTER TABLE `ll_dispatch_item` ADD COLUMN `source_snapshot_json` json DEFAULT NULL COMMENT '本条货物不可变来源及关联事实快照'; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `trip_id` bigint DEFAULT NULL COMMENT '本趟唯一车辆资源记录ID'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `overseas_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运海外仓编码快照'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `stage` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BEFORE_LOADING' COMMENT '作业阶段:BEFORE_LOADING装车前、LOADING装车中、AFTER_LOADING装车后、DELIVERING派送中、DELIVERED派送完成'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `record_version` bigint NOT NULL DEFAULT '0' COMMENT '整车公共并发版本,首版为零'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `cargo_revision` bigint NOT NULL DEFAULT '0' COMMENT '本趟货物修订版本'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `cargo_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前整车真实货物及来源摘要'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `review_state` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'DRAFT' COMMENT '审核子流程当前状态'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `review_round` bigint NOT NULL DEFAULT '0' COMMENT '当前审核轮次'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `review_basis_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本审核轮次核对的货物和资源依据摘要'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `dispatch_review_json` json DEFAULT NULL COMMENT '当前调度审核事实快照'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `loading_review_json` json DEFAULT NULL COMMENT '当前理货审核事实快照'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `resources_json` json DEFAULT NULL COMMENT '本趟主档或临时车辆司机的真实资源快照'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `planned_departure_at` datetime(3) DEFAULT NULL COMMENT '计划发车时间,草稿未知时为空'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `loading_completed_at` datetime(3) DEFAULT NULL COMMENT '实际确认装车完成时间'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `loading_completion_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际装车完成事实摘要'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `loading_confirmation_json` json DEFAULT NULL COMMENT '装车确认时逐实托真实实载完整快照'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `arrangement_key` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本车唯一派送安排事实标识'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `arrangement_business_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本车派送安排业务内容摘要'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `departed_at` datetime(3) DEFAULT NULL COMMENT '本趟实际发车时间'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `delivery_completed_at` datetime(3) DEFAULT NULL COMMENT '全部派送正常签收后的整车完成时间'; + +ALTER TABLE `ll_dispatch_order` ADD COLUMN `remark` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '排车业务备注'; + +ALTER TABLE `ll_dispatch_order` ADD UNIQUE KEY `uk_dispatch_trip` (`trip_id`); + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_dispatch_pallet_lock` ADD COLUMN `active_warehouse_pallet_id` bigint DEFAULT NULL COMMENT '活动占用的真实仓库托盘,释放后为空,跨客户及来源别名唯一'; + +ALTER TABLE `ll_dispatch_pallet_lock` ADD UNIQUE KEY `uk_ll_dispatch_active_warehouse_pallet` (`active_warehouse_pallet_id`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_dispatch_pda_pick_order` ADD KEY `idx_dispatch_pick_return_receipt` (`customer_id`,`return_receipt_id`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_dropship_carton` ADD COLUMN `product_quantity` bigint DEFAULT NULL COMMENT '该箱实收商品件数'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_dropship_order_profile` ADD COLUMN `manifest_version` int DEFAULT NULL COMMENT '整托清单版本'; + +ALTER TABLE `ll_dropship_order_profile` ADD COLUMN `manifest_package_count` int DEFAULT NULL COMMENT '整托总箱数'; + +ALTER TABLE `ll_dropship_order_profile` ADD COLUMN `manifest_fragment_count` int DEFAULT NULL COMMENT '整托客户分片总数'; + +ALTER TABLE `ll_dropship_order_profile` ADD COLUMN `manifest_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '整托完整清单摘要'; + +ALTER TABLE `ll_dropship_order_profile` ADD KEY `idx_ll_dropship_profile_manifest` (`source_pallet_no`,`manifest_hash`); + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_dropship_sku_inventory` ADD UNIQUE KEY `uk_ll_dropship_sku_inventory` (`profile_id`,`sku_code`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_exception_order` ADD COLUMN `return_context_json` json DEFAULT NULL COMMENT '退回异常创建前的派送及尾程状态快照'; + +ALTER TABLE `ll_exception_order` ADD KEY `idx_ll_exception_delivery_return` (`customer_id`,`delivery_order_id`,`exception_type`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_exception_return_item` ADD COLUMN `return_carton_id` bigint DEFAULT NULL COMMENT '原生退货箱标识;与普通库存位置互斥'; + +ALTER TABLE `ll_exception_return_item` ADD COLUMN `return_carton_mark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原生退货箱业务箱码快照'; + +ALTER TABLE `ll_exception_return_item` ADD COLUMN `received_packages` bigint NOT NULL DEFAULT '0' COMMENT '已实际退回入仓的累计箱数'; + +ALTER TABLE `ll_exception_return_item` ADD UNIQUE KEY `uk_ll_exception_return_carton` (`customer_id`,`exception_order_id`,`outbound_pallet_item_id`,`return_carton_id`); + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_fba_appointment_command` ( + `command_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '持久化幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作、操作者和请求摘要', + `operation` varchar(96) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型及目标业务号', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '登录操作人', + `appointment_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '系统预约业务单号', + `response_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '原命令返回快照,与业务写入同事务', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建UTC时间', + PRIMARY KEY (`command_key`), + KEY `idx_ll_fba_command_appointment` (`appointment_no`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约命令与变更历史'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_fba_receiving_agreement` ( + `agreement_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '收货预约独立业务键', + `version` int NOT NULL COMMENT '预约覆盖范围与确认资料版本', + `status` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '有效、取消或已替代状态', + `destination_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '权威目的仓关联键', + `confirmation_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前有效外部约号,失效后清空以释放覆盖', + `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户逐来源覆盖、确认时区及仓库依据快照', + PRIMARY KEY (`agreement_key`), + UNIQUE KEY `uk_fba_receiving_confirmation` (`destination_key`,`confirmation_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='独立于送货批次的收货预约'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_fba_receiving_change` ( + `change_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户预约变化业务键', + `version` int NOT NULL COMMENT '变化续办版本', + `status` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '待仓库确认、已应用或已撤回状态', + `batch_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '受影响原送货批次键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次变化所属客户', + `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原覆盖快照、逐来源拟保留量、负责人及跟进资料', + `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '确认后的实际批次去向及逐步骤结果', + `active_ref` varchar(260) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '同批同客户唯一未解决变化引用', + PRIMARY KEY (`change_key`), + UNIQUE KEY `uk_fba_receiving_pending` (`active_ref`), + KEY `idx_fba_receiving_pending_batch` (`batch_key`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='保留原安排且阻止误发车的客户变化'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_fba_receiving_member` ( + `agreement_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属收货预约业务键', + `batch_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定送货批次键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '货物所属客户标识', + `active_ref` varchar(260) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '有效批次与客户唯一引用,退出后清空且历史保留', + PRIMARY KEY (`agreement_key`,`batch_key`,`customer_id`), + UNIQUE KEY `uk_fba_receiving_active_member` (`active_ref`), + KEY `idx_fba_receiving_batch` (`batch_key`,`customer_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='收货预约当前覆盖关联及退出历史'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_fba_receiving_plan` ( + `batch_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定送货批次键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '计划所属客户标识', + `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本客户未确认计划、目标窗口及业务时区,不含有效预约确认', + PRIMARY KEY (`batch_key`,`customer_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='按批次及客户保存的未确认收货计划'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_fba_receiving_revision` ( + `agreement_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '收货预约业务键', + `version` int NOT NULL COMMENT '不可变覆盖与确认版本', + `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '该版本完整客户覆盖、确认时段及回复依据', + PRIMARY KEY (`agreement_key`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='收货预约覆盖与确认不可变历史'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_fleet_trip_dispatch` ADD UNIQUE KEY `uk_fleet_trip_dispatch_trip` (`trip_id`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `confirmation_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '收货方正式外部确认号'; + +ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `planned_date` date DEFAULT NULL COMMENT '计划当地日期,可只有日期而无时段'; + +ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `planned_at` datetime(3) DEFAULT NULL COMMENT '计划开始当地时间,待定可空'; + +ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `planned_end_at` datetime(3) DEFAULT NULL COMMENT '计划结束当地时间'; + +ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `appointment_start_utc` datetime(3) DEFAULT NULL COMMENT '确认开始UTC时间点'; + +ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `appointment_end_utc` datetime(3) DEFAULT NULL COMMENT '确认结束UTC时间点'; + +ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `timezone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓权威IANA时区,未维护不得确认'; + +ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `origin_warehouse_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际起运仓'; + +ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `replacement_keys_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '替代批次不可变键列表,只用于内部业务关联'; + +ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `repartition_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '分批或合并原因,原安排及来源明细保留'; + +ALTER TABLE `ll_inbound_fba_appointment` ADD KEY `idx_ll_fba_appointment_planned` (`planned_at`,`appointment_status`); + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_inbound_fba_appointment_item` ADD COLUMN `cargo_verification_version` int DEFAULT NULL COMMENT '采用的预约货物核实版本,未核实时为空'; + +ALTER TABLE `ll_inbound_fba_appointment_item` ADD COLUMN `shipment_references_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '本次采用的货件或追踪号核实快照'; + +ALTER TABLE `ll_inbound_fba_appointment_item` ADD KEY `idx_ll_fba_active_source` (`customer_id`,`source_key`,`active`); + +ALTER TABLE `ll_inbound_fba_appointment_item` ADD KEY `idx_ll_fba_active_order` (`customer_id`,`order_id`,`active`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_inbound_plan_pallet` ADD KEY `idx_ll_inbound_pallet_no` (`pallet_no`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商品名称'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `estimated_pallet_count` int DEFAULT NULL COMMENT '客户申报预计托数,不代表实际收货'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `origin_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系人'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `origin_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系电话'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `destination_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系人'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `destination_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系电话'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `pickup_at` datetime(3) DEFAULT NULL COMMENT '取货时间(当地时间,不转换时区)'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `delivery_at` datetime(3) DEFAULT NULL COMMENT '送货时间(当地时间,不转换时区)'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `dispatch_item_id` bigint DEFAULT NULL COMMENT '本次整车排车作业明细ID'; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `source_attribution_id` bigint DEFAULT NULL COMMENT '不可变PDA真实拣货归属ID'; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `source_order_id` bigint DEFAULT NULL COMMENT '本行真实来源尾程订单ID'; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `source_inventory_position_id` bigint DEFAULT NULL COMMENT '本行实际拣货库存仓位ID'; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `source_return_receipt_id` bigint DEFAULT NULL COMMENT '本行实际退回再派实收记录ID'; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `source_return_carton_id` bigint DEFAULT NULL COMMENT '本行实际退货换标来源箱ID'; + +ALTER TABLE `ll_outbound_pallet_item` ADD UNIQUE KEY `uk_outbound_source_attribution` (`customer_id`,`source_attribution_id`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `purpose` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '费用业务用途;由履约节点确定'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `confirmation_origin` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BUSINESS' COMMENT '核定入口:BUSINESS业务节点、FINANCIAL财务操作'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `fee_version` int DEFAULT NULL COMMENT '同用途费用确认版本'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否当前有效版本'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `determination` varchar(24) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'POSITIVE正额、ZERO零元、NOT_APPLICABLE不适用'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `original_currency` char(3) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核定原币CNY或USD'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `original_amount` decimal(20,2) DEFAULT NULL COMMENT '核定原币金额'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `exchange_rate` decimal(20,6) DEFAULT NULL COMMENT '已确认汇率快照'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `exchange_rate_month` char(7) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '已确认汇率所属月份'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `business_date` date DEFAULT NULL COMMENT '实际费用业务日期'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `wallet_business_id` bigint DEFAULT NULL COMMENT '资金冻结对应采购费用记录'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `wallet_business_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资金冻结业务号;实际国际运费引用原预估'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `wallet_hold_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance冻结引用'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `wallet_ledger_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance实际处理流水引用'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `settled_command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '成功实扣或退款的资金命令事件'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `source_fee_id` bigint DEFAULT NULL COMMENT '已实扣费用来源ID'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `parent_fee_id` bigint DEFAULT NULL COMMENT '原费用或预估引用'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '确认请求摘要'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD UNIQUE KEY `uk_ll_procurement_fee_version` (`order_id`,`purpose`,`fee_item_code`,`fee_version`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_overseas_procurement_status_history` ADD COLUMN `operation_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作类型:CREATE、REVIEW或UPDATE'; + +ALTER TABLE `ll_overseas_procurement_status_history` ADD COLUMN `change_detail` json DEFAULT NULL COMMENT '字段变更前后值JSON'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_budget_authorization` ( + `id` bigint NOT NULL COMMENT '预算授权ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `previous_amount` decimal(20,2) DEFAULT NULL COMMENT '原货款预算总上限;未授权保持空', + `previous_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原预算币种', + `authorized_amount` decimal(20,2) NOT NULL COMMENT '客户授权的新货款总上限', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户授权币种', + `voucher_file_id` bigint NOT NULL COMMENT '客户确认书面或聊天凭证', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '授权依据', + `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '核验人员', + `reviewed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '核验时间', + PRIMARY KEY (`id`), + KEY `idx_procurement_budget_order` (`customer_id`,`order_id`,`id`), + CONSTRAINT `chk_procurement_budget_amount` CHECK (((`authorized_amount` >= 0) and (`previous_amount` >= 0))), + CONSTRAINT `chk_procurement_budget_currency` CHECK (((`currency` in (_utf8mb4'CNY',_utf8mb4'USD')) and (`previous_currency` in (_utf8mb4'CNY',_utf8mb4'USD')))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购货款预算授权核验历史'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_carton` ( + `id` bigint NOT NULL COMMENT '版本内箱记录ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `manifest_id` bigint NOT NULL COMMENT '装箱清单版本', + `carton_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购订单内业务箱号', + `length_cm` decimal(12,2) NOT NULL COMMENT '外箱长厘米', + `width_cm` decimal(12,2) NOT NULL COMMENT '外箱宽厘米', + `height_cm` decimal(12,2) NOT NULL COMMENT '外箱高厘米', + `gross_weight_kg` decimal(12,3) NOT NULL COMMENT '封箱毛重千克', + `quantity` bigint NOT NULL COMMENT '本箱合格商品总件数', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_carton_version` (`manifest_id`,`carton_no`), + KEY `idx_procurement_carton_order` (`order_id`,`manifest_id`), + CONSTRAINT `chk_procurement_carton_measurement` CHECK (((`length_cm` > 0) and (`width_cm` > 0) and (`height_cm` > 0) and (`gross_weight_kg` > 0) and (`quantity` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购版本化逐箱实测与件数'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_carton_source` ( + `carton_id` bigint NOT NULL COMMENT '版本内箱ID', + `receipt_id` bigint NOT NULL COMMENT '海外实收明细来源', + `quantity` bigint NOT NULL COMMENT '从该实收装入本箱的件数', + PRIMARY KEY (`carton_id`,`receipt_id`), + KEY `idx_procurement_carton_receipt` (`receipt_id`), + CONSTRAINT `chk_procurement_carton_source_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购箱内货物的实收来源与数量'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_closure` ( + `id` bigint NOT NULL COMMENT '采购异常关闭ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `closure_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常关闭业务号', + `customer_voucher_file_id` bigint NOT NULL COMMENT '客户同意停止履约凭证', + `financial_conclusion` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '已知费用及后续无需收费的处理结论,不改变资金事实', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '内部关闭原因', + `client_summary` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '人工确认的对客关闭摘要', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购管理确认人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '关闭确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_closure_order` (`order_id`), + UNIQUE KEY `uk_procurement_closure_no` (`closure_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购实物资金收口后的异常关闭事实'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_closure_item` ( + `id` bigint NOT NULL COMMENT '关闭货物处置ID', + `closure_id` bigint NOT NULL COMMENT '采购关闭ID', + `source_kind` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '购买未达、在途未达、合格、破损或多货来源', + `source_id` bigint DEFAULT NULL COMMENT '原实收或国际交寄箱,购买未达为空', + `quantity` bigint NOT NULL COMMENT '本来源最终明确去向件数', + `decision` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '供应商保管、退还、报失、客户授权保管或处置', + `destination` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际去向及接收方说明', + `voucher_file_id` bigint NOT NULL COMMENT '本单实物处置证明', + PRIMARY KEY (`id`), + KEY `idx_procurement_closure_source` (`closure_id`,`source_kind`,`source_id`), + CONSTRAINT `chk_procurement_closure_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='异常关闭逐来源剩余货物最终去向,不产生新发运'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_command` ( + `id` bigint NOT NULL COMMENT '操作记录ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `action` varchar(48) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购节点动作', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求摘要', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '执行人', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作依据', + `detail_json` json NOT NULL COMMENT '内部操作及更正依据快照,不直接对客展示', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '执行时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_command` (`order_id`,`action`,`idempotency_key`), + KEY `idx_procurement_command_customer` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购节点幂等与不可变审计'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_control_note` ( + `id` bigint NOT NULL COMMENT '采购更正说明ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `note_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更正说明业务号', + `target_type` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '购买、仓库、实收或交寄事实类型', + `target_id` bigint DEFAULT NULL COMMENT '本单事实对象引用,购买为空', + `blocking` tinyint(1) NOT NULL COMMENT '是否阻断后续计划履约', + `voucher_file_id` bigint NOT NULL COMMENT '本单内部事实更正凭证', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '内部更正说明', + `client_summary` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '人工确认的对客摘要,不复制内部原始内容', + `original_value_json` json DEFAULT NULL COMMENT '服务端记录的原事实快照', + `corrected_value_json` json DEFAULT NULL COMMENT '服务端记录的更正事实快照', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购管理操作人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', + `resolved_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '处理确认人', + `resolved_at` datetime(3) DEFAULT NULL COMMENT '阻断解除时间', + `resolution_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '内部处理结果', + `resolution_voucher_id` bigint DEFAULT NULL COMMENT '本单处理凭证', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_note_no` (`note_no`), + KEY `idx_procurement_note_block` (`order_id`,`blocking`,`resolved_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购不可覆盖事实的更正说明及阻断异常'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_disposition` ( + `id` bigint NOT NULL COMMENT '差异处理ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS海外或DOMESTIC国内', + `source_carton_id` bigint DEFAULT NULL COMMENT '国内原交寄箱来源', + `receipt_id` bigint DEFAULT NULL COMMENT '破损或多货对应实收记录,短少为空', + `kind` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SHORTAGE短少、DAMAGED破损、EXTRA多货', + `quantity` bigint NOT NULL COMMENT '已批准处置件数', + `decision` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ACCEPT_SHORTAGE确认短少、DISPOSE_DAMAGED拒收或处置、RETURN_EXTRA退回多货', + `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '当前有效处置;撤销只改变有效性并保留原事实', + `voucher_file_id` bigint NOT NULL COMMENT '本单客户确认或实际处置凭证', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处置依据', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购管理人员', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', + PRIMARY KEY (`id`), + KEY `idx_procurement_disposition_source` (`order_id`,`leg`,`source_carton_id`,`receipt_id`,`kind`), + CONSTRAINT `chk_procurement_disposition_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购单内差异处置,不自动退款'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_estimate_review` ( + `id` bigint NOT NULL COMMENT '预估核对ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `label_set_id` bigint NOT NULL COMMENT '已核对国际面单版本', + `fee_id` bigint NOT NULL COMMENT '唯一有效预估费用版本', + `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '核价人员', + `reviewed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '核对时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_estimate_review` (`label_set_id`,`fee_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='面单清单与预估冻结的显式核对关联'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_fee_correction` ( + `id` bigint NOT NULL COMMENT '费用链更正ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `correction_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '财务更正业务号', + `root_fee_id` bigint NOT NULL COMMENT '原实际费用链根', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本单更正请求幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更正目标及凭证请求摘要', + `target_original_amount` decimal(20,2) NOT NULL COMMENT '本次正确原币总额', + `original_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '沿用原费用币种', + `exchange_rate` decimal(20,6) NOT NULL COMMENT '沿用原费用汇率快照', + `exchange_rate_month` char(7) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原汇率月份,不取本次操作月份', + `target_amount` decimal(20,2) NOT NULL COMMENT '正确总额折算CNY', + `previous_net_amount` decimal(20,2) NOT NULL COMMENT '确认前整链净实扣CNY', + `difference_amount` decimal(20,2) NOT NULL COMMENT 'CNY正差额追加、负差额退款、零差额仅留核对记录', + `voucher_file_id` bigint NOT NULL COMMENT '本订单财务更正凭证', + `reason` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更正依据', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '授权财务操作人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_correction_no` (`correction_no`), + UNIQUE KEY `uk_procurement_correction_request` (`order_id`,`idempotency_key`), + KEY `idx_procurement_correction_root` (`order_id`,`root_fee_id`,`id`), + CONSTRAINT `chk_procurement_correction_amount` CHECK (((`target_original_amount` >= 0) and (`target_amount` >= 0) and (`previous_net_amount` >= 0) and (`exchange_rate` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用链更正目标与原汇率快照'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_fee_correction_item` ( + `correction_id` bigint NOT NULL COMMENT '本次费用链更正ID', + `fee_id` bigint NOT NULL COMMENT '本次产生的独立正差额或退款费用ID', + PRIMARY KEY (`correction_id`,`fee_id`), + UNIQUE KEY `uk_procurement_correction_fee` (`fee_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用目标更正与逐笔资金事实关联'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_flow` ( + `order_id` bigint NOT NULL COMMENT '采购订单ID,一单一个履约批次', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `purchased_at` datetime(3) DEFAULT NULL COMMENT '真实购买时间', + `purchased_product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际购买商品', + `purchased_specification` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际购买规格', + `purchased_quantity` bigint DEFAULT NULL COMMENT '实际购买件数', + `purchase_amount` decimal(20,2) DEFAULT NULL COMMENT '供应商实付原币金额', + `purchase_currency` char(3) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商实付原币CNY或USD', + `purchase_voucher_id` bigint DEFAULT NULL COMMENT '购买凭证引用', + `purchase_issue` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '购买未核定或异常说明', + `purchase_confirmed_at` datetime(3) DEFAULT NULL COMMENT '货款核定时间,不代表扣费成功', + `actual_warehouse_id` bigint DEFAULT NULL COMMENT '首次实际收货冻结的仓库ID', + `actual_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际收货仓编码快照', + `actual_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际收货仓名称快照', + `overseas_received_at` datetime(3) DEFAULT NULL COMMENT '海外整批收货完成时间', + `packing_version` int DEFAULT NULL COMMENT '当前确认装箱清单版本', + `overseas_shipped_at` datetime(3) DEFAULT NULL COMMENT '国际段整批实际交寄时间', + `domestic_received_at` datetime(3) DEFAULT NULL COMMENT '国内整批收货完成时间', + `charges_confirmed_at` datetime(3) DEFAULT NULL COMMENT '国内整单费用核定时间', + `customer_shipped_at` datetime(3) DEFAULT NULL COMMENT '国内寄客户实际交寄时间', + `domestic_receiver_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国际段国内收件人', + `domestic_receiver_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国际段国内收件电话', + `domestic_receiver_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国际段国内接收地址', + `cancelled_at` datetime(3) DEFAULT NULL COMMENT '购买前取消时间', + `closed_at` datetime(3) DEFAULT NULL COMMENT '异常关闭时间', + `control_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '取消或关闭原因', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`order_id`), + KEY `idx_procurement_flow_customer` (`customer_id`,`order_id`), + CONSTRAINT `chk_procurement_purchase_amount` CHECK (((`purchase_amount` is null) or (`purchase_amount` >= 0))), + CONSTRAINT `chk_procurement_purchase_quantity` CHECK (((`purchased_quantity` is null) or (`purchased_quantity` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购单一批次履约事实'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_label_item` ( + `label_set_id` bigint NOT NULL COMMENT '面单批版本ID', + `carton_id` bigint NOT NULL COMMENT '原海外清单箱ID', + `file_id` bigint NOT NULL COMMENT '本采购订单面单文件', + `page_no` int NOT NULL COMMENT '该箱对应文件页码,从1开始', + `carrier` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '承运商', + `tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '箱主或子运单号', + `applied_at` datetime(3) DEFAULT NULL COMMENT '真实贴单时间', + `applied_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '贴单确认人', + PRIMARY KEY (`label_set_id`,`carton_id`), + CONSTRAINT `chk_procurement_label_page` CHECK ((`page_no` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购逐箱文件页关联及贴单事实'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_label_set` ( + `id` bigint NOT NULL COMMENT '面单批版本ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS国际段或DOMESTIC寄客户段', + `version` int NOT NULL COMMENT '订单段内面单版本', + `manifest_id` bigint NOT NULL COMMENT '原海外确认装箱版本', + `cargo_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '箱规及有效货物来源摘要', + `sender_snapshot` json NOT NULL COMMENT '寄件人姓名电话地址快照', + `receiver_snapshot` json NOT NULL COMMENT '收件人姓名电话地址快照', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '制单操作人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_label_version` (`order_id`,`leg`,`version`), + CONSTRAINT `chk_procurement_label_leg` CHECK ((`leg` in (_utf8mb4'OVERSEAS',_utf8mb4'DOMESTIC'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购两段面单不可变版本和地址快照'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_manifest` ( + `id` bigint NOT NULL COMMENT '装箱清单ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `version` int NOT NULL COMMENT '订单内装箱版本', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'DRAFT草稿、CONFIRMED已确认、SUPERSEDED已替代', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '确认时间', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '制单人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '版本保存时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_manifest_version` (`order_id`,`version`), + CONSTRAINT `chk_procurement_manifest_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'CONFIRMED',_utf8mb4'SUPERSEDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购装箱清单不可变版本'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_receipt` ( + `id` bigint NOT NULL COMMENT '实收明细ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `receipt_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购收货业务编号', + `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS海外或DOMESTIC国内', + `source_carton_id` bigint DEFAULT NULL COMMENT '国内实收关联原国际交寄箱,海外为空', + `warehouse_id` bigint DEFAULT NULL COMMENT '海外实际收货仓', + `good_quantity` bigint NOT NULL COMMENT '可发合格件数', + `damaged_quantity` bigint NOT NULL COMMENT '破损待处置件数', + `extra_quantity` bigint NOT NULL COMMENT '多到件数,不增加可发数量', + `received_at` datetime(3) NOT NULL COMMENT '实际收货时间', + `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '当前有效实收事实', + `supersedes_id` bigint DEFAULT NULL COMMENT '受控更正所替代的原实收记录', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '登记人员', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_receipt_no` (`receipt_no`), + KEY `idx_procurement_receipt_source` (`order_id`,`leg`,`source_carton_id`,`active`), + CONSTRAINT `chk_procurement_receipt_leg` CHECK ((((`leg` = _utf8mb4'OVERSEAS') and (`source_carton_id` is null)) or ((`leg` = _utf8mb4'DOMESTIC') and (`source_carton_id` is not null)))), + CONSTRAINT `chk_procurement_receipt_quantity` CHECK (((`good_quantity` >= 0) and (`damaged_quantity` >= 0) and (`extra_quantity` >= 0) and (((`good_quantity` + `damaged_quantity`) + `extra_quantity`) > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购分次实收与受控更正事实'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_repack` ( + `id` bigint NOT NULL COMMENT '换包装版本ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `carton_id` bigint NOT NULL COMMENT '原国际交寄箱ID,保持一对一来源', + `length_cm` decimal(12,2) NOT NULL COMMENT '新外箱长厘米', + `width_cm` decimal(12,2) NOT NULL COMMENT '新外箱宽厘米', + `height_cm` decimal(12,2) NOT NULL COMMENT '新外箱高厘米', + `gross_weight_kg` decimal(12,3) NOT NULL COMMENT '新封箱毛重千克', + `voucher_file_id` bigint NOT NULL COMMENT '本单换包装证据', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换包装依据', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国内作业人员', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', + PRIMARY KEY (`id`), + KEY `idx_procurement_repack_carton` (`order_id`,`carton_id`,`id`), + CONSTRAINT `chk_procurement_repack_measurement` CHECK (((`length_cm` > 0) and (`width_cm` > 0) and (`height_cm` > 0) and (`gross_weight_kg` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购国内原箱一对一换包装不可变历史'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_shipment` ( + `id` bigint NOT NULL COMMENT '采购交寄ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `shipment_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '交寄业务编号', + `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS国际交寄或DOMESTIC寄客户', + `manifest_id` bigint NOT NULL COMMENT '原海外装箱清单版本', + `shipped_at` datetime(3) NOT NULL COMMENT '整批真实交承运方时间', + `address_snapshot` json NOT NULL COMMENT '本段交寄时的收寄姓名电话地址快照', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '交寄确认人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_shipment_leg` (`order_id`,`leg`), + UNIQUE KEY `uk_procurement_shipment_no` (`shipment_no`), + CONSTRAINT `chk_procurement_shipment_leg` CHECK ((`leg` in (_utf8mb4'OVERSEAS',_utf8mb4'DOMESTIC'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购两段各一次整批真实交寄'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_shipment_item` ( + `shipment_id` bigint NOT NULL COMMENT '采购交寄ID', + `carton_id` bigint NOT NULL COMMENT '原海外装箱版本内箱ID', + `quantity` bigint NOT NULL COMMENT '本次实际交寄件数', + `carrier` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '承运商快照', + `tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '运单号快照', + `label_snapshot` json NOT NULL COMMENT '当次箱规、面单及货物来源快照', + PRIMARY KEY (`shipment_id`,`carton_id`), + CONSTRAINT `chk_procurement_shipment_item_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购整批交寄逐箱事实'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_procurement_wallet_attempt` ( + `id` bigint NOT NULL COMMENT '请求尝试ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `fee_id` bigint NOT NULL COMMENT '不可变费用版本ID', + `attempt_no` bigint NOT NULL COMMENT '费用版本内请求序号', + `operation` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资金操作:FREEZE冻结、SETTLE结算、SETTLE_ACTUAL实际结算、RELEASE释放、REFUND退款', + `business_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Finance资金业务号', + `amount` decimal(20,2) DEFAULT NULL COMMENT '请求金额;全额结算或释放可空', + `command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资金指令事件唯一引用', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资金请求结果:PENDING未决、SUCCEEDED成功、FAILED明确失败', + `result_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原业务回执摘要', + `wallet_hold_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance冻结引用', + `wallet_ledger_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance处理流水引用', + `error_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '业务失败码', + `error_message` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '内部失败诊断,不直接对客展示', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '请求时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '最终结果时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_attempt_event` (`command_event_id`), + UNIQUE KEY `uk_procurement_attempt_number` (`fee_id`,`attempt_no`), + KEY `idx_procurement_attempt_order` (`customer_id`,`order_id`,`status`), + CONSTRAINT `chk_procurement_attempt_status` CHECK ((`status` in (_utf8mb4'PENDING',_utf8mb4'SUCCEEDED',_utf8mb4'FAILED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用资金命令尝试与不可变结果'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_receiving_container_session` ADD COLUMN `source_container_booking_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '稳定来源柜预订ID'; + +ALTER TABLE `ll_receiving_container_session` ADD COLUMN `container_fact_hash` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '领取时整柜订单与计划事实摘要'; + +ALTER TABLE `ll_receiving_container_session` ADD COLUMN `overseas_warehouse_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外接柜仓业务编码快照'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_return_carton_stock_receipt` ( + `id` bigint NOT NULL COMMENT '原箱回仓凭据明细标识', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `receipt_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原箱回仓实收业务号', + `exception_order_id` bigint NOT NULL COMMENT '本次异常退回订单', + `exception_return_item_id` bigint NOT NULL COMMENT '本次冻结的原箱来源明细', + `delivery_order_id` bigint NOT NULL COMMENT '原运输派送单', + `source_pick_id` bigint NOT NULL COMMENT '原箱实际出库拣货凭据', + `source_outbound_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原出库单业务号', + `source_dispatch_item_id` bigint NOT NULL COMMENT '原排车货物明细', + `source_outbound_pallet_item_id` bigint NOT NULL COMMENT '原出库托盘明细', + `return_carton_id` bigint NOT NULL COMMENT '真实退货原箱标识', + `carton_mark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原箱业务箱码快照', + `overseas_warehouse_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际回仓海外仓标识', + `target_pallet_id` bigint NOT NULL COMMENT '实际回仓目标实物托盘', + `target_pallet_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际目标托盘业务码', + `target_location_id` bigint NOT NULL COMMENT '实际回仓目标库位', + `target_location_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际目标库位业务码', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原出库快照中的商品编码', + `product_name_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原出库快照中的中文品名', + `quantity` bigint NOT NULL COMMENT '本次原SKU实际恢复件数', + `packages` bigint NOT NULL COMMENT '本箱仅首条SKU记录计一箱其余为零', + `evidence_file_ids_json` json NOT NULL COMMENT '本次实收证据文件引用', + `received_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次原箱实收确认操作人', + `received_at` datetime(3) NOT NULL COMMENT '实际原箱回仓入账时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_return_carton_receipt_source` (`customer_id`,`source_pick_id`,`sku_code`), + KEY `idx_return_carton_receipt_exception` (`customer_id`,`exception_order_id`,`received_at`), + KEY `idx_return_carton_receipt_delivery` (`customer_id`,`delivery_order_id`), + CONSTRAINT `chk_return_carton_receipt_quantity` CHECK (((`quantity` > 0) and (`packages` in (0,1)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='原生退货箱按原出库SKU实际回仓的不可变凭据'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_return_inventory_outbound_movement` ADD COLUMN `return_sku_quantity` bigint DEFAULT NULL COMMENT '退货单SKU本来源计划出库件数快照,NULL为历史整箱出库'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_return_packing_plan` ADD KEY `idx_ll_return_packing_plan_warehouse` (`overseas_warehouse_id`,`status`,`pushed_at`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_inventory_daily` ( + `day_version_id` bigint NOT NULL COMMENT '所属历史日版本', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源货主编码', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '来源商品编码', + `product_quality` int NOT NULL COMMENT '来源库存品质', + `physical_quantity` decimal(20,6) DEFAULT NULL COMMENT '日末实物库存,未知为空,已确认零为零', + `quality_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '日末资格,有效或未知', + `quality_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '缺覆盖或锚点等未知原因', + `anchor_reference` bigint DEFAULT NULL COMMENT '独立库存锚点版本', + `evidence_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '该日计算证据摘要', + `source` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '库存来源标记,流水还原', + PRIMARY KEY (`day_version_id`,`customer_code`,`sku_code`,`product_quality`), + KEY `idx_selfop_daily_identity` (`customer_code`,`sku_code`,`day_version_id`), + CONSTRAINT `chk_selfop_daily_quantity` CHECK ((((`quality_status` = _utf8mb4'VALID') and (`physical_quantity` is not null) and (`physical_quantity` >= 0)) or ((`quality_status` = _utf8mb4'UNKNOWN') and (`physical_quantity` is null)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='历史日末分货主商品品质实物库存'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_inventory_day_version` ( + `id` bigint NOT NULL COMMENT '不可变历史日版本标识', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库编码', + `business_date` date NOT NULL COMMENT '北京时间日末所属日期', + `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '业务范围摘要', + `rule_version` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '日末库存还原规则版本', + `build_run_id` bigint NOT NULL COMMENT '历史重建执行尝试', + `publication_group_id` bigint NOT NULL COMMENT '必须一起切换的发布组标识', + `sales_run_id` bigint DEFAULT NULL COMMENT '构建时固定的销量证据版本', + `anchor_run_id` bigint NOT NULL COMMENT '固定的独立库存锚点版本', + `input_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '冻结流水修订与覆盖及锚点输入摘要', + `evidence_json` json NOT NULL COMMENT '固定输入清单及不可变证据引用', + `status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '构建中、就绪、已发布、已替代或失败', + `head_slot` tinyint DEFAULT NULL COMMENT '当前日头为一,非当前版本为空', + `valid_sku_count` bigint NOT NULL DEFAULT '0' COMMENT '合格商品数', + `unknown_sku_count` bigint NOT NULL DEFAULT '0' COMMENT '待核验商品数', + `created_at` datetime(3) NOT NULL COMMENT '版本创建UTC时刻', + `published_at` datetime(3) DEFAULT NULL COMMENT '发布组提交UTC时刻', + `superseded_at` datetime(3) DEFAULT NULL COMMENT '被新组替代的UTC时刻', + `invalidated_at` datetime(3) DEFAULT NULL COMMENT '已确认输入失效的UTC时刻', + `invalidation_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '旧版本失效原因', + `rebuild_run_id` bigint DEFAULT NULL COMMENT '处理失效版本的重建尝试', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_history_build_day` (`build_run_id`,`business_date`), + UNIQUE KEY `uk_selfop_history_head` (`source_account`,`warehouse_code`,`business_date`,`head_slot`), + KEY `idx_selfop_history_group` (`publication_group_id`,`status`), + CONSTRAINT `chk_selfop_history_head` CHECK (((`head_slot` is null) or ((`head_slot` = 1) and (`status` = _utf8mb4'PUBLISHED')))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='历史日库存不可变版本及原子发布日头'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_inventory_flow` ( + `id` bigint NOT NULL COMMENT '应用生成的流水记录标识', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库编码', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源货主编码', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '来源商品编码', + `source_flow_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源流水字符串标识', + `product_quality` int NOT NULL COMMENT '来源品质,零正品一次品,其他未知', + `cell_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源库位编码', + `inner_batch_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源内部批次号', + `bill_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源业务单号', + `source_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源关联单号', + `bill_type` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源业务类型,未验证类型不得参与正式还原', + `book_qty` decimal(20,6) DEFAULT NULL COMMENT '来源记账增减量,未知为空', + `book_change_qty_raw` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源带符号变动量原文', + `delta_quantity` decimal(20,6) DEFAULT NULL COMMENT '解析后的有符号实物变动量', + `close_quantity` decimal(20,6) DEFAULT NULL COMMENT '对应库位批次品质链的结存', + `source_create_time` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源北京时间原文', + `event_at_utc` datetime(3) DEFAULT NULL COMMENT '流水发生UTC时刻,无法解析时为空', + `business_date` date DEFAULT NULL COMMENT '北京时间业务日期', + `quantity_unit` varchar(16) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '已确认数量单位,未知为空', + `content_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '当前事实内容摘要', + `revision_no` bigint NOT NULL COMMENT '同来源流水单调增加的修订号', + `stage_id` bigint NOT NULL COMMENT '当前事实对应不可变暂存证据', + `first_run_id` bigint NOT NULL COMMENT '首次观察执行尝试', + `last_run_id` bigint NOT NULL COMMENT '最近确认执行尝试', + `last_observed_at` datetime(3) NOT NULL COMMENT '最近观察UTC时刻', + `validation_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '字段资格,有效或未知', + `validation_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '数量或身份待核验原因', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_flow_source` (`source_account`,`warehouse_code`,`source_flow_id`), + KEY `idx_selfop_flow_sku` (`source_account`,`warehouse_code`,`customer_code`,`sku_code`,`event_at_utc`), + KEY `idx_selfop_flow_day` (`source_account`,`warehouse_code`,`business_date`), + CONSTRAINT `chk_selfop_flow_revision` CHECK ((`revision_no` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='自营历史库存流水最新事实,旧版本保留于暂存证据'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_inventory_snapshot` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `snapshot_run_id` bigint NOT NULL COMMENT 'INVENTORY 执行尝试;发布后该批明细不可修改', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始产品 SKU', + `product_quality` smallint NOT NULL COMMENT '来源品质,当前 0 正品、1 次品;全量均保存,不套用整箱库存', + `product_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源名称', + `physical_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源stkQty实物库存,未知为空', + `available_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源useStkQty可用库存,未知为空,不再次扣冻结', + `frozen_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源freezeQty冻结库存,未知为空', + `transit_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源transitQty在途数量,未知为空,不计可售库存', + `source_unique_key` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '原 uniqueKey4tenant,只作来源证据', + `observed_at_utc` datetime(3) NOT NULL COMMENT '所在页实际采集时间;缺行占位取本批采集完成时间', + `quality_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'VALID、UNKNOWN、INVALID;STALE 按批次年龄实时派生', + `quality_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'SOURCE_ROW_MISSING、FIELD_MISSING、NEGATIVE_QUANTITY 等', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_stock_snapshot` (`snapshot_run_id`,`source_account`,`customer_code`,`warehouse_code`,`sku_code`,`product_quality`), + KEY `idx_selfop_stock_lookup` (`source_account`,`customer_code`,`warehouse_code`,`sku_code`,`product_quality`,`snapshot_run_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='产品库存全量批次明细'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_outbound_discovery_scope` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `catalog_from_utc` datetime(3) DEFAULT NULL COMMENT '账号完整目录连续覆盖UTC下界,不等同销量覆盖', + `catalog_until_utc` datetime(3) DEFAULT NULL COMMENT '账号完整目录连续覆盖UTC上界,不等同销量覆盖', + `next_sequence` bigint NOT NULL DEFAULT '1' COMMENT '新发现任务的单调调度序号;重试沿用,只安排任务,不判断对象内容的新旧', + `next_observation_sequence` bigint NOT NULL DEFAULT '1' COMMENT '每次实际出库详情请求前分配的单调采集代次;与 task 调度序号独立,重试请求也分配新代次', + `active_task_id` bigint DEFAULT NULL COMMENT '当前共享发现/详情补齐任务', + `lease_owner` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账号发现执行者', + `lease_until_utc` datetime(3) DEFAULT NULL COMMENT '账号发现租约到期时刻', + `fence_token` bigint NOT NULL DEFAULT '0' COMMENT '防止过期发现进程继续写共享暂存或派发任务', + `request_budget` int NOT NULL COMMENT '一次调度允许的目录、详情请求总预算,必须为正', + `time_budget_seconds` int NOT NULL COMMENT '一次调度允许占用的执行时长,必须为正', + `min_request_interval_ms` int NOT NULL COMMENT '同账号请求最小间隔,按已核准配额配置', + `api_budget_json` json DEFAULT NULL COMMENT '账号所有采集族共用的预算、统计日、保守预留及确认消耗、尝试许可和独占交接依据', + `api_cooldown_until_utc` datetime(3) DEFAULT NULL COMMENT '账号全部真实请求共用冷却UTC截止,重启与跨日不清除', + `api_pause_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账号停止或等待的固定原因码,不保存供应商原始错误或凭据', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_discovery_account` (`source_account`), + CONSTRAINT `chk_selfop_outbound_discovery_scope` CHECK (((`request_budget` > 0) and (`time_budget_seconds` > 0) and (`min_request_interval_ms` > 0) and (`fence_token` >= 0) and (`next_sequence` > 0) and (`next_observation_sequence` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='账号共享出库目录与详情发现协调作用域'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_outbound_item` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `order_id` bigint NOT NULL COMMENT '对应外部出库事实', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始 productSku', + `product_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源商品名称,仅作展示', + `actual_quantity` decimal(20,6) NOT NULL COMMENT '详情 actualDeliveryQty,必须为非负有效数值', + `quantity_unit` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '已核准业务单位;未确认单位不发布正式数量统计', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_order_sku` (`order_id`,`sku_code`), + KEY `idx_selfop_item_sku` (`sku_code`,`order_id`), + CONSTRAINT `chk_selfop_outbound_item` CHECK ((`actual_quantity` >= 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='整单替换的实际出库明细'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_outbound_order` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `delivery_no` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT 'OMP 发货单号,采用列表及详情同一身份', + `source_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'WMS 来源出库单号,缺失不以内部 ID 回退展示', + `source_status` int NOT NULL COMMENT '原始状态,100 已出库、99 已取消;不改造成内部状态码', + `source_created_time` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源创建时间原始字符串,不使用采集时间替代', + `source_outbound_time` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源实际出库时间原始字符串,不使用采集时间替代', + `source_timezone` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '解析采用的源时区', + `outbound_at_utc` datetime(3) DEFAULT NULL COMMENT '已核准的实际出库时间点;非出库状态可空', + `business_date` date DEFAULT NULL COMMENT '已核准业务时区下的出库日', + `business_timezone` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '该事实当前归属仓所用业务时区,迁仓后重新确定业务日', + `sales_eligible` tinyint NOT NULL DEFAULT '0' COMMENT '仅已出库、时间与全部数量有效时为 1', + `revision_no` bigint NOT NULL DEFAULT '1' COMMENT '该单内容变更次数,不等于拉取次数', + `content_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '订单头及完整 SKU 明细规范化摘要', + `last_run_id` bigint NOT NULL COMMENT '最后一次确认或修订的执行尝试', + `last_observation_sequence` bigint NOT NULL COMMENT '最后接受的完整详情采集代次;仅防旧观测重放,不按 task 调度序号拒绝较晚实际读取的事实,不冒充领星源版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_order` (`source_account`,`customer_code`,`delivery_no`), + KEY `idx_selfop_order_daily` (`source_account`,`warehouse_code`,`sales_eligible`,`business_date`,`id`), + KEY `idx_selfop_order_run` (`last_run_id`), + CONSTRAINT `chk_selfop_outbound_order` CHECK (((`revision_no` > 0) and (`last_observation_sequence` > 0) and (`sales_eligible` in (0,1)) and ((`sales_eligible` = 0) or ((`source_status` = 100) and (`source_timezone` is not null) and (`outbound_at_utc` is not null) and (`business_date` is not null))))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='最后确认的单据事实'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_owner` ( + `id` bigint NOT NULL COMMENT '主键', + `run_id` bigint NOT NULL COMMENT '完整资料采集版本', + `source_account` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '来源账号', + `customer_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主编码', + `customer_name` varchar(255) DEFAULT NULL COMMENT '领星货主名称', + `source_status` varchar(32) DEFAULT NULL COMMENT '来源启停状态', + `observed_at_utc` datetime(6) NOT NULL COMMENT '资料观测时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_owner_version` (`run_id`,`source_account`,`customer_code`), + KEY `idx_selfop_owner_lookup` (`source_account`,`customer_code`,`run_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='自营领星货主资料版本'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_product` ( + `id` bigint NOT NULL COMMENT '主键', + `run_id` bigint NOT NULL COMMENT '完整资料采集版本', + `source_account` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '来源账号', + `customer_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主编码', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '货主商品编码', + `product_name` varchar(255) DEFAULT NULL COMMENT '商品名称', + `declared_length` decimal(24,6) DEFAULT NULL COMMENT '商品资料长度', + `declared_width` decimal(24,6) DEFAULT NULL COMMENT '商品资料宽度', + `declared_height` decimal(24,6) DEFAULT NULL COMMENT '商品资料高度', + `declared_size_unit` varchar(32) DEFAULT NULL COMMENT '商品资料尺寸单位', + `measured_length` decimal(24,6) DEFAULT NULL COMMENT '仓库实测长度', + `measured_width` decimal(24,6) DEFAULT NULL COMMENT '仓库实测宽度', + `measured_height` decimal(24,6) DEFAULT NULL COMMENT '仓库实测高度', + `measured_size_unit` varchar(32) DEFAULT NULL COMMENT '仓库实测尺寸单位', + `observed_at_utc` datetime(6) NOT NULL COMMENT '资料观测时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_product_version` (`run_id`,`source_account`,`customer_code`,`sku_code`), + KEY `idx_selfop_product_lookup` (`source_account`,`customer_code`,`sku_code`,`run_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='自营领星商品资料版本'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_sku_daily_sales` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `sales_run_id` bigint NOT NULL COMMENT 'OUTBOUND 执行尝试,同时是计算版本', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始产品 SKU', + `business_date` date NOT NULL COMMENT '已核准业务日', + `outbound_quantity` decimal(20,6) NOT NULL COMMENT '有效出库实际件数之和,非负', + `outbound_order_count` bigint NOT NULL COMMENT '该维度去重发货单数,非负', + `quantity_unit` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '同一统计维度内一致的业务单位', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_daily_version` (`sales_run_id`,`source_account`,`customer_code`,`warehouse_code`,`sku_code`,`business_date`), + KEY `idx_selfop_daily_window_cover` (`sales_run_id`,`source_account`,`warehouse_code`,`business_date`,`customer_code`,`sku_code`,`outbound_quantity`,`outbound_order_count`,`quantity_unit`), + KEY `idx_selfop_daily_sku_cover` (`sales_run_id`,`source_account`,`warehouse_code`,`customer_code`,`sku_code`,`business_date`,`outbound_quantity`,`outbound_order_count`,`quantity_unit`), + CONSTRAINT `chk_selfop_sku_daily_sales` CHECK (((`outbound_quantity` >= 0) and (`outbound_order_count` >= 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='完整销量版本的稀疏日事实'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_sku_profile` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `profile_run_id` bigint NOT NULL COMMENT '本仓销量或库存候选版本;与对应 daily/snapshot 使用同一 run,发布后该版本全部维度行不可修改', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始产品 SKU', + `product_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '本版本确认的名称,不实时连接其他版本名称', + `quantity_unit` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '本版本已核准单位;未知或两版本单位冲突时不计算混合指标', + `first_seen_at_utc` datetime(3) DEFAULT NULL COMMENT '本证据族真实观测到本仓商品的最早接收时刻;缺行占位不能生成观察证据', + `earliest_evidence_at_utc` datetime(3) DEFAULT NULL COMMENT '库存版取真实库存首次观察时刻;销量版从该版有效事实重新求最早已核准出库时间,可随改期、取消或迁仓撤回/后移', + `evidence_type` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'INVENTORY_OBSERVATION、VALID_OUTBOUND、NONE;不得将销量证据复制成库存真实观察证据', + `evidence_run_id` bigint DEFAULT NULL COMMENT '本证据族真实依据的采集批次,无证据占位为空', + `last_seen_run_id` bigint DEFAULT NULL COMMENT '本证据族最近真实观测批次,无证据占位为空', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_profile_version` (`profile_run_id`,`source_account`,`customer_code`,`warehouse_code`,`sku_code`), + KEY `idx_selfop_profile_evidence` (`profile_run_id`,`earliest_evidence_at_utc`,`customer_code`,`sku_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='随发布版本固定的 SKU 维度与观察依据'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_sync_run` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `task_id` bigint NOT NULL COMMENT '本次执行请求', + `execution_purpose` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '从逻辑任务冻结继承,验证尝试不能作为正式统计版本', + `scope_id` bigint DEFAULT NULL COMMENT '仅账号共享发现为空;分仓执行必须有作用域', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `run_role` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'ACCOUNT_DISCOVERY 或 WAREHOUSE_SYNC', + `upstream_task_id` bigint DEFAULT NULL COMMENT '分仓出库计算引用的共享切片及其稳定暂存集合', + `attempt_no` int NOT NULL COMMENT '同一请求从 1 起递增', + `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '本版本的业务范围摘要', + `scope_snapshot_json` json NOT NULL COMMENT '分仓版只含本仓货主/品质、固定首采 [B,E0)、时区、调度与过期阈值;账号发现保存待路由仓集合,不冒充业务版', + `observed_dimensions_json` json DEFAULT NULL COMMENT '本次实际出现的仓库/货主集合及数量摘要,仅作采集证据;例如已观测 70 货主不等于固定授权范围', + `fence_token` bigint NOT NULL COMMENT '本尝试持有的栅栏版本', + `base_published_run_id` bigint DEFAULT NULL COMMENT '执行开始时的上一可见版本', + `reference_sales_run_id` bigint DEFAULT NULL COMMENT '库存构建开始时固定的本仓已发布销量版,用其不可变 SKU 维度生成出库已知商品占位;没有已发布销量版时为空,不读取半归并订单事实', + `inventory_daily_sample_date` date DEFAULT NULL COMMENT '北京时间当日首个合格计划库存发布代表日期,非代表为空', + `inventory_sample_rule_version` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '日库存代表选择规则 DAILY_SCHEDULED_FIRST_V1,与日标记原子保存', + `status` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'FETCHING、VALIDATED、ROUTED、FACTS_APPLIED、BUILDING、READY、PUBLISHED、REUSED、YIELDED、FAILED、ABORTED、SAMPLE_DONE;复用和验证不是版本头', + `last_phase` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT '失败/中止前所在阶段,支持判断是否已经归并事实', + `fetch_started_at_utc` datetime(3) DEFAULT NULL COMMENT '实际采集开始UTC时间', + `fetch_finished_at_utc` datetime(3) DEFAULT NULL COMMENT '实际采集完成UTC时间,未完成为空', + `build_started_at_utc` datetime(3) DEFAULT NULL COMMENT '实际开始有界候选构建UTC时间,用于构建耗时及首采合并间隔', + `warehouse_daily_ready` tinyint NOT NULL DEFAULT '0' COMMENT '仓库日汇总已完整构建并校验,含完整空版本', + `finished_at_utc` datetime(3) DEFAULT NULL COMMENT '本次尝试终止UTC时间', + `published_at_utc` datetime(3) DEFAULT NULL COMMENT '实际原子切换发布指针UTC时间', + `superseded_at_utc` datetime(3) DEFAULT NULL COMMENT '被新发布版替代的首次UTC时间,同事务填写且重试不重置', + `page_count` int NOT NULL DEFAULT '0' COMMENT '已完整获取页数', + `source_total_count` bigint DEFAULT NULL COMMENT '上游可靠返回的总数;未返回则为空', + `unique_object_count` bigint NOT NULL DEFAULT '0' COMMENT '规范化去重后对象数', + `progress_snapshot_json` json DEFAULT NULL COMMENT '尝试终止时冻结的有界可靠进度摘要,历史尝试不随逻辑任务改写', + `heartbeat_at_utc` datetime(3) DEFAULT NULL COMMENT '有效执行者最新UTC心跳,不代表业务检查点推进', + `coverage_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'UNKNOWN、PARTIAL、COMPLETE;分页完整与数值有效性分别判断', + `covered_from_utc` datetime(3) DEFAULT NULL COMMENT '本仓销量版本实际连续覆盖UTC下界', + `covered_until_utc` datetime(3) DEFAULT NULL COMMENT '本仓销量版本实际连续覆盖UTC上界,不含端点', + `complete_day_from` date DEFAULT NULL COMMENT '本仓完整自然日区间首日,包含', + `complete_day_until` date DEFAULT NULL COMMENT '本仓完整自然日区间末日,不含', + `applied_fact_revision` bigint DEFAULT NULL COMMENT '本次尝试归并后的事实修订号,库存为空', + `calculated_fact_revision` bigint DEFAULT NULL COMMENT '候选销量版本计算所依据的固定事实修订号', + `error_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '内部可诊断错误分类,不保存认证信息', + `error_message` varchar(500) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '脱敏后的固定错误摘要', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_run_attempt` (`task_id`,`attempt_no`), + UNIQUE KEY `uk_selfop_inventory_daily` (`source_account`,`warehouse_code`,`inventory_daily_sample_date`), + KEY `idx_selfop_run_scope` (`scope_id`,`id`), + KEY `idx_selfop_run_status` (`status`,`updated_at`), + CONSTRAINT `chk_selfop_inventory_daily` CHECK ((((`inventory_daily_sample_date` is null) and (`inventory_sample_rule_version` is null)) or ((`inventory_daily_sample_date` is not null) and (`inventory_sample_rule_version` is not null) and (`inventory_sample_rule_version` = _utf8mb4'DAILY_SCHEDULED_FIRST_V1') and (`execution_purpose` = _utf8mb4'BUSINESS') and (`run_role` = _utf8mb4'WAREHOUSE_SYNC') and (`status` = _utf8mb4'PUBLISHED') and (`coverage_status` = _utf8mb4'COMPLETE')))), + CONSTRAINT `chk_selfop_sync_run` CHECK (((`attempt_no` > 0) and (`page_count` >= 0) and (`unique_object_count` >= 0) and (`execution_purpose` in (_utf8mb4'BUSINESS',_utf8mb4'VALIDATION')) and ((`execution_purpose` <> _utf8mb4'VALIDATION') or (`status` not in (_utf8mb4'PUBLISHED',_utf8mb4'REUSED'))) and ((`source_total_count` is null) or (`source_total_count` >= 0)) and (((`run_role` = _utf8mb4'ACCOUNT_DISCOVERY') and (`scope_id` is null) and (`warehouse_code` is null)) or ((`run_role` = _utf8mb4'WAREHOUSE_SYNC') and (`scope_id` is not null) and (`warehouse_code` is not null))))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='执行尝试、覆盖证明和版本头'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_sync_scope` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `data_family` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'OUTBOUND 或 INVENTORY;按账号+仓库+任务族互斥', + `scope_json` json NOT NULL COMMENT '本仓范围规则,customerMode=ALL_AUTHORIZED,库存为全部品质;当前账号全部授权货主均自营,不将当天出现的货主列表当白名单', + `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '仓库、货主范围规则、品质、时区及单位口径的规范化摘要;不包含当天观测到的客户/SKU 集合', + `business_timezone` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '本仓报表及调度时区,初始建议值为 Asia/Shanghai,各仓独立核准', + `source_timezone` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '本仓已核准的出库源时间时区', + `schedule_cron` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '本仓、本任务族的调度表达式,按 business_timezone 执行', + `stale_after_seconds` int NOT NULL COMMENT '本仓、本任务族数据过期阈值,必须为正;库存初始可采用 26 小时,后续按仓调整', + `warehouse_policy_ref` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '未来按仓告警/补货策略的稳定引用;一期为空,不建告警规则表', + `initial_from_utc` datetime(3) DEFAULT NULL COMMENT '首采固定UTC下界,按本仓业务时区减一个月', + `initial_until_utc` datetime(3) DEFAULT NULL COMMENT '首采固定UTC截止,重试不重新取当前时间', + `discovery_from_utc` datetime(3) DEFAULT NULL COMMENT '本仓已发布的连续销量覆盖UTC下界', + `discovery_until_utc` datetime(3) DEFAULT NULL COMMENT '本仓已发布的连续销量覆盖UTC上界,不含端点', + `fact_revision` bigint NOT NULL DEFAULT '0' COMMENT '出库事实归并修订号;内容实际变化才增加', + `published_fact_revision` bigint NOT NULL DEFAULT '0' COMMENT '本仓最后已发布销量版所使用的事实修订号', + `rebuild_required` tinyint NOT NULL DEFAULT '0' COMMENT '事实变化待重建标记;跨仓修订同时置旧、新仓为 1', + `invalidated_at_utc` datetime(3) DEFAULT NULL COMMENT '最近一次因事实修订使当前版待重建的时刻', + `published_run_id` bigint DEFAULT NULL COMMENT '唯一对外可见版本,指向本任务族已发布执行批次', + `lease_owner` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '当前执行者令牌,不使用仅进程内锁', + `lease_until_utc` datetime(3) DEFAULT NULL COMMENT '租约到期时刻', + `fence_token` bigint NOT NULL DEFAULT '0' COMMENT '每次取得租约递增,事实提交和发布均校验', + `known_order_cursor_id` bigint DEFAULT NULL COMMENT '本仓已可靠处理的稳定订单内部标识游标', + `known_order_round_max_id` bigint DEFAULT NULL COMMENT '本轮已知单复查固定最大内部标识', + `known_order_round_started_at_utc` datetime(3) DEFAULT NULL COMMENT '本仓已知单复查轮次开始UTC时间', + `known_order_round_finished_at_utc` datetime(3) DEFAULT NULL COMMENT '本仓已知单完整轮转完成UTC时间', + `history_round_from_utc` datetime(3) DEFAULT NULL COMMENT '本仓历史核对固定UTC下界', + `history_round_until_utc` datetime(3) DEFAULT NULL COMMENT '本仓历史核对固定UTC上界', + `history_slice_cursor_utc` datetime(3) DEFAULT NULL COMMENT '本仓下一待核对历史切片UTC位置', + `history_round_finished_at_utc` datetime(3) DEFAULT NULL COMMENT '上一轮历史时间片全部完成时刻', + `review_request_budget` int NOT NULL COMMENT '本仓单次复查最大请求数,必须为正', + `review_time_budget_seconds` int NOT NULL COMMENT '本仓单次复查最大执行秒数,必须为正', + `review_target_days` int NOT NULL DEFAULT '7' COMMENT '建议每 7 天轮转一遍,属于待配额验证的目标,不保证首次大量详情在单次调度内完成', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_scope` (`source_account`,`warehouse_code`,`data_family`), + KEY `idx_selfop_scope_lease` (`lease_until_utc`), + CONSTRAINT `chk_selfop_sync_scope` CHECK (((`data_family` in (_utf8mb4'OUTBOUND',_utf8mb4'INVENTORY')) and (`stale_after_seconds` > 0) and (`review_request_budget` > 0) and (`review_time_budget_seconds` > 0) and (`review_target_days` > 0) and (`fact_revision` >= 0) and (`published_fact_revision` >= 0) and (`fence_token` >= 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='分仓任务族租约及发布指针'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_sync_stage` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `run_id` bigint NOT NULL COMMENT '首次写入该暂存对象的执行尝试', + `stage_batch_id` bigint NOT NULL COMMENT '出库取共享发现 task.id,便于断点续取;库存取本次 run.id,严禁跨尝试混页', + `last_fetch_run_id` bigint NOT NULL COMMENT '最后一次补齐该对象的执行尝试,保留重试来源', + `observation_sequence` bigint DEFAULT NULL COMMENT '该完整出库详情实际请求的采集代次;有效出库对象必填,目录待补对象和库存为空;不能填 task 调度序号', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `previous_warehouse_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '路由时从已有单据识别的原仓库;归并前再校验,跨仓时通知两仓', + `object_type` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'OUTBOUND_ORDER 或 PRODUCT_STOCK', + `object_key_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '规范化业务键摘要;原业务键保留在载荷中并核对', + `first_page_no` int NOT NULL COMMENT '首次发现页码', + `observed_at_utc` datetime(3) NOT NULL COMMENT '实际接收该对象的时刻', + `content_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '完整规范化对象摘要', + `payload_json` json NOT NULL COMMENT '目录阶段可先存订单头,详情齐后补完整 SKU;VALID 后不再修改;库存保存产品库存字段', + `before_payload_json` json DEFAULT NULL COMMENT '订单归并事务内记录归并前的完整规范化事实;新增单为空', + `validation_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '暂存校验状态:PENDING待核验、VALID有效、INVALID异常', + `validation_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字段缺失、冲突、未知时区等原因', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_stage_object` (`stage_batch_id`,`object_type`,`object_key_hash`), + KEY `idx_selfop_stage_history` (`object_type`,`object_key_hash`,`stage_batch_id`), + KEY `idx_selfop_stage_observation` (`object_type`,`object_key_hash`,`validation_status`,`observation_sequence`), + KEY `idx_selfop_stage_fact_observation` (`observation_sequence`,`warehouse_code`,`object_type`,`validation_status`,`run_id`,`observed_at_utc`), + KEY `idx_selfop_stage_route` (`stage_batch_id`,`warehouse_code`,`validation_status`), + CONSTRAINT `chk_selfop_sync_stage` CHECK (((`first_page_no` > 0) and ((`object_type` <> _utf8mb4'OUTBOUND_ORDER') or (`validation_status` <> _utf8mb4'VALID') or (`observation_sequence` is not null)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='待验证事实与修订证据'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_sync_task` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `task_no` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '稳定采集业务任务号,重试沿用,不展示内部数据库标识', + `execution_purpose` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'BUSINESS或VALIDATION;由服务端冻结用途,子任务继承', + `validation_root_task_id` bigint DEFAULT NULL COMMENT '验证会话唯一预算根任务,根引用自身,正式任务为空', + `validation_budget_json` json DEFAULT NULL COMMENT '验证根冻结硬预算、累计消耗、库存分仓页数、截止时刻及停止原因', + `business_root_task_id` bigint DEFAULT NULL COMMENT '测试人工正式采集共享预算根任务;生产任务为空', + `business_budget_json` json DEFAULT NULL COMMENT '仅测试正式采集根保存冻结请求上限、截止时间、消耗及停止原因', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `task_role` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'ACCOUNT_DISCOVERY 或 WAREHOUSE_SYNC', + `scope_id` bigint DEFAULT NULL COMMENT '分仓任务必须引用分仓作用域;仅账号共享发现为空', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `discovery_scope_id` bigint DEFAULT NULL COMMENT '共享发现必填,引用账号发现协调器', + `upstream_task_id` bigint DEFAULT NULL COMMENT '出库分仓任务引用已持久化目录的共享发现切片;库存无此上游', + `discovery_sequence` bigint DEFAULT NULL COMMENT '共享任务及分仓子任务继承的调度顺序;重试保持不变,不用于事实覆盖判定', + `observation_baseline` bigint DEFAULT NULL COMMENT '共享任务建立时已分配的最大详情采集代次,分仓子任务继承;用于识别旧任务恢复期间出现的其他任务新观测', + `request_key` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '共享发现包含切片/计划槽位;分仓任务包含仓库、任务族及切片或计划槽位;人工附请求幂等键', + `request_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '请求类型、查询范围、范围摘要的指纹;同键不同请求拒绝', + `task_type` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT '计划、补采、复核、重建与验证;INVENTORY_FLOW_HISTORY为流水片,INVENTORY_HISTORY_BUILD为本地历史还原', + `planned_at_utc` datetime(3) DEFAULT NULL COMMENT '计划时点;人工请求可空', + `query_from_utc` datetime(3) DEFAULT NULL COMMENT '出库查询区间UTC下界,库存不填', + `query_until_utc` datetime(3) DEFAULT NULL COMMENT '出库查询区间UTC上界,不含端点,库存不填', + `query_scope_json` json NOT NULL COMMENT '不变的账号、货主、仓库、品质和查询条件快照;按单补查在此记录单号', + `routing_manifest_json` json DEFAULT NULL COMMENT '共享切片目录完整标记、每仓对象键集合/数量和详情就绪状态;各对象记录 effectiveStageId,需新代次复查时记录 refreshTaskId,完成后指向新有效暂存;不改写旧载荷', + `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '建任务时的业务范围摘要', + `status` varchar(20) COLLATE utf8mb4_bin NOT NULL COMMENT 'WAITING_SOURCE、READY、RUNNING、RETRY_WAIT、SUCCEEDED、DEAD、SAMPLE_DONE;样本结束不等于正式成功', + `apply_state` varchar(20) COLLATE utf8mb4_bin NOT NULL COMMENT '正式出库归并NOT_STARTED、APPLYING、BLOCKED、APPLIED;共享发现、库存、重建及验证为NOT_APPLICABLE', + `affected_warehouse_codes_json` json DEFAULT NULL COMMENT '本次归并可能改变的仓集合,包含原仓与新仓;首段事实写入前登记,扩大集合须先取得新增仓租约并锁 scope,不能写完再补', + `apply_started_at_utc` datetime(3) DEFAULT NULL COMMENT '首段事实提交UTC时间', + `apply_completed_at_utc` datetime(3) DEFAULT NULL COMMENT '全部必需事实归并完成UTC时间,失败不填', + `attempt_count` int NOT NULL DEFAULT '0' COMMENT '已创建的执行尝试数', + `next_retry_at_utc` datetime(3) DEFAULT NULL COMMENT '有限退避后下一次可执行时刻', + `requested_by` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '人工请求的平台操作人,仅内部审计', + `result_published_run_id` bigint DEFAULT NULL COMMENT '正式成功任务实际发布或复用的版本;验证和共享发现为空', + `progress_json` json DEFAULT NULL COMMENT '与可靠检查点一起提交的有界阶段、单位、尝试和质量进度,不保存单据集合', + `progress_updated_at_utc` datetime(3) DEFAULT NULL COMMENT '最后可靠业务检查点UTC时间,与执行心跳分开', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_task_no` (`task_no`), + UNIQUE KEY `uk_selfop_task_request` (`source_account`,`request_key`), + KEY `idx_selfop_task_poll` (`status`,`next_retry_at_utc`,`id`), + KEY `idx_selfop_task_upstream` (`upstream_task_id`,`warehouse_code`), + KEY `idx_selfop_task_apply` (`apply_state`,`id`), + KEY `idx_selfop_task_scope_list` (`scope_id`,`created_at`,`id`), + KEY `idx_selfop_task_account_list` (`source_account`,`task_role`,`created_at`,`id`), + KEY `idx_selfop_task_business_root` (`business_root_task_id`,`status`,`id`), + CONSTRAINT `chk_selfop_business_budget` CHECK ((((`business_root_task_id` is null) and (`business_budget_json` is null)) or ((`execution_purpose` = _utf8mb4'BUSINESS') and (`business_root_task_id` is not null) and (((`business_root_task_id` = `id`) and (`business_budget_json` is not null)) or ((`business_root_task_id` <> `id`) and (`business_budget_json` is null)))))), + CONSTRAINT `chk_selfop_sync_task` CHECK (((`attempt_count` >= 0) and (`execution_purpose` in (_utf8mb4'BUSINESS',_utf8mb4'VALIDATION')) and (((`execution_purpose` = _utf8mb4'BUSINESS') and (`validation_root_task_id` is null) and (`validation_budget_json` is null)) or ((`execution_purpose` = _utf8mb4'VALIDATION') and (`validation_root_task_id` is not null) and (`apply_state` = _utf8mb4'NOT_APPLICABLE') and (`result_published_run_id` is null) and (`status` <> _utf8mb4'SUCCEEDED'))) and (((`task_role` = _utf8mb4'ACCOUNT_DISCOVERY') and (`scope_id` is null) and (`warehouse_code` is null) and (`discovery_scope_id` is not null)) or ((`task_role` = _utf8mb4'WAREHOUSE_SYNC') and (`scope_id` is not null) and (`warehouse_code` is not null))))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='一次计划或人工请求'; + +USE `baiyue_lastleg`; + +CREATE TABLE `ll_selfop_warehouse_daily_sales` ( + `sales_run_id` bigint NOT NULL COMMENT '完整销量计算版本标识', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码', + `business_date` date NOT NULL COMMENT '已核准业务日', + `observed_quantity` decimal(38,6) DEFAULT NULL COMMENT '该日PCS非负有效出库量之和,无有效行时为空', + `invalid_row_count` bigint NOT NULL COMMENT '该日数量为空或负数或单位非PCS的日事实行数', + `source_row_count` bigint NOT NULL COMMENT '该日参与仓库汇总的SKU日事实总行数', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + PRIMARY KEY (`sales_run_id`,`source_account`,`warehouse_code`,`business_date`), + CONSTRAINT `chk_selfop_warehouse_daily_sales` CHECK (((`source_row_count` > 0) and (`invalid_row_count` >= 0) and (`invalid_row_count` <= `source_row_count`) and ((`observed_quantity` is null) or (`observed_quantity` >= 0)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='完整销量版本按仓按日汇总,随SKU日事实批次原子构建'; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN `vehicle_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '车辆类型:PALLET_15为15拖,PALLET_30为30拖;拼车未提供时为空'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN `origin_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系人'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN `origin_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系电话'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN `destination_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系人'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN `destination_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系电话'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN `pickup_at` datetime DEFAULT NULL COMMENT '取货时间,按填写的日期时分保存,不转换时区'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN `delivery_at` datetime DEFAULT NULL COMMENT '送货时间,按填写的日期时分保存;拼车来源未提供时为空'; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +ALTER TABLE `ll_warehouse_transfer_inventory_allocation` ADD KEY `idx_ll_wh_transfer_allocation_position` (`transfer_order_id`,`inventory_position_id`); + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_lastleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +CREATE TABLE `event_delivery_retry_audit` ( + `request_id` varchar(36) NOT NULL COMMENT '人工重试请求UUID和幂等键', + `producer_table` varchar(64) NOT NULL COMMENT '本服务发件箱表名', + `entry_id` varchar(64) NOT NULL COMMENT '发件箱记录主键', + `event_id` varchar(128) NOT NULL COMMENT '原事件全局标识', + `event_type` varchar(64) NOT NULL COMMENT '原事件类型', + `payload_hash` varchar(71) NOT NULL COMMENT '原事件不可变负载摘要', + `operator_name` varchar(128) NOT NULL COMMENT '持有运维凭据的操作人标识', + `reason` varchar(500) NOT NULL COMMENT '人工重试原因', + `previous_failures` int NOT NULL COMMENT '重试前累计失败次数', + `previous_error` varchar(1000) DEFAULT NULL COMMENT '重试前最后一次脱敏错误', + `requested_at` datetime(3) NOT NULL COMMENT '重试申请提交时间', + PRIMARY KEY (`request_id`), + KEY `idx_event_retry_entry` (`producer_table`,`entry_id`,`requested_at`), + KEY `idx_event_retry_event` (`event_id`,`requested_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='业务事件人工重试审计,与恢复待发送状态同事务提交'; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_carrier_schedule_node_fact` ADD KEY `idx_container_shipping_node_timeline` (`container_booking_id`,`observed_at`,`id`); + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_chargeable_weight_confirmation` ( + `id` bigint NOT NULL COMMENT '确认记录ID', + `tenant_id` bigint NOT NULL COMMENT '客户隔离ID', + `inbound_id` bigint NOT NULL COMMENT '独立来源入仓单ID', + `operator_id` bigint NOT NULL COMMENT '确认客户成员ID', + `command_key` varchar(128) NOT NULL COMMENT '成员确认幂等键', + `fingerprint` char(64) NOT NULL COMMENT '计费重及测量轮次摘要', + `chargeable_weight_kg` decimal(18,4) NOT NULL COMMENT '客户确认计费重千克', + `confirmed_at` datetime(3) NOT NULL COMMENT '客户确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_weight_confirmation_command` (`tenant_id`,`operator_id`,`command_key`), + KEY `idx_weight_confirmation_inbound` (`tenant_id`,`inbound_id`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户计费重独立确认历史'; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_container_booking` ADD UNIQUE KEY `uk_container_booking_ocean_container` (`ocean_booking_id`,`container_no`); + +ALTER TABLE `fl_container_booking` ADD KEY `idx_container_booking_container_no` (`container_no`,`updated_at`,`id`); + +ALTER TABLE `fl_container_booking` ADD KEY `idx_container_booking_merge` (`record_status`,`merged_into_container_booking_id`); + +ALTER TABLE `fl_container_booking` ADD KEY `idx_container_booking_transit_summary` (`actual_sailing_at`,`actual_warehouse_arrival_at`,`ocean_booking_id`,`container_type`); + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_container_fee_detail` ADD KEY `idx_container_fee_review` (`tenant_id`,`review_status`,`source_status`); + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_container_transport_history` ADD UNIQUE KEY `uk_container_transport_history_operation` (`container_booking_id`,`operator_id`,`operation_id`); + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_customer_charge_rule` ADD KEY `idx_charge_rule_initialization` (`tenant_id`,`initialization_key`); + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_customs_broker_submission` ( + `id` bigint unsigned NOT NULL COMMENT '首次发送报关行批次ID', + `customs_container_id` bigint unsigned NOT NULL COMMENT '所属整柜报关聚合ID', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID快照', + `batch_no` varchar(64) NOT NULL COMMENT '首次发送报关行批次号', + `status` varchar(16) NOT NULL COMMENT '发送状态:SENT已发送', + `source_version` int unsigned NOT NULL COMMENT '发送时整柜报关聚合版本', + `source_snapshot_json` json NOT NULL COMMENT '发送时冻结资料版本与覆盖范围快照', + `sent_by` bigint unsigned NOT NULL COMMENT '首次发送操作人ID', + `sent_by_name` varchar(64) DEFAULT NULL COMMENT '首次发送操作人名称快照', + `sent_at` datetime(3) NOT NULL COMMENT '首次发送时间', + `version` int unsigned NOT NULL DEFAULT '1' COMMENT '乐观锁版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '批次创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '批次更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_broker_submission_container` (`customs_container_id`), + UNIQUE KEY `uk_customs_broker_submission_batch` (`batch_no`), + KEY `idx_customs_broker_submission_plan` (`loading_plan_id`,`sent_at`), + CONSTRAINT `fk_customs_broker_submission_container` FOREIGN KEY (`customs_container_id`) REFERENCES `fl_customs_container` (`id`), + CONSTRAINT `chk_customs_broker_submission_status` CHECK ((`status` = _utf8mb4'SENT')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='冻结退税报关资料首次发送报关行批次事实'; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_customs_clearance_result` ( + `id` bigint unsigned NOT NULL COMMENT '海关结果事实ID', + `declaration_batch_id` bigint unsigned NOT NULL COMMENT '所属正式申报批次ID', + `customs_container_id` bigint unsigned NOT NULL COMMENT '所属整柜报关聚合ID', + `result_type` varchar(32) NOT NULL COMMENT '结果类型:INSPECTION/SUPPLEMENT_REQUIRED/RELEASED/DETAINED/OTHER', + `result_status` varchar(16) NOT NULL DEFAULT 'OPEN' COMMENT '结果状态:OPEN/RESOLVED/CANCELLED', + `customs_entry_no` varchar(64) DEFAULT NULL COMMENT '报关单号快照', + `occurred_at` datetime(3) NOT NULL COMMENT '海关事实发生时间', + `resolution` varchar(1000) DEFAULT NULL COMMENT '处理结果或异常说明', + `evidence_file_id` bigint unsigned DEFAULT NULL COMMENT '结果凭证File文件ID', + `recorded_by` bigint unsigned NOT NULL COMMENT '平台录入人', + `recorded_by_name` varchar(64) DEFAULT NULL COMMENT '平台录入人名称快照', + `recorded_at` datetime(3) NOT NULL COMMENT '平台录入时间', + `previous_result_id` bigint unsigned DEFAULT NULL COMMENT '前序结果事实ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '结果创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '结果更新时间', + PRIMARY KEY (`id`), + KEY `idx_customs_clearance_result_batch` (`declaration_batch_id`,`occurred_at`,`id`), + KEY `idx_customs_clearance_result_container` (`customs_container_id`,`result_type`,`result_status`), + CONSTRAINT `fk_customs_clearance_result_batch` FOREIGN KEY (`declaration_batch_id`) REFERENCES `fl_customs_declaration_batch` (`id`), + CONSTRAINT `chk_customs_clearance_result_status` CHECK ((`result_status` in (_utf8mb4'OPEN',_utf8mb4'RESOLVED',_utf8mb4'CANCELLED'))), + CONSTRAINT `chk_customs_clearance_result_type` CHECK ((`result_type` in (_utf8mb4'INSPECTION',_utf8mb4'SUPPLEMENT_REQUIRED',_utf8mb4'RELEASED',_utf8mb4'DETAINED',_utf8mb4'OTHER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='正式申报后的海关结果不可变事实'; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_customs_completion_action_history` ( + `id` bigint unsigned NOT NULL COMMENT '客户回执动作历史ID', + `completion_document_id` bigint unsigned NOT NULL COMMENT '报关行回执当前版本逻辑根ID', + `receipt_version` int unsigned NOT NULL COMMENT '动作对应的回执文件版本', + `action` varchar(16) NOT NULL COMMENT '客户动作:CONFIRM确认、REJECT打回', + `reason` varchar(500) DEFAULT NULL COMMENT '客户打回原因;确认动作为空', + `operator_id` bigint unsigned NOT NULL COMMENT '客户操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '客户操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '客户动作时间', + PRIMARY KEY (`id`), + KEY `idx_customs_completion_action_history` (`completion_document_id`,`receipt_version`,`created_at`,`id`), + CONSTRAINT `fk_customs_completion_action_history_document` FOREIGN KEY (`completion_document_id`) REFERENCES `fl_customs_completion_document` (`id`), + CONSTRAINT `chk_customs_completion_action_history_action` CHECK ((`action` in (_utf8mb4'CONFIRM',_utf8mb4'REJECT'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户报关行回执确认与打回不可变历史'; + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_customs_completion_document` ADD COLUMN `customer_confirm_status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT '客户回执确认状态:PENDING/CONFIRMED/REJECTED'; + +ALTER TABLE `fl_customs_completion_document` ADD COLUMN `customer_confirmed_by` bigint unsigned DEFAULT NULL COMMENT '客户确认人ID'; + +ALTER TABLE `fl_customs_completion_document` ADD COLUMN `customer_confirmed_by_name` varchar(64) DEFAULT NULL COMMENT '客户确认人名称快照'; + +ALTER TABLE `fl_customs_completion_document` ADD COLUMN `customer_confirmed_at` datetime(3) DEFAULT NULL COMMENT '客户确认时间'; + +ALTER TABLE `fl_customs_completion_document` ADD COLUMN `customer_reject_reason` varchar(500) DEFAULT NULL COMMENT '客户打回原因'; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_customs_declaration_batch` ( + `id` bigint unsigned NOT NULL COMMENT '正式申报批次ID', + `customs_container_id` bigint unsigned NOT NULL COMMENT '所属整柜报关聚合ID', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID快照', + `batch_no` varchar(64) DEFAULT NULL COMMENT '平台正式申报批次号', + `status` varchar(32) NOT NULL COMMENT '批次状态:READY/SUBMITTED/ACKNOWLEDGED/RESULT_PENDING/CLOSED/CANCELLED', + `source_version` int unsigned NOT NULL COMMENT '创建时整柜报关聚合版本', + `source_snapshot_json` json NOT NULL COMMENT '提交时资料、回执和确认版本快照', + `customs_entry_no` varchar(64) DEFAULT NULL COMMENT '报关单号', + `submitted_by` bigint unsigned DEFAULT NULL COMMENT '正式申报提交人', + `submitted_by_name` varchar(64) DEFAULT NULL COMMENT '正式申报提交人名称快照', + `submitted_at` datetime(3) DEFAULT NULL COMMENT '正式申报提交时间', + `acknowledged_by` bigint unsigned DEFAULT NULL COMMENT '报关行确认受理人', + `acknowledged_by_name` varchar(64) DEFAULT NULL COMMENT '报关行确认受理人名称快照', + `acknowledged_at` datetime(3) DEFAULT NULL COMMENT '报关行确认受理时间', + `remark` varchar(500) DEFAULT NULL COMMENT '批次说明', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '批次创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '批次更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_declaration_batch_container` (`customs_container_id`,`id`), + KEY `idx_customs_declaration_batch_plan` (`loading_plan_id`,`status`,`created_at`), + CONSTRAINT `fk_customs_declaration_batch_container` FOREIGN KEY (`customs_container_id`) REFERENCES `fl_customs_container` (`id`), + CONSTRAINT `chk_customs_declaration_batch_status` CHECK ((`status` in (_utf8mb4'READY',_utf8mb4'SUBMITTED',_utf8mb4'ACKNOWLEDGED',_utf8mb4'RESULT_PENDING',_utf8mb4'CLOSED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='整柜正式申报批次事实'; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_fee_item` ADD COLUMN `default_price` decimal(12,2) DEFAULT NULL COMMENT '默认价格CNY;仅选费带入,实际费用可修改'; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_inbound_measurement` ADD KEY `idx_measure_inbound_status_id` (`tenant_id`,`inbound_id`,`status`,`id`); + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_inbound_measurement_item` ADD KEY `idx_measure_item_candidate` (`tenant_id`,`measurement_id`,`inbound_detail_id`); + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_inbound_order` ADD KEY `idx_inbound_smart_loading` (`warehouse_id`,`process_status`,`channel_code`,`expected_arrival_at`,`id`); + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_inbound_split_item` ADD KEY `idx_inbound_split_candidate` (`tenant_id`,`parent_inbound_id`,`source_inbound_detail_id`); + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_loading_plan_item` ADD UNIQUE KEY `uk_loading_item_plan_assignment` (`loading_plan_id`,`active_assignment_key`); + +ALTER TABLE `fl_loading_plan_item` ADD KEY `idx_loading_item_candidate` (`account_id`,`inbound_id`,`inbound_detail_id`,`deleted`); + +ALTER TABLE `fl_loading_plan_item` ADD KEY `idx_loading_item_pallet` (`pallet_id`,`deleted`); + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_ocean_booking` ADD UNIQUE KEY `uk_ocean_booking_bill_of_lading` (`bill_of_lading_no`); + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_sailing` ( + `id` bigint NOT NULL, + `sailing_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `template_id` bigint DEFAULT NULL, + `channel_id` bigint NOT NULL, + `channel_code_snapshot` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `channel_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `warehouse_id` bigint NOT NULL, + `warehouse_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `departure_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `destination_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `vessel_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `voyage_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `etd_at` datetime(3) NOT NULL, + `warehouse_cutoff_at` datetime(3) NOT NULL, + `eta_at` datetime(3) DEFAULT NULL, + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'OPEN', + `source_type` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'MANUAL', + `generated_key` varchar(192) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `planned_capacity_cbm` decimal(14,3) DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_by` bigint NOT NULL, + `created_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_by` bigint NOT NULL, + `updated_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `version` int NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fl_sailing_no` (`sailing_no`), + UNIQUE KEY `uk_fl_sailing_generated_key` (`generated_key`), + UNIQUE KEY `uk_fl_sailing_business` (`warehouse_id`,`channel_code_snapshot`,`departure_port_code`,`destination_port_code`,`etd_at`,`voyage_no`), + KEY `idx_fl_sailing_calendar` (`etd_at`,`warehouse_id`,`channel_id`,`status`), + KEY `idx_fl_sailing_route` (`departure_port_code`,`destination_port_code`), + CONSTRAINT `ck_fl_sailing_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'OPEN',_utf8mb4'CLOSED',_utf8mb4'DEPARTED',_utf8mb4'CANCELLED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_sailing_assignment` ( + `id` bigint unsigned NOT NULL COMMENT '归班事实ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键', + `sailing_id` bigint unsigned DEFAULT NULL COMMENT '船期实例ID,UNMATCHED为空', + `origin_sailing_id` bigint unsigned DEFAULT NULL COMMENT '异常重排/取消前的原船期实例ID', + `inbound_id` bigint unsigned DEFAULT NULL COMMENT '归班对象入库单ID', + `inbound_code` varchar(64) DEFAULT NULL COMMENT '入仓码快照,仅用于展示', + `receipt_batch_id` bigint unsigned DEFAULT NULL COMMENT '收货批次事实ID', + `forecast_id` bigint unsigned DEFAULT NULL COMMENT '货量预报事实ID', + `assignment_source` varchar(24) NOT NULL DEFAULT 'AUTO' COMMENT '归班来源:AUTO/MANUAL/ROLLOVER', + `assignment_version` int unsigned NOT NULL COMMENT '同一对象的归班版本', + `match_status` varchar(24) NOT NULL COMMENT 'FORECAST_MATCHED/RECEIVED/LATE/UNMATCHED/SUPERSEDED', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '已收实测体积', + `forecast_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '未收有效预计体积', + `route_source` varchar(32) DEFAULT NULL COMMENT '航线来源:INBOUND_FACT/FORECAST_FACT/CHANNEL_DEFAULT', + `volume_source` varchar(32) DEFAULT NULL COMMENT 'MEASURED_ACTUAL或预报来源', + `rule_version` varchar(64) NOT NULL COMMENT '自动归班规则版本', + `matched_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `superseded_at` datetime(3) DEFAULT NULL, + `locked_at` datetime(3) DEFAULT NULL COMMENT '截止/订舱/关闭后冻结时间', + `lock_reason` varchar(32) DEFAULT NULL COMMENT 'CUTOFF/BOOKING_CONFIRMED/CLOSED', + `operator_id` bigint unsigned DEFAULT NULL, + `reason` varchar(500) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_sailing_assignment_current` (`tenant_id`,`sailing_id`,`match_status`,`matched_at`,`id`), + KEY `idx_sailing_assignment_origin` (`tenant_id`,`origin_sailing_id`,`match_status`,`id`), + KEY `idx_sailing_assignment_receipt` (`tenant_id`,`receipt_batch_id`,`assignment_version`,`id`), + KEY `idx_sailing_assignment_forecast` (`tenant_id`,`forecast_id`,`assignment_version`,`id`), + KEY `idx_sailing_assignment_inbound` (`tenant_id`,`inbound_id`,`match_status`,`id`), + CONSTRAINT `chk_sailing_assignment_source` CHECK ((`assignment_source` in (_utf8mb4'AUTO',_utf8mb4'MANUAL',_utf8mb4'ROLLOVER'))), + CONSTRAINT `chk_sailing_assignment_status` CHECK ((`match_status` in (_utf8mb4'FORECAST_MATCHED',_utf8mb4'RECEIVED',_utf8mb4'LATE',_utf8mb4'UNMATCHED',_utf8mb4'SUPERSEDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期日历自动归班事实及不可变版本历史'; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_sailing_booking_link` ( + `id` bigint unsigned NOT NULL COMMENT '船期-订舱关联ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '平台关联隔离键', + `sailing_id` bigint unsigned NOT NULL COMMENT '计划船期实例ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '海运订舱ID', + `link_status` varchar(24) NOT NULL DEFAULT 'ACTIVE' COMMENT '关联状态:ACTIVE/REVOKED', + `active_booking_guard` tinyint DEFAULT NULL COMMENT 'ACTIVE为1,REVOKED为空,用于唯一约束', + `booking_status_snapshot` varchar(24) NOT NULL COMMENT '关联时订舱状态快照;只有RELEASED可建立', + `warehouse_id` bigint unsigned DEFAULT NULL COMMENT '关联仓库快照', + `channel_code` varchar(64) DEFAULT NULL COMMENT '关联渠道快照', + `departure_port_code` varchar(32) DEFAULT NULL COMMENT '关联起运港快照', + `destination_port_code` varchar(32) DEFAULT NULL COMMENT '关联目的港快照', + `linked_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `revoked_at` datetime(3) DEFAULT NULL, + `operator_id` bigint unsigned DEFAULT NULL, + `operator_name` varchar(64) DEFAULT NULL, + `reason` varchar(500) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_sailing_booking_active` (`ocean_booking_id`,`active_booking_guard`), + KEY `idx_sailing_booking_link` (`sailing_id`,`link_status`,`ocean_booking_id`), + KEY `idx_sailing_booking_booking` (`ocean_booking_id`,`link_status`,`id`), + CONSTRAINT `chk_sailing_booking_link_guard` CHECK ((((`link_status` = _utf8mb4'ACTIVE') and (`active_booking_guard` = 1)) or ((`link_status` = _utf8mb4'REVOKED') and (`active_booking_guard` is null)))), + CONSTRAINT `chk_sailing_booking_link_status` CHECK ((`link_status` in (_utf8mb4'ACTIVE',_utf8mb4'REVOKED'))), + CONSTRAINT `chk_sailing_booking_released` CHECK ((`booking_status_snapshot` = _utf8mb4'RELEASED')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期计划与已放舱订舱的最小关联及历史'; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_sailing_channel` ( + `id` bigint NOT NULL, + `channel_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `channel_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_type` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL, + `mapped_channel_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `default_departure_port_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `default_destination_port_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `default_cutoff_days` tinyint NOT NULL DEFAULT '3', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_by` bigint NOT NULL, + `created_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_by` bigint NOT NULL, + `updated_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `version` int NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fl_sailing_channel_code` (`channel_code`), + KEY `idx_fl_sailing_channel_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_sailing_history` ( + `id` bigint NOT NULL, + `sailing_id` bigint NOT NULL, + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `from_status` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `to_status` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `operator_id` bigint DEFAULT NULL, + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_fl_sailing_history_sailing` (`sailing_id`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_sailing_inbound_volume_forecast` ( + `id` bigint unsigned NOT NULL COMMENT '货量预报事实ID(forecastId)', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键,继承入库事实', + `forecast_key` varchar(64) NOT NULL COMMENT '同一未收货对象的不可变业务键', + `fact_version` int unsigned NOT NULL DEFAULT '1' COMMENT '预报修订版本', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `receiving_warehouse_id` bigint unsigned NOT NULL COMMENT '预计收货仓ID', + `channel_code` varchar(64) DEFAULT NULL COMMENT '预计渠道编码快照', + `channel_name` varchar(128) DEFAULT NULL COMMENT '预计渠道名称快照', + `departure_port_code` varchar(32) DEFAULT NULL COMMENT '预计起运港编码快照', + `destination_port_code` varchar(32) DEFAULT NULL COMMENT '预计目的港编码快照', + `expected_arrival_at` datetime(3) NOT NULL COMMENT '预计到仓时间', + `forecast_volume_cbm` decimal(18,4) NOT NULL COMMENT '未收货预计体积m3,不得使用申报体积代替', + `source_type` varchar(32) NOT NULL COMMENT '预报来源,例如OPERATIONS/UPSTREAM_MEASUREMENT;不得使用客户申报体积冒充预报', + `fact_status` varchar(24) NOT NULL DEFAULT 'VALID' COMMENT '事实状态:VALID/SUPERSEDED/VOIDED/CONSUMED', + `effective_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '本版本生效时间', + `created_by` bigint unsigned DEFAULT NULL COMMENT '写入人或系统主体', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_sailing_forecast_version` (`tenant_id`,`forecast_key`,`fact_version`), + KEY `idx_sailing_forecast_current` (`tenant_id`,`forecast_key`,`fact_status`,`fact_version`), + KEY `idx_sailing_forecast_match` (`tenant_id`,`receiving_warehouse_id`,`channel_code`,`expected_arrival_at`,`id`), + KEY `idx_sailing_forecast_inbound` (`tenant_id`,`inbound_id`,`expected_arrival_at`,`id`), + CONSTRAINT `chk_sailing_forecast_status` CHECK ((`fact_status` in (_utf8mb4'VALID',_utf8mb4'SUPERSEDED',_utf8mb4'VOIDED',_utf8mb4'CONSUMED'))), + CONSTRAINT `chk_sailing_forecast_volume` CHECK ((`forecast_volume_cbm` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期日历未收货量预报事实及版本历史'; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_sailing_receipt_batch_fact` ( + `id` bigint unsigned NOT NULL COMMENT '稳定收货批次事实ID(receiptBatchId)', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键,继承入库事实', + `receipt_batch_key` varchar(64) NOT NULL COMMENT '同一物理收货批次的不可变业务键', + `fact_version` int unsigned NOT NULL DEFAULT '1' COMMENT '同一批次复测/冲正版本', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `measurement_id` bigint unsigned DEFAULT NULL COMMENT '最终审核测量批次ID', + `receiving_warehouse_id` bigint unsigned NOT NULL COMMENT '实际收货仓ID', + `channel_code` varchar(64) DEFAULT NULL COMMENT '收货渠道编码快照', + `channel_name` varchar(128) DEFAULT NULL COMMENT '收货渠道名称快照', + `departure_port_code` varchar(32) DEFAULT NULL COMMENT '起运港编码快照', + `destination_port_code` varchar(32) DEFAULT NULL COMMENT '目的港编码快照', + `received_at` datetime(3) NOT NULL COMMENT '实际收货完成时间,不使用入库单inbounded_at替代', + `actual_volume_cbm` decimal(18,4) NOT NULL COMMENT '最终审核实测体积m3', + `fact_status` varchar(24) NOT NULL DEFAULT 'APPROVED' COMMENT '事实状态:APPROVED/REVERSED/VOIDED/SUPERSEDED', + `reversal_of_fact_id` bigint unsigned DEFAULT NULL COMMENT '冲正所替代的事实ID', + `source_type` varchar(32) NOT NULL DEFAULT 'FIRSTLEG_RECEIPT' COMMENT '事实来源', + `created_by` bigint unsigned DEFAULT NULL COMMENT '写入人或系统主体', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_sailing_receipt_batch_version` (`tenant_id`,`receipt_batch_key`,`fact_version`), + KEY `idx_sailing_receipt_batch_current` (`tenant_id`,`receipt_batch_key`,`fact_status`,`fact_version`), + KEY `idx_sailing_receipt_match` (`tenant_id`,`receiving_warehouse_id`,`channel_code`,`received_at`,`id`), + KEY `idx_sailing_receipt_inbound` (`tenant_id`,`inbound_id`,`received_at`,`id`), + CONSTRAINT `chk_sailing_receipt_status` CHECK ((`fact_status` in (_utf8mb4'APPROVED',_utf8mb4'REVERSED',_utf8mb4'VOIDED',_utf8mb4'SUPERSEDED'))), + CONSTRAINT `chk_sailing_receipt_volume` CHECK ((`actual_volume_cbm` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期日历稳定收货批次实测事实及版本历史'; + +USE `baiyue_firstleg`; + +CREATE TABLE `fl_sailing_template` ( + `id` bigint NOT NULL, + `template_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `template_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `channel_id` bigint NOT NULL, + `channel_code_snapshot` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `channel_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `warehouse_id` bigint NOT NULL, + `warehouse_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `departure_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `destination_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `weekday` tinyint NOT NULL, + `weekday_mask` tinyint NOT NULL DEFAULT '1', + `etd_local_time` time NOT NULL, + `cutoff_days` tinyint NOT NULL DEFAULT '3', + `cutoff_local_time` time NOT NULL DEFAULT '18:00:00', + `valid_from` date NOT NULL, + `valid_to` date DEFAULT NULL, + `voyage_rule` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `vessel_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_by` bigint NOT NULL, + `created_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_by` bigint NOT NULL, + `updated_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `version` int NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fl_sailing_template_no` (`template_no`), + KEY `idx_fl_sailing_template_filter` (`warehouse_id`,`channel_id`,`status`,`weekday`), + CONSTRAINT `ck_fl_sailing_template_cutoff_days` CHECK ((`cutoff_days` between 0 and 30)), + CONSTRAINT `ck_fl_sailing_template_weekday` CHECK ((`weekday` between 1 and 7)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +ALTER TABLE `fl_truck_appointment` ADD UNIQUE KEY `uk_truck_active_ocean_booking` (`active_ocean_booking_id`); + +ALTER TABLE `fl_truck_appointment` ADD KEY `idx_truck_appointment_ocean` (`ocean_booking_id`); + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; + +USE `baiyue_firstleg`; \ No newline at end of file diff --git a/output/local-schema-repair/columns-before.tsv b/output/local-schema-repair/columns-before.tsv new file mode 100644 index 000000000..08a2351fb --- /dev/null +++ b/output/local-schema-repair/columns-before.tsv @@ -0,0 +1,2745 @@ +backup_fba_appointment_item_20261013 id +backup_fba_appointment_item_20261013 tenant_id +backup_fba_appointment_item_20261013 customer_id +backup_fba_appointment_item_20261013 appointment_id +backup_fba_appointment_item_20261013 plan_id +backup_fba_appointment_item_20261013 line_id +backup_fba_appointment_item_20261013 order_id +backup_fba_appointment_item_20261013 inbound_code +backup_fba_appointment_item_20261013 fba_warehouse_code +backup_fba_appointment_item_20261013 active +backup_fba_appointment_item_20261013 created_at +event_delivery_attempt attempt_id +event_delivery_attempt service_name +event_delivery_attempt event_type +event_delivery_attempt entry_id +event_delivery_attempt event_id +event_delivery_attempt target_name +event_delivery_attempt started_at +event_delivery_attempt finished_at +event_delivery_attempt duration_ms +event_delivery_attempt outcome +event_delivery_attempt error_code +event_delivery_attempt next_retry_at +ll_appointment_cargo_verification id +ll_appointment_cargo_verification customer_id +ll_appointment_cargo_verification source_key +ll_appointment_cargo_verification destination_key +ll_appointment_cargo_verification source_version +ll_appointment_cargo_verification source_packages +ll_appointment_cargo_verification version +ll_appointment_cargo_verification package_count +ll_appointment_cargo_verification shipment_references_json +ll_appointment_cargo_verification remark +ll_appointment_cargo_verification operator_id +ll_appointment_cargo_verification operator_name +ll_appointment_cargo_verification command_key +ll_appointment_cargo_verification request_hash +ll_appointment_cargo_verification created_at +ll_appointment_work work_item_key +ll_appointment_work container_booking_id +ll_appointment_work version +ll_appointment_work retired +ll_appointment_work state_json +ll_appointment_work_commitment entity_key +ll_appointment_work_commitment state_json +ll_appointment_work_commitment impact_version +ll_appointment_work_guard id +ll_appointment_work_guard scan_cursor +ll_appointment_work_guard initialized +ll_appointment_work_guard scope_version +ll_appointment_work_guard scan_scope_version +ll_appointment_work_guard completed_at +ll_appointment_work_guard requirement_version +ll_appointment_work_guard synchronized_requirement_version +ll_appointment_work_guard scan_requirement_version +ll_appointment_work_history id +ll_appointment_work_history work_item_key +ll_appointment_work_history operator_id +ll_appointment_work_history operator_name +ll_appointment_work_history action +ll_appointment_work_history summary +ll_appointment_work_history command_key +ll_appointment_work_history request_hash +ll_appointment_work_history response_json +ll_appointment_work_history occurred_at +ll_cargo_discard_application id +ll_cargo_discard_application tenant_id +ll_cargo_discard_application customer_id +ll_cargo_discard_application discard_no +ll_cargo_discard_application outbound_no +ll_cargo_discard_application overseas_warehouse_id +ll_cargo_discard_application overseas_warehouse_name +ll_cargo_discard_application inbound_codes +ll_cargo_discard_application total_packages +ll_cargo_discard_application fee_per_package +ll_cargo_discard_application total_fee +ll_cargo_discard_application currency +ll_cargo_discard_application status +ll_cargo_discard_application remark +ll_cargo_discard_application idempotency_key +ll_cargo_discard_application request_hash +ll_cargo_discard_application review_idempotency_key +ll_cargo_discard_application review_request_hash +ll_cargo_discard_application created_by +ll_cargo_discard_application reviewed_by +ll_cargo_discard_application review_remark +ll_cargo_discard_application reviewed_at +ll_cargo_discard_application completed_at +ll_cargo_discard_application created_at +ll_cargo_discard_application updated_at +ll_cargo_discard_application customer_confirmed_at +ll_cargo_discard_carton id +ll_cargo_discard_carton tenant_id +ll_cargo_discard_carton application_id +ll_cargo_discard_carton item_id +ll_cargo_discard_carton customer_id +ll_cargo_discard_carton carton_id +ll_cargo_discard_carton carton_mark +ll_cargo_discard_carton created_at +ll_cargo_discard_carton source_type +ll_cargo_discard_item id +ll_cargo_discard_item tenant_id +ll_cargo_discard_item application_id +ll_cargo_discard_item customer_id +ll_cargo_discard_item order_id +ll_cargo_discard_item source_type +ll_cargo_discard_item return_carton_id +ll_cargo_discard_item inbound_code +ll_cargo_discard_item profile_id +ll_cargo_discard_item sku_inventory_id +ll_cargo_discard_item sku_code +ll_cargo_discard_item product_name +ll_cargo_discard_item available_packages_snapshot +ll_cargo_discard_item discard_packages +ll_cargo_discard_item created_at +ll_cargo_discard_item actual_discard_packages +ll_cargo_discard_item pda_status +ll_cargo_discard_item pda_operator_id +ll_cargo_discard_item pda_completed_at +ll_cargo_discard_item completion_photo_file_ids +ll_cargo_discard_item inventory_position_id +ll_cargo_discard_item carton_marks_json +ll_cargo_discard_item carton_scan_required +ll_cargo_discard_photo id +ll_cargo_discard_photo customer_id +ll_cargo_discard_photo application_id +ll_cargo_discard_photo pallet_no +ll_cargo_discard_photo file_id +ll_cargo_discard_photo file_name +ll_cargo_discard_photo content_type +ll_cargo_discard_photo size_bytes +ll_cargo_discard_photo operator_id +ll_cargo_discard_photo created_at +ll_cargo_discard_photo submitted_at +ll_cargo_discard_status_history id +ll_cargo_discard_status_history tenant_id +ll_cargo_discard_status_history application_id +ll_cargo_discard_status_history customer_id +ll_cargo_discard_status_history from_status +ll_cargo_discard_status_history to_status +ll_cargo_discard_status_history operator_id +ll_cargo_discard_status_history remark +ll_cargo_discard_status_history created_at +ll_compact_number_clock number_key +ll_compact_number_clock last_second +ll_container_arrival_time_operation id +ll_container_arrival_time_operation source_container_booking_id +ll_container_arrival_time_operation idempotency_key +ll_container_arrival_time_operation request_hash +ll_container_arrival_time_operation result_version +ll_container_arrival_time_operation operator_name +ll_container_arrival_time_operation remark +ll_container_arrival_time_operation created_at +ll_container_loading_evidence id +ll_container_loading_evidence source_container_booking_id +ll_container_loading_evidence evidence_type +ll_container_loading_evidence source_file_id +ll_container_loading_evidence file_name +ll_container_loading_evidence created_at +ll_container_plan_conversion_command id +ll_container_plan_conversion_command source_container_booking_id +ll_container_plan_conversion_command idempotency_key +ll_container_plan_conversion_command request_hash +ll_container_plan_conversion_command snapshot_version +ll_container_plan_conversion_command snapshot_hash +ll_container_plan_conversion_command warehouse_id +ll_container_plan_conversion_command batch_key +ll_container_plan_conversion_command status +ll_container_plan_conversion_command lease_token +ll_container_plan_conversion_command preparation_json +ll_container_plan_conversion_command result_json +ll_container_plan_conversion_command last_error +ll_container_plan_conversion_command created_at +ll_container_plan_conversion_command updated_at +ll_container_shipping_gate container_booking_id +ll_container_shipping_gate customer_id +ll_container_shipping_gate ocean_booking_id +ll_container_shipping_gate container_no +ll_container_shipping_gate status +ll_container_shipping_gate standard_node +ll_container_shipping_gate node_sequence +ll_container_shipping_gate observed_at +ll_container_shipping_gate actual_at +ll_container_shipping_gate location_code +ll_container_shipping_gate location_name +ll_container_shipping_gate provider_code +ll_container_shipping_gate provider_event_id +ll_container_shipping_gate provider_node_code +ll_container_shipping_gate source_reference +ll_container_shipping_gate raw_payload_hash +ll_container_shipping_gate aggregate_version +ll_container_shipping_gate handover_version +ll_container_shipping_gate last_event_id +ll_container_shipping_gate payload_hash +ll_container_shipping_gate created_at +ll_container_shipping_gate updated_at +ll_customer_visit id +ll_customer_visit customer_id +ll_customer_visit delivery_order_id +ll_customer_visit delivery_no +ll_customer_visit customer_name +ll_customer_visit contact_name +ll_customer_visit contact_phone +ll_customer_visit destination +ll_customer_visit delivery_completed_at +ll_customer_visit status +ll_customer_visit selected_last_mile_order_id +ll_customer_visit selected_last_mile_order_no +ll_customer_visit selected_inbound_order_id +ll_customer_visit selected_inbound_code +ll_customer_visit visit_result +ll_customer_visit customer_feedback +ll_customer_visit remark +ll_customer_visit attachment_json +ll_customer_visit visited_by +ll_customer_visit visited_at +ll_customer_visit visit_count +ll_customer_visit created_at +ll_customer_visit updated_at +ll_delivery_document_revision id +ll_delivery_document_revision customer_id +ll_delivery_document_revision delivery_order_id +ll_delivery_document_revision version +ll_delivery_document_revision idempotency_key +ll_delivery_document_revision request_hash +ll_delivery_document_revision snapshot_json +ll_delivery_document_revision operator_id +ll_delivery_document_revision created_at +ll_delivery_fee id +ll_delivery_fee customer_id +ll_delivery_fee delivery_order_id +ll_delivery_fee fee_direction +ll_delivery_fee fee_type +ll_delivery_fee currency +ll_delivery_fee amount +ll_delivery_fee remark +ll_delivery_fee created_by +ll_delivery_fee created_at +ll_delivery_operation id +ll_delivery_operation customer_id +ll_delivery_operation delivery_order_id +ll_delivery_operation operation_node +ll_delivery_operation operator_id +ll_delivery_operation operator_name +ll_delivery_operation result +ll_delivery_operation created_at +ll_delivery_order id +ll_delivery_order tenant_id +ll_delivery_order customer_id +ll_delivery_order delivery_no +ll_delivery_order outbound_order_id +ll_delivery_order outbound_no +ll_delivery_order dispatch_order_id +ll_delivery_order dispatch_no +ll_delivery_order overseas_warehouse_id +ll_delivery_order overseas_warehouse_name +ll_delivery_order customer_name +ll_delivery_order destination_warehouse_id +ll_delivery_order destination_warehouse_code +ll_delivery_order destination_warehouse_name +ll_delivery_order destination_type +ll_delivery_order delivery_address +ll_delivery_order contact_name +ll_delivery_order contact_phone +ll_delivery_order delivery_group_key +ll_delivery_order status +ll_delivery_order seller_name +ll_delivery_order package_count +ll_delivery_order pallet_count +ll_delivery_order remark +ll_delivery_order idempotency_key +ll_delivery_order created_by +ll_delivery_order version +ll_delivery_order created_at +ll_delivery_order updated_at +ll_delivery_order waybill_no +ll_delivery_order delivery_method +ll_delivery_order carrier_name +ll_delivery_order pickup_method +ll_delivery_order loading_type +ll_delivery_order vehicle_type +ll_delivery_order vehicle_size +ll_delivery_order vehicle_plate +ll_delivery_order driver_name +ll_delivery_order driver_phone +ll_delivery_order appointment_account +ll_delivery_order total_weight_kg +ll_delivery_order total_volume_cbm +ll_delivery_order planned_delivery_at +ll_delivery_order dispatched_at +ll_delivery_order expected_arrival_at +ll_delivery_order signed_at +ll_delivery_order bol_no +ll_delivery_order documents_json +ll_delivery_order postal_code +ll_delivery_order signed_packages +ll_destuff_pallet_cost id +ll_destuff_pallet_cost source_container_booking_id +ll_destuff_pallet_cost container_no +ll_destuff_pallet_cost warehouse_id +ll_destuff_pallet_cost pallet_count +ll_destuff_pallet_cost total_actual_volume_cbm +ll_destuff_pallet_cost total_cost +ll_destuff_pallet_cost currency +ll_destuff_pallet_cost status +ll_destuff_pallet_cost created_at +ll_destuff_pallet_cost_allocation id +ll_destuff_pallet_cost_allocation cost_id +ll_destuff_pallet_cost_allocation customer_id +ll_destuff_pallet_cost_allocation actual_volume_cbm +ll_destuff_pallet_cost_allocation allocated_amount +ll_destuff_pallet_cost_allocation fee_source_id +ll_destuff_pallet_cost_allocation created_at +ll_dispatch_appointment_allocation dispatch_id +ll_dispatch_appointment_allocation dispatch_item_id +ll_dispatch_appointment_allocation plan_pallet_id +ll_dispatch_appointment_allocation batch_key +ll_dispatch_appointment_allocation customer_id +ll_dispatch_appointment_allocation source_key +ll_dispatch_appointment_allocation destination_key +ll_dispatch_appointment_allocation package_count +ll_dispatch_draft id +ll_dispatch_draft draft_token +ll_dispatch_draft customer_id +ll_dispatch_draft operator_id +ll_dispatch_draft plan_ids_json +ll_dispatch_draft containers_json +ll_dispatch_draft status +ll_dispatch_draft expires_at +ll_dispatch_draft released_at +ll_dispatch_draft created_at +ll_dispatch_draft updated_at +ll_dispatch_draft warehouse_id +ll_dispatch_draft record_version +ll_dispatch_draft sources_json +ll_dispatch_draft_command id +ll_dispatch_draft_command idempotency_key +ll_dispatch_draft_command operator_id +ll_dispatch_draft_command action +ll_dispatch_draft_command target_token +ll_dispatch_draft_command request_hash +ll_dispatch_draft_command result_json +ll_dispatch_draft_command created_at +ll_dispatch_draft_container id +ll_dispatch_draft_container draft_id +ll_dispatch_draft_container draft_token +ll_dispatch_draft_container sequence_no +ll_dispatch_draft_container capacity +ll_dispatch_draft_container created_at +ll_dispatch_draft_container updated_at +ll_dispatch_draft_container source_keys_json +ll_dispatch_history id +ll_dispatch_history dispatch_id +ll_dispatch_history record_version +ll_dispatch_history action +ll_dispatch_history operator_id +ll_dispatch_history reason +ll_dispatch_history snapshot_json +ll_dispatch_history occurred_at +ll_dispatch_item id +ll_dispatch_item tenant_id +ll_dispatch_item dispatch_order_id +ll_dispatch_item customer_id +ll_dispatch_item plan_id +ll_dispatch_item plan_pallet_id +ll_dispatch_item warehouse_pallet_id +ll_dispatch_item order_id +ll_dispatch_item order_no +ll_dispatch_item order_refs +ll_dispatch_item inbound_code +ll_dispatch_item pallet_no +ll_dispatch_item overseas_warehouse_id +ll_dispatch_item overseas_warehouse_name +ll_dispatch_item destination_warehouse_id +ll_dispatch_item destination_warehouse_code +ll_dispatch_item destination_warehouse_name +ll_dispatch_item fba_warehouse_code +ll_dispatch_item package_count +ll_dispatch_item gross_weight_kg +ll_dispatch_item volume_weight_kg +ll_dispatch_item volume_cbm +ll_dispatch_item source_stage +ll_dispatch_item carton_marks +ll_dispatch_item source_business_type +ll_dispatch_item source_business_no +ll_dispatch_item created_at +ll_dispatch_item destination_type +ll_dispatch_item delivery_address +ll_dispatch_item postal_code +ll_dispatch_item contact_name +ll_dispatch_item contact_phone +ll_dispatch_item return_receipt_id +ll_dispatch_item customer_name +ll_dispatch_item source_key +ll_dispatch_item source_version +ll_dispatch_item source_snapshot_json +ll_dispatch_order id +ll_dispatch_order tenant_id +ll_dispatch_order customer_id +ll_dispatch_order dispatch_no +ll_dispatch_order overseas_warehouse_id +ll_dispatch_order overseas_warehouse_name +ll_dispatch_order vehicle_plate +ll_dispatch_order driver_name +ll_dispatch_order driver_phone +ll_dispatch_order carrier_name +ll_dispatch_order route +ll_dispatch_order depart_at +ll_dispatch_order fba_appointment_no +ll_dispatch_order fba_appointment_status +ll_dispatch_order vehicle_appointment_status +ll_dispatch_order estimated_arrival_at +ll_dispatch_order status +ll_dispatch_order item_count +ll_dispatch_order pallet_count +ll_dispatch_order package_count +ll_dispatch_order picked_package_count +ll_dispatch_order shipped_package_count +ll_dispatch_order partial_completion_reason +ll_dispatch_order created_by +ll_dispatch_order created_at +ll_dispatch_order updated_at +ll_dispatch_order trip_id +ll_dispatch_order overseas_warehouse_code +ll_dispatch_order stage +ll_dispatch_order record_version +ll_dispatch_order cargo_revision +ll_dispatch_order cargo_hash +ll_dispatch_order review_state +ll_dispatch_order review_round +ll_dispatch_order review_basis_hash +ll_dispatch_order dispatch_review_json +ll_dispatch_order loading_review_json +ll_dispatch_order resources_json +ll_dispatch_order planned_departure_at +ll_dispatch_order loading_completed_at +ll_dispatch_order loading_completion_hash +ll_dispatch_order loading_confirmation_json +ll_dispatch_order arrangement_key +ll_dispatch_order arrangement_business_hash +ll_dispatch_order departed_at +ll_dispatch_order delivery_completed_at +ll_dispatch_order remark +ll_dispatch_pallet_lock id +ll_dispatch_pallet_lock tenant_id +ll_dispatch_pallet_lock customer_id +ll_dispatch_pallet_lock source_pallet_key +ll_dispatch_pallet_lock active_key +ll_dispatch_pallet_lock plan_id +ll_dispatch_pallet_lock plan_pallet_id +ll_dispatch_pallet_lock warehouse_pallet_id +ll_dispatch_pallet_lock dispatch_order_id +ll_dispatch_pallet_lock draft_container_id +ll_dispatch_pallet_lock draft_token +ll_dispatch_pallet_lock operator_id +ll_dispatch_pallet_lock status +ll_dispatch_pallet_lock locked_at +ll_dispatch_pallet_lock expires_at +ll_dispatch_pallet_lock released_at +ll_dispatch_pallet_lock created_at +ll_dispatch_pallet_lock updated_at +ll_dispatch_pallet_lock return_receipt_id +ll_dispatch_pallet_lock active_warehouse_pallet_id +ll_dispatch_pda_operation id +ll_dispatch_pda_operation tenant_id +ll_dispatch_pda_operation customer_id +ll_dispatch_pda_operation task_id +ll_dispatch_pda_operation operation_type +ll_dispatch_pda_operation idempotency_key +ll_dispatch_pda_operation request_hash +ll_dispatch_pda_operation result_json +ll_dispatch_pda_operation status +ll_dispatch_pda_operation created_at +ll_dispatch_pda_operation updated_at +ll_dispatch_pda_pick id +ll_dispatch_pda_pick tenant_id +ll_dispatch_pda_pick customer_id +ll_dispatch_pda_pick task_id +ll_dispatch_pda_pick dispatch_item_id +ll_dispatch_pda_pick inventory_position_id +ll_dispatch_pda_pick packages +ll_dispatch_pda_pick product_quantity +ll_dispatch_pda_pick idempotency_key +ll_dispatch_pda_pick picked_at +ll_dispatch_pda_pick created_at +ll_dispatch_pda_pick return_carton_id +ll_dispatch_pda_pick_order id +ll_dispatch_pda_pick_order tenant_id +ll_dispatch_pda_pick_order customer_id +ll_dispatch_pda_pick_order pick_id +ll_dispatch_pda_pick_order receipt_id +ll_dispatch_pda_pick_order order_id +ll_dispatch_pda_pick_order packages +ll_dispatch_pda_pick_order product_quantity +ll_dispatch_pda_pick_order created_at +ll_dispatch_pda_pick_order return_carton_id +ll_dispatch_pda_pick_order return_receipt_id +ll_dispatch_pda_task id +ll_dispatch_pda_task tenant_id +ll_dispatch_pda_task customer_id +ll_dispatch_pda_task dispatch_order_id +ll_dispatch_pda_task task_no +ll_dispatch_pda_task status +ll_dispatch_pda_task operator_id +ll_dispatch_pda_task operator_name +ll_dispatch_pda_task warehouse_id +ll_dispatch_pda_task pushed_at +ll_dispatch_pda_task completed_at +ll_dispatch_pda_task created_at +ll_dispatch_pda_task updated_at +ll_dropship_carton id +ll_dropship_carton tenant_id +ll_dropship_carton customer_id +ll_dropship_carton order_id +ll_dropship_carton profile_id +ll_dropship_carton warehouse_pallet_id +ll_dropship_carton pallet_no +ll_dropship_carton sku_code +ll_dropship_carton carton_mark +ll_dropship_carton carton_sequence +ll_dropship_carton status +ll_dropship_carton outbound_order_no +ll_dropship_carton version +ll_dropship_carton created_at +ll_dropship_carton updated_at +ll_dropship_carton product_quantity +ll_dropship_carton_ledger id +ll_dropship_carton_ledger tenant_id +ll_dropship_carton_ledger customer_id +ll_dropship_carton_ledger order_id +ll_dropship_carton_ledger carton_id +ll_dropship_carton_ledger carton_mark +ll_dropship_carton_ledger sku_code +ll_dropship_carton_ledger operation_type +ll_dropship_carton_ledger before_packages +ll_dropship_carton_ledger delta_packages +ll_dropship_carton_ledger after_packages +ll_dropship_carton_ledger business_order_no +ll_dropship_carton_ledger idempotency_key +ll_dropship_carton_ledger remark +ll_dropship_carton_ledger occurred_at +ll_dropship_carton_ledger created_at +ll_dropship_carton_sku id +ll_dropship_carton_sku customer_id +ll_dropship_carton_sku order_id +ll_dropship_carton_sku profile_id +ll_dropship_carton_sku carton_id +ll_dropship_carton_sku sku_code +ll_dropship_carton_sku product_name +ll_dropship_carton_sku product_quantity +ll_dropship_carton_sku created_at +ll_dropship_carton_sku updated_at +ll_dropship_order_profile id +ll_dropship_order_profile tenant_id +ll_dropship_order_profile customer_id +ll_dropship_order_profile order_id +ll_dropship_order_profile warehouse_pallet_id +ll_dropship_order_profile pallet_no +ll_dropship_order_profile source_pallet_no +ll_dropship_order_profile inventory_position_id +ll_dropship_order_profile status +ll_dropship_order_profile idempotency_key +ll_dropship_order_profile version +ll_dropship_order_profile created_at +ll_dropship_order_profile updated_at +ll_dropship_order_profile manifest_version +ll_dropship_order_profile manifest_package_count +ll_dropship_order_profile manifest_fragment_count +ll_dropship_order_profile manifest_hash +ll_dropship_sku_inventory id +ll_dropship_sku_inventory tenant_id +ll_dropship_sku_inventory customer_id +ll_dropship_sku_inventory order_id +ll_dropship_sku_inventory profile_id +ll_dropship_sku_inventory sku_code +ll_dropship_sku_inventory product_name +ll_dropship_sku_inventory package_count +ll_dropship_sku_inventory product_quantity +ll_dropship_sku_inventory created_at +ll_dropship_sku_inventory updated_at +ll_event_conflict id +ll_event_conflict tenant_id +ll_event_conflict event_id +ll_event_conflict customer_id +ll_event_conflict conflict_type +ll_event_conflict conflict_message +ll_event_conflict created_at +ll_event_inbox id +ll_event_inbox tenant_id +ll_event_inbox event_id +ll_event_inbox customer_id +ll_event_inbox event_type +ll_event_inbox aggregate_type +ll_event_inbox aggregate_id +ll_event_inbox aggregate_version +ll_event_inbox payload_hash +ll_event_inbox status +ll_event_inbox error_message +ll_event_inbox created_at +ll_event_inbox updated_at +ll_event_outbox id +ll_event_outbox customer_id +ll_event_outbox aggregate_type +ll_event_outbox aggregate_id +ll_event_outbox event_type +ll_event_outbox event_version +ll_event_outbox event_key +ll_event_outbox payload_json +ll_event_outbox status +ll_event_outbox retry_count +ll_event_outbox next_retry_at +ll_event_outbox published_at +ll_event_outbox locked_at +ll_event_outbox locked_by +ll_event_outbox last_error +ll_event_outbox created_at +ll_exception_order id +ll_exception_order customer_id +ll_exception_order exception_no +ll_exception_order exception_type +ll_exception_order status +ll_exception_order reason +ll_exception_order last_mile_order_id +ll_exception_order last_mile_order_no +ll_exception_order inbound_order_id +ll_exception_order inbound_code +ll_exception_order delivery_order_id +ll_exception_order delivery_no +ll_exception_order outbound_no +ll_exception_order customer_name +ll_exception_order overseas_warehouse_id +ll_exception_order overseas_warehouse_name +ll_exception_order sku_code +ll_exception_order package_count +ll_exception_order return_direction +ll_exception_order return_logistics_no +ll_exception_order handling_action +ll_exception_order handling_result +ll_exception_order evidence_file_ids_json +ll_exception_order inventory_adjustment_id +ll_exception_order handler_id +ll_exception_order handler_name +ll_exception_order source_type +ll_exception_order created_by +ll_exception_order exception_at +ll_exception_order completed_at +ll_exception_order version +ll_exception_order created_at +ll_exception_order updated_at +ll_exception_order return_context_json +ll_exception_order_command id +ll_exception_order_command customer_id +ll_exception_order_command exception_order_id +ll_exception_order_command action +ll_exception_order_command idempotency_key +ll_exception_order_command request_hash +ll_exception_order_command result_json +ll_exception_order_command created_at +ll_exception_return_item id +ll_exception_return_item customer_id +ll_exception_return_item exception_order_id +ll_exception_return_item outbound_pallet_item_id +ll_exception_return_item inventory_position_id +ll_exception_return_item pallet_no +ll_exception_return_item sku_code +ll_exception_return_item max_return_packages +ll_exception_return_item approved_return_packages +ll_exception_return_item created_at +ll_exception_return_item return_carton_id +ll_exception_return_item return_carton_mark +ll_exception_return_item received_packages +ll_fba_appointment_command command_key +ll_fba_appointment_command request_hash +ll_fba_appointment_command operation +ll_fba_appointment_command operator_id +ll_fba_appointment_command appointment_no +ll_fba_appointment_command response_json +ll_fba_appointment_command created_at +ll_fba_receiving_agreement agreement_key +ll_fba_receiving_agreement version +ll_fba_receiving_agreement status +ll_fba_receiving_agreement destination_key +ll_fba_receiving_agreement confirmation_no +ll_fba_receiving_agreement snapshot_json +ll_fba_receiving_change change_key +ll_fba_receiving_change version +ll_fba_receiving_change status +ll_fba_receiving_change batch_key +ll_fba_receiving_change customer_id +ll_fba_receiving_change snapshot_json +ll_fba_receiving_change result_json +ll_fba_receiving_change active_ref +ll_fba_receiving_member agreement_key +ll_fba_receiving_member batch_key +ll_fba_receiving_member customer_id +ll_fba_receiving_member active_ref +ll_fba_receiving_plan batch_key +ll_fba_receiving_plan customer_id +ll_fba_receiving_plan snapshot_json +ll_fba_receiving_revision agreement_key +ll_fba_receiving_revision version +ll_fba_receiving_revision snapshot_json +ll_finance_fee_command id +ll_finance_fee_command operator_id +ll_finance_fee_command action +ll_finance_fee_command idempotency_key +ll_finance_fee_command request_hash +ll_finance_fee_command source_fee_id +ll_finance_fee_command source_version +ll_finance_fee_command created_at +ll_finance_fee_source id +ll_finance_fee_source source_fee_id +ll_finance_fee_source source_version +ll_finance_fee_source customer_id +ll_finance_fee_source customer_name +ll_finance_fee_source source_type +ll_finance_fee_source source_no +ll_finance_fee_source business_type +ll_finance_fee_source business_id +ll_finance_fee_source business_no +ll_finance_fee_source order_id +ll_finance_fee_source inbound_id +ll_finance_fee_source inbound_code +ll_finance_fee_source container_id +ll_finance_fee_source container_booking_id +ll_finance_fee_source container_no +ll_finance_fee_source warehouse_id +ll_finance_fee_source fee_item_code +ll_finance_fee_source fee_item_name +ll_finance_fee_source direction +ll_finance_fee_source supplier_id +ll_finance_fee_source supplier_name +ll_finance_fee_source supplier_category +ll_finance_fee_source settlement_mode +ll_finance_fee_source paid_at +ll_finance_fee_source payment_method +ll_finance_fee_source payment_reference_no +ll_finance_fee_source payment_voucher_file_ids +ll_finance_fee_source wallet_settlement +ll_finance_fee_source business_date +ll_finance_fee_source currency +ll_finance_fee_source amount +ll_finance_fee_source review_status +ll_finance_fee_source publication_status +ll_finance_fee_source source_status +ll_finance_fee_source review_reason +ll_finance_fee_source reviewer_id +ll_finance_fee_source reviewed_at +ll_finance_fee_source created_by +ll_finance_fee_source updated_by +ll_finance_fee_source created_at +ll_finance_fee_source updated_at +ll_finance_fee_source original_currency +ll_finance_fee_source original_amount +ll_finance_fee_source exchange_rate +ll_finance_fee_source exchange_rate_month +ll_finance_fee_source chargeable_quantity +ll_finance_fee_source quantity_unit +ll_finance_fee_source unit_price +ll_finance_fee_source period_start +ll_finance_fee_source period_end +ll_fleet_capacity_offer id +ll_fleet_capacity_offer offer_no +ll_fleet_capacity_offer trip_id +ll_fleet_capacity_offer trip_no +ll_fleet_capacity_offer status +ll_fleet_capacity_offer cutoff_at +ll_fleet_capacity_offer contact_name +ll_fleet_capacity_offer contact_phone +ll_fleet_capacity_offer remark +ll_fleet_capacity_offer published_fingerprint +ll_fleet_capacity_offer record_version +ll_fleet_capacity_offer created_by +ll_fleet_capacity_offer created_at +ll_fleet_capacity_offer updated_by +ll_fleet_capacity_offer updated_at +ll_fleet_capacity_offer_command id +ll_fleet_capacity_offer_command trip_id +ll_fleet_capacity_offer_command operator_id +ll_fleet_capacity_offer_command action +ll_fleet_capacity_offer_command scope_no +ll_fleet_capacity_offer_command idempotency_key +ll_fleet_capacity_offer_command request_hash +ll_fleet_capacity_offer_command result_json +ll_fleet_capacity_offer_command created_at +ll_fleet_driver id +ll_fleet_driver driver_no +ll_fleet_driver warehouse_id +ll_fleet_driver warehouse_code +ll_fleet_driver warehouse_name +ll_fleet_driver vehicle_models +ll_fleet_driver languages_and_area +ll_fleet_driver medical_expires_on +ll_fleet_driver training_expires_on +ll_fleet_driver insurance_expires_on +ll_fleet_driver name +ll_fleet_driver phone +ll_fleet_driver ownership +ll_fleet_driver region +ll_fleet_driver active +ll_fleet_driver review_status +ll_fleet_driver license_number +ll_fleet_driver license_type +ll_fleet_driver license_issued_on +ll_fleet_driver license_expires_on +ll_fleet_driver license_zone +ll_fleet_driver license_file_id +ll_fleet_driver remark +ll_fleet_driver record_version +ll_fleet_driver created_by +ll_fleet_driver created_at +ll_fleet_driver updated_by +ll_fleet_driver updated_at +ll_fleet_driver_history id +ll_fleet_driver_history driver_id +ll_fleet_driver_history record_version +ll_fleet_driver_history action +ll_fleet_driver_history reason +ll_fleet_driver_history license_file_id +ll_fleet_driver_history snapshot_json +ll_fleet_driver_history operator_id +ll_fleet_driver_history occurred_at +ll_fleet_external_booking id +ll_fleet_external_booking booking_no +ll_fleet_external_booking trip_id +ll_fleet_external_booking trip_no +ll_fleet_external_booking customer_id +ll_fleet_external_booking customer_code +ll_fleet_external_booking customer_name +ll_fleet_external_booking status +ll_fleet_external_booking cargo_json +ll_fleet_external_booking quote_source_json +ll_fleet_external_booking destination_key +ll_fleet_external_booking destination_label +ll_fleet_external_booking agreed_amount +ll_fleet_external_booking idempotency_key +ll_fleet_external_booking request_hash +ll_fleet_external_booking confirm_key +ll_fleet_external_booking confirm_hash +ll_fleet_external_booking cancel_key +ll_fleet_external_booking cancel_hash +ll_fleet_external_booking incoming_no +ll_fleet_external_booking dispatch_no +ll_fleet_external_booking receipt_json +ll_fleet_external_booking incoming_key +ll_fleet_external_booking incoming_hash +ll_fleet_external_booking receipt_key +ll_fleet_external_booking receipt_hash +ll_fleet_external_booking binding_key +ll_fleet_external_booking binding_hash +ll_fleet_external_booking offer_id +ll_fleet_external_booking sales_owner_user_id +ll_fleet_external_booking business_type +ll_fleet_external_booking delivery_mode +ll_fleet_external_booking estimated_arrival_at +ll_fleet_external_booking expected_pallet_count +ll_fleet_external_booking record_version +ll_fleet_external_booking created_by +ll_fleet_external_booking created_at +ll_fleet_external_booking updated_by +ll_fleet_external_booking updated_at +ll_fleet_finance_source id +ll_fleet_finance_source record_id +ll_fleet_finance_source source_version +ll_fleet_finance_source record_version +ll_fleet_finance_source operator_id +ll_fleet_finance_source request_key +ll_fleet_finance_source request_hash +ll_fleet_finance_source event_id +ll_fleet_finance_source payload_json +ll_fleet_finance_source created_at +ll_fleet_pickup_command trip_no +ll_fleet_pickup_command request_key +ll_fleet_pickup_command request_hash +ll_fleet_pickup_history id +ll_fleet_pickup_history customer_id +ll_fleet_pickup_history transfer_no +ll_fleet_pickup_history trip_no +ll_fleet_pickup_history action +ll_fleet_pickup_history operator_id +ll_fleet_pickup_history occurred_at +ll_fleet_pickup_history detail +ll_fleet_pickup_plan trip_no +ll_fleet_pickup_plan request_hash +ll_fleet_pickup_task transfer_order_id +ll_fleet_pickup_task customer_id +ll_fleet_pickup_task transfer_no +ll_fleet_pickup_task trip_no +ll_fleet_pickup_task status +ll_fleet_pickup_task actual_packages +ll_fleet_pickup_task picked_at +ll_fleet_pickup_task arrived_at +ll_fleet_pickup_task evidence_json +ll_fleet_pickup_task remark +ll_fleet_pickup_task updated_at +ll_fleet_pickup_upload transfer_order_id +ll_fleet_pickup_upload trip_no +ll_fleet_pickup_upload file_id +ll_fleet_pool_order_link id +ll_fleet_pool_order_link booking_id +ll_fleet_pool_order_link booking_no +ll_fleet_pool_order_link customer_id +ll_fleet_pool_order_link business_type +ll_fleet_pool_order_link business_order_id +ll_fleet_pool_order_link business_order_no +ll_fleet_pool_order_link warehouse_id +ll_fleet_pool_order_link destination_key +ll_fleet_pool_order_link delivery_mode +ll_fleet_pool_order_link delivery_instructions +ll_fleet_pool_order_link incoming_no +ll_fleet_pool_order_link lastleg_order_id +ll_fleet_pool_order_link dispatch_no +ll_fleet_pool_order_link fulfillment_stage +ll_fleet_pool_order_link stage_occurred_at +ll_fleet_pool_order_link actual_pallet_count +ll_fleet_pool_order_link actual_package_count +ll_fleet_pool_order_link actual_pallet_spaces +ll_fleet_pool_order_link record_version +ll_fleet_pool_order_link creation_request_hash +ll_fleet_pool_order_link created_by +ll_fleet_pool_order_link created_at +ll_fleet_pool_order_link updated_at +ll_fleet_quote id +ll_fleet_quote quote_no +ll_fleet_quote kind +ll_fleet_quote party_id +ll_fleet_quote party_name +ll_fleet_quote origin_city +ll_fleet_quote destination_code +ll_fleet_quote valid_from +ll_fleet_quote valid_to +ll_fleet_quote status +ll_fleet_quote natural_key +ll_fleet_quote details_json +ll_fleet_quote record_version +ll_fleet_quote create_key +ll_fleet_quote create_hash +ll_fleet_quote created_by +ll_fleet_quote created_at +ll_fleet_quote updated_at +ll_fleet_quote_history id +ll_fleet_quote_history quote_id +ll_fleet_quote_history record_version +ll_fleet_quote_history action +ll_fleet_quote_history operator_id +ll_fleet_quote_history occurred_at +ll_fleet_quote_history snapshot_json +ll_fleet_resource_assignment resource_kind +ll_fleet_resource_assignment resource_id +ll_fleet_resource_assignment trip_id +ll_fleet_resource_assignment trip_no +ll_fleet_trip id +ll_fleet_trip trip_no +ll_fleet_trip idempotency_key +ll_fleet_trip request_hash +ll_fleet_trip status +ll_fleet_trip warehouse_id +ll_fleet_trip warehouse_code +ll_fleet_trip warehouse_name +ll_fleet_trip vehicle_id +ll_fleet_trip vehicle_plate +ll_fleet_trip driver_id +ll_fleet_trip driver_name +ll_fleet_trip driver_phone +ll_fleet_trip max_pallet_spaces +ll_fleet_trip max_load_kg +ll_fleet_trip max_volume_cbm +ll_fleet_trip planned_departure_at +ll_fleet_trip expected_driver_end_at +ll_fleet_trip departed_at +ll_fleet_trip completed_at +ll_fleet_trip stops_json +ll_fleet_trip planned_load_json +ll_fleet_trip load_json +ll_fleet_trip loading_review_json +ll_fleet_trip departure_key +ll_fleet_trip departure_hash +ll_fleet_trip departure_result_json +ll_fleet_trip completion_json +ll_fleet_trip vehicle_release_json +ll_fleet_trip driver_release_json +ll_fleet_trip remark +ll_fleet_trip record_version +ll_fleet_trip created_by +ll_fleet_trip created_at +ll_fleet_trip updated_by +ll_fleet_trip updated_at +ll_fleet_trip trip_purpose +ll_fleet_trip_cost id +ll_fleet_trip_cost trip_id +ll_fleet_trip_cost cost_no +ll_fleet_trip_cost category +ll_fleet_trip_cost currency +ll_fleet_trip_cost amount +ll_fleet_trip_cost incurred_at +ll_fleet_trip_cost remark +ll_fleet_trip_cost record_version +ll_fleet_trip_cost request_key +ll_fleet_trip_cost request_hash +ll_fleet_trip_cost created_by +ll_fleet_trip_cost updated_by +ll_fleet_trip_cost created_at +ll_fleet_trip_cost updated_at +ll_fleet_trip_cost_history id +ll_fleet_trip_cost_history cost_id +ll_fleet_trip_cost_history record_version +ll_fleet_trip_cost_history action +ll_fleet_trip_cost_history reason +ll_fleet_trip_cost_history operator_id +ll_fleet_trip_cost_history occurred_at +ll_fleet_trip_cost_history snapshot_json +ll_fleet_trip_dispatch dispatch_id +ll_fleet_trip_dispatch dispatch_no +ll_fleet_trip_dispatch customer_id +ll_fleet_trip_dispatch trip_id +ll_fleet_trip_dispatch trip_no +ll_fleet_trip_dispatch package_count +ll_fleet_trip_dispatch bound_by +ll_fleet_trip_dispatch bound_at +ll_fleet_trip_dispatch review_json +ll_fleet_trip_handover id +ll_fleet_trip_handover trip_id +ll_fleet_trip_handover trip_version +ll_fleet_trip_handover trip_no +ll_fleet_trip_handover handover_no +ll_fleet_trip_handover request_key +ll_fleet_trip_handover request_hash +ll_fleet_trip_handover record_version +ll_fleet_trip_handover handed_over_at +ll_fleet_trip_handover snapshot_json +ll_fleet_trip_handover vehicle_release_json +ll_fleet_trip_handover driver_release_json +ll_fleet_trip_handover created_by +ll_fleet_trip_handover created_at +ll_fleet_trip_history id +ll_fleet_trip_history trip_id +ll_fleet_trip_history record_version +ll_fleet_trip_history action +ll_fleet_trip_history reason +ll_fleet_trip_history operator_id +ll_fleet_trip_history occurred_at +ll_fleet_trip_history snapshot_json +ll_fleet_trip_operations_record id +ll_fleet_trip_operations_record trip_no +ll_fleet_trip_operations_record record_version +ll_fleet_trip_operations_record details_json +ll_fleet_trip_operations_record reason +ll_fleet_trip_operations_record operator_id +ll_fleet_trip_operations_record request_key +ll_fleet_trip_operations_record request_hash +ll_fleet_trip_operations_record occurred_at +ll_fleet_vehicle_record id +ll_fleet_vehicle_record record_no +ll_fleet_vehicle_record vehicle_id +ll_fleet_vehicle_record vehicle_plate +ll_fleet_vehicle_record record_type +ll_fleet_vehicle_record occurred_at +ll_fleet_vehicle_record details_json +ll_fleet_vehicle_record files_json +ll_fleet_vehicle_record idempotency_key +ll_fleet_vehicle_record request_hash +ll_fleet_vehicle_record record_version +ll_fleet_vehicle_record created_by +ll_fleet_vehicle_record updated_by +ll_fleet_vehicle_record created_at +ll_fleet_vehicle_record updated_at +ll_fleet_vehicle_record_history id +ll_fleet_vehicle_record_history record_id +ll_fleet_vehicle_record_history record_version +ll_fleet_vehicle_record_history action +ll_fleet_vehicle_record_history reason +ll_fleet_vehicle_record_history operator_id +ll_fleet_vehicle_record_history occurred_at +ll_fleet_vehicle_record_history snapshot_json +ll_inbound_fba_appointment id +ll_inbound_fba_appointment tenant_id +ll_inbound_fba_appointment customer_id +ll_inbound_fba_appointment appointment_no +ll_inbound_fba_appointment appointment_at +ll_inbound_fba_appointment appointment_status +ll_inbound_fba_appointment appointment_remark +ll_inbound_fba_appointment fba_warehouse_code +ll_inbound_fba_appointment selected_count +ll_inbound_fba_appointment replacement_nos_json +ll_inbound_fba_appointment created_by +ll_inbound_fba_appointment created_at +ll_inbound_fba_appointment updated_at +ll_inbound_fba_appointment expected_loading_at +ll_inbound_fba_appointment appointment_end_at +ll_inbound_fba_appointment version +ll_inbound_fba_appointment confirmation_no +ll_inbound_fba_appointment planned_date +ll_inbound_fba_appointment planned_at +ll_inbound_fba_appointment planned_end_at +ll_inbound_fba_appointment appointment_start_utc +ll_inbound_fba_appointment appointment_end_utc +ll_inbound_fba_appointment timezone +ll_inbound_fba_appointment origin_warehouse_id +ll_inbound_fba_appointment replacement_keys_json +ll_inbound_fba_appointment repartition_reason +ll_inbound_fba_appointment_item id +ll_inbound_fba_appointment_item appointment_id +ll_inbound_fba_appointment_item source_key +ll_inbound_fba_appointment_item source_version +ll_inbound_fba_appointment_item customer_id +ll_inbound_fba_appointment_item order_id +ll_inbound_fba_appointment_item inbound_code +ll_inbound_fba_appointment_item fba_warehouse_code +ll_inbound_fba_appointment_item package_count +ll_inbound_fba_appointment_item active +ll_inbound_fba_appointment_item active_source_key +ll_inbound_fba_appointment_item active_order_id +ll_inbound_fba_appointment_item created_at +ll_inbound_fba_appointment_item cargo_verification_version +ll_inbound_fba_appointment_item shipment_references_json +ll_inbound_order id +ll_inbound_order tenant_id +ll_inbound_order customer_id +ll_inbound_order source_region +ll_inbound_order source_inbound_id +ll_inbound_order root_inbound_id +ll_inbound_order source_order_id +ll_inbound_order source_order_no +ll_inbound_order root_order_id +ll_inbound_order inbound_code +ll_inbound_order destination_warehouse_id +ll_inbound_order destination_warehouse_code +ll_inbound_order destination_warehouse_name +ll_inbound_order destination_type +ll_inbound_order package_count +ll_inbound_order product_quantity +ll_inbound_order pallet_count +ll_inbound_order gross_weight_kg +ll_inbound_order net_weight_kg +ll_inbound_order volume_cbm +ll_inbound_order source_event_id +ll_inbound_order source_loading_plan_id +ll_inbound_order source_loading_plan_version +ll_inbound_order handover_version +ll_inbound_order payload_hash +ll_inbound_order status +ll_inbound_order exception_flag +ll_inbound_order created_at +ll_inbound_order updated_at +ll_inbound_order lx_code +ll_inbound_order_item id +ll_inbound_order_item tenant_id +ll_inbound_order_item customer_id +ll_inbound_order_item order_id +ll_inbound_order_item source_inbound_detail_id +ll_inbound_order_item package_count +ll_inbound_order_item product_quantity +ll_inbound_order_item pallet_count +ll_inbound_order_item gross_weight_kg +ll_inbound_order_item net_weight_kg +ll_inbound_order_item dimensional_weight_kg +ll_inbound_order_item volume_cbm +ll_inbound_order_item destination_warehouse_id +ll_inbound_order_item destination_warehouse_code +ll_inbound_order_item destination_warehouse_name +ll_inbound_order_item fba_tracking_no +ll_inbound_order_item shipment_no +ll_inbound_order_item shipping_mark +ll_inbound_order_item sku_code +ll_inbound_order_item product_name_zh +ll_inbound_order_item product_name_en +ll_inbound_order_item created_at +ll_inbound_pallet_merge id +ll_inbound_pallet_merge tenant_id +ll_inbound_pallet_merge customer_id +ll_inbound_pallet_merge task_id +ll_inbound_pallet_merge merge_group_no +ll_inbound_pallet_merge source_pallet_id +ll_inbound_pallet_merge target_pallet_id +ll_inbound_pallet_merge source_allocation_id +ll_inbound_pallet_merge target_allocation_id +ll_inbound_pallet_merge source_line_id +ll_inbound_pallet_merge target_line_id +ll_inbound_pallet_merge source_order_id +ll_inbound_pallet_merge target_order_id +ll_inbound_pallet_merge moved_package_count +ll_inbound_pallet_merge moved_volume_cbm +ll_inbound_pallet_merge source_pallet_scrapped +ll_inbound_pallet_merge status +ll_inbound_pallet_merge created_at +ll_inbound_pda_operation id +ll_inbound_pda_operation tenant_id +ll_inbound_pda_operation customer_id +ll_inbound_pda_operation task_id +ll_inbound_pda_operation allocation_id +ll_inbound_pda_operation action +ll_inbound_pda_operation idempotency_key +ll_inbound_pda_operation request_hash +ll_inbound_pda_operation request_json +ll_inbound_pda_operation result_json +ll_inbound_pda_operation created_at +ll_inbound_pda_task id +ll_inbound_pda_task tenant_id +ll_inbound_pda_task customer_id +ll_inbound_pda_task plan_id +ll_inbound_pda_task task_no +ll_inbound_pda_task status +ll_inbound_pda_task operator_id +ll_inbound_pda_task operator_name +ll_inbound_pda_task pushed_at +ll_inbound_pda_task started_at +ll_inbound_pda_task completed_at +ll_inbound_pda_task unload_photo_file_ids +ll_inbound_pda_task unload_photo_uploaded_at +ll_inbound_pda_task estimated_empty_return_at +ll_inbound_pda_task version +ll_inbound_pda_task created_at +ll_inbound_pda_task updated_at +ll_inbound_plan id +ll_inbound_plan tenant_id +ll_inbound_plan plan_no +ll_inbound_plan customer_id +ll_inbound_plan source_order_id +ll_inbound_plan container_no +ll_inbound_plan overseas_warehouse_id +ll_inbound_plan planned_arrival_date +ll_inbound_plan pallet_type +ll_inbound_plan assigned_flag +ll_inbound_plan merge_required +ll_inbound_plan urgent_flag +ll_inbound_plan creation_mode +ll_inbound_plan plan_remark +ll_inbound_plan status +ll_inbound_plan line_count +ll_inbound_plan pallet_count +ll_inbound_plan total_volume_cbm +ll_inbound_plan created_at +ll_inbound_plan updated_at +ll_inbound_plan version +ll_inbound_plan_carton id +ll_inbound_plan_carton customer_id +ll_inbound_plan_carton order_id +ll_inbound_plan_carton source_inbound_detail_id +ll_inbound_plan_carton sku_code +ll_inbound_plan_carton carton_mark +ll_inbound_plan_carton destination_warehouse_id +ll_inbound_plan_carton destination_warehouse_code +ll_inbound_plan_carton destination_warehouse_name +ll_inbound_plan_carton plan_id +ll_inbound_plan_carton line_id +ll_inbound_plan_carton plan_pallet_id +ll_inbound_plan_carton warehouse_pallet_id +ll_inbound_plan_carton warehouse_location_id +ll_inbound_plan_carton pda_task_id +ll_inbound_plan_carton status +ll_inbound_plan_carton version +ll_inbound_plan_carton bound_at +ll_inbound_plan_carton received_at +ll_inbound_plan_carton updated_at +ll_inbound_plan_line id +ll_inbound_plan_line tenant_id +ll_inbound_plan_line customer_id +ll_inbound_plan_line plan_id +ll_inbound_plan_line order_id +ll_inbound_plan_line inbound_code +ll_inbound_plan_line destination_type +ll_inbound_plan_line fba_warehouse_code +ll_inbound_plan_line destination_warehouse_id +ll_inbound_plan_line destination_warehouse_code +ll_inbound_plan_line destination_warehouse_name +ll_inbound_plan_line volume_cbm +ll_inbound_plan_line planned_pallet_count +ll_inbound_plan_line required_package_count +ll_inbound_plan_line delivery_address +ll_inbound_plan_line postal_code +ll_inbound_plan_line contact_name +ll_inbound_plan_line contact_phone +ll_inbound_plan_pallet id +ll_inbound_plan_pallet tenant_id +ll_inbound_plan_pallet customer_id +ll_inbound_plan_pallet plan_id +ll_inbound_plan_pallet pallet_no +ll_inbound_plan_pallet source_pallet_no +ll_inbound_plan_pallet pallet_type +ll_inbound_plan_pallet destination_warehouse_id +ll_inbound_plan_pallet destination_warehouse_code +ll_inbound_plan_pallet destination_warehouse_name +ll_inbound_plan_pallet capacity_cbm +ll_inbound_plan_pallet allocated_volume_cbm +ll_inbound_plan_pallet sequence_no +ll_inbound_plan_pallet warehouse_pallet_id +ll_inbound_plan_pallet warehouse_location_id +ll_inbound_plan_pallet warehouse_resource_lock_id +ll_inbound_plan_pallet assignment_status +ll_inbound_plan_pallet locked_at +ll_inbound_plan_pallet actual_volume_cbm +ll_inbound_plan_pallet actual_package_count +ll_inbound_plan_pallet version +ll_inbound_plan_pallet destination_type +ll_inbound_plan_pallet delivery_address +ll_inbound_plan_pallet postal_code +ll_inbound_plan_pallet contact_name +ll_inbound_plan_pallet contact_phone +ll_inbound_plan_pallet_allocation id +ll_inbound_plan_pallet_allocation tenant_id +ll_inbound_plan_pallet_allocation customer_id +ll_inbound_plan_pallet_allocation plan_id +ll_inbound_plan_pallet_allocation line_id +ll_inbound_plan_pallet_allocation pallet_id +ll_inbound_plan_pallet_allocation allocated_volume_cbm +ll_inbound_plan_pallet_allocation planned_package_count +ll_inbound_plan_pallet_allocation counted_package_count +ll_inbound_plan_pallet_allocation picked_package_count +ll_inbound_plan_pallet_allocation actual_volume_cbm +ll_inbound_plan_pallet_allocation status +ll_inbound_plan_pallet_allocation version +ll_inbound_stock_receipt id +ll_inbound_stock_receipt tenant_id +ll_inbound_stock_receipt customer_id +ll_inbound_stock_receipt plan_id +ll_inbound_stock_receipt task_id +ll_inbound_stock_receipt allocation_id +ll_inbound_stock_receipt line_id +ll_inbound_stock_receipt order_id +ll_inbound_stock_receipt inbound_code +ll_inbound_stock_receipt sku_code +ll_inbound_stock_receipt product_name_zh +ll_inbound_stock_receipt product_name_en +ll_inbound_stock_receipt sku_name_zh +ll_inbound_stock_receipt source_detail_ids +ll_inbound_stock_receipt warehouse_pallet_id +ll_inbound_stock_receipt pallet_no +ll_inbound_stock_receipt source_pallet_no +ll_inbound_stock_receipt warehouse_location_id +ll_inbound_stock_receipt warehouse_location_code +ll_inbound_stock_receipt batch_no +ll_inbound_stock_receipt received_packages +ll_inbound_stock_receipt received_quantity +ll_inbound_stock_receipt inventory_balance_id +ll_inbound_stock_receipt inventory_position_id +ll_inbound_stock_receipt inventory_operation_key +ll_inbound_stock_receipt received_at +ll_inbound_stock_receipt created_at +ll_inventory_balance id +ll_inventory_balance tenant_id +ll_inventory_balance customer_id +ll_inventory_balance customer_name +ll_inventory_balance overseas_warehouse_id +ll_inventory_balance overseas_warehouse_code +ll_inventory_balance overseas_warehouse_name +ll_inventory_balance destination_warehouse_id +ll_inventory_balance destination_warehouse_code +ll_inventory_balance destination_warehouse_name +ll_inventory_balance inbound_order_id +ll_inventory_balance inbound_order_no +ll_inventory_balance inbound_code +ll_inventory_balance sku_code +ll_inventory_balance sku_name_zh +ll_inventory_balance product_name_zh +ll_inventory_balance product_name_en +ll_inventory_balance available_packages +ll_inventory_balance hold_packages +ll_inventory_balance allocated_packages +ll_inventory_balance picked_packages +ll_inventory_balance in_transit_packages +ll_inventory_balance receiving_packages +ll_inventory_balance procurement_packages +ll_inventory_balance available_quantity +ll_inventory_balance hold_quantity +ll_inventory_balance allocated_quantity +ll_inventory_balance picked_quantity +ll_inventory_balance in_transit_quantity +ll_inventory_balance receiving_quantity +ll_inventory_balance procurement_quantity +ll_inventory_balance version +ll_inventory_balance created_at +ll_inventory_balance updated_at +ll_inventory_ledger id +ll_inventory_ledger tenant_id +ll_inventory_ledger customer_id +ll_inventory_ledger customer_name +ll_inventory_ledger balance_id +ll_inventory_ledger position_id +ll_inventory_ledger overseas_warehouse_id +ll_inventory_ledger destination_warehouse_code +ll_inventory_ledger inbound_order_id +ll_inventory_ledger sku_code +ll_inventory_ledger carton_mark +ll_inventory_ledger carton_packages +ll_inventory_ledger pallet_id +ll_inventory_ledger pallet_no +ll_inventory_ledger batch_no +ll_inventory_ledger warehouse_location_code +ll_inventory_ledger business_type +ll_inventory_ledger business_order_id +ll_inventory_ledger business_order_no +ll_inventory_ledger inbound_code +ll_inventory_ledger inbound_order_no +ll_inventory_ledger outbound_order_no +ll_inventory_ledger source_event_id +ll_inventory_ledger idempotency_key +ll_inventory_ledger status_from +ll_inventory_ledger status_to +ll_inventory_ledger before_packages +ll_inventory_ledger delta_packages +ll_inventory_ledger after_packages +ll_inventory_ledger operator_id +ll_inventory_ledger remark +ll_inventory_ledger occurred_at +ll_inventory_ledger created_at +ll_inventory_operation id +ll_inventory_operation tenant_id +ll_inventory_operation customer_id +ll_inventory_operation idempotency_key +ll_inventory_operation operation_type +ll_inventory_operation request_hash +ll_inventory_operation status +ll_inventory_operation result_json +ll_inventory_operation last_error +ll_inventory_operation created_at +ll_inventory_operation updated_at +ll_inventory_position id +ll_inventory_position tenant_id +ll_inventory_position customer_id +ll_inventory_position balance_id +ll_inventory_position overseas_warehouse_id +ll_inventory_position destination_warehouse_code +ll_inventory_position sku_code +ll_inventory_position pallet_id +ll_inventory_position pallet_no +ll_inventory_position batch_no +ll_inventory_position warehouse_location_id +ll_inventory_position warehouse_location_code +ll_inventory_position available_packages +ll_inventory_position hold_packages +ll_inventory_position allocated_packages +ll_inventory_position picked_packages +ll_inventory_position receiving_packages +ll_inventory_position product_quantity +ll_inventory_position status +ll_inventory_position version +ll_inventory_position created_at +ll_inventory_position updated_at +ll_loading_event_inbox event_id +ll_loading_event_inbox customer_id +ll_loading_event_inbox event_type +ll_loading_event_inbox event_version +ll_loading_event_inbox payload_hash +ll_loading_event_inbox payload_json +ll_loading_event_inbox status +ll_loading_event_inbox received_at +ll_loading_event_inbox processed_at +ll_loading_event_inbox last_error +ll_loading_event_inbox tenant_id +ll_loading_order_status_history id +ll_loading_order_status_history customer_id +ll_loading_order_status_history order_id +ll_loading_order_status_history from_status +ll_loading_order_status_history to_status +ll_loading_order_status_history event_id +ll_loading_order_status_history remark +ll_loading_order_status_history created_at +ll_loading_order_status_history tenant_id +ll_local_looseboard_history id +ll_local_looseboard_history order_id +ll_local_looseboard_history customer_id +ll_local_looseboard_history operation_type +ll_local_looseboard_history from_status +ll_local_looseboard_history to_status +ll_local_looseboard_history operator_id +ll_local_looseboard_history idempotency_key +ll_local_looseboard_history change_detail +ll_local_looseboard_history remark +ll_local_looseboard_history created_at +ll_local_looseboard_operation id +ll_local_looseboard_operation order_id +ll_local_looseboard_operation customer_id +ll_local_looseboard_operation operation_type +ll_local_looseboard_operation idempotency_key +ll_local_looseboard_operation request_hash +ll_local_looseboard_operation result_version +ll_local_looseboard_operation created_by +ll_local_looseboard_operation created_at +ll_local_looseboard_order id +ll_local_looseboard_order lastleg_order_id +ll_local_looseboard_order customer_id +ll_local_looseboard_order order_no +ll_local_looseboard_order transport_mode +ll_local_looseboard_order pallet_required +ll_local_looseboard_order transport_type +ll_local_looseboard_order origin +ll_local_looseboard_order origin_address +ll_local_looseboard_order destination +ll_local_looseboard_order destination_address +ll_local_looseboard_order container_type +ll_local_looseboard_order package_count +ll_local_looseboard_order total_weight_kg +ll_local_looseboard_order total_volume_cbm +ll_local_looseboard_order budget_amount +ll_local_looseboard_order currency +ll_local_looseboard_order contact_name +ll_local_looseboard_order contact_info +ll_local_looseboard_order requested_date +ll_local_looseboard_order status +ll_local_looseboard_order remark +ll_local_looseboard_order idempotency_key +ll_local_looseboard_order request_hash +ll_local_looseboard_order created_by +ll_local_looseboard_order version +ll_local_looseboard_order created_at +ll_local_looseboard_order updated_at +ll_monthly_exchange_rate id +ll_monthly_exchange_rate rate_month +ll_monthly_exchange_rate base_currency +ll_monthly_exchange_rate quote_currency +ll_monthly_exchange_rate usd_to_cny_average +ll_monthly_exchange_rate status +ll_monthly_exchange_rate remark +ll_monthly_exchange_rate record_version +ll_monthly_exchange_rate created_by +ll_monthly_exchange_rate updated_by +ll_monthly_exchange_rate created_at +ll_monthly_exchange_rate updated_at +ll_monthly_exchange_rate_history id +ll_monthly_exchange_rate_history exchange_rate_id +ll_monthly_exchange_rate_history before_rate +ll_monthly_exchange_rate_history after_rate +ll_monthly_exchange_rate_history before_status +ll_monthly_exchange_rate_history after_status +ll_monthly_exchange_rate_history operator_id +ll_monthly_exchange_rate_history remark +ll_monthly_exchange_rate_history created_at +ll_order id +ll_order order_no +ll_order customer_id +ll_order order_type +ll_order lx_code +ll_order destination_type +ll_order inbound_code +ll_order source_region +ll_order source_inbound_id +ll_order root_inbound_id +ll_order source_order_id +ll_order source_order_no +ll_order root_order_id +ll_order customer_name +ll_order source_warehouse_id +ll_order source_warehouse_name +ll_order overseas_warehouse_id +ll_order overseas_warehouse_code +ll_order overseas_warehouse_name +ll_order receiving_warehouse_version +ll_order transfer_warehouse_id +ll_order transfer_warehouse_code +ll_order transfer_warehouse_name +ll_order fba_warehouse_code +ll_order container_no +ll_order container_status +ll_order abnormal +ll_order detained +ll_order hold_chargeable +ll_order hold_reason +ll_order manual_node_override +ll_order version +ll_order pallet_count +ll_order package_count +ll_order received_package_count +ll_order picked_package_count +ll_order shipped_package_count +ll_order volume_cbm +ll_order product_quantity +ll_order volume_weight_kg +ll_order estimated_arrival_at +ll_order actual_arrival_at +ll_order estimated_warehouse_at +ll_order arrival_time_version +ll_order inbound_order_no +ll_order outbound_order_no +ll_order delivery_order_no +ll_order relabel_order_no +ll_order relabel_status +ll_order pallet_merge_flag +ll_order pallet_merge_batch_id +ll_order current_status +ll_order private_remark +ll_order customer_remark +ll_order warehouse_remark +ll_order source_event_id +ll_order source_loading_plan_id +ll_order source_container_booking_id +ll_order source_loading_plan_version +ll_order source_handover_version +ll_order source_payload_hash +ll_order created_at +ll_order updated_at +ll_order tenant_id +ll_order sub_order_status +ll_order_command_record id +ll_order_command_record customer_id +ll_order_command_record order_id +ll_order_command_record action +ll_order_command_record operator_id +ll_order_command_record idempotency_key +ll_order_command_record request_hash +ll_order_command_record result_ref +ll_order_command_record result_json +ll_order_command_record result_version +ll_order_command_record created_at +ll_order_detail id +ll_order_detail customer_id +ll_order_detail order_id +ll_order_detail source_inbound_detail_id +ll_order_detail sku_code +ll_order_detail product_name_zh +ll_order_detail product_name_en +ll_order_detail package_count +ll_order_detail product_quantity +ll_order_detail pallet_count +ll_order_detail gross_weight_kg +ll_order_detail net_weight_kg +ll_order_detail dimensional_weight_kg +ll_order_detail volume_cbm +ll_order_detail destination_warehouse_id +ll_order_detail destination_warehouse_code +ll_order_detail destination_warehouse_name +ll_order_detail fba_tracking_no +ll_order_detail shipment_no +ll_order_detail shipping_mark +ll_order_detail tenant_id +ll_order_fee id +ll_order_fee customer_id +ll_order_fee order_id +ll_order_fee fee_item +ll_order_fee currency +ll_order_fee amount +ll_order_fee status +ll_order_fee supplier_description +ll_order_fee created_by +ll_order_fee created_at +ll_order_fee updated_at +ll_order_hold_history id +ll_order_hold_history customer_id +ll_order_hold_history order_id +ll_order_hold_history held +ll_order_hold_history chargeable +ll_order_hold_history reason +ll_order_hold_history order_version +ll_order_hold_history operator_id +ll_order_hold_history operator_name +ll_order_hold_history idempotency_key +ll_order_hold_history created_at +ll_order_manual_node id +ll_order_manual_node customer_id +ll_order_manual_node order_id +ll_order_manual_node node_code +ll_order_manual_node node_at +ll_order_manual_node source +ll_order_manual_node order_version +ll_order_manual_node updated_by +ll_order_manual_node updated_at +ll_order_manual_node_history id +ll_order_manual_node_history customer_id +ll_order_manual_node_history order_id +ll_order_manual_node_history nodes_json +ll_order_manual_node_history order_version +ll_order_manual_node_history operator_id +ll_order_manual_node_history operator_name +ll_order_manual_node_history idempotency_key +ll_order_manual_node_history created_at +ll_order_no_daily_sequence business_date +ll_order_no_daily_sequence last_sequence +ll_order_operation_log id +ll_order_operation_log customer_id +ll_order_operation_log order_id +ll_order_operation_log operation_node +ll_order_operation_log operator_name +ll_order_operation_log result +ll_order_operation_log created_at +ll_order_source_pallet id +ll_order_source_pallet customer_id +ll_order_source_pallet order_id +ll_order_source_pallet source_pallet_no +ll_order_source_pallet sequence_no +ll_order_source_pallet source_event_id +ll_order_source_pallet created_at +ll_order_status_history id +ll_order_status_history customer_id +ll_order_status_history order_id +ll_order_status_history from_status +ll_order_status_history to_status +ll_order_status_history reason +ll_order_status_history created_at +ll_order_status_history tenant_id +ll_outbound_order id +ll_outbound_order customer_id +ll_outbound_order outbound_no +ll_outbound_order dispatch_order_id +ll_outbound_order dispatch_no +ll_outbound_order overseas_warehouse_id +ll_outbound_order status +ll_outbound_order outbound_type +ll_outbound_order lx_codes +ll_outbound_order recipient_info +ll_outbound_order request_hash +ll_outbound_order package_count +ll_outbound_order pallet_count +ll_outbound_order gross_weight_kg +ll_outbound_order volume_weight_kg +ll_outbound_order volume_cbm +ll_outbound_order idempotency_key +ll_outbound_order created_by +ll_outbound_order created_at +ll_outbound_order updated_at +ll_outbound_order tenant_id +ll_outbound_order fee_coverage_json +ll_outbound_pallet_item id +ll_outbound_pallet_item customer_id +ll_outbound_pallet_item outbound_order_id +ll_outbound_pallet_item warehouse_pallet_id +ll_outbound_pallet_item pallet_no +ll_outbound_pallet_item destination_warehouse_id +ll_outbound_pallet_item destination_warehouse_code +ll_outbound_pallet_item destination_warehouse_name +ll_outbound_pallet_item package_count +ll_outbound_pallet_item gross_weight_kg +ll_outbound_pallet_item volume_weight_kg +ll_outbound_pallet_item volume_cbm +ll_outbound_pallet_item picked_package_count +ll_outbound_pallet_item status +ll_outbound_pallet_item order_refs +ll_outbound_pallet_item inbound_code +ll_outbound_pallet_item created_at +ll_outbound_pallet_item tenant_id +ll_outbound_pallet_item sku_code +ll_outbound_pallet_item return_sku_quantity +ll_outbound_pallet_item carton_marks +ll_outbound_pda_pick id +ll_outbound_pda_pick customer_id +ll_outbound_pda_pick task_id +ll_outbound_pda_pick outbound_pallet_item_id +ll_outbound_pda_pick inventory_position_id +ll_outbound_pda_pick packages +ll_outbound_pda_pick idempotency_key +ll_outbound_pda_pick picked_at +ll_outbound_pda_task id +ll_outbound_pda_task customer_id +ll_outbound_pda_task outbound_order_id +ll_outbound_pda_task task_no +ll_outbound_pda_task status +ll_outbound_pda_task completion_idempotency_key +ll_outbound_pda_task pushed_at +ll_outbound_pda_task completed_at +ll_outbound_pda_task created_at +ll_outbound_pda_task updated_at +ll_overseas_procurement_fee id +ll_overseas_procurement_fee order_id +ll_overseas_procurement_fee customer_id +ll_overseas_procurement_fee fee_no +ll_overseas_procurement_fee fee_item_code +ll_overseas_procurement_fee fee_item_name +ll_overseas_procurement_fee amount +ll_overseas_procurement_fee currency +ll_overseas_procurement_fee voucher_file_id +ll_overseas_procurement_fee voucher_file_name +ll_overseas_procurement_fee remark +ll_overseas_procurement_fee wallet_status +ll_overseas_procurement_fee wallet_error_code +ll_overseas_procurement_fee wallet_error_message +ll_overseas_procurement_fee wallet_command_event_id +ll_overseas_procurement_fee created_by +ll_overseas_procurement_fee created_at +ll_overseas_procurement_fee updated_at +ll_overseas_procurement_file id +ll_overseas_procurement_file order_id +ll_overseas_procurement_file customer_id +ll_overseas_procurement_file category +ll_overseas_procurement_file file_id +ll_overseas_procurement_file file_name +ll_overseas_procurement_file content_type +ll_overseas_procurement_file size_bytes +ll_overseas_procurement_file created_by +ll_overseas_procurement_file created_at +ll_overseas_procurement_order id +ll_overseas_procurement_order customer_id +ll_overseas_procurement_order customer_name +ll_overseas_procurement_order order_no +ll_overseas_procurement_order purchase_category +ll_overseas_procurement_order product_name +ll_overseas_procurement_order product_specification +ll_overseas_procurement_order product_url +ll_overseas_procurement_order purchase_quantity +ll_overseas_procurement_order budget_unit_price +ll_overseas_procurement_order currency +ll_overseas_procurement_order receiving_address +ll_overseas_procurement_order contact_name +ll_overseas_procurement_order contact_phone +ll_overseas_procurement_order purchase_warehouse_id +ll_overseas_procurement_order purchase_warehouse_name +ll_overseas_procurement_order inbound_quantity +ll_overseas_procurement_order outbound_details +ll_overseas_procurement_order outbound_quantity +ll_overseas_procurement_order domestic_carrier +ll_overseas_procurement_order domestic_tracking_no +ll_overseas_procurement_order overseas_carrier +ll_overseas_procurement_order overseas_tracking_no +ll_overseas_procurement_order estimated_arrival_at +ll_overseas_procurement_order status +ll_overseas_procurement_order remark +ll_overseas_procurement_order idempotency_key +ll_overseas_procurement_order request_hash +ll_overseas_procurement_order created_by +ll_overseas_procurement_order reviewed_by +ll_overseas_procurement_order review_remark +ll_overseas_procurement_order review_idempotency_key +ll_overseas_procurement_order review_request_hash +ll_overseas_procurement_order reviewed_at +ll_overseas_procurement_order version +ll_overseas_procurement_order created_at +ll_overseas_procurement_order updated_at +ll_overseas_procurement_order tenant_id +ll_overseas_procurement_outbound id +ll_overseas_procurement_outbound order_id +ll_overseas_procurement_outbound customer_id +ll_overseas_procurement_outbound quantity +ll_overseas_procurement_outbound outbound_no +ll_overseas_procurement_outbound carrier +ll_overseas_procurement_outbound tracking_no +ll_overseas_procurement_outbound outbound_at +ll_overseas_procurement_outbound remark +ll_overseas_procurement_outbound created_by +ll_overseas_procurement_outbound created_at +ll_overseas_procurement_outbound tenant_id +ll_overseas_procurement_status_history id +ll_overseas_procurement_status_history order_id +ll_overseas_procurement_status_history customer_id +ll_overseas_procurement_status_history from_status +ll_overseas_procurement_status_history to_status +ll_overseas_procurement_status_history operator_id +ll_overseas_procurement_status_history idempotency_key +ll_overseas_procurement_status_history remark +ll_overseas_procurement_status_history created_at +ll_overseas_procurement_status_history tenant_id +ll_overseas_quote id +ll_overseas_quote name +ll_overseas_quote warehouse_id +ll_overseas_quote warehouse_code +ll_overseas_quote warehouse_name +ll_overseas_quote country_code +ll_overseas_quote provider_name +ll_overseas_quote currency +ll_overseas_quote effective_start +ll_overseas_quote effective_end +ll_overseas_quote version_code +ll_overseas_quote status +ll_overseas_quote remark +ll_overseas_quote record_version +ll_overseas_quote created_by +ll_overseas_quote updated_by +ll_overseas_quote created_at +ll_overseas_quote updated_at +ll_overseas_quote_fee id +ll_overseas_quote_fee quote_id +ll_overseas_quote_fee sequence_no +ll_overseas_quote_fee item +ll_overseas_quote_fee billing_unit +ll_overseas_quote_fee unit_price +ll_overseas_quote_fee minimum_charge +ll_overseas_quote_fee remark +ll_overseas_quote_transit_price id +ll_overseas_quote_transit_price quote_id +ll_overseas_quote_transit_price sequence_no +ll_overseas_quote_transit_price fba_warehouse_code +ll_overseas_quote_transit_price delivery_method +ll_overseas_quote_transit_price estimated_miles +ll_overseas_quote_transit_price price +ll_overseas_quote_transit_price minimum_charge +ll_overseas_quote_transit_price remark +ll_pda_inventory_move id +ll_pda_inventory_move move_no +ll_pda_inventory_move overseas_warehouse_id +ll_pda_inventory_move pallet_id +ll_pda_inventory_move pallet_code +ll_pda_inventory_move source_location_id +ll_pda_inventory_move source_location_code +ll_pda_inventory_move target_location_id +ll_pda_inventory_move target_location_code +ll_pda_inventory_move customer_count +ll_pda_inventory_move position_count +ll_pda_inventory_move package_count +ll_pda_inventory_move pallet_version_before +ll_pda_inventory_move pallet_version_after +ll_pda_inventory_move operator_key +ll_pda_inventory_move reason +ll_pda_inventory_move idempotency_key +ll_pda_inventory_move request_hash +ll_pda_inventory_move status +ll_pda_inventory_move result_json +ll_pda_inventory_move created_at +ll_pda_inventory_move completed_at +ll_pda_operation_history id +ll_pda_operation_history overseas_warehouse_id +ll_pda_operation_history customer_id +ll_pda_operation_history operator_key +ll_pda_operation_history operation_type +ll_pda_operation_history business_key +ll_pda_operation_history status +ll_pda_operation_history idempotency_key +ll_pda_operation_history request_hash +ll_pda_operation_history summary +ll_pda_operation_history occurred_at +ll_pda_operation_history created_at +ll_pda_pallet_operation id +ll_pda_pallet_operation overseas_warehouse_id +ll_pda_pallet_operation operator_key +ll_pda_pallet_operation idempotency_key +ll_pda_pallet_operation operation_type +ll_pda_pallet_operation request_hash +ll_pda_pallet_operation status +ll_pda_pallet_operation result_json +ll_pda_pallet_operation remote_transitions_json +ll_pda_pallet_operation last_error +ll_pda_pallet_operation created_at +ll_pda_pallet_operation updated_at +ll_pda_stocktake_action id +ll_pda_stocktake_action overseas_warehouse_id +ll_pda_stocktake_action operator_key +ll_pda_stocktake_action idempotency_key +ll_pda_stocktake_action action_type +ll_pda_stocktake_action task_id +ll_pda_stocktake_action request_hash +ll_pda_stocktake_action status +ll_pda_stocktake_action result_json +ll_pda_stocktake_action created_at +ll_pda_stocktake_action updated_at +ll_pda_stocktake_item id +ll_pda_stocktake_item task_id +ll_pda_stocktake_item customer_id +ll_pda_stocktake_item balance_id +ll_pda_stocktake_item position_id +ll_pda_stocktake_item sku_code +ll_pda_stocktake_item product_name +ll_pda_stocktake_item inbound_code +ll_pda_stocktake_item pallet_id +ll_pda_stocktake_item pallet_code +ll_pda_stocktake_item location_id +ll_pda_stocktake_item location_code +ll_pda_stocktake_item book_packages +ll_pda_stocktake_item actual_packages +ll_pda_stocktake_item difference_packages +ll_pda_stocktake_item status +ll_pda_stocktake_item position_version +ll_pda_stocktake_item counted_by +ll_pda_stocktake_item version +ll_pda_stocktake_item counted_at +ll_pda_stocktake_item created_at +ll_pda_stocktake_item updated_at +ll_pda_stocktake_task id +ll_pda_stocktake_task task_no +ll_pda_stocktake_task overseas_warehouse_id +ll_pda_stocktake_task scope_type +ll_pda_stocktake_task scope_resource_id +ll_pda_stocktake_task scope_code +ll_pda_stocktake_task status +ll_pda_stocktake_task position_count +ll_pda_stocktake_task counted_count +ll_pda_stocktake_task difference_count +ll_pda_stocktake_task created_by +ll_pda_stocktake_task submitted_by +ll_pda_stocktake_task submit_reason +ll_pda_stocktake_task idempotency_key +ll_pda_stocktake_task request_hash +ll_pda_stocktake_task version +ll_pda_stocktake_task created_at +ll_pda_stocktake_task updated_at +ll_pda_stocktake_task submitted_at +ll_procurement_daily_sequence customer_id +ll_procurement_daily_sequence business_date +ll_procurement_daily_sequence sequence_value +ll_receiving_container_operation id +ll_receiving_container_operation session_id +ll_receiving_container_operation customer_id +ll_receiving_container_operation operator_key +ll_receiving_container_operation action +ll_receiving_container_operation idempotency_key +ll_receiving_container_operation request_hash +ll_receiving_container_operation request_json +ll_receiving_container_operation result_json +ll_receiving_container_operation created_at +ll_receiving_container_session id +ll_receiving_container_session customer_id +ll_receiving_container_session container_no +ll_receiving_container_session overseas_warehouse_id +ll_receiving_container_session overseas_warehouse_name +ll_receiving_container_session operator_key +ll_receiving_container_session operator_name +ll_receiving_container_session active_operator_key +ll_receiving_container_session active_container_key +ll_receiving_container_session status +ll_receiving_container_session sign_photos +ll_receiving_container_session prepared_at +ll_receiving_container_session signed_at +ll_receiving_container_session receiving_at +ll_receiving_container_session completed_at +ll_receiving_container_session created_at +ll_receiving_container_session updated_at +ll_receiving_container_session version +ll_receiving_fba_pallet_count id +ll_receiving_fba_pallet_count session_id +ll_receiving_fba_pallet_count group_key +ll_receiving_fba_pallet_count pallet_code +ll_receiving_fba_pallet_count actual_packages +ll_receiving_fba_pallet_count created_at +ll_receiving_fba_pallet_count updated_at +ll_receiving_sku_receipt id +ll_receiving_sku_receipt customer_id +ll_receiving_sku_receipt session_id +ll_receiving_sku_receipt plan_id +ll_receiving_sku_receipt line_id +ll_receiving_sku_receipt pallet_id +ll_receiving_sku_receipt order_id +ll_receiving_sku_receipt inbound_code +ll_receiving_sku_receipt sku_code +ll_receiving_sku_receipt product_name +ll_receiving_sku_receipt received_packages +ll_receiving_sku_receipt created_at +ll_receiving_sku_receipt updated_at +ll_receiving_sku_receipt version +ll_receiving_warehouse_operation id +ll_receiving_warehouse_operation source_container_booking_id +ll_receiving_warehouse_operation idempotency_key +ll_receiving_warehouse_operation request_hash +ll_receiving_warehouse_operation result_version +ll_receiving_warehouse_operation operator_name +ll_receiving_warehouse_operation remark +ll_receiving_warehouse_operation created_at +ll_relabel_application id +ll_relabel_application customer_id +ll_relabel_application relabel_no +ll_relabel_application lastleg_order_id +ll_relabel_application customer_order_no +ll_relabel_application overseas_warehouse_id +ll_relabel_application label_deadline +ll_relabel_application contact_name +ll_relabel_application contact_phone +ll_relabel_application delivery_method +ll_relabel_application print_shipping_label +ll_relabel_application shipping_label_file_id +ll_relabel_application shipping_label_file_name +ll_relabel_application shipping_label_file_url +ll_relabel_application fulfillment_status +ll_relabel_application outbound_order_no +ll_relabel_application customer_confirmation_key +ll_relabel_application customer_confirmed_at +ll_relabel_application remark +ll_relabel_application total_file_id +ll_relabel_application total_file_name +ll_relabel_application total_file_url +ll_relabel_application carton_total_file_id +ll_relabel_application carton_total_file_name +ll_relabel_application carton_total_file_url +ll_relabel_application sku_total_file_id +ll_relabel_application sku_total_file_name +ll_relabel_application sku_total_file_url +ll_relabel_application status +ll_relabel_application item_count +ll_relabel_application total_package_count +ll_relabel_application notified_package_count +ll_relabel_application charge_amount +ll_relabel_application charge_currency +ll_relabel_application wallet_status +ll_relabel_application wallet_error_code +ll_relabel_application wallet_error_message +ll_relabel_application wallet_command_event_id +ll_relabel_application idempotency_key +ll_relabel_application request_hash +ll_relabel_application created_by +ll_relabel_application created_at +ll_relabel_application updated_at +ll_relabel_application tenant_id +ll_relabel_item id +ll_relabel_item application_id +ll_relabel_item customer_id +ll_relabel_item sku_code +ll_relabel_item product_image_file_id +ll_relabel_item product_image_file_name +ll_relabel_item product_image_url +ll_relabel_item product_name_zh +ll_relabel_item total_package_count +ll_relabel_item notified_package_count +ll_relabel_item shipment_no +ll_relabel_item tracking_code +ll_relabel_item new_sku_code +ll_relabel_item label_requirement +ll_relabel_item remark +ll_relabel_item relabel_file_id +ll_relabel_item relabel_file_name +ll_relabel_item relabel_file_url +ll_relabel_item created_at +ll_relabel_item tenant_id +ll_relabel_item carton_mark +ll_relabel_item return_carton_id +ll_relabel_item source_carton_mark +ll_relabel_item new_carton_mark +ll_relabel_item fba_carton_mark +ll_relabel_item destination_warehouse_id +ll_relabel_item destination_fba_warehouse_code +ll_relabel_item operation_type +ll_relabel_item sku_relabel_items_json +ll_relabel_item source_inventory_balance_id +ll_relabel_item source_inventory_position_id +ll_relabel_item source_inbound_order_id +ll_relabel_item source_inbound_order_no +ll_relabel_item source_inbound_code +ll_relabel_item source_warehouse_id +ll_relabel_item source_warehouse_code +ll_relabel_item source_warehouse_name +ll_relabel_pda_history id +ll_relabel_pda_history task_id +ll_relabel_pda_history application_id +ll_relabel_pda_history customer_id +ll_relabel_pda_history action +ll_relabel_pda_history from_status +ll_relabel_pda_history to_status +ll_relabel_pda_history operator_key +ll_relabel_pda_history operator_name +ll_relabel_pda_history detail_json +ll_relabel_pda_history created_at +ll_relabel_pda_operation id +ll_relabel_pda_operation task_id +ll_relabel_pda_operation customer_id +ll_relabel_pda_operation operator_key +ll_relabel_pda_operation action +ll_relabel_pda_operation idempotency_key +ll_relabel_pda_operation request_hash +ll_relabel_pda_operation result_json +ll_relabel_pda_operation created_at +ll_relabel_pda_task id +ll_relabel_pda_task application_id +ll_relabel_pda_task customer_id +ll_relabel_pda_task relabel_no +ll_relabel_pda_task overseas_warehouse_id +ll_relabel_pda_task status +ll_relabel_pda_task operator_key +ll_relabel_pda_task operator_name +ll_relabel_pda_task reviewer_key +ll_relabel_pda_task reviewer_name +ll_relabel_pda_task expected_packages +ll_relabel_pda_task relabelled_packages +ll_relabel_pda_task skipped_packages +ll_relabel_pda_task exception_packages +ll_relabel_pda_task completion_photo_file_ids +ll_relabel_pda_task completion_remark +ll_relabel_pda_task review_decision +ll_relabel_pda_task review_remark +ll_relabel_pda_task claimed_at +ll_relabel_pda_task submitted_at +ll_relabel_pda_task reviewed_at +ll_relabel_pda_task version +ll_relabel_pda_task created_at +ll_relabel_pda_task updated_at +ll_relabel_pda_unit_fact id +ll_relabel_pda_unit_fact task_id +ll_relabel_pda_unit_fact application_id +ll_relabel_pda_unit_fact item_id +ll_relabel_pda_unit_fact customer_id +ll_relabel_pda_unit_fact old_label +ll_relabel_pda_unit_fact new_label +ll_relabel_pda_unit_fact result +ll_relabel_pda_unit_fact exception_code +ll_relabel_pda_unit_fact reason +ll_relabel_pda_unit_fact quantity +ll_relabel_pda_unit_fact operator_key +ll_relabel_pda_unit_fact operator_name +ll_relabel_pda_unit_fact occurred_at +ll_relabel_status_history id +ll_relabel_status_history customer_id +ll_relabel_status_history application_id +ll_relabel_status_history from_status +ll_relabel_status_history to_status +ll_relabel_status_history operator_id +ll_relabel_status_history remark +ll_relabel_status_history created_at +ll_relabel_status_history tenant_id +ll_return_carton_count_session operator_id +ll_return_carton_count_session warehouse_id +ll_return_carton_count_session receipt_id +ll_return_carton_count_session started_at +ll_return_carton_count_session created_at +ll_return_carton_count_session updated_at +ll_return_carton_stock_receipt id +ll_return_carton_stock_receipt customer_id +ll_return_carton_stock_receipt receipt_no +ll_return_carton_stock_receipt exception_order_id +ll_return_carton_stock_receipt exception_return_item_id +ll_return_carton_stock_receipt delivery_order_id +ll_return_carton_stock_receipt source_pick_id +ll_return_carton_stock_receipt source_outbound_no +ll_return_carton_stock_receipt source_dispatch_item_id +ll_return_carton_stock_receipt source_outbound_pallet_item_id +ll_return_carton_stock_receipt return_carton_id +ll_return_carton_stock_receipt carton_mark +ll_return_carton_stock_receipt overseas_warehouse_id +ll_return_carton_stock_receipt target_pallet_id +ll_return_carton_stock_receipt target_pallet_no +ll_return_carton_stock_receipt target_location_id +ll_return_carton_stock_receipt target_location_code +ll_return_carton_stock_receipt sku_code +ll_return_carton_stock_receipt product_name_zh +ll_return_carton_stock_receipt quantity +ll_return_carton_stock_receipt packages +ll_return_carton_stock_receipt evidence_file_ids_json +ll_return_carton_stock_receipt received_by +ll_return_carton_stock_receipt received_at +ll_return_inventory_balance id +ll_return_inventory_balance customer_id +ll_return_inventory_balance overseas_warehouse_id +ll_return_inventory_balance sku_code +ll_return_inventory_balance product_name_zh +ll_return_inventory_balance total_quantity +ll_return_inventory_balance available_quantity +ll_return_inventory_balance carton_quantity +ll_return_inventory_balance created_at +ll_return_inventory_balance updated_at +ll_return_inventory_carton id +ll_return_inventory_carton customer_id +ll_return_inventory_carton overseas_warehouse_id +ll_return_inventory_carton source_receipt_id +ll_return_inventory_carton source_batch_no +ll_return_inventory_carton source_return_no +ll_return_inventory_carton source_unit_type +ll_return_inventory_carton source_unit_code +ll_return_inventory_carton pallet_code +ll_return_inventory_carton carton_mark +ll_return_inventory_carton fba_carton_mark +ll_return_inventory_carton destination_warehouse_code +ll_return_inventory_carton destination_warehouse_name +ll_return_inventory_carton relabel_application_id +ll_return_inventory_carton relabel_no +ll_return_inventory_carton relabel_status +ll_return_inventory_carton relabel_completed_at +ll_return_inventory_carton status +ll_return_inventory_carton sku_types +ll_return_inventory_carton total_quantity +ll_return_inventory_carton created_at +ll_return_inventory_carton updated_at +ll_return_inventory_carton merged_at +ll_return_inventory_carton length +ll_return_inventory_carton width +ll_return_inventory_carton height +ll_return_inventory_carton weight +ll_return_inventory_carton original_packaging +ll_return_inventory_carton new_carton_mark +ll_return_inventory_carton location_code +ll_return_inventory_carton putaway_at +ll_return_inventory_carton count_status +ll_return_inventory_carton counted_at +ll_return_inventory_carton counted_by +ll_return_inventory_carton label_status +ll_return_inventory_carton_item id +ll_return_inventory_carton_item carton_id +ll_return_inventory_carton_item customer_id +ll_return_inventory_carton_item sku_code +ll_return_inventory_carton_item product_name_zh +ll_return_inventory_carton_item quantity +ll_return_inventory_carton_item packing_reserved_quantity +ll_return_inventory_carton_item relabelled_quantity +ll_return_inventory_operation id +ll_return_inventory_operation operator_id +ll_return_inventory_operation idempotency_key +ll_return_inventory_operation request_hash +ll_return_inventory_operation operation_type +ll_return_inventory_operation result_carton_id +ll_return_inventory_operation created_at +ll_return_inventory_operation updated_at +ll_return_inventory_operation result_json +ll_return_inventory_outbound_movement id +ll_return_inventory_outbound_movement outbound_pick_id +ll_return_inventory_outbound_movement customer_id +ll_return_inventory_outbound_movement overseas_warehouse_id +ll_return_inventory_outbound_movement carton_id +ll_return_inventory_outbound_movement carton_mark +ll_return_inventory_outbound_movement outbound_no +ll_return_inventory_outbound_movement sku_code +ll_return_inventory_outbound_movement product_name_zh +ll_return_inventory_outbound_movement quantity +ll_return_inventory_outbound_movement total_before +ll_return_inventory_outbound_movement total_after +ll_return_inventory_outbound_movement available_before +ll_return_inventory_outbound_movement available_after +ll_return_inventory_outbound_movement cartons_before +ll_return_inventory_outbound_movement cartons_after +ll_return_inventory_outbound_movement occurred_at +ll_return_order id +ll_return_order customer_id +ll_return_order return_no +ll_return_order overseas_warehouse_id +ll_return_order warehouse_contact_name +ll_return_order warehouse_contact_phone +ll_return_order customer_reference_no +ll_return_order lastleg_order_id +ll_return_order lastleg_order_no +ll_return_order need_relabel +ll_return_order relabel_application_id +ll_return_order relabel_no +ll_return_order relabel_status +ll_return_order status +ll_return_order expected_sku_types +ll_return_order expected_quantity +ll_return_order received_quantity +ll_return_order remark +ll_return_order discrepancy_reason +ll_return_order manually_completed_at +ll_return_order idempotency_key +ll_return_order request_hash +ll_return_order created_by +ll_return_order created_at +ll_return_order updated_at +ll_return_order_item id +ll_return_order_item return_order_id +ll_return_order_item customer_id +ll_return_order_item sku_code +ll_return_order_item product_name_zh +ll_return_order_item expected_quantity +ll_return_order_item received_quantity +ll_return_order_item created_at +ll_return_order_item updated_at +ll_return_packing_plan id +ll_return_packing_plan plan_no +ll_return_packing_plan customer_id +ll_return_packing_plan overseas_warehouse_id +ll_return_packing_plan return_nos_json +ll_return_packing_plan boxes_json +ll_return_packing_plan mode +ll_return_packing_plan status +ll_return_packing_plan remark +ll_return_packing_plan idempotency_key +ll_return_packing_plan created_at +ll_return_packing_plan updated_at +ll_return_packing_plan pushed_at +ll_return_packing_plan completed_at +ll_return_packing_plan source_items_json +ll_return_packing_plan result_marks_json +ll_return_packing_plan request_hash +ll_return_packing_plan completion_hash +ll_return_packing_plan result_labels_json +ll_return_packing_trace id +ll_return_packing_trace customer_id +ll_return_packing_trace operation_id +ll_return_packing_trace source_carton_mark +ll_return_packing_trace target_carton_mark +ll_return_packing_trace return_no +ll_return_packing_trace sku_code +ll_return_packing_trace quantity +ll_return_packing_trace created_at +ll_return_receipt id +ll_return_receipt return_order_id +ll_return_receipt customer_id +ll_return_receipt receipt_no +ll_return_receipt receipt_batch_no +ll_return_receipt unit_type +ll_return_receipt unit_code +ll_return_receipt total_box_count +ll_return_receipt length +ll_return_receipt width +ll_return_receipt height +ll_return_receipt weight +ll_return_receipt original_packaging +ll_return_receipt measurement_source +ll_return_receipt pallet_code +ll_return_receipt carton_mark +ll_return_receipt tracking_no +ll_return_receipt bound_by +ll_return_receipt status +ll_return_receipt received_quantity +ll_return_receipt operator_id +ll_return_receipt operator_name +ll_return_receipt idempotency_key +ll_return_receipt request_hash +ll_return_receipt signed_at +ll_return_receipt created_at +ll_return_receipt_batch id +ll_return_receipt_batch return_order_id +ll_return_receipt_batch receipt_id +ll_return_receipt_batch customer_id +ll_return_receipt_batch batch_no +ll_return_receipt_batch overseas_warehouse_id +ll_return_receipt_batch storage_billing_status +ll_return_receipt_batch storage_started_at +ll_return_receipt_batch created_at +ll_return_receipt_item id +ll_return_receipt_item receipt_id +ll_return_receipt_item return_order_item_id +ll_return_receipt_item customer_id +ll_return_receipt_item sku_code +ll_return_receipt_item received_quantity +ll_return_receipt_item box_count +ll_return_sku_conversion id +ll_return_sku_conversion customer_id +ll_return_sku_conversion overseas_warehouse_id +ll_return_sku_conversion application_id +ll_return_sku_conversion relabel_no +ll_return_sku_conversion item_id +ll_return_sku_conversion round_key +ll_return_sku_conversion carton_id +ll_return_sku_conversion carton_mark +ll_return_sku_conversion old_sku_code +ll_return_sku_conversion new_sku_code +ll_return_sku_conversion product_name_zh +ll_return_sku_conversion quantity +ll_return_sku_conversion status +ll_return_sku_conversion ownership_json +ll_return_sku_conversion completed_at +ll_return_sku_conversion confirmed_at +ll_return_sku_conversion reversed_at +ll_return_stock_receipt id +ll_return_stock_receipt customer_id +ll_return_stock_receipt receipt_no +ll_return_stock_receipt inventory_ledger_id +ll_return_stock_receipt exception_order_id +ll_return_stock_receipt order_id +ll_return_stock_receipt inbound_order_id +ll_return_stock_receipt source_outbound_no +ll_return_stock_receipt source_outbound_pallet_item_id +ll_return_stock_receipt source_inventory_position_id +ll_return_stock_receipt inventory_balance_id +ll_return_stock_receipt inventory_position_id +ll_return_stock_receipt received_packages +ll_return_stock_receipt received_at +ll_return_stock_receipt created_at +ll_security_event_inbox event_id +ll_security_event_inbox event_type +ll_security_event_inbox payload_hash +ll_security_event_inbox payload_json +ll_security_event_inbox status +ll_security_event_inbox result +ll_security_event_inbox received_at +ll_security_event_inbox processed_at +ll_security_projection aggregate_type +ll_security_projection aggregate_id +ll_security_projection tenant_id +ll_security_projection security_status +ll_security_projection permission_version +ll_security_projection roles_json +ll_security_projection authorities_json +ll_security_projection aggregate_version +ll_security_projection payload_hash +ll_security_projection last_event_id +ll_security_projection changed_at +ll_security_projection updated_at +ll_us_truck_order id +ll_us_truck_order customer_id +ll_us_truck_order order_no +ll_us_truck_order transport_type +ll_us_truck_order origin +ll_us_truck_order origin_address +ll_us_truck_order destination +ll_us_truck_order destination_address +ll_us_truck_order container_type +ll_us_truck_order pallet_count +ll_us_truck_order package_count +ll_us_truck_order received_pallet_count +ll_us_truck_order allocated_pallet_count +ll_us_truck_order shipped_pallet_count +ll_us_truck_order total_weight_kg +ll_us_truck_order total_volume_cbm +ll_us_truck_order budget_amount +ll_us_truck_order currency +ll_us_truck_order contact_name +ll_us_truck_order contact_info +ll_us_truck_order requested_date +ll_us_truck_order status +ll_us_truck_order remark +ll_us_truck_order receipt_idempotency_key +ll_us_truck_order receipt_request_hash +ll_us_truck_order idempotency_key +ll_us_truck_order request_hash +ll_us_truck_order created_by +ll_us_truck_order version +ll_us_truck_order created_at +ll_us_truck_order updated_at +ll_us_truck_order tenant_id +ll_us_truck_order_operation id +ll_us_truck_order_operation order_id +ll_us_truck_order_operation customer_id +ll_us_truck_order_operation operation_type +ll_us_truck_order_operation idempotency_key +ll_us_truck_order_operation request_hash +ll_us_truck_order_operation result_version +ll_us_truck_order_operation created_by +ll_us_truck_order_operation created_at +ll_us_truck_order_pallet id +ll_us_truck_order_pallet order_id +ll_us_truck_order_pallet customer_id +ll_us_truck_order_pallet pallet_no +ll_us_truck_order_pallet sequence_no +ll_us_truck_order_pallet source +ll_us_truck_order_pallet status +ll_us_truck_order_pallet warehouse_pallet_id +ll_us_truck_order_pallet package_count +ll_us_truck_order_pallet received_at +ll_us_truck_order_pallet created_at +ll_us_truck_order_pallet updated_at +ll_us_truck_order_pallet tenant_id +ll_us_truck_order_status_history id +ll_us_truck_order_status_history order_id +ll_us_truck_order_status_history customer_id +ll_us_truck_order_status_history operation_type +ll_us_truck_order_status_history from_status +ll_us_truck_order_status_history to_status +ll_us_truck_order_status_history operator_id +ll_us_truck_order_status_history idempotency_key +ll_us_truck_order_status_history remark +ll_us_truck_order_status_history created_at +ll_us_truck_order_status_history tenant_id +ll_vehicle id +ll_vehicle plate_number +ll_vehicle model +ll_vehicle fuel_consumption_per100_km +ll_vehicle mileage_km +ll_vehicle driver_or_dispatch_company +ll_vehicle phone +ll_vehicle region +ll_vehicle ownership +ll_vehicle status +ll_vehicle remark +ll_vehicle record_version +ll_vehicle created_by +ll_vehicle updated_by +ll_vehicle created_at +ll_vehicle updated_at +ll_vehicle max_pallet_spaces +ll_vehicle max_load_kg +ll_vehicle max_volume_cbm +ll_wallet_event_inbox event_id +ll_wallet_event_inbox command_event_id +ll_wallet_event_inbox payload_hash +ll_wallet_event_inbox payload_json +ll_wallet_event_inbox status +ll_wallet_event_inbox received_at +ll_wallet_event_inbox processed_at +ll_warehouse_transfer_carton id +ll_warehouse_transfer_carton transfer_order_id +ll_warehouse_transfer_carton transfer_item_id +ll_warehouse_transfer_carton customer_id +ll_warehouse_transfer_carton carton_mark +ll_warehouse_transfer_carton customer_carton_mark +ll_warehouse_transfer_carton carton_index +ll_warehouse_transfer_carton total_cartons +ll_warehouse_transfer_carton status +ll_warehouse_transfer_carton created_at +ll_warehouse_transfer_carton updated_at +ll_warehouse_transfer_carton length_cm +ll_warehouse_transfer_carton width_cm +ll_warehouse_transfer_carton height_cm +ll_warehouse_transfer_carton gross_weight_kg +ll_warehouse_transfer_carton counted_quantity +ll_warehouse_transfer_carton count_idempotency_key +ll_warehouse_transfer_carton count_request_hash +ll_warehouse_transfer_carton counted_by +ll_warehouse_transfer_carton counted_at +ll_warehouse_transfer_carton discrepancy_reason +ll_warehouse_transfer_carton transfer_pallet_id +ll_warehouse_transfer_carton sku_items_json +ll_warehouse_transfer_inventory_allocation id +ll_warehouse_transfer_inventory_allocation transfer_order_id +ll_warehouse_transfer_inventory_allocation customer_id +ll_warehouse_transfer_inventory_allocation inventory_position_id +ll_warehouse_transfer_inventory_allocation inventory_balance_id +ll_warehouse_transfer_inventory_allocation inbound_order_id +ll_warehouse_transfer_inventory_allocation inbound_code +ll_warehouse_transfer_inventory_allocation pallet_id +ll_warehouse_transfer_inventory_allocation pallet_no +ll_warehouse_transfer_inventory_allocation package_count +ll_warehouse_transfer_inventory_allocation status +ll_warehouse_transfer_inventory_allocation active_position_key +ll_warehouse_transfer_inventory_allocation allocated_at +ll_warehouse_transfer_inventory_allocation shipped_at +ll_warehouse_transfer_inventory_allocation received_at +ll_warehouse_transfer_inventory_allocation created_at +ll_warehouse_transfer_inventory_allocation updated_at +ll_warehouse_transfer_inventory_allocation tenant_id +ll_warehouse_transfer_inventory_allocation sku_code +ll_warehouse_transfer_item id +ll_warehouse_transfer_item transfer_order_id +ll_warehouse_transfer_item customer_id +ll_warehouse_transfer_item sku_code +ll_warehouse_transfer_item product_name_zh +ll_warehouse_transfer_item package_count +ll_warehouse_transfer_item shipping_mark +ll_warehouse_transfer_item created_at +ll_warehouse_transfer_item tenant_id +ll_warehouse_transfer_item declared_quantity +ll_warehouse_transfer_measurement_photo id +ll_warehouse_transfer_measurement_photo transfer_order_id +ll_warehouse_transfer_measurement_photo customer_id +ll_warehouse_transfer_measurement_photo file_id +ll_warehouse_transfer_measurement_photo file_name +ll_warehouse_transfer_measurement_photo content_type +ll_warehouse_transfer_measurement_photo size_bytes +ll_warehouse_transfer_measurement_photo uploaded_by +ll_warehouse_transfer_measurement_photo uploaded_at +ll_warehouse_transfer_measurement_photo submitted_at +ll_warehouse_transfer_order id +ll_warehouse_transfer_order customer_id +ll_warehouse_transfer_order transfer_no +ll_warehouse_transfer_order inbound_order_id +ll_warehouse_transfer_order inbound_code +ll_warehouse_transfer_order lastleg_order_id +ll_warehouse_transfer_order lastleg_order_no +ll_warehouse_transfer_order operating_warehouse_id +ll_warehouse_transfer_order fba_warehouse_code +ll_warehouse_transfer_order delivery_address +ll_warehouse_transfer_order pickup_contact_name +ll_warehouse_transfer_order pickup_contact_phone +ll_warehouse_transfer_order package_count +ll_warehouse_transfer_order delivery_method +ll_warehouse_transfer_order estimated_arrival_at +ll_warehouse_transfer_order estimated_ship_at +ll_warehouse_transfer_order fba_shipment_no +ll_warehouse_transfer_order tracking_no +ll_warehouse_transfer_order fba_box_nos +ll_warehouse_transfer_order remark +ll_warehouse_transfer_order need_relabel +ll_warehouse_transfer_order relabel_application_id +ll_warehouse_transfer_order relabel_no +ll_warehouse_transfer_order relabel_completed_at +ll_warehouse_transfer_order status +ll_warehouse_transfer_order review_decision +ll_warehouse_transfer_order review_remark +ll_warehouse_transfer_order reviewed_by +ll_warehouse_transfer_order reviewed_at +ll_warehouse_transfer_order allocation_idempotency_key +ll_warehouse_transfer_order allocation_request_hash +ll_warehouse_transfer_order outbound_idempotency_key +ll_warehouse_transfer_order outbound_request_hash +ll_warehouse_transfer_order outbound_at +ll_warehouse_transfer_order measured_at +ll_warehouse_transfer_order actual_ship_at +ll_warehouse_transfer_order idempotency_key +ll_warehouse_transfer_order request_hash +ll_warehouse_transfer_order created_by +ll_warehouse_transfer_order created_at +ll_warehouse_transfer_order updated_at +ll_warehouse_transfer_order tenant_id +ll_warehouse_transfer_order label_deadline +ll_warehouse_transfer_order relabel_contact_name +ll_warehouse_transfer_order relabel_contact_phone +ll_warehouse_transfer_order relabel_charge_amount +ll_warehouse_transfer_order relabel_delivery_method +ll_warehouse_transfer_order palletize_idempotency_key +ll_warehouse_transfer_order palletize_request_hash +ll_warehouse_transfer_order confirmation_idempotency_key +ll_warehouse_transfer_order confirmation_request_hash +ll_warehouse_transfer_order customer_confirmed_at +ll_warehouse_transfer_order destination_type +ll_warehouse_transfer_order destination_warehouse_id +ll_warehouse_transfer_order destination_warehouse_code +ll_warehouse_transfer_order destination_warehouse_name +ll_warehouse_transfer_order private_destination_address +ll_warehouse_transfer_order private_destination_postal_code +ll_warehouse_transfer_order private_destination_contact_name +ll_warehouse_transfer_order private_destination_contact_phone +ll_warehouse_transfer_order destination_binding_idempotency_key +ll_warehouse_transfer_order destination_binding_request_hash +ll_warehouse_transfer_pallet id +ll_warehouse_transfer_pallet transfer_order_id +ll_warehouse_transfer_pallet customer_id +ll_warehouse_transfer_pallet sequence_no +ll_warehouse_transfer_pallet warehouse_pallet_id +ll_warehouse_transfer_pallet pallet_no +ll_warehouse_transfer_pallet warehouse_location_id +ll_warehouse_transfer_pallet warehouse_location_code +ll_warehouse_transfer_pallet warehouse_resource_lock_id +ll_warehouse_transfer_pallet carton_count +ll_warehouse_transfer_pallet length_cm +ll_warehouse_transfer_pallet width_cm +ll_warehouse_transfer_pallet height_cm +ll_warehouse_transfer_pallet gross_weight_kg +ll_warehouse_transfer_pallet volume_cbm +ll_warehouse_transfer_pallet status +ll_warehouse_transfer_pallet draft_idempotency_key +ll_warehouse_transfer_pallet draft_request_hash +ll_warehouse_transfer_pallet generate_idempotency_key +ll_warehouse_transfer_pallet bind_idempotency_key +ll_warehouse_transfer_pallet bound_at +ll_warehouse_transfer_pallet completed_at +ll_warehouse_transfer_pallet created_at +ll_warehouse_transfer_pallet updated_at +ll_warehouse_transfer_pallet_item id +ll_warehouse_transfer_pallet_item transfer_order_id +ll_warehouse_transfer_pallet_item transfer_pallet_id +ll_warehouse_transfer_pallet_item transfer_item_id +ll_warehouse_transfer_pallet_item customer_id +ll_warehouse_transfer_pallet_item package_count +ll_warehouse_transfer_pallet_item created_at +ll_warehouse_transfer_receipt id +ll_warehouse_transfer_receipt transfer_order_id +ll_warehouse_transfer_receipt allocation_id +ll_warehouse_transfer_receipt customer_id +ll_warehouse_transfer_receipt source_inventory_position_id +ll_warehouse_transfer_receipt destination_inventory_balance_id +ll_warehouse_transfer_receipt destination_inventory_position_id +ll_warehouse_transfer_receipt package_count +ll_warehouse_transfer_receipt idempotency_key +ll_warehouse_transfer_receipt request_hash +ll_warehouse_transfer_receipt inventory_operation_key +ll_warehouse_transfer_receipt created_by +ll_warehouse_transfer_receipt received_at +ll_warehouse_transfer_receipt created_at +ll_warehouse_transfer_receipt tenant_id +ll_warehouse_transfer_receipt_command id +ll_warehouse_transfer_receipt_command customer_id +ll_warehouse_transfer_receipt_command transfer_order_id +ll_warehouse_transfer_receipt_command source_inventory_position_id +ll_warehouse_transfer_receipt_command idempotency_key +ll_warehouse_transfer_receipt_command request_hash +ll_warehouse_transfer_receipt_command request_json +ll_warehouse_transfer_receipt_command target_warehouse_id +ll_warehouse_transfer_receipt_command target_pallet_id +ll_warehouse_transfer_receipt_command target_location_id +ll_warehouse_transfer_receipt_command target_hash +ll_warehouse_transfer_receipt_command target_json +ll_warehouse_transfer_receipt_command reservation_key +ll_warehouse_transfer_receipt_command resource_lock_id +ll_warehouse_transfer_receipt_command status +ll_warehouse_transfer_receipt_command created_at +ll_warehouse_transfer_receipt_command updated_at +ll_warehouse_transfer_relabel_binding id +ll_warehouse_transfer_relabel_binding transfer_order_id +ll_warehouse_transfer_relabel_binding customer_id +ll_warehouse_transfer_relabel_binding operation_type +ll_warehouse_transfer_relabel_binding customer_carton_mark +ll_warehouse_transfer_relabel_binding original_sku +ll_warehouse_transfer_relabel_binding new_sku +ll_warehouse_transfer_relabel_binding quantity +ll_warehouse_transfer_relabel_binding fba_carton_mark +ll_warehouse_transfer_relabel_binding destination_warehouse_code +ll_warehouse_transfer_relabel_binding remark +ll_warehouse_transfer_relabel_binding created_at +ll_warehouse_transfer_relabel_binding source_allocation_id +ll_warehouse_transfer_relabel_binding relabel_item_id +ll_warehouse_transfer_source_order id +ll_warehouse_transfer_source_order transfer_order_id +ll_warehouse_transfer_source_order customer_id +ll_warehouse_transfer_source_order source_lastleg_order_id +ll_warehouse_transfer_source_order source_lastleg_order_no +ll_warehouse_transfer_source_order inbound_order_id +ll_warehouse_transfer_source_order inbound_code +ll_warehouse_transfer_source_order created_at +ll_warehouse_transfer_source_order tenant_id \ No newline at end of file diff --git a/output/local-schema-repair/customs-tab-consistency.json b/output/local-schema-repair/customs-tab-consistency.json new file mode 100644 index 000000000..6d5916ad7 --- /dev/null +++ b/output/local-schema-repair/customs-tab-consistency.json @@ -0,0 +1,116 @@ +[ + { + "status": "PENDING_REVIEW", + "count": 127, + "total": 127, + "passed": true + }, + { + "status": "WAIT_MEASURE", + "count": 195, + "total": 195, + "passed": true + }, + { + "status": "WAIT_WEIGHT_CONFIRM", + "count": 125, + "total": 125, + "passed": true + }, + { + "status": "WEIGHT_CONFIRMED", + "count": 1, + "total": 1, + "passed": true + }, + { + "status": "WAIT_CUSTOMS_DOCS", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "WAIT_PALLETIZE", + "count": 6, + "total": 6, + "passed": true + }, + { + "status": "WAIT_SPLIT", + "count": 126, + "total": 126, + "passed": true + }, + { + "status": "LOADING", + "count": 9, + "total": 9, + "passed": true + }, + { + "status": "LOADED", + "count": 73, + "total": 73, + "passed": true + }, + { + "status": "EXPORT_CUSTOMS", + "count": 12, + "total": 12, + "passed": true + }, + { + "status": "SAILING_CLEARANCE", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "WAIT_UNLOAD", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "WAIT_DISPATCH", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "OUTBOUND_DOCUMENT", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "DELIVERING", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "SIGNED", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "DELIVERED", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "COMPLETED", + "count": 2, + "total": 2, + "passed": true + }, + { + "status": "MEASUREMENT_REVIEW", + "count": 120, + "total": 120, + "passed": true + } +] diff --git a/output/local-schema-repair/customs-tab-live.json b/output/local-schema-repair/customs-tab-live.json new file mode 100644 index 000000000..6c67deaac --- /dev/null +++ b/output/local-schema-repair/customs-tab-live.json @@ -0,0 +1,523 @@ +[ + { + "path": "/api/auth/login", + "http": 200, + "code": "200", + "requestId": "d8386ec4-397e-479f-a02f-ed5248d2d772, 3b6b0258-8944-403d-8290-b2a3f6393bd4", + "passed": true + }, + { + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200", + "requestId": "36a52333-5a14-4eea-a5ed-bd3f5b77bd95, 83a342cc-b86b-44ce-a70b-5cd38d043caa", + "passed": true, + "counts": { + "PENDING_REVIEW": 127, + "WAIT_MEASURE": 195, + "WAIT_PALLETIZE": 6, + "WAIT_SPLIT": 126, + "LOADING": 9, + "LOADED": 73, + "DELIVERED": 0, + "COMPLETED": 2, + "WAIT_WEIGHT_CONFIRM": 125, + "WEIGHT_CONFIRMED": 1, + "WAIT_CUSTOMS_DOCS": 0, + "EXPORT_CUSTOMS": 12, + "SAILING_CLEARANCE": 0, + "WAIT_UNLOAD": 0, + "WAIT_DISPATCH": 0, + "OUTBOUND_DOCUMENT": 0, + "DELIVERING": 0, + "SIGNED": 0, + "MEASUREMENT_REVIEW": 120 + } + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=PENDING_REVIEW", + "http": 200, + "code": "200", + "requestId": "cec5abdd-3d32-4ec4-9646-ee82ae4bbb53, 2ceadbc6-b8b5-4966-bb5f-14785549e57e", + "passed": true, + "total": "127", + "records": [ + { + "orderId": "2112105953787518978", + "tenantId": "2112105501490544641", + "inboundId": "2112105957231161346", + "mainStatus": "PENDING_REVIEW" + }, + { + "orderId": "2112105886309556225", + "tenantId": "2112105195373461506", + "inboundId": "2112105890017439745", + "mainStatus": "PENDING_REVIEW" + }, + { + "orderId": "2112105822484832258", + "tenantId": "2112105195373461506", + "inboundId": "2112105825983000577", + "mainStatus": "PENDING_REVIEW" + }, + { + "orderId": "2112105768302813186", + "tenantId": "2112105195373461506", + "inboundId": "2112105772081999873", + "mainStatus": "PENDING_REVIEW" + }, + { + "orderId": "2112105682319581185", + "tenantId": "2112105501490544641", + "inboundId": "2112105687122178049", + "mainStatus": "PENDING_REVIEW" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_MEASURE", + "http": 200, + "code": "200", + "requestId": "970d462f-c6c0-4be5-a625-f56bcd015380, 97d186ed-00e7-4d2c-84c3-e4cf8bd264b8", + "passed": true, + "total": "195", + "records": [ + { + "orderId": "2112102981498183681", + "tenantId": "2112102958765047809", + "inboundId": "2112103003577118721", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2098325342631428097", + "tenantId": "2098324852501774338", + "inboundId": "2098325343935848449", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2098325190034259969", + "tenantId": "2098324852501774338", + "inboundId": "2098325191338680322", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2098325037621641217", + "tenantId": "2098324852501774338", + "inboundId": "2098325038921867265", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2098324887905959938", + "tenantId": "2098324852501774338", + "inboundId": "2098324891550801921", + "mainStatus": "WAIT_MEASURE" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_WEIGHT_CONFIRM", + "http": 200, + "code": "200", + "requestId": "3df59adf-731b-4388-bf88-4439adf9fa90, d2d74f05-5875-4b2f-93ff-e161dbe4186e", + "passed": true, + "total": "125", + "records": [ + { + "orderId": "2085355345216114689", + "tenantId": "2085308606829346818", + "inboundId": "2085355347941904385", + "mainStatus": null + }, + { + "orderId": "2085355345975283713", + "tenantId": "2085308606829346818", + "inboundId": "2085355347992236034", + "mainStatus": null + }, + { + "orderId": "2085355346734452738", + "tenantId": "2085308606829346818", + "inboundId": "2085355360826806273", + "mainStatus": null + }, + { + "orderId": "2085355347493621762", + "tenantId": "2085308606829346818", + "inboundId": "2085355360881332226", + "mainStatus": null + }, + { + "orderId": "2085355348282150913", + "tenantId": "2085308606829346818", + "inboundId": "2085355360931663873", + "mainStatus": null + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WEIGHT_CONFIRMED", + "http": 200, + "code": "200", + "requestId": "089af451-73c8-461d-9e7f-d39305be69e7, dc1098ac-4bc2-4538-852a-4e592363658b", + "passed": true, + "total": "1", + "records": [ + { + "orderId": "2085341741574098946", + "tenantId": "2085308606829346818", + "inboundId": "2085341749429522434", + "mainStatus": null + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_CUSTOMS_DOCS", + "http": 200, + "code": "200", + "requestId": "789f82d6-5b7e-4f28-b542-12c4537f695c, 94e8eb5d-c0d9-4f0c-854d-2df1458c81be", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_PALLETIZE", + "http": 200, + "code": "200", + "requestId": "9fca92f3-47d2-4a5b-9360-73ba15570f8b, d66b74f3-a292-418f-91d3-5b364e5d1141", + "passed": true, + "total": "6", + "records": [ + { + "orderId": "2112105882580819970", + "tenantId": "2112105195373461506", + "inboundId": "2112105899853082626", + "mainStatus": "WAIT_PALLETIZE" + }, + { + "orderId": "2112105818881925122", + "tenantId": "2112105195373461506", + "inboundId": "2112105836158382082", + "mainStatus": "WAIT_PALLETIZE" + }, + { + "orderId": "2112105764741849089", + "tenantId": "2112105195373461506", + "inboundId": "2112105781263331330", + "mainStatus": "WAIT_PALLETIZE" + }, + { + "orderId": "2112104925457424385", + "tenantId": "2112104631512203266", + "inboundId": "2112104942167650305", + "mainStatus": "WAIT_PALLETIZE" + }, + { + "orderId": "2112104871636115457", + "tenantId": "2112104551203864578", + "inboundId": "2112104887486509058", + "mainStatus": "WAIT_PALLETIZE" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_SPLIT", + "http": 200, + "code": "200", + "requestId": "c051f77b-bf8b-40f7-ae48-b0199c425a2c, 379ba9b5-caa8-4ba6-b7bc-ae5e9a1b7096", + "passed": true, + "total": "126", + "records": [ + { + "orderId": "2112105949454802945", + "tenantId": "2112105501490544641", + "inboundId": "2112105974222286850", + "mainStatus": "WAIT_SPLIT" + }, + { + "orderId": "2112105677974282242", + "tenantId": "2112105501490544641", + "inboundId": "2112105696567750658", + "mainStatus": "WAIT_SPLIT" + }, + { + "orderId": "2112105550538743809", + "tenantId": "2112105501490544641", + "inboundId": "2112105615210835970", + "mainStatus": "WAIT_SPLIT" + }, + { + "orderId": "2112105269298077697", + "tenantId": "2112105195373461506", + "inboundId": "2112105371026845697", + "mainStatus": "WAIT_SPLIT" + }, + { + "orderId": "2112104769605476353", + "tenantId": "2112104551203864578", + "inboundId": "2112104783950114818", + "mainStatus": "WAIT_SPLIT" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=LOADING", + "http": 200, + "code": "200", + "requestId": "f1731715-f948-457e-9e66-95bcae492242, d1559d04-db13-41e0-85fa-b0776f32c224", + "passed": true, + "total": "9", + "records": [ + { + "orderId": "2092816910277038081", + "tenantId": "2092816814294667266", + "inboundId": "2092816913754202115", + "mainStatus": "LOADING" + }, + { + "orderId": "2092816871253233665", + "tenantId": "2092816814294667266", + "inboundId": "2092816875699281923", + "mainStatus": "LOADING" + }, + { + "orderId": "2092816836365012994", + "tenantId": "2092816814294667266", + "inboundId": "2092816850256633858", + "mainStatus": "LOADING" + }, + { + "orderId": "2092814878690398210", + "tenantId": "2092814835845664769", + "inboundId": "2092814880129130499", + "mainStatus": "LOADING" + }, + { + "orderId": "2091000814000001101", + "tenantId": "10001", + "inboundId": "2091000814000001301", + "mainStatus": "LOADING" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=LOADED", + "http": 200, + "code": "200", + "requestId": "8adb0c88-721d-49e5-ae76-400c43aebf81, 4b3c1edd-8a2e-40c4-82ac-36ac366afe8c", + "passed": true, + "total": "73", + "records": [ + { + "orderId": "2093269574496440322", + "tenantId": "2093269089353961474", + "inboundId": "2093269587792433154", + "mainStatus": "LOADED" + }, + { + "orderId": "2093269527184691202", + "tenantId": "2093269089353961474", + "inboundId": "2093269537020383234", + "mainStatus": "LOADED" + }, + { + "orderId": "2093269460814024706", + "tenantId": "2093269089353961474", + "inboundId": "2093269473657032707", + "mainStatus": "LOADED" + }, + { + "orderId": "2093269413967843329", + "tenantId": "2093269089353961474", + "inboundId": "2093269422700433411", + "mainStatus": "LOADED" + }, + { + "orderId": "2093269346426966017", + "tenantId": "2093269089353961474", + "inboundId": "2093269359261585410", + "mainStatus": "LOADED" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=EXPORT_CUSTOMS", + "http": 200, + "code": "200", + "requestId": "ef20726d-cda3-4f23-b1aa-b05efe574617, 9e8b9d3d-bd7b-43b4-bd3e-f7488276292a", + "passed": true, + "total": "12", + "records": [ + { + "orderId": "2086081433932726274", + "tenantId": "10001", + "inboundId": "2086081437650956290", + "mainStatus": null + }, + { + "orderId": "2086085225151528961", + "tenantId": "10001", + "inboundId": "2086085239259049985", + "mainStatus": null + }, + { + "orderId": "2086085487601713154", + "tenantId": "10001", + "inboundId": "2086085491298971650", + "mainStatus": null + }, + { + "orderId": "2086086464165707778", + "tenantId": "10001", + "inboundId": "2086086473193926658", + "mainStatus": null + }, + { + "orderId": "2086088193535967234", + "tenantId": "10001", + "inboundId": "2086088197887537154", + "mainStatus": null + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=SAILING_CLEARANCE", + "http": 200, + "code": "200", + "requestId": "152a2d06-7280-40ca-b2b4-e431e38aad09, 038f2149-53ea-4d8d-80c2-f179a964be24", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_UNLOAD", + "http": 200, + "code": "200", + "requestId": "39d0e8cf-3864-4353-a368-e1d534d80b31, 7a5cd168-cb61-4459-b20a-f2f2313941e0", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_DISPATCH", + "http": 200, + "code": "200", + "requestId": "f2b1a845-bed6-4816-8b8f-eafd958ec354, 33d70b80-347e-42c8-a9f7-2850abc390e3", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=OUTBOUND_DOCUMENT", + "http": 200, + "code": "200", + "requestId": "507b600b-e51a-4dfd-a1b4-4e521a8a5b43, 8d82c176-67f8-4f2d-a67e-cb1f07cb8bb9", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=DELIVERING", + "http": 200, + "code": "200", + "requestId": "a4ce3c7c-093c-46ef-86f4-562713de83fa, 7800d83e-902c-4596-8a2c-9ac5622999e1", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=SIGNED", + "http": 200, + "code": "200", + "requestId": "1d9273c0-16b9-46a7-8d91-de893b3fda4e, 8e2e2611-b64a-4875-975b-3f70247d2ba8", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=DELIVERED", + "http": 200, + "code": "200", + "requestId": "15254699-ce87-40d2-ab92-524be410a608, 03296c5a-921c-474b-bc94-b163d9bbeca9", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=COMPLETED", + "http": 200, + "code": "200", + "requestId": "e0ba9860-9602-40e7-9480-a8f270ab2ada, aaf30bb1-06be-454a-8f94-051961520d6b", + "passed": true, + "total": "2", + "records": [ + { + "orderId": "2084515377635758081", + "tenantId": "2084513933705150465", + "inboundId": "2085623586303365121", + "mainStatus": "COMPLETED" + }, + { + "orderId": "2084210113483173890", + "tenantId": "10001", + "inboundId": "2085623585678413826", + "mainStatus": "COMPLETED" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=MEASUREMENT_REVIEW", + "http": 200, + "code": "200", + "requestId": "c19b7ce9-6fd0-4d0b-a21a-7c89ba39b244, 756e5250-341e-4b41-998d-419a68fc9102", + "passed": true, + "total": "120", + "records": [ + { + "orderId": "2085355293542289410", + "tenantId": "2085308606829346818", + "inboundId": "2085355307198435329", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2085355294326624258", + "tenantId": "2085308606829346818", + "inboundId": "2085355307252961281", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2085355295115153410", + "tenantId": "2085308606829346818", + "inboundId": "2085355307303292930", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2085355295895293953", + "tenantId": "2085308606829346818", + "inboundId": "2085355307357818882", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2085355296650268673", + "tenantId": "2085308606829346818", + "inboundId": "2085355307408150530", + "mainStatus": "WAIT_MEASURE" + } + ] + }, + { + "path": "9202/actuator/health", + "http": 200, + "body": { + "status": "UP" + }, + "passed": true + }, + { + "path": "9303/actuator/health", + "http": 200, + "body": { + "status": "UP" + }, + "passed": true + } +] \ No newline at end of file diff --git a/output/local-schema-repair/firstleg-columns-before.tsv b/output/local-schema-repair/firstleg-columns-before.tsv new file mode 100644 index 000000000..e402d1f9c --- /dev/null +++ b/output/local-schema-repair/firstleg-columns-before.tsv @@ -0,0 +1,2138 @@ +event_delivery_attempt attempt_id +event_delivery_attempt service_name +event_delivery_attempt event_type +event_delivery_attempt entry_id +event_delivery_attempt event_id +event_delivery_attempt target_name +event_delivery_attempt started_at +event_delivery_attempt finished_at +event_delivery_attempt duration_ms +event_delivery_attempt outcome +event_delivery_attempt error_code +event_delivery_attempt next_retry_at +fl_assignment_history id +fl_assignment_history tenant_id +fl_assignment_history task_id +fl_assignment_history previous_assignee_id +fl_assignment_history assignee_id +fl_assignment_history assignee_name +fl_assignment_history reason +fl_assignment_history operator_id +fl_assignment_history created_at +fl_carrier_fba_rate id +fl_carrier_fba_rate tenant_id +fl_carrier_fba_rate price_book_version_id +fl_carrier_fba_rate rate_code +fl_carrier_fba_rate rate_version +fl_carrier_fba_rate origin_warehouse_id +fl_carrier_fba_rate origin_warehouse_code +fl_carrier_fba_rate origin_warehouse_name +fl_carrier_fba_rate business_type +fl_carrier_fba_rate channel_code +fl_carrier_fba_rate price_model +fl_carrier_fba_rate carrier_id +fl_carrier_fba_rate carrier_name +fl_carrier_fba_rate destination_type +fl_carrier_fba_rate destination_code +fl_carrier_fba_rate destination_warehouse_id +fl_carrier_fba_rate destination_name +fl_carrier_fba_rate region_code +fl_carrier_fba_rate pricing_tax_mode +fl_carrier_fba_rate weight_from_kg +fl_carrier_fba_rate charge_unit +fl_carrier_fba_rate unit_price +fl_carrier_fba_rate currency +fl_carrier_fba_rate additional_fee +fl_carrier_fba_rate source_sheet_name +fl_carrier_fba_rate source_row_number +fl_carrier_fba_rate source_destination_text +fl_carrier_fba_rate effective_from +fl_carrier_fba_rate effective_to +fl_carrier_fba_rate status +fl_carrier_fba_rate remark +fl_carrier_fba_rate created_by +fl_carrier_fba_rate created_at +fl_carrier_fba_rate updated_by +fl_carrier_fba_rate updated_at +fl_carrier_fba_rate deleted +fl_carrier_fba_rate version +fl_carrier_schedule_exception_fact id +fl_carrier_schedule_exception_fact query_id +fl_carrier_schedule_exception_fact event_key +fl_carrier_schedule_exception_fact provider_code +fl_carrier_schedule_exception_fact provider_event_id +fl_carrier_schedule_exception_fact provider_status +fl_carrier_schedule_exception_fact exception_code +fl_carrier_schedule_exception_fact active +fl_carrier_schedule_exception_fact observed_at +fl_carrier_schedule_exception_fact location_code +fl_carrier_schedule_exception_fact location_name +fl_carrier_schedule_exception_fact source_reference +fl_carrier_schedule_exception_fact raw_payload_hash +fl_carrier_schedule_exception_fact created_at +fl_carrier_schedule_node_fact id +fl_carrier_schedule_node_fact query_id +fl_carrier_schedule_node_fact event_key +fl_carrier_schedule_node_fact provider_code +fl_carrier_schedule_node_fact provider_event_id +fl_carrier_schedule_node_fact provider_node_code +fl_carrier_schedule_node_fact standard_node +fl_carrier_schedule_node_fact node_sequence +fl_carrier_schedule_node_fact observed_at +fl_carrier_schedule_node_fact estimated_at +fl_carrier_schedule_node_fact actual_at +fl_carrier_schedule_node_fact location_code +fl_carrier_schedule_node_fact location_name +fl_carrier_schedule_node_fact source_reference +fl_carrier_schedule_node_fact raw_payload_hash +fl_carrier_schedule_node_fact created_at +fl_carrier_schedule_node_fact container_booking_id +fl_carrier_schedule_query id +fl_carrier_schedule_query query_no +fl_carrier_schedule_query customer_id +fl_carrier_schedule_query ocean_booking_id +fl_carrier_schedule_query container_booking_id +fl_carrier_schedule_query container_scope_id +fl_carrier_schedule_query carrier_code +fl_carrier_schedule_query tracking_type +fl_carrier_schedule_query tracking_no +fl_carrier_schedule_query official_url +fl_carrier_schedule_query access_mode +fl_carrier_schedule_query status +fl_carrier_schedule_query window_started_at +fl_carrier_schedule_query attempt_count +fl_carrier_schedule_query next_allowed_at +fl_carrier_schedule_query last_attempt_at +fl_carrier_schedule_query last_success_at +fl_carrier_schedule_query source_updated_at +fl_carrier_schedule_query expires_at +fl_carrier_schedule_query result_port_schedule_id +fl_carrier_schedule_query last_attempt_status +fl_carrier_schedule_query manual_reason +fl_carrier_schedule_query last_error_code +fl_carrier_schedule_query last_error_message +fl_carrier_schedule_query remark +fl_carrier_schedule_query created_by +fl_carrier_schedule_query created_by_name +fl_carrier_schedule_query created_at +fl_carrier_schedule_query updated_by +fl_carrier_schedule_query updated_by_name +fl_carrier_schedule_query updated_at +fl_carrier_schedule_query version +fl_carrier_schedule_query consecutive_failures +fl_carrier_schedule_query latest_node_observed_at +fl_carrier_schedule_query latest_standard_node +fl_carrier_schedule_query lease_owner +fl_carrier_schedule_query lease_until +fl_carrier_schedule_query stop_reason +fl_carrier_schedule_query stopped_at +fl_carrier_schedule_query trigger_source +fl_carrier_schedule_query_attempt id +fl_carrier_schedule_query_attempt query_id +fl_carrier_schedule_query_attempt window_attempt_no +fl_carrier_schedule_query_attempt carrier_code +fl_carrier_schedule_query_attempt access_mode +fl_carrier_schedule_query_attempt official_url +fl_carrier_schedule_query_attempt attempt_status +fl_carrier_schedule_query_attempt coverage_gap +fl_carrier_schedule_query_attempt coverage_gap_code +fl_carrier_schedule_query_attempt manual_reason +fl_carrier_schedule_query_attempt error_code +fl_carrier_schedule_query_attempt error_message +fl_carrier_schedule_query_attempt operator_id +fl_carrier_schedule_query_attempt operator_name +fl_carrier_schedule_query_attempt created_at +fl_carrier_schedule_query_history id +fl_carrier_schedule_query_history query_id +fl_carrier_schedule_query_history action +fl_carrier_schedule_query_history from_version +fl_carrier_schedule_query_history to_version +fl_carrier_schedule_query_history reason +fl_carrier_schedule_query_history before_snapshot +fl_carrier_schedule_query_history after_snapshot +fl_carrier_schedule_query_history operator_id +fl_carrier_schedule_query_history operator_name +fl_carrier_schedule_query_history created_at +fl_carrier_schedule_query_operation id +fl_carrier_schedule_query_operation query_id +fl_carrier_schedule_query_operation operator_id +fl_carrier_schedule_query_operation operation +fl_carrier_schedule_query_operation idempotency_key +fl_carrier_schedule_query_operation request_hash +fl_carrier_schedule_query_operation status +fl_carrier_schedule_query_operation result_json +fl_carrier_schedule_query_operation created_at +fl_carrier_schedule_query_operation completed_at +fl_coload_command id +fl_coload_command actor_id +fl_coload_command action_type +fl_coload_command idempotency_key +fl_coload_command request_hash +fl_coload_command command_status +fl_coload_command result_group_id +fl_coload_command created_at +fl_coload_command completed_at +fl_coload_group id +fl_coload_group group_no +fl_coload_group group_status +fl_coload_group warehouse_id +fl_coload_group channel_code +fl_coload_group locked_plan_id +fl_coload_group version +fl_coload_group created_by +fl_coload_group created_by_name +fl_coload_group created_at +fl_coload_group updated_at +fl_coload_group locked_by +fl_coload_group locked_by_name +fl_coload_group locked_at +fl_coload_group consumed_by +fl_coload_group consumed_by_name +fl_coload_group consumed_at +fl_coload_group cancelled_by +fl_coload_group cancelled_by_name +fl_coload_group cancelled_at +fl_coload_group_history id +fl_coload_group_history group_id +fl_coload_group_history action_type +fl_coload_group_history from_status +fl_coload_group_history to_status +fl_coload_group_history plan_id +fl_coload_group_history operation_id +fl_coload_group_history remark +fl_coload_group_history operator_id +fl_coload_group_history operator_name +fl_coload_group_history created_at +fl_coload_group_member id +fl_coload_group_member group_id +fl_coload_group_member tenant_id +fl_coload_group_member order_id +fl_coload_group_member inbound_id +fl_coload_group_member full_package_count +fl_coload_group_member active_flag +fl_coload_group_member created_at +fl_coload_group_member closed_at +fl_consumed_event event_id +fl_consumed_event event_type +fl_consumed_event consumed_at +fl_container_booking id +fl_container_booking booking_no +fl_container_booking container_no +fl_container_booking cabinet_no +fl_container_booking channel_code +fl_container_booking channel_name +fl_container_booking ocean_booking_id +fl_container_booking ocean_booking_requirement_id +fl_container_booking warehouse_id +fl_container_booking warehouse_name +fl_container_booking bill_of_lading_no +fl_container_booking vessel_name +fl_container_booking voyage_no +fl_container_booking container_type +fl_container_booking shipping_company_id +fl_container_booking shipping_company_name +fl_container_booking departure_port_code +fl_container_booking departure_port_name +fl_container_booking destination_port_code +fl_container_booking destination_port_name +fl_container_booking destination_warehouse_code +fl_container_booking destination_warehouse_name +fl_container_booking capacity_cbm +fl_container_booking max_weight_kg +fl_container_booking terminal_trucking_company +fl_container_booking loading_at +fl_container_booking estimated_sailing_at +fl_container_booking actual_sailing_at +fl_container_booking estimated_port_arrival_at +fl_container_booking actual_port_arrival_at +fl_container_booking estimated_warehouse_arrival_at +fl_container_booking actual_warehouse_arrival_at +fl_container_booking created_by +fl_container_booking created_by_name +fl_container_booking created_at +fl_container_booking updated_by +fl_container_booking updated_by_name +fl_container_booking updated_at +fl_container_booking version +fl_container_booking source_type +fl_container_booking record_status +fl_container_booking merged_into_container_booking_id +fl_container_booking customer_id +fl_container_booking customer_name +fl_container_booking terminal_trucking_company_id +fl_container_booking unloading_completed_at +fl_container_booking unloading_photo_uploaded_at +fl_container_booking estimated_empty_reported_at +fl_container_booking actual_empty_reported_at +fl_container_booking empty_report_source_version +fl_container_booking channel_group_code +fl_container_booking pickup_code +fl_container_booking pickup_code_updated_by +fl_container_booking pickup_code_updated_by_name +fl_container_booking pickup_code_updated_at +fl_container_document id +fl_container_document container_booking_id +fl_container_document document_type +fl_container_document file_id +fl_container_document file_name +fl_container_document file_hash +fl_container_document file_url +fl_container_document uploaded_by +fl_container_document uploaded_by_name +fl_container_document completed_by +fl_container_document completed_by_name +fl_container_document created_at +fl_container_document updated_at +fl_container_document completed_at +fl_container_document version +fl_container_event_inbox event_id +fl_container_event_inbox event_type +fl_container_event_inbox event_version +fl_container_event_inbox aggregate_id +fl_container_event_inbox aggregate_version +fl_container_event_inbox payload_hash +fl_container_event_inbox payload_json +fl_container_event_inbox status +fl_container_event_inbox received_at +fl_container_event_inbox processed_at +fl_container_exception_history id +fl_container_exception_history container_booking_id +fl_container_exception_history action +fl_container_exception_history reason +fl_container_exception_history operator_id +fl_container_exception_history operator_name +fl_container_exception_history operation_id +fl_container_exception_history request_hash +fl_container_exception_history occurred_at +fl_container_fee_detail id +fl_container_fee_detail tenant_id +fl_container_fee_detail loading_plan_id +fl_container_fee_detail container_booking_id +fl_container_fee_detail container_no +fl_container_fee_detail fee_item_id +fl_container_fee_detail fee_item_code_snapshot +fl_container_fee_detail fee_item_name_snapshot +fl_container_fee_detail direction +fl_container_fee_detail business_date +fl_container_fee_detail amount +fl_container_fee_detail currency +fl_container_fee_detail settlement_included +fl_container_fee_detail review_status +fl_container_fee_detail source_status +fl_container_fee_detail source_version +fl_container_fee_detail remark +fl_container_fee_detail reviewer_id +fl_container_fee_detail reviewer_name +fl_container_fee_detail reviewed_at +fl_container_fee_detail review_reason +fl_container_fee_detail created_by +fl_container_fee_detail created_at +fl_container_fee_detail updated_by +fl_container_fee_detail updated_at +fl_container_fee_detail paid_at +fl_container_fee_detail payment_method +fl_container_fee_detail payment_reference_no +fl_container_fee_detail payment_voucher_file_ids +fl_container_fee_detail settlement_mode +fl_container_fee_detail supplier_category +fl_container_fee_detail supplier_id +fl_container_fee_detail supplier_name +fl_container_fee_detail allocation_group_id +fl_container_fee_detail allocation_order_id +fl_container_fee_detail allocation_order_no +fl_container_fee_detail allocation_inbound_id +fl_container_fee_detail allocation_inbound_code +fl_container_fee_detail allocation_group_amount +fl_container_fee_source_snapshot id +fl_container_fee_source_snapshot source_fee_id +fl_container_fee_source_snapshot source_version +fl_container_fee_source_snapshot tenant_id +fl_container_fee_source_snapshot loading_plan_id +fl_container_fee_source_snapshot container_booking_id +fl_container_fee_source_snapshot container_no +fl_container_fee_source_snapshot fee_item_id +fl_container_fee_source_snapshot fee_item_code +fl_container_fee_source_snapshot fee_item_name +fl_container_fee_source_snapshot direction +fl_container_fee_source_snapshot supplier_id +fl_container_fee_source_snapshot supplier_name +fl_container_fee_source_snapshot supplier_category +fl_container_fee_source_snapshot settlement_mode +fl_container_fee_source_snapshot paid_at +fl_container_fee_source_snapshot payment_method +fl_container_fee_source_snapshot payment_reference_no +fl_container_fee_source_snapshot payment_voucher_file_ids +fl_container_fee_source_snapshot business_date +fl_container_fee_source_snapshot amount +fl_container_fee_source_snapshot currency +fl_container_fee_source_snapshot review_status +fl_container_fee_source_snapshot reviewed_at +fl_container_fee_source_snapshot created_at +fl_container_fee_source_snapshot allocation_group_id +fl_container_fee_source_snapshot allocation_order_id +fl_container_fee_source_snapshot allocation_order_no +fl_container_fee_source_snapshot allocation_inbound_id +fl_container_fee_source_snapshot allocation_inbound_code +fl_container_fee_source_snapshot allocation_group_amount +fl_container_transport_history id +fl_container_transport_history container_booking_id +fl_container_transport_history before_container_no +fl_container_transport_history after_container_no +fl_container_transport_history before_voyage_no +fl_container_transport_history after_voyage_no +fl_container_transport_history reason +fl_container_transport_history operator_id +fl_container_transport_history operator_name +fl_container_transport_history created_at +fl_container_transport_history operation_id +fl_container_transport_history request_hash +fl_customer_charge_rule id +fl_customer_charge_rule tenant_id +fl_customer_charge_rule rule_code +fl_customer_charge_rule rule_version +fl_customer_charge_rule customer_id +fl_customer_charge_rule customer_name +fl_customer_charge_rule business_type +fl_customer_charge_rule charge_mode +fl_customer_charge_rule tax_mode +fl_customer_charge_rule conversion_factor +fl_customer_charge_rule length_factor +fl_customer_charge_rule width_factor +fl_customer_charge_rule height_factor +fl_customer_charge_rule rounding_scale +fl_customer_charge_rule rounding_mode +fl_customer_charge_rule currency +fl_customer_charge_rule effective_from +fl_customer_charge_rule effective_to +fl_customer_charge_rule status +fl_customer_charge_rule default_rule +fl_customer_charge_rule remark +fl_customer_charge_rule created_by +fl_customer_charge_rule created_at +fl_customer_charge_rule updated_by +fl_customer_charge_rule updated_at +fl_customer_charge_rule deleted +fl_customer_charge_rule version +fl_customer_charge_rule initialization_key +fl_customer_dimension_config id +fl_customer_dimension_config tenant_id +fl_customer_dimension_config box_type +fl_customer_dimension_config inner_length_cm +fl_customer_dimension_config inner_width_cm +fl_customer_dimension_config inner_height_cm +fl_customer_dimension_config edge_addition_cm +fl_customer_dimension_config default_calculation_mode +fl_customer_dimension_config remark +fl_customer_dimension_config initialization_key +fl_customer_dimension_config created_by +fl_customer_dimension_config created_at +fl_customer_dimension_config updated_by +fl_customer_dimension_config updated_at +fl_customer_dimension_config deleted +fl_customer_dimension_config version +fl_customs_case id +fl_customs_case customs_no +fl_customs_case tenant_id +fl_customs_case order_id +fl_customs_case inbound_id +fl_customs_case container_booking_id +fl_customs_case checklist_version_id +fl_customs_case checklist_code +fl_customs_case checklist_version_no +fl_customs_case status +fl_customs_case remark +fl_customs_case created_by +fl_customs_case created_by_name +fl_customs_case created_at +fl_customs_case updated_by +fl_customs_case updated_by_name +fl_customs_case updated_at +fl_customs_case version +fl_customs_checklist_version id +fl_customs_checklist_version checklist_code +fl_customs_checklist_version version_no +fl_customs_checklist_version country_code +fl_customs_checklist_version channel_code +fl_customs_checklist_version cargo_type +fl_customs_checklist_version items_json +fl_customs_checklist_version status +fl_customs_checklist_version created_by +fl_customs_checklist_version created_by_name +fl_customs_checklist_version created_at +fl_customs_command id +fl_customs_command actor_id +fl_customs_command action +fl_customs_command idempotency_key +fl_customs_command request_hash +fl_customs_command status +fl_customs_command result_id +fl_customs_command created_at +fl_customs_command completed_at +fl_customs_completion_document id +fl_customs_completion_document source_document_id +fl_customs_completion_document file_id +fl_customs_completion_document file_name +fl_customs_completion_document file_hash +fl_customs_completion_document content_type +fl_customs_completion_document size_bytes +fl_customs_completion_document uploaded_by +fl_customs_completion_document uploaded_by_name +fl_customs_completion_document uploaded_at +fl_customs_completion_document version +fl_customs_completion_document created_at +fl_customs_completion_document updated_at +fl_customs_completion_document_version id +fl_customs_completion_document_version completion_document_id +fl_customs_completion_document_version document_version +fl_customs_completion_document_version file_id +fl_customs_completion_document_version file_name +fl_customs_completion_document_version file_hash +fl_customs_completion_document_version content_type +fl_customs_completion_document_version size_bytes +fl_customs_completion_document_version operator_id +fl_customs_completion_document_version operator_name +fl_customs_completion_document_version created_at +fl_customs_container id +fl_customs_container loading_plan_id +fl_customs_container container_booking_id +fl_customs_container status +fl_customs_container started_by +fl_customs_container started_by_name +fl_customs_container started_at +fl_customs_container completed_by +fl_customs_container completed_by_name +fl_customs_container completed_at +fl_customs_container created_at +fl_customs_container updated_at +fl_customs_container version +fl_customs_container broker_submitted_by +fl_customs_container broker_submitted_by_name +fl_customs_container broker_submitted_at +fl_customs_container_history id +fl_customs_container_history customs_container_id +fl_customs_container_history action +fl_customs_container_history from_status +fl_customs_container_history to_status +fl_customs_container_history remark +fl_customs_container_history operator_id +fl_customs_container_history operator_name +fl_customs_container_history created_at +fl_customs_customer_document id +fl_customs_customer_document customs_container_id +fl_customs_customer_document tenant_id +fl_customs_customer_document file_id +fl_customs_customer_document file_name +fl_customs_customer_document file_hash +fl_customs_customer_document content_type +fl_customs_customer_document size_bytes +fl_customs_customer_document status +fl_customs_customer_document uploaded_by +fl_customs_customer_document uploaded_at +fl_customs_customer_document frozen_version +fl_customs_customer_document frozen_at +fl_customs_customer_document deleted_by +fl_customs_customer_document deleted_at +fl_customs_customer_document version +fl_customs_customer_document created_at +fl_customs_customer_document updated_at +fl_customs_customer_document_inbound document_id +fl_customs_customer_document_inbound inbound_id +fl_customs_customer_document_inbound tenant_id +fl_customs_customer_document_inbound order_id +fl_customs_customer_document_inbound inbound_code +fl_customs_customer_document_inbound created_at +fl_customs_customer_document_version id +fl_customs_customer_document_version document_id +fl_customs_customer_document_version document_version +fl_customs_customer_document_version file_id +fl_customs_customer_document_version file_name +fl_customs_customer_document_version file_hash +fl_customs_customer_document_version content_type +fl_customs_customer_document_version size_bytes +fl_customs_customer_document_version scope_snapshot_json +fl_customs_customer_document_version action +fl_customs_customer_document_version operator_id +fl_customs_customer_document_version created_at +fl_customs_document id +fl_customs_document customs_case_id +fl_customs_document checklist_item_code +fl_customs_document file_id +fl_customs_document document_version +fl_customs_document replaces_document_id +fl_customs_document file_name +fl_customs_document file_hash +fl_customs_document status +fl_customs_document visibility +fl_customs_document uploaded_by +fl_customs_document uploaded_by_type +fl_customs_document uploaded_at +fl_customs_document reviewed_by +fl_customs_document reviewed_by_name +fl_customs_document reviewed_at +fl_customs_document review_reason +fl_customs_final_document id +fl_customs_final_document source_document_id +fl_customs_final_document file_id +fl_customs_final_document file_name +fl_customs_final_document file_hash +fl_customs_final_document content_type +fl_customs_final_document size_bytes +fl_customs_final_document uploaded_by +fl_customs_final_document uploaded_by_name +fl_customs_final_document uploaded_at +fl_customs_final_document version +fl_customs_final_document created_at +fl_customs_final_document updated_at +fl_customs_frozen_document_inbound document_id +fl_customs_frozen_document_inbound inbound_id +fl_customs_frozen_document_inbound tenant_id +fl_customs_frozen_document_inbound order_id +fl_customs_frozen_document_inbound inbound_code +fl_customs_frozen_document_inbound created_at +fl_customs_history id +fl_customs_history customs_case_id +fl_customs_history action +fl_customs_history from_status +fl_customs_history to_status +fl_customs_history resource_type +fl_customs_history resource_id +fl_customs_history note +fl_customs_history operator_id +fl_customs_history operator_name +fl_customs_history operator_type +fl_customs_history created_at +fl_customs_operation id +fl_customs_operation operator_id +fl_customs_operation action +fl_customs_operation idempotency_key +fl_customs_operation request_hash +fl_customs_operation status +fl_customs_operation result_type +fl_customs_operation result_id +fl_customs_operation created_at +fl_customs_operation completed_at +fl_customs_receipt id +fl_customs_receipt customs_case_id +fl_customs_receipt submission_batch_id +fl_customs_receipt receipt_type +fl_customs_receipt file_id +fl_customs_receipt receipt_version +fl_customs_receipt replaces_receipt_id +fl_customs_receipt file_name +fl_customs_receipt file_hash +fl_customs_receipt visibility +fl_customs_receipt note +fl_customs_receipt uploaded_by +fl_customs_receipt uploaded_by_name +fl_customs_receipt uploaded_at +fl_customs_submission_batch id +fl_customs_submission_batch customs_case_id +fl_customs_submission_batch batch_no +fl_customs_submission_batch batch_version +fl_customs_submission_batch customs_agent_id +fl_customs_submission_batch customs_agent_name +fl_customs_submission_batch external_reference +fl_customs_submission_batch file_snapshot_json +fl_customs_submission_batch status +fl_customs_submission_batch note +fl_customs_submission_batch submitted_by +fl_customs_submission_batch submitted_by_name +fl_customs_submission_batch submitted_at +fl_customs_supplement_request id +fl_customs_supplement_request customs_case_id +fl_customs_supplement_request source_document_id +fl_customs_supplement_request resolved_document_id +fl_customs_supplement_request checklist_item_code +fl_customs_supplement_request reason +fl_customs_supplement_request due_at +fl_customs_supplement_request status +fl_customs_supplement_request requested_by +fl_customs_supplement_request requested_by_name +fl_customs_supplement_request requested_at +fl_customs_supplement_request resolved_by +fl_customs_supplement_request resolved_at +fl_direct_delivery_unloading container_booking_id +fl_direct_delivery_unloading inbound_id +fl_direct_delivery_unloading actual_at +fl_direct_delivery_unloading timezone +fl_direct_delivery_unloading received_by +fl_direct_delivery_unloading evidence_no +fl_direct_delivery_unloading remark +fl_direct_delivery_unloading version +fl_direct_delivery_unloading idempotency_key +fl_direct_delivery_unloading request_hash +fl_direct_delivery_unloading created_by +fl_direct_delivery_unloading created_by_name +fl_direct_delivery_unloading created_at +fl_document_sequence sequence_key +fl_document_sequence current_value +fl_dropship_pallet id +fl_dropship_pallet task_id +fl_dropship_pallet tenant_id +fl_dropship_pallet inbound_id +fl_dropship_pallet warehouse_id +fl_dropship_pallet pallet_no +fl_dropship_pallet pallet_status +fl_dropship_pallet open_operation_id +fl_dropship_pallet seal_operation_id +fl_dropship_pallet created_by +fl_dropship_pallet created_by_name +fl_dropship_pallet completed_by +fl_dropship_pallet completed_by_name +fl_dropship_pallet completed_at +fl_dropship_pallet version +fl_dropship_pallet created_at +fl_dropship_pallet updated_at +fl_dropship_pallet_carton id +fl_dropship_pallet_carton task_id +fl_dropship_pallet_carton pallet_id +fl_dropship_pallet_carton tenant_id +fl_dropship_pallet_carton inbound_id +fl_dropship_pallet_carton inbound_detail_id +fl_dropship_pallet_carton carton_label_id +fl_dropship_pallet_carton sku_code +fl_dropship_pallet_carton cargo_name +fl_dropship_pallet_carton box_code +fl_dropship_pallet_carton expected_sku_quantity +fl_dropship_pallet_carton actual_sku_quantity +fl_dropship_pallet_carton discrepancy_status +fl_dropship_pallet_carton discrepancy_remark +fl_dropship_pallet_carton count_operation_id +fl_dropship_pallet_carton bind_operation_id +fl_dropship_pallet_carton last_operation_id +fl_dropship_pallet_carton counted_by +fl_dropship_pallet_carton counted_by_name +fl_dropship_pallet_carton counted_at +fl_dropship_pallet_carton bound_by +fl_dropship_pallet_carton bound_by_name +fl_dropship_pallet_carton bound_at +fl_dropship_pallet_carton_sku id +fl_dropship_pallet_carton_sku carton_id +fl_dropship_pallet_carton_sku inbound_detail_id +fl_dropship_pallet_carton_sku sku_code +fl_dropship_pallet_carton_sku cargo_name +fl_dropship_pallet_carton_sku expected_quantity +fl_dropship_pallet_carton_sku actual_quantity +fl_dropship_pallet_carton_sku discrepancy_status +fl_dropship_pallet_carton_sku discrepancy_remark +fl_dropship_pallet_carton_sku line_no +fl_dropship_pallet_task id +fl_dropship_pallet_task tenant_id +fl_dropship_pallet_task inbound_id +fl_dropship_pallet_task warehouse_id +fl_dropship_pallet_task task_status +fl_dropship_pallet_task total_cartons +fl_dropship_pallet_task counted_cartons +fl_dropship_pallet_task allocated_cartons +fl_dropship_pallet_task discrepancy_cartons +fl_dropship_pallet_task assignee_id +fl_dropship_pallet_task assignee_name +fl_dropship_pallet_task claimed_at +fl_dropship_pallet_task completed_at +fl_dropship_pallet_task version +fl_dropship_pallet_task created_at +fl_dropship_pallet_task updated_at +fl_fee_item id +fl_fee_item tenant_id +fl_fee_item category +fl_fee_item trade_scope +fl_fee_item fee_code +fl_fee_item fee_type_name +fl_fee_item pickup_payable +fl_fee_item pickup_receivable +fl_fee_item warehouse_payable +fl_fee_item warehouse_receivable +fl_fee_item allocation_fee +fl_fee_item description +fl_fee_item status +fl_fee_item created_by +fl_fee_item created_by_name +fl_fee_item created_at +fl_fee_item updated_by +fl_fee_item updated_by_name +fl_fee_item updated_at +fl_fee_item deleted +fl_fee_item version +fl_fee_item supplier_category +fl_finance_fee_source_command id +fl_finance_fee_source_command customer_id +fl_finance_fee_source_command operator_id +fl_finance_fee_source_command operator_name +fl_finance_fee_source_command action +fl_finance_fee_source_command idempotency_key +fl_finance_fee_source_command request_hash +fl_finance_fee_source_command source_type +fl_finance_fee_source_command source_fee_id +fl_finance_fee_source_command source_version +fl_finance_fee_source_command inbound_id +fl_finance_fee_source_command container_id +fl_finance_fee_source_command reason +fl_finance_fee_source_command status +fl_finance_fee_source_command result_status +fl_finance_fee_source_command created_at +fl_finance_fee_source_command completed_at +fl_fulfillment_task id +fl_fulfillment_task tenant_id +fl_fulfillment_task order_id +fl_fulfillment_task order_no +fl_fulfillment_task order_snapshot_json +fl_fulfillment_task status +fl_fulfillment_task assignee_id +fl_fulfillment_task assignee_name +fl_fulfillment_task assigned_at +fl_fulfillment_task started_at +fl_fulfillment_task completed_at +fl_fulfillment_task created_by +fl_fulfillment_task created_at +fl_fulfillment_task updated_by +fl_fulfillment_task updated_at +fl_fulfillment_task deleted +fl_fulfillment_task version +fl_inbound_carton_label id +fl_inbound_carton_label tenant_id +fl_inbound_carton_label inbound_id +fl_inbound_carton_label order_id +fl_inbound_carton_label inbound_detail_id +fl_inbound_carton_label cargo_item_no +fl_inbound_carton_label cargo_name +fl_inbound_carton_label sku_code +fl_inbound_carton_label units_per_carton +fl_inbound_carton_label detail_package_count +fl_inbound_carton_label inbound_code +fl_inbound_carton_label box_code +fl_inbound_carton_label total_carton_count +fl_inbound_carton_label carton_index +fl_inbound_carton_label label_version +fl_inbound_carton_label batch_status +fl_inbound_carton_label cargo_fingerprint +fl_inbound_carton_label voided_at +fl_inbound_carton_label box_specification +fl_inbound_carton_label length_cm +fl_inbound_carton_label width_cm +fl_inbound_carton_label height_cm +fl_inbound_carton_label created_at +fl_inbound_carton_label_sku id +fl_inbound_carton_label_sku tenant_id +fl_inbound_carton_label_sku inbound_id +fl_inbound_carton_label_sku carton_label_id +fl_inbound_carton_label_sku inbound_detail_id +fl_inbound_carton_label_sku sku_code +fl_inbound_carton_label_sku cargo_name +fl_inbound_carton_label_sku expected_quantity +fl_inbound_carton_label_sku line_no +fl_inbound_carton_label_sku created_at +fl_inbound_destination_snapshot id +fl_inbound_destination_snapshot tenant_id +fl_inbound_destination_snapshot inbound_id +fl_inbound_destination_snapshot destination_type +fl_inbound_destination_snapshot destination_code +fl_inbound_destination_snapshot destination_name +fl_inbound_destination_snapshot country_code +fl_inbound_destination_snapshot state_province +fl_inbound_destination_snapshot city +fl_inbound_destination_snapshot address_line +fl_inbound_destination_snapshot postal_code +fl_inbound_destination_snapshot contact_name +fl_inbound_destination_snapshot contact_phone +fl_inbound_destination_snapshot created_at +fl_inbound_fee id +fl_inbound_fee tenant_id +fl_inbound_fee inbound_id +fl_inbound_fee measurement_id +fl_inbound_fee measurement_source +fl_inbound_fee fee_no +fl_inbound_fee fee_version +fl_inbound_fee charge_rule_id +fl_inbound_fee charge_rule_version +fl_inbound_fee carrier_rate_id +fl_inbound_fee carrier_rate_version +fl_inbound_fee price_book_version_id +fl_inbound_fee rule_code +fl_inbound_fee customer_id +fl_inbound_fee customer_name +fl_inbound_fee business_type +fl_inbound_fee tax_mode +fl_inbound_fee pricing_tax_mode +fl_inbound_fee rounding_scale +fl_inbound_fee rounding_mode +fl_inbound_fee rule_effective_from +fl_inbound_fee rule_effective_to +fl_inbound_fee rate_code +fl_inbound_fee origin_warehouse_id +fl_inbound_fee origin_warehouse_name +fl_inbound_fee channel_code +fl_inbound_fee carrier_id +fl_inbound_fee carrier_name +fl_inbound_fee destination_type +fl_inbound_fee destination_warehouse_id +fl_inbound_fee destination_name +fl_inbound_fee destination_code +fl_inbound_fee rate_effective_from +fl_inbound_fee rate_effective_to +fl_inbound_fee charge_mode +fl_inbound_fee conversion_factor +fl_inbound_fee actual_weight_kg +fl_inbound_fee actual_volume_cbm +fl_inbound_fee converted_quantity +fl_inbound_fee chargeable_quantity +fl_inbound_fee charge_unit +fl_inbound_fee currency +fl_inbound_fee subtotal_amount +fl_inbound_fee additional_amount +fl_inbound_fee total_amount +fl_inbound_fee fee_status +fl_inbound_fee review_status +fl_inbound_fee exception_release +fl_inbound_fee calculated_by +fl_inbound_fee calculated_at +fl_inbound_fee confirmed_by +fl_inbound_fee confirmed_at +fl_inbound_fee sent_by +fl_inbound_fee sent_at +fl_inbound_fee customer_confirmed_by +fl_inbound_fee customer_confirmed_by_name +fl_inbound_fee customer_confirmed_at +fl_inbound_fee created_at +fl_inbound_fee updated_at +fl_inbound_fee baseline_chargeable_quantity +fl_inbound_fee tolerance_percent +fl_inbound_fee_detail id +fl_inbound_fee_detail tenant_id +fl_inbound_fee_detail inbound_id +fl_inbound_fee_detail fee_item_id +fl_inbound_fee_detail source_type +fl_inbound_fee_detail source_fee_id +fl_inbound_fee_detail source_fee_version +fl_inbound_fee_detail source_fee_no +fl_inbound_fee_detail inbound_code +fl_inbound_fee_detail direction +fl_inbound_fee_detail business_date +fl_inbound_fee_detail customer_id +fl_inbound_fee_detail customer_name +fl_inbound_fee_detail invoice_title +fl_inbound_fee_detail fee_category_snapshot +fl_inbound_fee_detail trade_scope_snapshot +fl_inbound_fee_detail fee_type_name_snapshot +fl_inbound_fee_detail channel_code +fl_inbound_fee_detail channel_name +fl_inbound_fee_detail destination_code +fl_inbound_fee_detail destination_name +fl_inbound_fee_detail package_count +fl_inbound_fee_detail actual_gross_weight_kg +fl_inbound_fee_detail actual_volume_cbm +fl_inbound_fee_detail volume_weight_kg +fl_inbound_fee_detail chargeable_weight_kg +fl_inbound_fee_detail chargeable_volume_cbm +fl_inbound_fee_detail chargeable_quantity +fl_inbound_fee_detail charge_unit +fl_inbound_fee_detail unit_price +fl_inbound_fee_detail currency +fl_inbound_fee_detail amount +fl_inbound_fee_detail remark +fl_inbound_fee_detail review_status +fl_inbound_fee_detail reviewer_id +fl_inbound_fee_detail reviewer_name +fl_inbound_fee_detail reviewed_at +fl_inbound_fee_detail review_reason +fl_inbound_fee_detail publication_status +fl_inbound_fee_detail published_by +fl_inbound_fee_detail published_by_name +fl_inbound_fee_detail published_at +fl_inbound_fee_detail inbounded_at +fl_inbound_fee_detail settlement_included +fl_inbound_fee_detail created_by +fl_inbound_fee_detail created_at +fl_inbound_fee_detail updated_by +fl_inbound_fee_detail updated_at +fl_inbound_fee_detail deleted +fl_inbound_fee_detail version +fl_inbound_fee_detail paid_at +fl_inbound_fee_detail payment_method +fl_inbound_fee_detail payment_reference_no +fl_inbound_fee_detail payment_voucher_file_ids +fl_inbound_fee_detail settlement_mode +fl_inbound_fee_detail supplier_category +fl_inbound_fee_detail supplier_id +fl_inbound_fee_detail supplier_name +fl_inbound_fee_item id +fl_inbound_fee_item tenant_id +fl_inbound_fee_item fee_id +fl_inbound_fee_item item_no +fl_inbound_fee_item fee_code +fl_inbound_fee_item fee_name +fl_inbound_fee_item quantity +fl_inbound_fee_item unit +fl_inbound_fee_item unit_price +fl_inbound_fee_item amount +fl_inbound_fee_item currency +fl_inbound_fee_item automatic_flag +fl_inbound_fee_item remark +fl_inbound_fee_item created_at +fl_inbound_file id +fl_inbound_file tenant_id +fl_inbound_file inbound_id +fl_inbound_file file_id +fl_inbound_file file_type +fl_inbound_file file_name_snapshot +fl_inbound_file visibility +fl_inbound_file file_version +fl_inbound_file uploaded_by +fl_inbound_file uploaded_at +fl_inbound_file deleted +fl_inbound_hold_record id +fl_inbound_hold_record tenant_id +fl_inbound_hold_record inbound_id +fl_inbound_hold_record hold_action +fl_inbound_hold_record reason +fl_inbound_hold_record evidence_file_id +fl_inbound_hold_record operator_id +fl_inbound_hold_record operator_name +fl_inbound_hold_record operated_at +fl_inbound_idempotency id +fl_inbound_idempotency tenant_id +fl_inbound_idempotency operation +fl_inbound_idempotency operator_id +fl_inbound_idempotency inbound_id +fl_inbound_idempotency idempotency_key +fl_inbound_idempotency request_hash +fl_inbound_idempotency status +fl_inbound_idempotency result_json +fl_inbound_idempotency result_resource_id +fl_inbound_idempotency completed_at +fl_inbound_idempotency created_at +fl_inbound_idempotency updated_at +fl_inbound_internal_note id +fl_inbound_internal_note tenant_id +fl_inbound_internal_note inbound_id +fl_inbound_internal_note content +fl_inbound_internal_note created_by +fl_inbound_internal_note created_by_name +fl_inbound_internal_note created_at +fl_inbound_loading_pick_task id +fl_inbound_loading_pick_task tenant_id +fl_inbound_loading_pick_task inbound_id +fl_inbound_loading_pick_task status +fl_inbound_loading_pick_task version +fl_inbound_loading_pick_task expected_count +fl_inbound_loading_pick_task picked_count +fl_inbound_loading_pick_task remark +fl_inbound_loading_pick_task updated_by +fl_inbound_loading_pick_task updated_by_name +fl_inbound_loading_pick_task created_at +fl_inbound_loading_pick_task updated_at +fl_inbound_measurement id +fl_inbound_measurement tenant_id +fl_inbound_measurement inbound_id +fl_inbound_measurement split_batch_id +fl_inbound_measurement source_measurement_id +fl_inbound_measurement source_type +fl_inbound_measurement source_code +fl_inbound_measurement external_event_no +fl_inbound_measurement external_request_hash +fl_inbound_measurement device_code +fl_inbound_measurement warehouse_code +fl_inbound_measurement measured_at +fl_inbound_measurement status +fl_inbound_measurement raw_payload_json +fl_inbound_measurement original_document_no +fl_inbound_measurement original_gross_weight_kg +fl_inbound_measurement original_volume_cbm +fl_inbound_measurement actual_goods_name +fl_inbound_measurement total_package_count +fl_inbound_measurement total_volume_raw_cbm +fl_inbound_measurement total_volume_cbm +fl_inbound_measurement volume_weight_kg +fl_inbound_measurement created_by +fl_inbound_measurement created_at +fl_inbound_measurement updated_at +fl_inbound_measurement version +fl_inbound_measurement_item id +fl_inbound_measurement_item tenant_id +fl_inbound_measurement_item measurement_id +fl_inbound_measurement_item split_item_id +fl_inbound_measurement_item source_measurement_item_id +fl_inbound_measurement_item inbound_detail_id +fl_inbound_measurement_item external_detail_no +fl_inbound_measurement_item box_code +fl_inbound_measurement_item scanned_shipment_id +fl_inbound_measurement_item item_no +fl_inbound_measurement_item box_specification +fl_inbound_measurement_item package_count +fl_inbound_measurement_item length_cm +fl_inbound_measurement_item width_cm +fl_inbound_measurement_item height_cm +fl_inbound_measurement_item girth_cm +fl_inbound_measurement_item unit_weight_kg +fl_inbound_measurement_item unit_volume_cbm +fl_inbound_measurement_item volume_raw_cbm +fl_inbound_measurement_item volume_cbm +fl_inbound_measurement_item total_weight_kg +fl_inbound_measurement_item total_volume_cbm +fl_inbound_measurement_item volume_weight_kg +fl_inbound_measurement_item charge_rule_id +fl_inbound_measurement_item coefficient_mode +fl_inbound_measurement_item calculation_rule_version +fl_inbound_measurement_item source_image_file_id +fl_inbound_measurement_item machine_no +fl_inbound_measurement_item device_measured_at +fl_inbound_measurement_item over_limit_warning +fl_inbound_measurement_item outer_length_cm +fl_inbound_measurement_item outer_width_cm +fl_inbound_measurement_item outer_height_cm +fl_inbound_measurement_item manual_outer_length_cm +fl_inbound_measurement_item manual_outer_width_cm +fl_inbound_measurement_item manual_outer_height_cm +fl_inbound_measurement_item remark +fl_inbound_measurement_item created_at +fl_inbound_measurement_item updated_at +fl_inbound_order id +fl_inbound_order tenant_id +fl_inbound_order task_id +fl_inbound_order order_id +fl_inbound_order order_no +fl_inbound_order inbound_code +fl_inbound_order inbound_role +fl_inbound_order parent_inbound_id +fl_inbound_order root_inbound_id +fl_inbound_order split_sequence +fl_inbound_order split_status +fl_inbound_order process_status +fl_inbound_order order_status_snapshot +fl_inbound_order measure_review_status +fl_inbound_order fee_status +fl_inbound_order fee_review_status +fl_inbound_order notification_status +fl_inbound_order expected_arrival_at +fl_inbound_order customer_id +fl_inbound_order customer_name +fl_inbound_order company_id +fl_inbound_order company_name +fl_inbound_order warehouse_id +fl_inbound_order warehouse_name +fl_inbound_order delivery_warehouse_id +fl_inbound_order delivery_warehouse_name +fl_inbound_order business_type +fl_inbound_order fulfillment_type +fl_inbound_order lx_code +fl_inbound_order channel_code +fl_inbound_order channel_name +fl_inbound_order carrier_id +fl_inbound_order carrier_name +fl_inbound_order tax_mode +fl_inbound_order pricing_tax_mode +fl_inbound_order container_mode +fl_inbound_order customs_inspection +fl_inbound_order destination_type +fl_inbound_order destination_warehouse_id +fl_inbound_order destination_code +fl_inbound_order destination_name +fl_inbound_order hold_flag +fl_inbound_order current_hold_reason +fl_inbound_order last_overseas_hold_version +fl_inbound_order total_package_count +fl_inbound_order package_count +fl_inbound_order split_purpose +fl_inbound_order actual_gross_weight_kg +fl_inbound_order chargeable_weight_kg +fl_inbound_order actual_volume_cbm +fl_inbound_order chargeable_volume_cbm +fl_inbound_order pallet_count +fl_inbound_order volume_weight_kg +fl_inbound_order actual_net_weight_kg +fl_inbound_order measure_completed_at +fl_inbound_order inbounded_at +fl_inbound_order express_company_code +fl_inbound_order express_company_name +fl_inbound_order express_tracking_no +fl_inbound_order public_remark +fl_inbound_order created_by +fl_inbound_order created_by_name +fl_inbound_order created_at +fl_inbound_order updated_by +fl_inbound_order updated_at +fl_inbound_order deleted +fl_inbound_order version +fl_inbound_order master_order_id +fl_inbound_order active_remainder_root_id +fl_inbound_outbox id +fl_inbound_outbox tenant_id +fl_inbound_outbox aggregate_type +fl_inbound_outbox aggregate_id +fl_inbound_outbox event_type +fl_inbound_outbox event_key +fl_inbound_outbox event_version +fl_inbound_outbox aggregate_sequence +fl_inbound_outbox payload_hash +fl_inbound_outbox payload_json +fl_inbound_outbox publish_status +fl_inbound_outbox retry_count +fl_inbound_outbox next_retry_at +fl_inbound_outbox published_at +fl_inbound_outbox locked_at +fl_inbound_outbox locked_by +fl_inbound_outbox last_error +fl_inbound_outbox created_at +fl_inbound_pallet_allocation id +fl_inbound_pallet_allocation tenant_id +fl_inbound_pallet_allocation inbound_id +fl_inbound_pallet_allocation allocation_no +fl_inbound_pallet_allocation block_id +fl_inbound_pallet_allocation slot_no +fl_inbound_pallet_allocation weight_result_id +fl_inbound_pallet_allocation pallet_sequence +fl_inbound_pallet_allocation warehouse_id +fl_inbound_pallet_allocation warehouse_resource_tenant_id +fl_inbound_pallet_allocation pallet_id +fl_inbound_pallet_allocation pallet_code +fl_inbound_pallet_allocation pallet_capacity_cbm +fl_inbound_pallet_allocation allocated_volume_cbm +fl_inbound_pallet_allocation allocated_package_count +fl_inbound_pallet_allocation picked_package_count +fl_inbound_pallet_allocation location_id +fl_inbound_pallet_allocation location_code +fl_inbound_pallet_allocation shared_overflow +fl_inbound_pallet_allocation reservation_id +fl_inbound_pallet_allocation slot_status +fl_inbound_pallet_allocation reservation_no +fl_inbound_pallet_allocation allocation_status +fl_inbound_pallet_allocation created_at +fl_inbound_pallet_allocation updated_at +fl_inbound_pickup_snapshot id +fl_inbound_pickup_snapshot tenant_id +fl_inbound_pickup_snapshot inbound_id +fl_inbound_pickup_snapshot pickup_method +fl_inbound_pickup_snapshot pickup_at +fl_inbound_pickup_snapshot contact_name +fl_inbound_pickup_snapshot contact_phone +fl_inbound_pickup_snapshot contact_email +fl_inbound_pickup_snapshot country_code +fl_inbound_pickup_snapshot province +fl_inbound_pickup_snapshot city +fl_inbound_pickup_snapshot district +fl_inbound_pickup_snapshot address_line +fl_inbound_pickup_snapshot postal_code +fl_inbound_pickup_snapshot created_at +fl_inbound_split_batch id +fl_inbound_split_batch tenant_id +fl_inbound_split_batch parent_inbound_id +fl_inbound_split_batch source_inbound_id +fl_inbound_split_batch operation_id +fl_inbound_split_batch idempotency_key +fl_inbound_split_batch expected_parent_version +fl_inbound_split_batch package_count +fl_inbound_split_batch loaded_child_inbound_id +fl_inbound_split_batch remainder_child_inbound_id +fl_inbound_split_batch loaded_package_count +fl_inbound_split_batch remaining_package_count +fl_inbound_split_batch loading_plan_id +fl_inbound_split_batch container_booking_id +fl_inbound_split_batch status +fl_inbound_split_batch remark +fl_inbound_split_batch created_by +fl_inbound_split_batch created_by_name +fl_inbound_split_batch created_at +fl_inbound_split_batch applied_at +fl_inbound_split_batch version +fl_inbound_split_detail id +fl_inbound_split_detail tenant_id +fl_inbound_split_detail parent_inbound_id +fl_inbound_split_detail child_inbound_id +fl_inbound_split_detail inbound_detail_id +fl_inbound_split_detail source_package_count +fl_inbound_split_detail locked_package_count +fl_inbound_split_detail remaining_package_count +fl_inbound_split_detail status +fl_inbound_split_detail operation_id +fl_inbound_split_detail created_by +fl_inbound_split_detail created_by_name +fl_inbound_split_detail completed_by +fl_inbound_split_detail completed_by_name +fl_inbound_split_detail completed_at +fl_inbound_split_detail created_at +fl_inbound_split_detail updated_at +fl_inbound_split_detail version +fl_inbound_split_history id +fl_inbound_split_history tenant_id +fl_inbound_split_history split_batch_id +fl_inbound_split_history operation_id +fl_inbound_split_history action_type +fl_inbound_split_history before_snapshot +fl_inbound_split_history after_snapshot +fl_inbound_split_history operator_id +fl_inbound_split_history operator_name +fl_inbound_split_history operation_reason +fl_inbound_split_history created_at +fl_inbound_split_item id +fl_inbound_split_item tenant_id +fl_inbound_split_item split_batch_id +fl_inbound_split_item parent_inbound_id +fl_inbound_split_item child_inbound_id +fl_inbound_split_item line_no +fl_inbound_split_item source_inbound_detail_id +fl_inbound_split_item source_measurement_id +fl_inbound_split_item source_measurement_item_id +fl_inbound_split_item package_count +fl_inbound_split_item created_at +fl_inbound_status_history id +fl_inbound_status_history tenant_id +fl_inbound_status_history inbound_id +fl_inbound_status_history from_status +fl_inbound_status_history to_status +fl_inbound_status_history action +fl_inbound_status_history reason +fl_inbound_status_history operator_id +fl_inbound_status_history operator_name +fl_inbound_status_history occurred_at +fl_inbound_transport_snapshot id +fl_inbound_transport_snapshot tenant_id +fl_inbound_transport_snapshot inbound_id +fl_inbound_transport_snapshot loading_status +fl_inbound_transport_snapshot container_no +fl_inbound_transport_snapshot cabinet_no +fl_inbound_transport_snapshot vessel_name +fl_inbound_transport_snapshot voyage_no +fl_inbound_transport_snapshot sailing_at +fl_inbound_transport_snapshot port_arrival_at +fl_inbound_transport_snapshot source_updated_at +fl_inbound_transport_snapshot created_at +fl_inbound_transport_snapshot updated_at +fl_inbound_weight_result id +fl_inbound_weight_result tenant_id +fl_inbound_weight_result inbound_id +fl_inbound_weight_result file_id +fl_inbound_weight_result pallet_id +fl_inbound_weight_result pallet_code +fl_inbound_weight_result pallet_type +fl_inbound_weight_result pallet_capacity_cbm +fl_inbound_weight_result pallet_tare_weight_kg +fl_inbound_weight_result ocr_provider +fl_inbound_weight_result ocr_raw_text +fl_inbound_weight_result ocr_weight_value +fl_inbound_weight_result ocr_weight_unit +fl_inbound_weight_result confidence +fl_inbound_weight_result adjusted_weight_value +fl_inbound_weight_result adjusted_weight_unit +fl_inbound_weight_result gross_weight_kg +fl_inbound_weight_result net_weight_kg +fl_inbound_weight_result recognition_status +fl_inbound_weight_result adjustment_reason +fl_inbound_weight_result adjusted_by +fl_inbound_weight_result adjusted_at +fl_inbound_weight_result confirmed_by +fl_inbound_weight_result confirmed_at +fl_inbound_weight_result created_by +fl_inbound_weight_result created_at +fl_inbound_weight_result updated_by +fl_inbound_weight_result updated_at +fl_inbound_weight_result deleted +fl_inbound_weight_result version +fl_inbound_weight_revision id +fl_inbound_weight_revision tenant_id +fl_inbound_weight_revision inbound_id +fl_inbound_weight_revision weight_result_id +fl_inbound_weight_revision revision_no +fl_inbound_weight_revision action +fl_inbound_weight_revision before_weight_value +fl_inbound_weight_revision before_weight_unit +fl_inbound_weight_revision after_weight_value +fl_inbound_weight_revision after_weight_unit +fl_inbound_weight_revision gross_weight_kg +fl_inbound_weight_revision net_weight_kg +fl_inbound_weight_revision reason +fl_inbound_weight_revision operator_id +fl_inbound_weight_revision operator_name +fl_inbound_weight_revision operated_at +fl_loading_cabinet_evidence id +fl_loading_cabinet_evidence container_booking_id +fl_loading_cabinet_evidence source_task_id +fl_loading_cabinet_evidence evidence_type +fl_loading_cabinet_evidence file_id +fl_loading_cabinet_evidence file_name +fl_loading_cabinet_evidence seal_no +fl_loading_cabinet_evidence remark +fl_loading_cabinet_evidence status +fl_loading_cabinet_evidence active_flag +fl_loading_cabinet_evidence operation_key +fl_loading_cabinet_evidence request_hash +fl_loading_cabinet_evidence void_reason +fl_loading_cabinet_evidence voided_by +fl_loading_cabinet_evidence voided_by_name +fl_loading_cabinet_evidence voided_at +fl_loading_cabinet_evidence version +fl_loading_cabinet_evidence created_by +fl_loading_cabinet_evidence created_by_name +fl_loading_cabinet_evidence updated_by +fl_loading_cabinet_evidence updated_by_name +fl_loading_cabinet_evidence created_at +fl_loading_cabinet_evidence updated_at +fl_loading_completion_checkpoint command_id +fl_loading_completion_checkpoint tenant_id +fl_loading_completion_checkpoint inbound_id +fl_loading_completion_checkpoint owner_sequence +fl_loading_completion_checkpoint checkpoint_stage +fl_loading_completion_checkpoint created_at +fl_loading_completion_checkpoint updated_at +fl_loading_completion_command id +fl_loading_completion_command pick_task_id +fl_loading_completion_command operation_id +fl_loading_completion_command request_hash +fl_loading_completion_command command_status +fl_loading_completion_command expected_task_version +fl_loading_completion_command remark +fl_loading_completion_command operator_id +fl_loading_completion_command operator_name +fl_loading_completion_command attempt_count +fl_loading_completion_command next_retry_at +fl_loading_completion_command lease_owner +fl_loading_completion_command lease_until +fl_loading_completion_command failure_stage +fl_loading_completion_command failure_code +fl_loading_completion_command failure_request_id +fl_loading_completion_command failure_trace_id +fl_loading_completion_command created_at +fl_loading_completion_command updated_at +fl_loading_completion_command completed_at +fl_loading_evidence id +fl_loading_evidence tenant_id +fl_loading_evidence inbound_id +fl_loading_evidence evidence_type +fl_loading_evidence file_id +fl_loading_evidence file_name +fl_loading_evidence seal_no +fl_loading_evidence remark +fl_loading_evidence version +fl_loading_evidence created_by +fl_loading_evidence created_by_name +fl_loading_evidence updated_by +fl_loading_evidence updated_by_name +fl_loading_evidence created_at +fl_loading_evidence updated_at +fl_loading_evidence status +fl_loading_evidence void_reason +fl_loading_evidence voided_by +fl_loading_evidence voided_by_name +fl_loading_evidence voided_at +fl_loading_operation id +fl_loading_operation tenant_id +fl_loading_operation inbound_id +fl_loading_operation operator_id +fl_loading_operation operation +fl_loading_operation idempotency_key +fl_loading_operation request_hash +fl_loading_operation status +fl_loading_operation result_json +fl_loading_operation created_at +fl_loading_operation completed_at +fl_loading_pallet_label id +fl_loading_pallet_label loading_plan_id +fl_loading_pallet_label loading_plan_item_id +fl_loading_pallet_label account_id +fl_loading_pallet_label inbound_id +fl_loading_pallet_label inbound_code +fl_loading_pallet_label container_no +fl_loading_pallet_label destination_warehouse_code +fl_loading_pallet_label destination_warehouse_name +fl_loading_pallet_label pallet_index +fl_loading_pallet_label pallet_code +fl_loading_pallet_label created_at +fl_loading_pick_assignment pick_task_id +fl_loading_pick_assignment assignee_id +fl_loading_pick_assignment assignee_name +fl_loading_pick_assignment assigned_by +fl_loading_pick_assignment assigned_by_name +fl_loading_pick_assignment assignment_type +fl_loading_pick_assignment version +fl_loading_pick_assignment created_at +fl_loading_pick_assignment updated_at +fl_loading_pick_history id +fl_loading_pick_history pick_task_id +fl_loading_pick_history pick_item_id +fl_loading_pick_history operation_id +fl_loading_pick_history request_hash +fl_loading_pick_history action_type +fl_loading_pick_history picked_package_count +fl_loading_pick_history operation_reason +fl_loading_pick_history operator_id +fl_loading_pick_history operator_name +fl_loading_pick_history created_at +fl_loading_pick_item id +fl_loading_pick_item pick_task_id +fl_loading_pick_item loading_plan_item_id +fl_loading_pick_item inbound_id +fl_loading_pick_item inbound_detail_id +fl_loading_pick_item planned_package_count +fl_loading_pick_item picked_package_count +fl_loading_pick_item item_status +fl_loading_pick_item release_mode +fl_loading_pick_item release_location_ids +fl_loading_pick_item version +fl_loading_pick_item created_at +fl_loading_pick_item updated_at +fl_loading_pick_item_assignment pick_item_id +fl_loading_pick_item_assignment assignee_id +fl_loading_pick_item_assignment assignee_name +fl_loading_pick_item_assignment assigned_by +fl_loading_pick_item_assignment assigned_by_name +fl_loading_pick_item_assignment assignment_type +fl_loading_pick_item_assignment version +fl_loading_pick_item_assignment created_at +fl_loading_pick_item_assignment updated_at +fl_loading_pick_operation id +fl_loading_pick_operation pick_task_id +fl_loading_pick_operation operation_id +fl_loading_pick_operation request_hash +fl_loading_pick_operation action_type +fl_loading_pick_operation operator_id +fl_loading_pick_operation operator_name +fl_loading_pick_operation created_at +fl_loading_pick_review pick_task_id +fl_loading_pick_review review_status +fl_loading_pick_review reviewed_by +fl_loading_pick_review reviewed_by_name +fl_loading_pick_review remark +fl_loading_pick_review version +fl_loading_pick_review created_at +fl_loading_pick_review updated_at +fl_loading_pick_task id +fl_loading_pick_task loading_plan_id +fl_loading_pick_task container_booking_id +fl_loading_pick_task cabinet_no +fl_loading_pick_task container_no +fl_loading_pick_task task_status +fl_loading_pick_task started_by +fl_loading_pick_task started_by_name +fl_loading_pick_task started_at +fl_loading_pick_task completed_by +fl_loading_pick_task completed_by_name +fl_loading_pick_task completed_at +fl_loading_pick_task version +fl_loading_plan id +fl_loading_plan plan_no +fl_loading_plan container_booking_id +fl_loading_plan plan_status +fl_loading_plan push_idempotency_key +fl_loading_plan preload_pushed_by +fl_loading_plan preload_pushed_by_name +fl_loading_plan preload_pushed_at +fl_loading_plan preload_completed_by +fl_loading_plan preload_completed_by_name +fl_loading_plan preload_completed_at +fl_loading_plan confirmed_by +fl_loading_plan confirmed_by_name +fl_loading_plan confirmed_at +fl_loading_plan remark +fl_loading_plan created_by +fl_loading_plan created_by_name +fl_loading_plan created_at +fl_loading_plan updated_by +fl_loading_plan updated_by_name +fl_loading_plan updated_at +fl_loading_plan version +fl_loading_plan_history id +fl_loading_plan_history loading_plan_id +fl_loading_plan_history loading_plan_item_id +fl_loading_plan_history operation_id +fl_loading_plan_history action_type +fl_loading_plan_history from_status +fl_loading_plan_history to_status +fl_loading_plan_history before_snapshot +fl_loading_plan_history after_snapshot +fl_loading_plan_history operator_id +fl_loading_plan_history operator_name +fl_loading_plan_history operation_reason +fl_loading_plan_history created_at +fl_loading_plan_item id +fl_loading_plan_item loading_plan_id +fl_loading_plan_item account_id +fl_loading_plan_item customer_name +fl_loading_plan_item inbound_id +fl_loading_plan_item inbound_detail_id +fl_loading_plan_item order_id +fl_loading_plan_item order_no +fl_loading_plan_item inbound_code +fl_loading_plan_item destination_warehouse_id +fl_loading_plan_item destination_warehouse_code +fl_loading_plan_item destination_warehouse_name +fl_loading_plan_item sku_code +fl_loading_plan_item product_name_zh +fl_loading_plan_item product_name_en +fl_loading_plan_item product_image_file_id +fl_loading_plan_item product_image_url +fl_loading_plan_item package_count +fl_loading_plan_item product_quantity +fl_loading_plan_item units_per_carton +fl_loading_plan_item pallet_count +fl_loading_plan_item gross_weight_kg +fl_loading_plan_item net_weight_kg +fl_loading_plan_item dimensional_weight_kg +fl_loading_plan_item volume_cbm +fl_loading_plan_item fba_tracking_no +fl_loading_plan_item shipment_no +fl_loading_plan_item shipping_mark +fl_loading_plan_item load_sequence +fl_loading_plan_item position_snapshot +fl_loading_plan_item internal_remark +fl_loading_plan_item customer_remark +fl_loading_plan_item warehouse_remark +fl_loading_plan_item frozen_at +fl_loading_plan_item frozen_by +fl_loading_plan_item removed_by +fl_loading_plan_item removed_by_name +fl_loading_plan_item removed_at +fl_loading_plan_item deleted +fl_loading_plan_item active_inbound_detail_id +fl_loading_plan_item created_by +fl_loading_plan_item created_by_name +fl_loading_plan_item created_at +fl_loading_plan_item updated_by +fl_loading_plan_item updated_by_name +fl_loading_plan_item updated_at +fl_loading_plan_item version +fl_loading_plan_item unit_type +fl_loading_plan_item pallet_id +fl_loading_plan_item pallet_no +fl_loading_plan_item indivisible +fl_loading_plan_item customer_service_remark +fl_loading_plan_item active_assignment_key +fl_loading_work_pallet id +fl_loading_work_pallet pick_task_id +fl_loading_work_pallet loading_plan_id +fl_loading_work_pallet warehouse_id +fl_loading_work_pallet warehouse_pallet_id +fl_loading_work_pallet pallet_code +fl_loading_work_pallet open_operation_id +fl_loading_work_pallet seal_operation_id +fl_loading_work_pallet pallet_status +fl_loading_work_pallet created_by +fl_loading_work_pallet created_by_name +fl_loading_work_pallet sealed_by +fl_loading_work_pallet sealed_by_name +fl_loading_work_pallet sealed_at +fl_loading_work_pallet version +fl_loading_work_pallet created_at +fl_loading_work_pallet updated_at +fl_loading_work_pallet_carton id +fl_loading_work_pallet_carton pick_task_id +fl_loading_work_pallet_carton work_pallet_id +fl_loading_work_pallet_carton loading_plan_item_id +fl_loading_work_pallet_carton pick_item_id +fl_loading_work_pallet_carton tenant_id +fl_loading_work_pallet_carton inbound_id +fl_loading_work_pallet_carton inbound_detail_id +fl_loading_work_pallet_carton carton_label_id +fl_loading_work_pallet_carton box_code +fl_loading_work_pallet_carton sku_code +fl_loading_work_pallet_carton units_per_carton +fl_loading_work_pallet_carton bound_by +fl_loading_work_pallet_carton bound_by_name +fl_loading_work_pallet_carton operation_id +fl_loading_work_pallet_carton version +fl_loading_work_pallet_carton created_at +fl_loading_work_pallet_carton updated_at +fl_measure_review_record id +fl_measure_review_record tenant_id +fl_measure_review_record inbound_id +fl_measure_review_record measurement_id +fl_measure_review_record review_result +fl_measure_review_record review_reason +fl_measure_review_record exception_release +fl_measure_review_record release_reason +fl_measure_review_record allow_rejected_config +fl_measure_review_record reviewer_id +fl_measure_review_record reviewer_name +fl_measure_review_record reviewed_at +fl_mojia_measurement_receipt id +fl_mojia_measurement_receipt tenant_id +fl_mojia_measurement_receipt subject_id +fl_mojia_measurement_receipt box_code +fl_mojia_measurement_receipt inbound_code +fl_mojia_measurement_receipt measurement_kind +fl_mojia_measurement_receipt scanned_shipment_id +fl_mojia_measurement_receipt length_cm +fl_mojia_measurement_receipt width_cm +fl_mojia_measurement_receipt height_cm +fl_mojia_measurement_receipt weight_kg +fl_mojia_measurement_receipt machine_no +fl_mojia_measurement_receipt measured_at +fl_mojia_measurement_receipt image_file_id +fl_mojia_measurement_receipt status +fl_mojia_measurement_receipt sync_status +fl_mojia_measurement_receipt sync_failure_code +fl_mojia_measurement_receipt sync_failure_reason +fl_mojia_measurement_receipt lingxing_sku_id +fl_mojia_measurement_receipt revision +fl_mojia_measurement_receipt match_failure_code +fl_mojia_measurement_receipt match_failure_reason +fl_mojia_measurement_receipt request_id +fl_mojia_measurement_receipt trace_id +fl_mojia_measurement_receipt created_at +fl_mojia_measurement_receipt updated_at +fl_ocean_booking id +fl_ocean_booking booking_no +fl_ocean_booking status +fl_ocean_booking customer_id +fl_ocean_booking customer_name +fl_ocean_booking channel_code +fl_ocean_booking channel_name +fl_ocean_booking warehouse_id +fl_ocean_booking warehouse_name +fl_ocean_booking bill_of_lading_no +fl_ocean_booking shipping_company_id +fl_ocean_booking shipping_company_name +fl_ocean_booking carrier_code +fl_ocean_booking booking_agent_id +fl_ocean_booking booking_agent_name +fl_ocean_booking vessel_name +fl_ocean_booking voyage_no +fl_ocean_booking departure_port_code +fl_ocean_booking departure_port_name +fl_ocean_booking destination_port_code +fl_ocean_booking destination_port_name +fl_ocean_booking place_of_delivery +fl_ocean_booking service_term +fl_ocean_booking freight_term +fl_ocean_booking estimated_sailing_at +fl_ocean_booking estimated_arrival_at +fl_ocean_booking pending_vessel_name +fl_ocean_booking pending_voyage_no +fl_ocean_booking pending_estimated_sailing_at +fl_ocean_booking pending_estimated_arrival_at +fl_ocean_booking change_reason +fl_ocean_booking cancellation_reason +fl_ocean_booking remark +fl_ocean_booking created_by +fl_ocean_booking created_by_name +fl_ocean_booking created_at +fl_ocean_booking updated_by +fl_ocean_booking updated_by_name +fl_ocean_booking updated_at +fl_ocean_booking version +fl_ocean_booking_container_allocation id +fl_ocean_booking_container_allocation ocean_booking_id +fl_ocean_booking_container_allocation requirement_id +fl_ocean_booking_container_allocation container_booking_id +fl_ocean_booking_container_allocation allocated_by +fl_ocean_booking_container_allocation allocated_by_name +fl_ocean_booking_container_allocation allocated_at +fl_ocean_booking_container_requirement id +fl_ocean_booking_container_requirement ocean_booking_id +fl_ocean_booking_container_requirement container_type +fl_ocean_booking_container_requirement container_kind +fl_ocean_booking_container_requirement capacity_cbm +fl_ocean_booking_container_requirement max_weight_kg +fl_ocean_booking_container_requirement quantity +fl_ocean_booking_container_requirement sort_no +fl_ocean_booking_document id +fl_ocean_booking_document ocean_booking_id +fl_ocean_booking_document file_id +fl_ocean_booking_document document_type +fl_ocean_booking_document file_name +fl_ocean_booking_document file_hash +fl_ocean_booking_document size_bytes +fl_ocean_booking_document content_type +fl_ocean_booking_document valid +fl_ocean_booking_document uploaded_by +fl_ocean_booking_document uploaded_by_name +fl_ocean_booking_document uploaded_at +fl_ocean_booking_document invalidated_by +fl_ocean_booking_document invalidated_by_name +fl_ocean_booking_document invalidated_at +fl_ocean_booking_operation id +fl_ocean_booking_operation ocean_booking_id +fl_ocean_booking_operation operator_id +fl_ocean_booking_operation operation +fl_ocean_booking_operation idempotency_key +fl_ocean_booking_operation request_hash +fl_ocean_booking_operation status +fl_ocean_booking_operation result_json +fl_ocean_booking_operation created_at +fl_ocean_booking_operation completed_at +fl_ocean_booking_party id +fl_ocean_booking_party ocean_booking_id +fl_ocean_booking_party party_type +fl_ocean_booking_party party_name +fl_ocean_booking_party address +fl_ocean_booking_party contact_name +fl_ocean_booking_party contact_phone +fl_ocean_booking_status_history id +fl_ocean_booking_status_history ocean_booking_id +fl_ocean_booking_status_history from_status +fl_ocean_booking_status_history to_status +fl_ocean_booking_status_history action +fl_ocean_booking_status_history reason +fl_ocean_booking_status_history before_snapshot +fl_ocean_booking_status_history after_snapshot +fl_ocean_booking_status_history operator_id +fl_ocean_booking_status_history operator_name +fl_ocean_booking_status_history created_at +fl_order_declaration_event tenant_id +fl_order_declaration_event event_id +fl_order_declaration_event order_id +fl_order_declaration_event order_version +fl_order_declaration_event request_hash +fl_order_declaration_event consumed_at +fl_order_declaration_snapshot tenant_id +fl_order_declaration_snapshot order_id +fl_order_declaration_snapshot event_id +fl_order_declaration_snapshot order_version +fl_order_declaration_snapshot request_hash +fl_order_declaration_snapshot customer_remark +fl_order_declaration_snapshot expected_arrival_at +fl_order_declaration_snapshot channel_code +fl_order_declaration_snapshot channel_name +fl_order_declaration_snapshot cargoes_json +fl_order_declaration_snapshot changes_json +fl_order_declaration_snapshot occurred_at +fl_order_declaration_snapshot created_at +fl_order_declaration_snapshot updated_at +fl_outbound_dispatch id +fl_outbound_dispatch tenant_id +fl_outbound_dispatch order_id +fl_outbound_dispatch inbound_id +fl_outbound_dispatch container_booking_id +fl_outbound_dispatch status +fl_outbound_dispatch version +fl_outbound_dispatch confirmed_by +fl_outbound_dispatch confirmed_by_name +fl_outbound_dispatch confirmed_at +fl_outbound_dispatch reversed_by +fl_outbound_dispatch reversed_by_name +fl_outbound_dispatch reversed_at +fl_outbound_dispatch remark +fl_outbound_dispatch created_at +fl_outbound_dispatch updated_at +fl_outbound_dispatch_history id +fl_outbound_dispatch_history dispatch_id +fl_outbound_dispatch_history tenant_id +fl_outbound_dispatch_history inbound_id +fl_outbound_dispatch_history container_booking_id +fl_outbound_dispatch_history action +fl_outbound_dispatch_history from_status +fl_outbound_dispatch_history to_status +fl_outbound_dispatch_history remark +fl_outbound_dispatch_history operator_id +fl_outbound_dispatch_history operator_name +fl_outbound_dispatch_history created_at +fl_outbound_dispatch_operation id +fl_outbound_dispatch_operation dispatch_id +fl_outbound_dispatch_operation operator_id +fl_outbound_dispatch_operation operation +fl_outbound_dispatch_operation idempotency_key +fl_outbound_dispatch_operation request_hash +fl_outbound_dispatch_operation status +fl_outbound_dispatch_operation created_at +fl_outbound_dispatch_operation completed_at +fl_port_schedule id +fl_port_schedule schedule_no +fl_port_schedule customer_id +fl_port_schedule ocean_booking_id +fl_port_schedule container_booking_id +fl_port_schedule source_type +fl_port_schedule source_name +fl_port_schedule source_ref +fl_port_schedule vessel_name +fl_port_schedule voyage_no +fl_port_schedule departure_port_code +fl_port_schedule departure_port_name +fl_port_schedule destination_port_code +fl_port_schedule destination_port_name +fl_port_schedule etd_at +fl_port_schedule eta_at +fl_port_schedule booking_cutoff_at +fl_port_schedule customs_cutoff_at +fl_port_schedule port_cutoff_at +fl_port_schedule observed_at +fl_port_schedule expires_at +fl_port_schedule remark +fl_port_schedule created_by +fl_port_schedule created_by_name +fl_port_schedule created_at +fl_port_schedule updated_by +fl_port_schedule updated_by_name +fl_port_schedule updated_at +fl_port_schedule version +fl_port_schedule_history id +fl_port_schedule_history port_schedule_id +fl_port_schedule_history action +fl_port_schedule_history from_version +fl_port_schedule_history to_version +fl_port_schedule_history reason +fl_port_schedule_history before_snapshot +fl_port_schedule_history after_snapshot +fl_port_schedule_history operator_id +fl_port_schedule_history operator_name +fl_port_schedule_history created_at +fl_port_schedule_operation id +fl_port_schedule_operation port_schedule_id +fl_port_schedule_operation operator_id +fl_port_schedule_operation operation +fl_port_schedule_operation idempotency_key +fl_port_schedule_operation request_hash +fl_port_schedule_operation status +fl_port_schedule_operation result_json +fl_port_schedule_operation created_at +fl_port_schedule_operation completed_at +fl_preload_loading_plan_link id +fl_preload_loading_plan_link tenant_id +fl_preload_loading_plan_link inbound_id +fl_preload_loading_plan_link preload_plan_id +fl_preload_loading_plan_link loading_plan_id +fl_preload_loading_plan_link idempotency_key +fl_preload_loading_plan_link request_hash +fl_preload_loading_plan_link created_by +fl_preload_loading_plan_link created_by_name +fl_preload_loading_plan_link created_at +fl_preload_plan id +fl_preload_plan tenant_id +fl_preload_plan inbound_id +fl_preload_plan status +fl_preload_plan version +fl_preload_plan items_json +fl_preload_plan remark +fl_preload_plan confirmed_by +fl_preload_plan confirmed_by_name +fl_preload_plan confirmed_at +fl_preload_plan created_by +fl_preload_plan created_by_name +fl_preload_plan updated_by +fl_preload_plan updated_by_name +fl_preload_plan created_at +fl_preload_plan updated_at +fl_price_book_channel id +fl_price_book_channel price_book_version_id +fl_price_book_channel channel_code +fl_price_book_channel channel_name +fl_price_book_channel price_model +fl_price_book_channel source_sheet_name +fl_price_book_channel estimated_departure_date +fl_price_book_channel estimated_departure_text +fl_price_book_channel latest_warehouse_entry +fl_price_book_channel vessel_name +fl_price_book_channel voyage_no +fl_price_book_channel reference_transit +fl_price_book_channel surcharge_description +fl_price_book_channel remark +fl_price_book_channel created_by +fl_price_book_channel created_at +fl_price_book_channel updated_by +fl_price_book_channel updated_at +fl_price_book_channel deleted +fl_price_book_channel version +fl_price_book_version id +fl_price_book_version tenant_id +fl_price_book_version version_no +fl_price_book_version original_file_name +fl_price_book_version source_file_id +fl_price_book_version source_sha256 +fl_price_book_version status +fl_price_book_version blocking_error_count +fl_price_book_version warning_count +fl_price_book_version parse_issues_json +fl_price_book_version channel_count +fl_price_book_version rate_count +fl_price_book_version created_by +fl_price_book_version created_at +fl_price_book_version published_by +fl_price_book_version published_at +fl_price_book_version superseded_at +fl_price_book_version updated_by +fl_price_book_version updated_at +fl_price_book_version deleted +fl_price_book_version version +fl_price_book_version voided_by +fl_price_book_version voided_at +fl_price_book_version void_reason +fl_price_channel_catalog id +fl_price_channel_catalog channel_code +fl_price_channel_catalog display_name +fl_price_channel_catalog price_model +fl_price_channel_catalog source_sheet_name +fl_price_channel_catalog aliases_json +fl_price_channel_catalog inbound_code_prefix +fl_price_channel_catalog overseas_inbound_code_prefix +fl_price_channel_catalog status +fl_price_channel_catalog created_at +fl_price_channel_catalog updated_at +fl_price_origin_alias id +fl_price_origin_alias warehouse_code +fl_price_origin_alias alias_name +fl_price_origin_alias status +fl_price_origin_alias created_at +fl_price_origin_alias updated_at +fl_price_warehouse_mapping id +fl_price_warehouse_mapping source_type +fl_price_warehouse_mapping source_value +fl_price_warehouse_mapping warehouse_id +fl_price_warehouse_mapping warehouse_code +fl_price_warehouse_mapping warehouse_type +fl_price_warehouse_mapping status +fl_price_warehouse_mapping created_at +fl_price_warehouse_mapping updated_at +fl_split_operation id +fl_split_operation tenant_id +fl_split_operation inbound_id +fl_split_operation operator_id +fl_split_operation operation +fl_split_operation idempotency_key +fl_split_operation status +fl_split_operation result_json +fl_split_operation created_at +fl_terminal_drayage id +fl_terminal_drayage container_booking_id +fl_terminal_drayage fleet_supplier_id +fl_terminal_drayage fleet_supplier_name +fl_terminal_drayage pickup_appointment_at +fl_terminal_drayage actual_pickup_at +fl_terminal_drayage estimated_empty_return_at +fl_terminal_drayage actual_empty_return_at +fl_terminal_drayage version +fl_terminal_drayage created_by +fl_terminal_drayage created_by_name +fl_terminal_drayage created_at +fl_terminal_drayage updated_by +fl_terminal_drayage updated_by_name +fl_terminal_drayage updated_at +fl_terminal_drayage_history id +fl_terminal_drayage_history drayage_id +fl_terminal_drayage_history container_booking_id +fl_terminal_drayage_history action +fl_terminal_drayage_history from_status +fl_terminal_drayage_history to_status +fl_terminal_drayage_history from_version +fl_terminal_drayage_history to_version +fl_terminal_drayage_history reason +fl_terminal_drayage_history operator_id +fl_terminal_drayage_history operator_name +fl_terminal_drayage_history created_at +fl_terminal_drayage_mail id +fl_terminal_drayage_mail container_booking_id +fl_terminal_drayage_mail fleet_supplier_id +fl_terminal_drayage_mail fleet_name +fl_terminal_drayage_mail recipient +fl_terminal_drayage_mail kind +fl_terminal_drayage_mail subject +fl_terminal_drayage_mail body +fl_terminal_drayage_mail status +fl_terminal_drayage_mail attempts +fl_terminal_drayage_mail failure_reason +fl_terminal_drayage_mail created_by +fl_terminal_drayage_mail updated_by +fl_terminal_drayage_mail created_at +fl_terminal_drayage_mail updated_at +fl_terminal_drayage_mail sent_at +fl_terminal_drayage_operation id +fl_terminal_drayage_operation container_booking_id +fl_terminal_drayage_operation operation +fl_terminal_drayage_operation idempotency_key +fl_terminal_drayage_operation request_hash +fl_terminal_drayage_operation result_version +fl_terminal_drayage_operation operator_id +fl_terminal_drayage_operation created_at +fl_third_party_call_log id +fl_third_party_call_log tenant_id +fl_third_party_call_log app_key +fl_third_party_call_log signature_subject +fl_third_party_call_log request_method +fl_third_party_call_log request_path +fl_third_party_call_log request_timestamp +fl_third_party_call_log nonce +fl_third_party_call_log idempotency_key +fl_third_party_call_log idempotency_anchor +fl_third_party_call_log signature_value +fl_third_party_call_log request_hash +fl_third_party_call_log raw_payload +fl_third_party_call_log processing_status +fl_third_party_call_log result_code +fl_third_party_call_log result_message +fl_third_party_call_log result_json +fl_third_party_call_log requested_at +fl_third_party_call_log processed_at +fl_truck_appointment id +fl_truck_appointment appointment_no +fl_truck_appointment outbound_order_id +fl_truck_appointment ocean_booking_id +fl_truck_appointment container_booking_id +fl_truck_appointment loading_plan_id +fl_truck_appointment warehouse_id +fl_truck_appointment customer_id +fl_truck_appointment customer_name +fl_truck_appointment carrier_id +fl_truck_appointment carrier_name +fl_truck_appointment bill_of_lading_no +fl_truck_appointment fleet_contact +fl_truck_appointment fleet_phone +fl_truck_appointment driver_name +fl_truck_appointment driver_phone +fl_truck_appointment driver_id_card +fl_truck_appointment vehicle_no +fl_truck_appointment store_name +fl_truck_appointment store_contact +fl_truck_appointment store_phone +fl_truck_appointment store_address +fl_truck_appointment store_city +fl_truck_appointment store_zipcode +fl_truck_appointment package_count +fl_truck_appointment gross_weight_kg +fl_truck_appointment volume_cbm +fl_truck_appointment pallet_count +fl_truck_appointment po_no +fl_truck_appointment planned_loading_at +fl_truck_appointment actual_arrived_warehouse_at +fl_truck_appointment actual_loading_at +fl_truck_appointment actual_departed_at +fl_truck_appointment transit_minutes +fl_truck_appointment payable_amount +fl_truck_appointment receivable_amount +fl_truck_appointment currency +fl_truck_appointment status +fl_truck_appointment revision +fl_truck_appointment version +fl_truck_appointment remark +fl_truck_appointment created_at +fl_truck_appointment updated_at +fl_truck_appointment active_container_booking_id +fl_truck_appointment active_ocean_booking_id +fl_truck_appointment_attachment id +fl_truck_appointment_attachment appointment_id +fl_truck_appointment_attachment file_id +fl_truck_appointment_attachment attachment_type +fl_truck_appointment_attachment file_name +fl_truck_appointment_attachment file_hash +fl_truck_appointment_attachment visibility +fl_truck_appointment_attachment uploaded_by +fl_truck_appointment_attachment uploaded_at +fl_truck_appointment_history id +fl_truck_appointment_history appointment_id +fl_truck_appointment_history revision +fl_truck_appointment_history action +fl_truck_appointment_history from_status +fl_truck_appointment_history to_status +fl_truck_appointment_history reason +fl_truck_appointment_history operator_id +fl_truck_appointment_history operator_name +fl_truck_appointment_history request_id +fl_truck_appointment_history created_at +fl_truck_appointment_operation id +fl_truck_appointment_operation appointment_id +fl_truck_appointment_operation idempotency_key +fl_truck_appointment_operation request_hash +fl_truck_appointment_operation action +fl_truck_appointment_operation response_snapshot +fl_truck_appointment_operation created_at +sys_audit_outbox event_id +sys_audit_outbox event_type +sys_audit_outbox resource_type +sys_audit_outbox resource_id +sys_audit_outbox service_name +sys_audit_outbox payload_json +sys_audit_outbox status +sys_audit_outbox attempt_count +sys_audit_outbox compensation_count +sys_audit_outbox next_retry_at +sys_audit_outbox lease_owner +sys_audit_outbox lease_until +sys_audit_outbox last_error +sys_audit_outbox dead_at +sys_audit_outbox sent_at +sys_audit_outbox created_at +sys_audit_outbox updated_at \ No newline at end of file diff --git a/output/local-schema-repair/firstleg-incremental.sql b/output/local-schema-repair/firstleg-incremental.sql new file mode 100644 index 000000000..76edc2b7b --- /dev/null +++ b/output/local-schema-repair/firstleg-incremental.sql @@ -0,0 +1,357 @@ +-- 本地服务结构补齐;仅创建缺失表、添加缺失字段,不删除现有数据。 +SET NAMES utf8mb4; +CREATE TABLE fl_customs_broker_submission ( + id bigint unsigned NOT NULL COMMENT '首次发送报关行批次ID', + customs_container_id bigint unsigned NOT NULL COMMENT '所属整柜报关聚合ID', + loading_plan_id bigint unsigned NOT NULL COMMENT '装柜计划ID快照', + batch_no varchar(64) NOT NULL COMMENT '首次发送报关行批次号', + status varchar(16) NOT NULL COMMENT '发送状态:SENT已发送', + source_version int unsigned NOT NULL COMMENT '发送时整柜报关聚合版本', + source_snapshot_json json NOT NULL COMMENT '发送时冻结资料版本与覆盖范围快照', + sent_by bigint unsigned NOT NULL COMMENT '首次发送操作人ID', + sent_by_name varchar(64) DEFAULT NULL COMMENT '首次发送操作人名称快照', + sent_at datetime(3) NOT NULL COMMENT '首次发送时间', + version int unsigned NOT NULL DEFAULT '1' COMMENT '乐观锁版本号', + created_at datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '批次创建时间', + updated_at datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '批次更新时间', + PRIMARY KEY (id), + UNIQUE KEY uk_customs_broker_submission_container (customs_container_id), + UNIQUE KEY uk_customs_broker_submission_batch (batch_no), + KEY idx_customs_broker_submission_plan (loading_plan_id,sent_at), + CONSTRAINT fk_customs_broker_submission_container FOREIGN KEY (customs_container_id) REFERENCES fl_customs_container (id), + CONSTRAINT chk_customs_broker_submission_status CHECK ((status in (_utf8mb4'SENT'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='冻结退税报关资料首次发送报关行批次事实'; + +ALTER TABLE `fl_customs_completion_document` ADD COLUMN customer_confirm_status varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT '客户回执确认状态:PENDING/CONFIRMED/REJECTED'; + +ALTER TABLE `fl_customs_completion_document` ADD COLUMN customer_confirmed_by bigint unsigned DEFAULT NULL COMMENT '客户确认人ID'; + +ALTER TABLE `fl_customs_completion_document` ADD COLUMN customer_confirmed_by_name varchar(64) DEFAULT NULL COMMENT '客户确认人名称快照'; + +ALTER TABLE `fl_customs_completion_document` ADD COLUMN customer_confirmed_at datetime(3) DEFAULT NULL COMMENT '客户确认时间'; + +ALTER TABLE `fl_customs_completion_document` ADD COLUMN customer_reject_reason varchar(500) DEFAULT NULL COMMENT '客户打回原因'; + +CREATE TABLE fl_customs_completion_action_history ( + id bigint unsigned NOT NULL COMMENT '客户回执动作历史ID', + completion_document_id bigint unsigned NOT NULL COMMENT '报关行回执当前版本逻辑根ID', + receipt_version int unsigned NOT NULL COMMENT '动作对应的回执文件版本', + action varchar(16) NOT NULL COMMENT '客户动作:CONFIRM确认、REJECT打回', + reason varchar(500) DEFAULT NULL COMMENT '客户打回原因;确认动作为空', + operator_id bigint unsigned NOT NULL COMMENT '客户操作人ID', + operator_name varchar(64) DEFAULT NULL COMMENT '客户操作人名称快照', + created_at datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '客户动作时间', + PRIMARY KEY (id), + KEY idx_customs_completion_action_history (completion_document_id,receipt_version,created_at,id), + CONSTRAINT fk_customs_completion_action_history_document FOREIGN KEY (completion_document_id) REFERENCES fl_customs_completion_document (id), + CONSTRAINT chk_customs_completion_action_history_action CHECK ((action in (_utf8mb4'CONFIRM',_utf8mb4'REJECT'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户报关行回执确认与打回不可变历史'; + +CREATE TABLE fl_customs_declaration_batch ( + id BIGINT UNSIGNED NOT NULL COMMENT '正式申报批次ID', + customs_container_id BIGINT UNSIGNED NOT NULL COMMENT '所属整柜报关聚合ID', + loading_plan_id BIGINT UNSIGNED NOT NULL COMMENT '装柜计划ID快照', + batch_no VARCHAR(64) NULL COMMENT '平台正式申报批次号', + status VARCHAR(32) NOT NULL COMMENT '批次状态:READY/SUBMITTED/ACKNOWLEDGED/RESULT_PENDING/CLOSED/CANCELLED', + source_version INT UNSIGNED NOT NULL COMMENT '创建时整柜报关聚合版本', + source_snapshot_json JSON NOT NULL COMMENT '提交时资料、回执和确认版本快照', + customs_entry_no VARCHAR(64) NULL COMMENT '报关单号', + submitted_by BIGINT UNSIGNED NULL COMMENT '正式申报提交人', + submitted_by_name VARCHAR(64) NULL COMMENT '正式申报提交人名称快照', + submitted_at DATETIME(3) NULL COMMENT '正式申报提交时间', + acknowledged_by BIGINT UNSIGNED NULL COMMENT '报关行确认受理人', + acknowledged_by_name VARCHAR(64) NULL COMMENT '报关行确认受理人名称快照', + acknowledged_at DATETIME(3) NULL COMMENT '报关行确认受理时间', + remark VARCHAR(500) NULL COMMENT '批次说明', + version INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '批次创建时间', + updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '批次更新时间', + PRIMARY KEY(id), + UNIQUE KEY uk_customs_declaration_batch_container(customs_container_id, id), + KEY idx_customs_declaration_batch_plan(loading_plan_id,status,created_at), + CONSTRAINT fk_customs_declaration_batch_container FOREIGN KEY(customs_container_id) REFERENCES fl_customs_container(id), + CONSTRAINT chk_customs_declaration_batch_status CHECK(status IN ('READY','SUBMITTED','ACKNOWLEDGED','RESULT_PENDING','CLOSED','CANCELLED')) +) ENGINE=InnoDB COMMENT='整柜正式申报批次事实'; + +CREATE TABLE fl_customs_clearance_result ( + id BIGINT UNSIGNED NOT NULL COMMENT '海关结果事实ID', + declaration_batch_id BIGINT UNSIGNED NOT NULL COMMENT '所属正式申报批次ID', + customs_container_id BIGINT UNSIGNED NOT NULL COMMENT '所属整柜报关聚合ID', + result_type VARCHAR(32) NOT NULL COMMENT '结果类型:INSPECTION/SUPPLEMENT_REQUIRED/RELEASED/DETAINED/OTHER', + result_status VARCHAR(16) NOT NULL DEFAULT 'OPEN' COMMENT '结果状态:OPEN/RESOLVED/CANCELLED', + customs_entry_no VARCHAR(64) NULL COMMENT '报关单号快照', + occurred_at DATETIME(3) NOT NULL COMMENT '海关事实发生时间', + resolution VARCHAR(1000) NULL COMMENT '处理结果或异常说明', + evidence_file_id BIGINT UNSIGNED NULL COMMENT '结果凭证File文件ID', + recorded_by BIGINT UNSIGNED NOT NULL COMMENT '平台录入人', + recorded_by_name VARCHAR(64) NULL COMMENT '平台录入人名称快照', + recorded_at DATETIME(3) NOT NULL COMMENT '平台录入时间', + previous_result_id BIGINT UNSIGNED NULL COMMENT '前序结果事实ID', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '结果创建时间', + updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '结果更新时间', + PRIMARY KEY(id), + KEY idx_customs_clearance_result_batch(declaration_batch_id,occurred_at,id), + KEY idx_customs_clearance_result_container(customs_container_id, result_type, result_status), + CONSTRAINT fk_customs_clearance_result_batch FOREIGN KEY(declaration_batch_id) REFERENCES fl_customs_declaration_batch(id), + CONSTRAINT chk_customs_clearance_result_type CHECK(result_type IN ('INSPECTION','SUPPLEMENT_REQUIRED','RELEASED','DETAINED','OTHER')), + CONSTRAINT chk_customs_clearance_result_status CHECK(result_status IN ('OPEN','RESOLVED','CANCELLED')) +) ENGINE=InnoDB COMMENT='正式申报后的海关结果不可变事实'; + +ALTER TABLE `fl_fee_item` ADD COLUMN default_price decimal(12,2) DEFAULT NULL COMMENT '默认价格CNY;仅选费带入,实际费用可修改'; + +CREATE TABLE fl_chargeable_weight_confirmation ( + id BIGINT NOT NULL COMMENT '确认记录ID', + tenant_id BIGINT NOT NULL COMMENT '客户隔离ID', + inbound_id BIGINT NOT NULL COMMENT '独立来源入仓单ID', + operator_id BIGINT NOT NULL COMMENT '确认客户成员ID', + command_key VARCHAR(128) NOT NULL COMMENT '成员确认幂等键', + fingerprint CHAR(64) NOT NULL COMMENT '计费重及测量轮次摘要', + chargeable_weight_kg DECIMAL(18,4) NOT NULL COMMENT '客户确认计费重千克', + confirmed_at DATETIME(3) NOT NULL COMMENT '客户确认时间', + PRIMARY KEY(id), UNIQUE KEY uk_weight_confirmation_command(tenant_id,operator_id,command_key), + KEY idx_weight_confirmation_inbound(tenant_id,inbound_id,id) +) ENGINE=InnoDB COMMENT='客户计费重独立确认历史'; + +CREATE TABLE fl_sailing_channel ( + id BIGINT NOT NULL, + channel_code VARCHAR(64) NOT NULL, + channel_name VARCHAR(128) NOT NULL, + source_type VARCHAR(24) NOT NULL, + mapped_channel_code VARCHAR(64) NULL, + default_departure_port_code VARCHAR(32) NULL, + default_destination_port_code VARCHAR(32) NULL, + default_cutoff_days TINYINT NOT NULL DEFAULT 3, + status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE', + remark VARCHAR(1000) NULL, + created_by BIGINT NOT NULL, + created_by_name VARCHAR(128) NULL, + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + updated_by BIGINT NOT NULL, + updated_by_name VARCHAR(128) NULL, + updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + version INT NOT NULL DEFAULT 0, + PRIMARY KEY (id), + UNIQUE KEY uk_fl_sailing_channel_code (channel_code), + KEY idx_fl_sailing_channel_status (status) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE fl_sailing_template ( + id BIGINT NOT NULL, + template_no VARCHAR(64) NOT NULL, + template_name VARCHAR(128) NOT NULL, + channel_id BIGINT NOT NULL, + channel_code_snapshot VARCHAR(64) NOT NULL, + channel_name_snapshot VARCHAR(128) NOT NULL, + warehouse_id BIGINT NOT NULL, + warehouse_name_snapshot VARCHAR(128) NULL, + departure_port_code VARCHAR(32) NOT NULL, + destination_port_code VARCHAR(32) NOT NULL, + weekday TINYINT NOT NULL, + weekday_mask TINYINT NOT NULL DEFAULT 1, + etd_local_time TIME NOT NULL, + cutoff_days TINYINT NOT NULL DEFAULT 3, + cutoff_local_time TIME NOT NULL DEFAULT '18:00:00', + valid_from DATE NOT NULL, + valid_to DATE NULL, + voyage_rule VARCHAR(64) NULL, + vessel_name VARCHAR(128) NULL, + status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE', + remark VARCHAR(1000) NULL, + created_by BIGINT NOT NULL, + created_by_name VARCHAR(128) NULL, + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + updated_by BIGINT NOT NULL, + updated_by_name VARCHAR(128) NULL, + updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + version INT NOT NULL DEFAULT 0, + PRIMARY KEY (id), + UNIQUE KEY uk_fl_sailing_template_no (template_no), + KEY idx_fl_sailing_template_filter (warehouse_id,channel_id,status,weekday), + CONSTRAINT ck_fl_sailing_template_weekday CHECK (weekday BETWEEN 1 AND 7), + CONSTRAINT ck_fl_sailing_template_cutoff_days CHECK (cutoff_days BETWEEN 0 AND 30) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE fl_sailing ( + id BIGINT NOT NULL, + sailing_no VARCHAR(64) NOT NULL, + template_id BIGINT NULL, + channel_id BIGINT NOT NULL, + channel_code_snapshot VARCHAR(64) NOT NULL, + channel_name_snapshot VARCHAR(128) NOT NULL, + warehouse_id BIGINT NOT NULL, + warehouse_name_snapshot VARCHAR(128) NULL, + departure_port_code VARCHAR(32) NOT NULL, + destination_port_code VARCHAR(32) NOT NULL, + vessel_name VARCHAR(128) NULL, + voyage_no VARCHAR(64) NULL, + etd_at DATETIME(3) NOT NULL, + warehouse_cutoff_at DATETIME(3) NOT NULL, + eta_at DATETIME(3) NULL, + status VARCHAR(16) NOT NULL DEFAULT 'OPEN', + source_type VARCHAR(24) NOT NULL DEFAULT 'MANUAL', + generated_key VARCHAR(192) NULL, + planned_capacity_cbm DECIMAL(14,3) NULL, + remark VARCHAR(1000) NULL, + created_by BIGINT NOT NULL, + created_by_name VARCHAR(128) NULL, + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + updated_by BIGINT NOT NULL, + updated_by_name VARCHAR(128) NULL, + updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + version INT NOT NULL DEFAULT 0, + PRIMARY KEY (id), + UNIQUE KEY uk_fl_sailing_no (sailing_no), + UNIQUE KEY uk_fl_sailing_generated_key (generated_key), + UNIQUE KEY uk_fl_sailing_business (warehouse_id,channel_code_snapshot,departure_port_code,destination_port_code,etd_at,voyage_no), + KEY idx_fl_sailing_calendar (etd_at,warehouse_id,channel_id,status), + KEY idx_fl_sailing_route (departure_port_code,destination_port_code), + CONSTRAINT ck_fl_sailing_status CHECK (status IN ('DRAFT','OPEN','CLOSED','DEPARTED','CANCELLED','COMPLETED')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE fl_sailing_history ( + id BIGINT NOT NULL, + sailing_id BIGINT NOT NULL, + action VARCHAR(32) NOT NULL, + from_status VARCHAR(16) NULL, + to_status VARCHAR(16) NULL, + reason VARCHAR(1000) NULL, + operator_id BIGINT NULL, + operator_name VARCHAR(128) NULL, + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (id), + KEY idx_fl_sailing_history_sailing (sailing_id,created_at,id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE fl_sailing_receipt_batch_fact ( + id BIGINT UNSIGNED NOT NULL COMMENT '稳定收货批次事实ID(receiptBatchId)', + tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户隔离键,继承入库事实', + receipt_batch_key VARCHAR(64) NOT NULL COMMENT '同一物理收货批次的不可变业务键', + fact_version INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '同一批次复测/冲正版本', + inbound_id BIGINT UNSIGNED NOT NULL COMMENT '入库单ID', + measurement_id BIGINT UNSIGNED NULL COMMENT '最终审核测量批次ID', + receiving_warehouse_id BIGINT UNSIGNED NOT NULL COMMENT '实际收货仓ID', + channel_code VARCHAR(64) NULL COMMENT '收货渠道编码快照', + channel_name VARCHAR(128) NULL COMMENT '收货渠道名称快照', + departure_port_code VARCHAR(32) NULL COMMENT '起运港编码快照', + destination_port_code VARCHAR(32) NULL COMMENT '目的港编码快照', + received_at DATETIME(3) NOT NULL COMMENT '实际收货完成时间,不使用入库单inbounded_at替代', + actual_volume_cbm DECIMAL(18,4) NOT NULL COMMENT '最终审核实测体积m3', + fact_status VARCHAR(24) NOT NULL DEFAULT 'APPROVED' COMMENT '事实状态:APPROVED/REVERSED/VOIDED/SUPERSEDED', + reversal_of_fact_id BIGINT UNSIGNED NULL COMMENT '冲正所替代的事实ID', + source_type VARCHAR(32) NOT NULL DEFAULT 'FIRSTLEG_RECEIPT' COMMENT '事实来源', + created_by BIGINT UNSIGNED NULL COMMENT '写入人或系统主体', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (id), + UNIQUE KEY uk_sailing_receipt_batch_version (tenant_id, receipt_batch_key, fact_version), + KEY idx_sailing_receipt_batch_current (tenant_id, receipt_batch_key, fact_status, fact_version), + KEY idx_sailing_receipt_match (tenant_id, receiving_warehouse_id, channel_code, received_at, id), + KEY idx_sailing_receipt_inbound (tenant_id, inbound_id, received_at, id), + CONSTRAINT chk_sailing_receipt_volume CHECK (actual_volume_cbm > 0), + CONSTRAINT chk_sailing_receipt_status CHECK (fact_status IN ('APPROVED','REVERSED','VOIDED','SUPERSEDED')) +) ENGINE=InnoDB COMMENT='船期日历稳定收货批次实测事实及版本历史'; + +CREATE TABLE fl_sailing_inbound_volume_forecast ( + id BIGINT UNSIGNED NOT NULL COMMENT '货量预报事实ID(forecastId)', + tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户隔离键,继承入库事实', + forecast_key VARCHAR(64) NOT NULL COMMENT '同一未收货对象的不可变业务键', + fact_version INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '预报修订版本', + inbound_id BIGINT UNSIGNED NOT NULL COMMENT '入库单ID', + receiving_warehouse_id BIGINT UNSIGNED NOT NULL COMMENT '预计收货仓ID', + channel_code VARCHAR(64) NULL COMMENT '预计渠道编码快照', + channel_name VARCHAR(128) NULL COMMENT '预计渠道名称快照', + departure_port_code VARCHAR(32) NULL COMMENT '预计起运港编码快照', + destination_port_code VARCHAR(32) NULL COMMENT '预计目的港编码快照', + expected_arrival_at DATETIME(3) NOT NULL COMMENT '预计到仓时间', + forecast_volume_cbm DECIMAL(18,4) NOT NULL COMMENT '未收货预计体积m3,不得使用申报体积代替', + source_type VARCHAR(32) NOT NULL COMMENT '预报来源,例如OPERATIONS/UPSTREAM_MEASUREMENT;不得使用客户申报体积冒充预报', + fact_status VARCHAR(24) NOT NULL DEFAULT 'VALID' COMMENT '事实状态:VALID/SUPERSEDED/VOIDED/CONSUMED', + effective_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '本版本生效时间', + created_by BIGINT UNSIGNED NULL COMMENT '写入人或系统主体', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (id), + UNIQUE KEY uk_sailing_forecast_version (tenant_id, forecast_key, fact_version), + KEY idx_sailing_forecast_current (tenant_id, forecast_key, fact_status, fact_version), + KEY idx_sailing_forecast_match (tenant_id, receiving_warehouse_id, channel_code, expected_arrival_at, id), + KEY idx_sailing_forecast_inbound (tenant_id, inbound_id, expected_arrival_at, id), + CONSTRAINT chk_sailing_forecast_volume CHECK (forecast_volume_cbm > 0), + CONSTRAINT chk_sailing_forecast_status CHECK (fact_status IN ('VALID','SUPERSEDED','VOIDED','CONSUMED')) +) ENGINE=InnoDB COMMENT='船期日历未收货量预报事实及版本历史'; + +CREATE TABLE fl_sailing_assignment ( + id BIGINT UNSIGNED NOT NULL COMMENT '归班事实ID', + tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户隔离键', + sailing_id BIGINT UNSIGNED NULL COMMENT '船期实例ID,UNMATCHED为空', + origin_sailing_id BIGINT UNSIGNED NULL COMMENT '异常重排/取消前的原船期实例ID', + inbound_id BIGINT UNSIGNED NULL COMMENT '归班对象入库单ID', + inbound_code VARCHAR(64) NULL COMMENT '入仓码快照,仅用于展示', + receipt_batch_id BIGINT UNSIGNED NULL COMMENT '收货批次事实ID', + forecast_id BIGINT UNSIGNED NULL COMMENT '货量预报事实ID', + assignment_source VARCHAR(24) NOT NULL DEFAULT 'AUTO' COMMENT '归班来源:AUTO/MANUAL/ROLLOVER', + assignment_version INT UNSIGNED NOT NULL COMMENT '同一对象的归班版本', + match_status VARCHAR(24) NOT NULL COMMENT 'FORECAST_MATCHED/RECEIVED/LATE/UNMATCHED/SUPERSEDED', + volume_cbm DECIMAL(18,4) NULL COMMENT '已收实测体积', + forecast_volume_cbm DECIMAL(18,4) NULL COMMENT '未收有效预计体积', + route_source VARCHAR(32) NULL COMMENT '航线来源:INBOUND_FACT/FORECAST_FACT/CHANNEL_DEFAULT', + volume_source VARCHAR(32) NULL COMMENT 'MEASURED_ACTUAL或预报来源', + rule_version VARCHAR(64) NOT NULL COMMENT '自动归班规则版本', + matched_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + superseded_at DATETIME(3) NULL, + locked_at DATETIME(3) NULL COMMENT '截止/订舱/关闭后冻结时间', + lock_reason VARCHAR(32) NULL COMMENT 'CUTOFF/BOOKING_CONFIRMED/CLOSED', + operator_id BIGINT UNSIGNED NULL, + reason VARCHAR(500) NULL, + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (id), + KEY idx_sailing_assignment_current (tenant_id, sailing_id, match_status, matched_at, id), + KEY idx_sailing_assignment_origin (tenant_id, origin_sailing_id, match_status, id), + KEY idx_sailing_assignment_receipt (tenant_id, receipt_batch_id, assignment_version, id), + KEY idx_sailing_assignment_forecast (tenant_id, forecast_id, assignment_version, id), + KEY idx_sailing_assignment_inbound (tenant_id, inbound_id, match_status, id), + CONSTRAINT chk_sailing_assignment_status CHECK (match_status IN ('FORECAST_MATCHED','RECEIVED','LATE','UNMATCHED','SUPERSEDED')), + CONSTRAINT chk_sailing_assignment_source CHECK (assignment_source IN ('AUTO','MANUAL','ROLLOVER')) +) ENGINE=InnoDB COMMENT='船期日历自动归班事实及不可变版本历史'; + +CREATE TABLE fl_sailing_booking_link ( + id BIGINT UNSIGNED NOT NULL COMMENT '船期-订舱关联ID', + tenant_id BIGINT UNSIGNED NOT NULL COMMENT '平台关联隔离键', + sailing_id BIGINT UNSIGNED NOT NULL COMMENT '计划船期实例ID', + ocean_booking_id BIGINT UNSIGNED NOT NULL COMMENT '海运订舱ID', + link_status VARCHAR(24) NOT NULL DEFAULT 'ACTIVE' COMMENT '关联状态:ACTIVE/REVOKED', + active_booking_guard TINYINT NULL COMMENT 'ACTIVE为1,REVOKED为空,用于唯一约束', + booking_status_snapshot VARCHAR(24) NOT NULL COMMENT '关联时订舱状态快照;只有RELEASED可建立', + warehouse_id BIGINT UNSIGNED NULL COMMENT '关联仓库快照', + channel_code VARCHAR(64) NULL COMMENT '关联渠道快照', + departure_port_code VARCHAR(32) NULL COMMENT '关联起运港快照', + destination_port_code VARCHAR(32) NULL COMMENT '关联目的港快照', + linked_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + revoked_at DATETIME(3) NULL, + operator_id BIGINT UNSIGNED NULL, + operator_name VARCHAR(64) NULL, + reason VARCHAR(500) NULL, + PRIMARY KEY (id), + UNIQUE KEY uk_sailing_booking_active (ocean_booking_id, active_booking_guard), + KEY idx_sailing_booking_link (sailing_id, link_status, ocean_booking_id), + KEY idx_sailing_booking_booking (ocean_booking_id, link_status, id), + CONSTRAINT chk_sailing_booking_link_status CHECK (link_status IN ('ACTIVE','REVOKED')), + CONSTRAINT chk_sailing_booking_link_guard CHECK ((link_status='ACTIVE' AND active_booking_guard=1) OR (link_status='REVOKED' AND active_booking_guard IS NULL)), + CONSTRAINT chk_sailing_booking_released CHECK (booking_status_snapshot='RELEASED') +) ENGINE=InnoDB COMMENT='船期计划与已放舱订舱的最小关联及历史'; + +CREATE TABLE event_delivery_retry_audit ( + request_id VARCHAR(36) NOT NULL COMMENT '人工重试请求UUID和幂等键', + producer_table VARCHAR(64) NOT NULL COMMENT '本服务发件箱表名', + entry_id VARCHAR(64) NOT NULL COMMENT '发件箱记录主键', + event_id VARCHAR(128) NOT NULL COMMENT '原事件全局标识', + event_type VARCHAR(64) NOT NULL COMMENT '原事件类型', + payload_hash VARCHAR(71) NOT NULL COMMENT '原事件不可变负载摘要', + operator_name VARCHAR(128) NOT NULL COMMENT '持有运维凭据的操作人标识', + reason VARCHAR(500) NOT NULL COMMENT '人工重试原因', + previous_failures INT NOT NULL COMMENT '重试前累计失败次数', + previous_error VARCHAR(1000) NULL COMMENT '重试前最后一次脱敏错误', + requested_at DATETIME(3) NOT NULL COMMENT '重试申请提交时间', + PRIMARY KEY (request_id), + KEY idx_event_retry_entry (producer_table,entry_id,requested_at), + KEY idx_event_retry_event (event_id,requested_at) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='业务事件人工重试审计,与恢复待发送状态同事务提交'; diff --git a/output/local-schema-repair/firstleg-plan.json b/output/local-schema-repair/firstleg-plan.json new file mode 100644 index 000000000..9279543a4 --- /dev/null +++ b/output/local-schema-repair/firstleg-plan.json @@ -0,0 +1,29 @@ +{ + "baselineTables": 131, + "actualTables": 128, + "addedTables": [ + "fl_customs_broker_submission", + "fl_customs_completion_action_history", + "fl_customs_declaration_batch", + "fl_customs_clearance_result", + "fl_chargeable_weight_confirmation", + "fl_sailing_channel", + "fl_sailing_template", + "fl_sailing", + "fl_sailing_history", + "fl_sailing_receipt_batch_fact", + "fl_sailing_inbound_volume_forecast", + "fl_sailing_assignment", + "fl_sailing_booking_link", + "event_delivery_retry_audit" + ], + "addedColumns": [ + "fl_customs_completion_document.customer_confirm_status", + "fl_customs_completion_document.customer_confirmed_by", + "fl_customs_completion_document.customer_confirmed_by_name", + "fl_customs_completion_document.customer_confirmed_at", + "fl_customs_completion_document.customer_reject_reason", + "fl_fee_item.default_price" + ], + "unsafe": [] +} \ No newline at end of file diff --git a/output/local-schema-repair/http-smoke.json b/output/local-schema-repair/http-smoke.json new file mode 100644 index 000000000..bd59ef203 --- /dev/null +++ b/output/local-schema-repair/http-smoke.json @@ -0,0 +1,84 @@ +[ + { + "path": "/api/auth/login", + "http": 200, + "code": "200", + "requestId": "83e3631c-8cda-4729-80c4-106a1a6275d6, b8d91668-aad6-4513-bc55-9e1e8e2312c1", + "passed": true + }, + { + "path": "/api/platform/v1/last-leg/orders?page=1&size=5", + "http": 200, + "code": "200", + "requestId": "3ececcb5-f6d3-452d-b675-83a1422132ab, 3494117d-b608-442c-86d3-930723d31c72", + "passed": true + }, + { + "path": "/api/platform/v1/last-leg/dispatches?page=1&size=5", + "http": 200, + "code": "200", + "requestId": "9f1a9717-a0b7-4400-ae51-5e95695bdbb3, 2867b52e-a75c-4375-97fc-3b785414944e", + "passed": true + }, + { + "path": "/api/platform/v1/last-leg/dispatches/drafts?page=1&size=5", + "http": 200, + "code": "200", + "requestId": "b7e68664-fa9f-4e57-93f5-560ca5c7afe7, 81e0d34d-c37e-4160-84d6-1d77d25b7549", + "passed": true + }, + { + "path": "/api/platform/v1/last-leg/appointment-work/summary", + "http": 200, + "code": "A0403", + "message": "Access denied", + "requestId": "43f418ef-f7d3-4fad-a506-1ff1e909404d, e45bdbc3-25a0-42c3-8ba0-67d3dda55408", + "passed": false + }, + { + "path": "/api/platform/inbounds?page=1&size=5", + "http": 200, + "code": "200", + "requestId": "c2db90b4-0132-4ebb-bf01-65bbdd4e8f72, af8884fb-8002-4d59-a3c0-89310f36e614", + "passed": true + }, + { + "path": "/api/platform/v1/first-leg/tasks?tenantId=10001&page=1&size=5", + "http": 200, + "code": "200", + "requestId": "b9ce00ca-d62c-41dc-a752-7f83d8f72786, 264cbdd1-f6a5-4317-95b2-280f09772e41", + "passed": true + }, + { + "path": "/api/platform/v1/sailing-channels", + "http": 200, + "code": "A0403", + "message": "Access denied", + "requestId": "b9d52e7d-b9e4-434b-9daf-74a492cb4176, bb9b768f-c314-4d6e-a45d-6b99c697fe07", + "passed": false + }, + { + "path": "/api/platform/v1/sailing-templates?page=1&size=5", + "http": 200, + "code": "A0403", + "message": "Access denied", + "requestId": "d88b13dc-af9d-43b7-ad44-cd7ec30e4fb0, 4fdc6213-1b44-48ae-bfcf-22ee6917a8d3", + "passed": false + }, + { + "path": "9202/actuator/health", + "http": 200, + "body": { + "status": "UP" + }, + "passed": true + }, + { + "path": "9303/actuator/health", + "http": 200, + "body": { + "status": "UP" + }, + "passed": true + } +] \ No newline at end of file diff --git a/output/local-schema-repair/http-smoke.mjs b/output/local-schema-repair/http-smoke.mjs new file mode 100644 index 000000000..968537c84 --- /dev/null +++ b/output/local-schema-repair/http-smoke.mjs @@ -0,0 +1,25 @@ +import fs from 'node:fs'; +const base=process.env.ADMIN_TEST_GATEWAY; +if(!base||!['127.0.0.1','localhost'].includes(new URL(base).hostname))throw new Error('仅允许本机'); +let token='';const checks=[]; +async function call(path,body) { + const r=await fetch(base+path,{method:body?'POST':'GET',headers:{...(token?{Authorization:'Bearer '+token}:{}),...(body?{'Content-Type':'application/json'}:{})},body:body?JSON.stringify(body):undefined,signal:AbortSignal.timeout(45000)}); + const value=await r.json().catch(()=>null); + checks.push({path,http:r.status,code:value?.code,message:String(value?.code)==='200'?undefined:value?.message,requestId:r.headers.get('x-request-id'),passed:r.status===200&&String(value?.code)==='200'}); + fs.writeFileSync(new URL('http-smoke.json',import.meta.url),JSON.stringify(checks,null,2)); + return value; +} +const login=await call('/api/auth/login',{loginId:process.env.ADMIN_TEST_USERNAME,password:process.env.ADMIN_TEST_PASSWORD}); +if(!login?.data?.accessToken)throw new Error('本地登录失败');token=login.data.accessToken; +for(const path of [ + '/api/platform/v1/last-leg/orders?page=1&size=5', + '/api/platform/v1/last-leg/dispatches?page=1&size=5', + '/api/platform/v1/last-leg/dispatches/drafts?page=1&size=5', + '/api/platform/v1/last-leg/appointment-work/summary', + '/api/platform/inbounds?page=1&size=5', + '/api/platform/v1/first-leg/tasks?tenantId=10001&page=1&size=5', + '/api/platform/v1/sailing-channels', + '/api/platform/v1/sailing-templates?page=1&size=5' +])await call(path); +for(const port of [9202,9303]){const r=await fetch(`http://127.0.0.1:${port}/actuator/health`);checks.push({path:`${port}/actuator/health`,http:r.status,body:await r.json(),passed:r.ok});} +fs.writeFileSync(new URL('http-smoke.json',import.meta.url),JSON.stringify(checks,null,2));console.log(JSON.stringify(checks,null,2)); diff --git a/output/local-schema-repair/incremental.sql b/output/local-schema-repair/incremental.sql new file mode 100644 index 000000000..254ad5205 --- /dev/null +++ b/output/local-schema-repair/incremental.sql @@ -0,0 +1,895 @@ +-- 本地服务结构补齐;仅创建缺失表、添加缺失字段,不删除现有数据。 +SET NAMES utf8mb4; +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN product_name VARCHAR(255) NULL COMMENT '商品名称'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN estimated_pallet_count INT NULL COMMENT '客户申报预计托数,不代表实际收货'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN origin_contact_name VARCHAR(128) NULL COMMENT '起运地联系人'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN origin_contact_phone VARCHAR(128) NULL COMMENT '起运地联系电话'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN destination_contact_name VARCHAR(128) NULL COMMENT '目的地联系人'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN destination_contact_phone VARCHAR(128) NULL COMMENT '目的地联系电话'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN pickup_at DATETIME(3) NULL COMMENT '取货时间(当地时间,不转换时区)'; + +ALTER TABLE `ll_local_looseboard_order` ADD COLUMN delivery_at DATETIME(3) NULL COMMENT '送货时间(当地时间,不转换时区)'; + +CREATE TABLE ll_appointment_followup ( + id BIGINT NOT NULL COMMENT '预约筹划跟进记录ID', + source_key VARCHAR(160) NOT NULL COMMENT '稳定ORDER、BOOKING或CONTAINER及接仓点来源键', + customer_id VARCHAR(128) NOT NULL COMMENT '货源客户;整柜共享记录由服务端固定为平台作用域0', + source_order_id BIGINT NULL COMMENT '已形成的真实尾程货源ID,尚未生成时为空', + stage VARCHAR(32) NOT NULL COMMENT '跟进对象:DRAYAGE_CONTACT/TERMINAL_APPOINTMENT/WAREHOUSE_RECEIVING/FBA_RECEIVING', + version INT NOT NULL COMMENT '同一货源及跟进对象的记录版本', + contacted_party VARCHAR(200) NULL COMMENT '本次联系对象,不替代承运主档', + result VARCHAR(1000) NOT NULL COMMENT '本次反馈事实,不自动确认预约或推进实物作业', + next_action VARCHAR(500) NULL COMMENT '下一步安排', + followup_date DATE NULL COMMENT '按业务地点当地日期记录的下次跟进日', + operator_id VARCHAR(128) NOT NULL COMMENT '登录平台操作者ID', + operator_name VARCHAR(200) NULL COMMENT '操作人姓名快照', + command_key VARCHAR(64) NOT NULL COMMENT '持久幂等键', + request_hash CHAR(64) NOT NULL COMMENT '含操作者身份的请求SHA256摘要', + created_at DATETIME(3) NOT NULL COMMENT 'UTC记录时间', + PRIMARY KEY (id), + UNIQUE KEY uk_appointment_followup_version (source_key,stage,version), + UNIQUE KEY uk_appointment_followup_command (source_key,stage,command_key), + KEY idx_appointment_followup_date (followup_date,source_order_id), + CONSTRAINT fk_appointment_followup_order FOREIGN KEY (source_order_id) REFERENCES ll_order(id), + CONSTRAINT chk_appointment_followup_stage CHECK (stage IN ('DRAYAGE_CONTACT','TERMINAL_APPOINTMENT','WAREHOUSE_RECEIVING','FBA_RECEIVING')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='真实在途货源的预约筹划联系记录,追加留痕'; + +CREATE TABLE ll_dispatch_command ( + id BIGINT NOT NULL COMMENT '持久命令内部主键', + dispatch_id BIGINT NOT NULL COMMENT '命令所属整车排车主单ID', + dispatch_no VARCHAR(64) NOT NULL COMMENT '命令所属真实排车业务号', + action VARCHAR(40) NOT NULL COMMENT '本次整车作业动作', + operator_id VARCHAR(128) NOT NULL COMMENT '原始可信操作主体ID', + idempotency_key VARCHAR(255) NOT NULL COMMENT '跨操作主体全局唯一的原始请求键', + record_version BIGINT NOT NULL COMMENT '原请求明确提交的排车版本,零为合法首版', + command_hash CHAR(64) NOT NULL COMMENT '绑定原主体动作业务号版本和完整载荷的严格摘要', + result_json LONGTEXT NOT NULL COMMENT '按动作类型恢复的不可变成功结果JSON', + created_at DATETIME(3) NOT NULL COMMENT '成功命令记录时间,使用UTC', + PRIMARY KEY (id), + UNIQUE KEY uk_dispatch_command_key (idempotency_key), + KEY idx_dispatch_command_history (dispatch_id,created_at,id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车公共持久命令账本'; + +CREATE TABLE ll_dispatch_delivery_arrangement ( + id BIGINT NOT NULL COMMENT '安排事实内部主键', + dispatch_order_id BIGINT NOT NULL COMMENT '唯一整车排车主单ID', + dispatch_no VARCHAR(128) NOT NULL COMMENT '真实排车业务号', + arrangement_key VARCHAR(128) NOT NULL COMMENT '本次唯一安排业务事实标识', + business_hash CHAR(64) NOT NULL COMMENT '排除操作者及纯并发版本的安排业务摘要', + cargo_hash CHAR(64) NOT NULL COMMENT '本车实际拣货来源摘要', + loading_completion_hash CHAR(64) NOT NULL COMMENT '装车完成事实摘要', + original_command_key VARCHAR(255) NOT NULL COMMENT '首次安排的全局请求键', + original_operator_id VARCHAR(128) NOT NULL COMMENT '首次安排操作主体', + result_json JSON NOT NULL COMMENT '全部客户出库及客户目的地派送不可变结果', + cargo_json JSON NOT NULL COMMENT '逐客户逐拣货归属的不可变真实来源', + created_at DATETIME(3) NOT NULL COMMENT '本次安排实际创建时间', + PRIMARY KEY (id), + UNIQUE KEY uk_dispatch_arrangement_dispatch (dispatch_order_id), + UNIQUE KEY uk_dispatch_arrangement_key (arrangement_key), + UNIQUE KEY uk_dispatch_arrangement_command (original_command_key) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车唯一派送安排事实'; + +CREATE TABLE ll_delivery_facts_changed ( + id BIGINT NOT NULL COMMENT '持久信号内部主键', + customer_id VARCHAR(128) NOT NULL COMMENT '真实签收货物客户ID', + dispatch_id BIGINT NOT NULL COMMENT '整车排车主单ID', + dispatch_no VARCHAR(128) NOT NULL COMMENT '真实排车业务号', + delivery_id BIGINT NOT NULL COMMENT '本客户派送单ID', + delivery_no VARCHAR(128) NOT NULL COMMENT '真实派送业务号', + delivery_version BIGINT NOT NULL COMMENT '触发信号的真实派送版本', + facts_hash CHAR(64) NOT NULL COMMENT '该版本真实签收事实摘要', + occurred_at DATETIME(3) NOT NULL COMMENT '签收事实实际发生时间', + state VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '待核对PENDING或已核对PROCESSED', + attempt_count INT NOT NULL DEFAULT 0 COMMENT '已记录的汇总失败次数', + next_attempt_at DATETIME(3) NOT NULL COMMENT '下次可重试时间', + last_error_code VARCHAR(64) NULL COMMENT '最近失败诊断码不保存敏感异常正文', + processed_at DATETIME(3) NULL COMMENT '与主阶段汇总同事务确认时间', + PRIMARY KEY (id), + UNIQUE KEY uk_delivery_fact_version (customer_id,delivery_id,delivery_version), + KEY idx_delivery_fact_due (state,next_attempt_at,id), + KEY idx_delivery_fact_dispatch (dispatch_id,state,id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='正常签收事实变化的本地持久待汇总信号'; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN dispatch_item_id BIGINT NULL COMMENT '本次整车排车作业明细ID'; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN source_attribution_id BIGINT NULL COMMENT '不可变PDA真实拣货归属ID'; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN source_order_id BIGINT NULL COMMENT '本行真实来源尾程订单ID'; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN source_inventory_position_id BIGINT NULL COMMENT '本行实际拣货库存仓位ID'; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN source_return_receipt_id BIGINT NULL COMMENT '本行实际退回再派实收记录ID'; + +ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN source_return_carton_id BIGINT NULL COMMENT '本行实际退货换标来源箱ID'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN purpose VARCHAR(32) NULL COMMENT '费用业务用途;由履约节点确定'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN confirmation_origin VARCHAR(16) NOT NULL DEFAULT 'BUSINESS' COMMENT '核定入口:BUSINESS业务节点、FINANCIAL财务操作'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN fee_version INT NULL COMMENT '同用途费用确认版本'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN active TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否当前有效版本'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN determination VARCHAR(24) NULL COMMENT 'POSITIVE正额、ZERO零元、NOT_APPLICABLE不适用'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN original_currency CHAR(3) NULL COMMENT '核定原币CNY或USD'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN original_amount DECIMAL(20,2) NULL COMMENT '核定原币金额'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN exchange_rate DECIMAL(20,6) NULL COMMENT '已确认汇率快照'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN exchange_rate_month CHAR(7) NULL COMMENT '已确认汇率所属月份'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN business_date DATE NULL COMMENT '实际费用业务日期'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN wallet_business_id BIGINT NULL COMMENT '资金冻结对应采购费用记录'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN wallet_business_no VARCHAR(128) NULL COMMENT '资金冻结业务号;实际国际运费引用原预估'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN wallet_hold_id VARCHAR(64) NULL COMMENT 'Finance冻结引用'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN wallet_ledger_id VARCHAR(64) NULL COMMENT 'Finance实际处理流水引用'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN settled_command_event_id VARCHAR(64) NULL COMMENT '成功实扣或退款的资金命令事件'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN source_fee_id BIGINT NULL COMMENT '已实扣费用来源ID'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN parent_fee_id BIGINT NULL COMMENT '原费用或预估引用'; + +ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN request_hash CHAR(64) NULL COMMENT '确认请求摘要'; + +ALTER TABLE `ll_overseas_procurement_status_history` ADD COLUMN operation_type varchar(32) COLLATE utf8mb4_unicode_ci NULL COMMENT '操作类型:CREATE、REVIEW或UPDATE'; + +ALTER TABLE `ll_overseas_procurement_status_history` ADD COLUMN change_detail json DEFAULT NULL COMMENT '字段变更前后值JSON'; + +ALTER TABLE `ll_receiving_container_session` ADD COLUMN source_container_booking_id varchar(128) COLLATE utf8mb4_unicode_ci NULL COMMENT '稳定来源柜预订ID'; + +ALTER TABLE `ll_receiving_container_session` ADD COLUMN container_fact_hash varchar(64) COLLATE utf8mb4_unicode_ci NULL COMMENT '领取时整柜订单与计划事实摘要'; + +ALTER TABLE `ll_receiving_container_session` ADD COLUMN overseas_warehouse_code varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外接柜仓业务编码快照'; + +ALTER TABLE `ll_return_inventory_outbound_movement` ADD COLUMN return_sku_quantity BIGINT NULL COMMENT '退货单SKU本来源计划出库件数快照,NULL为历史整箱出库'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN vehicle_type VARCHAR(32) NULL COMMENT '车辆类型:PALLET_15为15拖,PALLET_30为30拖;拼车未提供时为空'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN origin_contact_name VARCHAR(128) NULL COMMENT '起运地联系人'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN origin_contact_phone VARCHAR(128) NULL COMMENT '起运地联系电话'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN destination_contact_name VARCHAR(128) NULL COMMENT '目的地联系人'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN destination_contact_phone VARCHAR(128) NULL COMMENT '目的地联系电话'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN pickup_at DATETIME NULL COMMENT '取货时间,按填写的日期时分保存,不转换时区'; + +ALTER TABLE `ll_us_truck_order` ADD COLUMN delivery_at DATETIME NULL COMMENT '送货时间,按填写的日期时分保存;拼车来源未提供时为空'; + +CREATE TABLE event_delivery_retry_audit ( + request_id VARCHAR(36) NOT NULL COMMENT '人工重试请求UUID和幂等键', + producer_table VARCHAR(64) NOT NULL COMMENT '本服务发件箱表名', + entry_id VARCHAR(64) NOT NULL COMMENT '发件箱记录主键', + event_id VARCHAR(128) NOT NULL COMMENT '原事件全局标识', + event_type VARCHAR(64) NOT NULL COMMENT '原事件类型', + payload_hash VARCHAR(71) NOT NULL COMMENT '原事件不可变负载摘要', + operator_name VARCHAR(128) NOT NULL COMMENT '持有运维凭据的操作人标识', + reason VARCHAR(500) NOT NULL COMMENT '人工重试原因', + previous_failures INT NOT NULL COMMENT '重试前累计失败次数', + previous_error VARCHAR(1000) NULL COMMENT '重试前最后一次脱敏错误', + requested_at DATETIME(3) NOT NULL COMMENT '重试申请提交时间', + PRIMARY KEY (request_id), + KEY idx_event_retry_entry (producer_table,entry_id,requested_at), + KEY idx_event_retry_event (event_id,requested_at) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='业务事件人工重试审计,与恢复待发送状态同事务提交'; + +CREATE TABLE ll_procurement_wallet_attempt ( + id BIGINT NOT NULL COMMENT '请求尝试ID', + order_id BIGINT NOT NULL COMMENT '采购订单ID', + customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', + fee_id BIGINT NOT NULL COMMENT '不可变费用版本ID', + attempt_no BIGINT NOT NULL COMMENT '费用版本内请求序号', + operation VARCHAR(32) NOT NULL COMMENT '资金操作:FREEZE冻结、SETTLE结算、SETTLE_ACTUAL实际结算、RELEASE释放、REFUND退款', + business_no VARCHAR(128) NOT NULL COMMENT 'Finance资金业务号', + amount DECIMAL(20,2) NULL COMMENT '请求金额;全额结算或释放可空', + command_event_id VARCHAR(64) NOT NULL COMMENT '资金指令事件唯一引用', + status VARCHAR(16) NOT NULL COMMENT '资金请求结果:PENDING未决、SUCCEEDED成功、FAILED明确失败', + result_hash CHAR(64) NULL COMMENT '原业务回执摘要', + wallet_hold_id VARCHAR(64) NULL COMMENT 'Finance冻结引用', + wallet_ledger_id VARCHAR(64) NULL COMMENT 'Finance处理流水引用', + error_code VARCHAR(64) NULL COMMENT '业务失败码', + error_message VARCHAR(500) NULL COMMENT '内部失败诊断,不直接对客展示', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '请求时间', + completed_at DATETIME(3) NULL COMMENT '最终结果时间', + PRIMARY KEY(id), UNIQUE KEY uk_procurement_attempt_event(command_event_id), + UNIQUE KEY uk_procurement_attempt_number(fee_id,attempt_no), + KEY idx_procurement_attempt_order(customer_id,order_id,status), + CONSTRAINT chk_procurement_attempt_status CHECK(status IN('PENDING','SUCCEEDED','FAILED')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用资金命令尝试与不可变结果'; + +CREATE TABLE ll_procurement_flow ( + order_id BIGINT NOT NULL COMMENT '采购订单ID,一单一个履约批次', + customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', + purchased_at DATETIME(3) NULL COMMENT '真实购买时间', + purchased_product_name VARCHAR(255) NULL COMMENT '实际购买商品', + purchased_specification VARCHAR(500) NULL COMMENT '实际购买规格', + purchased_quantity BIGINT NULL COMMENT '实际购买件数', + purchase_amount DECIMAL(20,2) NULL COMMENT '供应商实付原币金额', + purchase_currency CHAR(3) NULL COMMENT '供应商实付原币CNY或USD', + purchase_voucher_id BIGINT NULL COMMENT '购买凭证引用', + purchase_issue VARCHAR(500) NULL COMMENT '购买未核定或异常说明', + purchase_confirmed_at DATETIME(3) NULL COMMENT '货款核定时间,不代表扣费成功', + actual_warehouse_id BIGINT NULL COMMENT '首次实际收货冻结的仓库ID', + actual_warehouse_code VARCHAR(128) NULL COMMENT '实际收货仓编码快照', + actual_warehouse_name VARCHAR(255) NULL COMMENT '实际收货仓名称快照', + overseas_received_at DATETIME(3) NULL COMMENT '海外整批收货完成时间', + packing_version INT NULL COMMENT '当前确认装箱清单版本', + overseas_shipped_at DATETIME(3) NULL COMMENT '国际段整批实际交寄时间', + domestic_received_at DATETIME(3) NULL COMMENT '国内整批收货完成时间', + charges_confirmed_at DATETIME(3) NULL COMMENT '国内整单费用核定时间', + customer_shipped_at DATETIME(3) NULL COMMENT '国内寄客户实际交寄时间', + domestic_receiver_name VARCHAR(128) NULL COMMENT '国际段国内收件人', + domestic_receiver_phone VARCHAR(64) NULL COMMENT '国际段国内收件电话', + domestic_receiver_address VARCHAR(1000) NULL COMMENT '国际段国内接收地址', + cancelled_at DATETIME(3) NULL COMMENT '购买前取消时间', + closed_at DATETIME(3) NULL COMMENT '异常关闭时间', + control_reason VARCHAR(1000) NULL COMMENT '取消或关闭原因', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY(order_id), KEY idx_procurement_flow_customer(customer_id,order_id), + CONSTRAINT chk_procurement_purchase_quantity CHECK(purchased_quantity IS NULL OR purchased_quantity>0), + CONSTRAINT chk_procurement_purchase_amount CHECK(purchase_amount IS NULL OR purchase_amount>=0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购单一批次履约事实'; + +CREATE TABLE ll_procurement_command ( + id BIGINT NOT NULL COMMENT '操作记录ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', + customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', action VARCHAR(48) NOT NULL COMMENT '采购节点动作', + idempotency_key VARCHAR(128) NOT NULL COMMENT '操作幂等键', request_hash CHAR(64) NOT NULL COMMENT '请求摘要', + operator_id VARCHAR(128) NOT NULL COMMENT '执行人', reason VARCHAR(1000) NOT NULL COMMENT '操作依据', + detail_json JSON NOT NULL COMMENT '内部操作及更正依据快照,不直接对客展示', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '执行时间', + PRIMARY KEY(id), UNIQUE KEY uk_procurement_command(order_id,action,idempotency_key), + KEY idx_procurement_command_customer(customer_id,order_id,created_at) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购节点幂等与不可变审计'; + +CREATE TABLE ll_procurement_budget_authorization ( + id BIGINT NOT NULL COMMENT '预算授权ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', + customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', + previous_amount DECIMAL(20,2) NULL COMMENT '原货款预算总上限;未授权保持空', previous_currency CHAR(3) NOT NULL COMMENT '原预算币种', + authorized_amount DECIMAL(20,2) NOT NULL COMMENT '客户授权的新货款总上限', currency CHAR(3) NOT NULL COMMENT '客户授权币种', + voucher_file_id BIGINT NOT NULL COMMENT '客户确认书面或聊天凭证', reason VARCHAR(1000) NOT NULL COMMENT '授权依据', + reviewed_by VARCHAR(128) NOT NULL COMMENT '核验人员', reviewed_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '核验时间', + PRIMARY KEY(id), KEY idx_procurement_budget_order(customer_id,order_id,id), + CONSTRAINT chk_procurement_budget_amount CHECK(authorized_amount>=0 AND previous_amount>=0), + CONSTRAINT chk_procurement_budget_currency CHECK(currency IN('CNY','USD') AND previous_currency IN('CNY','USD')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购货款预算授权核验历史'; + +CREATE TABLE ll_procurement_receipt ( + id BIGINT NOT NULL COMMENT '实收明细ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', + receipt_no VARCHAR(64) NOT NULL COMMENT '采购收货业务编号', leg VARCHAR(16) NOT NULL COMMENT 'OVERSEAS海外或DOMESTIC国内', + source_carton_id BIGINT NULL COMMENT '国内实收关联原国际交寄箱,海外为空', warehouse_id BIGINT NULL COMMENT '海外实际收货仓', + good_quantity BIGINT NOT NULL COMMENT '可发合格件数', damaged_quantity BIGINT NOT NULL COMMENT '破损待处置件数', extra_quantity BIGINT NOT NULL COMMENT '多到件数,不增加可发数量', + received_at DATETIME(3) NOT NULL COMMENT '实际收货时间', active TINYINT(1) NOT NULL DEFAULT 1 COMMENT '当前有效实收事实', + supersedes_id BIGINT NULL COMMENT '受控更正所替代的原实收记录', created_by VARCHAR(128) NOT NULL COMMENT '登记人员', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', + PRIMARY KEY(id), UNIQUE KEY uk_procurement_receipt_no(receipt_no), KEY idx_procurement_receipt_source(order_id,leg,source_carton_id,active), + CONSTRAINT chk_procurement_receipt_quantity CHECK(good_quantity>=0 AND damaged_quantity>=0 AND extra_quantity>=0 AND good_quantity+damaged_quantity+extra_quantity>0), + CONSTRAINT chk_procurement_receipt_leg CHECK((leg='OVERSEAS' AND source_carton_id IS NULL) OR (leg='DOMESTIC' AND source_carton_id IS NOT NULL)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购分次实收与受控更正事实'; + +CREATE TABLE ll_procurement_disposition ( + id BIGINT NOT NULL COMMENT '差异处理ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', + leg VARCHAR(16) NOT NULL COMMENT 'OVERSEAS海外或DOMESTIC国内', source_carton_id BIGINT NULL COMMENT '国内原交寄箱来源', + receipt_id BIGINT NULL COMMENT '破损或多货对应实收记录,短少为空', kind VARCHAR(24) NOT NULL COMMENT 'SHORTAGE短少、DAMAGED破损、EXTRA多货', + quantity BIGINT NOT NULL COMMENT '已批准处置件数', decision VARCHAR(32) NOT NULL COMMENT 'ACCEPT_SHORTAGE确认短少、DISPOSE_DAMAGED拒收或处置、RETURN_EXTRA退回多货', + active TINYINT(1) NOT NULL DEFAULT 1 COMMENT '当前有效处置;撤销只改变有效性并保留原事实', + voucher_file_id BIGINT NOT NULL COMMENT '本单客户确认或实际处置凭证', reason VARCHAR(1000) NOT NULL COMMENT '处置依据', + created_by VARCHAR(128) NOT NULL COMMENT '采购管理人员', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', + PRIMARY KEY(id), KEY idx_procurement_disposition_source(order_id,leg,source_carton_id,receipt_id,kind), + CONSTRAINT chk_procurement_disposition_quantity CHECK(quantity>0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购单内差异处置,不自动退款'; + +CREATE TABLE ll_procurement_manifest ( + id BIGINT NOT NULL COMMENT '装箱清单ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', + version INT NOT NULL COMMENT '订单内装箱版本', status VARCHAR(16) NOT NULL COMMENT 'DRAFT草稿、CONFIRMED已确认、SUPERSEDED已替代', + confirmed_at DATETIME(3) NULL COMMENT '确认时间', created_by VARCHAR(128) NOT NULL COMMENT '制单人', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '版本保存时间', + PRIMARY KEY(id), UNIQUE KEY uk_procurement_manifest_version(order_id,version), + CONSTRAINT chk_procurement_manifest_status CHECK(status IN('DRAFT','CONFIRMED','SUPERSEDED')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购装箱清单不可变版本'; + +CREATE TABLE ll_procurement_carton ( + id BIGINT NOT NULL COMMENT '版本内箱记录ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', manifest_id BIGINT NOT NULL COMMENT '装箱清单版本', + carton_no VARCHAR(64) NOT NULL COMMENT '采购订单内业务箱号', length_cm DECIMAL(12,2) NOT NULL COMMENT '外箱长厘米', + width_cm DECIMAL(12,2) NOT NULL COMMENT '外箱宽厘米', height_cm DECIMAL(12,2) NOT NULL COMMENT '外箱高厘米', + gross_weight_kg DECIMAL(12,3) NOT NULL COMMENT '封箱毛重千克', quantity BIGINT NOT NULL COMMENT '本箱合格商品总件数', + PRIMARY KEY(id), UNIQUE KEY uk_procurement_carton_version(manifest_id,carton_no), KEY idx_procurement_carton_order(order_id,manifest_id), + CONSTRAINT chk_procurement_carton_measurement CHECK(length_cm>0 AND width_cm>0 AND height_cm>0 AND gross_weight_kg>0 AND quantity>0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购版本化逐箱实测与件数'; + +CREATE TABLE ll_procurement_carton_source ( + carton_id BIGINT NOT NULL COMMENT '版本内箱ID', receipt_id BIGINT NOT NULL COMMENT '海外实收明细来源', quantity BIGINT NOT NULL COMMENT '从该实收装入本箱的件数', + PRIMARY KEY(carton_id,receipt_id), KEY idx_procurement_carton_receipt(receipt_id), CONSTRAINT chk_procurement_carton_source_quantity CHECK(quantity>0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购箱内货物的实收来源与数量'; + +CREATE TABLE ll_procurement_shipment ( + id BIGINT NOT NULL COMMENT '采购交寄ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', + shipment_no VARCHAR(64) NOT NULL COMMENT '交寄业务编号', leg VARCHAR(16) NOT NULL COMMENT 'OVERSEAS国际交寄或DOMESTIC寄客户', + manifest_id BIGINT NOT NULL COMMENT '原海外装箱清单版本', shipped_at DATETIME(3) NOT NULL COMMENT '整批真实交承运方时间', + address_snapshot JSON NOT NULL COMMENT '本段交寄时的收寄姓名电话地址快照', created_by VARCHAR(128) NOT NULL COMMENT '交寄确认人', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', + PRIMARY KEY(id), UNIQUE KEY uk_procurement_shipment_leg(order_id,leg), UNIQUE KEY uk_procurement_shipment_no(shipment_no), + CONSTRAINT chk_procurement_shipment_leg CHECK(leg IN('OVERSEAS','DOMESTIC')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购两段各一次整批真实交寄'; + +CREATE TABLE ll_procurement_shipment_item ( + shipment_id BIGINT NOT NULL COMMENT '采购交寄ID', carton_id BIGINT NOT NULL COMMENT '原海外装箱版本内箱ID', quantity BIGINT NOT NULL COMMENT '本次实际交寄件数', + carrier VARCHAR(128) NOT NULL COMMENT '承运商快照', tracking_no VARCHAR(128) NOT NULL COMMENT '运单号快照', + label_snapshot JSON NOT NULL COMMENT '当次箱规、面单及货物来源快照', + PRIMARY KEY(shipment_id,carton_id), CONSTRAINT chk_procurement_shipment_item_quantity CHECK(quantity>0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购整批交寄逐箱事实'; + +CREATE TABLE ll_procurement_label_set ( + id BIGINT NOT NULL COMMENT '面单批版本ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', + leg VARCHAR(16) NOT NULL COMMENT 'OVERSEAS国际段或DOMESTIC寄客户段', version INT NOT NULL COMMENT '订单段内面单版本', + manifest_id BIGINT NOT NULL COMMENT '原海外确认装箱版本', cargo_hash CHAR(64) NOT NULL COMMENT '箱规及有效货物来源摘要', + sender_snapshot JSON NOT NULL COMMENT '寄件人姓名电话地址快照', receiver_snapshot JSON NOT NULL COMMENT '收件人姓名电话地址快照', + created_by VARCHAR(128) NOT NULL COMMENT '制单操作人', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传确认时间', + PRIMARY KEY(id), UNIQUE KEY uk_procurement_label_version(order_id,leg,version), + CONSTRAINT chk_procurement_label_leg CHECK(leg IN('OVERSEAS','DOMESTIC')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购两段面单不可变版本和地址快照'; + +CREATE TABLE ll_procurement_label_item ( + label_set_id BIGINT NOT NULL COMMENT '面单批版本ID', carton_id BIGINT NOT NULL COMMENT '原海外清单箱ID', + file_id BIGINT NOT NULL COMMENT '本采购订单面单文件', page_no INT NOT NULL COMMENT '该箱对应文件页码,从1开始', + carrier VARCHAR(128) NOT NULL COMMENT '承运商', tracking_no VARCHAR(128) NOT NULL COMMENT '箱主或子运单号', + applied_at DATETIME(3) NULL COMMENT '真实贴单时间', applied_by VARCHAR(128) NULL COMMENT '贴单确认人', + PRIMARY KEY(label_set_id,carton_id), CONSTRAINT chk_procurement_label_page CHECK(page_no>0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购逐箱文件页关联及贴单事实'; + +CREATE TABLE ll_procurement_estimate_review ( + id BIGINT NOT NULL COMMENT '预估核对ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', label_set_id BIGINT NOT NULL COMMENT '已核对国际面单版本', + fee_id BIGINT NOT NULL COMMENT '唯一有效预估费用版本', reviewed_by VARCHAR(128) NOT NULL COMMENT '核价人员', + reviewed_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '核对时间', + PRIMARY KEY(id), UNIQUE KEY uk_procurement_estimate_review(label_set_id,fee_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='面单清单与预估冻结的显式核对关联'; + +CREATE TABLE ll_procurement_repack ( + id BIGINT NOT NULL COMMENT '换包装版本ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', carton_id BIGINT NOT NULL COMMENT '原国际交寄箱ID,保持一对一来源', + length_cm DECIMAL(12,2) NOT NULL COMMENT '新外箱长厘米', width_cm DECIMAL(12,2) NOT NULL COMMENT '新外箱宽厘米', + height_cm DECIMAL(12,2) NOT NULL COMMENT '新外箱高厘米', gross_weight_kg DECIMAL(12,3) NOT NULL COMMENT '新封箱毛重千克', + voucher_file_id BIGINT NOT NULL COMMENT '本单换包装证据', reason VARCHAR(1000) NOT NULL COMMENT '换包装依据', + created_by VARCHAR(128) NOT NULL COMMENT '国内作业人员', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', + PRIMARY KEY(id), KEY idx_procurement_repack_carton(order_id,carton_id,id), + CONSTRAINT chk_procurement_repack_measurement CHECK(length_cm>0 AND width_cm>0 AND height_cm>0 AND gross_weight_kg>0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购国内原箱一对一换包装不可变历史'; + +CREATE TABLE ll_procurement_fee_correction ( + id BIGINT NOT NULL COMMENT '费用链更正ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', + correction_no VARCHAR(64) NOT NULL COMMENT '财务更正业务号', root_fee_id BIGINT NOT NULL COMMENT '原实际费用链根', + idempotency_key VARCHAR(128) NOT NULL COMMENT '本单更正请求幂等键', request_hash CHAR(64) NOT NULL COMMENT '更正目标及凭证请求摘要', + target_original_amount DECIMAL(20,2) NOT NULL COMMENT '本次正确原币总额', original_currency CHAR(3) NOT NULL COMMENT '沿用原费用币种', + exchange_rate DECIMAL(20,6) NOT NULL COMMENT '沿用原费用汇率快照', exchange_rate_month CHAR(7) NOT NULL COMMENT '原汇率月份,不取本次操作月份', + target_amount DECIMAL(20,2) NOT NULL COMMENT '正确总额折算CNY', previous_net_amount DECIMAL(20,2) NOT NULL COMMENT '确认前整链净实扣CNY', + difference_amount DECIMAL(20,2) NOT NULL COMMENT 'CNY正差额追加、负差额退款、零差额仅留核对记录', + voucher_file_id BIGINT NOT NULL COMMENT '本订单财务更正凭证', reason VARCHAR(500) NOT NULL COMMENT '更正依据', + created_by VARCHAR(128) NOT NULL COMMENT '授权财务操作人', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', + PRIMARY KEY(id), UNIQUE KEY uk_procurement_correction_no(correction_no), UNIQUE KEY uk_procurement_correction_request(order_id,idempotency_key), + KEY idx_procurement_correction_root(order_id,root_fee_id,id), + CONSTRAINT chk_procurement_correction_amount CHECK(target_original_amount>=0 AND target_amount>=0 AND previous_net_amount>=0 AND exchange_rate>0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用链更正目标与原汇率快照'; + +CREATE TABLE ll_procurement_fee_correction_item ( + correction_id BIGINT NOT NULL COMMENT '本次费用链更正ID', fee_id BIGINT NOT NULL COMMENT '本次产生的独立正差额或退款费用ID', + PRIMARY KEY(correction_id,fee_id), UNIQUE KEY uk_procurement_correction_fee(fee_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用目标更正与逐笔资金事实关联'; + +CREATE TABLE ll_procurement_control_note ( + id BIGINT NOT NULL COMMENT '采购更正说明ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', + note_no VARCHAR(64) NOT NULL COMMENT '更正说明业务号', target_type VARCHAR(24) NOT NULL COMMENT '购买、仓库、实收或交寄事实类型', + target_id BIGINT NULL COMMENT '本单事实对象引用,购买为空', blocking TINYINT(1) NOT NULL COMMENT '是否阻断后续计划履约', + voucher_file_id BIGINT NOT NULL COMMENT '本单内部事实更正凭证', reason VARCHAR(1000) NOT NULL COMMENT '内部更正说明', + client_summary VARCHAR(500) NULL COMMENT '人工确认的对客摘要,不复制内部原始内容', + original_value_json JSON NULL COMMENT '服务端记录的原事实快照', corrected_value_json JSON NULL COMMENT '服务端记录的更正事实快照', + created_by VARCHAR(128) NOT NULL COMMENT '采购管理操作人', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', + resolved_by VARCHAR(128) NULL COMMENT '处理确认人', resolved_at DATETIME(3) NULL COMMENT '阻断解除时间', + resolution_reason VARCHAR(1000) NULL COMMENT '内部处理结果', resolution_voucher_id BIGINT NULL COMMENT '本单处理凭证', + PRIMARY KEY(id), UNIQUE KEY uk_procurement_note_no(note_no), KEY idx_procurement_note_block(order_id,blocking,resolved_at) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购不可覆盖事实的更正说明及阻断异常'; + +CREATE TABLE ll_procurement_closure ( + id BIGINT NOT NULL COMMENT '采购异常关闭ID', order_id BIGINT NOT NULL COMMENT '采购订单ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户隔离键', + closure_no VARCHAR(64) NOT NULL COMMENT '异常关闭业务号', customer_voucher_file_id BIGINT NOT NULL COMMENT '客户同意停止履约凭证', + financial_conclusion VARCHAR(1000) NOT NULL COMMENT '已知费用及后续无需收费的处理结论,不改变资金事实', + reason VARCHAR(1000) NOT NULL COMMENT '内部关闭原因', client_summary VARCHAR(500) NOT NULL COMMENT '人工确认的对客关闭摘要', + created_by VARCHAR(128) NOT NULL COMMENT '采购管理确认人', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '关闭确认时间', + PRIMARY KEY(id), UNIQUE KEY uk_procurement_closure_order(order_id), UNIQUE KEY uk_procurement_closure_no(closure_no) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购实物资金收口后的异常关闭事实'; + +CREATE TABLE ll_procurement_closure_item ( + id BIGINT NOT NULL COMMENT '关闭货物处置ID', closure_id BIGINT NOT NULL COMMENT '采购关闭ID', + source_kind VARCHAR(32) NOT NULL COMMENT '购买未达、在途未达、合格、破损或多货来源', source_id BIGINT NULL COMMENT '原实收或国际交寄箱,购买未达为空', + quantity BIGINT NOT NULL COMMENT '本来源最终明确去向件数', decision VARCHAR(40) NOT NULL COMMENT '供应商保管、退还、报失、客户授权保管或处置', + destination VARCHAR(500) NOT NULL COMMENT '实际去向及接收方说明', voucher_file_id BIGINT NOT NULL COMMENT '本单实物处置证明', + PRIMARY KEY(id), KEY idx_procurement_closure_source(closure_id,source_kind,source_id), + CONSTRAINT chk_procurement_closure_quantity CHECK(quantity>0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='异常关闭逐来源剩余货物最终去向,不产生新发运'; + +CREATE TABLE ll_selfop_outbound_discovery_scope ( + id BIGINT NOT NULL COMMENT '应用生成的记录标识', + created_at DATETIME(3) NOT NULL COMMENT 'UTC创建时间', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号别名,不保存密钥', + catalog_from_utc DATETIME(3) NULL COMMENT '账号完整目录连续覆盖UTC下界,不等同销量覆盖', + catalog_until_utc DATETIME(3) NULL COMMENT '账号完整目录连续覆盖UTC上界,不等同销量覆盖', + next_sequence BIGINT NOT NULL DEFAULT 1 COMMENT '新发现任务的单调调度序号;重试沿用,只安排任务,不判断对象内容的新旧', + next_observation_sequence BIGINT NOT NULL DEFAULT 1 COMMENT '每次实际出库详情请求前分配的单调采集代次;与 task 调度序号独立,重试请求也分配新代次', + active_task_id BIGINT NULL COMMENT '当前共享发现/详情补齐任务', + lease_owner VARCHAR(128) NULL COMMENT '账号发现执行者', + lease_until_utc DATETIME(3) NULL COMMENT '账号发现租约到期时刻', + fence_token BIGINT NOT NULL DEFAULT 0 COMMENT '防止过期发现进程继续写共享暂存或派发任务', + request_budget INT NOT NULL COMMENT '一次调度允许的目录、详情请求总预算,必须为正', + time_budget_seconds INT NOT NULL COMMENT '一次调度允许占用的执行时长,必须为正', + min_request_interval_ms INT NOT NULL COMMENT '同账号请求最小间隔,按已核准配额配置', + api_budget_json JSON NULL COMMENT '账号所有采集族共用的预算、统计日、保守预留及确认消耗、尝试许可和独占交接依据', + api_cooldown_until_utc DATETIME(3) NULL COMMENT '账号全部真实请求共用冷却UTC截止,重启与跨日不清除', + api_pause_reason VARCHAR(64) NULL COMMENT '账号停止或等待的固定原因码,不保存供应商原始错误或凭据', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_discovery_account (source_account), + CONSTRAINT chk_selfop_outbound_discovery_scope CHECK (request_budget > 0 AND time_budget_seconds > 0 AND min_request_interval_ms > 0 AND fence_token >= 0 AND next_sequence > 0 AND next_observation_sequence > 0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='账号共享出库目录与详情发现协调作用域'; + +CREATE TABLE ll_selfop_sync_scope ( + id BIGINT NOT NULL COMMENT '应用生成的记录标识', + created_at DATETIME(3) NOT NULL COMMENT 'UTC创建时间', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号别名,不保存密钥', + warehouse_code VARCHAR(64) NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + data_family VARCHAR(16) NOT NULL COMMENT 'OUTBOUND 或 INVENTORY;按账号+仓库+任务族互斥', + scope_json JSON NOT NULL COMMENT '本仓范围规则,customerMode=ALL_AUTHORIZED,库存为全部品质;当前账号全部授权货主均自营,不将当天出现的货主列表当白名单', + scope_hash CHAR(64) NOT NULL COMMENT '仓库、货主范围规则、品质、时区及单位口径的规范化摘要;不包含当天观测到的客户/SKU 集合', + business_timezone VARCHAR(64) NOT NULL COMMENT '本仓报表及调度时区,初始建议值为 Asia/Shanghai,各仓独立核准', + source_timezone VARCHAR(64) NULL COMMENT '本仓已核准的出库源时间时区', + schedule_cron VARCHAR(128) NOT NULL COMMENT '本仓、本任务族的调度表达式,按 business_timezone 执行', + stale_after_seconds INT NOT NULL COMMENT '本仓、本任务族数据过期阈值,必须为正;库存初始可采用 26 小时,后续按仓调整', + warehouse_policy_ref VARCHAR(128) NULL COMMENT '未来按仓告警/补货策略的稳定引用;一期为空,不建告警规则表', + initial_from_utc DATETIME(3) NULL COMMENT '首采固定UTC下界,按本仓业务时区减一个月', + initial_until_utc DATETIME(3) NULL COMMENT '首采固定UTC截止,重试不重新取当前时间', + discovery_from_utc DATETIME(3) NULL COMMENT '本仓已发布的连续销量覆盖UTC下界', + discovery_until_utc DATETIME(3) NULL COMMENT '本仓已发布的连续销量覆盖UTC上界,不含端点', + fact_revision BIGINT NOT NULL DEFAULT 0 COMMENT '出库事实归并修订号;内容实际变化才增加', + published_fact_revision BIGINT NOT NULL DEFAULT 0 COMMENT '本仓最后已发布销量版所使用的事实修订号', + rebuild_required TINYINT NOT NULL DEFAULT 0 COMMENT '事实变化待重建标记;跨仓修订同时置旧、新仓为 1', + invalidated_at_utc DATETIME(3) NULL COMMENT '最近一次因事实修订使当前版待重建的时刻', + published_run_id BIGINT NULL COMMENT '唯一对外可见版本,指向本任务族已发布执行批次', + lease_owner VARCHAR(128) NULL COMMENT '当前执行者令牌,不使用仅进程内锁', + lease_until_utc DATETIME(3) NULL COMMENT '租约到期时刻', + fence_token BIGINT NOT NULL DEFAULT 0 COMMENT '每次取得租约递增,事实提交和发布均校验', + known_order_cursor_id BIGINT NULL COMMENT '本仓已可靠处理的稳定订单内部标识游标', + known_order_round_max_id BIGINT NULL COMMENT '本轮已知单复查固定最大内部标识', + known_order_round_started_at_utc DATETIME(3) NULL COMMENT '本仓已知单复查轮次开始UTC时间', + known_order_round_finished_at_utc DATETIME(3) NULL COMMENT '本仓已知单完整轮转完成UTC时间', + history_round_from_utc DATETIME(3) NULL COMMENT '本仓历史核对固定UTC下界', + history_round_until_utc DATETIME(3) NULL COMMENT '本仓历史核对固定UTC上界', + history_slice_cursor_utc DATETIME(3) NULL COMMENT '本仓下一待核对历史切片UTC位置', + history_round_finished_at_utc DATETIME(3) NULL COMMENT '上一轮历史时间片全部完成时刻', + review_request_budget INT NOT NULL COMMENT '本仓单次复查最大请求数,必须为正', + review_time_budget_seconds INT NOT NULL COMMENT '本仓单次复查最大执行秒数,必须为正', + review_target_days INT NOT NULL DEFAULT 7 COMMENT '建议每 7 天轮转一遍,属于待配额验证的目标,不保证首次大量详情在单次调度内完成', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_scope (source_account,warehouse_code,data_family), + KEY idx_selfop_scope_lease (lease_until_utc), + CONSTRAINT chk_selfop_sync_scope CHECK (data_family IN ('OUTBOUND','INVENTORY') AND stale_after_seconds > 0 AND review_request_budget > 0 AND review_time_budget_seconds > 0 AND review_target_days > 0 AND fact_revision >= 0 AND published_fact_revision >= 0 AND fence_token >= 0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='分仓任务族租约及发布指针'; + +CREATE TABLE ll_selfop_sync_task ( + id BIGINT NOT NULL COMMENT '应用生成的记录标识', + created_at DATETIME(3) NOT NULL COMMENT 'UTC创建时间', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + task_no VARCHAR(64) NOT NULL COMMENT '稳定采集业务任务号,重试沿用,不展示内部数据库标识', + execution_purpose VARCHAR(16) NOT NULL COMMENT 'BUSINESS或VALIDATION;由服务端冻结用途,子任务继承', + validation_root_task_id BIGINT NULL COMMENT '验证会话唯一预算根任务,根引用自身,正式任务为空', + validation_budget_json JSON NULL COMMENT '验证根冻结硬预算、累计消耗、库存分仓页数、截止时刻及停止原因', + business_root_task_id BIGINT NULL COMMENT '测试人工正式采集共享预算根任务;生产任务为空', + business_budget_json JSON NULL COMMENT '仅测试正式采集根保存冻结请求上限、截止时间、消耗及停止原因', + source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号别名,不保存密钥', + task_role VARCHAR(24) NOT NULL COMMENT 'ACCOUNT_DISCOVERY 或 WAREHOUSE_SYNC', + scope_id BIGINT NULL COMMENT '分仓任务必须引用分仓作用域;仅账号共享发现为空', + warehouse_code VARCHAR(64) NULL COMMENT '来源仓库原始编码,按仓独立统计', + discovery_scope_id BIGINT NULL COMMENT '共享发现必填,引用账号发现协调器', + upstream_task_id BIGINT NULL COMMENT '出库分仓任务引用已持久化目录的共享发现切片;库存无此上游', + discovery_sequence BIGINT NULL COMMENT '共享任务及分仓子任务继承的调度顺序;重试保持不变,不用于事实覆盖判定', + observation_baseline BIGINT NULL COMMENT '共享任务建立时已分配的最大详情采集代次,分仓子任务继承;用于识别旧任务恢复期间出现的其他任务新观测', + request_key VARCHAR(128) NOT NULL COMMENT '共享发现包含切片/计划槽位;分仓任务包含仓库、任务族及切片或计划槽位;人工附请求幂等键', + request_hash CHAR(64) NOT NULL COMMENT '请求类型、查询范围、范围摘要的指纹;同键不同请求拒绝', + task_type VARCHAR(24) NOT NULL COMMENT '计划、补采、复核、重建与验证;INVENTORY_FLOW_HISTORY为流水片,INVENTORY_HISTORY_BUILD为本地历史还原', + planned_at_utc DATETIME(3) NULL COMMENT '计划时点;人工请求可空', + query_from_utc DATETIME(3) NULL COMMENT '出库查询区间UTC下界,库存不填', + query_until_utc DATETIME(3) NULL COMMENT '出库查询区间UTC上界,不含端点,库存不填', + query_scope_json JSON NOT NULL COMMENT '不变的账号、货主、仓库、品质和查询条件快照;按单补查在此记录单号', + routing_manifest_json JSON NULL COMMENT '共享切片目录完整标记、每仓对象键集合/数量和详情就绪状态;各对象记录 effectiveStageId,需新代次复查时记录 refreshTaskId,完成后指向新有效暂存;不改写旧载荷', + scope_hash CHAR(64) NOT NULL COMMENT '建任务时的业务范围摘要', + status VARCHAR(20) NOT NULL COMMENT 'WAITING_SOURCE、READY、RUNNING、RETRY_WAIT、SUCCEEDED、DEAD、SAMPLE_DONE;样本结束不等于正式成功', + apply_state VARCHAR(20) NOT NULL COMMENT '正式出库归并NOT_STARTED、APPLYING、BLOCKED、APPLIED;共享发现、库存、重建及验证为NOT_APPLICABLE', + affected_warehouse_codes_json JSON NULL COMMENT '本次归并可能改变的仓集合,包含原仓与新仓;首段事实写入前登记,扩大集合须先取得新增仓租约并锁 scope,不能写完再补', + apply_started_at_utc DATETIME(3) NULL COMMENT '首段事实提交UTC时间', + apply_completed_at_utc DATETIME(3) NULL COMMENT '全部必需事实归并完成UTC时间,失败不填', + attempt_count INT NOT NULL DEFAULT 0 COMMENT '已创建的执行尝试数', + next_retry_at_utc DATETIME(3) NULL COMMENT '有限退避后下一次可执行时刻', + requested_by VARCHAR(128) NULL COMMENT '人工请求的平台操作人,仅内部审计', + result_published_run_id BIGINT NULL COMMENT '正式成功任务实际发布或复用的版本;验证和共享发现为空', + progress_json JSON NULL COMMENT '与可靠检查点一起提交的有界阶段、单位、尝试和质量进度,不保存单据集合', + progress_updated_at_utc DATETIME(3) NULL COMMENT '最后可靠业务检查点UTC时间,与执行心跳分开', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_task_no (task_no), + UNIQUE KEY uk_selfop_task_request (source_account,request_key), + KEY idx_selfop_task_poll (status,next_retry_at_utc,id), + KEY idx_selfop_task_upstream (upstream_task_id,warehouse_code), + KEY idx_selfop_task_apply (apply_state,id), + KEY idx_selfop_task_scope_list (scope_id,created_at,id), + KEY idx_selfop_task_account_list (source_account,task_role,created_at,id), + KEY idx_selfop_task_business_root (business_root_task_id,status,id), + CONSTRAINT chk_selfop_business_budget CHECK ((business_root_task_id IS NULL AND business_budget_json IS NULL) OR (execution_purpose='BUSINESS' AND business_root_task_id IS NOT NULL AND ((business_root_task_id=id AND business_budget_json IS NOT NULL) OR (business_root_task_id<>id AND business_budget_json IS NULL)))), + CONSTRAINT chk_selfop_sync_task CHECK (attempt_count >= 0 AND execution_purpose IN ('BUSINESS','VALIDATION') AND ((execution_purpose = 'BUSINESS' AND validation_root_task_id IS NULL AND validation_budget_json IS NULL) OR (execution_purpose = 'VALIDATION' AND validation_root_task_id IS NOT NULL AND apply_state = 'NOT_APPLICABLE' AND result_published_run_id IS NULL AND status <> 'SUCCEEDED')) AND ((task_role = 'ACCOUNT_DISCOVERY' AND scope_id IS NULL AND warehouse_code IS NULL AND discovery_scope_id IS NOT NULL) OR (task_role = 'WAREHOUSE_SYNC' AND scope_id IS NOT NULL AND warehouse_code IS NOT NULL))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='一次计划或人工请求'; + +CREATE TABLE ll_selfop_sync_run ( + id BIGINT NOT NULL COMMENT '应用生成的记录标识', + created_at DATETIME(3) NOT NULL COMMENT 'UTC创建时间', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + task_id BIGINT NOT NULL COMMENT '本次执行请求', + execution_purpose VARCHAR(16) NOT NULL COMMENT '从逻辑任务冻结继承,验证尝试不能作为正式统计版本', + scope_id BIGINT NULL COMMENT '仅账号共享发现为空;分仓执行必须有作用域', + source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号别名,不保存密钥', + warehouse_code VARCHAR(64) NULL COMMENT '来源仓库原始编码,按仓独立统计', + run_role VARCHAR(24) NOT NULL COMMENT 'ACCOUNT_DISCOVERY 或 WAREHOUSE_SYNC', + upstream_task_id BIGINT NULL COMMENT '分仓出库计算引用的共享切片及其稳定暂存集合', + attempt_no INT NOT NULL COMMENT '同一请求从 1 起递增', + scope_hash CHAR(64) NOT NULL COMMENT '本版本的业务范围摘要', + scope_snapshot_json JSON NOT NULL COMMENT '分仓版只含本仓货主/品质、固定首采 [B,E0)、时区、调度与过期阈值;账号发现保存待路由仓集合,不冒充业务版', + observed_dimensions_json JSON NULL COMMENT '本次实际出现的仓库/货主集合及数量摘要,仅作采集证据;例如已观测 70 货主不等于固定授权范围', + fence_token BIGINT NOT NULL COMMENT '本尝试持有的栅栏版本', + base_published_run_id BIGINT NULL COMMENT '执行开始时的上一可见版本', + reference_sales_run_id BIGINT NULL COMMENT '库存构建开始时固定的本仓已发布销量版,用其不可变 SKU 维度生成出库已知商品占位;没有已发布销量版时为空,不读取半归并订单事实', + inventory_daily_sample_date DATE NULL COMMENT '北京时间当日首个合格计划库存发布代表日期,非代表为空', + inventory_sample_rule_version VARCHAR(32) NULL COMMENT '日库存代表选择规则 DAILY_SCHEDULED_FIRST_V1,与日标记原子保存', + status VARCHAR(24) NOT NULL COMMENT 'FETCHING、VALIDATED、ROUTED、FACTS_APPLIED、BUILDING、READY、PUBLISHED、REUSED、YIELDED、FAILED、ABORTED、SAMPLE_DONE;复用和验证不是版本头', + last_phase VARCHAR(24) NOT NULL COMMENT '失败/中止前所在阶段,支持判断是否已经归并事实', + fetch_started_at_utc DATETIME(3) NULL COMMENT '实际采集开始UTC时间', + fetch_finished_at_utc DATETIME(3) NULL COMMENT '实际采集完成UTC时间,未完成为空', + build_started_at_utc DATETIME(3) NULL COMMENT '实际开始有界候选构建UTC时间,用于构建耗时及首采合并间隔', + warehouse_daily_ready TINYINT NOT NULL DEFAULT 0 COMMENT '仓库日汇总已完整构建并校验,含完整空版本', + finished_at_utc DATETIME(3) NULL COMMENT '本次尝试终止UTC时间', + published_at_utc DATETIME(3) NULL COMMENT '实际原子切换发布指针UTC时间', + superseded_at_utc DATETIME(3) NULL COMMENT '被新发布版替代的首次UTC时间,同事务填写且重试不重置', + page_count INT NOT NULL DEFAULT 0 COMMENT '已完整获取页数', + source_total_count BIGINT NULL COMMENT '上游可靠返回的总数;未返回则为空', + unique_object_count BIGINT NOT NULL DEFAULT 0 COMMENT '规范化去重后对象数', + progress_snapshot_json JSON NULL COMMENT '尝试终止时冻结的有界可靠进度摘要,历史尝试不随逻辑任务改写', + heartbeat_at_utc DATETIME(3) NULL COMMENT '有效执行者最新UTC心跳,不代表业务检查点推进', + coverage_status VARCHAR(16) NOT NULL COMMENT 'UNKNOWN、PARTIAL、COMPLETE;分页完整与数值有效性分别判断', + covered_from_utc DATETIME(3) NULL COMMENT '本仓销量版本实际连续覆盖UTC下界', + covered_until_utc DATETIME(3) NULL COMMENT '本仓销量版本实际连续覆盖UTC上界,不含端点', + complete_day_from DATE NULL COMMENT '本仓完整自然日区间首日,包含', + complete_day_until DATE NULL COMMENT '本仓完整自然日区间末日,不含', + applied_fact_revision BIGINT NULL COMMENT '本次尝试归并后的事实修订号,库存为空', + calculated_fact_revision BIGINT NULL COMMENT '候选销量版本计算所依据的固定事实修订号', + error_code VARCHAR(64) NULL COMMENT '内部可诊断错误分类,不保存认证信息', + error_message VARCHAR(500) NULL COMMENT '脱敏后的固定错误摘要', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_run_attempt (task_id,attempt_no), + UNIQUE KEY uk_selfop_inventory_daily (source_account,warehouse_code,inventory_daily_sample_date), + KEY idx_selfop_run_scope (scope_id,id), + KEY idx_selfop_run_status (status,updated_at), + CONSTRAINT chk_selfop_inventory_daily CHECK ((inventory_daily_sample_date IS NULL AND inventory_sample_rule_version IS NULL) OR (inventory_daily_sample_date IS NOT NULL AND inventory_sample_rule_version IS NOT NULL AND inventory_sample_rule_version = 'DAILY_SCHEDULED_FIRST_V1' AND execution_purpose = 'BUSINESS' AND run_role = 'WAREHOUSE_SYNC' AND status = 'PUBLISHED' AND coverage_status = 'COMPLETE')), + CONSTRAINT chk_selfop_sync_run CHECK (attempt_no > 0 AND page_count >= 0 AND unique_object_count >= 0 AND execution_purpose IN ('BUSINESS','VALIDATION') AND (execution_purpose <> 'VALIDATION' OR status NOT IN ('PUBLISHED','REUSED')) AND (source_total_count IS NULL OR source_total_count >= 0) AND ((run_role = 'ACCOUNT_DISCOVERY' AND scope_id IS NULL AND warehouse_code IS NULL) OR (run_role = 'WAREHOUSE_SYNC' AND scope_id IS NOT NULL AND warehouse_code IS NOT NULL))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='执行尝试、覆盖证明和版本头'; + +CREATE TABLE ll_selfop_sync_stage ( + id BIGINT NOT NULL COMMENT '应用生成的记录标识', + created_at DATETIME(3) NOT NULL COMMENT 'UTC创建时间', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + run_id BIGINT NOT NULL COMMENT '首次写入该暂存对象的执行尝试', + stage_batch_id BIGINT NOT NULL COMMENT '出库取共享发现 task.id,便于断点续取;库存取本次 run.id,严禁跨尝试混页', + last_fetch_run_id BIGINT NOT NULL COMMENT '最后一次补齐该对象的执行尝试,保留重试来源', + observation_sequence BIGINT NULL COMMENT '该完整出库详情实际请求的采集代次;有效出库对象必填,目录待补对象和库存为空;不能填 task 调度序号', + warehouse_code VARCHAR(64) NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + previous_warehouse_code VARCHAR(64) NULL COMMENT '路由时从已有单据识别的原仓库;归并前再校验,跨仓时通知两仓', + object_type VARCHAR(16) NOT NULL COMMENT 'OUTBOUND_ORDER 或 PRODUCT_STOCK', + object_key_hash CHAR(64) NOT NULL COMMENT '规范化业务键摘要;原业务键保留在载荷中并核对', + first_page_no INT NOT NULL COMMENT '首次发现页码', + observed_at_utc DATETIME(3) NOT NULL COMMENT '实际接收该对象的时刻', + content_hash CHAR(64) NOT NULL COMMENT '完整规范化对象摘要', + payload_json JSON NOT NULL COMMENT '目录阶段可先存订单头,详情齐后补完整 SKU;VALID 后不再修改;库存保存产品库存字段', + before_payload_json JSON NULL COMMENT '订单归并事务内记录归并前的完整规范化事实;新增单为空', + validation_status VARCHAR(16) NOT NULL COMMENT '暂存校验状态:PENDING待核验、VALID有效、INVALID异常', + validation_code VARCHAR(64) NULL COMMENT '字段缺失、冲突、未知时区等原因', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_stage_object (stage_batch_id,object_type,object_key_hash), + KEY idx_selfop_stage_history (object_type,object_key_hash,stage_batch_id), + KEY idx_selfop_stage_observation (object_type,object_key_hash,validation_status,observation_sequence), + KEY idx_selfop_stage_fact_observation (observation_sequence,warehouse_code,object_type,validation_status,run_id,observed_at_utc), + KEY idx_selfop_stage_route (stage_batch_id,warehouse_code,validation_status), + CONSTRAINT chk_selfop_sync_stage CHECK (first_page_no > 0 AND (object_type <> 'OUTBOUND_ORDER' OR validation_status <> 'VALID' OR observation_sequence IS NOT NULL)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='待验证事实与修订证据'; + +CREATE TABLE ll_selfop_outbound_order ( + id BIGINT NOT NULL COMMENT '应用生成的记录标识', + created_at DATETIME(3) NOT NULL COMMENT 'UTC创建时间', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号别名,不保存密钥', + customer_code VARCHAR(64) NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + warehouse_code VARCHAR(64) NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + delivery_no VARCHAR(128) NOT NULL COMMENT 'OMP 发货单号,采用列表及详情同一身份', + source_no VARCHAR(128) NULL COMMENT 'WMS 来源出库单号,缺失不以内部 ID 回退展示', + source_status INT NOT NULL COMMENT '原始状态,100 已出库、99 已取消;不改造成内部状态码', + source_created_time VARCHAR(64) NULL COMMENT '来源创建时间原始字符串,不使用采集时间替代', + source_outbound_time VARCHAR(64) NULL COMMENT '来源实际出库时间原始字符串,不使用采集时间替代', + source_timezone VARCHAR(64) NULL COMMENT '解析采用的源时区', + outbound_at_utc DATETIME(3) NULL COMMENT '已核准的实际出库时间点;非出库状态可空', + business_date DATE NULL COMMENT '已核准业务时区下的出库日', + business_timezone VARCHAR(64) NOT NULL COMMENT '该事实当前归属仓所用业务时区,迁仓后重新确定业务日', + sales_eligible TINYINT NOT NULL DEFAULT 0 COMMENT '仅已出库、时间与全部数量有效时为 1', + revision_no BIGINT NOT NULL DEFAULT 1 COMMENT '该单内容变更次数,不等于拉取次数', + content_hash CHAR(64) NOT NULL COMMENT '订单头及完整 SKU 明细规范化摘要', + last_run_id BIGINT NOT NULL COMMENT '最后一次确认或修订的执行尝试', + last_observation_sequence BIGINT NOT NULL COMMENT '最后接受的完整详情采集代次;仅防旧观测重放,不按 task 调度序号拒绝较晚实际读取的事实,不冒充领星源版本号', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_order (source_account,customer_code,delivery_no), + KEY idx_selfop_order_daily (source_account,warehouse_code,sales_eligible,business_date,id), + KEY idx_selfop_order_run (last_run_id), + CONSTRAINT chk_selfop_outbound_order CHECK (revision_no > 0 AND last_observation_sequence > 0 AND sales_eligible IN (0,1) AND (sales_eligible = 0 OR (source_status = 100 AND source_timezone IS NOT NULL AND outbound_at_utc IS NOT NULL AND business_date IS NOT NULL))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='最后确认的单据事实'; + +CREATE TABLE ll_selfop_outbound_item ( + id BIGINT NOT NULL COMMENT '应用生成的记录标识', + created_at DATETIME(3) NOT NULL COMMENT 'UTC创建时间', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + order_id BIGINT NOT NULL COMMENT '对应外部出库事实', + sku_code VARCHAR(128) NOT NULL COMMENT '原始 productSku', + product_name VARCHAR(255) NULL COMMENT '来源商品名称,仅作展示', + actual_quantity DECIMAL(20,6) NOT NULL COMMENT '详情 actualDeliveryQty,必须为非负有效数值', + quantity_unit VARCHAR(32) NOT NULL COMMENT '已核准业务单位;未确认单位不发布正式数量统计', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_order_sku (order_id,sku_code), + KEY idx_selfop_item_sku (sku_code,order_id), + CONSTRAINT chk_selfop_outbound_item CHECK (actual_quantity >= 0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='整单替换的实际出库明细'; + +CREATE TABLE ll_selfop_inventory_snapshot ( + id BIGINT NOT NULL COMMENT '应用生成的记录标识', + created_at DATETIME(3) NOT NULL COMMENT 'UTC创建时间', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + snapshot_run_id BIGINT NOT NULL COMMENT 'INVENTORY 执行尝试;发布后该批明细不可修改', + source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号别名,不保存密钥', + customer_code VARCHAR(64) NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + warehouse_code VARCHAR(64) NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + sku_code VARCHAR(128) NOT NULL COMMENT '原始产品 SKU', + product_quality SMALLINT NOT NULL COMMENT '来源品质,当前 0 正品、1 次品;全量均保存,不套用整箱库存', + product_name VARCHAR(255) NULL COMMENT '来源名称', + physical_quantity DECIMAL(20,6) NULL COMMENT '来源stkQty实物库存,未知为空', + available_quantity DECIMAL(20,6) NULL COMMENT '来源useStkQty可用库存,未知为空,不再次扣冻结', + frozen_quantity DECIMAL(20,6) NULL COMMENT '来源freezeQty冻结库存,未知为空', + transit_quantity DECIMAL(20,6) NULL COMMENT '来源transitQty在途数量,未知为空,不计可售库存', + source_unique_key VARCHAR(512) NULL COMMENT '原 uniqueKey4tenant,只作来源证据', + observed_at_utc DATETIME(3) NOT NULL COMMENT '所在页实际采集时间;缺行占位取本批采集完成时间', + quality_status VARCHAR(16) NOT NULL COMMENT 'VALID、UNKNOWN、INVALID;STALE 按批次年龄实时派生', + quality_reason VARCHAR(64) NULL COMMENT 'SOURCE_ROW_MISSING、FIELD_MISSING、NEGATIVE_QUANTITY 等', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_stock_snapshot (snapshot_run_id,source_account,customer_code,warehouse_code,sku_code,product_quality), + KEY idx_selfop_stock_lookup (source_account,customer_code,warehouse_code,sku_code,product_quality,snapshot_run_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='产品库存全量批次明细'; + +CREATE TABLE ll_selfop_sku_daily_sales ( + id BIGINT NOT NULL COMMENT '应用生成的记录标识', + created_at DATETIME(3) NOT NULL COMMENT 'UTC创建时间', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + sales_run_id BIGINT NOT NULL COMMENT 'OUTBOUND 执行尝试,同时是计算版本', + source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号别名,不保存密钥', + customer_code VARCHAR(64) NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + warehouse_code VARCHAR(64) NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + sku_code VARCHAR(128) NOT NULL COMMENT '原始产品 SKU', + business_date DATE NOT NULL COMMENT '已核准业务日', + outbound_quantity DECIMAL(20,6) NOT NULL COMMENT '有效出库实际件数之和,非负', + outbound_order_count BIGINT NOT NULL COMMENT '该维度去重发货单数,非负', + quantity_unit VARCHAR(32) NOT NULL COMMENT '同一统计维度内一致的业务单位', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_daily_version (sales_run_id,source_account,customer_code,warehouse_code,sku_code,business_date), + KEY idx_selfop_daily_window_cover (sales_run_id,source_account,warehouse_code,business_date,customer_code,sku_code,outbound_quantity,outbound_order_count,quantity_unit), + KEY idx_selfop_daily_sku_cover (sales_run_id,source_account,warehouse_code,customer_code,sku_code,business_date,outbound_quantity,outbound_order_count,quantity_unit), + CONSTRAINT chk_selfop_sku_daily_sales CHECK (outbound_quantity >= 0 AND outbound_order_count >= 0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='完整销量版本的稀疏日事实'; + +CREATE TABLE ll_selfop_warehouse_daily_sales ( + sales_run_id BIGINT NOT NULL COMMENT '完整销量计算版本标识', + source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号别名,不保存密钥', + warehouse_code VARCHAR(64) NOT NULL COMMENT '来源仓库原始编码', + business_date DATE NOT NULL COMMENT '已核准业务日', + observed_quantity DECIMAL(38,6) NULL COMMENT '该日PCS非负有效出库量之和,无有效行时为空', + invalid_row_count BIGINT NOT NULL COMMENT '该日数量为空或负数或单位非PCS的日事实行数', + source_row_count BIGINT NOT NULL COMMENT '该日参与仓库汇总的SKU日事实总行数', + created_at DATETIME(3) NOT NULL COMMENT 'UTC创建时间', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + PRIMARY KEY (sales_run_id,source_account,warehouse_code,business_date), + CONSTRAINT chk_selfop_warehouse_daily_sales CHECK (source_row_count > 0 AND invalid_row_count >= 0 AND invalid_row_count <= source_row_count AND (observed_quantity IS NULL OR observed_quantity >= 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='完整销量版本按仓按日汇总,随SKU日事实批次原子构建'; + +CREATE TABLE ll_selfop_sku_profile ( + id BIGINT NOT NULL COMMENT '应用生成的记录标识', + created_at DATETIME(3) NOT NULL COMMENT 'UTC创建时间', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + profile_run_id BIGINT NOT NULL COMMENT '本仓销量或库存候选版本;与对应 daily/snapshot 使用同一 run,发布后该版本全部维度行不可修改', + source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号别名,不保存密钥', + customer_code VARCHAR(64) NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + warehouse_code VARCHAR(64) NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + sku_code VARCHAR(128) NOT NULL COMMENT '原始产品 SKU', + product_name VARCHAR(255) NULL COMMENT '本版本确认的名称,不实时连接其他版本名称', + quantity_unit VARCHAR(32) NULL COMMENT '本版本已核准单位;未知或两版本单位冲突时不计算混合指标', + first_seen_at_utc DATETIME(3) NULL COMMENT '本证据族真实观测到本仓商品的最早接收时刻;缺行占位不能生成观察证据', + earliest_evidence_at_utc DATETIME(3) NULL COMMENT '库存版取真实库存首次观察时刻;销量版从该版有效事实重新求最早已核准出库时间,可随改期、取消或迁仓撤回/后移', + evidence_type VARCHAR(24) NOT NULL COMMENT 'INVENTORY_OBSERVATION、VALID_OUTBOUND、NONE;不得将销量证据复制成库存真实观察证据', + evidence_run_id BIGINT NULL COMMENT '本证据族真实依据的采集批次,无证据占位为空', + last_seen_run_id BIGINT NULL COMMENT '本证据族最近真实观测批次,无证据占位为空', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_profile_version (profile_run_id,source_account,customer_code,warehouse_code,sku_code), + KEY idx_selfop_profile_evidence (profile_run_id,earliest_evidence_at_utc,customer_code,sku_code) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='随发布版本固定的 SKU 维度与观察依据'; + +CREATE TABLE ll_appointment_impact ( + container_booking_id VARCHAR(64) NOT NULL COMMENT '稳定柜次关联键,不作业务编号展示', + impact_no VARCHAR(40) NOT NULL COMMENT '船期核对事项业务号', + baseline_json LONGTEXT NOT NULL COMMENT '已核对基准或首次变化前观察,原来源时间口径', + latest_json LONGTEXT NOT NULL COMMENT '最新已读取观察,未知可为JSON null', + forecast_token CHAR(64) NOT NULL COMMENT '最新观察摘要,处理时防止旧预测结案', + status VARCHAR(20) NOT NULL COMMENT '事项状态:MONITORING监测/OPEN待处理/RESOLVED已完成', + reason VARCHAR(64) NULL COMMENT '预测变化或资料待核实原因', + owner_id VARCHAR(128) NULL COMMENT '认领平台人员ID', + owner_name VARCHAR(200) NULL COMMENT '负责人姓名快照', + version INT NOT NULL COMMENT '观察及人工处理共同版本', + updated_at DATETIME(3) NOT NULL COMMENT 'UTC更新时间', + PRIMARY KEY (container_booking_id), + UNIQUE KEY uk_appointment_impact_no (impact_no), + KEY idx_appointment_impact_work (status,updated_at), + CONSTRAINT chk_appointment_impact_status CHECK (status IN ('MONITORING','OPEN','RESOLVED')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='一柜一个稳定船期变化核对事项,不改写预约或运输'; + +CREATE TABLE ll_appointment_impact_history ( + id BIGINT NOT NULL COMMENT '历史记录标识', + container_booking_id VARCHAR(64) NOT NULL COMMENT '关联柜次标识', + version INT NOT NULL COMMENT '记录版本', + action VARCHAR(20) NOT NULL COMMENT '操作类型:OBSERVED观察/CLAIM认领/RECORD记录/RESOLVE完成', + operator_id VARCHAR(128) NOT NULL COMMENT '操作人标识', + operator_name VARCHAR(200) NULL COMMENT '操作人姓名', + result VARCHAR(1000) NULL COMMENT '人工处理结果;观察记录为空', + next_action VARCHAR(500) NULL COMMENT '下一步处理事项', + followup_date DATE NULL COMMENT '业务跟进日期', + command_key VARCHAR(64) NULL COMMENT '人工命令幂等键;观察记录为空', + request_hash CHAR(64) NULL COMMENT '请求内容摘要', + response_json LONGTEXT NOT NULL COMMENT '该版本完整响应快照,支持精确重放', + created_at DATETIME(3) NOT NULL COMMENT 'UTC记录时间', + PRIMARY KEY (id), + UNIQUE KEY uk_appointment_impact_version (container_booking_id,version), + UNIQUE KEY uk_appointment_impact_command (container_booking_id,operator_id,command_key), + CONSTRAINT fk_appointment_impact_history FOREIGN KEY (container_booking_id) REFERENCES ll_appointment_impact(container_booking_id), + CONSTRAINT chk_appointment_impact_action CHECK (action IN ('OBSERVED','CLAIM','RECORD','RESOLVE')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='船期观察及人工处理追加历史'; + +CREATE TABLE ll_selfop_owner ( + id BIGINT NOT NULL COMMENT '主键', + run_id BIGINT NOT NULL COMMENT '完整资料采集版本', + source_account VARCHAR(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源账号', + customer_code VARCHAR(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主编码', + customer_name VARCHAR(255) NULL COMMENT '领星货主名称', + source_status VARCHAR(32) NULL COMMENT '来源启停状态', + observed_at_utc DATETIME(6) NOT NULL COMMENT '资料观测时间', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_owner_version (run_id,source_account,customer_code), + KEY idx_selfop_owner_lookup (source_account,customer_code,run_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='自营领星货主资料版本'; + +CREATE TABLE ll_selfop_product ( + id BIGINT NOT NULL COMMENT '主键', + run_id BIGINT NOT NULL COMMENT '完整资料采集版本', + source_account VARCHAR(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源账号', + customer_code VARCHAR(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主编码', + sku_code VARCHAR(128) COLLATE utf8mb4_bin NOT NULL COMMENT '货主商品编码', + product_name VARCHAR(255) NULL COMMENT '商品名称', + declared_length DECIMAL(24,6) NULL COMMENT '商品资料长度', + declared_width DECIMAL(24,6) NULL COMMENT '商品资料宽度', + declared_height DECIMAL(24,6) NULL COMMENT '商品资料高度', + declared_size_unit VARCHAR(32) NULL COMMENT '商品资料尺寸单位', + measured_length DECIMAL(24,6) NULL COMMENT '仓库实测长度', + measured_width DECIMAL(24,6) NULL COMMENT '仓库实测宽度', + measured_height DECIMAL(24,6) NULL COMMENT '仓库实测高度', + measured_size_unit VARCHAR(32) NULL COMMENT '仓库实测尺寸单位', + observed_at_utc DATETIME(6) NOT NULL COMMENT '资料观测时间', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_product_version (run_id,source_account,customer_code,sku_code), + KEY idx_selfop_product_lookup (source_account,customer_code,sku_code,run_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='自营领星商品资料版本'; + +CREATE TABLE ll_selfop_inventory_flow ( + id BIGINT NOT NULL COMMENT '应用生成的流水记录标识', + source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号', + warehouse_code VARCHAR(64) NOT NULL COMMENT '来源仓库编码', + customer_code VARCHAR(64) NOT NULL COMMENT '来源货主编码', + sku_code VARCHAR(128) NOT NULL COMMENT '来源商品编码', + source_flow_id VARCHAR(64) NOT NULL COMMENT '来源流水字符串标识', + product_quality INT NOT NULL COMMENT '来源品质,零正品一次品,其他未知', + cell_no VARCHAR(128) NULL COMMENT '来源库位编码', + inner_batch_no VARCHAR(128) NULL COMMENT '来源内部批次号', + bill_no VARCHAR(128) NULL COMMENT '来源业务单号', + source_no VARCHAR(128) NULL COMMENT '来源关联单号', + bill_type VARCHAR(32) NULL COMMENT '来源业务类型,未验证类型不得参与正式还原', + book_qty DECIMAL(20,6) NULL COMMENT '来源记账增减量,未知为空', + book_change_qty_raw VARCHAR(64) NULL COMMENT '来源带符号变动量原文', + delta_quantity DECIMAL(20,6) NULL COMMENT '解析后的有符号实物变动量', + close_quantity DECIMAL(20,6) NULL COMMENT '对应库位批次品质链的结存', + source_create_time VARCHAR(64) NULL COMMENT '来源北京时间原文', + event_at_utc DATETIME(3) NULL COMMENT '流水发生UTC时刻,无法解析时为空', + business_date DATE NULL COMMENT '北京时间业务日期', + quantity_unit VARCHAR(16) NULL COMMENT '已确认数量单位,未知为空', + content_hash CHAR(64) NOT NULL COMMENT '当前事实内容摘要', + revision_no BIGINT NOT NULL COMMENT '同来源流水单调增加的修订号', + stage_id BIGINT NOT NULL COMMENT '当前事实对应不可变暂存证据', + first_run_id BIGINT NOT NULL COMMENT '首次观察执行尝试', + last_run_id BIGINT NOT NULL COMMENT '最近确认执行尝试', + last_observed_at DATETIME(3) NOT NULL COMMENT '最近观察UTC时刻', + validation_status VARCHAR(16) NOT NULL COMMENT '字段资格,有效或未知', + validation_reason VARCHAR(64) NULL COMMENT '数量或身份待核验原因', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_flow_source (source_account,warehouse_code,source_flow_id), + KEY idx_selfop_flow_sku (source_account,warehouse_code,customer_code,sku_code,event_at_utc), + KEY idx_selfop_flow_day (source_account,warehouse_code,business_date), + CONSTRAINT chk_selfop_flow_revision CHECK (revision_no > 0) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='自营历史库存流水最新事实,旧版本保留于暂存证据'; + +CREATE TABLE ll_selfop_inventory_day_version ( + id BIGINT NOT NULL COMMENT '不可变历史日版本标识', + source_account VARCHAR(64) NOT NULL COMMENT '受控来源账号', + warehouse_code VARCHAR(64) NOT NULL COMMENT '来源仓库编码', + business_date DATE NOT NULL COMMENT '北京时间日末所属日期', + scope_hash CHAR(64) NOT NULL COMMENT '业务范围摘要', + rule_version VARCHAR(32) NOT NULL COMMENT '日末库存还原规则版本', + build_run_id BIGINT NOT NULL COMMENT '历史重建执行尝试', + publication_group_id BIGINT NOT NULL COMMENT '必须一起切换的发布组标识', + sales_run_id BIGINT NULL COMMENT '构建时固定的销量证据版本', + anchor_run_id BIGINT NOT NULL COMMENT '固定的独立库存锚点版本', + input_hash CHAR(64) NOT NULL COMMENT '冻结流水修订与覆盖及锚点输入摘要', + evidence_json JSON NOT NULL COMMENT '固定输入清单及不可变证据引用', + status VARCHAR(16) NOT NULL COMMENT '构建中、就绪、已发布、已替代或失败', + head_slot TINYINT NULL COMMENT '当前日头为一,非当前版本为空', + valid_sku_count BIGINT NOT NULL DEFAULT 0 COMMENT '合格商品数', + unknown_sku_count BIGINT NOT NULL DEFAULT 0 COMMENT '待核验商品数', + created_at DATETIME(3) NOT NULL COMMENT '版本创建UTC时刻', + published_at DATETIME(3) NULL COMMENT '发布组提交UTC时刻', + superseded_at DATETIME(3) NULL COMMENT '被新组替代的UTC时刻', + invalidated_at DATETIME(3) NULL COMMENT '已确认输入失效的UTC时刻', + invalidation_reason VARCHAR(64) NULL COMMENT '旧版本失效原因', + rebuild_run_id BIGINT NULL COMMENT '处理失效版本的重建尝试', + PRIMARY KEY (id), + UNIQUE KEY uk_selfop_history_head (source_account,warehouse_code,business_date,head_slot), + UNIQUE KEY uk_selfop_history_build_day (build_run_id,business_date), + KEY idx_selfop_history_group (publication_group_id,status), + CONSTRAINT chk_selfop_history_head CHECK (head_slot IS NULL OR (head_slot=1 AND status='PUBLISHED')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='历史日库存不可变版本及原子发布日头'; + +CREATE TABLE ll_selfop_inventory_daily ( + day_version_id BIGINT NOT NULL COMMENT '所属历史日版本', + customer_code VARCHAR(64) NOT NULL COMMENT '来源货主编码', + sku_code VARCHAR(128) NOT NULL COMMENT '来源商品编码', + product_quality INT NOT NULL COMMENT '来源库存品质', + physical_quantity DECIMAL(20,6) NULL COMMENT '日末实物库存,未知为空,已确认零为零', + quality_status VARCHAR(16) NOT NULL COMMENT '日末资格,有效或未知', + quality_reason VARCHAR(64) NULL COMMENT '缺覆盖或锚点等未知原因', + anchor_reference BIGINT NULL COMMENT '独立库存锚点版本', + evidence_hash CHAR(64) NOT NULL COMMENT '该日计算证据摘要', + source VARCHAR(32) NOT NULL COMMENT '库存来源标记,流水还原', + PRIMARY KEY (day_version_id,customer_code,sku_code,product_quality), + KEY idx_selfop_daily_identity (customer_code,sku_code,day_version_id), + CONSTRAINT chk_selfop_daily_quantity CHECK ((quality_status='VALID' AND physical_quantity IS NOT NULL AND physical_quantity>=0) OR (quality_status='UNKNOWN' AND physical_quantity IS NULL)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='历史日末分货主商品品质实物库存'; diff --git a/output/local-schema-repair/index-repair.json b/output/local-schema-repair/index-repair.json new file mode 100644 index 000000000..1044ee558 --- /dev/null +++ b/output/local-schema-repair/index-repair.json @@ -0,0 +1,100 @@ +[ + { + "db": "baiyue_firstleg", + "baselineTables": 131, + "missingColumns": [], + "missingIndexes": [ + "fl_container_booking.uk_container_booking_ocean_container", + "fl_container_booking.idx_container_booking_container_no", + "fl_container_booking.idx_container_booking_merge", + "fl_container_booking.idx_container_booking_transit_summary", + "fl_container_fee_detail.idx_container_fee_review", + "fl_container_transport_history.uk_container_transport_history_operation", + "fl_customer_charge_rule.idx_charge_rule_initialization", + "fl_inbound_order.idx_inbound_smart_loading", + "fl_inbound_measurement.idx_measure_inbound_status_id", + "fl_loading_plan_item.uk_loading_item_plan_assignment", + "fl_loading_plan_item.idx_loading_item_candidate", + "fl_loading_plan_item.idx_loading_item_pallet", + "fl_ocean_booking.uk_ocean_booking_bill_of_lading", + "fl_carrier_schedule_node_fact.idx_container_shipping_node_timeline", + "fl_truck_appointment.uk_truck_active_ocean_booking", + "fl_truck_appointment.idx_truck_appointment_ocean", + "fl_inbound_measurement_item.idx_measure_item_candidate", + "fl_inbound_split_item.idx_inbound_split_candidate" + ], + "appliedIndexes": [ + "fl_container_booking.uk_container_booking_ocean_container", + "fl_container_booking.idx_container_booking_container_no", + "fl_container_booking.idx_container_booking_merge", + "fl_container_booking.idx_container_booking_transit_summary", + "fl_container_fee_detail.idx_container_fee_review", + "fl_container_transport_history.uk_container_transport_history_operation", + "fl_customer_charge_rule.idx_charge_rule_initialization", + "fl_inbound_order.idx_inbound_smart_loading", + "fl_inbound_measurement.idx_measure_inbound_status_id", + "fl_loading_plan_item.uk_loading_item_plan_assignment", + "fl_loading_plan_item.idx_loading_item_candidate", + "fl_loading_plan_item.idx_loading_item_pallet", + "fl_ocean_booking.uk_ocean_booking_bill_of_lading", + "fl_carrier_schedule_node_fact.idx_container_shipping_node_timeline", + "fl_truck_appointment.uk_truck_active_ocean_booking", + "fl_truck_appointment.idx_truck_appointment_ocean", + "fl_inbound_measurement_item.idx_measure_item_candidate", + "fl_inbound_split_item.idx_inbound_split_candidate" + ], + "blockedIndexes": [] + }, + { + "db": "baiyue_lastleg", + "baselineTables": 218, + "missingColumns": [], + "missingIndexes": [ + "ll_cargo_discard_item.uk_ll_discard_position_sku", + "ll_dispatch_draft_container.uk_ll_dispatch_draft_container_sequence", + "ll_dispatch_order.uk_dispatch_trip", + "ll_dispatch_pallet_lock.uk_ll_dispatch_active_warehouse_pallet", + "ll_dispatch_pda_pick_order.idx_dispatch_pick_return_receipt", + "ll_dropship_order_profile.idx_ll_dropship_profile_manifest", + "ll_dropship_sku_inventory.uk_ll_dropship_sku_inventory", + "ll_exception_order.idx_ll_exception_delivery_return", + "ll_exception_return_item.uk_ll_exception_return_carton", + "ll_inbound_fba_appointment.idx_ll_fba_appointment_planned", + "ll_inbound_fba_appointment_item.idx_ll_fba_active_source", + "ll_inbound_fba_appointment_item.idx_ll_fba_active_order", + "ll_inbound_plan.uk_ll_inbound_plan_source_order", + "ll_inbound_plan_pallet.idx_ll_inbound_pallet_no", + "ll_outbound_pallet_item.uk_outbound_source_attribution", + "ll_overseas_procurement_fee.uk_ll_procurement_fee_version", + "ll_fleet_trip_dispatch.uk_fleet_trip_dispatch_trip", + "ll_warehouse_transfer_inventory_allocation.idx_ll_wh_transfer_allocation_position", + "ll_return_packing_plan.idx_ll_return_packing_plan_warehouse" + ], + "appliedIndexes": [ + "ll_cargo_discard_item.uk_ll_discard_position_sku", + "ll_dispatch_draft_container.uk_ll_dispatch_draft_container_sequence", + "ll_dispatch_order.uk_dispatch_trip", + "ll_dispatch_pallet_lock.uk_ll_dispatch_active_warehouse_pallet", + "ll_dispatch_pda_pick_order.idx_dispatch_pick_return_receipt", + "ll_dropship_order_profile.idx_ll_dropship_profile_manifest", + "ll_dropship_sku_inventory.uk_ll_dropship_sku_inventory", + "ll_exception_order.idx_ll_exception_delivery_return", + "ll_exception_return_item.uk_ll_exception_return_carton", + "ll_inbound_fba_appointment.idx_ll_fba_appointment_planned", + "ll_inbound_fba_appointment_item.idx_ll_fba_active_source", + "ll_inbound_fba_appointment_item.idx_ll_fba_active_order", + "ll_inbound_plan_pallet.idx_ll_inbound_pallet_no", + "ll_outbound_pallet_item.uk_outbound_source_attribution", + "ll_overseas_procurement_fee.uk_ll_procurement_fee_version", + "ll_fleet_trip_dispatch.uk_fleet_trip_dispatch_trip", + "ll_warehouse_transfer_inventory_allocation.idx_ll_wh_transfer_allocation_position", + "ll_return_packing_plan.idx_ll_return_packing_plan_warehouse" + ], + "blockedIndexes": [ + { + "index": "ll_inbound_plan.uk_ll_inbound_plan_source_order", + "reason": "ERROR 1062 (23000) at line 1: Duplicate entry '10001-0' for key 'll_inbound_plan.uk_ll_inbound_plan_source_order'\r\n" + } + ] + } +] \ No newline at end of file diff --git a/output/local-schema-repair/initial-plan.json b/output/local-schema-repair/initial-plan.json new file mode 100644 index 000000000..9500fd24e --- /dev/null +++ b/output/local-schema-repair/initial-plan.json @@ -0,0 +1,267 @@ +{ + "baselineTables": 218, + "actualTables": 170, + "addedTables": [ + "ll_dispatch_draft_command", + "ll_dispatch_history", + "ll_return_carton_stock_receipt", + "ll_fba_receiving_agreement", + "ll_fba_receiving_member", + "ll_fba_receiving_change", + "ll_fba_receiving_revision", + "ll_fba_receiving_plan", + "ll_appointment_cargo_verification", + "ll_fba_appointment_command", + "ll_appointment_followup", + "ll_dispatch_command", + "ll_dispatch_delivery_arrangement", + "ll_delivery_facts_changed", + "event_delivery_retry_audit", + "ll_procurement_wallet_attempt", + "ll_procurement_flow", + "ll_procurement_command", + "ll_procurement_budget_authorization", + "ll_procurement_receipt", + "ll_procurement_disposition", + "ll_procurement_manifest", + "ll_procurement_carton", + "ll_procurement_carton_source", + "ll_procurement_shipment", + "ll_procurement_shipment_item", + "ll_procurement_label_set", + "ll_procurement_label_item", + "ll_procurement_estimate_review", + "ll_procurement_repack", + "ll_procurement_fee_correction", + "ll_procurement_fee_correction_item", + "ll_procurement_control_note", + "ll_procurement_closure", + "ll_procurement_closure_item", + "ll_selfop_outbound_discovery_scope", + "ll_selfop_sync_scope", + "ll_selfop_sync_task", + "ll_selfop_sync_run", + "ll_selfop_sync_stage", + "ll_selfop_outbound_order", + "ll_selfop_outbound_item", + "ll_selfop_inventory_snapshot", + "ll_selfop_sku_daily_sales", + "ll_selfop_warehouse_daily_sales", + "ll_selfop_sku_profile", + "ll_appointment_impact", + "ll_appointment_impact_history", + "ll_selfop_owner", + "ll_selfop_product", + "ll_selfop_inventory_flow", + "ll_selfop_inventory_day_version", + "ll_selfop_inventory_daily" + ], + "addedColumns": [ + "ll_cargo_discard_carton.source_type", + "ll_dispatch_draft.warehouse_id", + "ll_dispatch_draft.record_version", + "ll_dispatch_draft.sources_json", + "ll_dispatch_draft_container.source_keys_json", + "ll_dispatch_item.customer_name", + "ll_dispatch_item.source_key", + "ll_dispatch_item.source_version", + "ll_dispatch_item.source_snapshot_json", + "ll_dispatch_order.trip_id", + "ll_dispatch_order.overseas_warehouse_code", + "ll_dispatch_order.stage", + "ll_dispatch_order.record_version", + "ll_dispatch_order.cargo_revision", + "ll_dispatch_order.cargo_hash", + "ll_dispatch_order.review_state", + "ll_dispatch_order.review_round", + "ll_dispatch_order.review_basis_hash", + "ll_dispatch_order.dispatch_review_json", + "ll_dispatch_order.loading_review_json", + "ll_dispatch_order.resources_json", + "ll_dispatch_order.planned_departure_at", + "ll_dispatch_order.loading_completed_at", + "ll_dispatch_order.loading_completion_hash", + "ll_dispatch_order.loading_confirmation_json", + "ll_dispatch_order.arrangement_key", + "ll_dispatch_order.arrangement_business_hash", + "ll_dispatch_order.departed_at", + "ll_dispatch_order.delivery_completed_at", + "ll_dispatch_order.remark", + "ll_dispatch_pallet_lock.active_warehouse_pallet_id", + "ll_dropship_carton.product_quantity", + "ll_dropship_order_profile.manifest_version", + "ll_dropship_order_profile.manifest_package_count", + "ll_dropship_order_profile.manifest_fragment_count", + "ll_dropship_order_profile.manifest_hash", + "ll_exception_order.return_context_json", + "ll_exception_return_item.return_carton_id", + "ll_exception_return_item.return_carton_mark", + "ll_exception_return_item.received_packages", + "ll_inbound_fba_appointment.confirmation_no", + "ll_inbound_fba_appointment.planned_date", + "ll_inbound_fba_appointment.planned_at", + "ll_inbound_fba_appointment.planned_end_at", + "ll_inbound_fba_appointment.appointment_start_utc", + "ll_inbound_fba_appointment.appointment_end_utc", + "ll_inbound_fba_appointment.timezone", + "ll_inbound_fba_appointment.origin_warehouse_id", + "ll_inbound_fba_appointment.replacement_keys_json", + "ll_inbound_fba_appointment.repartition_reason", + "ll_inbound_fba_appointment_item.cargo_verification_version", + "ll_inbound_fba_appointment_item.shipment_references_json", + "ll_local_looseboard_order.product_name", + "ll_local_looseboard_order.origin_contact_name", + "ll_local_looseboard_order.destination_contact_name", + "ll_local_looseboard_order.pickup_at", + "ll_outbound_pallet_item.dispatch_item_id", + "ll_outbound_pallet_item.source_attribution_id", + "ll_outbound_pallet_item.source_order_id", + "ll_outbound_pallet_item.source_inventory_position_id", + "ll_outbound_pallet_item.source_return_receipt_id", + "ll_outbound_pallet_item.source_return_carton_id", + "ll_overseas_procurement_fee.purpose", + "ll_overseas_procurement_fee.confirmation_origin", + "ll_overseas_procurement_fee.fee_version", + "ll_overseas_procurement_fee.active", + "ll_overseas_procurement_fee.determination", + "ll_overseas_procurement_fee.original_currency", + "ll_overseas_procurement_fee.original_amount", + "ll_overseas_procurement_fee.exchange_rate", + "ll_overseas_procurement_fee.exchange_rate_month", + "ll_overseas_procurement_fee.business_date", + "ll_overseas_procurement_fee.wallet_business_id", + "ll_overseas_procurement_fee.wallet_business_no", + "ll_overseas_procurement_fee.wallet_hold_id", + "ll_overseas_procurement_fee.wallet_ledger_id", + "ll_overseas_procurement_fee.settled_command_event_id", + "ll_overseas_procurement_fee.source_fee_id", + "ll_overseas_procurement_fee.parent_fee_id", + "ll_overseas_procurement_fee.request_hash", + "ll_overseas_procurement_status_history.operation_type", + "ll_overseas_procurement_status_history.change_detail", + "ll_receiving_container_session.source_container_booking_id", + "ll_receiving_container_session.container_fact_hash", + "ll_receiving_container_session.overseas_warehouse_code", + "ll_us_truck_order.vehicle_type", + "ll_us_truck_order.origin_contact_name", + "ll_us_truck_order.origin_contact_phone", + "ll_us_truck_order.destination_contact_name", + "ll_us_truck_order.destination_contact_phone", + "ll_us_truck_order.pickup_at", + "ll_us_truck_order.delivery_at" + ], + "unsafe": [ + { + "table": "ll_dispatch_draft", + "column": "warehouse_id", + "count": 11, + "definition": "warehouse_id BIGINT NOT NULL COMMENT '本草稿唯一起运公共仓库引用'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dispatch_draft", + "column": "sources_json", + "count": 11, + "definition": "sources_json LONGTEXT NOT NULL COMMENT '服务端核验的真实来源及客户版本快照数组'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dispatch_draft_container", + "column": "source_keys_json", + "count": 7, + "definition": "source_keys_json LONGTEXT NOT NULL COMMENT '本装车容器已取得本草稿占用的来源键数组'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dispatch_item", + "column": "source_key", + "count": 60, + "definition": "source_key VARCHAR(255) NOT NULL COMMENT '本条货物稳定权威来源键'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dispatch_item", + "column": "source_version", + "count": 60, + "definition": "source_version CHAR(64) NOT NULL COMMENT '选货时核对的真实来源版本摘要'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dispatch_item", + "column": "source_snapshot_json", + "count": 60, + "definition": "source_snapshot_json JSON NOT NULL COMMENT '本条货物不可变来源及关联事实快照'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dispatch_order", + "column": "trip_id", + "count": 48, + "definition": "trip_id BIGINT NOT NULL COMMENT '本趟唯一车辆资源记录ID'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dispatch_order", + "column": "cargo_hash", + "count": 48, + "definition": "cargo_hash CHAR(64) NOT NULL COMMENT '当前整车真实货物及来源摘要'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dropship_carton", + "column": "product_quantity", + "count": 83, + "definition": "product_quantity bigint NOT NULL COMMENT '该箱实收商品件数'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dropship_order_profile", + "column": "manifest_version", + "count": 17, + "definition": "manifest_version int NOT NULL COMMENT '整托清单版本'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dropship_order_profile", + "column": "manifest_package_count", + "count": 17, + "definition": "manifest_package_count int NOT NULL COMMENT '整托总箱数'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dropship_order_profile", + "column": "manifest_fragment_count", + "count": 17, + "definition": "manifest_fragment_count int NOT NULL COMMENT '整托客户分片总数'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_dropship_order_profile", + "column": "manifest_hash", + "count": 17, + "definition": "manifest_hash char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '整托完整清单摘要'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_overseas_procurement_status_history", + "column": "operation_type", + "count": 9, + "definition": "operation_type varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型:CREATE、REVIEW或UPDATE'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_receiving_container_session", + "column": "source_container_booking_id", + "count": 1, + "definition": "source_container_booking_id varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定来源柜预订ID'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_receiving_container_session", + "column": "container_fact_hash", + "count": 1, + "definition": "container_fact_hash varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '领取时整柜订单与计划事实摘要'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + } + ] +} \ No newline at end of file diff --git a/output/local-schema-repair/node-fact-before.tsv b/output/local-schema-repair/node-fact-before.tsv new file mode 100644 index 000000000..5797c2a74 --- /dev/null +++ b/output/local-schema-repair/node-fact-before.tsv @@ -0,0 +1,2 @@ +Table Create Table +fl_carrier_schedule_node_fact CREATE TABLE `fl_carrier_schedule_node_fact` (\n `id` bigint unsigned NOT NULL COMMENT '标准船节点事实ID',\n `query_id` bigint unsigned NOT NULL COMMENT '所属查询任务ID',\n `event_key` varchar(192) NOT NULL COMMENT '供应商编码与供应商事件ID组成的幂等键',\n `provider_code` varchar(32) NOT NULL COMMENT '轨迹供应商编码',\n `provider_event_id` varchar(128) NOT NULL COMMENT '供应商稳定事件ID',\n `provider_node_code` varchar(64) NOT NULL COMMENT '供应商原始节点编码',\n `standard_node` varchar(32) NOT NULL COMMENT '标准船节点',\n `node_sequence` int unsigned NOT NULL COMMENT '标准节点单调序号',\n `observed_at` datetime(3) NOT NULL COMMENT '供应商观测时间',\n `estimated_at` datetime(3) DEFAULT NULL COMMENT '供应商预计发生时间',\n `actual_at` datetime(3) DEFAULT NULL COMMENT '供应商确认实际发生时间',\n `location_code` varchar(32) DEFAULT NULL COMMENT '节点地点编码',\n `location_name` varchar(128) DEFAULT NULL COMMENT '节点地点名称',\n `source_reference` varchar(500) DEFAULT NULL COMMENT '可审计来源引用',\n `raw_payload_hash` char(64) NOT NULL COMMENT '原始响应SHA-256;不保存敏感原文',\n `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '事实入库时间',\n `container_booking_id` bigint unsigned NOT NULL COMMENT '所属真实货柜ID',\n PRIMARY KEY (`id`),\n UNIQUE KEY `uk_carrier_schedule_node_event` (`query_id`,`event_key`),\n KEY `idx_carrier_schedule_node_timeline` (`query_id`,`node_sequence`,`observed_at`,`id`),\n KEY `idx_container_shipping_node_timeline` (`container_booking_id`,`observed_at`,`id`),\n CONSTRAINT `fk_carrier_schedule_node_query` FOREIGN KEY (`query_id`) REFERENCES `fl_carrier_schedule_query` (`id`),\n CONSTRAINT `chk_carrier_schedule_node_sequence` CHECK ((`node_sequence` in (10,20,30,40,50,60,70,80,90,100))),\n CONSTRAINT `chk_carrier_schedule_node_standard` CHECK ((`standard_node` in (_utf8mb4'DEPARTED_WAREHOUSE',_utf8mb4'AT_ORIGIN_PORT',_utf8mb4'LOADED_ON_VESSEL',_utf8mb4'DEPARTED_ORIGIN_PORT',_utf8mb4'IN_TRANSIT',_utf8mb4'ARRIVED_DESTINATION_PORT',_utf8mb4'DISCHARGED_FROM_VESSEL',_utf8mb4'PICKUP_READY',_utf8mb4'PICKED_UP',_utf8mb4'EMPTY_RETURNED')))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='供应商标准船节点不可变事实' diff --git a/output/local-schema-repair/pda-task-check-before.tsv b/output/local-schema-repair/pda-task-check-before.tsv new file mode 100644 index 000000000..d2036f31a --- /dev/null +++ b/output/local-schema-repair/pda-task-check-before.tsv @@ -0,0 +1,2 @@ +CONSTRAINT_NAME CHECK_CLAUSE +chk_loading_pick_task_status (`task_status` in (_utf8mb4\\'LOADING\\',_utf8mb4\\'COMPLETED\\')) diff --git a/output/local-schema-repair/pda-task-trigger-before.tsv b/output/local-schema-repair/pda-task-trigger-before.tsv new file mode 100644 index 000000000..4a73f324f --- /dev/null +++ b/output/local-schema-repair/pda-task-trigger-before.tsv @@ -0,0 +1,2 @@ +Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created +trg_loading_pick_task_before_update ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER `trg_loading_pick_task_before_update` BEFORE UPDATE ON `fl_loading_pick_task` FOR EACH ROW BEGIN IF OLD.task_status = 'COMPLETED' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '已完成PDA拣货任务不可修改'; END IF; IF NEW.loading_plan_id <> OLD.loading_plan_id OR NOT (NEW.container_booking_id <=> OLD.container_booking_id) OR NOT (NEW.cabinet_no <=> OLD.cabinet_no) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PDA拣货任务稳定归属不可修改'; END IF; IF NOT (OLD.task_status = 'LOADING' AND NEW.task_status IN ('LOADING', 'COMPLETED')) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PDA拣货任务状态只允许完成'; END IF; END utf8mb4 utf8mb4_0900_ai_ci utf8mb4_0900_ai_ci 2026-08-27 14:02:32.25 diff --git a/output/local-schema-repair/pda-task-trigger-fix.sql b/output/local-schema-repair/pda-task-trigger-fix.sql new file mode 100644 index 000000000..59b0234ab --- /dev/null +++ b/output/local-schema-repair/pda-task-trigger-fix.sql @@ -0,0 +1,22 @@ +DROP TRIGGER IF EXISTS trg_loading_pick_task_before_update; +DELIMITER $$ +CREATE TRIGGER trg_loading_pick_task_before_update +BEFORE UPDATE ON fl_loading_pick_task +FOR EACH ROW +BEGIN + IF OLD.task_status = 'COMPLETED' THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '已完成PDA拣货任务不可修改'; + END IF; + IF NEW.loading_plan_id <> OLD.loading_plan_id + OR NOT (NEW.container_booking_id <=> OLD.container_booking_id) + OR NOT (NEW.cabinet_no <=> OLD.cabinet_no) THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PDA拣货任务稳定归属不可修改'; + END IF; + IF NOT ((OLD.task_status = 'LOADING' AND NEW.task_status IN ('LOADING','COMPLETING')) + OR (OLD.task_status = 'COMPLETING' AND NEW.task_status IN ('COMPLETING','COMPLETION_FAILED','COMPLETED')) + OR (OLD.task_status = 'COMPLETION_FAILED' AND NEW.task_status = 'COMPLETING')) THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PDA拣货任务状态流转非法'; + END IF; +END$$ +DELIMITER ; + diff --git a/output/local-schema-repair/plan.json b/output/local-schema-repair/plan.json new file mode 100644 index 000000000..bf2ecdd6c --- /dev/null +++ b/output/local-schema-repair/plan.json @@ -0,0 +1,119 @@ +{ + "baselineTables": 218, + "actualTables": 180, + "addedTables": [ + "ll_appointment_followup", + "ll_dispatch_command", + "ll_dispatch_delivery_arrangement", + "ll_delivery_facts_changed", + "event_delivery_retry_audit", + "ll_procurement_wallet_attempt", + "ll_procurement_flow", + "ll_procurement_command", + "ll_procurement_budget_authorization", + "ll_procurement_receipt", + "ll_procurement_disposition", + "ll_procurement_manifest", + "ll_procurement_carton", + "ll_procurement_carton_source", + "ll_procurement_shipment", + "ll_procurement_shipment_item", + "ll_procurement_label_set", + "ll_procurement_label_item", + "ll_procurement_estimate_review", + "ll_procurement_repack", + "ll_procurement_fee_correction", + "ll_procurement_fee_correction_item", + "ll_procurement_control_note", + "ll_procurement_closure", + "ll_procurement_closure_item", + "ll_selfop_outbound_discovery_scope", + "ll_selfop_sync_scope", + "ll_selfop_sync_task", + "ll_selfop_sync_run", + "ll_selfop_sync_stage", + "ll_selfop_outbound_order", + "ll_selfop_outbound_item", + "ll_selfop_inventory_snapshot", + "ll_selfop_sku_daily_sales", + "ll_selfop_warehouse_daily_sales", + "ll_selfop_sku_profile", + "ll_appointment_impact", + "ll_appointment_impact_history", + "ll_selfop_owner", + "ll_selfop_product", + "ll_selfop_inventory_flow", + "ll_selfop_inventory_day_version", + "ll_selfop_inventory_daily" + ], + "addedColumns": [ + "ll_local_looseboard_order.product_name", + "ll_local_looseboard_order.estimated_pallet_count", + "ll_local_looseboard_order.origin_contact_name", + "ll_local_looseboard_order.origin_contact_phone", + "ll_local_looseboard_order.destination_contact_name", + "ll_local_looseboard_order.destination_contact_phone", + "ll_local_looseboard_order.pickup_at", + "ll_local_looseboard_order.delivery_at", + "ll_outbound_pallet_item.dispatch_item_id", + "ll_outbound_pallet_item.source_attribution_id", + "ll_outbound_pallet_item.source_order_id", + "ll_outbound_pallet_item.source_inventory_position_id", + "ll_outbound_pallet_item.source_return_receipt_id", + "ll_outbound_pallet_item.source_return_carton_id", + "ll_overseas_procurement_fee.purpose", + "ll_overseas_procurement_fee.confirmation_origin", + "ll_overseas_procurement_fee.fee_version", + "ll_overseas_procurement_fee.active", + "ll_overseas_procurement_fee.determination", + "ll_overseas_procurement_fee.original_currency", + "ll_overseas_procurement_fee.original_amount", + "ll_overseas_procurement_fee.exchange_rate", + "ll_overseas_procurement_fee.exchange_rate_month", + "ll_overseas_procurement_fee.business_date", + "ll_overseas_procurement_fee.wallet_business_id", + "ll_overseas_procurement_fee.wallet_business_no", + "ll_overseas_procurement_fee.wallet_hold_id", + "ll_overseas_procurement_fee.wallet_ledger_id", + "ll_overseas_procurement_fee.settled_command_event_id", + "ll_overseas_procurement_fee.source_fee_id", + "ll_overseas_procurement_fee.parent_fee_id", + "ll_overseas_procurement_fee.request_hash", + "ll_overseas_procurement_status_history.operation_type", + "ll_overseas_procurement_status_history.change_detail", + "ll_receiving_container_session.source_container_booking_id", + "ll_receiving_container_session.container_fact_hash", + "ll_receiving_container_session.overseas_warehouse_code", + "ll_return_inventory_outbound_movement.return_sku_quantity", + "ll_us_truck_order.vehicle_type", + "ll_us_truck_order.origin_contact_name", + "ll_us_truck_order.origin_contact_phone", + "ll_us_truck_order.destination_contact_name", + "ll_us_truck_order.destination_contact_phone", + "ll_us_truck_order.pickup_at", + "ll_us_truck_order.delivery_at" + ], + "unsafe": [ + { + "table": "ll_overseas_procurement_status_history", + "column": "operation_type", + "count": 9, + "definition": "operation_type varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型:CREATE、REVIEW或UPDATE'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_receiving_container_session", + "column": "source_container_booking_id", + "count": 1, + "definition": "source_container_booking_id varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定来源柜预订ID'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + }, + { + "table": "ll_receiving_container_session", + "column": "container_fact_hash", + "count": 1, + "definition": "container_fact_hash varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '领取时整柜订单与计划事实摘要'", + "handling": "历史行保留NULL,不伪造业务事实;新写入由应用校验" + } + ] +} \ No newline at end of file diff --git a/output/local-schema-repair/repair.mjs b/output/local-schema-repair/repair.mjs new file mode 100644 index 000000000..4b38f5d62 --- /dev/null +++ b/output/local-schema-repair/repair.mjs @@ -0,0 +1,52 @@ +import fs from 'node:fs'; +import {spawnSync} from 'node:child_process'; +const dir = new URL('./', import.meta.url); +const schema=process.argv.includes('--firstleg')?'baiyue_firstleg':'baiyue_lastleg'; +const prefix=schema==='baiyue_firstleg'?'firstleg-':''; +function definitions(body) { + let depth=0,quote='',start=0;const parts=[]; + for(let i=0;i0 && /NOT NULL/i.test(definition) && !/DEFAULT|AUTO_INCREMENT/i.test(definition)) { + unsafe.push({table,column:field[1],count,definition,handling:'历史行保留NULL,不伪造业务事实;新写入由应用校验'}); + appliedDefinition=definition.replace(/NOT NULL/i,'NULL'); + } + plan.push('ALTER TABLE `'+table+'` ADD COLUMN '+appliedDefinition+';');addedColumns.push(table+'.'+field[1]); + } +} +const report={baselineTables:tables.length,actualTables:current.size,addedTables,addedColumns,unsafe}; +fs.writeFileSync(new URL(prefix+'plan.json',dir),JSON.stringify(report,null,2)); +fs.writeFileSync(new URL(prefix+'incremental.sql',dir),'-- 本地服务结构补齐;仅创建缺失表、添加缺失字段,不删除现有数据。\nSET NAMES utf8mb4;\n'+plan.join('\n\n')+'\n'); +console.log(JSON.stringify(report,null,2)); +if(process.argv.includes('--apply')) { + mysql('SET SESSION lock_wait_timeout=15;\n'+plan.join('\n'));fs.appendFileSync(new URL(prefix+'applied.log',dir),`${new Date().toISOString()} ${plan.length} DDL applied\n`); + console.log('APPLIED '+plan.length); +} diff --git a/output/local-schema-repair/restart-firstleg-customs.ps1 b/output/local-schema-repair/restart-firstleg-customs.ps1 new file mode 100644 index 000000000..e4584faaa --- /dev/null +++ b/output/local-schema-repair/restart-firstleg-customs.ps1 @@ -0,0 +1,27 @@ +$ErrorActionPreference='Stop' +$repo='D:\project\baiyue-firstleg' +. "$repo\scripts\local-env.ps1" +$env:LASTLEG_DB_PASSWORD=$env:AUTH_DB_PASSWORD +$env:LASTLEG_DB_USERNAME='root' +$env:LASTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_lastleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:FIRSTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_firstleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:WAREHOUSE_SERVICE_URL='http://127.0.0.1:9205' +$env:ORDER_SERVICE_URL='http://127.0.0.1:9204' +$env:FILE_SERVICE_URL='http://127.0.0.1:9206' +$env:DOMESTIC_WAREHOUSE_URL='http://127.0.0.1:9205' +$env:WAREHOUSE_OVERSEAS_SERVICE_URL='http://127.0.0.1:9305' +$env:FIRSTLEG_SERVICE_URL='http://127.0.0.1:9202' +$env:LASTLEG_SERVICE_URL='http://127.0.0.1:9303' +foreach($entry in @(@{Port=9202;Name='firstleg'})) { + $entry.Id=(Get-NetTCPConnection -LocalPort $entry.Port -State Listen | Select-Object -First 1).OwningProcess + $process=Get-CimInstance Win32_Process -Filter "ProcessId=$($entry.Id)" + if(!$process -or $process.CommandLine -notmatch "com\.baiyue\.$($entry.Name)\.") {throw '原服务进程身份不匹配'} + $cp=[regex]::Match($process.CommandLine,'(?:-classpath|-cp)\s+(?:"([^"]+)"|(\S+))') + $classpath=if($cp.Groups[1].Success){$cp.Groups[1].Value}else{$cp.Groups[2].Value} + $main=[regex]::Match($process.CommandLine,'com\.baiyue\.[\w.]+Application').Value + if(!$classpath -or !$main){throw '无法保留原服务启动类路径'} + Stop-Process -Id $entry.Id + $new=Start-Process -FilePath $process.ExecutablePath -ArgumentList "-Dfile.encoding=UTF-8 -Xmx1024m -cp `"$classpath`" $main" -WorkingDirectory $repo -WindowStyle Hidden -PassThru -RedirectStandardOutput "$PSScriptRoot\$($entry.Name)-tabs-runtime.log" -RedirectStandardError "$PSScriptRoot\$($entry.Name)-tabs-runtime.err.log" + "$($entry.Name) PID=$($new.Id)" +} + diff --git a/output/local-schema-repair/restart-lastleg-flow.ps1 b/output/local-schema-repair/restart-lastleg-flow.ps1 new file mode 100644 index 000000000..883fb1bbf --- /dev/null +++ b/output/local-schema-repair/restart-lastleg-flow.ps1 @@ -0,0 +1,27 @@ +$ErrorActionPreference='Stop' +$repo='D:\project\baiyue-firstleg' +. "$repo\scripts\local-env.ps1" +$env:LASTLEG_DB_PASSWORD=$env:AUTH_DB_PASSWORD +$env:LASTLEG_DB_USERNAME='root' +$env:LASTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_lastleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:FIRSTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_firstleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:WAREHOUSE_SERVICE_URL='http://127.0.0.1:9205' +$env:ORDER_SERVICE_URL='http://127.0.0.1:9204' +$env:FILE_SERVICE_URL='http://127.0.0.1:9206' +$env:DOMESTIC_WAREHOUSE_URL='http://127.0.0.1:9205' +$env:WAREHOUSE_OVERSEAS_SERVICE_URL='http://127.0.0.1:9305' +$env:FIRSTLEG_SERVICE_URL='http://127.0.0.1:9202' +$env:LASTLEG_SERVICE_URL='http://127.0.0.1:9303' +foreach($entry in @(@{Port=9303;Name='lastleg'})) { + $entry.Id=(Get-NetTCPConnection -LocalPort $entry.Port -State Listen | Select-Object -First 1).OwningProcess + $process=Get-CimInstance Win32_Process -Filter "ProcessId=$($entry.Id)" + if(!$process -or $process.CommandLine -notmatch "com\.baiyue\.$($entry.Name)\.") {throw '原服务进程身份不匹配'} + $cp=[regex]::Match($process.CommandLine,'(?:-classpath|-cp)\s+(?:"([^"]+)"|(\S+))') + $classpath=if($cp.Groups[1].Success){$cp.Groups[1].Value}else{$cp.Groups[2].Value} + $main=[regex]::Match($process.CommandLine,'com\.baiyue\.[\w.]+Application').Value + if(!$classpath -or !$main){throw '无法保留原服务启动类路径'} + Stop-Process -Id $entry.Id + $new=Start-Process -FilePath $process.ExecutablePath -ArgumentList "-Dfile.encoding=UTF-8 -Xmx1024m -cp `"$classpath`" $main" -WorkingDirectory $repo -WindowStyle Hidden -PassThru -RedirectStandardOutput "$PSScriptRoot\$($entry.Name)-tabs-runtime.log" -RedirectStandardError "$PSScriptRoot\$($entry.Name)-tabs-runtime.err.log" + "$($entry.Name) PID=$($new.Id)" +} + diff --git a/output/local-schema-repair/restart-order-counts.ps1 b/output/local-schema-repair/restart-order-counts.ps1 new file mode 100644 index 000000000..1fbccfca7 --- /dev/null +++ b/output/local-schema-repair/restart-order-counts.ps1 @@ -0,0 +1,27 @@ +$ErrorActionPreference='Stop' +$repo='D:\project\baiyue-firstleg' +. "$repo\scripts\local-env.ps1" +$env:LASTLEG_DB_PASSWORD=$env:AUTH_DB_PASSWORD +$env:LASTLEG_DB_USERNAME='root' +$env:LASTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_lastleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:FIRSTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_firstleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:WAREHOUSE_SERVICE_URL='http://127.0.0.1:9205' +$env:ORDER_SERVICE_URL='http://127.0.0.1:9204' +$env:FILE_SERVICE_URL='http://127.0.0.1:9206' +$env:DOMESTIC_WAREHOUSE_URL='http://127.0.0.1:9205' +$env:WAREHOUSE_OVERSEAS_SERVICE_URL='http://127.0.0.1:9305' +$env:FIRSTLEG_SERVICE_URL='http://127.0.0.1:9202' +$env:LASTLEG_SERVICE_URL='http://127.0.0.1:9303' +foreach($entry in @(@{Port=9204;Name='order'})) { + $entry.Id=(Get-NetTCPConnection -LocalPort $entry.Port -State Listen | Select-Object -First 1).OwningProcess + $process=Get-CimInstance Win32_Process -Filter "ProcessId=$($entry.Id)" + if(!$process -or $process.CommandLine -notmatch "com\.baiyue\.$($entry.Name)\.") {throw '原服务进程身份不匹配'} + $cp=[regex]::Match($process.CommandLine,'(?:-classpath|-cp)\s+(?:"([^"]+)"|(\S+))') + $classpath=if($cp.Groups[1].Success){$cp.Groups[1].Value}else{$cp.Groups[2].Value} + $main=[regex]::Match($process.CommandLine,'com\.baiyue\.[\w.]+Application').Value + if(!$classpath -or !$main){throw '无法保留原服务启动类路径'} + Stop-Process -Id $entry.Id + $new=Start-Process -FilePath $process.ExecutablePath -ArgumentList "-Dfile.encoding=UTF-8 -Xmx1024m -cp `"$classpath`" $main" -WorkingDirectory $repo -WindowStyle Hidden -PassThru -RedirectStandardOutput "$PSScriptRoot\$($entry.Name)-tabs-runtime.log" -RedirectStandardError "$PSScriptRoot\$($entry.Name)-tabs-runtime.err.log" + "$($entry.Name) PID=$($new.Id)" +} + diff --git a/output/local-schema-repair/restart-tabs.ps1 b/output/local-schema-repair/restart-tabs.ps1 new file mode 100644 index 000000000..91e31ee6a --- /dev/null +++ b/output/local-schema-repair/restart-tabs.ps1 @@ -0,0 +1,27 @@ +$ErrorActionPreference='Stop' +$repo='D:\project\baiyue-firstleg' +. "$repo\scripts\local-env.ps1" +$env:LASTLEG_DB_PASSWORD=$env:AUTH_DB_PASSWORD +$env:LASTLEG_DB_USERNAME='root' +$env:LASTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_lastleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:FIRSTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_firstleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:WAREHOUSE_SERVICE_URL='http://127.0.0.1:9205' +$env:ORDER_SERVICE_URL='http://127.0.0.1:9204' +$env:FILE_SERVICE_URL='http://127.0.0.1:9206' +$env:DOMESTIC_WAREHOUSE_URL='http://127.0.0.1:9205' +$env:WAREHOUSE_OVERSEAS_SERVICE_URL='http://127.0.0.1:9305' +$env:FIRSTLEG_SERVICE_URL='http://127.0.0.1:9202' +$env:LASTLEG_SERVICE_URL='http://127.0.0.1:9303' +foreach($entry in @(@{Port=9202;Name='firstleg'},@{Port=9303;Name='lastleg'},@{Port=9204;Name='order'})) { + $entry.Id=(Get-NetTCPConnection -LocalPort $entry.Port -State Listen | Select-Object -First 1).OwningProcess + $process=Get-CimInstance Win32_Process -Filter "ProcessId=$($entry.Id)" + if(!$process -or $process.CommandLine -notmatch "com\.baiyue\.$($entry.Name)\.") {throw '原服务进程身份不匹配'} + $cp=[regex]::Match($process.CommandLine,'(?:-classpath|-cp)\s+(?:"([^"]+)"|(\S+))') + $classpath=if($cp.Groups[1].Success){$cp.Groups[1].Value}else{$cp.Groups[2].Value} + $main=[regex]::Match($process.CommandLine,'com\.baiyue\.[\w.]+Application').Value + if(!$classpath -or !$main){throw '无法保留原服务启动类路径'} + Stop-Process -Id $entry.Id + $new=Start-Process -FilePath $process.ExecutablePath -ArgumentList "-Dfile.encoding=UTF-8 -Xmx1024m -cp `"$classpath`" $main" -WorkingDirectory $repo -WindowStyle Hidden -PassThru -RedirectStandardOutput "$PSScriptRoot\$($entry.Name)-tabs-runtime.log" -RedirectStandardError "$PSScriptRoot\$($entry.Name)-tabs-runtime.err.log" + "$($entry.Name) PID=$($new.Id)" +} + diff --git a/output/local-schema-repair/restart-warehouse-flow.ps1 b/output/local-schema-repair/restart-warehouse-flow.ps1 new file mode 100644 index 000000000..473677dc1 --- /dev/null +++ b/output/local-schema-repair/restart-warehouse-flow.ps1 @@ -0,0 +1,28 @@ +$ErrorActionPreference='Stop' +$repo='D:\project\baiyue-firstleg' +. "$repo\scripts\local-env.ps1" +$env:LASTLEG_DB_PASSWORD=$env:AUTH_DB_PASSWORD +$env:LASTLEG_DB_USERNAME='root' +$env:LASTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_lastleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:FIRSTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_firstleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:WAREHOUSE_SERVICE_URL='http://127.0.0.1:9205' +$env:ORDER_SERVICE_URL='http://127.0.0.1:9204' +$env:FILE_SERVICE_URL='http://127.0.0.1:9206' +$env:DOMESTIC_WAREHOUSE_URL='http://127.0.0.1:9205' +$env:WAREHOUSE_OVERSEAS_SERVICE_URL='http://127.0.0.1:9305' +$env:FIRSTLEG_SERVICE_URL='http://127.0.0.1:9202' +$env:LASTLEG_SERVICE_URL='http://127.0.0.1:9303' +foreach($entry in @(@{Port=9205;Name='warehouse'})) { + $entry.Id=(Get-NetTCPConnection -LocalPort $entry.Port -State Listen | Select-Object -First 1).OwningProcess + $process=Get-CimInstance Win32_Process -Filter "ProcessId=$($entry.Id)" + if(!$process -or $process.CommandLine -notmatch "com\.baiyue\.$($entry.Name)\.") {throw '原服务进程身份不匹配'} + $cp=[regex]::Match($process.CommandLine,'(?:-classpath|-cp)\s+(?:"([^"]+)"|(\S+))') + $classpath=if($cp.Groups[1].Success){$cp.Groups[1].Value}else{$cp.Groups[2].Value} + $main=[regex]::Match($process.CommandLine,'com\.baiyue\.[\w.]+Application').Value + if(!$classpath -or !$main){throw '无法保留原服务启动类路径'} + Stop-Process -Id $entry.Id + $new=Start-Process -FilePath $process.ExecutablePath -ArgumentList "-Dfile.encoding=UTF-8 -Xmx1024m -cp `"$classpath`" $main" -WorkingDirectory $repo -WindowStyle Hidden -PassThru -RedirectStandardOutput "$PSScriptRoot\$($entry.Name)-tabs-runtime.log" -RedirectStandardError "$PSScriptRoot\$($entry.Name)-tabs-runtime.err.log" + "$($entry.Name) PID=$($new.Id)" +} + + diff --git a/output/local-schema-repair/restart.ps1 b/output/local-schema-repair/restart.ps1 new file mode 100644 index 000000000..b33e0d452 --- /dev/null +++ b/output/local-schema-repair/restart.ps1 @@ -0,0 +1,25 @@ +$ErrorActionPreference='Stop' +$repo='D:\project\baiyue-firstleg' +. "$repo\scripts\local-env.ps1" +$env:LASTLEG_DB_PASSWORD=$env:AUTH_DB_PASSWORD +$env:LASTLEG_DB_USERNAME='root' +$env:LASTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_lastleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:FIRSTLEG_DB_URL='jdbc:mysql://127.0.0.1:3306/baiyue_firstleg?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true' +$env:WAREHOUSE_SERVICE_URL='http://127.0.0.1:9205' +$env:ORDER_SERVICE_URL='http://127.0.0.1:9204' +$env:FILE_SERVICE_URL='http://127.0.0.1:9206' +$env:DOMESTIC_WAREHOUSE_URL='http://127.0.0.1:9205' +$env:WAREHOUSE_OVERSEAS_SERVICE_URL='http://127.0.0.1:9305' +$env:FIRSTLEG_SERVICE_URL='http://127.0.0.1:9202' +$env:LASTLEG_SERVICE_URL='http://127.0.0.1:9303' +foreach($entry in @(@{Id=73832;Name='firstleg'},@{Id=63968;Name='lastleg'})) { + $process=Get-CimInstance Win32_Process -Filter "ProcessId=$($entry.Id)" + if(!$process -or $process.CommandLine -notmatch "com\.baiyue\.$($entry.Name)\.") {throw '原服务进程身份不匹配'} + $cp=[regex]::Match($process.CommandLine,'(?:-classpath|-cp)\s+(?:"([^"]+)"|(\S+))') + $classpath=if($cp.Groups[1].Success){$cp.Groups[1].Value}else{$cp.Groups[2].Value} + $main=[regex]::Match($process.CommandLine,'com\.baiyue\.[\w.]+Application').Value + if(!$classpath -or !$main){throw '无法保留原服务启动类路径'} + Stop-Process -Id $entry.Id + $new=Start-Process -FilePath $process.ExecutablePath -ArgumentList "-Dfile.encoding=UTF-8 -Xmx1024m -cp `"$classpath`" $main" -WorkingDirectory $repo -WindowStyle Hidden -PassThru -RedirectStandardOutput "$PSScriptRoot\$($entry.Name)-runtime.log" -RedirectStandardError "$PSScriptRoot\$($entry.Name)-runtime.err.log" + "$($entry.Name) PID=$($new.Id)" +} diff --git a/output/local-schema-repair/schema-after.sql b/output/local-schema-repair/schema-after.sql new file mode 100644 index 000000000..01fe729eb --- /dev/null +++ b/output/local-schema-repair/schema-after.sql @@ -0,0 +1,9729 @@ + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `baiyue_lastleg` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `baiyue_lastleg`; +DROP TABLE IF EXISTS `backup_fba_appointment_item_20261013`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `backup_fba_appointment_item_20261013` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '绉熸埛/瀹㈡埛璐﹀彿鏍囪瘑', + `appointment_id` bigint NOT NULL, + `plan_id` bigint NOT NULL, + `line_id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '取消或失败后释放货源占用', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_fba_appointment_item_line` (`appointment_id`,`line_id`), + KEY `idx_ll_fba_appointment_item_plan` (`plan_id`), + KEY `idx_ll_fba_appointment_item_order` (`order_id`), + KEY `idx_ll_fba_item_tenant_appointment` (`customer_id`,`appointment_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='FBA appointment line snapshot'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `event_delivery_attempt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `event_delivery_attempt` ( + `attempt_id` varchar(36) NOT NULL COMMENT '本次投递租约UUID和审计主键', + `service_name` varchar(32) NOT NULL COMMENT '本库所属生产服务', + `event_type` varchar(96) NOT NULL COMMENT '白名单业务事件类型', + `entry_id` varchar(128) NOT NULL COMMENT '生产者发件箱主键', + `event_id` varchar(128) DEFAULT NULL COMMENT '合法原事件UUID或ULID;格式错误时为空', + `target_name` varchar(64) NOT NULL COMMENT '固定目标业务服务', + `started_at` datetime(3) NOT NULL COMMENT '领取及审计事务提交前的开始时间', + `finished_at` datetime(3) DEFAULT NULL COMMENT '尝试完成或租约过期恢复时间', + `duration_ms` bigint DEFAULT NULL COMMENT '尝试耗时毫秒', + `outcome` varchar(24) NOT NULL COMMENT 'STARTED/APPLIED/DUPLICATE/STALE/RETRY/DEAD/LEASE_EXPIRED', + `error_code` varchar(64) DEFAULT NULL COMMENT '有限错误类别或HTTP状态;不含载荷与令牌', + `next_retry_at` datetime(3) DEFAULT NULL COMMENT '本次失败后下次计划投递时间', + PRIMARY KEY (`attempt_id`), + KEY `idx_delivery_attempt_entry` (`service_name`,`entry_id`,`started_at`), + KEY `idx_delivery_attempt_outcome` (`outcome`,`started_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='本服务业务事件逐次投递审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `event_delivery_retry_audit`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `event_delivery_retry_audit` ( + `request_id` varchar(36) NOT NULL COMMENT '人工重试请求UUID和幂等键', + `producer_table` varchar(64) NOT NULL COMMENT '本服务发件箱表名', + `entry_id` varchar(64) NOT NULL COMMENT '发件箱记录主键', + `event_id` varchar(128) NOT NULL COMMENT '原事件全局标识', + `event_type` varchar(64) NOT NULL COMMENT '原事件类型', + `payload_hash` varchar(71) NOT NULL COMMENT '原事件不可变负载摘要', + `operator_name` varchar(128) NOT NULL COMMENT '持有运维凭据的操作人标识', + `reason` varchar(500) NOT NULL COMMENT '人工重试原因', + `previous_failures` int NOT NULL COMMENT '重试前累计失败次数', + `previous_error` varchar(1000) DEFAULT NULL COMMENT '重试前最后一次脱敏错误', + `requested_at` datetime(3) NOT NULL COMMENT '重试申请提交时间', + PRIMARY KEY (`request_id`), + KEY `idx_event_retry_entry` (`producer_table`,`entry_id`,`requested_at`), + KEY `idx_event_retry_event` (`event_id`,`requested_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='业务事件人工重试审计,与恢复待发送状态同事务提交'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_cargo_verification`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_cargo_verification` ( + `id` bigint NOT NULL COMMENT '核实记录主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原货源所属客户', + `source_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定ORDER或BOOKING原来源键', + `destination_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '核实时的原目的地', + `source_version` varchar(160) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核实时的原来源版本', + `source_packages` int DEFAULT NULL COMMENT '核实时的原来源箱数,未知为空', + `version` int NOT NULL COMMENT '同一来源的核实版本,从一递增', + `package_count` int DEFAULT NULL COMMENT '独立核实箱数,不回写原订单', + `shipment_references_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本票货件号或追踪号列表,不回写原订单', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核实说明', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '登录操作人', + `operator_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人名称快照', + `command_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源内幂等命令键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源、操作人及请求摘要', + `created_at` datetime(3) NOT NULL COMMENT '核实UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_cargo_verification_version` (`customer_id`,`source_key`,`version`), + UNIQUE KEY `uk_ll_cargo_verification_command` (`customer_id`,`source_key`,`command_key`), + CONSTRAINT `chk_ll_cargo_verification_quantity` CHECK (((`package_count` is null) or (`package_count` > 0))), + CONSTRAINT `chk_ll_cargo_verification_version` CHECK ((`version` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约货物核实资料及不可覆盖的版本历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_followup`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_followup` ( + `id` bigint NOT NULL COMMENT '预约筹划跟进记录ID', + `source_key` varchar(160) NOT NULL COMMENT '稳定ORDER、BOOKING或CONTAINER及接仓点来源键', + `customer_id` varchar(128) NOT NULL COMMENT '货源客户;整柜共享记录由服务端固定为平台作用域0', + `source_order_id` bigint DEFAULT NULL COMMENT '已形成的真实尾程货源ID,尚未生成时为空', + `stage` varchar(32) NOT NULL COMMENT '跟进对象:DRAYAGE_CONTACT/TERMINAL_APPOINTMENT/WAREHOUSE_RECEIVING/FBA_RECEIVING', + `version` int NOT NULL COMMENT '同一货源及跟进对象的记录版本', + `contacted_party` varchar(200) DEFAULT NULL COMMENT '本次联系对象,不替代承运主档', + `result` varchar(1000) NOT NULL COMMENT '本次反馈事实,不自动确认预约或推进实物作业', + `next_action` varchar(500) DEFAULT NULL COMMENT '下一步安排', + `followup_date` date DEFAULT NULL COMMENT '按业务地点当地日期记录的下次跟进日', + `operator_id` varchar(128) NOT NULL COMMENT '登录平台操作者ID', + `operator_name` varchar(200) DEFAULT NULL COMMENT '操作人姓名快照', + `command_key` varchar(64) NOT NULL COMMENT '持久幂等键', + `request_hash` char(64) NOT NULL COMMENT '含操作者身份的请求SHA256摘要', + `created_at` datetime(3) NOT NULL COMMENT 'UTC记录时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_appointment_followup_version` (`source_key`,`stage`,`version`), + UNIQUE KEY `uk_appointment_followup_command` (`source_key`,`stage`,`command_key`), + KEY `idx_appointment_followup_date` (`followup_date`,`source_order_id`), + KEY `fk_appointment_followup_order` (`source_order_id`), + CONSTRAINT `fk_appointment_followup_order` FOREIGN KEY (`source_order_id`) REFERENCES `ll_order` (`id`), + CONSTRAINT `chk_appointment_followup_stage` CHECK ((`stage` in (_utf8mb4'DRAYAGE_CONTACT',_utf8mb4'TERMINAL_APPOINTMENT',_utf8mb4'WAREHOUSE_RECEIVING',_utf8mb4'FBA_RECEIVING'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='真实在途货源的预约筹划联系记录,追加留痕'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_impact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_impact` ( + `container_booking_id` varchar(64) NOT NULL COMMENT '稳定柜次关联键,不作业务编号展示', + `impact_no` varchar(40) NOT NULL COMMENT '船期核对事项业务号', + `baseline_json` longtext NOT NULL COMMENT '已核对基准或首次变化前观察,原来源时间口径', + `latest_json` longtext NOT NULL COMMENT '最新已读取观察,未知可为JSON null', + `forecast_token` char(64) NOT NULL COMMENT '最新观察摘要,处理时防止旧预测结案', + `status` varchar(20) NOT NULL COMMENT '事项状态:MONITORING监测/OPEN待处理/RESOLVED已完成', + `reason` varchar(64) DEFAULT NULL COMMENT '预测变化或资料待核实原因', + `owner_id` varchar(128) DEFAULT NULL COMMENT '认领平台人员ID', + `owner_name` varchar(200) DEFAULT NULL COMMENT '负责人姓名快照', + `version` int NOT NULL COMMENT '观察及人工处理共同版本', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + PRIMARY KEY (`container_booking_id`), + UNIQUE KEY `uk_appointment_impact_no` (`impact_no`), + KEY `idx_appointment_impact_work` (`status`,`updated_at`), + CONSTRAINT `chk_appointment_impact_status` CHECK ((`status` in (_utf8mb4'MONITORING',_utf8mb4'OPEN',_utf8mb4'RESOLVED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一柜一个稳定船期变化核对事项,不改写预约或运输'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_impact_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_impact_history` ( + `id` bigint NOT NULL COMMENT '历史记录标识', + `container_booking_id` varchar(64) NOT NULL COMMENT '关联柜次标识', + `version` int NOT NULL COMMENT '记录版本', + `action` varchar(20) NOT NULL COMMENT '操作类型:OBSERVED观察/CLAIM认领/RECORD记录/RESOLVE完成', + `operator_id` varchar(128) NOT NULL COMMENT '操作人标识', + `operator_name` varchar(200) DEFAULT NULL COMMENT '操作人姓名', + `result` varchar(1000) DEFAULT NULL COMMENT '人工处理结果;观察记录为空', + `next_action` varchar(500) DEFAULT NULL COMMENT '下一步处理事项', + `followup_date` date DEFAULT NULL COMMENT '业务跟进日期', + `command_key` varchar(64) DEFAULT NULL COMMENT '人工命令幂等键;观察记录为空', + `request_hash` char(64) DEFAULT NULL COMMENT '请求内容摘要', + `response_json` longtext NOT NULL COMMENT '该版本完整响应快照,支持精确重放', + `created_at` datetime(3) NOT NULL COMMENT 'UTC记录时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_appointment_impact_version` (`container_booking_id`,`version`), + UNIQUE KEY `uk_appointment_impact_command` (`container_booking_id`,`operator_id`,`command_key`), + CONSTRAINT `fk_appointment_impact_history` FOREIGN KEY (`container_booking_id`) REFERENCES `ll_appointment_impact` (`container_booking_id`), + CONSTRAINT `chk_appointment_impact_action` CHECK ((`action` in (_utf8mb4'OBSERVED',_utf8mb4'CLAIM',_utf8mb4'RECORD',_utf8mb4'RESOLVE'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期观察及人工处理追加历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_work`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_work` ( + `work_item_key` varchar(96) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '不可变事项键,业务身份确定性生成', + `container_booking_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源柜次内部关联标识,不作展示编号', + `version` int NOT NULL DEFAULT '0' COMMENT '工作命令乐观锁版本', + `retired` tinyint(1) NOT NULL DEFAULT '0' COMMENT '已替代或已完成路线需求,不计活动工作', + `state_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '工作关系责任跟进及影响基线,不保存可编辑业务执行事实', + PRIMARY KEY (`work_item_key`), + KEY `idx_appointment_work_container` (`container_booking_id`,`retired`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约工作事项需求与关系'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_work_commitment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_work_commitment` ( + `entity_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原业务实体稳定键', + `state_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原业务命令产生的只读语义影响基线,不是第二份可编辑计划', + `impact_version` bigint NOT NULL DEFAULT '0' COMMENT '承诺影响单调递增版本', + PRIMARY KEY (`entity_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作事项承诺影响审计基线'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_work_guard`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_work_guard` ( + `id` int NOT NULL COMMENT '工作事项协调锁,固定1', + `scan_cursor` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '已开船来源同步游标', + `initialized` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否完成首次完整来源扫描', + `scope_version` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '完整同步已确认的权威来源集合版本', + `scan_scope_version` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前扫描来源集合版本,防跨页漂移', + `completed_at` datetime(3) DEFAULT NULL COMMENT '最近完整同步UTC时间', + `requirement_version` bigint NOT NULL DEFAULT '0' COMMENT '原域命令在同一事务推进的需求版本', + `synchronized_requirement_version` bigint NOT NULL DEFAULT '0' COMMENT '完整扫描已消费需求版本', + `scan_requirement_version` bigint NOT NULL DEFAULT '0' COMMENT '当前扫描需求版本,防跨页漂移', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约工作事项同步与命令串行守卫'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_work_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_work_history` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '历史记录标识', + `work_item_key` varchar(96) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事项稳定键', + `operator_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实操作人员标识', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人显示名称', + `action` varchar(48) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '工作命令或观察动作', + `summary` varchar(2000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理或责任变更依据', + `command_key` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请求幂等键,观察记录为空', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '包含操作者的规范请求摘要', + `response_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '原命令响应快照,重放不随当前状态改变', + `occurred_at` datetime(3) NOT NULL COMMENT '历史发生UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_appointment_work_command` (`work_item_key`,`command_key`), + KEY `idx_appointment_work_history` (`work_item_key`,`occurred_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约工作事项历史与幂等命令'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_cargo_discard_application`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_cargo_discard_application` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `discard_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `outbound_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '废弃出库单号', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_codes` varchar(2000) COLLATE utf8mb4_unicode_ci NOT NULL, + `total_packages` int NOT NULL, + `fee_per_package` decimal(18,2) NOT NULL, + `total_fee` decimal(18,2) NOT NULL, + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'USD', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_REVIEW', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `review_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核幂等键', + `review_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核请求内容哈希', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `review_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `reviewed_at` datetime(3) DEFAULT NULL, + `completed_at` datetime(3) DEFAULT NULL COMMENT '废弃完成时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `customer_confirmed_at` datetime(3) DEFAULT NULL COMMENT '客户确认完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_cargo_discard_no` (`customer_id`,`discard_no`), + UNIQUE KEY `uk_ll_cargo_discard_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_cargo_discard_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_cargo_discard_warehouse` (`customer_id`,`overseas_warehouse_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Cargo discard application requiring warehouse approval'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_cargo_discard_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_cargo_discard_carton` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `application_id` bigint NOT NULL, + `item_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `carton_id` bigint NOT NULL, + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `source_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'DROPSHIP' COMMENT '箱子来源:一件代发DROPSHIP、入仓箱INBOUND、转运箱TRANSFER', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_cargo_discard_carton` (`application_id`,`carton_id`), + KEY `idx_ll_cargo_discard_carton_application` (`customer_id`,`application_id`,`item_id`), + KEY `idx_ll_cargo_discard_carton_identity` (`customer_id`,`carton_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Cartons reserved while a cargo discard application awaits review'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_cargo_discard_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_cargo_discard_item` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `application_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_id` bigint DEFAULT NULL COMMENT '一件代发订单ID', + `source_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'DROPSHIP' COMMENT '库存来源:一件代发DROPSHIP、退货箱RETURN_CARTON', + `return_carton_id` bigint DEFAULT NULL COMMENT '退货库存箱ID', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `profile_id` bigint DEFAULT NULL COMMENT '托盘档案ID', + `sku_inventory_id` bigint DEFAULT NULL COMMENT 'SKU库存记录ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `available_packages_snapshot` int NOT NULL, + `discard_packages` int NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `actual_discard_packages` int DEFAULT NULL, + `pda_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `pda_operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pda_completed_at` datetime(3) DEFAULT NULL, + `completion_photo_file_ids` text COLLATE utf8mb4_unicode_ci COMMENT 'PDA完工照片文件ID JSON数组', + `inventory_position_id` bigint DEFAULT NULL COMMENT '废弃来源库存仓位ID', + `carton_marks_json` text COLLATE utf8mb4_unicode_ci COMMENT '本次废弃所选真实箱唛快照JSON数组', + `carton_scan_required` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否需要逐箱核对本次所选箱子', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_cargo_discard_item` (`application_id`,`profile_id`,`sku_code`), + UNIQUE KEY `uk_ll_discard_position_sku` (`application_id`,`inventory_position_id`,`sku_code`), + KEY `idx_ll_cargo_discard_item_list` (`customer_id`,`application_id`), + KEY `idx_ll_cargo_discard_item_inbound` (`customer_id`,`inbound_code`,`sku_code`), + KEY `idx_ll_cargo_discard_return_carton` (`customer_id`,`return_carton_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Frozen SKU quantities in a cargo discard application'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_cargo_discard_photo`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_cargo_discard_photo` ( + `id` bigint NOT NULL, + `customer_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `application_id` bigint NOT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `file_id` bigint NOT NULL, + `file_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `content_type` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `size_bytes` bigint NOT NULL, + `operator_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(6) NOT NULL, + `submitted_at` datetime(6) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_cargo_discard_photo_file` (`file_id`), + KEY `idx_cargo_discard_photo_application` (`customer_id`,`application_id`,`pallet_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_cargo_discard_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_cargo_discard_status_history` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `application_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_ll_cargo_discard_history` (`customer_id`,`application_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable cargo discard approval history'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_compact_number_clock`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_compact_number_clock` ( + `number_key` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务前缀和客户名称缩写', + `last_second` bigint NOT NULL COMMENT '最后分配的Unix逻辑秒', + PRIMARY KEY (`number_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外业务短单号分配时钟'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_container_arrival_time_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_container_arrival_time_operation` ( + `id` bigint NOT NULL COMMENT '柜级预计到仓时间修改操作ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定来源柜预订ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台请求幂等键', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化修改请求SHA-256摘要', + `result_version` int NOT NULL COMMENT '修改成功后的柜级时间版本', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台操作人名称', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '预计到仓时间修改备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_container_arrival_time_idempotency` (`idempotency_key`), + KEY `idx_ll_container_arrival_time_container` (`source_container_booking_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜级预计到仓时间修改幂等审计记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_container_loading_evidence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_container_loading_evidence` ( + `id` bigint NOT NULL COMMENT '海外整柜装柜照片投影ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国内稳定来源柜预订ID', + `evidence_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PHOTO_STEP_1至PHOTO_STEP_4或SEAL', + `source_file_id` bigint NOT NULL COMMENT '国内File服务文件ID', + `file_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国内文件名快照', + `created_at` datetime(3) NOT NULL COMMENT '投影创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_container_loading_evidence_type` (`source_container_booking_id`,`evidence_type`), + UNIQUE KEY `uk_ll_container_loading_evidence_file` (`source_container_booking_id`,`source_file_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外拆柜只读国内装柜照片引用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_container_plan_conversion_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_container_plan_conversion_command` ( + `id` bigint NOT NULL COMMENT '柜级转换命令ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定来源柜预订ID', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '调用方幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '确认请求SHA-256摘要', + `snapshot_version` bigint NOT NULL COMMENT '确认的柜级快照版本', + `snapshot_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '确认的柜级快照SHA-256', + `warehouse_id` bigint NOT NULL COMMENT '海外接柜仓ID', + `batch_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '海外仓托盘批次幂等键', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令状态:PREPARED/APPLYING/FAILED/LOCAL_COMMITTED/COMPLETED', + `lease_token` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前执行租约令牌,用于陈旧执行者隔离', + `preparation_json` json NOT NULL COMMENT '稳定计划号与托盘业务键快照', + `result_json` json DEFAULT NULL COMMENT '本地计划提交结果', + `last_error` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次跨服务错误', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '命令创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '命令状态或租约更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_container_conversion_command` (`source_container_booking_id`), + UNIQUE KEY `uk_ll_container_conversion_batch` (`warehouse_id`,`batch_key`), + KEY `idx_ll_container_conversion_status` (`status`,`updated_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜级入库计划转换Saga与幂等命令'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_container_shipping_gate`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_container_shipping_gate` ( + `container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源头程柜预订ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户标识', + `ocean_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源海运订舱ID', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际集装箱号', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'AWAITING_PICKUP_READY' COMMENT '海外收货门禁状态:AWAITING_PICKUP_READY、RECEIVING_AVAILABLE', + `standard_node` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最新有效标准船节点', + `node_sequence` int NOT NULL DEFAULT '0' COMMENT '最新有效节点单调序号', + `observed_at` datetime(3) DEFAULT NULL COMMENT '供应商节点观测时间', + `actual_at` datetime(3) DEFAULT NULL COMMENT '节点实际发生时间', + `location_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '节点地点编码', + `location_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '节点地点名称', + `provider_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '船节点供应商编码', + `provider_event_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商事件ID', + `provider_node_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商原始节点编码', + `source_reference` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商来源引用', + `raw_payload_hash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商原始负载SHA-256', + `aggregate_version` bigint NOT NULL DEFAULT '0' COMMENT '来源查询聚合版本', + `handover_version` bigint NOT NULL DEFAULT '1' COMMENT '跨区交接版本', + `last_event_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近采纳的跨区事件ID', + `payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近采纳事件规范化负载摘要', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`container_booking_id`), + KEY `idx_ll_shipping_gate_candidate` (`customer_id`,`container_no`,`status`), + KEY `idx_ll_shipping_gate_version` (`container_booking_id`,`aggregate_version`,`node_sequence`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA柜号船节点收货资格快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_customer_visit`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_customer_visit` ( + `id` bigint NOT NULL COMMENT '客户回访记录ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `delivery_order_id` bigint NOT NULL COMMENT '关联派送单ID', + `delivery_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '关联派送单号', + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户名称快照', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户联系人姓名快照', + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户联系人电话快照', + `destination` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送目的仓编码汇总快照', + `delivery_completed_at` datetime(3) NOT NULL COMMENT '派送完成时间', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING' COMMENT '回访状态:PENDING待回访或COMPLETED已回访', + `selected_last_mile_order_id` bigint DEFAULT NULL COMMENT '本次回访选择的尾程订单ID', + `selected_last_mile_order_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本次回访选择的尾程订单号', + `selected_inbound_order_id` bigint DEFAULT NULL COMMENT '本次回访选择的入仓单ID', + `selected_inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本次回访选择的入仓码', + `visit_result` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次回访结果', + `customer_feedback` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次客户反馈', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次回访备注', + `attachment_json` json DEFAULT NULL COMMENT '当前回访资料文件元数据列表', + `visited_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次回访操作人ID', + `visited_at` datetime(3) DEFAULT NULL COMMENT '最近一次回访时间', + `visit_count` int NOT NULL DEFAULT '0' COMMENT '累计保存回访次数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_customer_visit_delivery` (`customer_id`,`delivery_order_id`), + KEY `idx_ll_customer_visit_list` (`customer_id`,`status`,`delivery_completed_at`), + KEY `idx_ll_customer_visit_delivery_no` (`customer_id`,`delivery_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='派送单维度客户回访记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_delivery_document_revision`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_delivery_document_revision` ( + `id` bigint NOT NULL COMMENT '派送资料历史ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '派送所属客户隔离键', + `delivery_order_id` bigint NOT NULL COMMENT '派送单ID', + `version` bigint NOT NULL COMMENT '保存成功时派送单版本', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资料保存幂等键', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '完整保存请求哈希', + `snapshot_json` json NOT NULL COMMENT '不可变三类资料及BOL号结果快照', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '保存操作人ID', + `created_at` datetime(3) NOT NULL COMMENT '资料保存时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_delivery_document_command` (`customer_id`,`delivery_order_id`,`idempotency_key`), + UNIQUE KEY `uk_delivery_document_version` (`customer_id`,`delivery_order_id`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='派送资料版本历史与幂等保存记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_delivery_facts_changed`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_delivery_facts_changed` ( + `id` bigint NOT NULL COMMENT '持久信号内部主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实签收货物客户ID', + `dispatch_id` bigint NOT NULL COMMENT '整车排车主单ID', + `dispatch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实排车业务号', + `delivery_id` bigint NOT NULL COMMENT '本客户派送单ID', + `delivery_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实派送业务号', + `delivery_version` bigint NOT NULL COMMENT '触发信号的真实派送版本', + `facts_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '该版本真实签收事实摘要', + `occurred_at` datetime(3) NOT NULL COMMENT '签收事实实际发生时间', + `state` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING' COMMENT '待核对PENDING或已核对PROCESSED', + `attempt_count` int NOT NULL DEFAULT '0' COMMENT '已记录的汇总失败次数', + `next_attempt_at` datetime(3) NOT NULL COMMENT '下次可重试时间', + `last_error_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近失败诊断码不保存敏感异常正文', + `processed_at` datetime(3) DEFAULT NULL COMMENT '与主阶段汇总同事务确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_delivery_fact_version` (`customer_id`,`delivery_id`,`delivery_version`), + KEY `idx_delivery_fact_due` (`state`,`next_attempt_at`,`id`), + KEY `idx_delivery_fact_dispatch` (`dispatch_id`,`state`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='正常签收事实变化的本地持久待汇总信号'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_delivery_fee`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_delivery_fee` ( + `id` bigint NOT NULL COMMENT '派送费用主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `delivery_order_id` bigint NOT NULL COMMENT '派送单ID', + `fee_direction` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PAYABLE' COMMENT '应收应付方向', + `fee_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用类型', + `currency` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '币种', + `amount` decimal(18,2) NOT NULL COMMENT '费用金额', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '费用备注', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_delivery_fee_order` (`customer_id`,`delivery_order_id`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='派送单费用明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_delivery_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_delivery_operation` ( + `id` bigint NOT NULL COMMENT '派送操作主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `delivery_order_id` bigint NOT NULL COMMENT '派送单ID', + `operation_node` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作节点', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人ID', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人名称', + `result` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理结果', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + KEY `idx_ll_delivery_operation_order` (`customer_id`,`delivery_order_id`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='派送单操作记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_delivery_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_delivery_order` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `delivery_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `outbound_order_id` bigint NOT NULL, + `outbound_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `dispatch_order_id` bigint DEFAULT NULL COMMENT '关联派车单ID,仓储转运直接出库时为空', + `dispatch_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关联派车单号,仓储转运直接出库时为空', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外仓名称快照', + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户名称快照', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本派送单目的FBA仓ID快照', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本派送单目的FBA仓编码快照,私人仓为空', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本派送单目的FBA仓名称快照', + `destination_type` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地类型:FBA或PRIVATE', + `delivery_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓派送地址', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系人', + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系电话', + `delivery_group_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '同一出库单内按目的FBA仓拆单的稳定分组键', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'WAIT_DELIVERY', + `seller_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '卖家姓名', + `package_count` int NOT NULL DEFAULT '0', + `pallet_count` int NOT NULL DEFAULT '0', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送备注', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `version` bigint NOT NULL DEFAULT '0' COMMENT '派送单乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `waybill_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '承运运单号', + `delivery_method` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送方式', + `carrier_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送承运商', + `pickup_method` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '提货方式', + `loading_type` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '装车类型', + `vehicle_type` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '车辆类型', + `vehicle_size` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '车辆大小', + `vehicle_plate` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '车牌号', + `driver_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '司机或车队名称', + `driver_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '车队联系电话', + `appointment_account` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '预约账号', + `total_weight_kg` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '总重量(千克)', + `total_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '体积(立方米),来源未确认时为空', + `planned_delivery_at` datetime(3) DEFAULT NULL COMMENT '预计派送时间', + `dispatched_at` datetime(3) DEFAULT NULL COMMENT '实际派送时间', + `expected_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到达时间', + `signed_at` datetime(3) DEFAULT NULL COMMENT '签收时间', + `bol_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送资料BOL号,不作为文件归属标识', + `documents_json` json DEFAULT NULL COMMENT '娲鹃�佷笁绫昏祫鏂欏綋鍓嶇粦瀹氬強鏉冨▉鏂囦欢鍏冩暟鎹揩鐓�', + `postal_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓邮编', + `signed_packages` int DEFAULT NULL COMMENT '保存签收资料时冻结的实际签收箱数,不含此前已退回量', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_delivery_no` (`customer_id`,`delivery_no`), + UNIQUE KEY `uk_ll_delivery_idempotency` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_delivery_outbound_destination` (`customer_id`,`outbound_order_id`,`delivery_group_key`), + KEY `idx_ll_delivery_list` (`customer_id`,`status`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Delivery document linked to an outbound document'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_destuff_pallet_cost`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_destuff_pallet_cost` ( + `id` bigint NOT NULL COMMENT '主键ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源柜次业务ID', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '集装箱号', + `warehouse_id` bigint DEFAULT NULL COMMENT '海外仓ID', + `pallet_count` int NOT NULL COMMENT '实际打托数', + `total_actual_volume_cbm` decimal(20,6) NOT NULL COMMENT '客户实收总体积', + `total_cost` decimal(20,2) NOT NULL COMMENT '打托总成本', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '成本币种', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '生成状态', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_destuff_cost_booking` (`source_container_booking_id`), + CONSTRAINT `chk_ll_destuff_cost` CHECK (((`pallet_count` > 0) and (`total_actual_volume_cbm` > 0) and (`total_cost` > 0) and (`currency` = _utf8mb4'CNY'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='拆柜打托实际成本汇总'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_destuff_pallet_cost_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_destuff_pallet_cost_allocation` ( + `id` bigint NOT NULL COMMENT '主键ID', + `cost_id` bigint NOT NULL COMMENT '打托成本汇总ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID', + `actual_volume_cbm` decimal(20,6) NOT NULL COMMENT '客户实收体积', + `allocated_amount` decimal(20,2) NOT NULL COMMENT '客户分摊金额', + `fee_source_id` bigint NOT NULL COMMENT '海外费用来源ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_destuff_customer` (`cost_id`,`customer_id`), + UNIQUE KEY `uk_ll_destuff_fee_source` (`fee_source_id`), + CONSTRAINT `chk_ll_destuff_allocation` CHECK (((`actual_volume_cbm` > 0) and (`allocated_amount` >= 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='拆柜打托成本按客户实收体积分摊'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_appointment_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_appointment_allocation` ( + `dispatch_id` bigint NOT NULL COMMENT '排车单标识', + `dispatch_item_id` bigint NOT NULL COMMENT '排车明细标识', + `plan_pallet_id` bigint NOT NULL COMMENT '入仓计划托盘标识', + `batch_key` varchar(96) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预约稳定批次键', + `customer_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属客户标识', + `source_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '货物来源稳定键', + `destination_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目的地稳定键', + `package_count` int NOT NULL COMMENT '本票分配实物箱数', + PRIMARY KEY (`dispatch_item_id`,`batch_key`,`source_key`,`destination_key`), + KEY `idx_dispatch_appointment_batch` (`batch_key`,`customer_id`), + KEY `idx_dispatch_appointment_dispatch` (`dispatch_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='排车实物与预约批次逐票分配,原执行域事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_command` ( + `id` bigint NOT NULL COMMENT '持久命令内部主键', + `dispatch_id` bigint NOT NULL COMMENT '命令所属整车排车主单ID', + `dispatch_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令所属真实排车业务号', + `action` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次整车作业动作', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始可信操作主体ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '跨操作主体全局唯一的原始请求键', + `record_version` bigint NOT NULL COMMENT '原请求明确提交的排车版本,零为合法首版', + `command_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '绑定原主体动作业务号版本和完整载荷的严格摘要', + `result_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '按动作类型恢复的不可变成功结果JSON', + `created_at` datetime(3) NOT NULL COMMENT '成功命令记录时间,使用UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dispatch_command_key` (`idempotency_key`), + KEY `idx_dispatch_command_history` (`dispatch_id`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车公共持久命令账本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_delivery_arrangement`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_delivery_arrangement` ( + `id` bigint NOT NULL COMMENT '安排事实内部主键', + `dispatch_order_id` bigint NOT NULL COMMENT '唯一整车排车主单ID', + `dispatch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实排车业务号', + `arrangement_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次唯一安排业务事实标识', + `business_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '排除操作者及纯并发版本的安排业务摘要', + `cargo_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本车实际拣货来源摘要', + `loading_completion_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '装车完成事实摘要', + `original_command_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '首次安排的全局请求键', + `original_operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '首次安排操作主体', + `result_json` json NOT NULL COMMENT '全部客户出库及客户目的地派送不可变结果', + `cargo_json` json NOT NULL COMMENT '逐客户逐拣货归属的不可变真实来源', + `created_at` datetime(3) NOT NULL COMMENT '本次安排实际创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dispatch_arrangement_dispatch` (`dispatch_order_id`), + UNIQUE KEY `uk_dispatch_arrangement_key` (`arrangement_key`), + UNIQUE KEY `uk_dispatch_arrangement_command` (`original_command_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车唯一派送安排事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_draft`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_draft` ( + `id` bigint NOT NULL, + `draft_token` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `plan_ids_json` varchar(4000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `containers_json` longtext COLLATE utf8mb4_unicode_ci, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', + `expires_at` datetime(3) DEFAULT NULL, + `released_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `warehouse_id` bigint DEFAULT NULL COMMENT '本草稿唯一起运公共仓库引用', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '草稿并发版本,显式零版本合法', + `sources_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '服务端核验的真实来源及客户版本快照数组', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_draft_token` (`draft_token`), + KEY `idx_ll_dispatch_draft_operator` (`operator_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='智能排车草稿'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_draft_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_draft_command` ( + `id` bigint NOT NULL COMMENT '草稿命令内部主键', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '草稿操作全局唯一幂等键', + `operator_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原命令操作主体,恢复必须为本人', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '草稿创建、维护、选货、释放或转换动作', + `target_token` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令目标草稿标识或创建范围标识', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原动作、主体、版本及完整载荷摘要', + `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '本事务完成后保存的不可变原结果,不提交空结果', + `created_at` datetime(3) NOT NULL COMMENT '命令创建UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_draft_command_key` (`idempotency_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='智能排车草稿持久命令及原结果'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_draft_container`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_draft_container` ( + `id` bigint NOT NULL, + `draft_id` bigint NOT NULL, + `draft_token` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `sequence_no` int NOT NULL, + `capacity` int NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `source_keys_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '本装车容器已取得本草稿占用的来源键数组', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_draft_container_sequence` (`draft_id`,`sequence_no`), + KEY `idx_ll_dispatch_draft_container_token` (`draft_token`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='智能排车草稿装车托盘'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_history` ( + `id` bigint NOT NULL COMMENT '排车历史内部主键', + `dispatch_id` bigint NOT NULL COMMENT '本次历史所属整车主单ID', + `record_version` bigint NOT NULL COMMENT '操作完成后的整车公共版本', + `action` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次真实业务动作', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '可信操作主体ID', + `reason` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核驳回或变更原因', + `snapshot_json` json NOT NULL COMMENT '动作完成当时的完整主单事实快照', + `occurred_at` datetime(3) NOT NULL COMMENT '真实操作发生时间', + PRIMARY KEY (`id`), + KEY `idx_dispatch_history_version` (`dispatch_id`,`record_version`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车版本与审核轮次的追加历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_item` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `dispatch_order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `plan_id` bigint DEFAULT NULL, + `plan_pallet_id` bigint DEFAULT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL, + `order_id` bigint DEFAULT NULL, + `order_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `order_refs` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `package_count` int NOT NULL DEFAULT '0', + `gross_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '毛重(千克)', + `volume_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '材积重(千克)', + `volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000', + `source_stage` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PLAN or RECEIVED', + `carton_marks` varchar(4000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标箱唛映射快照', + `source_business_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源业务类型', + `source_business_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源业务单号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `destination_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的类型:FBA或PRIVATE', + `delivery_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓目的地址快照', + `postal_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓邮编快照', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系人快照', + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系电话快照', + `return_receipt_id` bigint DEFAULT NULL COMMENT '明确选用的真实退回入仓来源', + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本条真实客户名称快照', + `source_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本条货物稳定权威来源键', + `source_version` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '选货时核对的真实来源版本摘要', + `source_snapshot_json` json DEFAULT NULL COMMENT '本条货物不可变来源及关联事实快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_item_source` (`dispatch_order_id`,`plan_pallet_id`,`warehouse_pallet_id`), + KEY `idx_ll_dispatch_item_order` (`customer_id`,`order_id`), + KEY `idx_ll_dispatch_item_inbound` (`customer_id`,`inbound_code`), + KEY `idx_ll_dispatch_item_pallet` (`customer_id`,`plan_pallet_id`,`warehouse_pallet_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Frozen pallet and cargo snapshot for a dispatch order'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_order` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `dispatch_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Dispatch order number', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `vehicle_plate` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Editable vehicle plate; required before PDA picking', + `driver_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `driver_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `carrier_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `route` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `depart_at` datetime(3) DEFAULT NULL, + `fba_appointment_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `fba_appointment_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `vehicle_appointment_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `estimated_arrival_at` datetime(3) DEFAULT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_DEPARTURE', + `item_count` int NOT NULL DEFAULT '0', + `pallet_count` int NOT NULL DEFAULT '0', + `package_count` int NOT NULL DEFAULT '0', + `picked_package_count` int NOT NULL DEFAULT '0', + `shipped_package_count` int NOT NULL DEFAULT '0', + `partial_completion_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `trip_id` bigint DEFAULT NULL COMMENT '本趟唯一车辆资源记录ID', + `overseas_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运海外仓编码快照', + `stage` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BEFORE_LOADING' COMMENT '作业阶段:BEFORE_LOADING装车前、LOADING装车中、AFTER_LOADING装车后、DELIVERING派送中、DELIVERED派送完成', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '整车公共并发版本,首版为零', + `cargo_revision` bigint NOT NULL DEFAULT '0' COMMENT '本趟货物修订版本', + `cargo_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前整车真实货物及来源摘要', + `review_state` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'DRAFT' COMMENT '审核子流程当前状态', + `review_round` bigint NOT NULL DEFAULT '0' COMMENT '当前审核轮次', + `review_basis_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本审核轮次核对的货物和资源依据摘要', + `dispatch_review_json` json DEFAULT NULL COMMENT '当前调度审核事实快照', + `loading_review_json` json DEFAULT NULL COMMENT '当前理货审核事实快照', + `resources_json` json DEFAULT NULL COMMENT '本趟主档或临时车辆司机的真实资源快照', + `planned_departure_at` datetime(3) DEFAULT NULL COMMENT '计划发车时间,草稿未知时为空', + `loading_completed_at` datetime(3) DEFAULT NULL COMMENT '实际确认装车完成时间', + `loading_completion_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际装车完成事实摘要', + `loading_confirmation_json` json DEFAULT NULL COMMENT '装车确认时逐实托真实实载完整快照', + `arrangement_key` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本车唯一派送安排事实标识', + `arrangement_business_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本车派送安排业务内容摘要', + `departed_at` datetime(3) DEFAULT NULL COMMENT '本趟实际发车时间', + `delivery_completed_at` datetime(3) DEFAULT NULL COMMENT '全部派送正常签收后的整车完成时间', + `remark` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '排车业务备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_order_no` (`customer_id`,`dispatch_no`), + UNIQUE KEY `uk_dispatch_trip` (`trip_id`), + KEY `idx_ll_dispatch_order_list` (`customer_id`,`status`,`depart_at`), + KEY `idx_ll_dispatch_order_vehicle` (`customer_id`,`vehicle_plate`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Last-leg pre-dispatch order'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_pallet_lock`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_pallet_lock` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_pallet_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PLAN:{planPalletId} or RECEIVED:{warehousePalletId}', + `active_key` varchar(160) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Equals source key only while lock is active', + `plan_id` bigint DEFAULT NULL, + `plan_pallet_id` bigint DEFAULT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL, + `dispatch_order_id` bigint DEFAULT NULL COMMENT '正式派车单ID,草稿锁阶段为空', + `draft_container_id` bigint DEFAULT NULL COMMENT '智能排车草稿装车托盘ID', + `draft_token` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '智能排车草稿随机标识', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '草稿锁操作人ID', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', + `locked_at` datetime(3) NOT NULL, + `expires_at` datetime(3) DEFAULT NULL COMMENT '草稿锁失效时间,正式派车锁为空', + `released_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `return_receipt_id` bigint DEFAULT NULL COMMENT '明确选用的真实退回入仓来源', + `active_warehouse_pallet_id` bigint DEFAULT NULL COMMENT '活动占用的真实仓库托盘,释放后为空,跨客户及来源别名唯一', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_active_pallet` (`customer_id`,`active_key`), + UNIQUE KEY `uk_ll_dispatch_active_warehouse_pallet` (`active_warehouse_pallet_id`), + KEY `idx_ll_dispatch_pallet_lock_order` (`customer_id`,`dispatch_order_id`,`status`), + KEY `idx_ll_dispatch_pallet_lock_source` (`customer_id`,`source_pallet_key`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Active dispatch pallet exclusion lock'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_pda_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_pda_operation` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `task_id` bigint DEFAULT NULL, + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `result_json` longtext COLLATE utf8mb4_unicode_ci, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_pda_operation_key` (`customer_id`,`idempotency_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Idempotent dispatch PDA operations'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_pda_pick`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_pda_pick` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `task_id` bigint NOT NULL, + `dispatch_item_id` bigint NOT NULL, + `inventory_position_id` bigint DEFAULT NULL COMMENT '普通库存仓位记录ID', + `packages` bigint NOT NULL, + `product_quantity` bigint NOT NULL DEFAULT '0', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `picked_at` datetime(3) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `return_carton_id` bigint DEFAULT NULL COMMENT '独立退货库存箱ID,与普通仓位互斥', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_pda_pick_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_dispatch_pda_pick_item` (`customer_id`,`task_id`,`dispatch_item_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable dispatch PDA pallet package picks'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_pda_pick_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_pda_pick_order` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `pick_id` bigint NOT NULL, + `receipt_id` bigint DEFAULT NULL COMMENT '原入仓实收来源,与退回来源或原生退货箱互斥', + `order_id` bigint NOT NULL, + `packages` bigint NOT NULL, + `product_quantity` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `return_carton_id` bigint DEFAULT NULL COMMENT '原生退货箱来源ID,与实收来源互斥', + `return_receipt_id` bigint DEFAULT NULL COMMENT '明确选用的真实退回入仓来源', + PRIMARY KEY (`id`), + KEY `idx_ll_dispatch_pick_order_pick` (`customer_id`,`pick_id`), + KEY `idx_ll_dispatch_pick_order_receipt` (`customer_id`,`receipt_id`), + KEY `idx_dispatch_pick_return_receipt` (`customer_id`,`return_receipt_id`), + CONSTRAINT `chk_dispatch_pick_receipt_source` CHECK (((((`receipt_id` is not null) + (`return_receipt_id` is not null)) + (`return_carton_id` is not null)) = 1)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PDA pick attribution to frozen inbound receipt and tail order'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_pda_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_pda_task` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `dispatch_order_id` bigint NOT NULL, + `task_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pushed_at` datetime(3) NOT NULL, + `completed_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_pda_task_dispatch` (`customer_id`,`dispatch_order_id`), + UNIQUE KEY `uk_ll_dispatch_pda_task_no` (`customer_id`,`task_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PDA task for a pre-arranged dispatch'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dropship_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dropship_carton` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_id` bigint NOT NULL, + `profile_id` bigint NOT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `carton_sequence` int NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'AVAILABLE', + `outbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `version` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `product_quantity` bigint DEFAULT NULL COMMENT '该箱实收商品件数', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dropship_carton` (`customer_id`,`order_id`,`carton_mark`), + KEY `idx_ll_dropship_carton_status` (`customer_id`,`status`), + KEY `idx_ll_dropship_carton_sku` (`customer_id`,`sku_code`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dropship_carton_ledger`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dropship_carton_ledger` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_id` bigint NOT NULL, + `carton_id` bigint NOT NULL, + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `before_packages` bigint NOT NULL, + `delta_packages` bigint NOT NULL, + `after_packages` bigint NOT NULL, + `business_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `occurred_at` datetime(3) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dropship_ledger_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_dropship_ledger_sku` (`customer_id`,`sku_code`,`carton_mark`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dropship_carton_sku`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dropship_carton_sku` ( + `id` bigint NOT NULL COMMENT '主键ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `profile_id` bigint NOT NULL COMMENT '一件代发托盘档案ID', + `carton_id` bigint NOT NULL COMMENT '一件代发物理箱ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '箱内SKU编码', + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '产品名称快照', + `product_quantity` bigint NOT NULL COMMENT '该物理箱内此SKU实收件数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dropship_carton_sku` (`carton_id`,`sku_code`), + KEY `idx_ll_dropship_carton_sku_order` (`customer_id`,`order_id`,`sku_code`), + KEY `idx_ll_dropship_carton_sku_profile` (`customer_id`,`profile_id`,`sku_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='一件代发物理箱内SKU明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dropship_order_profile`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dropship_order_profile` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_id` bigint NOT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Pallet number snapshot supplied by first-leg handover', + `inventory_position_id` bigint DEFAULT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'RECEIVED', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `version` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `manifest_version` int DEFAULT NULL COMMENT '整托清单版本', + `manifest_package_count` int DEFAULT NULL COMMENT '整托总箱数', + `manifest_fragment_count` int DEFAULT NULL COMMENT '整托客户分片总数', + `manifest_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '整托完整清单摘要', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dropship_profile_key` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_dropship_profile_order_pallet` (`customer_id`,`order_id`,`source_pallet_no`), + KEY `idx_ll_dropship_profile_order` (`customer_id`,`order_id`), + KEY `idx_ll_dropship_profile_manifest` (`source_pallet_no`,`manifest_hash`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dropship_sku_inventory`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dropship_sku_inventory` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_id` bigint NOT NULL, + `profile_id` bigint NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `package_count` bigint NOT NULL, + `product_quantity` bigint NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dropship_sku_profile` (`profile_id`,`sku_code`), + UNIQUE KEY `uk_ll_dropship_sku_inventory` (`profile_id`,`sku_code`), + KEY `idx_ll_dropship_sku_order` (`customer_id`,`order_id`,`sku_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_event_conflict`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_event_conflict` ( + `id` bigint NOT NULL COMMENT '冲突记录主键', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '冲突事件 ID', + `customer_id` bigint NOT NULL COMMENT '租户 ID', + `conflict_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '冲突类型', + `conflict_message` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '冲突说明', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_conflict_event` (`event_id`,`customer_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='事件冲突记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_event_inbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_event_inbox` ( + `id` bigint NOT NULL COMMENT '事件接收记录主键', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件全局唯一 ID', + `customer_id` bigint NOT NULL COMMENT '租户 ID', + `event_type` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件类型', + `aggregate_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聚合类型', + `aggregate_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聚合 ID', + `aggregate_version` bigint NOT NULL COMMENT '聚合版本', + `payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '负载摘要', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '消费状态', + `error_message` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '错误信息', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbox_event` (`event_id`), + KEY `idx_ll_inbox_source` (`customer_id`,`aggregate_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通用事件接收幂等箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_event_outbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_event_outbox` ( + `id` bigint NOT NULL COMMENT '事件主键ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `aggregate_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聚合类型', + `aggregate_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聚合标识', + `event_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件类型', + `event_version` int NOT NULL COMMENT '事件版本', + `event_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务幂等键', + `payload_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件载荷JSON', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING' COMMENT '发布状态', + `retry_count` int NOT NULL DEFAULT '0' COMMENT '重试次数', + `next_retry_at` datetime(3) DEFAULT NULL COMMENT '下次重试时间', + `published_at` datetime(3) DEFAULT NULL COMMENT '发布时间', + `locked_at` datetime(3) DEFAULT NULL COMMENT '投递租约获取时间', + `locked_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '投递租约持有者', + `last_error` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最后一次发布错误', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_event_outbox_key` (`event_key`), + KEY `idx_ll_event_outbox_publish` (`status`,`next_retry_at`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程跨区业务事件发件箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_exception_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_exception_order` ( + `id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `exception_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `exception_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL, + `last_mile_order_id` bigint DEFAULT NULL, + `last_mile_order_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_order_id` bigint DEFAULT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `delivery_order_id` bigint DEFAULT NULL, + `delivery_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `outbound_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `package_count` int DEFAULT NULL, + `return_direction` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `return_logistics_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `handling_action` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `handling_result` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '异常处理结果', + `evidence_file_ids_json` json DEFAULT NULL COMMENT '异常处理证据文件ID列表', + `inventory_adjustment_id` bigint DEFAULT NULL COMMENT '退回库存恢复操作ID', + `handler_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `handler_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'MANUAL', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `exception_at` datetime(3) NOT NULL, + `completed_at` datetime(3) DEFAULT NULL COMMENT '异常处理完成时间', + `version` bigint NOT NULL DEFAULT '0' COMMENT '异常订单乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `return_context_json` json DEFAULT NULL COMMENT '退回异常创建前的派送及尾程状态快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_exception_no` (`customer_id`,`exception_no`), + UNIQUE KEY `uk_ll_exception_delivery_return` (`customer_id`,`delivery_order_id`,`exception_type`), + KEY `idx_ll_exception_list` (`customer_id`,`status`,`exception_at`), + KEY `idx_ll_exception_tail` (`customer_id`,`last_mile_order_no`), + KEY `idx_ll_exception_inbound` (`customer_id`,`inbound_code`), + KEY `idx_ll_exception_delivery_return` (`customer_id`,`delivery_order_id`,`exception_type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外仓异常订单'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_exception_order_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_exception_order_command` ( + `id` bigint NOT NULL COMMENT '异常处理命令ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `exception_order_id` bigint NOT NULL COMMENT '异常订单ID', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常处理动作', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '幂等键', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容SHA256哈希', + `result_json` json NOT NULL COMMENT '命令结果快照', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_exception_command_key` (`customer_id`,`action`,`idempotency_key`), + KEY `idx_ll_exception_command_order` (`customer_id`,`exception_order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='异常处理命令幂等审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_exception_return_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_exception_return_item` ( + `id` bigint NOT NULL COMMENT '异常退回明细ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `exception_order_id` bigint NOT NULL COMMENT '异常订单ID', + `outbound_pallet_item_id` bigint NOT NULL COMMENT '原出库托盘明细ID', + `inventory_position_id` bigint NOT NULL COMMENT '原出库库存位置ID', + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原出库托盘码快照', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原出库SKU快照', + `max_return_packages` bigint NOT NULL COMMENT '原出库可退箱数上限', + `approved_return_packages` bigint NOT NULL COMMENT '批准退回箱数', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `return_carton_id` bigint DEFAULT NULL COMMENT '原生退货箱标识;与普通库存位置互斥', + `return_carton_mark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原生退货箱业务箱码快照', + `received_packages` bigint NOT NULL DEFAULT '0' COMMENT '已实际退回入仓的累计箱数', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_exception_return_source` (`customer_id`,`exception_order_id`,`outbound_pallet_item_id`,`inventory_position_id`), + UNIQUE KEY `uk_ll_exception_return_carton` (`customer_id`,`exception_order_id`,`outbound_pallet_item_id`,`return_carton_id`), + KEY `idx_ll_exception_return_order` (`customer_id`,`exception_order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='异常退回原出库库存冻结明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fba_appointment_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fba_appointment_command` ( + `command_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '持久化幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作、操作者和请求摘要', + `operation` varchar(96) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型及目标业务号', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '登录操作人', + `appointment_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '系统预约业务单号', + `response_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '原命令返回快照,与业务写入同事务', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建UTC时间', + PRIMARY KEY (`command_key`), + KEY `idx_ll_fba_command_appointment` (`appointment_no`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约命令与变更历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fba_receiving_agreement`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fba_receiving_agreement` ( + `agreement_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '收货预约独立业务键', + `version` int NOT NULL COMMENT '预约覆盖范围与确认资料版本', + `status` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '有效、取消或已替代状态', + `destination_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '权威目的仓关联键', + `confirmation_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前有效外部约号,失效后清空以释放覆盖', + `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户逐来源覆盖、确认时区及仓库依据快照', + PRIMARY KEY (`agreement_key`), + UNIQUE KEY `uk_fba_receiving_confirmation` (`destination_key`,`confirmation_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='独立于送货批次的收货预约'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fba_receiving_change`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fba_receiving_change` ( + `change_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户预约变化业务键', + `version` int NOT NULL COMMENT '变化续办版本', + `status` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '待仓库确认、已应用或已撤回状态', + `batch_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '受影响原送货批次键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次变化所属客户', + `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原覆盖快照、逐来源拟保留量、负责人及跟进资料', + `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '确认后的实际批次去向及逐步骤结果', + `active_ref` varchar(260) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '同批同客户唯一未解决变化引用', + PRIMARY KEY (`change_key`), + UNIQUE KEY `uk_fba_receiving_pending` (`active_ref`), + KEY `idx_fba_receiving_pending_batch` (`batch_key`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='保留原安排且阻止误发车的客户变化'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fba_receiving_member`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fba_receiving_member` ( + `agreement_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属收货预约业务键', + `batch_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定送货批次键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '货物所属客户标识', + `active_ref` varchar(260) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '有效批次与客户唯一引用,退出后清空且历史保留', + PRIMARY KEY (`agreement_key`,`batch_key`,`customer_id`), + UNIQUE KEY `uk_fba_receiving_active_member` (`active_ref`), + KEY `idx_fba_receiving_batch` (`batch_key`,`customer_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='收货预约当前覆盖关联及退出历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fba_receiving_plan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fba_receiving_plan` ( + `batch_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定送货批次键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '计划所属客户标识', + `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本客户未确认计划、目标窗口及业务时区,不含有效预约确认', + PRIMARY KEY (`batch_key`,`customer_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='按批次及客户保存的未确认收货计划'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fba_receiving_revision`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fba_receiving_revision` ( + `agreement_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '收货预约业务键', + `version` int NOT NULL COMMENT '不可变覆盖与确认版本', + `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '该版本完整客户覆盖、确认时段及回复依据', + PRIMARY KEY (`agreement_key`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='收货预约覆盖与确认不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_finance_fee_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_finance_fee_command` ( + `id` bigint NOT NULL COMMENT '幂等命令ID', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人ID', + `action` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'CREATE、SUBMIT、REVIEW、ADJUST或VOID', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容SHA-256', + `source_fee_id` bigint NOT NULL COMMENT '稳定费用来源ID', + `source_version` int NOT NULL COMMENT '命令结果版本', + `created_at` datetime(3) NOT NULL COMMENT '命令创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_finance_fee_command` (`operator_id`,`action`,`idempotency_key`), + KEY `idx_ll_finance_fee_command_source` (`source_fee_id`,`source_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外费用来源写操作幂等审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_finance_fee_source`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_finance_fee_source` ( + `id` bigint NOT NULL COMMENT '费用版本记录ID', + `source_fee_id` bigint NOT NULL COMMENT '跨版本稳定费用来源ID', + `source_version` int NOT NULL COMMENT '费用来源版本,从1递增', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `customer_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户名称快照', + `source_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '海外费用来源类型', + `source_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源业务编号或入仓码快照', + `business_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源业务类型', + `business_id` bigint DEFAULT NULL COMMENT '来源业务记录ID', + `business_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源业务编号', + `order_id` bigint DEFAULT NULL COMMENT '关联订单ID', + `inbound_id` bigint DEFAULT NULL COMMENT '关联海外入仓计划或入仓记录ID', + `inbound_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关联入仓码;并非所有费用必填', + `container_id` bigint DEFAULT NULL COMMENT '关联柜次ID', + `container_booking_id` bigint DEFAULT NULL COMMENT '来源订舱柜ID', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '真实集装箱号快照', + `warehouse_id` bigint DEFAULT NULL COMMENT '关联海外仓ID', + `fee_item_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项目编码快照', + `fee_item_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项目名称快照', + `direction` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'RECEIVABLE应收或PAYABLE应付', + `supplier_id` bigint DEFAULT NULL COMMENT '应付供应商ID', + `supplier_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '应付供应商名称快照', + `supplier_category` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '应付供应商类别约束', + `settlement_mode` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ON_ACCOUNT账期应付或DIRECT_PAID业务已付', + `paid_at` datetime(3) DEFAULT NULL COMMENT '直接已付时间', + `payment_method` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '直接已付方式', + `payment_reference_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '直接已付流水号', + `payment_voucher_file_ids` json DEFAULT NULL COMMENT '直接已付凭证文件ID快照', + `wallet_settlement` json DEFAULT NULL COMMENT '已实扣应收的Finance资金命令、冻结和消费流水引用', + `business_date` date NOT NULL COMMENT '费用业务日期', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '财务结算币种,当前固定CNY', + `amount` decimal(20,6) NOT NULL COMMENT '费用金额', + `review_status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'DRAFT、PENDING、APPROVED或REJECTED', + `publication_status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'UNPUBLISHED或PUBLISHED', + `source_status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ACTIVE、SUPERSEDED或VOIDED', + `review_reason` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核或作废原因', + `reviewer_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核人ID', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '审核时间', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人ID', + `updated_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '最后更新人ID', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + `original_currency` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '原币币种', + `original_amount` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '原币金额', + `exchange_rate` decimal(18,8) NOT NULL DEFAULT '1.00000000' COMMENT '原币折算CNY汇率', + `exchange_rate_month` char(7) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '汇率月份YYYY-MM', + `chargeable_quantity` decimal(18,4) DEFAULT NULL COMMENT '计费数量', + `quantity_unit` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '计费单位', + `unit_price` decimal(18,4) DEFAULT NULL COMMENT '原币单价', + `period_start` date DEFAULT NULL COMMENT '周期费用开始日期', + `period_end` date DEFAULT NULL COMMENT '周期费用结束日期', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_finance_fee_version` (`source_fee_id`,`source_version`), + KEY `idx_ll_finance_fee_customer` (`customer_id`,`source_status`,`created_at`), + KEY `idx_ll_finance_fee_business` (`business_type`,`business_no`,`created_at`), + KEY `idx_ll_finance_fee_container_customer` (`container_booking_id`,`customer_id`,`source_status`,`created_at`), + CONSTRAINT `chk_ll_finance_fee_amount` CHECK ((`amount` > 0)), + CONSTRAINT `chk_ll_finance_fee_currency` CHECK ((`currency` = _utf8mb4'CNY')), + CONSTRAINT `chk_ll_finance_fee_direction` CHECK ((`direction` in (_utf8mb4'RECEIVABLE',_utf8mb4'PAYABLE'))), + CONSTRAINT `chk_ll_finance_fee_publication` CHECK ((`publication_status` in (_utf8mb4'UNPUBLISHED',_utf8mb4'PUBLISHED'))), + CONSTRAINT `chk_ll_finance_fee_review` CHECK ((`review_status` in (_utf8mb4'DRAFT',_utf8mb4'PENDING',_utf8mb4'APPROVED',_utf8mb4'REJECTED'))), + CONSTRAINT `chk_ll_finance_fee_status` CHECK ((`source_status` in (_utf8mb4'ACTIVE',_utf8mb4'SUPERSEDED',_utf8mb4'VOIDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外业务不可变费用来源版本;发布后经跨区事件进入Finance'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_capacity_offer`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_capacity_offer` ( + `id` bigint NOT NULL COMMENT '内部主键', + `offer_no` varchar(64) NOT NULL COMMENT '拼车运力发布业务编号', + `trip_id` bigint NOT NULL COMMENT '唯一所属车次', + `trip_no` varchar(64) NOT NULL COMMENT '车次业务编号', + `status` varchar(16) NOT NULL COMMENT '发布状态:草稿、开放、暂停、关闭', + `cutoff_at` datetime(3) NOT NULL COMMENT '最晚交货及新询价截止UTC时间', + `contact_name` varchar(128) DEFAULT NULL COMMENT '对内部销售公开的调度联系人', + `contact_phone` varchar(128) DEFAULT NULL COMMENT '对内部销售公开的调度联系电话', + `remark` varchar(1000) DEFAULT NULL COMMENT '公开承运说明', + `published_fingerprint` char(64) DEFAULT NULL COMMENT '已核对路线车辆及容量计划事实摘要', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` varchar(64) NOT NULL COMMENT '创建人', + `created_at` datetime(3) NOT NULL COMMENT '创建UTC时间', + `updated_by` varchar(64) NOT NULL COMMENT '修改人', + `updated_at` datetime(3) NOT NULL COMMENT '修改UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_capacity_offer_no` (`offer_no`), + UNIQUE KEY `uk_fleet_capacity_offer_trip` (`trip_id`), + KEY `idx_fleet_capacity_offer_status` (`status`,`cutoff_at`,`id`), + CONSTRAINT `fk_fleet_capacity_offer_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`), + CONSTRAINT `chk_fleet_capacity_offer_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'OPEN',_utf8mb4'PAUSED',_utf8mb4'CLOSED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='内部拼车车次余位发布;容量实时计算不在此另存'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_capacity_offer_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_capacity_offer_command` ( + `id` bigint NOT NULL COMMENT '内部主键', + `trip_id` bigint NOT NULL COMMENT '所属车次锁作用域', + `operator_id` varchar(64) NOT NULL COMMENT '原请求操作者', + `action` varchar(32) NOT NULL COMMENT '业务命令类型', + `scope_no` varchar(64) NOT NULL COMMENT '发布或预订业务编号作用域', + `idempotency_key` varchar(128) NOT NULL COMMENT '原请求幂等键', + `request_hash` char(64) NOT NULL COMMENT '原请求业务内容摘要', + `result_json` json NOT NULL COMMENT '成功命令原始结果用于精确重放', + `created_at` datetime(3) NOT NULL COMMENT '命令完成UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_capacity_offer_command` (`trip_id`,`operator_id`,`action`,`scope_no`,`idempotency_key`), + CONSTRAINT `fk_fleet_capacity_command_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='拼车发布及销售意向持久幂等结果'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_driver`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_driver` ( + `id` bigint NOT NULL COMMENT '内部主键', + `driver_no` varchar(32) NOT NULL COMMENT '司机业务编号', + `warehouse_id` bigint DEFAULT NULL COMMENT '所属公共仓库引用', + `warehouse_code` varchar(64) DEFAULT NULL COMMENT '所属仓库编码快照', + `warehouse_name` varchar(256) DEFAULT NULL COMMENT '所属仓库名称快照', + `vehicle_models` varchar(128) DEFAULT NULL COMMENT '可驾驶车型描述', + `languages_and_area` varchar(256) DEFAULT NULL COMMENT '语言及服务区域', + `medical_expires_on` date DEFAULT NULL COMMENT '体检到期日,当前不作为必需资质', + `training_expires_on` date DEFAULT NULL COMMENT '培训安全到期日,当前不作为必需资质', + `insurance_expires_on` date DEFAULT NULL COMMENT '保险到期日,当前不作为必需资质', + `name` varchar(128) NOT NULL COMMENT '姓名', + `phone` varchar(64) NOT NULL COMMENT '联系电话', + `ownership` varchar(16) NOT NULL COMMENT '归属 OWNED自有 DISPATCHED外派', + `region` varchar(16) NOT NULL COMMENT '区域 DOMESTIC国内 OVERSEAS海外', + `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用', + `review_status` varchar(16) NOT NULL DEFAULT 'PENDING' COMMENT '证照审核 PENDING待审 APPROVED通过 REJECTED打回', + `license_number` varchar(128) DEFAULT NULL COMMENT '驾驶证编号', + `license_type` varchar(64) DEFAULT NULL COMMENT '驾驶证类型', + `license_issued_on` date DEFAULT NULL COMMENT '驾驶证签发日期', + `license_expires_on` date DEFAULT NULL COMMENT '驾驶证有效截止日', + `license_zone` varchar(64) NOT NULL COMMENT '证照有效日期的IANA时区', + `license_file_id` bigint DEFAULT NULL COMMENT '平台驾驶证文件引用', + `remark` varchar(1000) DEFAULT NULL COMMENT '备注', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '并发版本', + `created_by` varchar(64) NOT NULL COMMENT '创建人', + `created_at` datetime(3) NOT NULL COMMENT '创建时间UTC', + `updated_by` varchar(64) NOT NULL COMMENT '修改人', + `updated_at` datetime(3) NOT NULL COMMENT '修改时间UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_driver_no` (`driver_no`), + KEY `idx_fleet_driver_page` (`active`,`review_status`,`updated_at`,`id`), + KEY `idx_fleet_driver_expiry` (`license_expires_on`), + CONSTRAINT `chk_fleet_driver_dates` CHECK (((`license_issued_on` is null) or (`license_expires_on` is null) or (`license_issued_on` <= `license_expires_on`))), + CONSTRAINT `chk_fleet_driver_ownership` CHECK ((`ownership` in (_utf8mb4'OWNED',_utf8mb4'DISPATCHED'))), + CONSTRAINT `chk_fleet_driver_region` CHECK ((`region` in (_utf8mb4'DOMESTIC',_utf8mb4'OVERSEAS'))), + CONSTRAINT `chk_fleet_driver_review` CHECK ((`review_status` in (_utf8mb4'PENDING',_utf8mb4'APPROVED',_utf8mb4'REJECTED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台司机档案'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_driver_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_driver_history` ( + `id` bigint NOT NULL COMMENT '内部主键', + `driver_id` bigint NOT NULL COMMENT '司机内部引用', + `record_version` bigint NOT NULL COMMENT '操作后的档案版本', + `action` varchar(32) NOT NULL COMMENT '创建编辑启停证照上传及审核动作', + `reason` varchar(1000) DEFAULT NULL COMMENT '操作原因或审核意见', + `license_file_id` bigint DEFAULT NULL COMMENT '当时驾驶证文件引用', + `snapshot_json` json NOT NULL COMMENT '操作后不可变档案快照', + `operator_id` varchar(64) NOT NULL COMMENT '操作人', + `occurred_at` datetime(3) NOT NULL COMMENT '操作时间UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_driver_history_version` (`driver_id`,`record_version`), + KEY `idx_fleet_driver_history_file` (`driver_id`,`license_file_id`), + CONSTRAINT `fk_fleet_driver_history_driver` FOREIGN KEY (`driver_id`) REFERENCES `ll_fleet_driver` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='司机档案及审核历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_external_booking`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_external_booking` ( + `id` bigint NOT NULL COMMENT '内部主键', + `booking_no` varchar(32) NOT NULL COMMENT '外接预订业务编号', + `trip_id` bigint NOT NULL COMMENT '所属车次', + `trip_no` varchar(32) NOT NULL COMMENT '车次业务编号', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '委托客户及付款归属', + `customer_code` varchar(64) NOT NULL COMMENT '客户编号快照', + `customer_name` varchar(255) NOT NULL COMMENT '客户名称快照', + `status` varchar(16) NOT NULL COMMENT 'DRAFT询价/CONFIRMED占位/RECEIVED确认实收/BOUND关联发运/CANCELLED取消', + `cargo_json` json NOT NULL COMMENT '货物、计划载荷、联系人及约定报价快照', + `quote_source_json` json DEFAULT NULL COMMENT '选用销售报价的可信版本快照,与实际成交金额分开保存', + `destination_key` varchar(160) NOT NULL COMMENT '已有路线卸货站匹配键', + `destination_label` varchar(255) NOT NULL COMMENT '约定卸货站名称', + `agreed_amount` decimal(16,2) DEFAULT NULL COMMENT '约定金额,非已入账应收或实收', + `idempotency_key` varchar(128) NOT NULL COMMENT '登记请求键', + `request_hash` char(64) NOT NULL COMMENT '登记内容摘要', + `confirm_key` varchar(128) DEFAULT NULL COMMENT '承运确认请求键', + `confirm_hash` char(64) DEFAULT NULL COMMENT '承运确认摘要', + `cancel_key` varchar(128) DEFAULT NULL COMMENT '取消请求键', + `cancel_hash` char(64) DEFAULT NULL COMMENT '取消摘要', + `incoming_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '正式来货单业务编号', + `dispatch_no` varchar(64) DEFAULT NULL COMMENT '已关联客户排车业务编号', + `receipt_json` json DEFAULT NULL COMMENT '实测来源及运营确认的托位和运费依据', + `incoming_key` varchar(128) DEFAULT NULL COMMENT '来货登记请求键', + `incoming_hash` char(64) DEFAULT NULL COMMENT '来货登记摘要', + `receipt_key` varchar(128) DEFAULT NULL COMMENT '实收确认请求键', + `receipt_hash` char(64) DEFAULT NULL COMMENT '实收确认摘要', + `binding_key` varchar(128) DEFAULT NULL COMMENT '关联发运请求键', + `binding_hash` char(64) DEFAULT NULL COMMENT '关联发运摘要', + `offer_id` bigint DEFAULT NULL COMMENT '来源运力发布,普通车次预订为空', + `sales_owner_user_id` varchar(64) DEFAULT NULL COMMENT '登录身份冻结的销售负责人', + `business_type` varchar(32) DEFAULT NULL COMMENT '本土商业类型LOCAL_LOOSEBOARD或US_TRUCK', + `delivery_mode` varchar(32) DEFAULT NULL COMMENT '客户送仓或人工安排提货回仓', + `estimated_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计实际到我仓UTC时间', + `expected_pallet_count` int DEFAULT NULL COMMENT '预计实托数,与托位分开且未知为空', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '记录版本', + `created_by` varchar(64) NOT NULL COMMENT '登记人', + `created_at` datetime(3) NOT NULL COMMENT '登记UTC时间', + `updated_by` varchar(64) NOT NULL COMMENT '修改人', + `updated_at` datetime(3) NOT NULL COMMENT '修改UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_booking_no` (`booking_no`), + UNIQUE KEY `uk_fleet_booking_create` (`trip_id`,`created_by`,`idempotency_key`), + UNIQUE KEY `uk_fleet_booking_incoming` (`incoming_no`), + KEY `idx_fleet_booking_offer` (`offer_id`,`status`,`id`), + KEY `idx_fleet_booking_sales` (`sales_owner_user_id`,`offer_id`,`id`), + KEY `idx_fleet_booking_trip` (`trip_id`,`status`,`id`), + KEY `idx_fleet_booking_dispatch` (`dispatch_no`), + CONSTRAINT `fk_fleet_booking_offer` FOREIGN KEY (`offer_id`) REFERENCES `ll_fleet_capacity_offer` (`id`), + CONSTRAINT `fk_fleet_booking_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`), + CONSTRAINT `chk_fleet_booking_expected_pallet` CHECK (((`expected_pallet_count` is null) or (`expected_pallet_count` > 0))), + CONSTRAINT `chk_fleet_booking_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'CONFIRMED',_utf8mb4'RECEIVED',_utf8mb4'BOUND',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='外接询价及确认承运占位;货物收发和费用入账分别引用正式事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_finance_source`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_finance_source` ( + `id` bigint unsigned NOT NULL COMMENT '来源提交主键', + `record_id` bigint unsigned NOT NULL COMMENT '车辆运维记录主键', + `source_version` bigint unsigned NOT NULL COMMENT '独立财务来源版本,从1递增', + `record_version` bigint unsigned NOT NULL COMMENT '提交时运维记录版本', + `operator_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '提交操作人标识', + `request_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原请求幂等键', + `request_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范请求摘要,含sha256前缀', + `event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '关联公共Outbox事件ID', + `payload_json` json NOT NULL COMMENT '不可变公司成本来源快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '提交时间UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_finance_source_version` (`record_id`,`source_version`), + UNIQUE KEY `uk_fleet_finance_source_request` (`record_id`,`operator_id`,`request_key`), + UNIQUE KEY `uk_fleet_finance_source_event` (`event_id`), + CONSTRAINT `chk_fleet_finance_source_version` CHECK ((`source_version` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='维修救援公司成本提交来源,不保存付款推定'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pickup_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pickup_command` ( + `trip_no` varchar(64) NOT NULL COMMENT '取货车次号', + `request_key` varchar(128) NOT NULL COMMENT '成功命令幂等键', + `request_hash` varchar(64) NOT NULL COMMENT '命令动作与内容摘要', + PRIMARY KEY (`trip_no`,`request_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='取货命令幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pickup_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pickup_history` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '操作流水', + `customer_id` varchar(64) NOT NULL COMMENT '客户隔离键', + `transfer_no` varchar(64) NOT NULL COMMENT '原转运单号', + `trip_no` varchar(64) NOT NULL COMMENT '当时取货车次号', + `action` varchar(32) NOT NULL COMMENT '安排解除取货到仓动作', + `operator_id` varchar(64) NOT NULL COMMENT '操作人', + `occurred_at` datetime NOT NULL COMMENT '操作UTC时间', + `detail` varchar(2000) DEFAULT NULL COMMENT '操作说明', + PRIMARY KEY (`id`), + KEY `idx_pickup_history_source` (`customer_id`,`transfer_no`,`id`), + KEY `idx_pickup_history_trip` (`trip_no`,`id`) +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='取货不可变操作历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pickup_plan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pickup_plan` ( + `trip_no` varchar(64) NOT NULL COMMENT '现有车辆车次号', + `request_hash` varchar(64) NOT NULL COMMENT '创建来源与计划摘要', + PRIMARY KEY (`trip_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='仓储转运取货计划'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pickup_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pickup_task` ( + `transfer_order_id` bigint NOT NULL COMMENT '原仓储转运单ID,一票唯一', + `customer_id` varchar(64) NOT NULL COMMENT '客户隔离键', + `transfer_no` varchar(64) NOT NULL COMMENT '原仓储转运单号', + `trip_no` varchar(64) DEFAULT NULL COMMENT '当前取货车次,解除后为空', + `status` varchar(32) NOT NULL COMMENT 'WAITING待安排 ASSIGNED已安排 PICKED已取货 ARRIVED已送仓', + `actual_packages` int DEFAULT NULL COMMENT '司机实提箱数,非仓库实收', + `picked_at` datetime DEFAULT NULL COMMENT '实际确认取货UTC时间', + `arrived_at` datetime DEFAULT NULL COMMENT '实际确认送仓UTC时间', + `evidence_json` longtext COMMENT '本票已确认凭证元数据', + `remark` varchar(1000) DEFAULT NULL COMMENT '取货备注', + `updated_at` datetime NOT NULL COMMENT '最近修改UTC时间', + PRIMARY KEY (`transfer_order_id`), + UNIQUE KEY `uk_pickup_source` (`customer_id`,`transfer_no`), + KEY `idx_pickup_trip` (`trip_no`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='仓储转运逐票取货执行'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pickup_upload`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pickup_upload` ( + `transfer_order_id` bigint NOT NULL COMMENT '凭证所属原单', + `trip_no` varchar(64) NOT NULL COMMENT '凭证所属车次', + `file_id` bigint NOT NULL COMMENT '平台归属文件ID', + PRIMARY KEY (`file_id`), + KEY `idx_pickup_upload_source` (`transfer_order_id`,`trip_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='取货上传凭证精确单据归属'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pool_order_link`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pool_order_link` ( + `id` bigint NOT NULL COMMENT '内部主键', + `booking_id` bigint NOT NULL COMMENT '唯一外接预订', + `booking_no` varchar(64) NOT NULL COMMENT '预订业务编号', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商业客户隔离范围', + `business_type` varchar(32) NOT NULL COMMENT '本土散板或本土卡车商业类型', + `business_order_id` bigint NOT NULL COMMENT '对应商业订单内部关联', + `business_order_no` varchar(64) NOT NULL COMMENT '本土商业订单业务编号', + `warehouse_id` varchar(128) NOT NULL COMMENT '真实我仓上车仓库', + `destination_key` varchar(160) NOT NULL COMMENT '冻结卸货站匹配键', + `delivery_mode` varchar(32) NOT NULL COMMENT '客户送仓或人工提货回仓', + `delivery_instructions` varchar(1000) DEFAULT NULL COMMENT '实际到仓交货说明', + `incoming_no` varchar(64) DEFAULT NULL COMMENT '真实来货业务编号,未登记为空', + `lastleg_order_id` bigint DEFAULT NULL COMMENT '唯一真实尾程来源,未发生为空', + `dispatch_no` varchar(64) DEFAULT NULL COMMENT '已关联客户排车编号', + `fulfillment_stage` varchar(32) NOT NULL COMMENT '实际履约阶段,不能手工冒充完成', + `stage_occurred_at` datetime(3) NOT NULL COMMENT '实际阶段发生UTC时间', + `actual_pallet_count` int DEFAULT NULL COMMENT '实际去重托盘数,未知为空', + `actual_package_count` int DEFAULT NULL COMMENT '实际箱数,未知为空', + `actual_pallet_spaces` int DEFAULT NULL COMMENT '实际核准占用托位,未知为空', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '桥记录版本', + `creation_request_hash` char(64) NOT NULL COMMENT '商业单创建身份和预报事实摘要', + `created_by` varchar(64) NOT NULL COMMENT '确认承运操作者', + `created_at` datetime(3) NOT NULL COMMENT '创建UTC时间', + `updated_at` datetime(3) NOT NULL COMMENT '修改UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_pool_order_booking` (`booking_id`), + UNIQUE KEY `uk_fleet_pool_order_booking_no` (`booking_no`), + UNIQUE KEY `uk_fleet_pool_order_business` (`business_type`,`business_order_id`), + UNIQUE KEY `uk_fleet_pool_order_incoming` (`incoming_no`), + UNIQUE KEY `uk_fleet_pool_order_lastleg` (`lastleg_order_id`), + KEY `idx_fleet_pool_order_customer` (`customer_id`,`business_type`,`business_order_no`), + KEY `idx_fleet_pool_order_dispatch` (`customer_id`,`dispatch_no`), + CONSTRAINT `fk_fleet_pool_order_booking` FOREIGN KEY (`booking_id`) REFERENCES `ll_fleet_external_booking` (`id`), + CONSTRAINT `chk_fleet_pool_order_actual` CHECK ((((`actual_pallet_count` is null) or (`actual_pallet_count` >= 0)) and ((`actual_package_count` is null) or (`actual_package_count` >= 0)) and ((`actual_pallet_spaces` is null) or (`actual_pallet_spaces` >= 0)))), + CONSTRAINT `chk_fleet_pool_order_type` CHECK ((`business_type` in (_utf8mb4'LOCAL_LOOSEBOARD',_utf8mb4'US_TRUCK'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='拼车预订与本土商业单唯一真实履约关联,不重复记运费'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_quote`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_quote` ( + `id` bigint NOT NULL COMMENT '报价记录主键', + `quote_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价业务编号', + `kind` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价用途采购或销售', + `party_id` bigint NOT NULL COMMENT '供应商或客户主档标识', + `party_name` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '往来单位名称快照', + `origin_city` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '发货城市', + `destination_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目的仓业务编码', + `valid_from` date NOT NULL COMMENT '报价生效日期', + `valid_to` date NOT NULL COMMENT '报价失效日期含当天', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价启停或删除状态', + `natural_key` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价组合去重摘要', + `details_json` json NOT NULL COMMENT '完整报价明细快照', + `record_version` bigint NOT NULL COMMENT '报价记录版本', + `create_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建幂等键', + `create_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建请求含导入批次内容摘要', + `created_by` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建操作人标识', + `created_at` datetime(3) NOT NULL COMMENT '创建时间UTC', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_quote_no` (`quote_no`), + UNIQUE KEY `uk_fleet_quote_natural` (`natural_key`), + UNIQUE KEY `uk_fleet_quote_create` (`created_by`,`create_key`), + KEY `idx_fleet_quote_search` (`kind`,`status`,`valid_from`,`valid_to`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车辆采购与外接销售报价'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_quote_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_quote_history` ( + `id` bigint NOT NULL COMMENT '报价历史主键', + `quote_id` bigint NOT NULL COMMENT '报价记录标识', + `record_version` bigint NOT NULL COMMENT '报价记录版本', + `action` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价操作类型', + `operator_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人标识', + `occurred_at` datetime(3) NOT NULL COMMENT '操作时间UTC', + `snapshot_json` json NOT NULL COMMENT '报价完整版本快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_quote_history_version` (`quote_id`,`record_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车辆报价不可变版本历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_resource_assignment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_resource_assignment` ( + `resource_kind` varchar(16) NOT NULL COMMENT '资源种类 VEHICLE或DRIVER', + `resource_id` bigint NOT NULL COMMENT '对应车辆或司机档案引用', + `trip_id` bigint NOT NULL COMMENT '占用车次', + `trip_no` varchar(32) NOT NULL COMMENT '占用车次业务编号', + PRIMARY KEY (`resource_kind`,`resource_id`), + KEY `idx_fleet_resource_trip` (`trip_id`), + CONSTRAINT `fk_fleet_resource_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`), + CONSTRAINT `chk_fleet_resource_kind` CHECK ((`resource_kind` in (_utf8mb4'VEHICLE',_utf8mb4'DRIVER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车辆及司机当前车次占用,释放后删除锁行,历史保留在车次'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip` ( + `id` bigint NOT NULL COMMENT '内部主键', + `trip_no` varchar(32) NOT NULL COMMENT '车次业务编号', + `idempotency_key` varchar(128) NOT NULL COMMENT '创建请求幂等键', + `request_hash` varchar(64) NOT NULL COMMENT '创建请求SHA256', + `status` varchar(16) NOT NULL COMMENT '车次状态', + `warehouse_id` bigint NOT NULL COMMENT '起运公共仓库引用', + `warehouse_code` varchar(64) NOT NULL COMMENT '起运仓编码快照', + `warehouse_name` varchar(256) NOT NULL COMMENT '起运仓名称快照', + `vehicle_id` bigint DEFAULT NULL COMMENT '车辆档案引用', + `vehicle_plate` varchar(64) DEFAULT NULL COMMENT '分配时车牌快照', + `driver_id` bigint DEFAULT NULL COMMENT '司机档案引用', + `driver_name` varchar(128) DEFAULT NULL COMMENT '分配时司机姓名', + `driver_phone` varchar(64) DEFAULT NULL COMMENT '分配时司机电话', + `max_pallet_spaces` int DEFAULT NULL COMMENT '分配时托位容量快照', + `max_load_kg` decimal(12,3) DEFAULT NULL COMMENT '分配时载重千克', + `max_volume_cbm` decimal(12,3) DEFAULT NULL COMMENT '分配时可用容积立方米', + `planned_departure_at` datetime(3) NOT NULL COMMENT '计划发车UTC', + `expected_driver_end_at` datetime(3) NOT NULL COMMENT '司机预计任务结束UTC,含承担的返程转场', + `departed_at` datetime(3) DEFAULT NULL COMMENT '实际发车UTC', + `completed_at` datetime(3) DEFAULT NULL COMMENT '实际运输完成UTC', + `stops_json` json NOT NULL COMMENT '按顺序保存的路线站点', + `planned_load_json` json DEFAULT NULL COMMENT '拣货前自有货计划载荷与逐段剩余容量', + `load_json` json DEFAULT NULL COMMENT '已确认实物装载及客户货物来源快照', + `loading_review_json` longtext COMMENT '整车理货审核快照,空值为待审核', + `departure_key` varchar(128) DEFAULT NULL COMMENT '整车发车幂等标识', + `departure_hash` char(64) DEFAULT NULL COMMENT '整车发车请求摘要', + `departure_result_json` json DEFAULT NULL COMMENT '整车发车结果及各客户出库结果', + `completion_json` json DEFAULT NULL COMMENT '货物结案来源及幂等结果快照', + `vehicle_release_json` json DEFAULT NULL COMMENT '车辆任务结束地点状态与幂等记录', + `driver_release_json` json DEFAULT NULL COMMENT '司机任务结束地点与幂等记录', + `remark` varchar(1000) DEFAULT NULL COMMENT '备注', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '并发版本', + `created_by` varchar(64) NOT NULL COMMENT '创建人', + `created_at` datetime(3) NOT NULL COMMENT '创建UTC时间', + `updated_by` varchar(64) NOT NULL COMMENT '更新人', + `updated_at` datetime(3) NOT NULL COMMENT '更新UTC时间', + `trip_purpose` varchar(16) NOT NULL DEFAULT 'DELIVERY' COMMENT 'DELIVERY出库派送 PICKUP上门取货入仓', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_trip_no` (`trip_no`), + UNIQUE KEY `uk_fleet_trip_create` (`created_by`,`idempotency_key`), + KEY `idx_fleet_trip_page` (`warehouse_id`,`status`,`updated_at`,`id`), + KEY `fk_fleet_trip_vehicle` (`vehicle_id`), + KEY `fk_fleet_trip_driver` (`driver_id`), + CONSTRAINT `fk_fleet_trip_driver` FOREIGN KEY (`driver_id`) REFERENCES `ll_fleet_driver` (`id`), + CONSTRAINT `fk_fleet_trip_vehicle` FOREIGN KEY (`vehicle_id`) REFERENCES `ll_vehicle` (`id`), + CONSTRAINT `chk_fleet_trip_status` CHECK ((`status` in (_utf8mb4'PLANNED',_utf8mb4'DEPARTING',_utf8mb4'IN_TRANSIT',_utf8mb4'COMPLETED',_utf8mb4'CANCELLED'))), + CONSTRAINT `chk_fleet_trip_time` CHECK ((`expected_driver_end_at` > `planned_departure_at`)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台运输车次'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_cost`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_cost` ( + `id` bigint NOT NULL COMMENT '内部主键', + `trip_id` bigint NOT NULL COMMENT '车次内部引用', + `cost_no` varchar(32) NOT NULL COMMENT '车次成本业务编号', + `category` varchar(16) NOT NULL COMMENT '直接成本类别FUEL/DRIVER/TOLL/PARKING/OTHER', + `currency` varchar(3) NOT NULL COMMENT '原始成本币种CNY/USD,不混币汇总', + `amount` decimal(14,2) NOT NULL COMMENT '运营登记金额,不代表付款', + `incurred_at` datetime(3) NOT NULL COMMENT '实际费用发生UTC时间', + `remark` varchar(1000) DEFAULT NULL COMMENT '费用备注', + `record_version` bigint NOT NULL COMMENT '成本记录版本', + `request_key` varchar(128) NOT NULL COMMENT '创建幂等键', + `request_hash` char(64) NOT NULL COMMENT '创建请求摘要', + `created_by` varchar(64) NOT NULL COMMENT '登记人', + `updated_by` varchar(64) NOT NULL COMMENT '最近更正人', + `created_at` datetime(3) NOT NULL COMMENT '登记UTC时间', + `updated_at` datetime(3) NOT NULL COMMENT '更正UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_trip_cost_no` (`cost_no`), + UNIQUE KEY `uk_fleet_trip_cost_request` (`trip_id`,`created_by`,`request_key`), + KEY `idx_fleet_trip_cost_page` (`trip_id`,`incurred_at`,`id`), + CONSTRAINT `fk_fleet_trip_cost_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`), + CONSTRAINT `ck_fleet_trip_cost_amount` CHECK ((`amount` >= 0)), + CONSTRAINT `ck_fleet_trip_cost_category` CHECK ((`category` in (_utf8mb4'FUEL',_utf8mb4'DRIVER',_utf8mb4'TOLL',_utf8mb4'PARKING',_utf8mb4'OTHER'))), + CONSTRAINT `ck_fleet_trip_cost_currency` CHECK ((`currency` in (_utf8mb4'CNY',_utf8mb4'USD'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车次直接运营成本,不生成客户账单或付款'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_cost_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_cost_history` ( + `id` bigint NOT NULL COMMENT '内部主键', + `cost_id` bigint NOT NULL COMMENT '成本记录内部引用', + `record_version` bigint NOT NULL COMMENT '成本更正后版本', + `action` varchar(16) NOT NULL COMMENT '成本操作CREATE/UPDATE', + `reason` varchar(1000) DEFAULT NULL COMMENT '登记或更正说明', + `operator_id` varchar(64) NOT NULL COMMENT '操作人', + `occurred_at` datetime(3) NOT NULL COMMENT '操作UTC时间', + `snapshot_json` json NOT NULL COMMENT '成本与当时整趟汇总及分摊快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_trip_cost_history` (`cost_id`,`record_version`), + CONSTRAINT `fk_fleet_trip_cost_history` FOREIGN KEY (`cost_id`) REFERENCES `ll_fleet_trip_cost` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车次成本不可变更正历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_dispatch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_dispatch` ( + `dispatch_id` bigint NOT NULL COMMENT '客户排车单内部引用,唯一有效车次关联', + `dispatch_no` varchar(64) NOT NULL COMMENT '客户排车业务单号', + `customer_id` varchar(128) NOT NULL COMMENT '排车单自身客户归属', + `trip_id` bigint NOT NULL COMMENT '共享运输车次内部引用', + `trip_no` varchar(32) NOT NULL COMMENT '共享运输车次业务编号', + `package_count` int NOT NULL COMMENT '关联时待发运箱数快照', + `bound_by` varchar(64) NOT NULL COMMENT '关联操作人', + `bound_at` datetime(3) NOT NULL COMMENT '关联UTC时间', + `review_json` longtext COMMENT '客户排车调度审核快照,空值为待审核', + PRIMARY KEY (`dispatch_id`), + UNIQUE KEY `uk_fleet_trip_dispatch_no` (`dispatch_no`), + UNIQUE KEY `uk_fleet_trip_dispatch_trip` (`trip_id`), + KEY `idx_fleet_trip_dispatch_trip` (`trip_id`,`dispatch_id`), + CONSTRAINT `fk_fleet_trip_dispatch_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车次与各客户排车单的有效关联,解除前快照保留在车次历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_handover`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_handover` ( + `id` bigint NOT NULL COMMENT '内部主键', + `trip_id` bigint NOT NULL COMMENT '所属车次', + `trip_version` bigint NOT NULL COMMENT '交接对应车次历史版本', + `trip_no` varchar(32) NOT NULL COMMENT '车次业务编号', + `handover_no` varchar(32) NOT NULL COMMENT '交接业务编号', + `request_key` varchar(128) NOT NULL COMMENT '交接请求幂等键', + `request_hash` char(64) NOT NULL COMMENT '交接请求摘要', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '资源结束并发版本', + `handed_over_at` datetime(3) NOT NULL COMMENT '实际交接UTC时间', + `snapshot_json` json NOT NULL COMMENT '不可变资源及剩余货物交接快照', + `vehicle_release_json` json DEFAULT NULL COMMENT '原车辆任务结束及幂等结果', + `driver_release_json` json DEFAULT NULL COMMENT '原司机任务结束及幂等结果', + `created_by` varchar(64) NOT NULL COMMENT '记录操作人', + `created_at` datetime(3) NOT NULL COMMENT '记录UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_handover_no` (`handover_no`), + UNIQUE KEY `uk_fleet_handover_request` (`trip_id`,`request_key`), + UNIQUE KEY `uk_fleet_handover_version` (`trip_id`,`trip_version`), + KEY `idx_fleet_handover_page` (`trip_id`,`id`), + CONSTRAINT `fk_fleet_handover_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='在途车辆司机交接'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_history` ( + `id` bigint NOT NULL COMMENT '内部主键', + `trip_id` bigint NOT NULL COMMENT '车次内部引用', + `record_version` bigint NOT NULL COMMENT '操作后版本', + `action` varchar(32) NOT NULL COMMENT '车次操作', + `reason` varchar(1000) DEFAULT NULL COMMENT '操作原因', + `operator_id` varchar(64) NOT NULL COMMENT '操作人', + `occurred_at` datetime(3) NOT NULL COMMENT '操作UTC时间', + `snapshot_json` json NOT NULL COMMENT '操作后不可变车次快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_trip_history_version` (`trip_id`,`record_version`), + CONSTRAINT `fk_fleet_trip_history` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='运输车次操作历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_operations_record`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_operations_record` ( + `id` bigint NOT NULL COMMENT '出车实测历史主键', + `trip_no` varchar(64) NOT NULL COMMENT '车次业务编号', + `record_version` bigint NOT NULL COMMENT '实测记录版本从一递增', + `details_json` json NOT NULL COMMENT '实际里程英里油耗升与备注快照', + `reason` varchar(1000) NOT NULL COMMENT '实测更正说明', + `operator_id` varchar(64) NOT NULL COMMENT '实测操作人标识', + `request_key` varchar(128) NOT NULL COMMENT '实测保存幂等键', + `request_hash` char(64) NOT NULL COMMENT '实测请求内容摘要', + `occurred_at` datetime(3) NOT NULL COMMENT '实测保存时间UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_operations_version` (`trip_no`,`record_version`), + UNIQUE KEY `uk_fleet_operations_request` (`trip_no`,`operator_id`,`request_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车次里程油耗不可变更正记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_vehicle_record`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_vehicle_record` ( + `id` bigint NOT NULL COMMENT '记录内部主键', + `record_no` varchar(32) NOT NULL COMMENT '车辆运维业务编号', + `vehicle_id` bigint NOT NULL COMMENT '所属车辆主键', + `vehicle_plate` varchar(64) NOT NULL COMMENT '建档时车牌快照', + `record_type` varchar(32) NOT NULL COMMENT '运维类型:保养、加油、维修、故障、救援、异常', + `occurred_at` datetime(3) NOT NULL COMMENT '记录发生时间(UTC)', + `details_json` json NOT NULL COMMENT '带明确单位的业务字段快照', + `files_json` json NOT NULL COMMENT '所属记录照片与上传幂等摘要', + `idempotency_key` varchar(128) NOT NULL COMMENT '创建请求幂等键', + `request_hash` char(64) NOT NULL COMMENT '原创建业务内容摘要', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` varchar(64) NOT NULL COMMENT '创建操作人', + `updated_by` varchar(64) NOT NULL COMMENT '最后操作人', + `created_at` datetime(3) NOT NULL COMMENT '创建时间(UTC)', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间(UTC)', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_vehicle_record_no` (`record_no`), + UNIQUE KEY `uk_vehicle_record_creation` (`vehicle_id`,`created_by`,`idempotency_key`), + KEY `idx_vehicle_record_page` (`vehicle_id`,`record_type`,`occurred_at`,`id`), + CONSTRAINT `fk_vehicle_record_vehicle` FOREIGN KEY (`vehicle_id`) REFERENCES `ll_vehicle` (`id`), + CONSTRAINT `ck_vehicle_record_type` CHECK ((`record_type` in (_utf8mb4'MAINTENANCE',_utf8mb4'FUEL',_utf8mb4'REPAIR',_utf8mb4'BREAKDOWN',_utf8mb4'RESCUE',_utf8mb4'EXCEPTION'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车辆运维记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_vehicle_record_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_vehicle_record_history` ( + `id` bigint NOT NULL COMMENT '历史内部主键', + `record_id` bigint NOT NULL COMMENT '运维记录主键', + `record_version` bigint NOT NULL COMMENT '对应业务版本', + `action` varchar(32) NOT NULL COMMENT '操作类型', + `reason` varchar(1000) DEFAULT NULL COMMENT '更正原因或附件名称', + `operator_id` varchar(64) NOT NULL COMMENT '操作人', + `occurred_at` datetime(3) NOT NULL COMMENT '操作时间(UTC)', + `snapshot_json` json NOT NULL COMMENT '当时完整业务快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_vehicle_record_revision` (`record_id`,`record_version`), + CONSTRAINT `fk_vehicle_record_history` FOREIGN KEY (`record_id`) REFERENCES `ll_fleet_vehicle_record` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车辆运维记录不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_fba_appointment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_fba_appointment` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `appointment_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预约单号', + `appointment_at` datetime(3) NOT NULL COMMENT '预约时间', + `appointment_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `appointment_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `selected_count` int NOT NULL DEFAULT '0', + `replacement_nos_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '分批或合并后的新预约业务号列表,非空时原批次只读', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `expected_loading_at` datetime(3) NOT NULL, + `appointment_end_at` datetime(3) DEFAULT NULL COMMENT '预约结束时间,未明确时为空', + `version` int NOT NULL DEFAULT '0' COMMENT '并发版本', + `confirmation_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '收货方正式外部确认号', + `planned_date` date DEFAULT NULL COMMENT '计划当地日期,可只有日期而无时段', + `planned_at` datetime(3) DEFAULT NULL COMMENT '计划开始当地时间,待定可空', + `planned_end_at` datetime(3) DEFAULT NULL COMMENT '计划结束当地时间', + `appointment_start_utc` datetime(3) DEFAULT NULL COMMENT '确认开始UTC时间点', + `appointment_end_utc` datetime(3) DEFAULT NULL COMMENT '确认结束UTC时间点', + `timezone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓权威IANA时区,未维护不得确认', + `origin_warehouse_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际起运仓', + `replacement_keys_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '替代批次不可变键列表,只用于内部业务关联', + `repartition_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '分批或合并原因,原安排及来源明细保留', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_fba_appointment_no` (`customer_id`,`appointment_no`), + KEY `idx_ll_fba_appointment_list` (`customer_id`,`appointment_status`,`fba_warehouse_code`,`created_at`), + KEY `idx_ll_fba_appointment_planned` (`planned_at`,`appointment_status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Batch FBA appointment'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_fba_appointment_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_fba_appointment_item` ( + `id` bigint NOT NULL COMMENT '记录主键', + `appointment_id` bigint NOT NULL COMMENT '预约主记录标识', + `source_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定ORDER或BOOKING货源键', + `source_version` varchar(160) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '保存时核实的来源版本', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本票所属客户', + `order_id` bigint DEFAULT NULL COMMENT '尚未形成尾程订单时为空', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '真实入仓码,不伪造', + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目的FBA仓编码', + `package_count` int DEFAULT NULL COMMENT '所选整票预报箱数,未知保持空', + `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '取消或失败后释放货源占用', + `active_source_key` varchar(160) COLLATE utf8mb4_unicode_ci GENERATED ALWAYS AS ((case when (`active` = 1) then `source_key` else NULL end)) STORED COMMENT '有效货源唯一占用键', + `active_order_id` bigint GENERATED ALWAYS AS ((case when (`active` = 1) then `order_id` else NULL end)) STORED COMMENT '有效订单唯一占用键', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建UTC时间', + `cargo_verification_version` int DEFAULT NULL COMMENT '采用的预约货物核实版本,未核实时为空', + `shipment_references_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '本次采用的货件或追踪号核实快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_fba_item_source` (`appointment_id`,`source_key`), + UNIQUE KEY `uk_ll_fba_active_source` (`active_source_key`), + UNIQUE KEY `uk_ll_fba_active_order` (`active_order_id`), + KEY `idx_ll_fba_item_source_lookup` (`source_key`,`customer_id`), + KEY `idx_ll_fba_item_customer_order` (`customer_id`,`order_id`), + KEY `idx_ll_fba_active_source` (`customer_id`,`source_key`,`active`), + KEY `idx_ll_fba_active_order` (`customer_id`,`order_id`,`active`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入仓前后共用的预约真实货源'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_order` ( + `id` bigint NOT NULL COMMENT '入仓单主键', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` bigint NOT NULL COMMENT '租户 ID', + `source_region` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源区域', + `source_inbound_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源入仓分片 ID', + `root_inbound_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '根入仓单 ID', + `source_order_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源订单 ID', + `source_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源订单号', + `root_order_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '根订单 ID', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '入仓码', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓 ID', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称', + `destination_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的类型:FBA按箱数接收、OVERSEAS逐箱扫码', + `package_count` int NOT NULL DEFAULT '0' COMMENT '箱数', + `product_quantity` int DEFAULT NULL COMMENT '数量', + `pallet_count` int DEFAULT NULL COMMENT '托数', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '毛重(千克)', + `net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '净重(千克)', + `volume_cbm` decimal(18,6) DEFAULT NULL COMMENT '体积(立方米)', + `source_event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源事件 ID', + `source_loading_plan_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '装柜计划 ID', + `source_loading_plan_version` bigint NOT NULL COMMENT '装柜计划版本', + `handover_version` bigint NOT NULL COMMENT '交接版本', + `payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '负载摘要', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入仓单状态', + `exception_flag` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'NONE' COMMENT '异常标记', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `lx_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发领星入库单代码', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_source` (`customer_id`,`source_region`,`source_inbound_id`), + UNIQUE KEY `uk_ll_order_event` (`source_event_id`,`source_inbound_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入仓单快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_order_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_order_item` ( + `id` bigint NOT NULL COMMENT '入仓明细主键', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` bigint NOT NULL COMMENT '租户ID', + `order_id` bigint NOT NULL COMMENT '入仓单ID', + `source_inbound_detail_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源入仓明细ID', + `package_count` int NOT NULL COMMENT '箱数', + `product_quantity` int DEFAULT NULL COMMENT '数量', + `pallet_count` int DEFAULT NULL COMMENT '托数', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '毛重(千克)', + `net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '净重(千克)', + `dimensional_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '体积重量(千克)', + `volume_cbm` decimal(18,6) DEFAULT NULL COMMENT '体积(立方米)', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓ID', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称', + `fba_tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA跟踪号', + `shipment_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '货件编号', + `shipping_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '唛头', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU编码', + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名', + `product_name_en` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '英文品名', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_item_order` (`customer_id`,`order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入仓商品明细快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_pallet_merge`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_pallet_merge` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `task_id` bigint NOT NULL, + `merge_group_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_pallet_id` bigint NOT NULL, + `target_pallet_id` bigint NOT NULL, + `source_allocation_id` bigint NOT NULL, + `target_allocation_id` bigint NOT NULL, + `source_line_id` bigint NOT NULL, + `target_line_id` bigint NOT NULL, + `source_order_id` bigint NOT NULL, + `target_order_id` bigint NOT NULL, + `moved_package_count` int NOT NULL, + `moved_volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000', + `source_pallet_scrapped` tinyint NOT NULL DEFAULT '0', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_ll_inbound_merge_task` (`customer_id`,`task_id`), + KEY `idx_ll_inbound_merge_group` (`merge_group_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_pda_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_pda_operation` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `task_id` bigint NOT NULL, + `allocation_id` bigint DEFAULT NULL, + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL, + `result_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_pda_operation_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_inbound_pda_operation_task` (`task_id`), + KEY `idx_ll_inbound_pda_operation_allocation` (`allocation_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_pda_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_pda_task` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `plan_id` bigint NOT NULL, + `task_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `operator_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pushed_at` datetime(3) DEFAULT NULL, + `started_at` datetime(3) DEFAULT NULL, + `completed_at` datetime(3) DEFAULT NULL, + `unload_photo_file_ids` json DEFAULT NULL COMMENT '卸柜照片文件ID列表', + `unload_photo_uploaded_at` datetime(3) DEFAULT NULL COMMENT '卸柜照片上传成功时间', + `estimated_empty_return_at` datetime(3) DEFAULT NULL COMMENT '预计报空时间(卸柜照片上传成功后两天)', + `version` int NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_pda_task_plan` (`customer_id`,`plan_id`), + UNIQUE KEY `uk_ll_inbound_pda_task_no` (`task_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_plan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_plan` ( + `id` bigint NOT NULL COMMENT '入库计划ID(雪花ID)', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `plan_no` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入库单号', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户/客户账号标识', + `source_order_id` bigint NOT NULL COMMENT '来源尾程订单ID,一张入仓单对应一张入库计划', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '集装箱号', + `overseas_warehouse_id` bigint DEFAULT NULL COMMENT '海外实际收货共享物理仓ID,由PDA认领柜号时冻结', + `planned_arrival_date` date DEFAULT NULL COMMENT '人工计划预计到仓日期', + `pallet_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '人工计划托盘类型', + `assigned_flag` tinyint NOT NULL DEFAULT '0' COMMENT '人工计划是否已分配:0否1是', + `merge_required` tinyint NOT NULL DEFAULT '0' COMMENT '人工计划是否要求合托:0否1是', + `urgent_flag` tinyint NOT NULL DEFAULT '0' COMMENT '人工计划是否加急:0否1是', + `creation_mode` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'AUTO' COMMENT '计划生成方式:AUTO柜级自动、MANUAL单票人工、WAREHOUSE_TRANSFER仓储转运', + `plan_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '入仓计划备注', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_ASSIGNMENT' COMMENT '入库计划状态:PENDING_ASSIGNMENT待分配及后续正式状态', + `line_count` int NOT NULL DEFAULT '0' COMMENT '入仓码明细数量', + `pallet_count` int NOT NULL DEFAULT '0' COMMENT '系统自动分配托盘数量', + `total_volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '集装箱总体积(立方米)', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `version` int NOT NULL DEFAULT '0' COMMENT '入库计划乐观锁版本', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_plan_no` (`plan_no`), + KEY `idx_ll_inbound_plan_container` (`customer_id`,`container_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入库计划表:每张来源入仓单生成一张入库计划,同柜计划共享集装箱号'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_plan_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_plan_carton` ( + `id` bigint NOT NULL COMMENT '箱唛作业主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `order_id` bigint DEFAULT NULL COMMENT '海外首扫确权后的尾程订单ID', + `source_inbound_detail_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源入库明细ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU编码快照', + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国内冻结箱唛', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓ID快照', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称快照', + `plan_id` bigint DEFAULT NULL COMMENT '海外入库计划ID', + `line_id` bigint DEFAULT NULL COMMENT '入库计划明细ID', + `plan_pallet_id` bigint DEFAULT NULL COMMENT '海外计划托盘ID', + `warehouse_pallet_id` bigint DEFAULT NULL COMMENT '海外实物托盘ID', + `warehouse_location_id` bigint DEFAULT NULL COMMENT '海外库位ID', + `pda_task_id` bigint DEFAULT NULL COMMENT '首次扫码PDA任务ID', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '箱唛状态:UNASSIGNED、ON_PALLET、AVAILABLE', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `bound_at` datetime(3) DEFAULT NULL COMMENT '绑定托盘时间', + `received_at` datetime(3) DEFAULT NULL COMMENT '完成入库时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_carton_mark` (`customer_id`,`carton_mark`), + KEY `idx_ll_inbound_carton_plan` (`plan_id`,`status`), + KEY `idx_ll_inbound_carton_pallet` (`plan_pallet_id`,`status`), + KEY `idx_ll_inbound_carton_order` (`order_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜次冻结箱唛及海外入库箱级作业账'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_plan_line`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_plan_line` ( + `id` bigint NOT NULL COMMENT '入库计划明细ID(雪花ID)', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户账号标识', + `plan_id` bigint NOT NULL COMMENT '入库计划ID', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '头程入仓码快照', + `destination_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'OVERSEAS' COMMENT '目的类型:FBA按箱数接收、OVERSEAS逐箱扫码', + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA仓库编码', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓ID快照', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称快照', + `volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '入仓码体积(立方米)', + `planned_pallet_count` int NOT NULL DEFAULT '0' COMMENT '该明细分配的托盘数量', + `required_package_count` int NOT NULL DEFAULT '0', + `delivery_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓目的地址快照', + `postal_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓邮编快照', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系人快照', + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系电话快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_line_order` (`plan_id`,`order_id`), + KEY `idx_ll_inbound_line_plan` (`plan_id`), + KEY `idx_ll_inbound_line_tenant_plan` (`customer_id`,`plan_id`), + KEY `idx_ll_inbound_line_customer_plan` (`customer_id`,`plan_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入库计划明细表:按入仓码和尾程订单维度记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_plan_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_plan_pallet` ( + `id` bigint NOT NULL COMMENT '计划托盘ID(雪花ID)', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户账号标识', + `plan_id` bigint NOT NULL COMMENT '入库计划ID', + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '海外仓资源服务返回的真实托盘码', + `source_pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发不可变来源托盘号快照', + `pallet_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '人工计划托盘类型', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓ID快照', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称快照', + `capacity_cbm` decimal(18,4) NOT NULL DEFAULT '2.0000' COMMENT '托盘容量,固定为2立方米', + `allocated_volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '已分配体积(立方米)', + `sequence_no` int NOT NULL COMMENT '计划内托盘序号', + `warehouse_pallet_id` bigint DEFAULT NULL, + `warehouse_location_id` bigint DEFAULT NULL, + `warehouse_resource_lock_id` bigint DEFAULT NULL, + `assignment_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'UNASSIGNED', + `locked_at` datetime(3) DEFAULT NULL, + `actual_volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000', + `actual_package_count` int NOT NULL DEFAULT '0', + `version` int NOT NULL DEFAULT '0' COMMENT '收货累计值乐观锁版本', + `destination_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的类型:FBA或PRIVATE', + `delivery_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓目的地址快照', + `postal_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓邮编快照', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系人快照', + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系电话快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_pallet_sequence` (`plan_id`,`sequence_no`), + UNIQUE KEY `uk_ll_inbound_pallet_no` (`customer_id`,`pallet_no`), + KEY `idx_ll_inbound_pallet_plan` (`plan_id`), + KEY `idx_ll_inbound_pallet_tenant_plan` (`customer_id`,`plan_id`), + KEY `idx_ll_inbound_pallet_customer_plan` (`customer_id`,`plan_id`), + KEY `idx_ll_inbound_pallet_no` (`pallet_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入库计划托盘表:按目的仓隔离合托'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_plan_pallet_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_plan_pallet_allocation` ( + `id` bigint NOT NULL COMMENT '托盘分配记录ID(雪花ID)', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户账号标识', + `plan_id` bigint NOT NULL COMMENT '入库计划ID', + `line_id` bigint NOT NULL COMMENT '入库计划明细ID', + `pallet_id` bigint NOT NULL COMMENT '计划托盘ID', + `allocated_volume_cbm` decimal(18,4) NOT NULL COMMENT '该明细分配到托盘的体积(立方米)', + `planned_package_count` int NOT NULL DEFAULT '0', + `counted_package_count` int NOT NULL DEFAULT '0', + `picked_package_count` int NOT NULL DEFAULT '0', + `actual_volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_COUNT', + `version` int NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_allocation` (`line_id`,`pallet_id`), + KEY `idx_ll_inbound_allocation_plan` (`plan_id`), + KEY `idx_ll_inbound_allocation_pallet` (`pallet_id`), + KEY `idx_ll_inbound_allocation_tenant_plan` (`customer_id`,`plan_id`), + KEY `idx_ll_inbound_allocation_customer_plan` (`customer_id`,`plan_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入库计划托盘分配表:记录入仓码明细与计划托盘的分配关系'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_stock_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_stock_receipt` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `plan_id` bigint NOT NULL, + `task_id` bigint NOT NULL, + `allocation_id` bigint NOT NULL, + `line_id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名快照', + `product_name_en` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '英文品名快照', + `sku_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_detail_ids` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `warehouse_pallet_id` bigint NOT NULL, + `pallet_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发不可变来源托盘号快照', + `warehouse_location_id` bigint DEFAULT NULL, + `warehouse_location_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `batch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `received_packages` bigint NOT NULL, + `received_quantity` bigint DEFAULT '0', + `inventory_balance_id` bigint NOT NULL, + `inventory_position_id` bigint NOT NULL, + `inventory_operation_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `received_at` datetime(3) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_stock_receipt_task_allocation_sku` (`customer_id`,`task_id`,`allocation_id`,`sku_code`), + KEY `idx_ll_stock_receipt_plan` (`customer_id`,`plan_id`,`line_id`), + KEY `idx_ll_stock_receipt_inventory` (`inventory_balance_id`,`inventory_position_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable SKU-pallet PDA stock-in receipt snapshot'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inventory_balance`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inventory_balance` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Customer tenant', + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Customer name snapshot', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Actual overseas warehouse ID', + `overseas_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Actual overseas warehouse code snapshot', + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Actual overseas warehouse name snapshot', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Customer destination warehouse ID snapshot', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'Customer destination warehouse code snapshot', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Customer destination warehouse name snapshot', + `inbound_order_id` bigint NOT NULL, + `inbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `sku_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Chinese product name', + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名快照', + `product_name_en` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '英文品名快照', + `available_packages` bigint NOT NULL DEFAULT '0', + `hold_packages` bigint NOT NULL DEFAULT '0', + `allocated_packages` bigint NOT NULL DEFAULT '0', + `picked_packages` bigint NOT NULL DEFAULT '0', + `in_transit_packages` bigint NOT NULL DEFAULT '0', + `receiving_packages` bigint NOT NULL DEFAULT '0', + `procurement_packages` bigint NOT NULL DEFAULT '0', + `available_quantity` bigint NOT NULL DEFAULT '0', + `hold_quantity` bigint NOT NULL DEFAULT '0', + `allocated_quantity` bigint NOT NULL DEFAULT '0', + `picked_quantity` bigint NOT NULL DEFAULT '0', + `in_transit_quantity` bigint NOT NULL DEFAULT '0', + `receiving_quantity` bigint NOT NULL DEFAULT '0', + `procurement_quantity` bigint NOT NULL DEFAULT '0', + `version` bigint NOT NULL DEFAULT '0' COMMENT 'Optimistic lock version', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inventory_dimension` (`customer_id`,`overseas_warehouse_id`,`destination_warehouse_code`,`inbound_order_id`,`inbound_code`), + KEY `idx_ll_inventory_list` (`customer_id`,`overseas_warehouse_id`,`updated_at`), + KEY `idx_ll_inventory_inbound` (`customer_id`,`inbound_code`), + KEY `idx_ll_inventory_sku` (`customer_id`,`sku_code`,`updated_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户入仓单与海外目的仓维度实时库存余额'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inventory_ledger`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inventory_ledger` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '瀹㈡埛鍚嶇О涓嶅彲鍙樺揩鐓�', + `balance_id` bigint NOT NULL, + `position_id` bigint DEFAULT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', + `inbound_order_id` bigint NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `carton_packages` bigint DEFAULT NULL, + `pallet_id` bigint DEFAULT NULL, + `pallet_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `batch_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `warehouse_location_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `business_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `business_order_id` bigint DEFAULT NULL, + `business_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `outbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_event_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `status_from` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `status_to` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `before_packages` bigint NOT NULL, + `delta_packages` bigint NOT NULL, + `after_packages` bigint NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `occurred_at` datetime(3) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inventory_ledger_idempotency` (`customer_id`,`idempotency_key`), + KEY `idx_ll_inventory_ledger_query` (`customer_id`,`overseas_warehouse_id`,`occurred_at`), + KEY `idx_ll_inventory_ledger_business` (`customer_id`,`business_type`,`business_order_no`), + KEY `idx_ll_inventory_ledger_inbound` (`customer_id`,`inbound_code`,`occurred_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable inventory package and quantity ledger'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inventory_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inventory_operation` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PROCESSING', + `result_json` longtext COLLATE utf8mb4_unicode_ci, + `last_error` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inventory_operation_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_inventory_operation_status` (`customer_id`,`status`,`updated_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Inventory command idempotency record'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inventory_position`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inventory_position` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `balance_id` bigint NOT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pallet_id` bigint NOT NULL, + `pallet_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `batch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', + `warehouse_location_id` bigint DEFAULT NULL, + `warehouse_location_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Informational default location code', + `available_packages` bigint NOT NULL DEFAULT '0', + `hold_packages` bigint NOT NULL DEFAULT '0', + `allocated_packages` bigint NOT NULL DEFAULT '0', + `picked_packages` bigint NOT NULL DEFAULT '0', + `receiving_packages` bigint NOT NULL DEFAULT '0', + `product_quantity` bigint NOT NULL DEFAULT '0', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', + `version` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inventory_position` (`balance_id`,`pallet_id`,`batch_no`), + KEY `idx_ll_inventory_position_pallet` (`customer_id`,`pallet_id`), + KEY `idx_ll_inventory_position_location` (`customer_id`,`overseas_warehouse_id`,`warehouse_location_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SKU package stock by pallet, default location and batch'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_loading_event_inbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_loading_event_inbox` ( + `event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件全局唯一标识', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户/客户账号标识', + `event_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件类型', + `event_version` int NOT NULL COMMENT '事件契约版本', + `payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化事件负载 SHA-256 摘要', + `payload_json` json NOT NULL COMMENT '事件冻结负载 JSON', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'RECEIVED' COMMENT '消费状态:RECEIVED/PROCESSED', + `received_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '接收时间', + `processed_at` datetime(3) DEFAULT NULL COMMENT '处理完成时间', + `last_error` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次处理错误', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`event_id`), + UNIQUE KEY `uk_ll_loading_inbox_tenant_key` (`customer_id`,`event_type`,`event_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='头程装柜完成事件接收幂等箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_loading_order_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_loading_order_status_history` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '状态历史主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单 ID', + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更前状态', + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '变更后状态', + `event_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '触发事件 ID', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '状态变更备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '记录时间', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + KEY `idx_ll_loading_history_order` (`order_id`,`created_at`), + KEY `idx_ll_loading_history_tenant_order` (`customer_id`,`order_id`), + KEY `idx_ll_loading_history_customer_order` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB AUTO_INCREMENT=2104482219476070737 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单状态变更历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_local_looseboard_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_local_looseboard_history` ( + `id` bigint NOT NULL COMMENT '主键ID', + `order_id` bigint NOT NULL COMMENT '本土散板订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型:CREATE、UPDATE或STATUS', + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更前状态', + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '变更后状态', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作幂等键', + `change_detail` json DEFAULT NULL COMMENT '字段变更前后值JSON', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_local_looseboard_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='本土散板操作流水'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_local_looseboard_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_local_looseboard_operation` ( + `id` bigint NOT NULL COMMENT '操作记录ID', + `order_id` bigint NOT NULL COMMENT '本土散板订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作请求内容哈希', + `result_version` bigint NOT NULL COMMENT '操作完成后的订单版本', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_local_looseboard_operation_key` (`customer_id`,`order_id`,`idempotency_key`), + KEY `idx_ll_local_looseboard_operation_order` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='本土散板订单幂等操作账'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_local_looseboard_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_local_looseboard_order` ( + `id` bigint NOT NULL COMMENT '主键ID', + `lastleg_order_id` bigint DEFAULT NULL COMMENT '关联尾程主订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `order_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本土散板订单号', + `transport_mode` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '运输方式:拼车或优先拼载', + `pallet_required` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '是否需要打盘:YES或NO', + `transport_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '运输类型', + `origin` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '起运地', + `origin_address` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运详细地址', + `destination` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目的地', + `destination_address` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的详细地址、码头或仓号', + `container_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '柜型', + `package_count` int NOT NULL DEFAULT '0' COMMENT '货物件数', + `total_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '总重量(千克)', + `total_volume_cbm` decimal(18,6) NOT NULL DEFAULT '0.000000' COMMENT '总体积(立方米)', + `budget_amount` decimal(18,2) DEFAULT NULL COMMENT '预算总价', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'USD' COMMENT '预算币种', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '联系人姓名', + `contact_info` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '联系人联系方式', + `requested_date` date DEFAULT NULL COMMENT '要求服务日期', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_ACCEPTANCE' COMMENT '本土散板订单状态', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建请求内容哈希', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人ID', + `version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商品名称', + `estimated_pallet_count` int DEFAULT NULL COMMENT '客户申报预计托数,不代表实际收货', + `origin_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系人', + `origin_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系电话', + `destination_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系人', + `destination_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系电话', + `pickup_at` datetime(3) DEFAULT NULL COMMENT '取货时间(当地时间,不转换时区)', + `delivery_at` datetime(3) DEFAULT NULL COMMENT '送货时间(当地时间,不转换时区)', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_local_looseboard_no` (`customer_id`,`order_no`), + UNIQUE KEY `uk_ll_local_looseboard_key` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_local_looseboard_lastleg` (`lastleg_order_id`), + KEY `idx_ll_local_looseboard_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_local_looseboard_date` (`customer_id`,`requested_date`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='本土散板订单'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_monthly_exchange_rate`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_monthly_exchange_rate` ( + `id` bigint NOT NULL COMMENT '月度汇率ID', + `rate_month` char(7) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '汇率月份,格式yyyy-MM', + `base_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'USD' COMMENT '基准币种', + `quote_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '报价币种', + `usd_to_cny_average` decimal(18,8) NOT NULL COMMENT '美元兑人民币月平均汇率', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE/INACTIVE', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人', + `updated_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更新人', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_exchange_rate_month` (`rate_month`), + KEY `idx_ll_exchange_rate_page` (`status`,`rate_month`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='美元兑人民币月度平均汇率'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_monthly_exchange_rate_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_monthly_exchange_rate_history` ( + `id` bigint NOT NULL COMMENT '汇率变更历史ID', + `exchange_rate_id` bigint NOT NULL COMMENT '月度汇率ID', + `before_rate` decimal(18,8) DEFAULT NULL COMMENT '变更前汇率', + `after_rate` decimal(18,8) NOT NULL COMMENT '变更后汇率', + `before_status` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更前状态', + `after_status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '变更后状态', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更说明', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_exchange_rate_history` (`exchange_rate_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='月度汇率变更历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order` ( + `id` bigint NOT NULL COMMENT '雪花 ID', + `order_no` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '尾程单号', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户/客户账号标识', + `order_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'FIRST_LEG' COMMENT '订单类型', + `lx_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发领星入库单代码', + `destination_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的类型:FBA按箱数接收、OVERSEAS逐箱扫码', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '真实来源入仓码;无入仓关系的海外本土业务为空', + `source_region` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源区域/系统', + `source_inbound_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '最终实装 LOADED 分片 ID,建单幂等键', + `root_inbound_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '根入仓单 ID', + `source_order_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源订单 ID', + `source_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源订单号', + `root_order_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '根订单 ID', + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '货主名称', + `source_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源国内装柜仓 ID 快照', + `source_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源国内装柜仓名称快照', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外接柜仓ID;新建尾程订单由业务服务预分配', + `overseas_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外接柜仓业务编码快照', + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外接柜仓名称快照', + `receiving_warehouse_version` int NOT NULL DEFAULT '0' COMMENT '柜级接柜仓分配乐观锁版本', + `transfer_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '转入目的仓ID', + `transfer_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '转入目的仓编码', + `transfer_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '转入目的仓名称', + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA 仓库编码', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '集装箱号', + `container_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '待转柜' COMMENT '货柜状态', + `abnormal` tinyint NOT NULL DEFAULT '0' COMMENT '是否异常:0否1是', + `detained` tinyint NOT NULL DEFAULT '0' COMMENT '是否暂扣:0否1是', + `hold_chargeable` tinyint NOT NULL DEFAULT '0' COMMENT '当前暂扣是否计费:0否1是', + `hold_reason` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前暂扣原因;解除后为空', + `manual_node_override` tinyint NOT NULL DEFAULT '0' COMMENT '是否启用单票人工计划节点覆盖:0否1是', + `version` int NOT NULL DEFAULT '0' COMMENT '尾程订单命令乐观锁版本', + `pallet_count` int NOT NULL DEFAULT '0' COMMENT '托数', + `package_count` int NOT NULL DEFAULT '0' COMMENT '箱数', + `received_package_count` int DEFAULT NULL COMMENT 'PDA实际入库箱数', + `picked_package_count` int NOT NULL DEFAULT '0', + `shipped_package_count` int NOT NULL DEFAULT '0', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '体积(立方米)', + `product_quantity` int DEFAULT NULL COMMENT '货物数量', + `volume_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '体积重量(千克)', + `estimated_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到港时间', + `actual_arrival_at` datetime(3) DEFAULT NULL COMMENT '实际到港时间', + `estimated_warehouse_at` datetime(3) DEFAULT NULL COMMENT '预计到仓时间', + `arrival_time_version` int NOT NULL DEFAULT '0' COMMENT '柜级预计到仓时间乐观锁版本', + `inbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '入库单号', + `outbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '出库单号', + `delivery_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送单号', + `relabel_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标单号', + `relabel_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标状态', + `pallet_merge_flag` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '合托标记', + `pallet_merge_batch_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '平台预标记合托分组号', + `current_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_ASSIGNMENT' COMMENT '当前业务状态', + `private_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注(仅自己)', + `customer_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注(客户)', + `warehouse_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注(仓库)', + `source_event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源事件 ID', + `source_loading_plan_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源装柜计划 ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源头程货柜预订ID', + `source_loading_plan_version` bigint DEFAULT NULL COMMENT '来源装柜计划版本', + `source_handover_version` bigint DEFAULT NULL COMMENT '交接版本', + `source_payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源事件负载摘要', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `sub_order_status` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '子单据状态汇总', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_source` (`customer_id`,`source_region`,`source_inbound_id`), + KEY `idx_ll_order_list` (`customer_id`,`current_status`,`created_at`), + KEY `idx_ll_order_group` (`customer_id`,`order_no`), + KEY `idx_ll_order_container` (`customer_id`,`container_no`), + KEY `idx_ll_order_container_progress` (`source_container_booking_id`,`estimated_warehouse_at`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单主表'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_command_record`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_command_record` ( + `id` bigint NOT NULL COMMENT '尾程订单命令幂等记录ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令动作:MANUAL_PLAN、HOLD、MANUAL_NODES', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台操作人ID', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端幂等键', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化请求SHA-256摘要', + `result_ref` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '结果业务引用', + `result_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '首次成功响应JSON快照', + `result_version` int NOT NULL COMMENT '命令成功后的订单版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '首次成功时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_command_key` (`customer_id`,`order_id`,`action`,`operator_id`,`idempotency_key`), + KEY `idx_ll_order_command_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单写命令幂等与结果审计记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_detail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_detail` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单明细主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单 ID', + `source_inbound_detail_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源入仓明细 ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU 编码', + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名', + `product_name_en` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '英文品名', + `package_count` int NOT NULL DEFAULT '0' COMMENT '箱数', + `product_quantity` int DEFAULT NULL COMMENT '数量', + `pallet_count` int DEFAULT NULL COMMENT '托数', + `gross_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '毛重(千克)', + `net_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '净重(千克)', + `dimensional_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '体积重量(千克)', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '体积(立方米)', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓 ID', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称', + `fba_tracking_no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA跟踪号', + `shipment_no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '货件编号', + `shipping_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '唛头', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_detail_source` (`order_id`,`source_inbound_detail_id`), + KEY `idx_ll_detail_order` (`order_id`), + KEY `idx_ll_detail_tenant_order` (`customer_id`,`order_id`), + KEY `idx_ll_detail_customer_order` (`customer_id`,`order_id`,`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2291500000000010433 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单实装商品冻结明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_fee`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_fee` ( + `id` bigint NOT NULL COMMENT '费用明细主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `fee_item` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项目', + `currency` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '币种代码', + `amount` decimal(18,2) NOT NULL COMMENT '费用金额', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_REVIEW' COMMENT '费用状态:PENDING_REVIEW待审核、APPROVED审核通过、REJECTED已驳回', + `supplier_description` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商或费用说明', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建操作人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_ll_order_fee_customer_order` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单费用明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_hold_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_hold_history` ( + `id` bigint NOT NULL COMMENT '尾程订单暂扣历史ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `held` tinyint NOT NULL COMMENT '操作后是否暂扣:0否1是', + `chargeable` tinyint NOT NULL COMMENT '本次暂扣是否计费:0否1是', + `reason` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '暂扣或解除原因', + `order_version` int NOT NULL COMMENT '操作成功后的订单版本', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人ID', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人名称', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端幂等键', + `created_at` datetime(3) NOT NULL COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_hold_key` (`customer_id`,`order_id`,`operator_id`,`idempotency_key`), + KEY `idx_ll_order_hold_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单暂扣与解除不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_manual_node`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_manual_node` ( + `id` bigint NOT NULL COMMENT '尾程订单人工节点ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `node_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '八行人工展示节点稳定代码,与Carrier标准节点隔离', + `node_at` datetime(3) DEFAULT NULL COMMENT '人工填写节点时间,允许为空', + `source` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'MANUAL' COMMENT '节点来源,固定MANUAL', + `order_version` int NOT NULL COMMENT '最近编辑后的订单版本', + `updated_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '最近操作人ID', + `updated_at` datetime(3) NOT NULL COMMENT '最近编辑时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_manual_node` (`customer_id`,`order_id`,`node_code`), + KEY `idx_ll_order_manual_node_order` (`customer_id`,`order_id`,`node_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单当前人工节点覆盖事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_manual_node_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_manual_node_history` ( + `id` bigint NOT NULL COMMENT '尾程订单人工节点历史ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `nodes_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次全量人工节点JSON快照', + `order_version` int NOT NULL COMMENT '操作成功后的订单版本', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人ID', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人名称', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端幂等键', + `created_at` datetime(3) NOT NULL COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_manual_node_history_key` (`customer_id`,`order_id`,`operator_id`,`idempotency_key`), + KEY `idx_ll_order_manual_node_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单人工节点覆盖不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_no_daily_sequence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_no_daily_sequence` ( + `business_date` date NOT NULL COMMENT '业务日期(Asia/Shanghai)', + `last_sequence` int NOT NULL COMMENT '当日已分配尾程单流水号', + PRIMARY KEY (`business_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程单号按日原子流水'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_operation_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_operation_log` ( + `id` bigint NOT NULL COMMENT '操作记录主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `operation_node` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作节点', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人名称', + `result` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理结果', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + KEY `idx_ll_order_operation_customer_order` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单操作记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_source_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_source_pallet` ( + `id` bigint NOT NULL COMMENT '来源托盘快照ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `source_pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '头程冻结托盘码', + `sequence_no` int NOT NULL COMMENT '订单内稳定顺序', + `source_event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源装柜完成事件ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_source_pallet_no` (`source_pallet_no`), + UNIQUE KEY `uk_ll_source_pallet_sequence` (`customer_id`,`order_id`,`sequence_no`), + KEY `idx_ll_source_pallet_order` (`customer_id`,`order_id`), + KEY `fk_ll_source_pallet_order` (`order_id`), + CONSTRAINT `fk_ll_source_pallet_order` FOREIGN KEY (`order_id`) REFERENCES `ll_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='头程交接的不可变托盘码快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_status_history` ( + `id` bigint NOT NULL COMMENT '订单状态历史主键', + `customer_id` bigint NOT NULL COMMENT '租户 ID', + `order_id` bigint NOT NULL COMMENT '订单 ID', + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更前状态', + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '变更后状态', + `reason` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更原因', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单状态历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_outbound_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_outbound_order` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `outbound_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `dispatch_order_id` bigint DEFAULT NULL COMMENT '派车单ID,一件代发为空', + `dispatch_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派车单号,一件代发为空', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'WAIT_OUTBOUND', + `outbound_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'DISPATCH_DELIVERY' COMMENT '出库类型', + `lx_codes` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关联一件代发领星入库单代码汇总', + `recipient_info` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发收件信息', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发创建请求摘要,其他出库类型为空', + `package_count` int NOT NULL DEFAULT '0', + `pallet_count` int NOT NULL DEFAULT '0', + `gross_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '毛重(千克)', + `volume_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '材积重(千克)', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '体积(立方米),来源未确认时为空', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `fee_coverage_json` json DEFAULT NULL COMMENT '发运原费用及服务覆盖确认快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_outbound_no` (`customer_id`,`outbound_no`), + UNIQUE KEY `uk_ll_outbound_idempotency` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_outbound_dispatch` (`customer_id`,`dispatch_order_id`), + KEY `idx_ll_outbound_list` (`customer_id`,`status`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Outbound document generated from a dispatch'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_outbound_pallet_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_outbound_pallet_item` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `outbound_order_id` bigint NOT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL COMMENT '浠撳簱瀹炵墿鎵樼洏ID', + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鎵樼洏鍙凤紝绠辩淮搴﹀嚭搴撲负绌�', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `package_count` int NOT NULL DEFAULT '0', + `gross_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '毛重(千克)', + `volume_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '材积重(千克)', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '体积(立方米),来源未确认时为空', + `picked_package_count` int NOT NULL DEFAULT '0' COMMENT '已拣箱数', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'WAIT_PICK' COMMENT '拣货状态', + `order_refs` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发SKU', + `return_sku_quantity` bigint DEFAULT NULL COMMENT '退货单SKU本来源计划出库件数快照,NULL为历史整箱出库', + `carton_marks` varchar(4000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `dispatch_item_id` bigint DEFAULT NULL COMMENT '本次整车排车作业明细ID', + `source_attribution_id` bigint DEFAULT NULL COMMENT '不可变PDA真实拣货归属ID', + `source_order_id` bigint DEFAULT NULL COMMENT '本行真实来源尾程订单ID', + `source_inventory_position_id` bigint DEFAULT NULL COMMENT '本行实际拣货库存仓位ID', + `source_return_receipt_id` bigint DEFAULT NULL COMMENT '本行实际退回再派实收记录ID', + `source_return_carton_id` bigint DEFAULT NULL COMMENT '本行实际退货换标来源箱ID', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_outbound_pallet` (`customer_id`,`outbound_order_id`,`warehouse_pallet_id`), + UNIQUE KEY `uk_outbound_source_attribution` (`customer_id`,`source_attribution_id`), + KEY `idx_ll_outbound_pallet_list` (`customer_id`,`outbound_order_id`), + KEY `idx_ll_outbound_pallet_destination` (`customer_id`,`destination_warehouse_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Pallet detail snapshot for an outbound document'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_outbound_pda_pick`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_outbound_pda_pick` ( + `id` bigint NOT NULL COMMENT '主键ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `task_id` bigint NOT NULL COMMENT 'PDA任务ID', + `outbound_pallet_item_id` bigint NOT NULL COMMENT '出库托盘明细ID', + `inventory_position_id` bigint DEFAULT NULL COMMENT '库存仓位ID,退货箱唛出库为空', + `packages` bigint NOT NULL COMMENT '拣货箱数', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `picked_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_outbound_pda_pick_key` (`customer_id`,`idempotency_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='一件代发出库PDA托盘拣货记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_outbound_pda_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_outbound_pda_task` ( + `id` bigint NOT NULL COMMENT '主键ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `outbound_order_id` bigint NOT NULL COMMENT '出库单ID', + `task_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA任务号', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING' COMMENT '任务状态:待拣货、拣货中、已完成', + `completion_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '完成命令幂等键', + `pushed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '推送时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '完成时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_outbound_pda_task_order` (`customer_id`,`outbound_order_id`), + UNIQUE KEY `uk_ll_outbound_pda_task_no` (`customer_id`,`task_no`), + UNIQUE KEY `uk_ll_outbound_pda_complete_key` (`customer_id`,`completion_idempotency_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='一件代发出库PDA拣货任务'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_procurement_fee`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_procurement_fee` ( + `id` bigint NOT NULL COMMENT '主键ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID', + `fee_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用业务号', + `fee_item_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项编码', + `fee_item_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项名称', + `amount` decimal(20,2) NOT NULL COMMENT 'CNY金额', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '费用币种', + `voucher_file_id` bigint NOT NULL COMMENT '凭证文件ID', + `voucher_file_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '凭证文件名', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '说明', + `wallet_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资金状态', + `wallet_error_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资金错误码', + `wallet_error_message` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资金错误说明', + `wallet_command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前资金指令事件ID', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '登记人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `purpose` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '费用业务用途;由履约节点确定', + `confirmation_origin` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BUSINESS' COMMENT '核定入口:BUSINESS业务节点、FINANCIAL财务操作', + `fee_version` int DEFAULT NULL COMMENT '同用途费用确认版本', + `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否当前有效版本', + `determination` varchar(24) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'POSITIVE正额、ZERO零元、NOT_APPLICABLE不适用', + `original_currency` char(3) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核定原币CNY或USD', + `original_amount` decimal(20,2) DEFAULT NULL COMMENT '核定原币金额', + `exchange_rate` decimal(20,6) DEFAULT NULL COMMENT '已确认汇率快照', + `exchange_rate_month` char(7) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '已确认汇率所属月份', + `business_date` date DEFAULT NULL COMMENT '实际费用业务日期', + `wallet_business_id` bigint DEFAULT NULL COMMENT '资金冻结对应采购费用记录', + `wallet_business_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资金冻结业务号;实际国际运费引用原预估', + `wallet_hold_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance冻结引用', + `wallet_ledger_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance实际处理流水引用', + `settled_command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '成功实扣或退款的资金命令事件', + `source_fee_id` bigint DEFAULT NULL COMMENT '已实扣费用来源ID', + `parent_fee_id` bigint DEFAULT NULL COMMENT '原费用或预估引用', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '确认请求摘要', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_procurement_fee_no` (`fee_no`), + UNIQUE KEY `uk_ll_procurement_fee_version` (`order_id`,`purpose`,`fee_item_code`,`fee_version`), + KEY `idx_ll_procurement_fee_order` (`customer_id`,`order_id`,`created_at`), + CONSTRAINT `chk_ll_procurement_fee_amount` CHECK ((`amount` > 0)), + CONSTRAINT `chk_ll_procurement_fee_currency` CHECK ((`currency` = _utf8mb4'CNY')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外采购费用明细及资金生命周期'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_procurement_file`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_procurement_file` ( + `id` bigint NOT NULL COMMENT '主键ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID', + `category` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'RECEIPT签收文件或VOUCHER费用凭证', + `file_id` bigint NOT NULL COMMENT 'File服务文件ID', + `file_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件名快照', + `content_type` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '媒体类型', + `size_bytes` bigint NOT NULL DEFAULT '0' COMMENT '文件大小', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '上传人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_procurement_file` (`order_id`,`file_id`), + KEY `idx_ll_procurement_file_order` (`customer_id`,`order_id`,`category`,`created_at`), + CONSTRAINT `chk_ll_procurement_file_category` CHECK ((`category` in (_utf8mb4'RECEIPT',_utf8mb4'VOUCHER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外采购签收文件及费用凭证'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_procurement_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_procurement_order` ( + `id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `order_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `purchase_category` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `product_specification` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `product_url` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `purchase_quantity` bigint NOT NULL, + `budget_unit_price` decimal(18,2) DEFAULT NULL, + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'USD', + `receiving_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `purchase_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `purchase_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_quantity` bigint NOT NULL DEFAULT '0', + `outbound_details` json DEFAULT NULL COMMENT '出库明细', + `outbound_quantity` bigint NOT NULL DEFAULT '0', + `domestic_carrier` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `domestic_tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_carrier` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `estimated_arrival_at` datetime(3) DEFAULT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_REVIEW', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `review_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `review_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核幂等键', + `review_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核请求内容哈希', + `reviewed_at` datetime(3) DEFAULT NULL, + `version` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_overseas_procurement_order_no` (`customer_id`,`order_no`), + UNIQUE KEY `uk_ll_overseas_procurement_order_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_overseas_procurement_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_overseas_procurement_warehouse` (`customer_id`,`purchase_warehouse_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Overseas procurement order awaiting business approval'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_procurement_outbound`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_procurement_outbound` ( + `id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `quantity` bigint NOT NULL, + `outbound_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `carrier` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `outbound_at` datetime(3) NOT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_overseas_procurement_outbound_no` (`customer_id`,`order_id`,`outbound_no`), + KEY `idx_ll_overseas_procurement_outbound_order` (`customer_id`,`order_id`,`outbound_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Manual outbound records for overseas procurement inventory'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_procurement_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_procurement_status_history` ( + `id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作幂等键', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `operation_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作类型:CREATE、REVIEW或UPDATE', + `change_detail` json DEFAULT NULL COMMENT '字段变更前后值JSON', + PRIMARY KEY (`id`), + KEY `idx_ll_overseas_procurement_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable overseas procurement review history'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_quote`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_quote` ( + `id` bigint NOT NULL COMMENT '报价ID', + `name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价名称', + `warehouse_id` bigint NOT NULL COMMENT '国内平台海外合作仓ID', + `warehouse_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '合作仓编码快照', + `warehouse_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '合作仓名称快照', + `country_code` varchar(2) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国家二字码快照', + `provider_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价方', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '币种', + `effective_start` date NOT NULL COMMENT '生效开始日期', + `effective_end` date NOT NULL COMMENT '生效结束日期', + `version_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务版本号', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'INACTIVE' COMMENT '状态:ACTIVE/INACTIVE', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人', + `updated_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更新人', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_quote_warehouse_provider_version` (`warehouse_id`,`provider_name`,`version_code`), + KEY `idx_ll_quote_page` (`status`,`updated_at`,`id`), + KEY `idx_ll_quote_effective` (`warehouse_id`,`provider_name`,`currency`,`effective_start`,`effective_end`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外仓报价主表'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_quote_fee`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_quote_fee` ( + `id` bigint NOT NULL COMMENT '费用明细ID', + `quote_id` bigint NOT NULL COMMENT '报价ID', + `sequence_no` int NOT NULL COMMENT '显示顺序', + `item` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项目', + `billing_unit` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '计费单位', + `unit_price` decimal(18,4) NOT NULL COMMENT '单价', + `minimum_charge` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '最低收费', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_quote_fee_sequence` (`quote_id`,`sequence_no`), + KEY `idx_ll_quote_fee_quote` (`quote_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外仓报价仓库费用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_quote_transit_price`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_quote_transit_price` ( + `id` bigint NOT NULL COMMENT '中转价格ID', + `quote_id` bigint NOT NULL COMMENT '报价ID', + `sequence_no` int NOT NULL COMMENT '显示顺序', + `fba_warehouse_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'FBA仓编码', + `delivery_method` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价运输方式', + `estimated_miles` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '预估英里数', + `price` decimal(18,4) NOT NULL COMMENT '报价金额', + `minimum_charge` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '最低收费', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_quote_transit_sequence` (`quote_id`,`sequence_no`), + KEY `idx_ll_quote_transit_quote` (`quote_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外仓报价中转价格明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_inventory_move`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_inventory_move` ( + `id` bigint NOT NULL COMMENT '移库操作ID', + `move_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '移库操作单号', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'Token冻结的海外实际仓ID', + `pallet_id` bigint NOT NULL COMMENT '整托移库的实物托盘ID', + `pallet_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实物托盘码快照', + `source_location_id` bigint NOT NULL COMMENT '来源库位ID', + `source_location_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源库位码快照', + `target_location_id` bigint NOT NULL COMMENT '目标库位ID', + `target_location_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目标库位码快照', + `customer_count` int NOT NULL COMMENT '托盘涉及客户数', + `position_count` int NOT NULL COMMENT '迁移库存位置数', + `package_count` bigint NOT NULL COMMENT '迁移总箱数', + `pallet_version_before` int NOT NULL COMMENT '迁移前托盘版本', + `pallet_version_after` int DEFAULT NULL COMMENT '迁移后托盘版本', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作账号标识', + `reason` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '移库原因', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '移库幂等键', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '移库请求哈希', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '移库处理状态', + `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '成功响应JSON', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_inventory_move_no` (`move_no`), + UNIQUE KEY `uk_ll_pda_inventory_move_key` (`overseas_warehouse_id`,`operator_key`,`idempotency_key`), + KEY `idx_ll_pda_inventory_move_pallet` (`overseas_warehouse_id`,`pallet_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA同仓整托移库记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_operation_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_operation_history` ( + `id` bigint NOT NULL COMMENT 'PDA作业历史ID', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'Token冻结的海外实际仓ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '作业涉及的客户标识', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作账号标识', + `operation_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作业类型', + `business_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作业业务键', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作业结果状态', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '写操作幂等键', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '写请求内容哈希', + `summary` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '作业结果摘要', + `occurred_at` datetime(3) NOT NULL COMMENT '作业发生时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_history_idempotency` (`operator_key`,`idempotency_key`), + KEY `idx_ll_pda_history_operator` (`overseas_warehouse_id`,`operator_key`,`occurred_at`), + KEY `idx_ll_pda_history_business` (`overseas_warehouse_id`,`operation_type`,`business_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA真实作业历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_pallet_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_pallet_operation` ( + `id` bigint NOT NULL COMMENT 'PDA托盘作业ID', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'Token冻结的海外实际仓ID', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作账号标识', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备幂等键', + `operation_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '托盘作业类型', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容摘要', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理状态:PROCESSING、COMPLETED、FAILED_COMPENSATED、COMPENSATION_REQUIRED', + `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '成功响应快照', + `remote_transitions_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '实物托盘状态变更回执', + `last_error` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最后失败原因', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_pallet_idempotency` (`operator_key`,`idempotency_key`), + KEY `idx_ll_pda_pallet_warehouse` (`overseas_warehouse_id`,`status`,`updated_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA托盘作业幂等、补偿与结果记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_stocktake_action`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_stocktake_action` ( + `id` bigint NOT NULL COMMENT '盘点动作ID', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'Token冻结的海外实际仓ID', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作账号标识', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '动作幂等键', + `action_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点动作类型', + `task_id` bigint DEFAULT NULL COMMENT '盘点任务ID', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '动作请求哈希', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '动作处理状态', + `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '成功响应JSON', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_stocktake_action` (`overseas_warehouse_id`,`operator_key`,`idempotency_key`), + KEY `idx_ll_pda_stocktake_action_task` (`task_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA盘点动作幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_stocktake_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_stocktake_item` ( + `id` bigint NOT NULL COMMENT '盘点明细ID', + `task_id` bigint NOT NULL COMMENT '盘点任务ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '库存所属客户标识', + `balance_id` bigint NOT NULL COMMENT '库存余额ID', + `position_id` bigint NOT NULL COMMENT '库存位置ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU快照', + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '品名快照', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '入仓码快照', + `pallet_id` bigint NOT NULL COMMENT '实物托盘ID', + `pallet_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实物托盘码快照', + `location_id` bigint NOT NULL COMMENT '库位ID快照', + `location_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '库位码快照', + `book_packages` bigint NOT NULL COMMENT '任务创建时账面总箱数', + `actual_packages` bigint DEFAULT NULL COMMENT '现场实盘总箱数', + `difference_packages` bigint DEFAULT NULL COMMENT '实盘与账面箱数差异', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点明细状态', + `position_version` bigint NOT NULL COMMENT '任务创建时库存位置版本', + `counted_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '盘点操作账号标识', + `version` bigint NOT NULL DEFAULT '0' COMMENT '明细乐观锁版本', + `counted_at` datetime(3) DEFAULT NULL COMMENT '盘点时间', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_stocktake_item` (`task_id`,`position_id`), + KEY `idx_ll_pda_stocktake_item_task` (`task_id`,`status`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA库存盘点位置明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_stocktake_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_stocktake_task` ( + `id` bigint NOT NULL COMMENT '盘点任务ID', + `task_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点任务号', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'Token冻结的海外实际仓ID', + `scope_type` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点范围类型LOCATION或PALLET', + `scope_resource_id` bigint NOT NULL COMMENT '盘点库位或托盘资源ID', + `scope_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点库位码或托盘码快照', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点任务状态', + `position_count` int NOT NULL COMMENT '库存位置总数', + `counted_count` int NOT NULL DEFAULT '0' COMMENT '已盘库存位置数', + `difference_count` int NOT NULL DEFAULT '0' COMMENT '存在差异的库存位置数', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建操作账号标识', + `submitted_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '提交操作账号标识', + `submit_reason` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '盘点差异提交原因', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建幂等键', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建请求哈希', + `version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + `submitted_at` datetime(3) DEFAULT NULL COMMENT '提交完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_stocktake_no` (`task_no`), + UNIQUE KEY `uk_ll_pda_stocktake_create` (`overseas_warehouse_id`,`created_by`,`idempotency_key`), + KEY `idx_ll_pda_stocktake_list` (`overseas_warehouse_id`,`status`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA库存盘点任务'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_budget_authorization`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_budget_authorization` ( + `id` bigint NOT NULL COMMENT '预算授权ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `previous_amount` decimal(20,2) DEFAULT NULL COMMENT '原货款预算总上限;未授权保持空', + `previous_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原预算币种', + `authorized_amount` decimal(20,2) NOT NULL COMMENT '客户授权的新货款总上限', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户授权币种', + `voucher_file_id` bigint NOT NULL COMMENT '客户确认书面或聊天凭证', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '授权依据', + `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '核验人员', + `reviewed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '核验时间', + PRIMARY KEY (`id`), + KEY `idx_procurement_budget_order` (`customer_id`,`order_id`,`id`), + CONSTRAINT `chk_procurement_budget_amount` CHECK (((`authorized_amount` >= 0) and (`previous_amount` >= 0))), + CONSTRAINT `chk_procurement_budget_currency` CHECK (((`currency` in (_utf8mb4'CNY',_utf8mb4'USD')) and (`previous_currency` in (_utf8mb4'CNY',_utf8mb4'USD')))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购货款预算授权核验历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_carton` ( + `id` bigint NOT NULL COMMENT '版本内箱记录ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `manifest_id` bigint NOT NULL COMMENT '装箱清单版本', + `carton_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购订单内业务箱号', + `length_cm` decimal(12,2) NOT NULL COMMENT '外箱长厘米', + `width_cm` decimal(12,2) NOT NULL COMMENT '外箱宽厘米', + `height_cm` decimal(12,2) NOT NULL COMMENT '外箱高厘米', + `gross_weight_kg` decimal(12,3) NOT NULL COMMENT '封箱毛重千克', + `quantity` bigint NOT NULL COMMENT '本箱合格商品总件数', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_carton_version` (`manifest_id`,`carton_no`), + KEY `idx_procurement_carton_order` (`order_id`,`manifest_id`), + CONSTRAINT `chk_procurement_carton_measurement` CHECK (((`length_cm` > 0) and (`width_cm` > 0) and (`height_cm` > 0) and (`gross_weight_kg` > 0) and (`quantity` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购版本化逐箱实测与件数'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_carton_source`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_carton_source` ( + `carton_id` bigint NOT NULL COMMENT '版本内箱ID', + `receipt_id` bigint NOT NULL COMMENT '海外实收明细来源', + `quantity` bigint NOT NULL COMMENT '从该实收装入本箱的件数', + PRIMARY KEY (`carton_id`,`receipt_id`), + KEY `idx_procurement_carton_receipt` (`receipt_id`), + CONSTRAINT `chk_procurement_carton_source_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购箱内货物的实收来源与数量'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_closure`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_closure` ( + `id` bigint NOT NULL COMMENT '采购异常关闭ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `closure_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常关闭业务号', + `customer_voucher_file_id` bigint NOT NULL COMMENT '客户同意停止履约凭证', + `financial_conclusion` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '已知费用及后续无需收费的处理结论,不改变资金事实', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '内部关闭原因', + `client_summary` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '人工确认的对客关闭摘要', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购管理确认人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '关闭确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_closure_order` (`order_id`), + UNIQUE KEY `uk_procurement_closure_no` (`closure_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购实物资金收口后的异常关闭事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_closure_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_closure_item` ( + `id` bigint NOT NULL COMMENT '关闭货物处置ID', + `closure_id` bigint NOT NULL COMMENT '采购关闭ID', + `source_kind` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '购买未达、在途未达、合格、破损或多货来源', + `source_id` bigint DEFAULT NULL COMMENT '原实收或国际交寄箱,购买未达为空', + `quantity` bigint NOT NULL COMMENT '本来源最终明确去向件数', + `decision` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '供应商保管、退还、报失、客户授权保管或处置', + `destination` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际去向及接收方说明', + `voucher_file_id` bigint NOT NULL COMMENT '本单实物处置证明', + PRIMARY KEY (`id`), + KEY `idx_procurement_closure_source` (`closure_id`,`source_kind`,`source_id`), + CONSTRAINT `chk_procurement_closure_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='异常关闭逐来源剩余货物最终去向,不产生新发运'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_command` ( + `id` bigint NOT NULL COMMENT '操作记录ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `action` varchar(48) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购节点动作', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求摘要', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '执行人', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作依据', + `detail_json` json NOT NULL COMMENT '内部操作及更正依据快照,不直接对客展示', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '执行时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_command` (`order_id`,`action`,`idempotency_key`), + KEY `idx_procurement_command_customer` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购节点幂等与不可变审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_control_note`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_control_note` ( + `id` bigint NOT NULL COMMENT '采购更正说明ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `note_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更正说明业务号', + `target_type` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '购买、仓库、实收或交寄事实类型', + `target_id` bigint DEFAULT NULL COMMENT '本单事实对象引用,购买为空', + `blocking` tinyint(1) NOT NULL COMMENT '是否阻断后续计划履约', + `voucher_file_id` bigint NOT NULL COMMENT '本单内部事实更正凭证', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '内部更正说明', + `client_summary` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '人工确认的对客摘要,不复制内部原始内容', + `original_value_json` json DEFAULT NULL COMMENT '服务端记录的原事实快照', + `corrected_value_json` json DEFAULT NULL COMMENT '服务端记录的更正事实快照', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购管理操作人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', + `resolved_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '处理确认人', + `resolved_at` datetime(3) DEFAULT NULL COMMENT '阻断解除时间', + `resolution_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '内部处理结果', + `resolution_voucher_id` bigint DEFAULT NULL COMMENT '本单处理凭证', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_note_no` (`note_no`), + KEY `idx_procurement_note_block` (`order_id`,`blocking`,`resolved_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购不可覆盖事实的更正说明及阻断异常'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_daily_sequence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_daily_sequence` ( + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID', + `business_date` date NOT NULL COMMENT '北京时间业务日期', + `sequence_value` int NOT NULL COMMENT '客户当日已分配最大序号', + PRIMARY KEY (`customer_id`,`business_date`), + CONSTRAINT `chk_ll_procurement_sequence` CHECK ((`sequence_value` between 1 and 9999)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外采购客户日序列'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_disposition`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_disposition` ( + `id` bigint NOT NULL COMMENT '差异处理ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS海外或DOMESTIC国内', + `source_carton_id` bigint DEFAULT NULL COMMENT '国内原交寄箱来源', + `receipt_id` bigint DEFAULT NULL COMMENT '破损或多货对应实收记录,短少为空', + `kind` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SHORTAGE短少、DAMAGED破损、EXTRA多货', + `quantity` bigint NOT NULL COMMENT '已批准处置件数', + `decision` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ACCEPT_SHORTAGE确认短少、DISPOSE_DAMAGED拒收或处置、RETURN_EXTRA退回多货', + `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '当前有效处置;撤销只改变有效性并保留原事实', + `voucher_file_id` bigint NOT NULL COMMENT '本单客户确认或实际处置凭证', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处置依据', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购管理人员', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', + PRIMARY KEY (`id`), + KEY `idx_procurement_disposition_source` (`order_id`,`leg`,`source_carton_id`,`receipt_id`,`kind`), + CONSTRAINT `chk_procurement_disposition_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购单内差异处置,不自动退款'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_estimate_review`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_estimate_review` ( + `id` bigint NOT NULL COMMENT '预估核对ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `label_set_id` bigint NOT NULL COMMENT '已核对国际面单版本', + `fee_id` bigint NOT NULL COMMENT '唯一有效预估费用版本', + `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '核价人员', + `reviewed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '核对时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_estimate_review` (`label_set_id`,`fee_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='面单清单与预估冻结的显式核对关联'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_fee_correction`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_fee_correction` ( + `id` bigint NOT NULL COMMENT '费用链更正ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `correction_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '财务更正业务号', + `root_fee_id` bigint NOT NULL COMMENT '原实际费用链根', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本单更正请求幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更正目标及凭证请求摘要', + `target_original_amount` decimal(20,2) NOT NULL COMMENT '本次正确原币总额', + `original_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '沿用原费用币种', + `exchange_rate` decimal(20,6) NOT NULL COMMENT '沿用原费用汇率快照', + `exchange_rate_month` char(7) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原汇率月份,不取本次操作月份', + `target_amount` decimal(20,2) NOT NULL COMMENT '正确总额折算CNY', + `previous_net_amount` decimal(20,2) NOT NULL COMMENT '确认前整链净实扣CNY', + `difference_amount` decimal(20,2) NOT NULL COMMENT 'CNY正差额追加、负差额退款、零差额仅留核对记录', + `voucher_file_id` bigint NOT NULL COMMENT '本订单财务更正凭证', + `reason` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更正依据', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '授权财务操作人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_correction_no` (`correction_no`), + UNIQUE KEY `uk_procurement_correction_request` (`order_id`,`idempotency_key`), + KEY `idx_procurement_correction_root` (`order_id`,`root_fee_id`,`id`), + CONSTRAINT `chk_procurement_correction_amount` CHECK (((`target_original_amount` >= 0) and (`target_amount` >= 0) and (`previous_net_amount` >= 0) and (`exchange_rate` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用链更正目标与原汇率快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_fee_correction_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_fee_correction_item` ( + `correction_id` bigint NOT NULL COMMENT '本次费用链更正ID', + `fee_id` bigint NOT NULL COMMENT '本次产生的独立正差额或退款费用ID', + PRIMARY KEY (`correction_id`,`fee_id`), + UNIQUE KEY `uk_procurement_correction_fee` (`fee_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用目标更正与逐笔资金事实关联'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_flow`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_flow` ( + `order_id` bigint NOT NULL COMMENT '采购订单ID,一单一个履约批次', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `purchased_at` datetime(3) DEFAULT NULL COMMENT '真实购买时间', + `purchased_product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际购买商品', + `purchased_specification` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际购买规格', + `purchased_quantity` bigint DEFAULT NULL COMMENT '实际购买件数', + `purchase_amount` decimal(20,2) DEFAULT NULL COMMENT '供应商实付原币金额', + `purchase_currency` char(3) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商实付原币CNY或USD', + `purchase_voucher_id` bigint DEFAULT NULL COMMENT '购买凭证引用', + `purchase_issue` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '购买未核定或异常说明', + `purchase_confirmed_at` datetime(3) DEFAULT NULL COMMENT '货款核定时间,不代表扣费成功', + `actual_warehouse_id` bigint DEFAULT NULL COMMENT '首次实际收货冻结的仓库ID', + `actual_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际收货仓编码快照', + `actual_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际收货仓名称快照', + `overseas_received_at` datetime(3) DEFAULT NULL COMMENT '海外整批收货完成时间', + `packing_version` int DEFAULT NULL COMMENT '当前确认装箱清单版本', + `overseas_shipped_at` datetime(3) DEFAULT NULL COMMENT '国际段整批实际交寄时间', + `domestic_received_at` datetime(3) DEFAULT NULL COMMENT '国内整批收货完成时间', + `charges_confirmed_at` datetime(3) DEFAULT NULL COMMENT '国内整单费用核定时间', + `customer_shipped_at` datetime(3) DEFAULT NULL COMMENT '国内寄客户实际交寄时间', + `domestic_receiver_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国际段国内收件人', + `domestic_receiver_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国际段国内收件电话', + `domestic_receiver_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国际段国内接收地址', + `cancelled_at` datetime(3) DEFAULT NULL COMMENT '购买前取消时间', + `closed_at` datetime(3) DEFAULT NULL COMMENT '异常关闭时间', + `control_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '取消或关闭原因', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`order_id`), + KEY `idx_procurement_flow_customer` (`customer_id`,`order_id`), + CONSTRAINT `chk_procurement_purchase_amount` CHECK (((`purchase_amount` is null) or (`purchase_amount` >= 0))), + CONSTRAINT `chk_procurement_purchase_quantity` CHECK (((`purchased_quantity` is null) or (`purchased_quantity` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购单一批次履约事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_label_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_label_item` ( + `label_set_id` bigint NOT NULL COMMENT '面单批版本ID', + `carton_id` bigint NOT NULL COMMENT '原海外清单箱ID', + `file_id` bigint NOT NULL COMMENT '本采购订单面单文件', + `page_no` int NOT NULL COMMENT '该箱对应文件页码,从1开始', + `carrier` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '承运商', + `tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '箱主或子运单号', + `applied_at` datetime(3) DEFAULT NULL COMMENT '真实贴单时间', + `applied_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '贴单确认人', + PRIMARY KEY (`label_set_id`,`carton_id`), + CONSTRAINT `chk_procurement_label_page` CHECK ((`page_no` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购逐箱文件页关联及贴单事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_label_set`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_label_set` ( + `id` bigint NOT NULL COMMENT '面单批版本ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS国际段或DOMESTIC寄客户段', + `version` int NOT NULL COMMENT '订单段内面单版本', + `manifest_id` bigint NOT NULL COMMENT '原海外确认装箱版本', + `cargo_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '箱规及有效货物来源摘要', + `sender_snapshot` json NOT NULL COMMENT '寄件人姓名电话地址快照', + `receiver_snapshot` json NOT NULL COMMENT '收件人姓名电话地址快照', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '制单操作人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_label_version` (`order_id`,`leg`,`version`), + CONSTRAINT `chk_procurement_label_leg` CHECK ((`leg` in (_utf8mb4'OVERSEAS',_utf8mb4'DOMESTIC'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购两段面单不可变版本和地址快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_manifest`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_manifest` ( + `id` bigint NOT NULL COMMENT '装箱清单ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `version` int NOT NULL COMMENT '订单内装箱版本', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'DRAFT草稿、CONFIRMED已确认、SUPERSEDED已替代', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '确认时间', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '制单人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '版本保存时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_manifest_version` (`order_id`,`version`), + CONSTRAINT `chk_procurement_manifest_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'CONFIRMED',_utf8mb4'SUPERSEDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购装箱清单不可变版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_receipt` ( + `id` bigint NOT NULL COMMENT '实收明细ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `receipt_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购收货业务编号', + `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS海外或DOMESTIC国内', + `source_carton_id` bigint DEFAULT NULL COMMENT '国内实收关联原国际交寄箱,海外为空', + `warehouse_id` bigint DEFAULT NULL COMMENT '海外实际收货仓', + `good_quantity` bigint NOT NULL COMMENT '可发合格件数', + `damaged_quantity` bigint NOT NULL COMMENT '破损待处置件数', + `extra_quantity` bigint NOT NULL COMMENT '多到件数,不增加可发数量', + `received_at` datetime(3) NOT NULL COMMENT '实际收货时间', + `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '当前有效实收事实', + `supersedes_id` bigint DEFAULT NULL COMMENT '受控更正所替代的原实收记录', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '登记人员', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_receipt_no` (`receipt_no`), + KEY `idx_procurement_receipt_source` (`order_id`,`leg`,`source_carton_id`,`active`), + CONSTRAINT `chk_procurement_receipt_leg` CHECK ((((`leg` = _utf8mb4'OVERSEAS') and (`source_carton_id` is null)) or ((`leg` = _utf8mb4'DOMESTIC') and (`source_carton_id` is not null)))), + CONSTRAINT `chk_procurement_receipt_quantity` CHECK (((`good_quantity` >= 0) and (`damaged_quantity` >= 0) and (`extra_quantity` >= 0) and (((`good_quantity` + `damaged_quantity`) + `extra_quantity`) > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购分次实收与受控更正事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_repack`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_repack` ( + `id` bigint NOT NULL COMMENT '换包装版本ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `carton_id` bigint NOT NULL COMMENT '原国际交寄箱ID,保持一对一来源', + `length_cm` decimal(12,2) NOT NULL COMMENT '新外箱长厘米', + `width_cm` decimal(12,2) NOT NULL COMMENT '新外箱宽厘米', + `height_cm` decimal(12,2) NOT NULL COMMENT '新外箱高厘米', + `gross_weight_kg` decimal(12,3) NOT NULL COMMENT '新封箱毛重千克', + `voucher_file_id` bigint NOT NULL COMMENT '本单换包装证据', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换包装依据', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国内作业人员', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', + PRIMARY KEY (`id`), + KEY `idx_procurement_repack_carton` (`order_id`,`carton_id`,`id`), + CONSTRAINT `chk_procurement_repack_measurement` CHECK (((`length_cm` > 0) and (`width_cm` > 0) and (`height_cm` > 0) and (`gross_weight_kg` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购国内原箱一对一换包装不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_shipment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_shipment` ( + `id` bigint NOT NULL COMMENT '采购交寄ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `shipment_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '交寄业务编号', + `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS国际交寄或DOMESTIC寄客户', + `manifest_id` bigint NOT NULL COMMENT '原海外装箱清单版本', + `shipped_at` datetime(3) NOT NULL COMMENT '整批真实交承运方时间', + `address_snapshot` json NOT NULL COMMENT '本段交寄时的收寄姓名电话地址快照', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '交寄确认人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_shipment_leg` (`order_id`,`leg`), + UNIQUE KEY `uk_procurement_shipment_no` (`shipment_no`), + CONSTRAINT `chk_procurement_shipment_leg` CHECK ((`leg` in (_utf8mb4'OVERSEAS',_utf8mb4'DOMESTIC'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购两段各一次整批真实交寄'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_shipment_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_shipment_item` ( + `shipment_id` bigint NOT NULL COMMENT '采购交寄ID', + `carton_id` bigint NOT NULL COMMENT '原海外装箱版本内箱ID', + `quantity` bigint NOT NULL COMMENT '本次实际交寄件数', + `carrier` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '承运商快照', + `tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '运单号快照', + `label_snapshot` json NOT NULL COMMENT '当次箱规、面单及货物来源快照', + PRIMARY KEY (`shipment_id`,`carton_id`), + CONSTRAINT `chk_procurement_shipment_item_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购整批交寄逐箱事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_wallet_attempt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_wallet_attempt` ( + `id` bigint NOT NULL COMMENT '请求尝试ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `fee_id` bigint NOT NULL COMMENT '不可变费用版本ID', + `attempt_no` bigint NOT NULL COMMENT '费用版本内请求序号', + `operation` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资金操作:FREEZE冻结、SETTLE结算、SETTLE_ACTUAL实际结算、RELEASE释放、REFUND退款', + `business_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Finance资金业务号', + `amount` decimal(20,2) DEFAULT NULL COMMENT '请求金额;全额结算或释放可空', + `command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资金指令事件唯一引用', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资金请求结果:PENDING未决、SUCCEEDED成功、FAILED明确失败', + `result_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原业务回执摘要', + `wallet_hold_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance冻结引用', + `wallet_ledger_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance处理流水引用', + `error_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '业务失败码', + `error_message` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '内部失败诊断,不直接对客展示', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '请求时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '最终结果时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_procurement_attempt_event` (`command_event_id`), + UNIQUE KEY `uk_procurement_attempt_number` (`fee_id`,`attempt_no`), + KEY `idx_procurement_attempt_order` (`customer_id`,`order_id`,`status`), + CONSTRAINT `chk_procurement_attempt_status` CHECK ((`status` in (_utf8mb4'PENDING',_utf8mb4'SUCCEEDED',_utf8mb4'FAILED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用资金命令尝试与不可变结果'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_receiving_container_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_receiving_container_operation` ( + `id` bigint NOT NULL COMMENT '柜号收货操作ID', + `session_id` bigint NOT NULL COMMENT '柜号签收会话ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户账号标识', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作账号唯一标识', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作动作', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端幂等键', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容哈希', + `request_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容快照', + `result_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '响应内容快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_receiving_operation` (`operator_key`,`idempotency_key`), + KEY `idx_ll_receiving_operation_session` (`session_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA柜号收货幂等审计记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_receiving_container_session`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_receiving_container_session` ( + `id` bigint NOT NULL COMMENT '柜号签收会话ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所选柜解析出的客户标识', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '集装箱号', + `overseas_warehouse_id` bigint NOT NULL COMMENT '操作员Token绑定并冻结的海外实际收货共享物理仓ID', + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '仓库服务校验后的海外实际收货共享物理仓名称快照', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作账号唯一标识', + `operator_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作账号名称', + `active_operator_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '未完成会话平台操作账号全局唯一锁键', + `active_container_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '未完成会话柜号全局唯一锁键', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'WAIT_SIGN' COMMENT '会话状态:WAIT_SIGN、SIGNED、RECEIVING、COMPLETED', + `sign_photos` json DEFAULT NULL COMMENT '签收卸柜照片角色与文件ID列表', + `prepared_at` datetime(3) DEFAULT NULL COMMENT '选择柜号时间', + `signed_at` datetime(3) DEFAULT NULL COMMENT '签收时间', + `receiving_at` datetime(3) DEFAULT NULL COMMENT '首次收货时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '完成时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `source_container_booking_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '稳定来源柜预订ID', + `container_fact_hash` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '领取时整柜订单与计划事实摘要', + `overseas_warehouse_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外接柜仓业务编码快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_receiving_active_operator` (`active_operator_key`), + UNIQUE KEY `uk_ll_receiving_active_container` (`active_container_key`), + KEY `idx_ll_receiving_container` (`customer_id`,`container_no`,`status`), + KEY `idx_ll_receiving_operator` (`customer_id`,`operator_key`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA柜号签收收货会话'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_receiving_fba_pallet_count`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_receiving_fba_pallet_count` ( + `id` bigint NOT NULL COMMENT 'FBA托盘现场累计箱数ID', + `session_id` bigint NOT NULL COMMENT '柜号签收会话ID', + `group_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '柜号与FBA仓组成的收货组键', + `pallet_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '现有FBA托盘码', + `actual_packages` int NOT NULL COMMENT '该托现场累计实物箱数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_receiving_fba_count` (`session_id`,`group_key`,`pallet_code`), + KEY `idx_ll_receiving_fba_group` (`session_id`,`group_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA普通FBA托盘现场累计与超收标记'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_receiving_sku_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_receiving_sku_receipt` ( + `id` bigint NOT NULL COMMENT 'FBA SKU实收进度ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户账号标识', + `session_id` bigint NOT NULL COMMENT '柜号签收会话ID', + `plan_id` bigint NOT NULL COMMENT '入仓计划ID', + `line_id` bigint NOT NULL COMMENT '入仓计划明细ID', + `pallet_id` bigint NOT NULL COMMENT '计划托盘ID', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入仓码快照', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SKU编码快照', + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '产品名称快照', + `received_packages` int NOT NULL COMMENT 'SKU实收箱数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_receiving_sku_pallet` (`customer_id`,`line_id`,`pallet_id`,`sku_code`), + KEY `idx_ll_receiving_sku_session` (`customer_id`,`session_id`,`line_id`), + KEY `idx_ll_receiving_sku_plan` (`customer_id`,`plan_id`,`line_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA柜号FBA SKU实收进度'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_receiving_warehouse_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_receiving_warehouse_operation` ( + `id` bigint NOT NULL COMMENT '柜级接柜仓修改操作ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定来源柜预订ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台请求幂等键', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化修改请求SHA-256摘要', + `result_version` int NOT NULL COMMENT '修改成功后的柜级分配版本', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台操作人名称', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '接柜仓修改备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_receiving_warehouse_idempotency` (`idempotency_key`), + KEY `idx_ll_receiving_warehouse_container` (`source_container_booking_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜级海外接柜仓修改幂等审计记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_application`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_application` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `relabel_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `lastleg_order_id` bigint NOT NULL, + `customer_order_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `label_deadline` datetime(3) NOT NULL, + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `delivery_method` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送方式:TRUCK卡车、PICKUP自提、EXPRESS快递;仅涉及箱唛换标时必填', + `print_shipping_label` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否需要打印面单', + `shipping_label_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户上传面单文件ID', + `shipping_label_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户上传面单文件名', + `shipping_label_file_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户上传面单下载地址', + `fulfillment_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'WAIT_RELABEL' COMMENT '换标后履约状态', + `outbound_order_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '自提或快递生成的换标出库单号', + `customer_confirmation_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户确认完成幂等键', + `customer_confirmed_at` datetime(3) DEFAULT NULL COMMENT '客户确认换标完成时间', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `total_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '总换标PDF文件ID', + `total_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '总换标PDF文件名', + `total_file_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '总换标PDF预览地址', + `carton_total_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱唛总文件ID', + `carton_total_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱唛总文件名', + `carton_total_file_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱唛总文件地址', + `sku_total_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU总文件ID', + `sku_total_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU总文件名', + `sku_total_file_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU总文件地址', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_PROCESSING', + `item_count` int NOT NULL DEFAULT '0', + `total_package_count` int NOT NULL DEFAULT '0', + `notified_package_count` int NOT NULL DEFAULT '0', + `charge_amount` decimal(20,2) NOT NULL DEFAULT '0.00' COMMENT '换标费用CNY', + `charge_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '费用币种', + `wallet_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'FREEZE_PENDING' COMMENT '资金状态', + `wallet_error_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资金错误码', + `wallet_error_message` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资金错误说明', + `wallet_command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前资金指令事件ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_relabel_application_no` (`customer_id`,`relabel_no`), + UNIQUE KEY `uk_ll_relabel_application_idempotency` (`customer_id`,`idempotency_key`), + KEY `idx_ll_relabel_application_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_relabel_application_customer` (`customer_id`,`customer_order_no`), + KEY `idx_ll_relabel_application_warehouse` (`customer_id`,`overseas_warehouse_id`), + KEY `idx_ll_relabel_application_order` (`lastleg_order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Customer relabel application header'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_item` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `application_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU编码(选填)', + `product_image_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `product_image_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `product_image_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `total_package_count` int NOT NULL, + `notified_package_count` int NOT NULL, + `shipment_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '货件编号(无FBA去向时为空)', + `tracking_code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `new_sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标后SKU编码', + `label_requirement` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '货物明细备注', + `relabel_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `relabel_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `relabel_file_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '瀹㈡埛鑷湁绠卞敍', + `return_carton_id` bigint DEFAULT NULL COMMENT '閫�璐ф崲绠卞敍鏉ユ簮閫�璐у簱瀛樼ID', + `source_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '閫�璐ф崲绠卞敍鍘熺鍞涘揩鐓�', + `new_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '閫�璐ф崲绠卞敍鏂扮鍞�', + `fba_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鍏宠仈FBA绠卞敍', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '该箱目的海外仓ID', + `destination_fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '可选FBA目的仓编码(与海外操作仓分离)', + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CARTON_LABEL' COMMENT '换标模式:箱唛、SKU或组合换标', + `sku_relabel_items_json` json DEFAULT NULL COMMENT '同箱SKU换标子明细快照(数量按件)', + `source_inventory_balance_id` bigint DEFAULT NULL COMMENT '原库存余额ID(预入仓换标任务可为空)', + `source_inventory_position_id` bigint DEFAULT NULL COMMENT '原库存库位ID(预入仓换标任务可为空)', + `source_inbound_order_id` bigint DEFAULT NULL COMMENT '原入仓单ID(预入仓换标任务可为空)', + `source_inbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_ll_relabel_item_application` (`customer_id`,`application_id`), + KEY `idx_ll_relabel_item_sku` (`customer_id`,`sku_code`), + KEY `idx_ll_relabel_item_destination` (`customer_id`,`destination_warehouse_id`,`application_id`), + KEY `idx_ll_relabel_item_source_position` (`customer_id`,`source_inventory_position_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Frozen customer relabel cargo items'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_pda_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_pda_history` ( + `id` bigint NOT NULL COMMENT '换标PDA任务历史ID', + `task_id` bigint NOT NULL COMMENT '换标PDA任务ID', + `application_id` bigint NOT NULL COMMENT '换标申请单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '现场动作类型', + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '动作前任务状态', + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '动作后任务状态', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作账号标识', + `operator_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作员名称快照', + `detail_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '动作详情JSON', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_relabel_pda_history_task` (`customer_id`,`task_id`,`created_at`,`id`), + KEY `idx_ll_relabel_pda_history_application` (`customer_id`,`application_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA换标任务不可变操作历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_pda_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_pda_operation` ( + `id` bigint NOT NULL COMMENT '换标PDA幂等操作ID', + `task_id` bigint NOT NULL COMMENT '换标PDA任务ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求操作账号标识', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '幂等操作动作', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备生成的幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容哈希', + `result_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '成功响应快照JSON', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_relabel_pda_operation_key` (`operator_key`,`idempotency_key`), + KEY `idx_ll_relabel_pda_operation_task` (`customer_id`,`task_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA换标写操作幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_pda_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_pda_task` ( + `id` bigint NOT NULL COMMENT '换标PDA任务ID', + `application_id` bigint NOT NULL COMMENT '换标申请单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `relabel_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换标申请单号快照', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'PDA令牌冻结的海外实际作业仓ID', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务状态:PROCESSING、WAIT_REVIEW或COMPLETED', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '认领操作账号标识', + `operator_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '认领操作员名称快照', + `reviewer_key` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '复核账号标识', + `reviewer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '复核员名称快照', + `expected_packages` int NOT NULL COMMENT '申请单通知的应换标箱数', + `relabelled_packages` int NOT NULL DEFAULT '0' COMMENT '已正常换标箱数', + `skipped_packages` int NOT NULL DEFAULT '0' COMMENT '已说明原因跳过箱数', + `exception_packages` int NOT NULL DEFAULT '0' COMMENT '已登记异常箱数', + `completion_photo_file_ids` json DEFAULT NULL COMMENT '换标完成现场照片文件ID列表', + `completion_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '完成提交备注', + `review_decision` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近复核结论:APPROVE、REWORK或CUSTOMER_CONFIRMED', + `review_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近复核备注', + `claimed_at` datetime(3) NOT NULL COMMENT '任务认领时间', + `submitted_at` datetime(3) DEFAULT NULL COMMENT '提交复核时间', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '最近复核时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_relabel_pda_task_application` (`customer_id`,`application_id`), + UNIQUE KEY `uk_ll_relabel_pda_task_no` (`relabel_no`), + KEY `idx_ll_relabel_pda_task_warehouse` (`overseas_warehouse_id`,`status`,`updated_at`), + KEY `idx_ll_relabel_pda_task_operator` (`operator_key`,`status`,`updated_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA换标现场作业任务'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_pda_unit_fact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_pda_unit_fact` ( + `id` bigint NOT NULL COMMENT '逐件换标事实ID', + `task_id` bigint NOT NULL COMMENT '换标PDA任务ID', + `application_id` bigint NOT NULL COMMENT '换标申请单ID', + `item_id` bigint NOT NULL COMMENT '换标申请明细ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `old_label` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '扫描的实物旧标签或箱标', + `new_label` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '扫描的换标后新标签', + `result` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '逐件结果:RELABELLED、SKIPPED或EXCEPTION', + `exception_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '异常编码', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '跳过或异常原因', + `quantity` int NOT NULL DEFAULT '1' COMMENT '本次事实处理件数,箱级作业固定为1', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作账号标识', + `operator_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作员名称快照', + `occurred_at` datetime(3) NOT NULL COMMENT '逐件事实发生时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_relabel_pda_old_label` (`old_label`), + KEY `idx_ll_relabel_pda_unit_task` (`customer_id`,`task_id`,`occurred_at`,`id`), + KEY `idx_ll_relabel_pda_unit_item` (`customer_id`,`application_id`,`item_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA逐件换标扫码与异常事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_status_history` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `application_id` bigint NOT NULL, + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + KEY `idx_ll_relabel_status_history_application` (`customer_id`,`application_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable customer relabel process history'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_carton_count_session`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_carton_count_session` ( + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台PDA操作员标识', + `warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '认领时绑定海外仓标识', + `receipt_id` bigint DEFAULT NULL COMMENT '正在清点的签收批次,完成后释放为NULL', + `started_at` datetime(3) DEFAULT NULL COMMENT '本次开始清点时间', + `created_at` datetime(3) NOT NULL COMMENT '会话创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '会话更新时间', + PRIMARY KEY (`operator_id`), + UNIQUE KEY `uk_ll_return_count_session_receipt` (`receipt_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货箱内清点单人单任务持久会话'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_carton_stock_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_carton_stock_receipt` ( + `id` bigint NOT NULL COMMENT '原箱回仓凭据明细标识', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `receipt_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原箱回仓实收业务号', + `exception_order_id` bigint NOT NULL COMMENT '本次异常退回订单', + `exception_return_item_id` bigint NOT NULL COMMENT '本次冻结的原箱来源明细', + `delivery_order_id` bigint NOT NULL COMMENT '原运输派送单', + `source_pick_id` bigint NOT NULL COMMENT '原箱实际出库拣货凭据', + `source_outbound_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原出库单业务号', + `source_dispatch_item_id` bigint NOT NULL COMMENT '原排车货物明细', + `source_outbound_pallet_item_id` bigint NOT NULL COMMENT '原出库托盘明细', + `return_carton_id` bigint NOT NULL COMMENT '真实退货原箱标识', + `carton_mark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原箱业务箱码快照', + `overseas_warehouse_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际回仓海外仓标识', + `target_pallet_id` bigint NOT NULL COMMENT '实际回仓目标实物托盘', + `target_pallet_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际目标托盘业务码', + `target_location_id` bigint NOT NULL COMMENT '实际回仓目标库位', + `target_location_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际目标库位业务码', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原出库快照中的商品编码', + `product_name_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原出库快照中的中文品名', + `quantity` bigint NOT NULL COMMENT '本次原SKU实际恢复件数', + `packages` bigint NOT NULL COMMENT '本箱仅首条SKU记录计一箱其余为零', + `evidence_file_ids_json` json NOT NULL COMMENT '本次实收证据文件引用', + `received_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次原箱实收确认操作人', + `received_at` datetime(3) NOT NULL COMMENT '实际原箱回仓入账时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_return_carton_receipt_source` (`customer_id`,`source_pick_id`,`sku_code`), + KEY `idx_return_carton_receipt_exception` (`customer_id`,`exception_order_id`,`received_at`), + KEY `idx_return_carton_receipt_delivery` (`customer_id`,`delivery_order_id`), + CONSTRAINT `chk_return_carton_receipt_quantity` CHECK (((`quantity` > 0) and (`packages` in (0,1)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='原生退货箱按原出库SKU实际回仓的不可变凭据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_inventory_balance`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_inventory_balance` ( + `id` bigint NOT NULL COMMENT '退货库存余额ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '海外仓ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SKU编码', + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名', + `total_quantity` bigint NOT NULL DEFAULT '0' COMMENT '实物总库存,仅实际出库扣减', + `available_quantity` bigint NOT NULL COMMENT '可用上架数量', + `carton_quantity` bigint NOT NULL COMMENT '包含该SKU的可用箱数', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_inventory_balance` (`customer_id`,`overseas_warehouse_id`,`sku_code`), + CONSTRAINT `chk_ll_return_inventory_balance_quantity` CHECK (((`available_quantity` >= 0) and (`carton_quantity` >= 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货库存按客户海外仓SKU汇总余额'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_inventory_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_inventory_carton` ( + `id` bigint NOT NULL COMMENT '退货库存箱ID', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `overseas_warehouse_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '海外仓ID', + `source_receipt_id` bigint DEFAULT NULL COMMENT '来源PDA签收单ID', + `source_batch_no` text COLLATE utf8mb4_unicode_ci COMMENT '实际消耗来源签收批次号,多个批次逗号分隔', + `source_return_no` text COLLATE utf8mb4_unicode_ci COMMENT '实际消耗来源退货单号,多个单号逗号分隔', + `source_unit_type` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源实物类型', + `source_unit_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源实物编码', + `pallet_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '签收时绑定的托盘码', + `carton_mark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '退货箱号和箱唛编码', + `fba_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA箱唛', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称', + `relabel_application_id` bigint DEFAULT NULL COMMENT '绑定换标申请单ID', + `relabel_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '绑定换标单号', + `relabel_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标状态', + `relabel_completed_at` datetime(3) DEFAULT NULL COMMENT '换标完成时间', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'AVAILABLE可用或MERGED已合箱', + `sku_types` int NOT NULL COMMENT '箱内SKU种类数', + `total_quantity` bigint NOT NULL COMMENT '箱内总件数', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + `merged_at` datetime(3) DEFAULT NULL COMMENT '合箱完成时间', + `length` decimal(12,3) DEFAULT NULL COMMENT '绠遍暱CM', + `width` decimal(12,3) DEFAULT NULL COMMENT '绠卞CM', + `height` decimal(12,3) DEFAULT NULL COMMENT '绠遍珮CM', + `weight` decimal(12,3) DEFAULT NULL COMMENT '绠遍噸KG', + `original_packaging` tinyint(1) DEFAULT NULL COMMENT '是否使用原箱原包装', + `new_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鎹㈡爣鍚庢柊绠卞敍', + `location_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '退货箱当前库位', + `putaway_at` datetime(3) DEFAULT NULL COMMENT '退货箱上架时间', + `count_status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CONFIRMED' COMMENT '箱内清点状态 PENDING待清点 CONFIRMED已确认', + `counted_at` datetime(3) DEFAULT NULL COMMENT '箱内清点确认时间', + `counted_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱内清点确认操作人', + `label_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'WAIT_LABEL寰呰创鏍� CONFIRMED宸叉壂鐮佺‘璁ゆ爣绛�', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_inventory_carton_mark` (`carton_mark`), + KEY `idx_ll_return_inventory_carton_customer` (`customer_id`,`overseas_warehouse_id`,`status`,`created_at`), + KEY `idx_ll_return_inventory_carton_receipt` (`source_receipt_id`), + KEY `idx_ll_return_count` (`overseas_warehouse_id`,`count_status`,`status`,`source_receipt_id`), + CONSTRAINT `chk_ll_return_inventory_carton_quantity` CHECK ((((`status` in (_utf8mb4'AVAILABLE',_utf8mb4'PACKING_RESERVED',_utf8mb4'RELABEL_PENDING',_utf8mb4'OUTBOUND_PENDING',_utf8mb4'OUTBOUNDED',_utf8mb4'DISCARD_PENDING')) and (`sku_types` > 0) and (`total_quantity` > 0)) or ((`status` in (_utf8mb4'MERGED',_utf8mb4'DISCARDED')) and (`sku_types` = 0) and (`total_quantity` = 0)))), + CONSTRAINT `chk_ll_return_inventory_carton_status` CHECK ((`status` in (_utf8mb4'AVAILABLE',_utf8mb4'PACKING_RESERVED',_utf8mb4'RELABEL_PENDING',_utf8mb4'OUTBOUND_PENDING',_utf8mb4'MERGED',_utf8mb4'OUTBOUNDED',_utf8mb4'DISCARD_PENDING',_utf8mb4'DISCARDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货实物库存箱及箱唛'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_inventory_carton_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_inventory_carton_item` ( + `id` bigint NOT NULL COMMENT '退货库存箱SKU明细ID', + `carton_id` bigint NOT NULL COMMENT '退货库存箱ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SKU编码', + `product_name_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名', + `quantity` bigint NOT NULL COMMENT '该SKU箱内数量', + `packing_reserved_quantity` bigint NOT NULL DEFAULT '0' COMMENT '合箱计划预占件数', + `relabelled_quantity` bigint NOT NULL DEFAULT '0' COMMENT '当前SKU已经换标的实物件数,不可二次换标', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_inventory_carton_item` (`carton_id`,`sku_code`), + KEY `idx_ll_return_inventory_carton_item_customer` (`customer_id`,`sku_code`), + CONSTRAINT `chk_ll_return_inventory_carton_item_quantity` CHECK ((`quantity` >= 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货库存箱内SKU和数量'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_inventory_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_inventory_operation` ( + `id` bigint NOT NULL COMMENT '退货库存PDA操作ID', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作人ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容SHA-256', + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型,当前MERGE', + `result_carton_id` bigint DEFAULT NULL COMMENT '合箱结果退货库存箱ID', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + `result_json` json DEFAULT NULL COMMENT '幂等操作不可变返回快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_inventory_operation_operator_key` (`operator_id`,`idempotency_key`), + KEY `idx_ll_return_inventory_operation_result` (`result_carton_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货库存PDA合箱幂等操作审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_inventory_outbound_movement`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_inventory_outbound_movement` ( + `id` bigint NOT NULL COMMENT '退货出库SKU流水ID', + `outbound_pick_id` bigint NOT NULL COMMENT '同事务PDA出库拣货记录ID', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '库存所属客户ID和隔离键', + `overseas_warehouse_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际出库海外仓ID', + `carton_id` bigint NOT NULL COMMENT '真实退货库存箱ID', + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '冻结的真实退货箱业务码', + `outbound_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次退货出库业务单号', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次出库SKU编码快照', + `product_name_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名快照', + `quantity` bigint NOT NULL COMMENT '本箱该SKU实际出库件数,始终为正', + `total_before` bigint NOT NULL COMMENT '客户仓SKU出库前实物总数量', + `total_after` bigint NOT NULL COMMENT '客户仓SKU出库后实物总数量', + `available_before` bigint NOT NULL COMMENT '客户仓SKU出库前可用数量', + `available_after` bigint NOT NULL COMMENT '客户仓SKU出库后可用数量', + `cartons_before` bigint NOT NULL COMMENT '客户仓包含该SKU的出库前可用箱数', + `cartons_after` bigint NOT NULL COMMENT '客户仓包含该SKU的出库后可用箱数', + `occurred_at` datetime(3) NOT NULL COMMENT '出库记账时间', + `return_sku_quantity` bigint DEFAULT NULL COMMENT '退货单SKU本来源计划出库件数快照,NULL为历史整箱出库', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_outbound_pick_sku` (`outbound_pick_id`,`sku_code`), + KEY `idx_ll_return_outbound_movement_query` (`customer_id`,`overseas_warehouse_id`,`sku_code`,`occurred_at`), + KEY `idx_ll_return_outbound_carton_sku` (`customer_id`,`carton_id`,`sku_code`), + CONSTRAINT `chk_ll_return_outbound_movement_delta` CHECK (((`quantity` > 0) and (`total_after` >= 0) and (`available_after` >= 0) and ((`total_before` - `total_after`) = `quantity`) and ((`available_before` - `available_after`) = `quantity`) and (`cartons_after` >= 0) and ((`cartons_before` - `cartons_after`) in (0,1)) and (`total_after` >= `available_after`))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='不可变退货出库SKU库存流水'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_order` ( + `id` bigint NOT NULL COMMENT '退货订单ID', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `return_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '退货订单号', + `overseas_warehouse_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作海外仓ID', + `warehouse_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中转仓联系人快照', + `warehouse_contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中转仓联系电话快照', + `customer_reference_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户参考号', + `lastleg_order_id` bigint DEFAULT NULL COMMENT '鍏宠仈灏剧▼涓昏鍗旾D', + `lastleg_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'linked lastleg order no', + `need_relabel` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否需要换标', + `relabel_application_id` bigint DEFAULT NULL COMMENT '绑定换标申请单ID', + `relabel_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '绑定换标单号', + `relabel_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标状态', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PENDING_RECEIPT、PARTIALLY_RECEIVED或COMPLETED', + `expected_sku_types` int NOT NULL COMMENT '预报SKU种类数', + `expected_quantity` bigint NOT NULL COMMENT '预报总数量', + `received_quantity` bigint NOT NULL DEFAULT '0' COMMENT '累计实收总数量', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户备注', + `discrepancy_reason` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手动完结差异原因', + `manually_completed_at` datetime(3) DEFAULT NULL COMMENT '手动差异完结时间', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建请求SHA-256', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建操作人ID', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_order_customer_no` (`customer_id`,`return_no`), + UNIQUE KEY `uk_ll_return_order_customer_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_return_order_warehouse_status` (`overseas_warehouse_id`,`status`,`created_at`), + CONSTRAINT `chk_ll_return_order_quantity` CHECK (((`expected_sku_types` > 0) and (`expected_quantity` > 0) and (`received_quantity` >= 0) and (`received_quantity` <= `expected_quantity`))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户退货订单及SKU实收汇总'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_order_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_order_item` ( + `id` bigint NOT NULL COMMENT '退货预报明细ID', + `return_order_id` bigint NOT NULL COMMENT '退货订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SKU编码', + `product_name_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名', + `expected_quantity` bigint NOT NULL COMMENT '该快递单SKU预报数量', + `received_quantity` bigint NOT NULL DEFAULT '0' COMMENT '该快递单SKU累计实收数量', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_item_order_sku` (`return_order_id`,`sku_code`), + KEY `idx_ll_return_item_sku` (`sku_code`,`received_quantity`), + CONSTRAINT `chk_ll_return_item_quantity` CHECK (((`expected_quantity` > 0) and (`received_quantity` >= 0) and (`received_quantity` <= `expected_quantity`))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户退货订单的快递单SKU预报与实收明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_packing_plan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_packing_plan` ( + `id` bigint NOT NULL, + `plan_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `return_nos_json` json NOT NULL, + `boxes_json` json NOT NULL, + `mode` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL, + `updated_at` datetime(3) NOT NULL, + `pushed_at` datetime(3) DEFAULT NULL, + `completed_at` datetime(3) DEFAULT NULL, + `source_items_json` json DEFAULT NULL COMMENT '精确来源箱和SKU锁定数量', + `result_marks_json` json DEFAULT NULL COMMENT '完成生成或并入的目标箱唛', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建载荷摘要', + `completion_hash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '完成载荷摘要', + `result_labels_json` json DEFAULT NULL COMMENT '计划完工标签快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_packing_plan_no` (`plan_no`), + UNIQUE KEY `uk_ll_return_packing_plan_key` (`idempotency_key`), + KEY `idx_ll_return_packing_plan_warehouse_status` (`overseas_warehouse_id`,`status`,`created_at`), + KEY `idx_ll_return_packing_plan_warehouse` (`overseas_warehouse_id`,`status`,`pushed_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货合箱计划'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_packing_trace`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_packing_trace` ( + `id` bigint NOT NULL COMMENT '合箱追溯ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原客户隔离键', + `operation_id` bigint NOT NULL COMMENT '合箱操作ID', + `source_carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源箱唛 空值表示目标箱原有库存快照', + `target_carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目标箱唛', + `return_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始退货单号', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品SKU编码', + `quantity` bigint NOT NULL COMMENT '本次移动件数', + `created_at` datetime(3) NOT NULL COMMENT '发生时间', + PRIMARY KEY (`id`), + KEY `idx_return_packing_trace_order` (`customer_id`,`return_no`,`created_at`), + KEY `idx_return_packing_trace_target` (`customer_id`,`target_carton_mark`,`sku_code`), + KEY `idx_return_packing_trace_source` (`customer_id`,`source_carton_mark`,`sku_code`), + CONSTRAINT `chk_return_packing_trace_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货合箱逐SKU原始退货单不可变追溯'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_receipt` ( + `id` bigint NOT NULL COMMENT 'PDA退货签收单ID', + `return_order_id` bigint NOT NULL COMMENT '退货订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `receipt_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '签收单号', + `receipt_batch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '签收批次号', + `unit_type` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '签收实物类型 PALLET/BOX/PARCEL', + `unit_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '签收实物编码', + `total_box_count` bigint DEFAULT NULL COMMENT '本次实物总箱数,托盘独立于SKU箱数', + `length` decimal(12,3) DEFAULT NULL COMMENT '托盘长度CM', + `width` decimal(12,3) DEFAULT NULL COMMENT '托盘宽度CM', + `height` decimal(12,3) DEFAULT NULL COMMENT '托盘高度CM', + `weight` decimal(12,3) DEFAULT NULL COMMENT '托盘重量KG', + `original_packaging` tinyint(1) DEFAULT NULL COMMENT '是否使用原箱原包装', + `measurement_source` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '尺寸重量来源 PALLET_MEASURED托盘实测 UNIT_SUM子箱汇总', + `pallet_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本次签收绑定的托盘码', + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '签收生成或绑定的退货箱号', + `tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本次签收包裹的可选快递单号', + `bound_by` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '开始签收方式,RETURN_NO退货单号或SKU候选', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '签收状态,当前SIGNED', + `received_quantity` bigint NOT NULL COMMENT '本次实收数量', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作人ID', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'PDA操作人名称', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA确认幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA确认请求SHA-256', + `signed_at` datetime(3) NOT NULL COMMENT '签收时间', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_receipt_no` (`receipt_no`), + UNIQUE KEY `uk_ll_return_receipt_batch` (`receipt_batch_no`), + UNIQUE KEY `uk_ll_return_receipt_operator_key` (`operator_id`,`idempotency_key`), + KEY `idx_ll_return_receipt_order` (`return_order_id`,`signed_at`), + CONSTRAINT `chk_ll_return_receipt_bound` CHECK ((`bound_by` in (_utf8mb4'RETURN_NO',_utf8mb4'SKU'))), + CONSTRAINT `chk_ll_return_receipt_quantity` CHECK ((`received_quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PDA退货实收签收事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_receipt_batch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_receipt_batch` ( + `id` bigint NOT NULL COMMENT '退货仓储计费批次ID', + `return_order_id` bigint NOT NULL COMMENT '退货订单ID', + `receipt_id` bigint NOT NULL COMMENT 'PDA退货签收单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `batch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '签收批次号', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作海外仓ID', + `storage_billing_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '仓储计费状态,初始PENDING_PRICING', + `storage_started_at` datetime(3) NOT NULL COMMENT '仓储计费起算时间', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_batch_no` (`batch_no`), + UNIQUE KEY `uk_ll_return_batch_receipt` (`receipt_id`), + KEY `idx_ll_return_batch_billing` (`customer_id`,`overseas_warehouse_id`,`storage_billing_status`,`storage_started_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='每次退货签收生成的仓储费起算批次'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_receipt_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_receipt_item` ( + `id` bigint NOT NULL COMMENT '签收SKU明细ID', + `receipt_id` bigint NOT NULL COMMENT 'PDA退货签收单ID', + `return_order_item_id` bigint NOT NULL COMMENT '退货预报明细ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SKU编码', + `received_quantity` bigint NOT NULL COMMENT '本次SKU实收数量', + `box_count` bigint DEFAULT NULL COMMENT '本次 SKU 对应箱数', + PRIMARY KEY (`id`), + KEY `idx_ll_return_receipt_item_receipt` (`receipt_id`), + KEY `idx_ll_return_receipt_item_order_item` (`return_order_item_id`), + CONSTRAINT `chk_ll_return_receipt_item_quantity` CHECK ((`received_quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PDA退货签收SKU实际数量明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_sku_conversion`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_sku_conversion` ( + `id` bigint NOT NULL COMMENT 'SKU库存转换记录ID', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `overseas_warehouse_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作海外仓ID', + `application_id` bigint NOT NULL COMMENT '换标申请ID', + `relabel_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换标单号', + `item_id` bigint NOT NULL COMMENT '换标箱级明细ID', + `round_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '作业轮次,退回重做使用新轮次', + `carton_id` bigint NOT NULL COMMENT '实物来源包裹或箱ID', + `carton_mark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '完工时仓库识别码', + `old_sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换标前SKU', + `new_sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换标后SKU', + `product_name_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名快照', + `quantity` bigint NOT NULL COMMENT '实际完成转换件数', + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'APPLIED待客户确认/CONFIRMED已确认/REVERSED退回冲回', + `ownership_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '本次转换件数的来源退货单快照,供精确冲回', + `completed_at` datetime(3) NOT NULL COMMENT '实物SKU转换时间', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '客户确认时间', + `reversed_at` datetime(3) DEFAULT NULL COMMENT '退回冲回时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_return_sku_conversion_round` (`item_id`,`round_key`,`old_sku_code`,`new_sku_code`), + KEY `idx_return_sku_conversion_app` (`customer_id`,`application_id`,`status`), + KEY `idx_return_sku_conversion_carton` (`customer_id`,`carton_id`), + CONSTRAINT `chk_return_sku_conversion_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货实物SKU换标库存转换和冲回记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_stock_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_stock_receipt` ( + `id` bigint NOT NULL COMMENT '退回入仓实收凭据ID', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据归属', + `receipt_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '退回实收业务编号', + `inventory_ledger_id` bigint NOT NULL COMMENT '唯一实际退回入账流水', + `exception_order_id` bigint NOT NULL COMMENT '退回异常订单', + `order_id` bigint NOT NULL COMMENT '原尾程订单', + `inbound_order_id` bigint NOT NULL COMMENT '原入仓单', + `source_outbound_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原发运出库业务编号', + `source_outbound_pallet_item_id` bigint NOT NULL COMMENT '原出库托盘明细', + `source_inventory_position_id` bigint NOT NULL COMMENT '原拣货库存位置', + `inventory_balance_id` bigint NOT NULL COMMENT '实际退回库存余额', + `inventory_position_id` bigint NOT NULL COMMENT '实际退回库存位置', + `received_packages` bigint NOT NULL COMMENT '实际退回箱数,不增加原订单箱数', + `received_at` datetime(3) NOT NULL COMMENT '实际退回入账时间', + `created_at` datetime(3) NOT NULL COMMENT '凭据记录时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_return_stock_receipt_no` (`customer_id`,`receipt_no`), + UNIQUE KEY `uk_return_stock_receipt_ledger` (`customer_id`,`inventory_ledger_id`), + KEY `idx_return_stock_receipt_order` (`customer_id`,`order_id`), + KEY `idx_return_stock_receipt_position` (`customer_id`,`inventory_balance_id`,`inventory_position_id`), + CONSTRAINT `chk_return_stock_receipt_packages` CHECK ((`received_packages` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='真实退回入仓及再次发运来源凭据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_security_event_inbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_security_event_inbox` ( + `event_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '跨区安全事件ID', + `event_type` varchar(96) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'IAM安全事件类型', + `payload_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化载荷SHA-256哈希', + `payload_json` json NOT NULL COMMENT '冻结事件载荷JSON', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '消费状态:RECEIVED或PROCESSED', + `result` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '处理结果:APPLIED、STALE、DUPLICATE或DUPLICATE_VERSION', + `received_at` datetime(3) NOT NULL COMMENT '接收时间', + `processed_at` datetime(3) DEFAULT NULL COMMENT '处理完成时间', + PRIMARY KEY (`event_id`), + KEY `idx_security_inbox_type_time` (`event_type`,`received_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外IAM安全事件消费者收件箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_security_projection`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_security_projection` ( + `aggregate_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聚合类型:USER、TENANT或AUTHORIZATION', + `aggregate_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户或客户聚合ID', + `tenant_id` bigint NOT NULL COMMENT '平台0或客户ID', + `security_status` varchar(24) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前安全状态:ACTIVE或DISABLED', + `permission_version` bigint DEFAULT NULL COMMENT '当前单调权限版本', + `roles_json` json NOT NULL COMMENT 'IAM投影的当前角色快照', + `authorities_json` json NOT NULL COMMENT 'IAM投影的当前海外权限快照', + `aggregate_version` bigint NOT NULL COMMENT '事件聚合单调版本', + `payload_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '当前版本载荷哈希', + `last_event_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '最后应用的事件ID', + `changed_at` datetime(3) NOT NULL COMMENT '国内IAM事实发生时间', + `updated_at` datetime(3) NOT NULL COMMENT '投影更新时间', + PRIMARY KEY (`aggregate_type`,`aggregate_id`), + KEY `idx_security_projection_tenant` (`tenant_id`), + KEY `idx_security_projection_permission` (`aggregate_id`,`permission_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外IAM安全状态与权限版本投影'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_inventory_daily`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_inventory_daily` ( + `day_version_id` bigint NOT NULL COMMENT '所属历史日版本', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源货主编码', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '来源商品编码', + `product_quality` int NOT NULL COMMENT '来源库存品质', + `physical_quantity` decimal(20,6) DEFAULT NULL COMMENT '日末实物库存,未知为空,已确认零为零', + `quality_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '日末资格,有效或未知', + `quality_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '缺覆盖或锚点等未知原因', + `anchor_reference` bigint DEFAULT NULL COMMENT '独立库存锚点版本', + `evidence_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '该日计算证据摘要', + `source` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '库存来源标记,流水还原', + PRIMARY KEY (`day_version_id`,`customer_code`,`sku_code`,`product_quality`), + KEY `idx_selfop_daily_identity` (`customer_code`,`sku_code`,`day_version_id`), + CONSTRAINT `chk_selfop_daily_quantity` CHECK ((((`quality_status` = _utf8mb4'VALID') and (`physical_quantity` is not null) and (`physical_quantity` >= 0)) or ((`quality_status` = _utf8mb4'UNKNOWN') and (`physical_quantity` is null)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='历史日末分货主商品品质实物库存'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_inventory_day_version`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_inventory_day_version` ( + `id` bigint NOT NULL COMMENT '不可变历史日版本标识', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库编码', + `business_date` date NOT NULL COMMENT '北京时间日末所属日期', + `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '业务范围摘要', + `rule_version` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '日末库存还原规则版本', + `build_run_id` bigint NOT NULL COMMENT '历史重建执行尝试', + `publication_group_id` bigint NOT NULL COMMENT '必须一起切换的发布组标识', + `sales_run_id` bigint DEFAULT NULL COMMENT '构建时固定的销量证据版本', + `anchor_run_id` bigint NOT NULL COMMENT '固定的独立库存锚点版本', + `input_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '冻结流水修订与覆盖及锚点输入摘要', + `evidence_json` json NOT NULL COMMENT '固定输入清单及不可变证据引用', + `status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '构建中、就绪、已发布、已替代或失败', + `head_slot` tinyint DEFAULT NULL COMMENT '当前日头为一,非当前版本为空', + `valid_sku_count` bigint NOT NULL DEFAULT '0' COMMENT '合格商品数', + `unknown_sku_count` bigint NOT NULL DEFAULT '0' COMMENT '待核验商品数', + `created_at` datetime(3) NOT NULL COMMENT '版本创建UTC时刻', + `published_at` datetime(3) DEFAULT NULL COMMENT '发布组提交UTC时刻', + `superseded_at` datetime(3) DEFAULT NULL COMMENT '被新组替代的UTC时刻', + `invalidated_at` datetime(3) DEFAULT NULL COMMENT '已确认输入失效的UTC时刻', + `invalidation_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '旧版本失效原因', + `rebuild_run_id` bigint DEFAULT NULL COMMENT '处理失效版本的重建尝试', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_history_build_day` (`build_run_id`,`business_date`), + UNIQUE KEY `uk_selfop_history_head` (`source_account`,`warehouse_code`,`business_date`,`head_slot`), + KEY `idx_selfop_history_group` (`publication_group_id`,`status`), + CONSTRAINT `chk_selfop_history_head` CHECK (((`head_slot` is null) or ((`head_slot` = 1) and (`status` = _utf8mb4'PUBLISHED')))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='历史日库存不可变版本及原子发布日头'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_inventory_flow`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_inventory_flow` ( + `id` bigint NOT NULL COMMENT '应用生成的流水记录标识', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库编码', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源货主编码', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '来源商品编码', + `source_flow_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源流水字符串标识', + `product_quality` int NOT NULL COMMENT '来源品质,零正品一次品,其他未知', + `cell_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源库位编码', + `inner_batch_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源内部批次号', + `bill_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源业务单号', + `source_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源关联单号', + `bill_type` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源业务类型,未验证类型不得参与正式还原', + `book_qty` decimal(20,6) DEFAULT NULL COMMENT '来源记账增减量,未知为空', + `book_change_qty_raw` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源带符号变动量原文', + `delta_quantity` decimal(20,6) DEFAULT NULL COMMENT '解析后的有符号实物变动量', + `close_quantity` decimal(20,6) DEFAULT NULL COMMENT '对应库位批次品质链的结存', + `source_create_time` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源北京时间原文', + `event_at_utc` datetime(3) DEFAULT NULL COMMENT '流水发生UTC时刻,无法解析时为空', + `business_date` date DEFAULT NULL COMMENT '北京时间业务日期', + `quantity_unit` varchar(16) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '已确认数量单位,未知为空', + `content_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '当前事实内容摘要', + `revision_no` bigint NOT NULL COMMENT '同来源流水单调增加的修订号', + `stage_id` bigint NOT NULL COMMENT '当前事实对应不可变暂存证据', + `first_run_id` bigint NOT NULL COMMENT '首次观察执行尝试', + `last_run_id` bigint NOT NULL COMMENT '最近确认执行尝试', + `last_observed_at` datetime(3) NOT NULL COMMENT '最近观察UTC时刻', + `validation_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '字段资格,有效或未知', + `validation_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '数量或身份待核验原因', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_flow_source` (`source_account`,`warehouse_code`,`source_flow_id`), + KEY `idx_selfop_flow_sku` (`source_account`,`warehouse_code`,`customer_code`,`sku_code`,`event_at_utc`), + KEY `idx_selfop_flow_day` (`source_account`,`warehouse_code`,`business_date`), + CONSTRAINT `chk_selfop_flow_revision` CHECK ((`revision_no` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='自营历史库存流水最新事实,旧版本保留于暂存证据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_inventory_snapshot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_inventory_snapshot` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `snapshot_run_id` bigint NOT NULL COMMENT 'INVENTORY 执行尝试;发布后该批明细不可修改', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始产品 SKU', + `product_quality` smallint NOT NULL COMMENT '来源品质,当前 0 正品、1 次品;全量均保存,不套用整箱库存', + `product_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源名称', + `physical_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源stkQty实物库存,未知为空', + `available_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源useStkQty可用库存,未知为空,不再次扣冻结', + `frozen_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源freezeQty冻结库存,未知为空', + `transit_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源transitQty在途数量,未知为空,不计可售库存', + `source_unique_key` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '原 uniqueKey4tenant,只作来源证据', + `observed_at_utc` datetime(3) NOT NULL COMMENT '所在页实际采集时间;缺行占位取本批采集完成时间', + `quality_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'VALID、UNKNOWN、INVALID;STALE 按批次年龄实时派生', + `quality_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'SOURCE_ROW_MISSING、FIELD_MISSING、NEGATIVE_QUANTITY 等', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_stock_snapshot` (`snapshot_run_id`,`source_account`,`customer_code`,`warehouse_code`,`sku_code`,`product_quality`), + KEY `idx_selfop_stock_lookup` (`source_account`,`customer_code`,`warehouse_code`,`sku_code`,`product_quality`,`snapshot_run_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='产品库存全量批次明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_outbound_discovery_scope`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_outbound_discovery_scope` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `catalog_from_utc` datetime(3) DEFAULT NULL COMMENT '账号完整目录连续覆盖UTC下界,不等同销量覆盖', + `catalog_until_utc` datetime(3) DEFAULT NULL COMMENT '账号完整目录连续覆盖UTC上界,不等同销量覆盖', + `next_sequence` bigint NOT NULL DEFAULT '1' COMMENT '新发现任务的单调调度序号;重试沿用,只安排任务,不判断对象内容的新旧', + `next_observation_sequence` bigint NOT NULL DEFAULT '1' COMMENT '每次实际出库详情请求前分配的单调采集代次;与 task 调度序号独立,重试请求也分配新代次', + `active_task_id` bigint DEFAULT NULL COMMENT '当前共享发现/详情补齐任务', + `lease_owner` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账号发现执行者', + `lease_until_utc` datetime(3) DEFAULT NULL COMMENT '账号发现租约到期时刻', + `fence_token` bigint NOT NULL DEFAULT '0' COMMENT '防止过期发现进程继续写共享暂存或派发任务', + `request_budget` int NOT NULL COMMENT '一次调度允许的目录、详情请求总预算,必须为正', + `time_budget_seconds` int NOT NULL COMMENT '一次调度允许占用的执行时长,必须为正', + `min_request_interval_ms` int NOT NULL COMMENT '同账号请求最小间隔,按已核准配额配置', + `api_budget_json` json DEFAULT NULL COMMENT '账号所有采集族共用的预算、统计日、保守预留及确认消耗、尝试许可和独占交接依据', + `api_cooldown_until_utc` datetime(3) DEFAULT NULL COMMENT '账号全部真实请求共用冷却UTC截止,重启与跨日不清除', + `api_pause_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账号停止或等待的固定原因码,不保存供应商原始错误或凭据', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_discovery_account` (`source_account`), + CONSTRAINT `chk_selfop_outbound_discovery_scope` CHECK (((`request_budget` > 0) and (`time_budget_seconds` > 0) and (`min_request_interval_ms` > 0) and (`fence_token` >= 0) and (`next_sequence` > 0) and (`next_observation_sequence` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='账号共享出库目录与详情发现协调作用域'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_outbound_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_outbound_item` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `order_id` bigint NOT NULL COMMENT '对应外部出库事实', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始 productSku', + `product_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源商品名称,仅作展示', + `actual_quantity` decimal(20,6) NOT NULL COMMENT '详情 actualDeliveryQty,必须为非负有效数值', + `quantity_unit` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '已核准业务单位;未确认单位不发布正式数量统计', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_order_sku` (`order_id`,`sku_code`), + KEY `idx_selfop_item_sku` (`sku_code`,`order_id`), + CONSTRAINT `chk_selfop_outbound_item` CHECK ((`actual_quantity` >= 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='整单替换的实际出库明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_outbound_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_outbound_order` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `delivery_no` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT 'OMP 发货单号,采用列表及详情同一身份', + `source_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'WMS 来源出库单号,缺失不以内部 ID 回退展示', + `source_status` int NOT NULL COMMENT '原始状态,100 已出库、99 已取消;不改造成内部状态码', + `source_created_time` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源创建时间原始字符串,不使用采集时间替代', + `source_outbound_time` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源实际出库时间原始字符串,不使用采集时间替代', + `source_timezone` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '解析采用的源时区', + `outbound_at_utc` datetime(3) DEFAULT NULL COMMENT '已核准的实际出库时间点;非出库状态可空', + `business_date` date DEFAULT NULL COMMENT '已核准业务时区下的出库日', + `business_timezone` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '该事实当前归属仓所用业务时区,迁仓后重新确定业务日', + `sales_eligible` tinyint NOT NULL DEFAULT '0' COMMENT '仅已出库、时间与全部数量有效时为 1', + `revision_no` bigint NOT NULL DEFAULT '1' COMMENT '该单内容变更次数,不等于拉取次数', + `content_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '订单头及完整 SKU 明细规范化摘要', + `last_run_id` bigint NOT NULL COMMENT '最后一次确认或修订的执行尝试', + `last_observation_sequence` bigint NOT NULL COMMENT '最后接受的完整详情采集代次;仅防旧观测重放,不按 task 调度序号拒绝较晚实际读取的事实,不冒充领星源版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_order` (`source_account`,`customer_code`,`delivery_no`), + KEY `idx_selfop_order_daily` (`source_account`,`warehouse_code`,`sales_eligible`,`business_date`,`id`), + KEY `idx_selfop_order_run` (`last_run_id`), + CONSTRAINT `chk_selfop_outbound_order` CHECK (((`revision_no` > 0) and (`last_observation_sequence` > 0) and (`sales_eligible` in (0,1)) and ((`sales_eligible` = 0) or ((`source_status` = 100) and (`source_timezone` is not null) and (`outbound_at_utc` is not null) and (`business_date` is not null))))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='最后确认的单据事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_owner`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_owner` ( + `id` bigint NOT NULL COMMENT '主键', + `run_id` bigint NOT NULL COMMENT '完整资料采集版本', + `source_account` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '来源账号', + `customer_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主编码', + `customer_name` varchar(255) DEFAULT NULL COMMENT '领星货主名称', + `source_status` varchar(32) DEFAULT NULL COMMENT '来源启停状态', + `observed_at_utc` datetime(6) NOT NULL COMMENT '资料观测时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_owner_version` (`run_id`,`source_account`,`customer_code`), + KEY `idx_selfop_owner_lookup` (`source_account`,`customer_code`,`run_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='自营领星货主资料版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_product`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_product` ( + `id` bigint NOT NULL COMMENT '主键', + `run_id` bigint NOT NULL COMMENT '完整资料采集版本', + `source_account` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '来源账号', + `customer_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主编码', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '货主商品编码', + `product_name` varchar(255) DEFAULT NULL COMMENT '商品名称', + `declared_length` decimal(24,6) DEFAULT NULL COMMENT '商品资料长度', + `declared_width` decimal(24,6) DEFAULT NULL COMMENT '商品资料宽度', + `declared_height` decimal(24,6) DEFAULT NULL COMMENT '商品资料高度', + `declared_size_unit` varchar(32) DEFAULT NULL COMMENT '商品资料尺寸单位', + `measured_length` decimal(24,6) DEFAULT NULL COMMENT '仓库实测长度', + `measured_width` decimal(24,6) DEFAULT NULL COMMENT '仓库实测宽度', + `measured_height` decimal(24,6) DEFAULT NULL COMMENT '仓库实测高度', + `measured_size_unit` varchar(32) DEFAULT NULL COMMENT '仓库实测尺寸单位', + `observed_at_utc` datetime(6) NOT NULL COMMENT '资料观测时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_product_version` (`run_id`,`source_account`,`customer_code`,`sku_code`), + KEY `idx_selfop_product_lookup` (`source_account`,`customer_code`,`sku_code`,`run_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='自营领星商品资料版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_sku_daily_sales`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_sku_daily_sales` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `sales_run_id` bigint NOT NULL COMMENT 'OUTBOUND 执行尝试,同时是计算版本', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始产品 SKU', + `business_date` date NOT NULL COMMENT '已核准业务日', + `outbound_quantity` decimal(20,6) NOT NULL COMMENT '有效出库实际件数之和,非负', + `outbound_order_count` bigint NOT NULL COMMENT '该维度去重发货单数,非负', + `quantity_unit` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '同一统计维度内一致的业务单位', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_daily_version` (`sales_run_id`,`source_account`,`customer_code`,`warehouse_code`,`sku_code`,`business_date`), + KEY `idx_selfop_daily_window_cover` (`sales_run_id`,`source_account`,`warehouse_code`,`business_date`,`customer_code`,`sku_code`,`outbound_quantity`,`outbound_order_count`,`quantity_unit`), + KEY `idx_selfop_daily_sku_cover` (`sales_run_id`,`source_account`,`warehouse_code`,`customer_code`,`sku_code`,`business_date`,`outbound_quantity`,`outbound_order_count`,`quantity_unit`), + CONSTRAINT `chk_selfop_sku_daily_sales` CHECK (((`outbound_quantity` >= 0) and (`outbound_order_count` >= 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='完整销量版本的稀疏日事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_sku_profile`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_sku_profile` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `profile_run_id` bigint NOT NULL COMMENT '本仓销量或库存候选版本;与对应 daily/snapshot 使用同一 run,发布后该版本全部维度行不可修改', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始产品 SKU', + `product_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '本版本确认的名称,不实时连接其他版本名称', + `quantity_unit` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '本版本已核准单位;未知或两版本单位冲突时不计算混合指标', + `first_seen_at_utc` datetime(3) DEFAULT NULL COMMENT '本证据族真实观测到本仓商品的最早接收时刻;缺行占位不能生成观察证据', + `earliest_evidence_at_utc` datetime(3) DEFAULT NULL COMMENT '库存版取真实库存首次观察时刻;销量版从该版有效事实重新求最早已核准出库时间,可随改期、取消或迁仓撤回/后移', + `evidence_type` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'INVENTORY_OBSERVATION、VALID_OUTBOUND、NONE;不得将销量证据复制成库存真实观察证据', + `evidence_run_id` bigint DEFAULT NULL COMMENT '本证据族真实依据的采集批次,无证据占位为空', + `last_seen_run_id` bigint DEFAULT NULL COMMENT '本证据族最近真实观测批次,无证据占位为空', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_profile_version` (`profile_run_id`,`source_account`,`customer_code`,`warehouse_code`,`sku_code`), + KEY `idx_selfop_profile_evidence` (`profile_run_id`,`earliest_evidence_at_utc`,`customer_code`,`sku_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='随发布版本固定的 SKU 维度与观察依据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_sync_run`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_sync_run` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `task_id` bigint NOT NULL COMMENT '本次执行请求', + `execution_purpose` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '从逻辑任务冻结继承,验证尝试不能作为正式统计版本', + `scope_id` bigint DEFAULT NULL COMMENT '仅账号共享发现为空;分仓执行必须有作用域', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `run_role` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'ACCOUNT_DISCOVERY 或 WAREHOUSE_SYNC', + `upstream_task_id` bigint DEFAULT NULL COMMENT '分仓出库计算引用的共享切片及其稳定暂存集合', + `attempt_no` int NOT NULL COMMENT '同一请求从 1 起递增', + `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '本版本的业务范围摘要', + `scope_snapshot_json` json NOT NULL COMMENT '分仓版只含本仓货主/品质、固定首采 [B,E0)、时区、调度与过期阈值;账号发现保存待路由仓集合,不冒充业务版', + `observed_dimensions_json` json DEFAULT NULL COMMENT '本次实际出现的仓库/货主集合及数量摘要,仅作采集证据;例如已观测 70 货主不等于固定授权范围', + `fence_token` bigint NOT NULL COMMENT '本尝试持有的栅栏版本', + `base_published_run_id` bigint DEFAULT NULL COMMENT '执行开始时的上一可见版本', + `reference_sales_run_id` bigint DEFAULT NULL COMMENT '库存构建开始时固定的本仓已发布销量版,用其不可变 SKU 维度生成出库已知商品占位;没有已发布销量版时为空,不读取半归并订单事实', + `inventory_daily_sample_date` date DEFAULT NULL COMMENT '北京时间当日首个合格计划库存发布代表日期,非代表为空', + `inventory_sample_rule_version` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '日库存代表选择规则 DAILY_SCHEDULED_FIRST_V1,与日标记原子保存', + `status` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'FETCHING、VALIDATED、ROUTED、FACTS_APPLIED、BUILDING、READY、PUBLISHED、REUSED、YIELDED、FAILED、ABORTED、SAMPLE_DONE;复用和验证不是版本头', + `last_phase` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT '失败/中止前所在阶段,支持判断是否已经归并事实', + `fetch_started_at_utc` datetime(3) DEFAULT NULL COMMENT '实际采集开始UTC时间', + `fetch_finished_at_utc` datetime(3) DEFAULT NULL COMMENT '实际采集完成UTC时间,未完成为空', + `build_started_at_utc` datetime(3) DEFAULT NULL COMMENT '实际开始有界候选构建UTC时间,用于构建耗时及首采合并间隔', + `warehouse_daily_ready` tinyint NOT NULL DEFAULT '0' COMMENT '仓库日汇总已完整构建并校验,含完整空版本', + `finished_at_utc` datetime(3) DEFAULT NULL COMMENT '本次尝试终止UTC时间', + `published_at_utc` datetime(3) DEFAULT NULL COMMENT '实际原子切换发布指针UTC时间', + `superseded_at_utc` datetime(3) DEFAULT NULL COMMENT '被新发布版替代的首次UTC时间,同事务填写且重试不重置', + `page_count` int NOT NULL DEFAULT '0' COMMENT '已完整获取页数', + `source_total_count` bigint DEFAULT NULL COMMENT '上游可靠返回的总数;未返回则为空', + `unique_object_count` bigint NOT NULL DEFAULT '0' COMMENT '规范化去重后对象数', + `progress_snapshot_json` json DEFAULT NULL COMMENT '尝试终止时冻结的有界可靠进度摘要,历史尝试不随逻辑任务改写', + `heartbeat_at_utc` datetime(3) DEFAULT NULL COMMENT '有效执行者最新UTC心跳,不代表业务检查点推进', + `coverage_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'UNKNOWN、PARTIAL、COMPLETE;分页完整与数值有效性分别判断', + `covered_from_utc` datetime(3) DEFAULT NULL COMMENT '本仓销量版本实际连续覆盖UTC下界', + `covered_until_utc` datetime(3) DEFAULT NULL COMMENT '本仓销量版本实际连续覆盖UTC上界,不含端点', + `complete_day_from` date DEFAULT NULL COMMENT '本仓完整自然日区间首日,包含', + `complete_day_until` date DEFAULT NULL COMMENT '本仓完整自然日区间末日,不含', + `applied_fact_revision` bigint DEFAULT NULL COMMENT '本次尝试归并后的事实修订号,库存为空', + `calculated_fact_revision` bigint DEFAULT NULL COMMENT '候选销量版本计算所依据的固定事实修订号', + `error_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '内部可诊断错误分类,不保存认证信息', + `error_message` varchar(500) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '脱敏后的固定错误摘要', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_run_attempt` (`task_id`,`attempt_no`), + UNIQUE KEY `uk_selfop_inventory_daily` (`source_account`,`warehouse_code`,`inventory_daily_sample_date`), + KEY `idx_selfop_run_scope` (`scope_id`,`id`), + KEY `idx_selfop_run_status` (`status`,`updated_at`), + CONSTRAINT `chk_selfop_inventory_daily` CHECK ((((`inventory_daily_sample_date` is null) and (`inventory_sample_rule_version` is null)) or ((`inventory_daily_sample_date` is not null) and (`inventory_sample_rule_version` is not null) and (`inventory_sample_rule_version` = _utf8mb4'DAILY_SCHEDULED_FIRST_V1') and (`execution_purpose` = _utf8mb4'BUSINESS') and (`run_role` = _utf8mb4'WAREHOUSE_SYNC') and (`status` = _utf8mb4'PUBLISHED') and (`coverage_status` = _utf8mb4'COMPLETE')))), + CONSTRAINT `chk_selfop_sync_run` CHECK (((`attempt_no` > 0) and (`page_count` >= 0) and (`unique_object_count` >= 0) and (`execution_purpose` in (_utf8mb4'BUSINESS',_utf8mb4'VALIDATION')) and ((`execution_purpose` <> _utf8mb4'VALIDATION') or (`status` not in (_utf8mb4'PUBLISHED',_utf8mb4'REUSED'))) and ((`source_total_count` is null) or (`source_total_count` >= 0)) and (((`run_role` = _utf8mb4'ACCOUNT_DISCOVERY') and (`scope_id` is null) and (`warehouse_code` is null)) or ((`run_role` = _utf8mb4'WAREHOUSE_SYNC') and (`scope_id` is not null) and (`warehouse_code` is not null))))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='执行尝试、覆盖证明和版本头'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_sync_scope`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_sync_scope` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `data_family` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'OUTBOUND 或 INVENTORY;按账号+仓库+任务族互斥', + `scope_json` json NOT NULL COMMENT '本仓范围规则,customerMode=ALL_AUTHORIZED,库存为全部品质;当前账号全部授权货主均自营,不将当天出现的货主列表当白名单', + `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '仓库、货主范围规则、品质、时区及单位口径的规范化摘要;不包含当天观测到的客户/SKU 集合', + `business_timezone` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '本仓报表及调度时区,初始建议值为 Asia/Shanghai,各仓独立核准', + `source_timezone` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '本仓已核准的出库源时间时区', + `schedule_cron` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '本仓、本任务族的调度表达式,按 business_timezone 执行', + `stale_after_seconds` int NOT NULL COMMENT '本仓、本任务族数据过期阈值,必须为正;库存初始可采用 26 小时,后续按仓调整', + `warehouse_policy_ref` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '未来按仓告警/补货策略的稳定引用;一期为空,不建告警规则表', + `initial_from_utc` datetime(3) DEFAULT NULL COMMENT '首采固定UTC下界,按本仓业务时区减一个月', + `initial_until_utc` datetime(3) DEFAULT NULL COMMENT '首采固定UTC截止,重试不重新取当前时间', + `discovery_from_utc` datetime(3) DEFAULT NULL COMMENT '本仓已发布的连续销量覆盖UTC下界', + `discovery_until_utc` datetime(3) DEFAULT NULL COMMENT '本仓已发布的连续销量覆盖UTC上界,不含端点', + `fact_revision` bigint NOT NULL DEFAULT '0' COMMENT '出库事实归并修订号;内容实际变化才增加', + `published_fact_revision` bigint NOT NULL DEFAULT '0' COMMENT '本仓最后已发布销量版所使用的事实修订号', + `rebuild_required` tinyint NOT NULL DEFAULT '0' COMMENT '事实变化待重建标记;跨仓修订同时置旧、新仓为 1', + `invalidated_at_utc` datetime(3) DEFAULT NULL COMMENT '最近一次因事实修订使当前版待重建的时刻', + `published_run_id` bigint DEFAULT NULL COMMENT '唯一对外可见版本,指向本任务族已发布执行批次', + `lease_owner` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '当前执行者令牌,不使用仅进程内锁', + `lease_until_utc` datetime(3) DEFAULT NULL COMMENT '租约到期时刻', + `fence_token` bigint NOT NULL DEFAULT '0' COMMENT '每次取得租约递增,事实提交和发布均校验', + `known_order_cursor_id` bigint DEFAULT NULL COMMENT '本仓已可靠处理的稳定订单内部标识游标', + `known_order_round_max_id` bigint DEFAULT NULL COMMENT '本轮已知单复查固定最大内部标识', + `known_order_round_started_at_utc` datetime(3) DEFAULT NULL COMMENT '本仓已知单复查轮次开始UTC时间', + `known_order_round_finished_at_utc` datetime(3) DEFAULT NULL COMMENT '本仓已知单完整轮转完成UTC时间', + `history_round_from_utc` datetime(3) DEFAULT NULL COMMENT '本仓历史核对固定UTC下界', + `history_round_until_utc` datetime(3) DEFAULT NULL COMMENT '本仓历史核对固定UTC上界', + `history_slice_cursor_utc` datetime(3) DEFAULT NULL COMMENT '本仓下一待核对历史切片UTC位置', + `history_round_finished_at_utc` datetime(3) DEFAULT NULL COMMENT '上一轮历史时间片全部完成时刻', + `review_request_budget` int NOT NULL COMMENT '本仓单次复查最大请求数,必须为正', + `review_time_budget_seconds` int NOT NULL COMMENT '本仓单次复查最大执行秒数,必须为正', + `review_target_days` int NOT NULL DEFAULT '7' COMMENT '建议每 7 天轮转一遍,属于待配额验证的目标,不保证首次大量详情在单次调度内完成', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_scope` (`source_account`,`warehouse_code`,`data_family`), + KEY `idx_selfop_scope_lease` (`lease_until_utc`), + CONSTRAINT `chk_selfop_sync_scope` CHECK (((`data_family` in (_utf8mb4'OUTBOUND',_utf8mb4'INVENTORY')) and (`stale_after_seconds` > 0) and (`review_request_budget` > 0) and (`review_time_budget_seconds` > 0) and (`review_target_days` > 0) and (`fact_revision` >= 0) and (`published_fact_revision` >= 0) and (`fence_token` >= 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='分仓任务族租约及发布指针'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_sync_stage`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_sync_stage` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `run_id` bigint NOT NULL COMMENT '首次写入该暂存对象的执行尝试', + `stage_batch_id` bigint NOT NULL COMMENT '出库取共享发现 task.id,便于断点续取;库存取本次 run.id,严禁跨尝试混页', + `last_fetch_run_id` bigint NOT NULL COMMENT '最后一次补齐该对象的执行尝试,保留重试来源', + `observation_sequence` bigint DEFAULT NULL COMMENT '该完整出库详情实际请求的采集代次;有效出库对象必填,目录待补对象和库存为空;不能填 task 调度序号', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `previous_warehouse_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '路由时从已有单据识别的原仓库;归并前再校验,跨仓时通知两仓', + `object_type` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'OUTBOUND_ORDER 或 PRODUCT_STOCK', + `object_key_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '规范化业务键摘要;原业务键保留在载荷中并核对', + `first_page_no` int NOT NULL COMMENT '首次发现页码', + `observed_at_utc` datetime(3) NOT NULL COMMENT '实际接收该对象的时刻', + `content_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '完整规范化对象摘要', + `payload_json` json NOT NULL COMMENT '目录阶段可先存订单头,详情齐后补完整 SKU;VALID 后不再修改;库存保存产品库存字段', + `before_payload_json` json DEFAULT NULL COMMENT '订单归并事务内记录归并前的完整规范化事实;新增单为空', + `validation_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '暂存校验状态:PENDING待核验、VALID有效、INVALID异常', + `validation_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字段缺失、冲突、未知时区等原因', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_stage_object` (`stage_batch_id`,`object_type`,`object_key_hash`), + KEY `idx_selfop_stage_history` (`object_type`,`object_key_hash`,`stage_batch_id`), + KEY `idx_selfop_stage_observation` (`object_type`,`object_key_hash`,`validation_status`,`observation_sequence`), + KEY `idx_selfop_stage_fact_observation` (`observation_sequence`,`warehouse_code`,`object_type`,`validation_status`,`run_id`,`observed_at_utc`), + KEY `idx_selfop_stage_route` (`stage_batch_id`,`warehouse_code`,`validation_status`), + CONSTRAINT `chk_selfop_sync_stage` CHECK (((`first_page_no` > 0) and ((`object_type` <> _utf8mb4'OUTBOUND_ORDER') or (`validation_status` <> _utf8mb4'VALID') or (`observation_sequence` is not null)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='待验证事实与修订证据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_sync_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_sync_task` ( + `id` bigint NOT NULL COMMENT '应用生成的记录标识', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + `task_no` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '稳定采集业务任务号,重试沿用,不展示内部数据库标识', + `execution_purpose` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'BUSINESS或VALIDATION;由服务端冻结用途,子任务继承', + `validation_root_task_id` bigint DEFAULT NULL COMMENT '验证会话唯一预算根任务,根引用自身,正式任务为空', + `validation_budget_json` json DEFAULT NULL COMMENT '验证根冻结硬预算、累计消耗、库存分仓页数、截止时刻及停止原因', + `business_root_task_id` bigint DEFAULT NULL COMMENT '测试人工正式采集共享预算根任务;生产任务为空', + `business_budget_json` json DEFAULT NULL COMMENT '仅测试正式采集根保存冻结请求上限、截止时间、消耗及停止原因', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `task_role` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'ACCOUNT_DISCOVERY 或 WAREHOUSE_SYNC', + `scope_id` bigint DEFAULT NULL COMMENT '分仓任务必须引用分仓作用域;仅账号共享发现为空', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源仓库原始编码,按仓独立统计', + `discovery_scope_id` bigint DEFAULT NULL COMMENT '共享发现必填,引用账号发现协调器', + `upstream_task_id` bigint DEFAULT NULL COMMENT '出库分仓任务引用已持久化目录的共享发现切片;库存无此上游', + `discovery_sequence` bigint DEFAULT NULL COMMENT '共享任务及分仓子任务继承的调度顺序;重试保持不变,不用于事实覆盖判定', + `observation_baseline` bigint DEFAULT NULL COMMENT '共享任务建立时已分配的最大详情采集代次,分仓子任务继承;用于识别旧任务恢复期间出现的其他任务新观测', + `request_key` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '共享发现包含切片/计划槽位;分仓任务包含仓库、任务族及切片或计划槽位;人工附请求幂等键', + `request_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '请求类型、查询范围、范围摘要的指纹;同键不同请求拒绝', + `task_type` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT '计划、补采、复核、重建与验证;INVENTORY_FLOW_HISTORY为流水片,INVENTORY_HISTORY_BUILD为本地历史还原', + `planned_at_utc` datetime(3) DEFAULT NULL COMMENT '计划时点;人工请求可空', + `query_from_utc` datetime(3) DEFAULT NULL COMMENT '出库查询区间UTC下界,库存不填', + `query_until_utc` datetime(3) DEFAULT NULL COMMENT '出库查询区间UTC上界,不含端点,库存不填', + `query_scope_json` json NOT NULL COMMENT '不变的账号、货主、仓库、品质和查询条件快照;按单补查在此记录单号', + `routing_manifest_json` json DEFAULT NULL COMMENT '共享切片目录完整标记、每仓对象键集合/数量和详情就绪状态;各对象记录 effectiveStageId,需新代次复查时记录 refreshTaskId,完成后指向新有效暂存;不改写旧载荷', + `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '建任务时的业务范围摘要', + `status` varchar(20) COLLATE utf8mb4_bin NOT NULL COMMENT 'WAITING_SOURCE、READY、RUNNING、RETRY_WAIT、SUCCEEDED、DEAD、SAMPLE_DONE;样本结束不等于正式成功', + `apply_state` varchar(20) COLLATE utf8mb4_bin NOT NULL COMMENT '正式出库归并NOT_STARTED、APPLYING、BLOCKED、APPLIED;共享发现、库存、重建及验证为NOT_APPLICABLE', + `affected_warehouse_codes_json` json DEFAULT NULL COMMENT '本次归并可能改变的仓集合,包含原仓与新仓;首段事实写入前登记,扩大集合须先取得新增仓租约并锁 scope,不能写完再补', + `apply_started_at_utc` datetime(3) DEFAULT NULL COMMENT '首段事实提交UTC时间', + `apply_completed_at_utc` datetime(3) DEFAULT NULL COMMENT '全部必需事实归并完成UTC时间,失败不填', + `attempt_count` int NOT NULL DEFAULT '0' COMMENT '已创建的执行尝试数', + `next_retry_at_utc` datetime(3) DEFAULT NULL COMMENT '有限退避后下一次可执行时刻', + `requested_by` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '人工请求的平台操作人,仅内部审计', + `result_published_run_id` bigint DEFAULT NULL COMMENT '正式成功任务实际发布或复用的版本;验证和共享发现为空', + `progress_json` json DEFAULT NULL COMMENT '与可靠检查点一起提交的有界阶段、单位、尝试和质量进度,不保存单据集合', + `progress_updated_at_utc` datetime(3) DEFAULT NULL COMMENT '最后可靠业务检查点UTC时间,与执行心跳分开', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_selfop_task_no` (`task_no`), + UNIQUE KEY `uk_selfop_task_request` (`source_account`,`request_key`), + KEY `idx_selfop_task_poll` (`status`,`next_retry_at_utc`,`id`), + KEY `idx_selfop_task_upstream` (`upstream_task_id`,`warehouse_code`), + KEY `idx_selfop_task_apply` (`apply_state`,`id`), + KEY `idx_selfop_task_scope_list` (`scope_id`,`created_at`,`id`), + KEY `idx_selfop_task_account_list` (`source_account`,`task_role`,`created_at`,`id`), + KEY `idx_selfop_task_business_root` (`business_root_task_id`,`status`,`id`), + CONSTRAINT `chk_selfop_business_budget` CHECK ((((`business_root_task_id` is null) and (`business_budget_json` is null)) or ((`execution_purpose` = _utf8mb4'BUSINESS') and (`business_root_task_id` is not null) and (((`business_root_task_id` = `id`) and (`business_budget_json` is not null)) or ((`business_root_task_id` <> `id`) and (`business_budget_json` is null)))))), + CONSTRAINT `chk_selfop_sync_task` CHECK (((`attempt_count` >= 0) and (`execution_purpose` in (_utf8mb4'BUSINESS',_utf8mb4'VALIDATION')) and (((`execution_purpose` = _utf8mb4'BUSINESS') and (`validation_root_task_id` is null) and (`validation_budget_json` is null)) or ((`execution_purpose` = _utf8mb4'VALIDATION') and (`validation_root_task_id` is not null) and (`apply_state` = _utf8mb4'NOT_APPLICABLE') and (`result_published_run_id` is null) and (`status` <> _utf8mb4'SUCCEEDED'))) and (((`task_role` = _utf8mb4'ACCOUNT_DISCOVERY') and (`scope_id` is null) and (`warehouse_code` is null) and (`discovery_scope_id` is not null)) or ((`task_role` = _utf8mb4'WAREHOUSE_SYNC') and (`scope_id` is not null) and (`warehouse_code` is not null))))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='一次计划或人工请求'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_selfop_warehouse_daily_sales`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_selfop_warehouse_daily_sales` ( + `sales_run_id` bigint NOT NULL COMMENT '完整销量计算版本标识', + `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', + `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码', + `business_date` date NOT NULL COMMENT '已核准业务日', + `observed_quantity` decimal(38,6) DEFAULT NULL COMMENT '该日PCS非负有效出库量之和,无有效行时为空', + `invalid_row_count` bigint NOT NULL COMMENT '该日数量为空或负数或单位非PCS的日事实行数', + `source_row_count` bigint NOT NULL COMMENT '该日参与仓库汇总的SKU日事实总行数', + `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', + `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', + PRIMARY KEY (`sales_run_id`,`source_account`,`warehouse_code`,`business_date`), + CONSTRAINT `chk_selfop_warehouse_daily_sales` CHECK (((`source_row_count` > 0) and (`invalid_row_count` >= 0) and (`invalid_row_count` <= `source_row_count`) and ((`observed_quantity` is null) or (`observed_quantity` >= 0)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='完整销量版本按仓按日汇总,随SKU日事实批次原子构建'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_us_truck_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_us_truck_order` ( + `id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `transport_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `origin` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `origin_address` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `destination_address` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `container_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pallet_count` int NOT NULL DEFAULT '1', + `package_count` int NOT NULL DEFAULT '0', + `received_pallet_count` int NOT NULL DEFAULT '0', + `allocated_pallet_count` int NOT NULL DEFAULT '0', + `shipped_pallet_count` int NOT NULL DEFAULT '0', + `total_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000', + `total_volume_cbm` decimal(18,6) NOT NULL DEFAULT '0.000000', + `budget_amount` decimal(18,2) DEFAULT NULL, + `currency` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'USD', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `contact_info` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `requested_date` date NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `receipt_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `receipt_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `version` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `vehicle_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '车辆类型:PALLET_15为15拖,PALLET_30为30拖;拼车未提供时为空', + `origin_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系人', + `origin_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系电话', + `destination_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系人', + `destination_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系电话', + `pickup_at` datetime DEFAULT NULL COMMENT '取货时间,按填写的日期时分保存,不转换时区', + `delivery_at` datetime DEFAULT NULL COMMENT '送货时间,按填写的日期时分保存;拼车来源未提供时为空', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_us_truck_order_no` (`customer_id`,`order_no`), + UNIQUE KEY `uk_ll_us_truck_order_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_us_truck_order_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_us_truck_order_date` (`customer_id`,`requested_date`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='US domestic trucking customer order'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_us_truck_order_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_us_truck_order_operation` ( + `id` bigint NOT NULL COMMENT '操作记录ID', + `order_id` bigint NOT NULL COMMENT '美国卡车订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `operation_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '具名操作类型', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作请求内容哈希', + `result_version` bigint NOT NULL COMMENT '操作完成后的订单版本', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_us_truck_operation_key` (`customer_id`,`order_id`,`idempotency_key`), + KEY `idx_ll_us_truck_operation_order` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='美国卡车订单幂等操作账'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_us_truck_order_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_us_truck_order_pallet` ( + `id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sequence_no` int NOT NULL, + `source` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL, + `package_count` int DEFAULT NULL, + `received_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_us_truck_order_pallet_no` (`customer_id`,`order_id`,`pallet_no`), + UNIQUE KEY `uk_ll_us_truck_order_pallet_seq` (`customer_id`,`order_id`,`sequence_no`), + KEY `idx_ll_us_truck_order_pallet_list` (`customer_id`,`order_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_us_truck_order_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_us_truck_order_status_history` ( + `id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `operation_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'UPDATE' COMMENT '具名操作类型', + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作幂等键', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + KEY `idx_ll_us_truck_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable US trucking order status history'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_vehicle`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_vehicle` ( + `id` bigint NOT NULL COMMENT '车辆档案ID', + `plate_number` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '车牌号', + `model` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '车型', + `fuel_consumption_per100_km` decimal(10,2) NOT NULL COMMENT '百公里油耗,单位升', + `mileage_km` bigint NOT NULL COMMENT '当前公里码,单位公里', + `driver_or_dispatch_company` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '司机姓名或外派单位', + `phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '司机或外派单位联系电话', + `region` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '区域:DOMESTIC/OVERSEAS', + `ownership` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '车辆归属:OWNED/DISPATCHED', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '状态:IN_SERVICE/DISPATCHED/MAINTENANCE/INACTIVE/RETURNED', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人', + `updated_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更新人', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + `max_pallet_spaces` int DEFAULT NULL COMMENT '最大标准托位,未知时为空', + `max_load_kg` decimal(12,3) DEFAULT NULL COMMENT '最大载重,千克', + `max_volume_cbm` decimal(12,3) DEFAULT NULL COMMENT '可用容积,立方米', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_vehicle_plate` (`plate_number`), + KEY `idx_ll_vehicle_page` (`ownership`,`region`,`status`,`updated_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='平台车辆主数据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_wallet_event_inbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_wallet_event_inbox` ( + `event_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国内Finance资金结果事件ID', + `command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原海外资金指令事件ID', + `payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化载荷SHA-256,包含sha256:前缀', + `payload_json` json NOT NULL COMMENT '冻结事件信封', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'RECEIVED或PROCESSED', + `received_at` datetime(3) NOT NULL COMMENT '接收时间', + `processed_at` datetime(3) DEFAULT NULL COMMENT '处理完成时间', + PRIMARY KEY (`event_id`), + UNIQUE KEY `uk_ll_wallet_command_result` (`command_event_id`), + KEY `idx_ll_wallet_event_status` (`status`,`received_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='跨区客户资金结果幂等收件箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_carton` ( + `id` bigint NOT NULL COMMENT '预报箱主键', + `transfer_order_id` bigint NOT NULL COMMENT '转运单ID', + `transfer_item_id` bigint DEFAULT NULL COMMENT '实际箱内首项SKU明细ID,预报补箱可为空', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '系统生成的一箱一码箱唛', + `customer_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户原箱唛,用于换标现场绑定', + `carton_index` int NOT NULL COMMENT '全单箱序号', + `total_cartons` int NOT NULL COMMENT '首次生成时全单总箱数', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'EXPECTED' COMMENT '箱状态:EXPECTED待实收', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `length_cm` decimal(12,2) DEFAULT NULL COMMENT '箱子实测长度厘米', + `width_cm` decimal(12,2) DEFAULT NULL COMMENT '箱子实测宽度厘米', + `height_cm` decimal(12,2) DEFAULT NULL COMMENT '箱子实测高度厘米', + `gross_weight_kg` decimal(12,2) DEFAULT NULL COMMENT '箱子实测重量千克', + `counted_quantity` bigint DEFAULT NULL COMMENT '箱内SKU实点件数', + `count_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱内清点幂等键', + `count_request_hash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱内清点请求摘要', + `counted_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱内清点操作人', + `counted_at` datetime(3) DEFAULT NULL COMMENT '箱内清点完成时间', + `discrepancy_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实收与预报箱数差异原因', + `transfer_pallet_id` bigint DEFAULT NULL COMMENT '签收箱所属转运托盘事实ID', + `sku_items_json` json DEFAULT NULL COMMENT '实收箱内SKU及逐项件数明细', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_transfer_carton_mark` (`customer_id`,`carton_mark`), + UNIQUE KEY `uk_ll_wh_transfer_carton_index` (`transfer_order_id`,`carton_index`), + KEY `idx_ll_wh_transfer_carton_list` (`customer_id`,`transfer_order_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仓储转运系统箱唛预报'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_inventory_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_inventory_allocation` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `transfer_order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `inventory_position_id` bigint NOT NULL, + `inventory_balance_id` bigint NOT NULL, + `inbound_order_id` bigint NOT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `pallet_id` bigint NOT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `package_count` int NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'RESERVED', + `active_position_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `allocated_at` datetime(3) NOT NULL, + `shipped_at` datetime(3) DEFAULT NULL, + `received_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本次来源分配的实际SKU快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_transfer_allocation_position` (`transfer_order_id`,`inventory_position_id`), + UNIQUE KEY `uk_ll_wh_transfer_active_position` (`customer_id`,`active_position_key`), + KEY `idx_ll_wh_transfer_allocation_list` (`customer_id`,`transfer_order_id`,`status`), + KEY `idx_ll_wh_transfer_allocation_position` (`transfer_order_id`,`inventory_position_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Exclusive source inventory positions allocated to a warehouse transfer'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_item` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `transfer_order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `package_count` int NOT NULL, + `shipping_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `declared_quantity` bigint DEFAULT NULL COMMENT 'SKU鐢虫姤浠舵暟锛岄潪棰勮鎴栧疄鏀剁鏁�', + PRIMARY KEY (`id`), + KEY `idx_ll_wh_transfer_item_list` (`customer_id`,`transfer_order_id`), + KEY `idx_ll_wh_transfer_item_sku` (`customer_id`,`sku_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Frozen warehouse transfer cargo items'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_measurement_photo`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_measurement_photo` ( + `id` bigint NOT NULL COMMENT '测量照片引用ID', + `transfer_order_id` bigint NOT NULL COMMENT '仓储转运单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `file_id` bigint NOT NULL COMMENT '文件服务文件ID', + `file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件名快照', + `content_type` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件媒体类型快照', + `size_bytes` bigint NOT NULL DEFAULT '0' COMMENT '文件字节数快照', + `uploaded_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'PDA上传操作人', + `uploaded_at` datetime(3) NOT NULL COMMENT '上传时间', + `submitted_at` datetime(3) DEFAULT NULL COMMENT '随测量打托提交时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_transfer_measurement_photo_file` (`customer_id`,`transfer_order_id`,`file_id`), + KEY `idx_ll_transfer_measurement_photo_order` (`customer_id`,`transfer_order_id`,`uploaded_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仓储转运PDA测量现场照片引用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_order` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `transfer_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `inbound_order_id` bigint NOT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `lastleg_order_id` bigint NOT NULL, + `lastleg_order_no` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operating_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '可选FBA目的仓编码', + `delivery_address` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '提货地址或中转仓收货地址', + `pickup_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '提货联系人', + `pickup_contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '提货联系电话', + `package_count` int NOT NULL, + `delivery_method` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入仓方式', + `estimated_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计入仓时间,库存转运不填写', + `estimated_ship_at` datetime(3) DEFAULT NULL COMMENT '预计发货时间', + `fba_shipment_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '可选FBA货件编号', + `tracking_no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `fba_box_nos` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `need_relabel` tinyint NOT NULL DEFAULT '0', + `relabel_application_id` bigint DEFAULT NULL, + `relabel_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `relabel_completed_at` datetime(3) DEFAULT NULL COMMENT '鍏宠仈璐存爣瀹屾垚鏃堕棿', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_REVIEW', + `review_decision` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核决定', + `review_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核备注或驳回原因', + `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核人ID', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '审核时间', + `allocation_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '库存分配幂等键', + `allocation_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '库存分配请求哈希', + `outbound_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '出库幂等键', + `outbound_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '出库请求哈希', + `outbound_at` datetime(3) DEFAULT NULL COMMENT '出库时间', + `measured_at` datetime(3) DEFAULT NULL COMMENT 'PDA测量完成时间', + `actual_ship_at` datetime(3) DEFAULT NULL COMMENT '实际发货时间', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `label_deadline` datetime(3) DEFAULT NULL COMMENT '换标截止时间', + `relabel_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标联系人', + `relabel_contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标联系电话', + `relabel_charge_amount` decimal(20,2) DEFAULT NULL COMMENT '换标费用CNY', + `relabel_delivery_method` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标后派送方式', + `palletize_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'PDA打托幂等键', + `palletize_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'PDA打托请求哈希', + `confirmation_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户测量确认幂等键', + `confirmation_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户测量确认请求哈希', + `customer_confirmed_at` datetime(3) DEFAULT NULL COMMENT '客户确认测量时间', + `destination_type` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的类型:FBA或PRIVATE', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓ID快照', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称快照', + `private_destination_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓完整地址', + `private_destination_postal_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓邮编', + `private_destination_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系人', + `private_destination_contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系电话', + `destination_binding_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地绑定幂等键', + `destination_binding_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地绑定请求哈希', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_transfer_no` (`customer_id`,`transfer_no`), + UNIQUE KEY `uk_ll_wh_transfer_key` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_wh_transfer_tail_order` (`lastleg_order_id`), + KEY `idx_ll_wh_transfer_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_wh_transfer_inbound` (`customer_id`,`inbound_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Customer warehouse transfer order'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_pallet` ( + `id` bigint NOT NULL COMMENT '打托事实ID', + `transfer_order_id` bigint NOT NULL COMMENT '转运单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `sequence_no` int NOT NULL COMMENT '托序号', + `warehouse_pallet_id` bigint DEFAULT NULL COMMENT '鐢熸垚鍚庣殑娴峰?浠撶湡瀹炴墭鐩業D', + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鐢熸垚鍚庣殑鐪熷疄鎵樼洏鐮', + `warehouse_location_id` bigint DEFAULT NULL COMMENT '鐢熸垚鍚庣殑鐪熷疄搴撲綅ID', + `warehouse_location_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '真实库位码', + `warehouse_resource_lock_id` bigint DEFAULT NULL COMMENT '鐢熸垚鍚庣殑浠撳偍璧勬簮閿両D', + `carton_count` int NOT NULL COMMENT '本托实收箱数', + `length_cm` decimal(12,2) NOT NULL COMMENT '实测长cm', + `width_cm` decimal(12,2) NOT NULL COMMENT '实测宽cm', + `height_cm` decimal(12,2) NOT NULL COMMENT '实测高cm', + `gross_weight_kg` decimal(12,3) NOT NULL COMMENT '实测毛重kg', + `volume_cbm` decimal(18,6) NOT NULL COMMENT '实测体积CBM', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '打托状态', + `draft_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鑽夌?淇濆瓨骞傜瓑閿', + `draft_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鑽夌?璇锋眰鎽樿?', + `generate_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鏂版墭鐩樼敓鎴愬箓绛夐敭', + `bind_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鎵?爜缁戝畾骞傜瓑閿', + `bound_at` datetime(3) DEFAULT NULL COMMENT '鎵?爜纭??缁戝畾鏃堕棿', + `completed_at` datetime(3) DEFAULT NULL COMMENT '鏁村崟鎵撴墭瀹屾垚鏃堕棿', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_transfer_pallet_seq` (`transfer_order_id`,`sequence_no`), + UNIQUE KEY `uk_ll_transfer_pallet_physical` (`customer_id`,`warehouse_pallet_id`), + KEY `idx_ll_transfer_pallet_order` (`customer_id`,`transfer_order_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仓储转运PDA实测打托事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_pallet_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_pallet_item` ( + `id` bigint NOT NULL COMMENT '主键ID', + `transfer_order_id` bigint NOT NULL COMMENT '转运单ID', + `transfer_pallet_id` bigint NOT NULL COMMENT '转运托盘事实ID', + `transfer_item_id` bigint NOT NULL COMMENT '转运申报明细ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `package_count` int NOT NULL COMMENT '本托该SKU实收箱数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_transfer_pallet_item` (`transfer_pallet_id`,`transfer_item_id`), + KEY `idx_ll_transfer_pallet_item_order` (`customer_id`,`transfer_order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仓储转运每托SKU箱数回填'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_receipt` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `transfer_order_id` bigint NOT NULL, + `allocation_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_inventory_position_id` bigint NOT NULL, + `destination_inventory_balance_id` bigint NOT NULL, + `destination_inventory_position_id` bigint NOT NULL, + `package_count` int NOT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `inventory_operation_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `received_at` datetime(3) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_transfer_receipt_source` (`transfer_order_id`,`source_inventory_position_id`), + UNIQUE KEY `uk_ll_wh_transfer_receipt_key` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_wh_transfer_receipt_operation` (`customer_id`,`inventory_operation_key`), + KEY `idx_ll_wh_transfer_receipt_list` (`customer_id`,`transfer_order_id`,`received_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Idempotent destination stock receipt for one transfer source position'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_receipt_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_receipt_command` ( + `id` bigint NOT NULL COMMENT '收货命令主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户标识', + `transfer_order_id` bigint NOT NULL COMMENT '转运单标识', + `source_inventory_position_id` bigint NOT NULL COMMENT '本次收货来源库存位置', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始收货幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '完整原始收货请求摘要', + `request_json` json NOT NULL COMMENT '完整原始收货请求快照', + `target_warehouse_id` bigint NOT NULL COMMENT '实际目标海外收货仓', + `target_pallet_id` bigint NOT NULL COMMENT '目标实物托盘', + `target_location_id` bigint NOT NULL COMMENT '目标实际库位', + `target_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '共享目标资源绑定摘要', + `target_json` json NOT NULL COMMENT '权威目标仓托盘库位及目的仓快照', + `reservation_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '同转运同目标托盘共享资源占用键', + `resource_lock_id` bigint DEFAULT NULL COMMENT '已确认有效的海外资源锁标识', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令状态PREPARED准备完成RESERVED资源占用COMPLETED收货完成', + `created_at` datetime(3) NOT NULL COMMENT '命令创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '命令最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_receipt_cmd_source` (`transfer_order_id`,`source_inventory_position_id`), + UNIQUE KEY `uk_ll_wh_receipt_cmd_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_wh_receipt_cmd_target` (`customer_id`,`transfer_order_id`,`target_pallet_id`), + CONSTRAINT `ck_ll_wh_receipt_cmd_status` CHECK ((`status` in (_utf8mb4'PREPARED',_utf8mb4'RESERVED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转运逐来源收货原请求与共享目标资源占用命令'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_relabel_binding`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_relabel_binding` ( + `id` bigint NOT NULL COMMENT '主键ID', + `transfer_order_id` bigint NOT NULL COMMENT '转运单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换标类型', + `customer_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户原箱唛', + `original_sku` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '旧SKU', + `new_sku` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '新SKU', + `quantity` int NOT NULL COMMENT '换标件数', + `fba_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '新FBA箱唛', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA目的仓', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `source_allocation_id` bigint DEFAULT NULL COMMENT '已有库存转运的原始来源分配ID', + `relabel_item_id` bigint DEFAULT NULL COMMENT '本票关联换标明细ID', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_transfer_relabel_mark` (`transfer_order_id`,`customer_carton_mark`), + KEY `idx_ll_transfer_relabel_order` (`customer_id`,`transfer_order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仓储转运换标预绑定明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_source_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_source_order` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `transfer_order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_lastleg_order_id` bigint NOT NULL, + `source_lastleg_order_no` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `inbound_order_id` bigint NOT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_transfer_source` (`transfer_order_id`,`source_lastleg_order_id`), + KEY `idx_ll_wh_transfer_source_list` (`customer_id`,`transfer_order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Selected historical customer orders and inbound bindings'; +/*!40101 SET character_set_client = @saved_cs_client */; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `baiyue_firstleg` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `baiyue_firstleg`; +DROP TABLE IF EXISTS `event_delivery_attempt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `event_delivery_attempt` ( + `attempt_id` varchar(36) NOT NULL COMMENT '本次投递租约UUID和审计主键', + `service_name` varchar(32) NOT NULL COMMENT '本库所属生产服务', + `event_type` varchar(96) NOT NULL COMMENT '白名单业务事件类型', + `entry_id` varchar(128) NOT NULL COMMENT '生产者发件箱主键', + `event_id` varchar(128) DEFAULT NULL COMMENT '合法原事件UUID或ULID;格式错误时为空', + `target_name` varchar(64) NOT NULL COMMENT '固定目标业务服务', + `started_at` datetime(3) NOT NULL COMMENT '领取及审计事务提交前的开始时间', + `finished_at` datetime(3) DEFAULT NULL COMMENT '尝试完成或租约过期恢复时间', + `duration_ms` bigint DEFAULT NULL COMMENT '尝试耗时毫秒', + `outcome` varchar(24) NOT NULL COMMENT 'STARTED/APPLIED/DUPLICATE/STALE/RETRY/DEAD/LEASE_EXPIRED', + `error_code` varchar(64) DEFAULT NULL COMMENT '有限错误类别或HTTP状态;不含载荷与令牌', + `next_retry_at` datetime(3) DEFAULT NULL COMMENT '本次失败后下次计划投递时间', + PRIMARY KEY (`attempt_id`), + KEY `idx_delivery_attempt_entry` (`service_name`,`entry_id`,`started_at`), + KEY `idx_delivery_attempt_outcome` (`outcome`,`started_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='本服务业务事件逐次投递审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `event_delivery_retry_audit`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `event_delivery_retry_audit` ( + `request_id` varchar(36) NOT NULL COMMENT '人工重试请求UUID和幂等键', + `producer_table` varchar(64) NOT NULL COMMENT '本服务发件箱表名', + `entry_id` varchar(64) NOT NULL COMMENT '发件箱记录主键', + `event_id` varchar(128) NOT NULL COMMENT '原事件全局标识', + `event_type` varchar(64) NOT NULL COMMENT '原事件类型', + `payload_hash` varchar(71) NOT NULL COMMENT '原事件不可变负载摘要', + `operator_name` varchar(128) NOT NULL COMMENT '持有运维凭据的操作人标识', + `reason` varchar(500) NOT NULL COMMENT '人工重试原因', + `previous_failures` int NOT NULL COMMENT '重试前累计失败次数', + `previous_error` varchar(1000) DEFAULT NULL COMMENT '重试前最后一次脱敏错误', + `requested_at` datetime(3) NOT NULL COMMENT '重试申请提交时间', + PRIMARY KEY (`request_id`), + KEY `idx_event_retry_entry` (`producer_table`,`entry_id`,`requested_at`), + KEY `idx_event_retry_event` (`event_id`,`requested_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='业务事件人工重试审计,与恢复待发送状态同事务提交'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_assignment_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_assignment_history` ( + `id` bigint unsigned NOT NULL COMMENT '指派历史ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `task_id` bigint unsigned NOT NULL COMMENT '所属履约任务ID', + `previous_assignee_id` bigint unsigned DEFAULT NULL COMMENT '原负责人ID', + `assignee_id` bigint unsigned NOT NULL COMMENT '新负责人ID', + `assignee_name` varchar(64) NOT NULL COMMENT '新负责人名称快照', + `reason` varchar(500) DEFAULT NULL COMMENT '指派或改派原因', + `operator_id` bigint unsigned NOT NULL COMMENT '执行指派的操作人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '指派发生时间', + PRIMARY KEY (`id`), + KEY `idx_assignment_task_time` (`tenant_id`,`task_id`,`created_at`), + KEY `fk_assignment_task` (`task_id`), + CONSTRAINT `fk_assignment_task` FOREIGN KEY (`task_id`) REFERENCES `fl_fulfillment_task` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='头程任务指派历史表:不可变记录每次负责人变更及原因,用于追踪和审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_fba_rate`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_fba_rate` ( + `id` bigint unsigned NOT NULL COMMENT '船司FBA价格ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '平台价格作用域ID,船司价格固定为0', + `price_book_version_id` bigint unsigned DEFAULT NULL COMMENT '整表价格版本ID;历史兼容价格可为空', + `rate_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '平台公共价格编码', + `rate_version` int unsigned NOT NULL COMMENT '价格版本号', + `origin_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '确认前可为空;确认后绑定平台公共起运仓逻辑ID', + `origin_warehouse_code` varchar(64) DEFAULT NULL COMMENT '起运仓稳定编码', + `origin_warehouse_name` varchar(128) NOT NULL COMMENT '起运仓名称快照', + `business_type` varchar(32) NOT NULL COMMENT '业务或计费类型', + `channel_code` varchar(64) DEFAULT NULL COMMENT '渠道编码', + `price_model` varchar(32) NOT NULL DEFAULT 'FBA_WAREHOUSE_RATE' COMMENT '价格模型', + `carrier_id` bigint unsigned DEFAULT NULL COMMENT '船司逻辑ID', + `carrier_name` varchar(128) DEFAULT NULL COMMENT '历史承运商名称;渠道价格可为空', + `destination_type` varchar(16) DEFAULT NULL COMMENT '目的地类型:FBA或OVERSEAS;REGION_WEIGHT_TIER区域阶梯行为空', + `destination_code` varchar(32) DEFAULT NULL COMMENT 'FBA目的仓编码;区域阶梯模型为空', + `destination_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '平台海外仓稳定ID;不存环境专属ID', + `destination_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `region_code` varchar(16) DEFAULT NULL COMMENT '区域阶梯模型区域编码', + `pricing_tax_mode` varchar(16) DEFAULT NULL COMMENT '报价包税维度;独立于订单tax_mode', + `weight_from_kg` decimal(18,6) DEFAULT NULL COMMENT '区域阶梯起始计费重量KG', + `charge_unit` varchar(16) NOT NULL COMMENT '计费单位:KG或CBM', + `unit_price` decimal(18,6) NOT NULL COMMENT '基础单价', + `currency` char(3) NOT NULL COMMENT '币种', + `additional_fee` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '固定附加费', + `source_sheet_name` varchar(128) DEFAULT NULL COMMENT '原始Excel Sheet', + `source_row_number` int unsigned DEFAULT NULL COMMENT '原始Excel行号', + `source_destination_text` varchar(1000) DEFAULT NULL COMMENT '原始组合仓库或区域文本', + `effective_from` datetime(3) NOT NULL COMMENT '生效开始时间', + `effective_to` datetime(3) DEFAULT NULL COMMENT '生效结束时间', + `status` varchar(24) NOT NULL DEFAULT 'ACTIVE' COMMENT '价格状态:PENDING_CONFIRMATION、ACTIVE或SUPERSEDED', + `remark` varchar(500) DEFAULT NULL COMMENT '价格备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fba_rate_version` (`tenant_id`,`rate_code`,`rate_version`), + KEY `idx_fba_rate_unique_match` (`tenant_id`,`origin_warehouse_id`,`business_type`,`channel_code`,`carrier_id`,`destination_code`,`charge_unit`,`status`,`effective_from`,`effective_to`), + KEY `idx_fba_rate_match` (`tenant_id`,`origin_warehouse_id`,`business_type`,`channel_code`,`carrier_id`,`destination_type`,`destination_code`,`destination_warehouse_id`,`charge_unit`,`status`,`effective_from`,`effective_to`), + KEY `idx_fba_rate_book` (`price_book_version_id`,`channel_code`,`origin_warehouse_id`,`price_model`,`status`), + KEY `idx_fba_rate_destination` (`price_book_version_id`,`channel_code`,`origin_warehouse_id`,`destination_type`,`destination_warehouse_id`,`destination_code`), + KEY `idx_fba_rate_region` (`price_book_version_id`,`channel_code`,`origin_warehouse_id`,`region_code`,`weight_from_kg`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船司FBA目的仓价格版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_exception_fact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_exception_fact` ( + `id` bigint unsigned NOT NULL COMMENT '船节点异常事实ID', + `query_id` bigint unsigned NOT NULL COMMENT '所属查询任务ID', + `event_key` varchar(192) NOT NULL COMMENT '供应商编码与供应商事件ID组成的幂等键', + `provider_code` varchar(32) NOT NULL COMMENT '供应商编码', + `provider_event_id` varchar(128) NOT NULL COMMENT '供应商稳定事件ID', + `provider_status` varchar(128) NOT NULL COMMENT '供应商原始异常状态', + `exception_code` varchar(32) NOT NULL COMMENT '平台异常编码', + `active` tinyint(1) NOT NULL COMMENT '1异常发生;0异常解除', + `observed_at` datetime(3) NOT NULL COMMENT '供应商观测时间', + `location_code` varchar(32) DEFAULT NULL COMMENT '地点编码', + `location_name` varchar(128) DEFAULT NULL COMMENT '地点名称', + `source_reference` varchar(500) DEFAULT NULL COMMENT '可审计来源引用', + `raw_payload_hash` char(64) NOT NULL COMMENT '原始响应SHA-256', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '事实入库时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carrier_schedule_exception_event` (`query_id`,`event_key`), + KEY `idx_carrier_schedule_exception_timeline` (`query_id`,`observed_at`,`id`), + CONSTRAINT `fk_carrier_schedule_exception_query` FOREIGN KEY (`query_id`) REFERENCES `fl_carrier_schedule_query` (`id`), + CONSTRAINT `chk_carrier_schedule_exception_active` CHECK ((`active` in (0,1))), + CONSTRAINT `chk_carrier_schedule_exception_code` CHECK ((`exception_code` in (_utf8mb4'CUSTOMS_HOLD',_utf8mb4'TERMINAL_HOLD',_utf8mb4'DOCUMENT_HOLD',_utf8mb4'UNKNOWN_HOLD'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船节点异常发生与解除不可变事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_node_fact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_node_fact` ( + `id` bigint unsigned NOT NULL COMMENT '标准船节点事实ID', + `query_id` bigint unsigned NOT NULL COMMENT '所属查询任务ID', + `event_key` varchar(192) NOT NULL COMMENT '供应商编码与供应商事件ID组成的幂等键', + `provider_code` varchar(32) NOT NULL COMMENT '轨迹供应商编码', + `provider_event_id` varchar(128) NOT NULL COMMENT '供应商稳定事件ID', + `provider_node_code` varchar(64) NOT NULL COMMENT '供应商原始节点编码', + `standard_node` varchar(32) NOT NULL COMMENT '标准船节点', + `node_sequence` int unsigned NOT NULL COMMENT '标准节点单调序号', + `observed_at` datetime(3) NOT NULL COMMENT '供应商观测时间', + `estimated_at` datetime(3) DEFAULT NULL COMMENT '供应商预计发生时间', + `actual_at` datetime(3) DEFAULT NULL COMMENT '供应商确认实际发生时间', + `location_code` varchar(32) DEFAULT NULL COMMENT '节点地点编码', + `location_name` varchar(128) DEFAULT NULL COMMENT '节点地点名称', + `source_reference` varchar(500) DEFAULT NULL COMMENT '可审计来源引用', + `raw_payload_hash` char(64) NOT NULL COMMENT '原始响应SHA-256;不保存敏感原文', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '事实入库时间', + `container_booking_id` bigint unsigned NOT NULL COMMENT '所属真实货柜ID', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carrier_schedule_node_event` (`query_id`,`event_key`), + KEY `idx_carrier_schedule_node_timeline` (`query_id`,`node_sequence`,`observed_at`,`id`), + KEY `idx_container_shipping_node_timeline` (`container_booking_id`,`observed_at`,`id`), + CONSTRAINT `fk_carrier_schedule_node_query` FOREIGN KEY (`query_id`) REFERENCES `fl_carrier_schedule_query` (`id`), + CONSTRAINT `chk_carrier_schedule_node_sequence` CHECK ((`node_sequence` in (10,20,30,40,50,60,70,80,90,100))), + CONSTRAINT `chk_carrier_schedule_node_standard` CHECK ((`standard_node` in (_utf8mb4'DEPARTED_WAREHOUSE',_utf8mb4'AT_ORIGIN_PORT',_utf8mb4'LOADED_ON_VESSEL',_utf8mb4'DEPARTED_ORIGIN_PORT',_utf8mb4'IN_TRANSIT',_utf8mb4'ARRIVED_DESTINATION_PORT',_utf8mb4'DISCHARGED_FROM_VESSEL',_utf8mb4'PICKUP_READY',_utf8mb4'PICKED_UP',_utf8mb4'EMPTY_RETURNED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='供应商标准船节点不可变事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_query`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_query` ( + `id` bigint unsigned NOT NULL COMMENT '船司官网查询任务ID', + `query_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船司官网查询任务编号', + `customer_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '关联海运订舱ID', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '指定查询的柜次ID;整票订舱查询时为空', + `container_scope_id` bigint unsigned GENERATED ALWAYS AS (coalesce(`container_booking_id`,0)) STORED COMMENT '柜次唯一作用域计算值;整票订舱查询固定为0', + `carrier_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船公司编码:MATSON美森、SML森罗、ZIM以星、COSCO中远海运、EMC长荣、HEDE合德', + `tracking_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '官网跟踪类型:BOOKING_NO订舱号、BILL_OF_LADING提单号、CONTAINER_NO箱号', + `tracking_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '提交至船公司官网的跟踪号码', + `official_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船公司官网查询入口地址快照', + `access_mode` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '官网访问方式:PUBLIC_FORM公开表单、HCAPTCHA人机校验、DYNAMIC_IFRAME动态页面', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '任务状态:READY可查询、MANUAL_REQUIRED需人工处理、SUCCESS已取得有效结果', + `window_started_at` datetime(3) NOT NULL COMMENT '当前三天查询窗口起始时间', + `attempt_count` int unsigned NOT NULL DEFAULT '0' COMMENT '当前查询窗口已执行次数;最多3次', + `next_allowed_at` datetime(3) NOT NULL COMMENT '频控规则允许的下次查询时间', + `last_attempt_at` datetime(3) DEFAULT NULL COMMENT '最近一次查询尝试时间', + `last_success_at` datetime(3) DEFAULT NULL COMMENT '最近一次取得有效结果时间', + `source_updated_at` datetime(3) DEFAULT NULL COMMENT '船公司官网展示的结果更新时间', + `expires_at` datetime(3) DEFAULT NULL COMMENT '当前最近有效结果过期时间;到期后仍保留但标记过期', + `result_port_schedule_id` bigint unsigned DEFAULT NULL COMMENT '最近有效结果对应的船期记录ID', + `last_attempt_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最近查询尝试状态快照', + `manual_reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '需要人工查询或录入的原因', + `last_error_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最近查询失败错误码', + `last_error_message` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最近查询失败错误说明', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '平台内部备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '任务创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改操作人姓名快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '任务最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `consecutive_failures` int unsigned NOT NULL DEFAULT '0' COMMENT '当前正常查询槽位内的连续技术失败次数', + `latest_node_observed_at` datetime(3) DEFAULT NULL COMMENT '最近实际标准节点发生时间', + `latest_standard_node` varchar(32) DEFAULT NULL COMMENT '最近实际标准船节点;预计事实不推进', + `lease_owner` varchar(64) DEFAULT NULL COMMENT '当前调度租约持有者', + `lease_until` datetime(3) DEFAULT NULL COMMENT '当前调度租约过期时间', + `stop_reason` varchar(500) DEFAULT NULL COMMENT '任务停止原因', + `stopped_at` datetime(3) DEFAULT NULL COMMENT '任务停止时间', + `trigger_source` varchar(32) NOT NULL DEFAULT 'MANUAL' COMMENT '任务触发来源:OUTBOUND_CONFIRM或MANUAL', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carrier_schedule_query_no` (`query_no`), + UNIQUE KEY `uk_carrier_schedule_query_scope` (`customer_id`,`ocean_booking_id`,`container_scope_id`,`carrier_code`,`tracking_type`,`tracking_no`), + KEY `idx_carrier_schedule_query_due` (`status`,`next_allowed_at`,`id`), + KEY `idx_carrier_schedule_query_customer` (`customer_id`,`updated_at`,`id`), + KEY `idx_carrier_schedule_query_expiry` (`expires_at`,`id`), + KEY `fk_carrier_schedule_query_booking` (`ocean_booking_id`), + KEY `fk_carrier_schedule_query_container` (`container_booking_id`), + KEY `fk_carrier_schedule_query_result` (`result_port_schedule_id`), + CONSTRAINT `fk_carrier_schedule_query_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `fk_carrier_schedule_query_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `fk_carrier_schedule_query_result` FOREIGN KEY (`result_port_schedule_id`) REFERENCES `fl_port_schedule` (`id`), + CONSTRAINT `chk_carrier_schedule_query_attempt` CHECK ((`attempt_count` between 0 and 3)), + CONSTRAINT `chk_carrier_schedule_query_customer` CHECK ((`customer_id` > 0)), + CONSTRAINT `chk_carrier_schedule_query_tracking` CHECK ((`tracking_type` in (_utf8mb4'BOOKING_NO',_utf8mb4'BILL_OF_LADING',_utf8mb4'CONTAINER_NO'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='六家船公司官网查询任务与三天窗口频控'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_query_attempt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_query_attempt` ( + `id` bigint unsigned NOT NULL COMMENT '船司官网查询尝试ID', + `query_id` bigint unsigned NOT NULL COMMENT '所属船司官网查询任务ID', + `window_attempt_no` int unsigned NOT NULL COMMENT '当前三天窗口内的尝试序号;取值1至3', + `carrier_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '本次尝试的船公司编码快照', + `access_mode` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '本次尝试的官网访问方式快照', + `official_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '本次尝试使用的官网地址快照', + `attempt_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '尝试结果:MANUAL_REQUIRED需人工处理、SUCCESS成功、FAILED失败', + `coverage_gap` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否存在自动化覆盖缺口:0否、1是', + `coverage_gap_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '自动化覆盖缺口编码', + `manual_reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '转人工处理原因', + `error_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '查询失败错误码', + `error_message` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '查询失败错误说明', + `operator_id` bigint unsigned NOT NULL COMMENT '执行本次尝试的操作人ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '执行操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '尝试记录创建时间', + PRIMARY KEY (`id`), + KEY `idx_carrier_schedule_attempt_query` (`query_id`,`created_at`,`id`), + CONSTRAINT `fk_carrier_schedule_attempt_query` FOREIGN KEY (`query_id`) REFERENCES `fl_carrier_schedule_query` (`id`), + CONSTRAINT `chk_carrier_schedule_attempt_no` CHECK ((`window_attempt_no` between 1 and 3)), + CONSTRAINT `chk_carrier_schedule_attempt_status` CHECK ((`attempt_status` in (_utf8mb4'MANUAL_REQUIRED',_utf8mb4'SUCCESS',_utf8mb4'FAILED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船司官网查询尝试不可变审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_query_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_query_history` ( + `id` bigint unsigned NOT NULL COMMENT '船司查询任务历史ID', + `query_id` bigint unsigned NOT NULL COMMENT '所属船司官网查询任务ID', + `action` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '历史动作:CREATE创建、ATTEMPT执行查询、MANUAL_RESULT录入人工结果', + `from_version` int unsigned DEFAULT NULL COMMENT '变更前任务版本;创建时为空', + `to_version` int unsigned NOT NULL COMMENT '变更后任务版本', + `reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作原因或说明', + `before_snapshot` json DEFAULT NULL COMMENT '变更前任务数据快照;创建时为空', + `after_snapshot` json NOT NULL COMMENT '变更后任务数据快照', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '历史记录创建时间', + PRIMARY KEY (`id`), + KEY `idx_carrier_schedule_history_query` (`query_id`,`created_at`,`id`), + CONSTRAINT `fk_carrier_schedule_history_query` FOREIGN KEY (`query_id`) REFERENCES `fl_carrier_schedule_query` (`id`), + CONSTRAINT `chk_carrier_schedule_history_action` CHECK ((`action` in (_utf8mb4'CREATE',_utf8mb4'ATTEMPT',_utf8mb4'MANUAL_RESULT'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船司查询任务不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_query_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_query_operation` ( + `id` bigint unsigned NOT NULL COMMENT '船司查询写操作幂等记录ID', + `query_id` bigint unsigned DEFAULT NULL COMMENT '关联查询任务ID;创建任务落库前允许为空', + `operator_id` bigint unsigned NOT NULL COMMENT '发起写操作的平台操作人ID', + `operation` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '幂等写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端写操作幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要;用于识别同键不同请求', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '处理状态:PROCESSING处理中、SUCCESS成功', + `result_json` json DEFAULT NULL COMMENT '成功结果JSON快照;供幂等重放返回', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等记录创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '写操作成功完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carrier_schedule_operation` (`operator_id`,`idempotency_key`), + KEY `idx_carrier_schedule_operation_query` (`query_id`,`created_at`,`id`), + CONSTRAINT `fk_carrier_schedule_operation_query` FOREIGN KEY (`query_id`) REFERENCES `fl_carrier_schedule_query` (`id`), + CONSTRAINT `chk_carrier_schedule_operation_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船司查询写操作幂等与请求摘要'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_chargeable_weight_confirmation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_chargeable_weight_confirmation` ( + `id` bigint NOT NULL COMMENT '确认记录ID', + `tenant_id` bigint NOT NULL COMMENT '客户隔离ID', + `inbound_id` bigint NOT NULL COMMENT '独立来源入仓单ID', + `operator_id` bigint NOT NULL COMMENT '确认客户成员ID', + `command_key` varchar(128) NOT NULL COMMENT '成员确认幂等键', + `fingerprint` char(64) NOT NULL COMMENT '计费重及测量轮次摘要', + `chargeable_weight_kg` decimal(18,4) NOT NULL COMMENT '客户确认计费重千克', + `confirmed_at` datetime(3) NOT NULL COMMENT '客户确认时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_weight_confirmation_command` (`tenant_id`,`operator_id`,`command_key`), + KEY `idx_weight_confirmation_inbound` (`tenant_id`,`inbound_id`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户计费重独立确认历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_coload_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_coload_command` ( + `id` bigint unsigned NOT NULL COMMENT '幂等命令ID', + `actor_id` bigint unsigned NOT NULL COMMENT '平台或内部操作人ID', + `action_type` varchar(16) NOT NULL, + `idempotency_key` varchar(128) NOT NULL, + `request_hash` char(64) NOT NULL, + `command_status` varchar(16) NOT NULL COMMENT 'PROCESSING、SUCCESS', + `result_group_id` bigint unsigned DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `completed_at` datetime(3) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_coload_command` (`actor_id`,`action_type`,`idempotency_key`), + KEY `fk_coload_command_group` (`result_group_id`), + CONSTRAINT `fk_coload_command_group` FOREIGN KEY (`result_group_id`) REFERENCES `fl_coload_group` (`id`), + CONSTRAINT `chk_coload_command_status` CHECK ((`command_status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='同柜不可拆组幂等写命令'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_coload_group`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_coload_group` ( + `id` bigint unsigned NOT NULL COMMENT '同柜不可拆组ID', + `group_no` varchar(40) NOT NULL COMMENT '稳定组号CLG-{id}', + `group_status` varchar(16) NOT NULL COMMENT 'ACTIVE、LOCKED、CONSUMED、CANCELLED', + `warehouse_id` bigint unsigned NOT NULL COMMENT '国内收货仓ID快照', + `channel_code` varchar(64) NOT NULL COMMENT '物流渠道编码快照', + `locked_plan_id` bigint unsigned DEFAULT NULL COMMENT 'LOCKED/CONSUMED绑定装柜计划ID', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观版本', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `locked_by` bigint unsigned DEFAULT NULL, + `locked_by_name` varchar(64) DEFAULT NULL, + `locked_at` datetime(3) DEFAULT NULL, + `consumed_by` bigint unsigned DEFAULT NULL, + `consumed_by_name` varchar(64) DEFAULT NULL, + `consumed_at` datetime(3) DEFAULT NULL, + `cancelled_by` bigint unsigned DEFAULT NULL, + `cancelled_by_name` varchar(64) DEFAULT NULL, + `cancelled_at` datetime(3) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_coload_group_no` (`group_no`), + KEY `idx_coload_group_status` (`group_status`,`updated_at`,`id`), + KEY `idx_coload_group_plan` (`locked_plan_id`,`group_status`), + CONSTRAINT `fk_coload_group_plan` FOREIGN KEY (`locked_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `chk_coload_group_lock` CHECK ((((`group_status` in (_utf8mb4'ACTIVE',_utf8mb4'CANCELLED')) and (`locked_plan_id` is null)) or ((`group_status` in (_utf8mb4'LOCKED',_utf8mb4'CONSUMED')) and (`locked_plan_id` is not null)))), + CONSTRAINT `chk_coload_group_status` CHECK ((`group_status` in (_utf8mb4'ACTIVE',_utf8mb4'LOCKED',_utf8mb4'CONSUMED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='同柜且不可拆业务组聚合根'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_coload_group_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_coload_group_history` ( + `id` bigint unsigned NOT NULL COMMENT '状态历史ID', + `group_id` bigint unsigned NOT NULL, + `action_type` varchar(16) NOT NULL COMMENT 'CREATE、CANCEL、LOCK、UNLOCK、CONSUME', + `from_status` varchar(16) DEFAULT NULL, + `to_status` varchar(16) NOT NULL, + `plan_id` bigint unsigned DEFAULT NULL, + `operation_id` varchar(128) NOT NULL COMMENT '稳定幂等操作ID', + `remark` varchar(500) DEFAULT NULL, + `operator_id` bigint unsigned NOT NULL, + `operator_name` varchar(64) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_coload_history_operation` (`group_id`,`action_type`,`operation_id`), + KEY `idx_coload_history_group` (`group_id`,`created_at`,`id`), + CONSTRAINT `fk_coload_history_group` FOREIGN KEY (`group_id`) REFERENCES `fl_coload_group` (`id`), + CONSTRAINT `chk_coload_history_action` CHECK ((`action_type` in (_utf8mb4'CREATE',_utf8mb4'CANCEL',_utf8mb4'LOCK',_utf8mb4'UNLOCK',_utf8mb4'CONSUME'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='同柜不可拆组不可变状态历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_coload_group_member`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_coload_group_member` ( + `id` bigint unsigned NOT NULL COMMENT '组成员ID', + `group_id` bigint unsigned NOT NULL COMMENT '同柜不可拆组ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '成员客户ID;允许跨客户成组', + `order_id` bigint unsigned NOT NULL COMMENT '订单ID', + `inbound_id` bigint unsigned NOT NULL COMMENT '创建时权威入库单ID', + `full_package_count` int unsigned NOT NULL COMMENT '必须整组分配的满箱数快照', + `active_flag` tinyint unsigned DEFAULT '1' COMMENT '当前约束唯一标识;取消或消费后置NULL', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `closed_at` datetime(3) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_coload_group_member` (`group_id`,`inbound_id`), + UNIQUE KEY `uk_coload_active_inbound` (`tenant_id`,`inbound_id`,`active_flag`), + KEY `idx_coload_member_order` (`order_id`,`created_at`,`group_id`), + KEY `fk_coload_member_inbound` (`inbound_id`), + CONSTRAINT `fk_coload_member_group` FOREIGN KEY (`group_id`) REFERENCES `fl_coload_group` (`id`), + CONSTRAINT `fk_coload_member_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_coload_member_active` CHECK (((`active_flag` is null) or (`active_flag` = 1))), + CONSTRAINT `chk_coload_member_packages` CHECK ((`full_package_count` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='同柜不可拆组成员与满箱数快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_consumed_event`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_consumed_event` ( + `event_id` bigint unsigned NOT NULL COMMENT '已消费领域事件ID,与生产端Outbox事件ID一致', + `event_type` varchar(64) NOT NULL COMMENT '已消费事件类型', + `consumed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '首次成功消费时间', + PRIMARY KEY (`event_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='头程消息消费幂等表:记录已处理事件并按事件ID去重,防止RocketMQ重复投递造成重复建单;不是消息发布表'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_booking`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_booking` ( + `id` bigint unsigned NOT NULL COMMENT '货柜预订ID(雪花ID)', + `booking_no` varchar(40) NOT NULL COMMENT '平台唯一货柜预订单号', + `container_no` varchar(64) DEFAULT NULL COMMENT '集装箱号;确认前允许修订', + `cabinet_no` varchar(64) NOT NULL COMMENT '平台唯一内部柜号', + `channel_code` varchar(64) DEFAULT NULL COMMENT '订舱渠道编码快照', + `channel_name` varchar(128) DEFAULT NULL COMMENT '订舱渠道名称快照', + `ocean_booking_id` bigint unsigned DEFAULT NULL COMMENT '来源订舱ID', + `ocean_booking_requirement_id` bigint unsigned DEFAULT NULL COMMENT '来源订舱箱型需求ID', + `warehouse_id` bigint unsigned NOT NULL COMMENT '装柜仓库ID;平台公共资源', + `warehouse_name` varchar(128) NOT NULL COMMENT '装柜仓库名称快照', + `bill_of_lading_no` varchar(128) DEFAULT NULL COMMENT '提单号', + `vessel_name` varchar(128) DEFAULT NULL COMMENT '船名快照', + `voyage_no` varchar(64) DEFAULT NULL COMMENT '航次;确认前允许修订', + `container_type` varchar(32) NOT NULL COMMENT '箱型,例如20GP、40GP、40HQ', + `shipping_company_id` bigint unsigned DEFAULT NULL COMMENT '船司ID快照', + `shipping_company_name` varchar(128) DEFAULT NULL COMMENT '船司名称快照', + `departure_port_code` varchar(32) DEFAULT NULL COMMENT '起运港编码快照', + `departure_port_name` varchar(128) DEFAULT NULL COMMENT '起运港名称快照', + `destination_port_code` varchar(32) DEFAULT NULL COMMENT '目的港编码快照', + `destination_port_name` varchar(128) DEFAULT NULL COMMENT '目的港名称快照', + `destination_warehouse_code` varchar(64) DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `capacity_cbm` decimal(18,4) DEFAULT NULL COMMENT '货柜容量m3', + `max_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '货柜最大承重kg', + `terminal_trucking_company` varchar(128) DEFAULT NULL COMMENT '码头拖车公司', + `loading_at` datetime(3) DEFAULT NULL COMMENT '计划或实际装柜时间', + `estimated_sailing_at` datetime(3) DEFAULT NULL COMMENT '预计开船时间', + `actual_sailing_at` datetime(3) DEFAULT NULL COMMENT '实际开船时间', + `estimated_port_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到港时间', + `actual_port_arrival_at` datetime(3) DEFAULT NULL COMMENT '实际到港时间', + `estimated_warehouse_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到仓时间', + `actual_warehouse_arrival_at` datetime(3) DEFAULT NULL COMMENT '实际到仓时间', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_by_name` varchar(64) DEFAULT NULL COMMENT '最后修改人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '货柜资料最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `source_type` varchar(24) NOT NULL DEFAULT 'SIMULATION', + `record_status` varchar(16) NOT NULL DEFAULT 'ACTIVE', + `merged_into_container_booking_id` bigint unsigned DEFAULT NULL, + `customer_id` bigint unsigned DEFAULT NULL, + `customer_name` varchar(128) DEFAULT NULL, + `terminal_trucking_company_id` bigint unsigned DEFAULT NULL, + `unloading_completed_at` datetime(3) DEFAULT NULL, + `unloading_photo_uploaded_at` datetime(3) DEFAULT NULL, + `estimated_empty_reported_at` datetime(3) DEFAULT NULL, + `actual_empty_reported_at` datetime(3) DEFAULT NULL, + `empty_report_source_version` bigint DEFAULT NULL, + `channel_group_code` varchar(64) DEFAULT NULL COMMENT '模拟柜计划渠道分组;关联真实订舱后继续保留', + `pickup_code` varchar(64) DEFAULT NULL COMMENT 'PU数字码;按字符串保存以保留前导零', + `pickup_code_updated_by` bigint unsigned DEFAULT NULL COMMENT 'PU码最后填写人ID', + `pickup_code_updated_by_name` varchar(64) DEFAULT NULL COMMENT 'PU码最后填写人名称快照', + `pickup_code_updated_at` datetime(3) DEFAULT NULL COMMENT 'PU码最后填写时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_container_booking_no` (`booking_no`), + UNIQUE KEY `uk_container_booking_cabinet` (`cabinet_no`), + UNIQUE KEY `uk_container_booking_ocean_container` (`ocean_booking_id`,`container_no`), + KEY `idx_container_booking_container` (`container_no`), + KEY `idx_container_booking_warehouse` (`warehouse_id`,`updated_at`,`id`), + KEY `idx_container_booking_voyage` (`voyage_no`,`updated_at`), + KEY `idx_container_booking_container_no` (`container_no`,`updated_at`,`id`), + KEY `idx_container_booking_merge` (`record_status`,`merged_into_container_booking_id`), + KEY `idx_container_booking_transit_summary` (`actual_sailing_at`,`actual_warehouse_arrival_at`,`ocean_booking_id`,`container_type`), + CONSTRAINT `chk_container_booking_capacity` CHECK (((`capacity_cbm` is null) or (`capacity_cbm` > 0))), + CONSTRAINT `chk_container_booking_weight` CHECK (((`max_weight_kg` is null) or (`max_weight_kg` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台货柜预订资料;预装状态唯一来源为装柜计划'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_document` ( + `id` bigint unsigned NOT NULL COMMENT '货柜文件关联ID(雪花ID)', + `container_booking_id` bigint unsigned NOT NULL COMMENT '货柜预订ID', + `document_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文件类型:CUSTOMS_CLEARANCE清关文件、DELIVERY_ORDER提货单、PICKUP_ORDER取货单', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件ID,不建立跨库外键', + `file_name` varchar(255) NOT NULL COMMENT '文件名称快照', + `file_hash` varchar(64) DEFAULT NULL, + `file_url` varchar(1000) DEFAULT NULL COMMENT '文件访问地址快照', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传操作人ID', + `uploaded_by_name` varchar(64) DEFAULT NULL COMMENT '上传操作人名称快照', + `completed_by` bigint unsigned DEFAULT NULL, + `completed_by_name` varchar(64) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '货柜文件关联最后更新时间', + `completed_at` datetime(3) DEFAULT NULL, + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_container_document_type` (`container_booking_id`,`document_type`), + KEY `idx_container_document_file` (`file_id`), + CONSTRAINT `fk_container_document_booking` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_container_document_type` CHECK ((`document_type` in (_utf8mb4'DESTINATION_CLEARANCE',_utf8mb4'CUSTOMS_DECLARATION',_utf8mb4'DELIVERY_ORDER',_utf8mb4'PICKUP_ORDER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台货柜清关、DO与PU文件关联'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_event_inbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_event_inbox` ( + `event_id` varchar(64) NOT NULL COMMENT '跨区事件全局唯一ID', + `event_type` varchar(64) NOT NULL COMMENT '事件类型', + `event_version` int unsigned NOT NULL COMMENT '事件契约版本', + `aggregate_id` varchar(64) NOT NULL COMMENT '货柜聚合ID', + `aggregate_version` bigint unsigned NOT NULL COMMENT '货柜聚合版本', + `payload_hash` varchar(80) NOT NULL COMMENT '规范化负载SHA-256摘要', + `payload_json` json NOT NULL COMMENT '原始事件负载', + `status` varchar(16) NOT NULL COMMENT 'RECEIVED或PROCESSED', + `received_at` datetime(3) NOT NULL COMMENT '接收时间(UTC)', + `processed_at` datetime(3) DEFAULT NULL COMMENT '处理完成时间(UTC)', + PRIMARY KEY (`event_id`), + KEY `idx_container_event_aggregate` (`aggregate_id`,`aggregate_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='海外货柜事件消费Inbox'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_exception_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_exception_history` ( + `id` bigint unsigned NOT NULL COMMENT '异常历史ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '稳定货柜预订ID', + `action` varchar(16) NOT NULL COMMENT 'MARK标记异常/CANCEL取消异常', + `reason` varchar(500) NOT NULL COMMENT '标记或取消原因', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `operation_id` varchar(128) NOT NULL COMMENT '同一操作人幂等键', + `request_hash` char(64) NOT NULL COMMENT '规范化请求摘要', + `occurred_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '发生时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_container_exception_operation` (`container_booking_id`,`operator_id`,`operation_id`), + KEY `idx_container_exception_history` (`container_booking_id`,`occurred_at`,`id`), + CONSTRAINT `fk_container_exception_booking` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_container_exception_action` CHECK ((`action` in (_utf8mb4'MARK',_utf8mb4'CANCEL'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='货柜异常标记及取消原因历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_fee_detail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_fee_detail` ( + `id` bigint unsigned NOT NULL COMMENT '柜次费用来源ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '柜次ID,对应fl_loading_plan.id', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '订舱柜ID快照', + `container_no` varchar(64) DEFAULT NULL COMMENT '柜号快照', + `fee_item_id` bigint unsigned NOT NULL COMMENT '平台公共费用项目ID', + `fee_item_code_snapshot` varchar(50) NOT NULL COMMENT '费用项目稳定编码快照', + `fee_item_name_snapshot` varchar(128) NOT NULL COMMENT '费用项目名称快照', + `direction` varchar(16) NOT NULL COMMENT '费用方向:RECEIVABLE应收、PAYABLE应付', + `business_date` date NOT NULL COMMENT '费用业务日期', + `amount` decimal(18,2) NOT NULL COMMENT 'CNY费用金额', + `currency` char(3) NOT NULL DEFAULT 'CNY' COMMENT '币种,首期固定CNY', + `settlement_included` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否参与财务结算来源池', + `review_status` varchar(16) NOT NULL DEFAULT 'PENDING' COMMENT '审核状态:PENDING待审核、APPROVED通过、REJECTED驳回', + `source_status` varchar(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '来源状态:ACTIVE有效、VOIDED作废', + `source_version` int unsigned NOT NULL DEFAULT '1' COMMENT '费用来源版本;调整递增,作废携带当前版本', + `remark` varchar(500) DEFAULT NULL COMMENT '人工备注', + `reviewer_id` bigint unsigned DEFAULT NULL COMMENT '审核人ID', + `reviewer_name` varchar(64) DEFAULT NULL COMMENT '审核人名称快照', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '审核时间', + `review_reason` varchar(500) DEFAULT NULL COMMENT '审核驳回原因', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后更新人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + `paid_at` datetime(3) DEFAULT NULL COMMENT 'DIRECT_PAID业务已付时间', + `payment_method` varchar(32) DEFAULT NULL COMMENT 'DIRECT_PAID付款方式', + `payment_reference_no` varchar(128) DEFAULT NULL COMMENT 'DIRECT_PAID付款流水号', + `payment_voucher_file_ids` json DEFAULT NULL COMMENT 'DIRECT_PAID付款凭证File ID数组', + `settlement_mode` varchar(16) DEFAULT NULL COMMENT '仅PAYABLE:ON_ACCOUNT账期应付、DIRECT_PAID业务已付;RECEIVABLE为空', + `supplier_category` varchar(16) DEFAULT NULL COMMENT '费用项目供应商类别约束快照;为空表示任意启用供应商', + `supplier_id` bigint unsigned DEFAULT NULL COMMENT '应付Warehouse供应商ID快照;应收为空', + `supplier_name` varchar(200) DEFAULT NULL COMMENT '应付Warehouse供应商名称快照;应收为空', + `allocation_group_id` bigint unsigned DEFAULT NULL COMMENT '柜级公共费用分摊组ID;单入仓直接费用为空', + `allocation_order_id` bigint unsigned DEFAULT NULL COMMENT '本分摊行业务订单ID', + `allocation_order_no` varchar(64) DEFAULT NULL COMMENT '本分摊行业务订单号', + `allocation_inbound_id` bigint unsigned DEFAULT NULL COMMENT '本分摊行对应入仓单ID', + `allocation_inbound_code` varchar(64) DEFAULT NULL COMMENT '本分摊行对应入仓码', + `allocation_group_amount` decimal(18,2) DEFAULT NULL COMMENT '柜级原始费用总额快照', + PRIMARY KEY (`id`), + KEY `idx_container_fee_customer_plan` (`tenant_id`,`loading_plan_id`,`source_status`), + KEY `idx_container_fee_settlement` (`tenant_id`,`review_status`,`settlement_included`,`source_status`), + KEY `idx_container_fee_review` (`tenant_id`,`review_status`,`source_status`), + CONSTRAINT `chk_container_fee_amount` CHECK ((`amount` >= 0)), + CONSTRAINT `chk_container_fee_currency` CHECK ((`currency` = _utf8mb4'CNY')), + CONSTRAINT `chk_container_fee_direction` CHECK ((`direction` in (_utf8mb4'RECEIVABLE',_utf8mb4'PAYABLE'))), + CONSTRAINT `chk_container_fee_review` CHECK ((`review_status` in (_utf8mb4'PENDING',_utf8mb4'APPROVED',_utf8mb4'REJECTED'))), + CONSTRAINT `chk_container_fee_source` CHECK ((`source_status` in (_utf8mb4'ACTIVE',_utf8mb4'VOIDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次级人工应收应付费用来源;审核通过且参与结算后同步Finance'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_fee_source_snapshot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_fee_source_snapshot` ( + `id` bigint unsigned NOT NULL COMMENT '柜次费用快照ID', + `source_fee_id` bigint unsigned NOT NULL COMMENT '柜次费用来源ID', + `source_version` int unsigned NOT NULL COMMENT '费用来源版本', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '柜次ID', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '订舱柜ID快照', + `container_no` varchar(64) DEFAULT NULL COMMENT '柜号快照', + `fee_item_id` bigint unsigned NOT NULL COMMENT '费用项目ID快照', + `fee_item_code` varchar(50) NOT NULL COMMENT '费用项目编码快照', + `fee_item_name` varchar(128) NOT NULL COMMENT '费用项目名称快照', + `direction` varchar(16) NOT NULL COMMENT '费用方向', + `supplier_id` bigint unsigned DEFAULT NULL COMMENT 'Warehouse供应商ID快照', + `supplier_name` varchar(200) DEFAULT NULL COMMENT 'Warehouse供应商名称快照', + `supplier_category` varchar(16) DEFAULT NULL COMMENT '费用项目供应商类别约束快照;为空表示任意启用供应商', + `settlement_mode` varchar(16) DEFAULT NULL COMMENT '仅PAYABLE:ON_ACCOUNT账期应付、DIRECT_PAID业务已付;RECEIVABLE为空', + `paid_at` datetime(3) DEFAULT NULL COMMENT 'DIRECT_PAID业务已付时间', + `payment_method` varchar(32) DEFAULT NULL COMMENT 'DIRECT_PAID付款方式', + `payment_reference_no` varchar(128) DEFAULT NULL COMMENT 'DIRECT_PAID付款流水号', + `payment_voucher_file_ids` json DEFAULT NULL COMMENT 'DIRECT_PAID付款凭证File ID数组', + `business_date` date NOT NULL COMMENT '费用业务日期', + `amount` decimal(18,2) NOT NULL COMMENT 'CNY费用金额', + `currency` char(3) NOT NULL DEFAULT 'CNY' COMMENT '币种,首期固定CNY', + `review_status` varchar(16) NOT NULL COMMENT '审核状态快照', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '审核时间快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '快照创建时间', + `allocation_group_id` bigint unsigned DEFAULT NULL COMMENT '柜级公共费用分摊组ID', + `allocation_order_id` bigint unsigned DEFAULT NULL COMMENT '分摊业务订单ID快照', + `allocation_order_no` varchar(64) DEFAULT NULL COMMENT '分摊业务订单号快照', + `allocation_inbound_id` bigint unsigned DEFAULT NULL COMMENT '分摊入仓单ID快照', + `allocation_inbound_code` varchar(64) DEFAULT NULL COMMENT '分摊入仓码快照', + `allocation_group_amount` decimal(18,2) DEFAULT NULL COMMENT '柜级原始费用总额快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_container_fee_source_version` (`loading_plan_id`,`source_fee_id`,`source_version`), + KEY `idx_container_fee_snapshot_tenant` (`tenant_id`,`loading_plan_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次费用不可变版本快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_transport_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_transport_history` ( + `id` bigint unsigned NOT NULL COMMENT '运输字段变更历史ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '稳定柜次ID', + `before_container_no` varchar(64) DEFAULT NULL COMMENT '变更前真实集装箱号', + `after_container_no` varchar(64) DEFAULT NULL COMMENT '变更后真实集装箱号', + `before_voyage_no` varchar(64) DEFAULT NULL COMMENT '变更前航次号', + `after_voyage_no` varchar(64) DEFAULT NULL COMMENT '变更后航次号', + `reason` varchar(500) DEFAULT NULL COMMENT '运输字段变更原因', + `operator_id` bigint unsigned NOT NULL COMMENT '变更操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '变更操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '变更记录创建时间', + `operation_id` varchar(64) NOT NULL COMMENT '运输字段操作幂等ID', + `request_hash` char(64) NOT NULL COMMENT '运输字段请求哈希', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_container_transport_history_operation` (`container_booking_id`,`operator_id`,`operation_id`), + KEY `idx_container_transport_history` (`container_booking_id`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次真实运输字段不可变变更审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customer_charge_rule`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customer_charge_rule` ( + `id` bigint unsigned NOT NULL COMMENT '客户计费规则ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `rule_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户内唯一计费规则编码', + `rule_version` int unsigned NOT NULL COMMENT '规则版本号', + `customer_id` bigint unsigned NOT NULL COMMENT '客户逻辑ID', + `customer_name` varchar(128) NOT NULL COMMENT '客户名称快照', + `business_type` varchar(32) NOT NULL COMMENT '业务类型', + `charge_mode` varchar(16) NOT NULL COMMENT '计费口径:KG或CBM', + `tax_mode` varchar(24) DEFAULT NULL COMMENT '包税或不包税类型', + `conversion_factor` decimal(18,6) NOT NULL COMMENT '重量体积换算系数', + `length_factor` decimal(18,6) NOT NULL DEFAULT '1.000000' COMMENT 'length factor', + `width_factor` decimal(18,6) NOT NULL DEFAULT '1.000000' COMMENT 'width factor', + `height_factor` decimal(18,6) NOT NULL DEFAULT '1.000000' COMMENT 'height factor', + `rounding_scale` tinyint unsigned NOT NULL DEFAULT '3' COMMENT '结果保留小数位数', + `rounding_mode` varchar(24) NOT NULL DEFAULT 'CEILING' COMMENT '舍入方式', + `currency` char(3) NOT NULL COMMENT '默认币种', + `effective_from` datetime(3) NOT NULL COMMENT '生效开始时间', + `effective_to` datetime(3) DEFAULT NULL COMMENT '生效结束时间', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '规则状态:ACTIVE启用、DISABLED停用', + `default_rule` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'default customer rule', + `remark` varchar(500) DEFAULT NULL COMMENT '规则备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `initialization_key` varchar(128) DEFAULT NULL COMMENT '客户创建执行器幂等键及补偿归属', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_charge_rule_version` (`tenant_id`,`rule_code`,`rule_version`), + KEY `idx_charge_rule_match` (`tenant_id`,`customer_id`,`business_type`,`status`,`effective_from`,`effective_to`), + KEY `idx_charge_rule_initialization` (`tenant_id`,`initialization_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户头程计费规则版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customer_dimension_config`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customer_dimension_config` ( + `id` bigint unsigned NOT NULL COMMENT '配置ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `box_type` varchar(24) NOT NULL COMMENT '固定箱规类型:SMALL/MEDIUM/LARGE/EXTRA_LARGE', + `inner_length_cm` decimal(9,3) NOT NULL COMMENT '箱规内长(厘米)', + `inner_width_cm` decimal(9,3) NOT NULL COMMENT '箱规内宽(厘米)', + `inner_height_cm` decimal(9,3) NOT NULL COMMENT '箱规内高(厘米)', + `edge_addition_cm` decimal(6,3) NOT NULL DEFAULT '2.000' COMMENT '每个尺寸方向的单侧加宽厘米数', + `default_calculation_mode` varchar(16) NOT NULL DEFAULT 'ADD' COMMENT '订单外箱规默认计算方式:ADD或MULTIPLY', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `initialization_key` varchar(128) NOT NULL COMMENT '创建流程幂等键及补偿归属', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customer_dimension_config_tenant_box` (`tenant_id`,`box_type`), + KEY `idx_customer_dimension_config_initialization` (`tenant_id`,`initialization_key`), + CONSTRAINT `chk_customer_dimension_box_type` CHECK ((`box_type` in (_utf8mb4'SMALL',_utf8mb4'MEDIUM',_utf8mb4'LARGE',_utf8mb4'EXTRA_LARGE'))), + CONSTRAINT `chk_customer_dimension_edge_addition` CHECK (((`edge_addition_cm` >= 0.001) and (`edge_addition_cm` <= 100.000))), + CONSTRAINT `chk_customer_dimension_inner_size` CHECK (((`inner_length_cm` >= 0.001) and (`inner_width_cm` >= 0.001) and (`inner_height_cm` >= 0.001))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户固定四箱规尺寸配置'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_broker_submission`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_broker_submission` ( + `id` bigint unsigned NOT NULL COMMENT '首次发送报关行批次ID', + `customs_container_id` bigint unsigned NOT NULL COMMENT '所属整柜报关聚合ID', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID快照', + `batch_no` varchar(64) NOT NULL COMMENT '首次发送报关行批次号', + `status` varchar(16) NOT NULL COMMENT '发送状态:SENT已发送', + `source_version` int unsigned NOT NULL COMMENT '发送时整柜报关聚合版本', + `source_snapshot_json` json NOT NULL COMMENT '发送时冻结资料版本与覆盖范围快照', + `sent_by` bigint unsigned NOT NULL COMMENT '首次发送操作人ID', + `sent_by_name` varchar(64) DEFAULT NULL COMMENT '首次发送操作人名称快照', + `sent_at` datetime(3) NOT NULL COMMENT '首次发送时间', + `version` int unsigned NOT NULL DEFAULT '1' COMMENT '乐观锁版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '批次创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '批次更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_broker_submission_container` (`customs_container_id`), + UNIQUE KEY `uk_customs_broker_submission_batch` (`batch_no`), + KEY `idx_customs_broker_submission_plan` (`loading_plan_id`,`sent_at`), + CONSTRAINT `fk_customs_broker_submission_container` FOREIGN KEY (`customs_container_id`) REFERENCES `fl_customs_container` (`id`), + CONSTRAINT `chk_customs_broker_submission_status` CHECK ((`status` = _utf8mb4'SENT')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='冻结退税报关资料首次发送报关行批次事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_case`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_case` ( + `id` bigint unsigned NOT NULL COMMENT '报关协同单逻辑ID', + `customs_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '全局唯一报关协同单号', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `order_id` bigint unsigned NOT NULL COMMENT 'Order服务订单逻辑ID;跨库不建立外键', + `inbound_id` bigint unsigned NOT NULL COMMENT 'Firstleg入库单逻辑ID', + `container_booking_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '关联柜次逻辑ID;0表示创建时尚未关联柜次', + `checklist_version_id` bigint unsigned NOT NULL COMMENT '本单冻结使用的报关资料清单版本ID', + `checklist_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建协同单时的清单编码快照;源清单变化不回写', + `checklist_version_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建协同单时的清单版本号快照;源清单变化不回写', + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'DOCUMENTS_PENDING' COMMENT '协同状态:DOCUMENTS_PENDING待补资料、REVIEWING审核中、SUPPLEMENT_REQUIRED需补件、READY_TO_SUBMIT待提交代理、RECEIPT_PENDING待回执、RECEIPT_AVAILABLE已有回执、CLEARANCE_COMPLETED已放行、CANCELLED已取消', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '报关协同单内部业务备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建协同单的平台操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建协同单时的平台操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '协同单创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改协同单的平台操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改时的平台操作人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '协同单最后修改时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号;每次状态变更递增', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_no` (`customs_no`), + UNIQUE KEY `uk_customs_case_scope` (`tenant_id`,`order_id`,`inbound_id`,`container_booking_id`), + KEY `idx_customs_case_status` (`status`,`updated_at`), + KEY `idx_customs_case_container` (`container_booking_id`), + KEY `fk_customs_case_checklist` (`checklist_version_id`), + CONSTRAINT `fk_customs_case_checklist` FOREIGN KEY (`checklist_version_id`) REFERENCES `fl_customs_checklist_version` (`id`), + CONSTRAINT `chk_customs_case_status` CHECK ((`status` in (_utf8mb4'DOCUMENTS_PENDING',_utf8mb4'REVIEWING',_utf8mb4'SUPPLEMENT_REQUIRED',_utf8mb4'READY_TO_SUBMIT',_utf8mb4'RECEIPT_PENDING',_utf8mb4'RECEIPT_AVAILABLE',_utf8mb4'CLEARANCE_COMPLETED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='三期订单报关协同聚合'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_checklist_version`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_checklist_version` ( + `id` bigint unsigned NOT NULL COMMENT '报关资料清单版本逻辑ID', + `checklist_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '报关资料清单编码;同一清单的多个版本共用', + `version_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '清单业务版本号', + `country_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '清单适用的目的国家或地区编码', + `channel_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '清单适用的运输渠道编码', + `cargo_type` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '清单适用的货物类型编码', + `items_json` json NOT NULL COMMENT '不可变清单项目数组;元素包含code项目编码、name项目名称和required是否必填', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '清单版本状态:ACTIVE启用、RETIRED停用', + `created_by` bigint unsigned NOT NULL COMMENT '创建清单版本的平台操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建清单版本时的平台操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '清单版本创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_checklist_version` (`checklist_code`,`version_no`), + KEY `idx_customs_checklist_match` (`country_code`,`channel_code`,`cargo_type`,`status`), + CONSTRAINT `chk_customs_checklist_status` CHECK ((`status` in (_utf8mb4'ACTIVE',_utf8mb4'RETIRED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='三期报关资料清单不可变版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_clearance_result`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_clearance_result` ( + `id` bigint unsigned NOT NULL COMMENT '海关结果事实ID', + `declaration_batch_id` bigint unsigned NOT NULL COMMENT '所属正式申报批次ID', + `customs_container_id` bigint unsigned NOT NULL COMMENT '所属整柜报关聚合ID', + `result_type` varchar(32) NOT NULL COMMENT '结果类型:INSPECTION/SUPPLEMENT_REQUIRED/RELEASED/DETAINED/OTHER', + `result_status` varchar(16) NOT NULL DEFAULT 'OPEN' COMMENT '结果状态:OPEN/RESOLVED/CANCELLED', + `customs_entry_no` varchar(64) DEFAULT NULL COMMENT '报关单号快照', + `occurred_at` datetime(3) NOT NULL COMMENT '海关事实发生时间', + `resolution` varchar(1000) DEFAULT NULL COMMENT '处理结果或异常说明', + `evidence_file_id` bigint unsigned DEFAULT NULL COMMENT '结果凭证File文件ID', + `recorded_by` bigint unsigned NOT NULL COMMENT '平台录入人', + `recorded_by_name` varchar(64) DEFAULT NULL COMMENT '平台录入人名称快照', + `recorded_at` datetime(3) NOT NULL COMMENT '平台录入时间', + `previous_result_id` bigint unsigned DEFAULT NULL COMMENT '前序结果事实ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '结果创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '结果更新时间', + PRIMARY KEY (`id`), + KEY `idx_customs_clearance_result_batch` (`declaration_batch_id`,`occurred_at`,`id`), + KEY `idx_customs_clearance_result_container` (`customs_container_id`,`result_type`,`result_status`), + CONSTRAINT `fk_customs_clearance_result_batch` FOREIGN KEY (`declaration_batch_id`) REFERENCES `fl_customs_declaration_batch` (`id`), + CONSTRAINT `chk_customs_clearance_result_status` CHECK ((`result_status` in (_utf8mb4'OPEN',_utf8mb4'RESOLVED',_utf8mb4'CANCELLED'))), + CONSTRAINT `chk_customs_clearance_result_type` CHECK ((`result_type` in (_utf8mb4'INSPECTION',_utf8mb4'SUPPLEMENT_REQUIRED',_utf8mb4'RELEASED',_utf8mb4'DETAINED',_utf8mb4'OTHER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='正式申报后的海关结果不可变事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_command` ( + `id` bigint unsigned NOT NULL, + `actor_id` bigint unsigned NOT NULL, + `action` varchar(80) NOT NULL, + `idempotency_key` varchar(128) NOT NULL, + `request_hash` char(64) NOT NULL, + `status` varchar(16) NOT NULL, + `result_id` bigint unsigned DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `completed_at` datetime(3) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_command` (`actor_id`,`action`,`idempotency_key`), + CONSTRAINT `chk_customs_command_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='整柜报关写命令幂等事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_completion_action_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_completion_action_history` ( + `id` bigint unsigned NOT NULL COMMENT '客户回执动作历史ID', + `completion_document_id` bigint unsigned NOT NULL COMMENT '报关行回执当前版本逻辑根ID', + `receipt_version` int unsigned NOT NULL COMMENT '动作对应的回执文件版本', + `action` varchar(16) NOT NULL COMMENT '客户动作:CONFIRM确认、REJECT打回', + `reason` varchar(500) DEFAULT NULL COMMENT '客户打回原因;确认动作为空', + `operator_id` bigint unsigned NOT NULL COMMENT '客户操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '客户操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '客户动作时间', + PRIMARY KEY (`id`), + KEY `idx_customs_completion_action_history` (`completion_document_id`,`receipt_version`,`created_at`,`id`), + CONSTRAINT `fk_customs_completion_action_history_document` FOREIGN KEY (`completion_document_id`) REFERENCES `fl_customs_completion_document` (`id`), + CONSTRAINT `chk_customs_completion_action_history_action` CHECK ((`action` in (_utf8mb4'CONFIRM',_utf8mb4'REJECT'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户报关行回执确认与打回不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_completion_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_completion_document` ( + `id` bigint unsigned NOT NULL, + `source_document_id` bigint unsigned NOT NULL COMMENT '一份冻结客户资料严格对应一份完成文件逻辑根', + `file_id` bigint unsigned NOT NULL, + `file_name` varchar(255) NOT NULL, + `file_hash` char(64) NOT NULL, + `content_type` varchar(128) DEFAULT NULL, + `size_bytes` bigint unsigned NOT NULL, + `uploaded_by` bigint unsigned NOT NULL, + `uploaded_by_name` varchar(64) DEFAULT NULL, + `uploaded_at` datetime(3) NOT NULL, + `version` int unsigned NOT NULL DEFAULT '1', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `customer_confirm_status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT '客户回执确认状态:PENDING/CONFIRMED/REJECTED', + `customer_confirmed_by` bigint unsigned DEFAULT NULL COMMENT '客户确认人ID', + `customer_confirmed_by_name` varchar(64) DEFAULT NULL COMMENT '客户确认人名称快照', + `customer_confirmed_at` datetime(3) DEFAULT NULL COMMENT '客户确认时间', + `customer_reject_reason` varchar(500) DEFAULT NULL COMMENT '客户打回原因', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_completion_source` (`source_document_id`), + CONSTRAINT `fk_customs_completion_source` FOREIGN KEY (`source_document_id`) REFERENCES `fl_customs_customer_document` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关完成文件当前版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_completion_document_version`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_completion_document_version` ( + `id` bigint unsigned NOT NULL, + `completion_document_id` bigint unsigned NOT NULL, + `document_version` int unsigned NOT NULL, + `file_id` bigint unsigned NOT NULL, + `file_name` varchar(255) NOT NULL, + `file_hash` char(64) NOT NULL, + `content_type` varchar(128) DEFAULT NULL, + `size_bytes` bigint unsigned NOT NULL, + `operator_id` bigint unsigned NOT NULL, + `operator_name` varchar(64) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_completion_version` (`completion_document_id`,`document_version`), + CONSTRAINT `fk_customs_completion_version` FOREIGN KEY (`completion_document_id`) REFERENCES `fl_customs_completion_document` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关完成文件不可变覆盖版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_container`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_container` ( + `id` bigint unsigned NOT NULL, + `loading_plan_id` bigint unsigned NOT NULL COMMENT '已完成装柜计划ID;报关柜级聚合唯一键', + `container_booking_id` bigint unsigned NOT NULL COMMENT '物理货柜ID', + `status` varchar(40) NOT NULL COMMENT 'WAITING_CUSTOMER_DOCUMENTS、READY_TO_START、DECLARING、COMPLETED', + `started_by` bigint unsigned DEFAULT NULL, + `started_by_name` varchar(64) DEFAULT NULL, + `started_at` datetime(3) DEFAULT NULL, + `completed_by` bigint unsigned DEFAULT NULL, + `completed_by_name` varchar(64) DEFAULT NULL, + `completed_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `version` int unsigned NOT NULL DEFAULT '0', + `broker_submitted_by` bigint unsigned DEFAULT NULL COMMENT '发送报关行执行的操作人ID', + `broker_submitted_by_name` varchar(64) DEFAULT NULL COMMENT '发送报关行执行的操作人名称', + `broker_submitted_at` datetime(3) DEFAULT NULL COMMENT '发送报关行执行时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_container_plan` (`loading_plan_id`), + UNIQUE KEY `uk_customs_container_booking` (`container_booking_id`), + KEY `idx_customs_container_status` (`status`,`updated_at`), + CONSTRAINT `chk_customs_container_status` CHECK ((`status` in (_utf8mb4'WAITING_CUSTOMER_DOCUMENTS',_utf8mb4'READY_TO_START',_utf8mb4'DECLARING',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='装柜完成后的整柜出口报关聚合'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_container_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_container_history` ( + `id` bigint unsigned NOT NULL, + `customs_container_id` bigint unsigned NOT NULL, + `action` varchar(40) NOT NULL, + `from_status` varchar(40) DEFAULT NULL, + `to_status` varchar(40) DEFAULT NULL, + `remark` varchar(500) DEFAULT NULL, + `operator_id` bigint unsigned NOT NULL, + `operator_name` varchar(64) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_customs_container_history` (`customs_container_id`,`created_at`,`id`), + CONSTRAINT `fk_customs_container_history` FOREIGN KEY (`customs_container_id`) REFERENCES `fl_customs_container` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='整柜报关状态与系统触发历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_customer_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_customer_document` ( + `id` bigint unsigned NOT NULL, + `customs_container_id` bigint unsigned NOT NULL, + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键;只允许关联同客户退税票', + `file_id` bigint unsigned NOT NULL, + `file_name` varchar(255) NOT NULL, + `file_hash` char(64) NOT NULL, + `content_type` varchar(128) DEFAULT NULL, + `size_bytes` bigint unsigned NOT NULL, + `status` varchar(16) NOT NULL DEFAULT 'ACTIVE', + `uploaded_by` bigint unsigned NOT NULL, + `uploaded_at` datetime(3) NOT NULL, + `frozen_version` int unsigned DEFAULT NULL, + `frozen_at` datetime(3) DEFAULT NULL, + `deleted_by` bigint unsigned DEFAULT NULL, + `deleted_at` datetime(3) DEFAULT NULL, + `version` int unsigned NOT NULL DEFAULT '1', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_customs_customer_document_container` (`customs_container_id`,`status`,`tenant_id`), + CONSTRAINT `fk_customs_customer_document_container` FOREIGN KEY (`customs_container_id`) REFERENCES `fl_customs_container` (`id`), + CONSTRAINT `chk_customs_customer_document_freeze` CHECK ((((`frozen_at` is null) and (`frozen_version` is null)) or ((`frozen_at` is not null) and (`frozen_version` is not null)))), + CONSTRAINT `chk_customs_customer_document_status` CHECK ((`status` in (_utf8mb4'ACTIVE',_utf8mb4'DELETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户整份退税报送资料逻辑根'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_customer_document_inbound`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_customer_document_inbound` ( + `document_id` bigint unsigned NOT NULL, + `inbound_id` bigint unsigned NOT NULL, + `tenant_id` bigint unsigned NOT NULL, + `order_id` bigint unsigned NOT NULL, + `inbound_code` varchar(40) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`document_id`,`inbound_id`), + KEY `idx_customs_document_inbound` (`inbound_id`,`tenant_id`), + CONSTRAINT `fk_customs_document_inbound_document` FOREIGN KEY (`document_id`) REFERENCES `fl_customs_customer_document` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户报送资料与当前柜退税入仓码多对多关系'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_customer_document_version`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_customer_document_version` ( + `id` bigint unsigned NOT NULL, + `document_id` bigint unsigned NOT NULL, + `document_version` int unsigned NOT NULL, + `file_id` bigint unsigned NOT NULL, + `file_name` varchar(255) NOT NULL, + `file_hash` char(64) NOT NULL, + `content_type` varchar(128) DEFAULT NULL, + `size_bytes` bigint unsigned NOT NULL, + `scope_snapshot_json` json NOT NULL, + `action` varchar(24) NOT NULL COMMENT 'UPLOAD、REPLACE、SCOPE_CHANGE、DELETE', + `operator_id` bigint unsigned NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_customer_document_version` (`document_id`,`document_version`), + CONSTRAINT `fk_customs_customer_document_version` FOREIGN KEY (`document_id`) REFERENCES `fl_customs_customer_document` (`id`), + CONSTRAINT `chk_customs_customer_document_version_action` CHECK ((`action` in (_utf8mb4'UPLOAD',_utf8mb4'REPLACE',_utf8mb4'SCOPE_CHANGE',_utf8mb4'DELETE'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户报送资料文件与覆盖范围不可变版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_declaration_batch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_declaration_batch` ( + `id` bigint unsigned NOT NULL COMMENT '正式申报批次ID', + `customs_container_id` bigint unsigned NOT NULL COMMENT '所属整柜报关聚合ID', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID快照', + `batch_no` varchar(64) DEFAULT NULL COMMENT '平台正式申报批次号', + `status` varchar(32) NOT NULL COMMENT '批次状态:READY/SUBMITTED/ACKNOWLEDGED/RESULT_PENDING/CLOSED/CANCELLED', + `source_version` int unsigned NOT NULL COMMENT '创建时整柜报关聚合版本', + `source_snapshot_json` json NOT NULL COMMENT '提交时资料、回执和确认版本快照', + `customs_entry_no` varchar(64) DEFAULT NULL COMMENT '报关单号', + `submitted_by` bigint unsigned DEFAULT NULL COMMENT '正式申报提交人', + `submitted_by_name` varchar(64) DEFAULT NULL COMMENT '正式申报提交人名称快照', + `submitted_at` datetime(3) DEFAULT NULL COMMENT '正式申报提交时间', + `acknowledged_by` bigint unsigned DEFAULT NULL COMMENT '报关行确认受理人', + `acknowledged_by_name` varchar(64) DEFAULT NULL COMMENT '报关行确认受理人名称快照', + `acknowledged_at` datetime(3) DEFAULT NULL COMMENT '报关行确认受理时间', + `remark` varchar(500) DEFAULT NULL COMMENT '批次说明', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '批次创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '批次更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_declaration_batch_container` (`customs_container_id`,`id`), + KEY `idx_customs_declaration_batch_plan` (`loading_plan_id`,`status`,`created_at`), + CONSTRAINT `fk_customs_declaration_batch_container` FOREIGN KEY (`customs_container_id`) REFERENCES `fl_customs_container` (`id`), + CONSTRAINT `chk_customs_declaration_batch_status` CHECK ((`status` in (_utf8mb4'READY',_utf8mb4'SUBMITTED',_utf8mb4'ACKNOWLEDGED',_utf8mb4'RESULT_PENDING',_utf8mb4'CLOSED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='整柜正式申报批次事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_document` ( + `id` bigint unsigned NOT NULL COMMENT '报关资料文件版本逻辑ID', + `customs_case_id` bigint unsigned NOT NULL COMMENT '所属报关协同单ID', + `checklist_item_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '对应冻结清单中的资料项目编码', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件逻辑ID;跨库不建立外键', + `document_version` int unsigned NOT NULL COMMENT '同一协同单和清单项目下的文件版本序号', + `replaces_document_id` bigint unsigned DEFAULT NULL COMMENT '被本版本替换的上一资料版本ID;首个版本为空', + `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '上传或引用时的文件名称快照', + `file_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文件内容SHA-256摘要;用于版本审计和幂等校验', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'UPLOADED' COMMENT '资料状态:UPLOADED待审核、APPROVED审核通过、RETURNED已退回、SUPERSEDED已被替换、FROZEN已随代理提交批次冻结', + `visibility` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'CUSTOMER' COMMENT '资料可见范围:PLATFORM仅平台可见、CUSTOMER客户可见', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传或引用资料的操作人ID', + `uploaded_by_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '上传主体类型:PLATFORM平台操作人、MERCHANT客户操作人', + `uploaded_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '资料上传或引用时间', + `reviewed_by` bigint unsigned DEFAULT NULL COMMENT '审核资料的平台操作人ID;未审核时为空', + `reviewed_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '审核时的平台操作人名称快照', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '资料审核时间', + `review_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '审核退回原因或审核备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_document_version` (`customs_case_id`,`checklist_item_code`,`document_version`), + UNIQUE KEY `uk_customs_document_file` (`customs_case_id`,`file_id`), + KEY `idx_customs_document_case` (`customs_case_id`,`status`), + CONSTRAINT `fk_customs_document_case` FOREIGN KEY (`customs_case_id`) REFERENCES `fl_customs_case` (`id`), + CONSTRAINT `chk_customs_document_actor` CHECK ((`uploaded_by_type` in (_utf8mb4'PLATFORM',_utf8mb4'MERCHANT'))), + CONSTRAINT `chk_customs_document_status` CHECK ((`status` in (_utf8mb4'UPLOADED',_utf8mb4'APPROVED',_utf8mb4'RETURNED',_utf8mb4'SUPERSEDED',_utf8mb4'FROZEN'))), + CONSTRAINT `chk_customs_document_visibility` CHECK ((`visibility` in (_utf8mb4'PLATFORM',_utf8mb4'CUSTOMER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关客户文件版本引用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_final_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_final_document` ( + `id` bigint unsigned NOT NULL COMMENT '真实报关完税文件ID', + `source_document_id` bigint unsigned NOT NULL COMMENT '对应冻结客户资料ID', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件ID', + `file_name` varchar(255) NOT NULL COMMENT '真实报关完税文件名称快照', + `file_hash` char(64) NOT NULL COMMENT '真实报关完税文件SHA-256摘要', + `content_type` varchar(128) DEFAULT NULL COMMENT '真实报关完税文件媒体类型', + `size_bytes` bigint unsigned NOT NULL COMMENT '真实报关完税文件大小(字节)', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传操作人ID', + `uploaded_by_name` varchar(64) DEFAULT NULL COMMENT '上传操作人名称快照', + `uploaded_at` datetime(3) NOT NULL COMMENT '上传时间', + `version` int unsigned NOT NULL DEFAULT '1' COMMENT '完税文件版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_final_source` (`source_document_id`), + CONSTRAINT `fk_customs_final_source` FOREIGN KEY (`source_document_id`) REFERENCES `fl_customs_customer_document` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='真实报关完税文件当前版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_frozen_document_inbound`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_frozen_document_inbound` ( + `document_id` bigint unsigned NOT NULL, + `inbound_id` bigint unsigned NOT NULL, + `tenant_id` bigint unsigned NOT NULL, + `order_id` bigint unsigned NOT NULL, + `inbound_code` varchar(40) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`document_id`,`inbound_id`), + CONSTRAINT `fk_customs_frozen_document` FOREIGN KEY (`document_id`) REFERENCES `fl_customs_customer_document` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='开始报关时冻结的客户资料覆盖范围'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_history` ( + `id` bigint unsigned NOT NULL COMMENT '报关协同历史逻辑ID', + `customs_case_id` bigint unsigned NOT NULL COMMENT '所属报关协同单ID', + `action` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '业务动作编码,如CREATE、UPLOAD_DOCUMENT、REPLACE_DOCUMENT、REVIEW_DOCUMENT_APPROVE、REVIEW_DOCUMENT_RETURN、SUBMIT_AGENT_BATCH或UPLOAD_RECEIPT', + `from_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '动作发生前的协同状态;创建动作时为空', + `to_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '动作完成后的协同状态', + `resource_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '动作关联资源类型:CASE协同单、DOCUMENT资料、SUBMISSION_BATCH提交批次或RECEIPT回执', + `resource_id` bigint unsigned NOT NULL COMMENT '动作关联资源逻辑ID', + `note` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '动作原因、资料项目编码或业务备注快照', + `operator_id` bigint unsigned NOT NULL COMMENT '执行业务动作的操作人ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '执行动作时的操作人名称快照', + `operator_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '操作主体类型:PLATFORM平台操作人、MERCHANT客户操作人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '历史记录创建时间', + PRIMARY KEY (`id`), + KEY `idx_customs_history_case` (`customs_case_id`,`created_at`,`id`), + CONSTRAINT `fk_customs_history_case` FOREIGN KEY (`customs_case_id`) REFERENCES `fl_customs_case` (`id`), + CONSTRAINT `chk_customs_history_actor` CHECK ((`operator_type` in (_utf8mb4'PLATFORM',_utf8mb4'MERCHANT'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关协同稳定历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_operation` ( + `id` bigint unsigned NOT NULL COMMENT '报关写命令幂等记录逻辑ID', + `operator_id` bigint unsigned NOT NULL COMMENT '发起写命令的操作人ID;与动作和幂等键共同限定重放范围', + `action` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '幂等业务动作编码,包含平台或客户动作及资料、审核、提交、回执类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端提供的幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化完整请求内容的SHA-256摘要;同键不同请求时拒绝', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '幂等处理状态:PROCESSING处理中、SUCCESS处理成功', + `result_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '成功结果资源类型:CHECKLIST、CASE、DOCUMENT、BATCH或RECEIPT', + `result_id` bigint unsigned DEFAULT NULL COMMENT '成功结果资源逻辑ID;处理中为空', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等记录创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '写命令成功完成时间;处理中为空', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_operation` (`operator_id`,`action`,`idempotency_key`), + CONSTRAINT `chk_customs_operation_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关协同命令幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_receipt` ( + `id` bigint unsigned NOT NULL COMMENT '报关回执文件版本逻辑ID', + `customs_case_id` bigint unsigned NOT NULL COMMENT '所属报关协同单ID', + `submission_batch_id` bigint unsigned NOT NULL COMMENT '产生本回执的报关代理提交批次ID', + `receipt_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '回执类型:RECEIVED已收件、DECLARED已申报、REJECTED已拒绝、INSPECTION查验通知、RELEASED放行回执、OTHER其他回执', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务回执文件逻辑ID;跨库不建立外键', + `receipt_version` int unsigned NOT NULL COMMENT '同一提交批次和回执类型下的版本序号', + `replaces_receipt_id` bigint unsigned DEFAULT NULL COMMENT '被本版本替换的上一回执版本ID;首个版本为空', + `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '上传或引用时的回执文件名称快照', + `file_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '回执文件内容SHA-256摘要;用于版本审计和幂等校验', + `visibility` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PLATFORM' COMMENT '回执可见范围:PLATFORM仅平台可见、CUSTOMER客户可查询下载', + `note` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '回执业务备注', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传或引用回执的平台操作人ID', + `uploaded_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '上传回执时的平台操作人名称快照', + `uploaded_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '回执上传或引用时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_receipt_version` (`submission_batch_id`,`receipt_type`,`receipt_version`), + UNIQUE KEY `uk_customs_receipt_file` (`submission_batch_id`,`file_id`), + KEY `idx_customs_receipt_case` (`customs_case_id`,`visibility`,`uploaded_at`), + CONSTRAINT `fk_customs_receipt_batch` FOREIGN KEY (`submission_batch_id`) REFERENCES `fl_customs_submission_batch` (`id`), + CONSTRAINT `fk_customs_receipt_case` FOREIGN KEY (`customs_case_id`) REFERENCES `fl_customs_case` (`id`), + CONSTRAINT `chk_customs_receipt_type` CHECK ((`receipt_type` in (_utf8mb4'RECEIVED',_utf8mb4'DECLARED',_utf8mb4'REJECTED',_utf8mb4'INSPECTION',_utf8mb4'RELEASED',_utf8mb4'OTHER'))), + CONSTRAINT `chk_customs_receipt_visibility` CHECK ((`visibility` in (_utf8mb4'PLATFORM',_utf8mb4'CUSTOMER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关代理回执版本与客户可见范围'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_submission_batch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_submission_batch` ( + `id` bigint unsigned NOT NULL COMMENT '报关代理提交批次逻辑ID', + `customs_case_id` bigint unsigned NOT NULL COMMENT '所属报关协同单ID', + `batch_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '全局唯一代理提交批次号', + `batch_version` int unsigned NOT NULL COMMENT '同一报关协同单内的提交批次版本序号', + `customs_agent_id` bigint unsigned DEFAULT NULL, + `customs_agent_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '本批次接收报关资料的报关代理名称快照', + `external_reference` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '报关代理或外部系统返回的业务参考号', + `file_snapshot_json` json NOT NULL COMMENT '提交时冻结的已审核资料数组;元素包含documentId、fileId、itemCode、documentVersion和fileHash', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'SUBMITTED' COMMENT '代理提交状态:SUBMITTED已提交、ACKNOWLEDGED代理已确认、REJECTED代理已拒绝、COMPLETED代理处理完成', + `note` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '提交报关代理时的平台备注', + `submitted_by` bigint unsigned NOT NULL COMMENT '提交报关代理的平台操作人ID', + `submitted_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '提交时的平台操作人名称快照', + `submitted_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '提交报关代理时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_batch_no` (`batch_no`), + UNIQUE KEY `uk_customs_batch_version` (`customs_case_id`,`batch_version`), + CONSTRAINT `fk_customs_batch_case` FOREIGN KEY (`customs_case_id`) REFERENCES `fl_customs_case` (`id`), + CONSTRAINT `chk_customs_batch_status` CHECK ((`status` in (_utf8mb4'SUBMITTED',_utf8mb4'ACKNOWLEDGED',_utf8mb4'REJECTED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关代理提交批次及冻结文件版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_supplement_request`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_supplement_request` ( + `id` bigint unsigned NOT NULL COMMENT '报关补件请求逻辑ID', + `customs_case_id` bigint unsigned NOT NULL COMMENT '所属报关协同单ID', + `source_document_id` bigint unsigned NOT NULL COMMENT '触发本次补件的被退回资料版本ID', + `resolved_document_id` bigint unsigned DEFAULT NULL COMMENT '解决本次补件的新资料版本ID;未解决时为空', + `checklist_item_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '需要补充的报关资料项目编码', + `reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '平台审核人员填写的补件原因', + `due_at` datetime(3) DEFAULT NULL COMMENT '期望完成补件时间;未设置时为空', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'OPEN' COMMENT '补件状态:OPEN待补件、RESOLVED已由新资料解决、CANCELLED已取消', + `requested_by` bigint unsigned NOT NULL COMMENT '发起补件的平台操作人ID', + `requested_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '发起补件时的平台操作人名称快照', + `requested_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '补件请求发起时间', + `resolved_by` bigint unsigned DEFAULT NULL COMMENT '提交解决资料的操作人ID;未解决时为空', + `resolved_at` datetime(3) DEFAULT NULL COMMENT '补件请求解决时间', + PRIMARY KEY (`id`), + KEY `idx_customs_supplement_case` (`customs_case_id`,`status`,`due_at`), + CONSTRAINT `fk_customs_supplement_case` FOREIGN KEY (`customs_case_id`) REFERENCES `fl_customs_case` (`id`), + CONSTRAINT `chk_customs_supplement_status` CHECK ((`status` in (_utf8mb4'OPEN',_utf8mb4'RESOLVED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关补件请求'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_direct_delivery_unloading`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_direct_delivery_unloading` ( + `container_booking_id` bigint unsigned NOT NULL, + `inbound_id` bigint unsigned NOT NULL COMMENT 'Immutable physically loaded inbound source', + `actual_at` datetime(3) NOT NULL COMMENT 'Actual destination local time', + `timezone` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Explicit destination IANA timezone', + `received_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Actual recipient', + `evidence_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Actual delivery receipt reference', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `version` int NOT NULL DEFAULT '1', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` bigint unsigned NOT NULL, + `created_by_name` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`container_booking_id`,`inbound_id`), + UNIQUE KEY `uk_direct_unloading_command` (`container_booking_id`,`idempotency_key`), + CONSTRAINT `fk_direct_unloading_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='直送目的仓真实卸货凭据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_document_sequence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_document_sequence` ( + `sequence_key` varchar(32) NOT NULL COMMENT '单据类型与北京时间日期组合键,例如CAB:20260818', + `current_value` int unsigned NOT NULL COMMENT '该类型当日已分配的最大序号', + PRIMARY KEY (`sequence_key`), + CONSTRAINT `chk_fl_document_sequence_value` CHECK ((`current_value` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='头程履约业务单号日序列;生成YYMMDD加四位当日序号'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_dropship_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_dropship_pallet` ( + `id` bigint unsigned NOT NULL COMMENT '合托托盘ID', + `task_id` bigint unsigned NOT NULL COMMENT '所属合托任务ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '一件代发入仓单ID', + `warehouse_id` bigint unsigned NOT NULL COMMENT '作业仓库ID', + `pallet_no` varchar(32) NOT NULL COMMENT '现场扫描的系统DP托盘码', + `pallet_status` varchar(16) NOT NULL COMMENT '托盘状态:OPEN合托中、COMPLETED已封托', + `open_operation_id` varchar(128) NOT NULL COMMENT '创建托盘幂等操作ID', + `seal_operation_id` varchar(128) DEFAULT NULL COMMENT '封托幂等操作ID', + `created_by` bigint unsigned NOT NULL COMMENT '托盘创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '托盘创建人姓名快照', + `completed_by` bigint unsigned DEFAULT NULL COMMENT '封托操作人ID', + `completed_by_name` varchar(64) DEFAULT NULL COMMENT '封托操作人姓名快照', + `completed_at` datetime(3) DEFAULT NULL COMMENT '封托完成时间', + `version` int NOT NULL DEFAULT '1' COMMENT '托盘乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '托盘创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '托盘更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dropship_pallet_open_op` (`open_operation_id`), + UNIQUE KEY `uk_dropship_pallet_no` (`pallet_no`), + UNIQUE KEY `uk_dropship_pallet_seal_op` (`seal_operation_id`), + KEY `idx_dropship_pallet_inbound` (`tenant_id`,`inbound_id`,`pallet_status`), + KEY `fk_dropship_pallet_task` (`task_id`), + CONSTRAINT `fk_dropship_pallet_task` FOREIGN KEY (`task_id`) REFERENCES `fl_dropship_pallet_task` (`id`), + CONSTRAINT `chk_dropship_pallet_status` CHECK ((`pallet_status` in (_utf8mb4'OPEN',_utf8mb4'SEALED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发合托形成的可打印托盘'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_dropship_pallet_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_dropship_pallet_carton` ( + `id` bigint unsigned NOT NULL COMMENT '托盘箱明细ID', + `task_id` bigint unsigned NOT NULL COMMENT '所属合托任务ID', + `pallet_id` bigint unsigned DEFAULT NULL COMMENT '所属组托托盘ID;已清点待绑托时为空', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '一件代发入仓单ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '入仓货物明细ID', + `carton_label_id` bigint unsigned NOT NULL COMMENT '稳定箱唛记录ID', + `sku_code` varchar(128) NOT NULL COMMENT '箱唛冻结SKU编码', + `cargo_name` varchar(255) DEFAULT NULL COMMENT '货物名称快照', + `box_code` varchar(80) NOT NULL COMMENT '稳定箱码', + `expected_sku_quantity` int unsigned NOT NULL COMMENT '箱唛冻结的应收SKU数量', + `actual_sku_quantity` int unsigned NOT NULL COMMENT 'PDA确认的实收SKU数量', + `discrepancy_status` varchar(24) NOT NULL COMMENT '差异状态:MATCH或ACCEPTED_VARIANCE', + `discrepancy_remark` varchar(500) DEFAULT NULL COMMENT '差异接受说明', + `count_operation_id` varchar(128) NOT NULL COMMENT '逐箱清点幂等操作ID', + `bind_operation_id` varchar(128) DEFAULT NULL COMMENT '批量绑托幂等操作ID', + `last_operation_id` varchar(128) NOT NULL COMMENT '最后一次绑托或换托操作幂等号', + `counted_by` bigint unsigned NOT NULL COMMENT '清点操作人ID', + `counted_by_name` varchar(64) DEFAULT NULL COMMENT '清点操作人姓名快照', + `counted_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '清点时间', + `bound_by` bigint unsigned DEFAULT NULL COMMENT '上托操作人ID', + `bound_by_name` varchar(64) DEFAULT NULL COMMENT '上托操作人姓名快照', + `bound_at` datetime(3) DEFAULT NULL COMMENT '上托时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dropship_carton_task_label` (`task_id`,`carton_label_id`), + UNIQUE KEY `uk_dropship_carton_count_operation` (`count_operation_id`), + KEY `idx_dropship_carton_pallet_sku` (`pallet_id`,`sku_code`,`id`), + KEY `idx_dropship_carton_inbound` (`tenant_id`,`inbound_id`,`pallet_id`), + KEY `idx_dropship_carton_operation` (`count_operation_id`), + KEY `fk_dropship_carton_label` (`carton_label_id`), + KEY `idx_dropship_carton_bind_operation` (`task_id`,`bind_operation_id`), + CONSTRAINT `fk_dropship_carton_label` FOREIGN KEY (`carton_label_id`) REFERENCES `fl_inbound_carton_label` (`id`), + CONSTRAINT `fk_dropship_carton_pallet` FOREIGN KEY (`pallet_id`) REFERENCES `fl_dropship_pallet` (`id`), + CONSTRAINT `fk_dropship_carton_task` FOREIGN KEY (`task_id`) REFERENCES `fl_dropship_pallet_task` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发托盘内逐箱SKU和入仓单明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_dropship_pallet_carton_sku`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_dropship_pallet_carton_sku` ( + `id` bigint unsigned NOT NULL COMMENT '清点箱SKU明细ID', + `carton_id` bigint unsigned NOT NULL COMMENT '清点物理箱ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '入仓货物明细ID', + `sku_code` varchar(128) NOT NULL COMMENT 'SKU编码快照', + `cargo_name` varchar(255) DEFAULT NULL COMMENT '货物名称快照', + `expected_quantity` int unsigned NOT NULL COMMENT '应收数量', + `actual_quantity` int unsigned NOT NULL COMMENT '实收数量', + `discrepancy_status` varchar(24) NOT NULL COMMENT 'MATCH或ACCEPTED_VARIANCE', + `discrepancy_remark` varchar(500) DEFAULT NULL COMMENT '差异处理说明', + `line_no` int unsigned NOT NULL COMMENT '箱内SKU顺序', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dropship_carton_sku_detail` (`carton_id`,`inbound_detail_id`), + KEY `idx_dropship_carton_sku_code` (`sku_code`,`carton_id`), + CONSTRAINT `fk_dropship_carton_sku_carton` FOREIGN KEY (`carton_id`) REFERENCES `fl_dropship_pallet_carton` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发物理箱内逐SKU清点事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_dropship_pallet_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_dropship_pallet_task` ( + `id` bigint unsigned NOT NULL COMMENT '合托任务ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '一件代发入仓单ID', + `warehouse_id` bigint unsigned NOT NULL COMMENT '作业仓库ID', + `task_status` varchar(24) NOT NULL COMMENT '任务状态:PENDING待领取、CLAIMED已领取、COMPLETED已完成', + `total_cartons` int unsigned NOT NULL COMMENT '测量确认总箱数', + `counted_cartons` int unsigned NOT NULL DEFAULT '0' COMMENT '已逐箱确认实收数量的箱数', + `allocated_cartons` int unsigned NOT NULL DEFAULT '0' COMMENT '已上托箱数', + `discrepancy_cartons` int unsigned NOT NULL DEFAULT '0' COMMENT '已确认差异箱数', + `assignee_id` bigint unsigned DEFAULT NULL COMMENT '任务领取人ID', + `assignee_name` varchar(64) DEFAULT NULL COMMENT '任务领取人姓名快照', + `claimed_at` datetime(3) DEFAULT NULL COMMENT '任务领取时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '任务完成时间', + `version` int NOT NULL DEFAULT '1' COMMENT '任务乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '任务创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '任务更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dropship_task_inbound` (`tenant_id`,`inbound_id`), + KEY `idx_dropship_task_operator` (`task_status`,`assignee_id`,`warehouse_id`,`created_at`), + KEY `fk_dropship_task_inbound` (`inbound_id`), + CONSTRAINT `fk_dropship_task_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_dropship_task_cartons` CHECK (((`allocated_cartons` <= `counted_cartons`) and (`counted_cartons` <= `total_cartons`))), + CONSTRAINT `chk_dropship_task_status` CHECK ((`task_status` in (_utf8mb4'PENDING',_utf8mb4'CLAIMED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发测量后PDA合托任务'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_fee_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_fee_item` ( + `id` bigint unsigned NOT NULL COMMENT '费用项目ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '平台公共费用项目作用域,固定为0;物理字段名沿用 tenant_id', + `category` varchar(64) NOT NULL COMMENT '费用分类', + `trade_scope` varchar(20) NOT NULL COMMENT 'DOMESTIC国内、INTERNATIONAL国际', + `fee_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '稳定费用编码;系统费用使用固定编码', + `fee_type_name` varchar(128) NOT NULL COMMENT '费用类型名称', + `pickup_payable` tinyint(1) NOT NULL DEFAULT '0' COMMENT '提柜应付是否参与', + `pickup_receivable` tinyint(1) NOT NULL DEFAULT '0' COMMENT '提柜应收是否参与', + `warehouse_payable` tinyint(1) NOT NULL DEFAULT '0' COMMENT '仓储应付是否参与', + `warehouse_receivable` tinyint(1) NOT NULL DEFAULT '0' COMMENT '仓储应收是否参与', + `allocation_fee` tinyint(1) NOT NULL DEFAULT '0' COMMENT '平摊费用是否参与', + `description` varchar(500) DEFAULT NULL COMMENT '说明', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE启用、DISABLED停用', + `created_by` bigint DEFAULT NULL COMMENT '创建人ID;系统初始化时可为空', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint DEFAULT NULL COMMENT '最后修改人ID;系统初始化时可为空', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记:0未删除、1已删除', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `supplier_category` varchar(16) DEFAULT NULL COMMENT 'PAYABLE供应商类别约束;为空表示任意启用供应商', + `default_price` decimal(12,2) DEFAULT NULL COMMENT '默认价格CNY;仅选费带入,实际费用可修改', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fee_item_code` (`fee_code`), + KEY `idx_fee_item_query` (`tenant_id`,`trade_scope`,`category`,`status`,`deleted`), + KEY `idx_fee_item_name` (`tenant_id`,`fee_type_name`,`deleted`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台公共费用项目主数据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_finance_fee_source_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_finance_fee_source_command` ( + `id` bigint unsigned NOT NULL COMMENT 'Finance费用来源命令ID', + `customer_id` bigint unsigned NOT NULL COMMENT '客户隔离键,由Firstleg费用事实再次校验', + `operator_id` bigint unsigned NOT NULL COMMENT 'Finance操作人ID', + `operator_name` varchar(64) NOT NULL COMMENT 'Finance操作人名称快照', + `action` varchar(24) NOT NULL COMMENT '命令动作;当前仅VOID', + `idempotency_key` varchar(128) NOT NULL COMMENT 'Finance透传的幂等键', + `request_hash` char(64) NOT NULL COMMENT '规范化请求SHA-256', + `source_type` varchar(24) NOT NULL COMMENT 'INBOUND_FEE或CONTAINER_FEE', + `source_fee_id` bigint unsigned NOT NULL COMMENT '稳定费用来源ID', + `source_version` int unsigned NOT NULL COMMENT '精确费用来源版本', + `inbound_id` bigint unsigned DEFAULT NULL COMMENT '入库费用所属入库单ID', + `container_id` bigint unsigned DEFAULT NULL COMMENT '柜次费用所属柜次ID', + `reason` varchar(500) NOT NULL COMMENT '操作原因', + `status` varchar(16) NOT NULL COMMENT 'PROCESSING或SUCCEEDED', + `result_status` varchar(16) DEFAULT NULL COMMENT '成功业务结果;当前为VOIDED', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '命令创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '命令成功完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_finance_fee_command_idem` (`customer_id`,`operator_id`,`action`,`idempotency_key`), + KEY `idx_finance_fee_command_source` (`source_type`,`source_fee_id`,`source_version`,`created_at`), + CONSTRAINT `chk_finance_fee_command_action` CHECK ((`action` = _utf8mb4'VOID')), + CONSTRAINT `chk_finance_fee_command_source` CHECK ((`source_type` in (_utf8mb4'INBOUND_FEE',_utf8mb4'CONTAINER_FEE'))), + CONSTRAINT `chk_finance_fee_command_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCEEDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Finance发起、Firstleg执行业务费用命令的幂等审计记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_fulfillment_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_fulfillment_task` ( + `id` bigint unsigned NOT NULL COMMENT '履约任务ID(雪花ID)', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `order_id` bigint unsigned NOT NULL COMMENT '订单服务中的订单逻辑ID,不建立跨库外键', + `order_no` varchar(32) NOT NULL COMMENT '订单号快照', + `order_snapshot_json` json NOT NULL COMMENT '创建履约任务时所需的订单业务快照', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING_ASSIGNMENT' COMMENT '履约状态:PENDING_ASSIGNMENT待指派、ASSIGNED已指派、PROCESSING处理中、COMPLETED已完成、CANCELLED已取消', + `assignee_id` bigint unsigned DEFAULT NULL COMMENT '当前负责人ID', + `assignee_name` varchar(64) DEFAULT NULL COMMENT '当前负责人名称快照', + `assigned_at` datetime(3) DEFAULT NULL COMMENT '最近指派时间', + `started_at` datetime(3) DEFAULT NULL COMMENT '开始履约时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '履约完成时间', + `created_by` bigint unsigned NOT NULL COMMENT '创建人或系统主体ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_task_tenant_order` (`tenant_id`,`order_id`), + KEY `idx_task_assignee_status` (`tenant_id`,`assignee_id`,`status`,`created_at`), + KEY `idx_task_tenant_created` (`tenant_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='头程履约任务表:接收订单事件后形成独立履约任务,管理指派、执行和完成状态'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_carton_label`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_carton_label` ( + `id` bigint unsigned NOT NULL COMMENT '实际箱唛头映射ID(雪花ID)', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `order_id` bigint unsigned NOT NULL COMMENT '订单服务订单ID快照', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '订单货物明细ID,不建立跨库外键', + `cargo_item_no` int unsigned NOT NULL COMMENT '订单货物明细序号快照', + `cargo_name` varchar(255) DEFAULT NULL COMMENT '货物名称快照', + `sku_code` varchar(128) DEFAULT NULL COMMENT '箱唛绑定的SKU快照;二维码内容不变', + `units_per_carton` int unsigned DEFAULT NULL COMMENT '每箱SKU数量快照;一件代发必须为正数', + `detail_package_count` int unsigned NOT NULL COMMENT '该订单货物明细箱数快照', + `inbound_code` varchar(40) NOT NULL COMMENT '入仓码快照', + `box_code` varchar(80) NOT NULL COMMENT '固定二维码内容:入仓码#总箱数-箱下标', + `total_carton_count` int unsigned NOT NULL COMMENT '首次分配时整单总箱数', + `carton_index` int unsigned NOT NULL COMMENT '整单从1开始的稳定箱下标', + `label_version` int unsigned NOT NULL DEFAULT '1' COMMENT '箱唛批次版本,从1递增', + `batch_status` varchar(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '批次状态:ACTIVE有效、VOID已作废', + `cargo_fingerprint` char(64) DEFAULT NULL COMMENT '影响标签字段的SHA-256指纹', + `voided_at` datetime(3) DEFAULT NULL COMMENT '批次作废时间', + `box_specification` varchar(255) NOT NULL COMMENT '订单箱规或货物明细描述快照', + `length_cm` decimal(12,3) DEFAULT NULL COMMENT '下单箱规长度cm快照', + `width_cm` decimal(12,3) DEFAULT NULL COMMENT '下单箱规宽度cm快照', + `height_cm` decimal(12,3) DEFAULT NULL COMMENT '下单箱规高度cm快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '首次分配时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carton_label_box_code` (`tenant_id`,`box_code`), + UNIQUE KEY `uk_carton_label_index` (`tenant_id`,`inbound_id`,`label_version`,`carton_index`), + KEY `idx_carton_label_detail` (`tenant_id`,`inbound_id`,`inbound_detail_id`), + KEY `fk_carton_label_inbound` (`inbound_id`), + KEY `idx_carton_label_active` (`tenant_id`,`inbound_id`,`batch_status`,`label_version`), + CONSTRAINT `fk_carton_label_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='首次打印前冻结的实际箱号与订单货物明细映射'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_carton_label_sku`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_carton_label_sku` ( + `id` bigint unsigned NOT NULL COMMENT '箱唛SKU快照ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `carton_label_id` bigint unsigned NOT NULL COMMENT '物理箱唛ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '订单货物明细ID', + `sku_code` varchar(128) NOT NULL COMMENT 'SKU编码快照', + `cargo_name` varchar(255) DEFAULT NULL COMMENT '货物名称快照', + `expected_quantity` int unsigned NOT NULL COMMENT '该物理箱内应收SKU数量', + `line_no` int unsigned NOT NULL COMMENT '箱内SKU展示顺序', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carton_label_sku_detail` (`carton_label_id`,`inbound_detail_id`), + KEY `idx_carton_label_sku_code` (`tenant_id`,`inbound_id`,`sku_code`), + CONSTRAINT `fk_carton_label_sku_label` FOREIGN KEY (`carton_label_id`) REFERENCES `fl_inbound_carton_label` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='物理箱唛内的多SKU冻结快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_destination_snapshot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_destination_snapshot` ( + `id` bigint unsigned NOT NULL COMMENT '目的仓地址快照ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `destination_type` varchar(24) DEFAULT NULL COMMENT '目的仓类型', + `destination_code` varchar(32) DEFAULT NULL COMMENT '目的仓编码', + `destination_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称', + `country_code` char(2) DEFAULT NULL COMMENT '国家二字码', + `state_province` varchar(100) DEFAULT NULL COMMENT '省或州', + `city` varchar(100) DEFAULT NULL COMMENT '城市', + `address_line` varchar(512) DEFAULT NULL COMMENT '详细地址', + `postal_code` varchar(20) DEFAULT NULL COMMENT '邮编', + `contact_name` varchar(64) DEFAULT NULL COMMENT '联系人', + `contact_phone` varchar(32) DEFAULT NULL COMMENT '联系人电话', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_destination_inbound` (`tenant_id`,`inbound_id`), + KEY `fk_destination_inbound` (`inbound_id`), + CONSTRAINT `fk_destination_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单目的仓地址和联系人快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_fee`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_fee` ( + `id` bigint unsigned NOT NULL COMMENT '入库费用ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `measurement_id` bigint unsigned DEFAULT NULL COMMENT '璐圭敤缁戝畾鐨勬祴閲忔壒娆D蹇収', + `measurement_source` varchar(32) DEFAULT NULL COMMENT '璁¤垂灏哄鏉ユ簮蹇収锛歄UTER涓哄绠辫鏁版嵁', + `fee_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户内唯一费用单号', + `fee_version` int unsigned NOT NULL DEFAULT '1' COMMENT '费用快照版本', + `charge_rule_id` bigint unsigned DEFAULT NULL COMMENT '历史客户计费规则ID;渠道价格可为空', + `charge_rule_version` int unsigned DEFAULT NULL COMMENT '历史客户规则版本快照', + `carrier_rate_id` bigint unsigned DEFAULT NULL COMMENT '船司FBA价格ID;人工报价为空', + `carrier_rate_version` int unsigned DEFAULT NULL COMMENT '船司价格版本快照;人工报价为空', + `price_book_version_id` bigint unsigned DEFAULT NULL COMMENT '整表价格版本ID快照', + `rule_code` varchar(50) DEFAULT NULL COMMENT '历史客户规则编码快照', + `customer_id` bigint unsigned DEFAULT NULL COMMENT '可选业务客户快照;平台公共渠道计费不依赖该字段', + `customer_name` varchar(128) NOT NULL COMMENT '客户名称快照', + `business_type` varchar(32) NOT NULL COMMENT '业务类型快照', + `tax_mode` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '订单买单或退税模式快照', + `pricing_tax_mode` varchar(16) DEFAULT NULL COMMENT '报价包税维度快照', + `rounding_scale` tinyint unsigned DEFAULT NULL COMMENT '历史客户规则计费量保留位数快照', + `rounding_mode` varchar(24) DEFAULT NULL COMMENT '历史客户规则舍入方式快照', + `rule_effective_from` datetime(3) DEFAULT NULL COMMENT '历史客户规则生效开始快照', + `rule_effective_to` datetime(3) DEFAULT NULL COMMENT '客户规则生效结束快照', + `rate_code` varchar(50) NOT NULL COMMENT '船司价格编码快照', + `origin_warehouse_id` bigint unsigned NOT NULL COMMENT '起运仓ID快照', + `origin_warehouse_name` varchar(128) NOT NULL COMMENT '起运仓名称快照', + `channel_code` varchar(64) NOT NULL COMMENT '渠道编码快照', + `carrier_id` bigint unsigned DEFAULT NULL COMMENT '历史承运商ID;渠道价格可为空', + `carrier_name` varchar(128) DEFAULT NULL COMMENT '历史承运商名称;渠道价格可为空', + `destination_type` varchar(16) DEFAULT NULL COMMENT '目的地类型快照:FBA或OVERSEAS', + `destination_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '海外仓或FBA目的仓ID快照', + `destination_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `destination_code` varchar(32) DEFAULT NULL COMMENT 'FBA仓编码快照;海外仓可为空', + `rate_effective_from` datetime(3) DEFAULT NULL COMMENT '价格生效开始快照;人工报价为空', + `rate_effective_to` datetime(3) DEFAULT NULL COMMENT '价格生效结束快照', + `charge_mode` varchar(16) DEFAULT NULL COMMENT '计费口径:KG或CBM', + `conversion_factor` decimal(18,6) DEFAULT NULL COMMENT '历史客户规则使用的换算系数快照', + `actual_weight_kg` decimal(18,3) NOT NULL COMMENT '试算时实际重量kg', + `actual_volume_cbm` decimal(18,4) NOT NULL COMMENT '试算时实际体积m3', + `converted_quantity` decimal(18,4) NOT NULL COMMENT '换算后的重量或体积', + `chargeable_quantity` decimal(18,4) NOT NULL COMMENT '最终计费量', + `charge_unit` varchar(16) NOT NULL COMMENT '计费单位', + `currency` char(3) NOT NULL COMMENT '币种', + `subtotal_amount` decimal(18,2) NOT NULL COMMENT '基础费用金额', + `additional_amount` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '附加费金额', + `total_amount` decimal(18,2) NOT NULL COMMENT '总金额', + `fee_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'CALCULATED' COMMENT '费用状态:CALCULATED已计算、SUPERSEDED已被新版本替代', + `review_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NOT_SUBMITTED' COMMENT '费用审核状态:NOT_SUBMITTED未提交、PENDING待审核、APPROVED已通过、REJECTED已驳回、CONFIRMED已确认', + `exception_release` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否基于测量异常放行生成', + `calculated_by` bigint unsigned NOT NULL COMMENT '试算人ID', + `calculated_at` datetime(3) NOT NULL COMMENT '试算时间', + `confirmed_by` bigint unsigned DEFAULT NULL COMMENT '确认人ID', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '确认时间', + `sent_by` bigint unsigned DEFAULT NULL COMMENT '发送人ID', + `sent_at` datetime(3) DEFAULT NULL COMMENT '发送客户时间', + `customer_confirmed_by` bigint unsigned DEFAULT NULL COMMENT '瀹㈡埛纭浜虹敤鎴稩D', + `customer_confirmed_by_name` varchar(64) DEFAULT NULL COMMENT '瀹㈡埛纭浜哄悕绉板揩鐓�', + `customer_confirmed_at` datetime(3) DEFAULT NULL COMMENT '瀹㈡埛纭璐圭敤鏃堕棿锛涢潪绌哄悗璐圭敤鐗堟湰閿佸畾', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `baseline_chargeable_quantity` decimal(18,6) NOT NULL COMMENT '系统按权威测量与生效报价计算的原始计费量', + `tolerance_percent` decimal(5,2) NOT NULL DEFAULT '10.00' COMMENT '人工调整允许的最大偏差百分比,边界包含', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_fee_no` (`tenant_id`,`fee_no`), + UNIQUE KEY `uk_inbound_fee_version` (`tenant_id`,`inbound_id`,`fee_version`), + KEY `idx_inbound_fee_status` (`tenant_id`,`inbound_id`,`fee_status`,`review_status`), + KEY `fk_fee_inbound` (`inbound_id`), + KEY `fk_fee_charge_rule` (`charge_rule_id`), + KEY `fk_fee_carrier_rate` (`carrier_rate_id`), + CONSTRAINT `fk_fee_carrier_rate` FOREIGN KEY (`carrier_rate_id`) REFERENCES `fl_carrier_fba_rate` (`id`), + CONSTRAINT `fk_fee_charge_rule` FOREIGN KEY (`charge_rule_id`) REFERENCES `fl_customer_charge_rule` (`id`), + CONSTRAINT `fk_fee_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库头程费用计算和确认快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_fee_detail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_fee_detail` ( + `id` bigint unsigned NOT NULL COMMENT '入库费用明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID(客户隔离键);费用明细引用平台公共费用项目', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `fee_item_id` bigint unsigned NOT NULL COMMENT '绑定费用项目ID', + `source_type` varchar(32) NOT NULL DEFAULT 'MANUAL' COMMENT 'MANUAL或FBA_PRICING', + `source_fee_id` bigint unsigned DEFAULT NULL COMMENT '来源计费快照ID', + `source_fee_version` int unsigned DEFAULT NULL COMMENT '来源计费快照版本', + `source_fee_no` varchar(40) DEFAULT NULL COMMENT '来源费用单号', + `inbound_code` varchar(40) NOT NULL COMMENT '入仓码快照', + `direction` varchar(16) NOT NULL COMMENT 'RECEIVABLE应收、PAYABLE应付', + `business_date` date NOT NULL COMMENT '业务发生日', + `customer_id` bigint unsigned DEFAULT NULL COMMENT '客户ID快照', + `customer_name` varchar(128) DEFAULT NULL COMMENT '客户公司名称快照', + `invoice_title` varchar(256) DEFAULT NULL COMMENT '发票抬头快照', + `fee_category_snapshot` varchar(64) NOT NULL COMMENT '费用分类快照', + `trade_scope_snapshot` varchar(20) NOT NULL COMMENT '国内国际快照', + `fee_type_name_snapshot` varchar(128) NOT NULL COMMENT '费用类型名称快照', + `channel_code` varchar(64) DEFAULT NULL COMMENT '渠道编码快照', + `channel_name` varchar(128) DEFAULT NULL COMMENT '渠道名称快照', + `destination_code` varchar(32) DEFAULT NULL COMMENT '目的仓编码快照', + `destination_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `package_count` int DEFAULT NULL COMMENT '件数快照', + `actual_gross_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '仓库实测毛重快照,单位千克', + `actual_volume_cbm` decimal(18,6) DEFAULT NULL COMMENT '实际体积快照,单位立方米', + `volume_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '材积重快照,单位千克', + `chargeable_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '费用计算采用的计费重量,单位千克', + `chargeable_volume_cbm` decimal(18,6) DEFAULT NULL COMMENT '费用计算采用的计费体积,单位立方米', + `chargeable_quantity` decimal(18,4) DEFAULT NULL COMMENT '本费用最终计费量', + `charge_unit` varchar(16) DEFAULT NULL COMMENT 'KG或CBM', + `unit_price` decimal(18,4) NOT NULL COMMENT '费用单价;计价单位由对应费用项目规则确定', + `currency` char(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '金额币种三字码,如CNY', + `amount` decimal(18,2) NOT NULL COMMENT '该费用明细金额,币种由currency字段指定', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `review_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '审核状态:PENDING待审核、APPROVED已通过、REJECTED已驳回', + `reviewer_id` bigint DEFAULT NULL COMMENT '审核人ID', + `reviewer_name` varchar(64) DEFAULT NULL COMMENT '审核人名称快照', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '审核时间', + `review_reason` varchar(500) DEFAULT NULL COMMENT '审核驳回原因', + `publication_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'DRAFT' COMMENT '费用发布状态:DRAFT草稿、PUBLISHED已发布、SUPERSEDED已替代', + `published_by` bigint DEFAULT NULL COMMENT '发布人ID', + `published_by_name` varchar(64) DEFAULT NULL COMMENT '发布人名称快照', + `published_at` datetime(3) DEFAULT NULL COMMENT '发布时间', + `inbounded_at` datetime(3) DEFAULT NULL COMMENT '入库完成时间快照', + `settlement_included` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否参与结算', + `created_by` bigint DEFAULT NULL COMMENT '创建人或系统主体ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint DEFAULT NULL COMMENT '最后修改人或系统主体ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记:0未删除、1已删除', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `paid_at` datetime(3) DEFAULT NULL COMMENT 'DIRECT_PAID业务已付时间', + `payment_method` varchar(32) DEFAULT NULL COMMENT 'DIRECT_PAID付款方式', + `payment_reference_no` varchar(128) DEFAULT NULL COMMENT 'DIRECT_PAID付款流水号', + `payment_voucher_file_ids` json DEFAULT NULL COMMENT 'DIRECT_PAID付款凭证File ID数组', + `settlement_mode` varchar(16) DEFAULT NULL COMMENT '仅PAYABLE:ON_ACCOUNT或DIRECT_PAID', + `supplier_category` varchar(16) DEFAULT NULL COMMENT '费用项目供应商类别约束快照;为空表示任意启用供应商', + `supplier_id` bigint unsigned DEFAULT NULL COMMENT '应付Warehouse供应商ID快照;应收为空', + `supplier_name` varchar(200) DEFAULT NULL COMMENT '应付Warehouse供应商名称快照;应收为空', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_fee_source` (`tenant_id`,`source_type`,`source_fee_id`), + KEY `idx_inbound_fee_detail` (`tenant_id`,`inbound_id`,`business_date`,`deleted`), + KEY `idx_inbound_fee_review` (`tenant_id`,`review_status`,`business_date`,`deleted`), + KEY `idx_inbound_fee_item` (`tenant_id`,`fee_item_id`,`deleted`), + KEY `fk_inbound_fee_detail_order` (`inbound_id`), + KEY `fk_inbound_fee_detail_item` (`fee_item_id`), + KEY `idx_inbound_fee_published` (`tenant_id`,`inbound_id`,`publication_status`,`source_fee_version`), + CONSTRAINT `fk_inbound_fee_detail_item` FOREIGN KEY (`fee_item_id`) REFERENCES `fl_fee_item` (`id`), + CONSTRAINT `fk_inbound_fee_detail_order` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单应收应付费用明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_fee_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_fee_item` ( + `id` bigint unsigned NOT NULL COMMENT '费用明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `fee_id` bigint unsigned NOT NULL COMMENT '费用头ID', + `item_no` int unsigned NOT NULL COMMENT '费用单内序号', + `fee_code` varchar(50) NOT NULL COMMENT '费用项目编码', + `fee_name` varchar(128) NOT NULL COMMENT '费用项目名称快照', + `quantity` decimal(18,4) NOT NULL COMMENT '计费数量', + `unit` varchar(16) NOT NULL COMMENT '计费单位', + `unit_price` decimal(18,6) NOT NULL COMMENT '单价', + `amount` decimal(18,2) NOT NULL COMMENT '金额', + `currency` char(3) NOT NULL COMMENT '币种', + `automatic_flag` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否自动计算', + `remark` varchar(500) DEFAULT NULL COMMENT '费用备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fee_item_no` (`tenant_id`,`fee_id`,`item_no`), + KEY `fk_fee_item_header` (`fee_id`), + CONSTRAINT `fk_fee_item_header` FOREIGN KEY (`fee_id`) REFERENCES `fl_inbound_fee` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库头程费用项目明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_file`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_file` ( + `id` bigint unsigned NOT NULL COMMENT '入库单文件关系ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `file_id` bigint unsigned NOT NULL COMMENT '文件服务文件ID', + `file_type` varchar(24) NOT NULL COMMENT '文件类型:RELATED、MARK、PC_ORDER、MEASURE或WEIGHT', + `file_name_snapshot` varchar(255) NOT NULL COMMENT '文件名快照', + `visibility` varchar(16) NOT NULL DEFAULT 'INTERNAL' COMMENT '可见范围', + `file_version` int unsigned NOT NULL DEFAULT '1' COMMENT '业务文件版本', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传人ID', + `uploaded_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_file_relation` (`tenant_id`,`inbound_id`,`file_id`,`file_type`), + KEY `idx_inbound_file_type` (`tenant_id`,`inbound_id`,`file_type`,`deleted`), + KEY `fk_file_inbound` (`inbound_id`), + CONSTRAINT `fk_file_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单与文件中心对象的分类关系'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_hold_record`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_hold_record` ( + `id` bigint unsigned NOT NULL COMMENT '扣货记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `hold_action` varchar(16) NOT NULL COMMENT '动作:HOLD或RELEASE', + `reason` varchar(1000) NOT NULL COMMENT '扣货或解除原因', + `evidence_file_id` bigint unsigned DEFAULT NULL COMMENT '证据文件ID', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `operated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + KEY `idx_hold_inbound_time` (`tenant_id`,`inbound_id`,`operated_at`), + KEY `fk_hold_inbound` (`inbound_id`), + CONSTRAINT `fk_hold_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单扣货和解除扣货不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_idempotency`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_idempotency` ( + `id` bigint unsigned NOT NULL COMMENT '入库写操作幂等记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `operation` varchar(40) NOT NULL COMMENT '操作类型', + `operator_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '操作者或外部应用ID', + `inbound_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '入库单ID,创建前可为0', + `idempotency_key` varchar(128) NOT NULL COMMENT '幂等键', + `request_hash` char(64) NOT NULL COMMENT '请求内容摘要', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '幂等处理状态:PROCESSING处理中、SUCCEEDED已成功、FAILED已失败', + `result_json` json DEFAULT NULL COMMENT '成功结果摘要', + `result_resource_id` bigint unsigned DEFAULT NULL COMMENT '成功结果资源ID', + `completed_at` datetime(3) DEFAULT NULL COMMENT '完成时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_idempotency` (`tenant_id`,`operation`,`operator_id`,`idempotency_key`), + KEY `idx_inbound_idempotency_created` (`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='第三方测量、审核、费用发送和入库写操作幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_internal_note`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_internal_note` ( + `id` bigint unsigned NOT NULL COMMENT '客服内部备注ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `content` varchar(2000) NOT NULL COMMENT '仅内部可见备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_internal_note_time` (`tenant_id`,`inbound_id`,`created_at`), + KEY `fk_internal_note_inbound` (`inbound_id`), + CONSTRAINT `fk_internal_note_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单客服内部备注历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_loading_pick_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_loading_pick_task` ( + `id` bigint unsigned NOT NULL COMMENT '入库单级PDA拣货任务ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '关联入库单逻辑ID', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '任务状态:PENDING待拣货、IN_PROGRESS拣货中、COMPLETED已完成', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + `expected_count` int unsigned DEFAULT NULL COMMENT '计划应拣箱数', + `picked_count` int unsigned DEFAULT NULL COMMENT '实际已拣箱数', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '拣货结果或异常补充说明', + `updated_by` bigint unsigned NOT NULL COMMENT '最后操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'PDA拣货任务创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'PDA拣货任务最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pick_tenant_inbound` (`tenant_id`,`inbound_id`), + KEY `idx_loading_pick_status` (`tenant_id`,`status`,`updated_at`), + KEY `fk_loading_pick_inbound` (`inbound_id`), + CONSTRAINT `fk_loading_pick_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA拣货任务及结果'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_measurement`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_measurement` ( + `id` bigint unsigned NOT NULL COMMENT '测量批次ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `split_batch_id` bigint unsigned DEFAULT NULL COMMENT '产生该测量批次的入仓拆分批次ID', + `source_measurement_id` bigint unsigned DEFAULT NULL COMMENT '子单继承或复核时的来源测量批次ID', + `source_type` varchar(24) NOT NULL COMMENT '数据来源:THIRD_PARTY或MANUAL', + `source_code` varchar(64) DEFAULT NULL COMMENT '第三方应用或来源编码', + `external_event_no` varchar(128) DEFAULT NULL COMMENT '第三方事件号', + `external_request_hash` char(64) DEFAULT NULL COMMENT '第三方data原文和图片内容联合请求哈希', + `device_code` varchar(64) DEFAULT NULL COMMENT '测量设备编码', + `warehouse_code` varchar(50) DEFAULT NULL COMMENT '第三方回传仓库编码', + `measured_at` datetime(3) DEFAULT NULL COMMENT '设备测量时间', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'RECEIVED' COMMENT '测量批次状态:DRAFT草稿、RECEIVED已接收、SUBMITTED已提交、APPROVED已通过、REJECTED已驳回', + `raw_payload_json` json DEFAULT NULL COMMENT '第三方原始报文', + `original_document_no` varchar(64) DEFAULT NULL COMMENT '原单据号码快照', + `original_gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '原单据毛重kg', + `original_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '原单据体积或材积m3', + `actual_goods_name` varchar(255) DEFAULT NULL COMMENT '实际品名', + `total_package_count` int unsigned DEFAULT NULL COMMENT '本批次总箱数', + `total_volume_raw_cbm` decimal(18,6) DEFAULT NULL COMMENT '本批次原始总体积m3', + `total_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '本批次业务总体积m3', + `volume_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '本批次总材积重kg', + `created_by` bigint unsigned DEFAULT NULL COMMENT '创建人或系统主体ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_measure_external_event` (`tenant_id`,`source_code`,`external_event_no`), + KEY `idx_measure_inbound_time` (`tenant_id`,`inbound_id`,`created_at`), + KEY `fk_measure_inbound` (`inbound_id`), + KEY `fk_measure_split_batch` (`split_batch_id`), + KEY `fk_measure_source_batch` (`source_measurement_id`), + KEY `idx_measure_split_source` (`tenant_id`,`split_batch_id`,`source_measurement_id`,`created_at`), + KEY `idx_measure_inbound_status_id` (`tenant_id`,`inbound_id`,`status`,`id`), + CONSTRAINT `fk_measure_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_measure_source_batch` FOREIGN KEY (`source_measurement_id`) REFERENCES `fl_inbound_measurement` (`id`), + CONSTRAINT `fk_measure_split_batch` FOREIGN KEY (`split_batch_id`) REFERENCES `fl_inbound_split_batch` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库长宽高测量批次和第三方原始数据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_measurement_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_measurement_item` ( + `id` bigint unsigned NOT NULL COMMENT '测量明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `measurement_id` bigint unsigned NOT NULL COMMENT '测量批次ID', + `split_item_id` bigint unsigned DEFAULT NULL COMMENT '产生该子单测量明细的拆分台账ID', + `source_measurement_item_id` bigint unsigned DEFAULT NULL COMMENT '被拆分继承的来源测量箱规明细ID', + `inbound_detail_id` bigint unsigned DEFAULT NULL COMMENT '绑定的订单货物明细ID,平台手工明细可为空', + `external_detail_no` varchar(128) DEFAULT NULL COMMENT '第三方测量明细唯一号,平台手工明细可为空', + `box_code` varchar(128) DEFAULT NULL COMMENT '柏悦唛头箱号;设备单箱测量时同一客户内唯一', + `scanned_shipment_id` varchar(64) DEFAULT NULL COMMENT '设备从Amazon FBA箱标实扫的Shipment ID', + `item_no` varchar(32) NOT NULL COMMENT '批次内明细号', + `box_specification` varchar(64) NOT NULL COMMENT '箱规标识', + `package_count` int unsigned NOT NULL COMMENT '相同箱规箱数', + `length_cm` decimal(12,3) NOT NULL COMMENT '原始长度cm', + `width_cm` decimal(12,3) NOT NULL COMMENT '原始宽度cm', + `height_cm` decimal(12,3) NOT NULL COMMENT '原始高度cm', + `girth_cm` decimal(12,3) NOT NULL COMMENT '周长cm,规则为长+2*(宽+高)', + `unit_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '单箱重量kg,第三方仅回传尺寸时可为空', + `unit_volume_cbm` decimal(18,4) NOT NULL COMMENT '单箱业务体积m3', + `volume_raw_cbm` decimal(18,6) NOT NULL COMMENT '原始体积m3', + `volume_cbm` decimal(18,4) NOT NULL COMMENT '业务体积m3', + `total_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '本箱规总重量kg', + `total_volume_cbm` decimal(18,4) NOT NULL COMMENT '本箱规总体积m3', + `volume_weight_kg` decimal(18,3) NOT NULL COMMENT '本箱规材积重kg', + `charge_rule_id` bigint unsigned DEFAULT NULL COMMENT 'customer charge rule id', + `coefficient_mode` varchar(16) DEFAULT NULL COMMENT '系数模式快照:ADD或MULTIPLY', + `calculation_rule_version` varchar(64) NOT NULL COMMENT '体积计算和舍入规则版本', + `source_image_file_id` bigint unsigned DEFAULT NULL COMMENT '测量设备图片文件ID', + `machine_no` varchar(64) DEFAULT NULL COMMENT '本次测量设备编号', + `device_measured_at` datetime(3) DEFAULT NULL COMMENT '本次设备测量时间', + `over_limit_warning` varchar(500) DEFAULT NULL COMMENT '超线提醒快照', + `outer_length_cm` decimal(12,3) DEFAULT NULL COMMENT '外箱规长度cm', + `outer_width_cm` decimal(12,3) DEFAULT NULL COMMENT '外箱规宽度cm', + `outer_height_cm` decimal(12,3) DEFAULT NULL COMMENT '外箱规高度cm', + `manual_outer_length_cm` decimal(12,3) DEFAULT NULL COMMENT '浠撳簱浜哄伐澶栫瑙勯暱搴﹁绠楀熀鏁癱m', + `manual_outer_width_cm` decimal(12,3) DEFAULT NULL COMMENT '浠撳簱浜哄伐澶栫瑙勫搴﹁绠楀熀鏁癱m', + `manual_outer_height_cm` decimal(12,3) DEFAULT NULL COMMENT '浠撳簱浜哄伐澶栫瑙勯珮搴﹁绠楀熀鏁癱m', + `remark` varchar(500) DEFAULT NULL COMMENT '测量明细备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_measure_item_no` (`tenant_id`,`measurement_id`,`item_no`), + UNIQUE KEY `uk_measure_external_detail` (`tenant_id`,`inbound_detail_id`,`external_detail_no`), + UNIQUE KEY `uk_measure_box_code` (`tenant_id`,`box_code`), + KEY `fk_measure_item_batch` (`measurement_id`), + KEY `fk_measure_item_split_item` (`split_item_id`), + KEY `fk_measure_item_source_item` (`source_measurement_item_id`), + KEY `idx_measure_item_split_source` (`tenant_id`,`split_item_id`,`source_measurement_item_id`), + KEY `idx_measure_item_candidate` (`tenant_id`,`measurement_id`,`inbound_detail_id`), + CONSTRAINT `fk_measure_item_batch` FOREIGN KEY (`measurement_id`) REFERENCES `fl_inbound_measurement` (`id`), + CONSTRAINT `fk_measure_item_source_item` FOREIGN KEY (`source_measurement_item_id`) REFERENCES `fl_inbound_measurement_item` (`id`), + CONSTRAINT `fk_measure_item_split_item` FOREIGN KEY (`split_item_id`) REFERENCES `fl_inbound_split_item` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库长宽高和箱数测量明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_order` ( + `id` bigint unsigned NOT NULL COMMENT '入库单ID(雪花ID)', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `task_id` bigint unsigned DEFAULT NULL COMMENT '头程履约任务ID', + `order_id` bigint unsigned NOT NULL COMMENT '订单服务订单ID,不建立跨库外键', + `order_no` varchar(32) NOT NULL COMMENT '订单号快照', + `inbound_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户内唯一入仓码', + `inbound_role` varchar(16) NOT NULL DEFAULT 'MASTER' COMMENT '入仓单层级:MASTER主单、CHILD子单', + `parent_inbound_id` bigint unsigned DEFAULT NULL COMMENT '直属主入仓单ID;主单为空', + `root_inbound_id` bigint unsigned DEFAULT NULL COMMENT '根主入仓单ID;存量主单可为空,按自身ID解释', + `split_sequence` int unsigned DEFAULT NULL COMMENT '同一主单下的子单顺序号', + `split_status` varchar(24) NOT NULL DEFAULT 'NOT_SPLIT' COMMENT '拆分状态:NOT_SPLIT、PARTIALLY_SPLIT、FULLY_SPLIT', + `process_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'WAIT_MEASURE' COMMENT '入库流程状态:WAIT_MEASURE待测量、MEASURING测量中、MEASURE_PENDING待审核、MEASURE_REJECTED测量驳回、WAIT_PRICING待计费、FEE_CONFIRMING费用确认中、INBOUNDING入库收口中、INBOUNDED已入库、WAIT_SPLIT历史待分柜', + `order_status_snapshot` varchar(24) NOT NULL COMMENT '订单状态快照', + `measure_review_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NOT_SUBMITTED' COMMENT '测量审核状态:NOT_SUBMITTED未提交、PENDING待审核、APPROVED已通过、REJECTED已驳回', + `fee_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'UNPRICED' COMMENT '费用状态:UNPRICED未计费、CALCULATED已计算、CONFIRMED已确认、SENT已发送、VOIDED已作废', + `fee_review_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NOT_SUBMITTED' COMMENT '费用审核状态:NOT_SUBMITTED未提交、PENDING待审核、APPROVED已通过、REJECTED已驳回、CONFIRMED已确认', + `notification_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NOT_CREATED' COMMENT '客户通知状态:NOT_CREATED未创建、PENDING待通知', + `expected_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到达时间', + `customer_id` bigint unsigned DEFAULT NULL COMMENT '客户逻辑ID', + `customer_name` varchar(128) NOT NULL COMMENT '客户名称快照', + `company_id` bigint unsigned DEFAULT NULL COMMENT '运营公司逻辑ID', + `company_name` varchar(128) DEFAULT NULL COMMENT '运营公司名称快照', + `warehouse_id` bigint unsigned NOT NULL COMMENT '实际作业仓库ID', + `warehouse_name` varchar(128) NOT NULL COMMENT '实际作业仓库名称快照', + `delivery_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '交货仓逻辑ID', + `delivery_warehouse_name` varchar(128) DEFAULT NULL COMMENT '交货仓名称快照', + `business_type` varchar(32) NOT NULL COMMENT '业务类型', + `fulfillment_type` varchar(32) NOT NULL DEFAULT 'STANDARD' COMMENT '履约类型:STANDARD普通头程、ONE_CLICK_DROPSHIP一键代发', + `lx_code` varchar(128) DEFAULT NULL COMMENT '一件代发领星入库单代码', + `channel_code` varchar(64) DEFAULT NULL COMMENT '渠道编码', + `channel_name` varchar(128) DEFAULT NULL COMMENT '渠道名称快照', + `carrier_id` bigint unsigned DEFAULT NULL COMMENT '计费船司逻辑ID', + `carrier_name` varchar(128) DEFAULT NULL COMMENT '计费船司名称快照', + `tax_mode` varchar(24) DEFAULT NULL COMMENT '买单或退税模式', + `pricing_tax_mode` varchar(16) DEFAULT NULL COMMENT '报价包税维度:TAX_INCLUDED/TAX_EXCLUDED', + `container_mode` varchar(24) DEFAULT NULL COMMENT '整柜或散货模式', + `customs_inspection` tinyint(1) DEFAULT NULL COMMENT '是否商检', + `destination_type` varchar(24) DEFAULT NULL COMMENT '目的仓类型', + `destination_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '目的仓逻辑ID', + `destination_code` varchar(32) DEFAULT NULL COMMENT '目的仓编码,例如FBA仓编码', + `destination_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `hold_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '当前是否扣货', + `current_hold_reason` varchar(500) DEFAULT NULL COMMENT '当前扣货理由快照', + `last_overseas_hold_version` bigint unsigned DEFAULT NULL COMMENT '海外暂扣事件最新聚合版本,用于阻止乱序覆盖', + `total_package_count` int unsigned DEFAULT NULL COMMENT '确认后的总箱数', + `package_count` int unsigned DEFAULT NULL COMMENT '入仓单箱数;三期唯一数量口径', + `split_purpose` varchar(16) NOT NULL DEFAULT 'MASTER' COMMENT '履约分片用途:MASTER、LOADED、REMAINDER', + `actual_gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '确认后的实际总毛重kg', + `chargeable_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '当前费用快照的计费重量kg', + `actual_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '确认后的实际总体积m3', + `chargeable_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '当前费用快照的计费体积m3', + `pallet_count` int unsigned DEFAULT NULL COMMENT '已分配总托盘数快照', + `volume_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '总材积重kg', + `actual_net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '总净重kg', + `measure_completed_at` datetime(3) DEFAULT NULL COMMENT '测量完成时间', + `inbounded_at` datetime(3) DEFAULT NULL COMMENT '入库完成时间', + `express_company_code` varchar(64) DEFAULT NULL COMMENT '快递公司编码快照', + `express_company_name` varchar(128) DEFAULT NULL COMMENT '快递公司名称快照', + `express_tracking_no` varchar(128) DEFAULT NULL COMMENT '快递单号快照', + `public_remark` varchar(1000) DEFAULT NULL COMMENT '客户可见备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `master_order_id` bigint unsigned GENERATED ALWAYS AS ((case when ((`inbound_role` = _utf8mb4'MASTER') and (`deleted` = 0)) then `order_id` else NULL end)) STORED COMMENT '仅用于约束有效主单订单唯一性', + `active_remainder_root_id` bigint unsigned GENERATED ALWAYS AS ((case when ((`inbound_role` = _utf8mb4'CHILD') and (`split_purpose` = _utf8mb4'REMAINDER') and (`split_status` = _utf8mb4'NOT_SPLIT') and (`deleted` = 0)) then `root_inbound_id` else NULL end)) STORED COMMENT '有效余量唯一约束键;历史已完成分片为空', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_code` (`inbound_code`), + UNIQUE KEY `uk_inbound_master_order` (`tenant_id`,`master_order_id`), + UNIQUE KEY `uk_inbound_parent_split_sequence` (`tenant_id`,`parent_inbound_id`,`split_sequence`), + UNIQUE KEY `uk_inbound_one_active_remainder` (`tenant_id`,`active_remainder_root_id`), + KEY `idx_inbound_process_time` (`tenant_id`,`process_status`,`created_at`,`id`), + KEY `idx_inbound_measure_time` (`tenant_id`,`measure_review_status`,`created_at`,`id`), + KEY `idx_inbound_fee_time` (`tenant_id`,`fee_review_status`,`created_at`,`id`), + KEY `idx_inbound_warehouse_status` (`tenant_id`,`warehouse_id`,`process_status`,`created_at`), + KEY `idx_inbound_customer_time` (`tenant_id`,`customer_id`,`created_at`), + KEY `idx_inbound_company_time` (`tenant_id`,`company_id`,`created_at`), + KEY `idx_inbound_arrival` (`tenant_id`,`expected_arrival_at`), + KEY `idx_inbound_destination` (`tenant_id`,`destination_code`,`created_at`), + KEY `idx_inbound_channel` (`tenant_id`,`channel_code`,`created_at`), + KEY `fk_inbound_task` (`task_id`), + KEY `idx_inbound_root_role` (`tenant_id`,`root_inbound_id`,`inbound_role`,`created_at`,`id`), + KEY `fk_inbound_parent_order` (`parent_inbound_id`), + KEY `fk_inbound_root_order` (`root_inbound_id`), + KEY `idx_inbound_smart_loading` (`warehouse_id`,`process_status`,`channel_code`,`expected_arrival_at`,`id`), + CONSTRAINT `fk_inbound_parent_order` FOREIGN KEY (`parent_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_root_order` FOREIGN KEY (`root_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_task` FOREIGN KEY (`task_id`) REFERENCES `fl_fulfillment_task` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='二期头程入库单聚合根和列表查询快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_outbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_outbox` ( + `id` bigint unsigned NOT NULL COMMENT '领域事件全局ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '事件所属客户ID和数据隔离键', + `aggregate_type` varchar(32) NOT NULL DEFAULT 'INBOUND' COMMENT '聚合类型', + `aggregate_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `event_type` varchar(64) NOT NULL COMMENT '事件类型', + `event_key` varchar(160) DEFAULT NULL COMMENT '费用来源事件幂等键;历史事件允许为空', + `event_version` int unsigned NOT NULL DEFAULT '1' COMMENT '事件信封版本', + `aggregate_sequence` int unsigned DEFAULT NULL COMMENT '同一费用来源的单调版本序号', + `payload_hash` varchar(71) DEFAULT NULL COMMENT '事件规范化负载SHA-256;标准跨区事件含sha256:前缀', + `payload_json` longtext NOT NULL COMMENT '事件负载快照;文本类型保留跨区事件摘要所依赖的数值词法', + `publish_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '事件发布状态:PENDING待发布、PUBLISHED已发布、FAILED发布失败', + `retry_count` int NOT NULL DEFAULT '0' COMMENT '重试次数', + `next_retry_at` datetime(3) DEFAULT NULL COMMENT '下次重试时间', + `published_at` datetime(3) DEFAULT NULL COMMENT '发布时间', + `locked_at` datetime(3) DEFAULT NULL COMMENT 'Relay抢占租约时间', + `locked_by` varchar(64) DEFAULT NULL COMMENT 'Relay抢占实例ID', + `last_error` varchar(500) DEFAULT NULL COMMENT '最近一次投递失败摘要,不记录令牌', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_outbox_event_key` (`event_key`), + KEY `idx_inbound_outbox_publish` (`publish_status`,`next_retry_at`,`created_at`), + KEY `idx_inbound_outbox_finance_relay` (`publish_status`,`next_retry_at`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库事务Outbox事件表'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_pallet_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_pallet_allocation` ( + `id` bigint unsigned NOT NULL COMMENT '头程托盘分配引用ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `allocation_no` int unsigned NOT NULL COMMENT '入库单内分配序号', + `block_id` bigint unsigned NOT NULL COMMENT 'Warehouse整票连续库位块ID', + `slot_no` int unsigned NOT NULL COMMENT '连续块内稳定槽位序号', + `weight_result_id` bigint unsigned DEFAULT NULL COMMENT '已绑定称重结果ID;预留空槽为空', + `pallet_sequence` int unsigned DEFAULT NULL COMMENT '已绑定称重托盘在整票内的稳定顺序;空槽为空', + `warehouse_id` bigint unsigned NOT NULL COMMENT '仓库服务仓库ID', + `warehouse_resource_tenant_id` bigint unsigned NOT NULL COMMENT '平台公共仓储资源固定使用 0;tenant_id 仍是客户隔离键', + `pallet_id` bigint unsigned NOT NULL COMMENT '仓库服务托盘ID', + `pallet_code` varchar(50) NOT NULL COMMENT '托盘编码快照', + `pallet_capacity_cbm` decimal(18,4) NOT NULL COMMENT '托盘可用容积快照', + `allocated_volume_cbm` decimal(18,4) NOT NULL COMMENT '本托盘分配体积', + `allocated_package_count` int unsigned DEFAULT NULL COMMENT '本托盘分配箱数', + `picked_package_count` int unsigned NOT NULL DEFAULT '0' COMMENT '已拣货箱数', + `location_id` bigint unsigned NOT NULL COMMENT '仓库服务库位ID', + `location_code` varchar(50) NOT NULL COMMENT '库位编码快照', + `shared_overflow` tinyint(1) NOT NULL DEFAULT '0' COMMENT '普通连续位不足时是否使用共享A0', + `reservation_id` bigint unsigned DEFAULT NULL COMMENT '仓库预占资源唯一ID,A0共享场景用于区分托盘', + `slot_status` varchar(24) NOT NULL DEFAULT 'RESERVED_EMPTY' COMMENT '槽位状态:RESERVED_EMPTY、BOUND、TRANSFERRED、RELEASED', + `reservation_no` varchar(64) NOT NULL COMMENT '仓库库位预占单号', + `allocation_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'RESERVED' COMMENT '托盘库位分配状态:RESERVED已预占、CONFIRMED已确认、TRANSFERRED已转移、RELEASED已释放', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_pallet_allocation_no` (`tenant_id`,`inbound_id`,`allocation_no`), + UNIQUE KEY `uk_pallet_allocation_slot` (`tenant_id`,`block_id`,`slot_no`), + UNIQUE KEY `uk_pallet_allocation_weight` (`tenant_id`,`weight_result_id`), + KEY `idx_allocation_location` (`tenant_id`,`warehouse_id`,`location_id`,`allocation_status`), + KEY `fk_allocation_inbound` (`inbound_id`), + KEY `idx_allocation_reservation` (`reservation_id`), + CONSTRAINT `fk_allocation_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='头程侧托盘、库位和仓库预占结果引用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_pickup_snapshot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_pickup_snapshot` ( + `id` bigint unsigned NOT NULL COMMENT '提货信息快照ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `pickup_method` varchar(24) DEFAULT NULL COMMENT '提货方式', + `pickup_at` datetime(3) DEFAULT NULL COMMENT '提货时间', + `contact_name` varchar(64) DEFAULT NULL COMMENT '提货联系人', + `contact_phone` varchar(32) DEFAULT NULL COMMENT '提货联系人电话', + `contact_email` varchar(128) DEFAULT NULL COMMENT '提货联系人邮箱', + `country_code` char(2) DEFAULT NULL COMMENT '国家二字码', + `province` varchar(64) DEFAULT NULL COMMENT '省或州', + `city` varchar(64) DEFAULT NULL COMMENT '城市', + `district` varchar(64) DEFAULT NULL COMMENT '区县', + `address_line` varchar(512) DEFAULT NULL COMMENT '提货详细地址', + `postal_code` varchar(20) DEFAULT NULL COMMENT '提货邮编', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_pickup_inbound` (`tenant_id`,`inbound_id`), + KEY `fk_pickup_inbound` (`inbound_id`), + CONSTRAINT `fk_pickup_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单提货信息不可变快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_split_batch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_split_batch` ( + `id` bigint unsigned NOT NULL COMMENT '拆分批次ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `parent_inbound_id` bigint unsigned NOT NULL COMMENT '主入仓单ID', + `source_inbound_id` bigint unsigned DEFAULT NULL COMMENT '本批次实际消耗的MASTER或REMAINDER分片ID', + `operation_id` varchar(64) NOT NULL COMMENT '业务操作幂等号', + `idempotency_key` varchar(128) NOT NULL COMMENT '请求幂等键', + `expected_parent_version` int NOT NULL COMMENT '操作时主单乐观锁版本', + `package_count` int unsigned NOT NULL COMMENT '本批次拆分箱数', + `loaded_child_inbound_id` bigint unsigned DEFAULT NULL COMMENT '本批次实装子单ID', + `remainder_child_inbound_id` bigint unsigned DEFAULT NULL COMMENT '本批次余量子单ID', + `loaded_package_count` int unsigned NOT NULL DEFAULT '0' COMMENT '本批次实装箱数', + `remaining_package_count` int unsigned NOT NULL DEFAULT '0' COMMENT '本批次未装箱数', + `loading_plan_id` bigint unsigned DEFAULT NULL COMMENT '关联装柜计划/柜次', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '关联柜次标识(兼容查询)', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PREPARED' COMMENT '拆分批次状态:PREPARED已准备、APPLIED已生效、CANCELLED已取消', + `remark` varchar(500) DEFAULT NULL COMMENT '拆分原因或备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '拆分批次创建时间', + `applied_at` datetime(3) DEFAULT NULL COMMENT '批次生效时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_split_operation` (`tenant_id`,`operation_id`), + UNIQUE KEY `uk_inbound_split_idempotency` (`tenant_id`,`parent_inbound_id`,`idempotency_key`), + UNIQUE KEY `uk_inbound_split_source_once` (`tenant_id`,`source_inbound_id`), + KEY `idx_inbound_split_parent` (`tenant_id`,`parent_inbound_id`,`created_at`,`id`), + KEY `fk_inbound_split_parent` (`parent_inbound_id`), + KEY `fk_inbound_split_loaded_child` (`loaded_child_inbound_id`), + KEY `fk_inbound_split_source` (`source_inbound_id`), + KEY `fk_inbound_split_remainder_child` (`remainder_child_inbound_id`), + KEY `idx_inbound_split_loading_plan` (`tenant_id`,`loading_plan_id`,`container_booking_id`,`status`,`id`), + CONSTRAINT `fk_inbound_split_loaded_child` FOREIGN KEY (`loaded_child_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_split_parent` FOREIGN KEY (`parent_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_split_remainder_child` FOREIGN KEY (`remainder_child_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_split_source` FOREIGN KEY (`source_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_inbound_split_package` CHECK ((`package_count` > 0)), + CONSTRAINT `chk_inbound_split_status` CHECK ((`status` in (_utf8mb4'PREPARED',_utf8mb4'APPLIED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='主入仓单拆分批次;数量口径仅为箱数'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_split_detail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_split_detail` ( + `id` bigint unsigned NOT NULL COMMENT '部分锁定明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `parent_inbound_id` bigint unsigned NOT NULL COMMENT '主入库单ID', + `child_inbound_id` bigint unsigned DEFAULT NULL COMMENT '完成拆单后生成的二级子入库单ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '原订单货物明细ID,不建立跨库外键', + `source_package_count` int unsigned NOT NULL COMMENT '拆分前该明细总箱数快照', + `locked_package_count` int unsigned NOT NULL COMMENT '本次装柜锁定箱数', + `remaining_package_count` int unsigned GENERATED ALWAYS AS ((`source_package_count` - `locked_package_count`)) STORED COMMENT '锁定后剩余箱数,由来源箱数减锁定箱数生成', + `status` varchar(16) NOT NULL DEFAULT 'LOCKED' COMMENT '分柜明细状态:LOCKED已锁定、COMPLETED已完成拆分', + `operation_id` varchar(128) NOT NULL COMMENT '部分锁定操作幂等号', + `created_by` bigint unsigned NOT NULL COMMENT '创建部分锁定明细的操作人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建操作人姓名快照', + `completed_by` bigint unsigned DEFAULT NULL COMMENT '完成拆分的操作人ID', + `completed_by_name` varchar(64) DEFAULT NULL COMMENT '完成操作人姓名快照', + `completed_at` datetime(3) DEFAULT NULL COMMENT '部分拆分完成时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '部分锁定明细创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '部分锁定明细最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_split_parent_detail` (`tenant_id`,`parent_inbound_id`,`inbound_detail_id`), + UNIQUE KEY `uk_inbound_split_operation` (`operation_id`), + UNIQUE KEY `uk_inbound_split_child_detail` (`tenant_id`,`child_inbound_id`,`inbound_detail_id`), + KEY `idx_inbound_split_status` (`tenant_id`,`parent_inbound_id`,`status`), + KEY `fk_inbound_split_detail_parent` (`parent_inbound_id`), + KEY `fk_inbound_split_detail_child` (`child_inbound_id`), + CONSTRAINT `fk_inbound_split_detail_child` FOREIGN KEY (`child_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_split_detail_parent` FOREIGN KEY (`parent_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_inbound_split_completion` CHECK ((((`status` = _utf8mb4'LOCKED') and (`child_inbound_id` is null) and (`completed_at` is null)) or ((`status` = _utf8mb4'COMPLETED') and (`child_inbound_id` is not null) and (`completed_at` is not null)))), + CONSTRAINT `chk_inbound_split_partial` CHECK (((`source_package_count` > 1) and (`locked_package_count` > 0) and (`locked_package_count` < `source_package_count`))), + CONSTRAINT `chk_legacy_inbound_split_status` CHECK ((`status` in (_utf8mb4'LOCKED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='按箱数部分锁定及剩余箱数生成二级子入库单的不可变契约'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_split_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_split_history` ( + `id` bigint unsigned NOT NULL COMMENT '拆分历史ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `split_batch_id` bigint unsigned NOT NULL COMMENT '拆分批次ID', + `operation_id` varchar(64) NOT NULL COMMENT '历史操作幂等号', + `action_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '拆分动作:CREATE创建批次、APPLY生效、CANCEL取消', + `before_snapshot` json DEFAULT NULL COMMENT '操作前快照', + `after_snapshot` json NOT NULL COMMENT '操作后快照', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `operation_reason` varchar(500) DEFAULT NULL COMMENT '操作原因', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '不可变拆分历史创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_split_history_operation` (`tenant_id`,`operation_id`), + KEY `idx_inbound_split_history` (`tenant_id`,`split_batch_id`,`created_at`,`id`), + KEY `fk_inbound_split_history_batch` (`split_batch_id`), + CONSTRAINT `fk_inbound_split_history_batch` FOREIGN KEY (`split_batch_id`) REFERENCES `fl_inbound_split_batch` (`id`), + CONSTRAINT `chk_inbound_split_action` CHECK ((`action_type` in (_utf8mb4'CREATE',_utf8mb4'APPLY',_utf8mb4'CANCEL'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='不可变主子入仓单拆分审计历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_split_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_split_item` ( + `id` bigint unsigned NOT NULL COMMENT '拆分明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `split_batch_id` bigint unsigned NOT NULL COMMENT '拆分批次ID', + `parent_inbound_id` bigint unsigned NOT NULL COMMENT '主入仓单ID', + `child_inbound_id` bigint unsigned NOT NULL COMMENT '子入仓单ID', + `line_no` int unsigned NOT NULL COMMENT '同一拆分批次内的行号', + `source_inbound_detail_id` bigint unsigned DEFAULT NULL COMMENT '订单货物明细逻辑ID', + `source_measurement_id` bigint unsigned NOT NULL COMMENT '来源测量批次ID', + `source_measurement_item_id` bigint unsigned NOT NULL COMMENT '来源测量箱规明细ID', + `package_count` int unsigned NOT NULL COMMENT '分配给子单的箱数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '拆分数量台账创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_split_batch_line` (`tenant_id`,`split_batch_id`,`line_no`), + UNIQUE KEY `uk_inbound_split_batch_source_child` (`tenant_id`,`split_batch_id`,`source_measurement_item_id`,`child_inbound_id`), + KEY `idx_inbound_split_detail` (`tenant_id`,`source_inbound_detail_id`,`created_at`), + KEY `fk_inbound_split_item_batch` (`split_batch_id`), + KEY `fk_inbound_split_item_parent` (`parent_inbound_id`), + KEY `fk_inbound_split_item_child` (`child_inbound_id`), + KEY `fk_inbound_split_item_measurement` (`source_measurement_id`), + KEY `fk_inbound_split_item_measure_item` (`source_measurement_item_id`), + KEY `idx_inbound_split_candidate` (`tenant_id`,`parent_inbound_id`,`source_inbound_detail_id`), + CONSTRAINT `fk_inbound_split_item_batch` FOREIGN KEY (`split_batch_id`) REFERENCES `fl_inbound_split_batch` (`id`), + CONSTRAINT `fk_inbound_split_item_child` FOREIGN KEY (`child_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_split_item_measure_item` FOREIGN KEY (`source_measurement_item_id`) REFERENCES `fl_inbound_measurement_item` (`id`), + CONSTRAINT `fk_inbound_split_item_measurement` FOREIGN KEY (`source_measurement_id`) REFERENCES `fl_inbound_measurement` (`id`), + CONSTRAINT `fk_inbound_split_item_parent` FOREIGN KEY (`parent_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_inbound_split_item_package` CHECK ((`package_count` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='主子入仓单拆分数量台账'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_status_history` ( + `id` bigint unsigned NOT NULL COMMENT '入库状态历史ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `from_status` varchar(24) DEFAULT NULL COMMENT '变更前状态', + `to_status` varchar(24) NOT NULL COMMENT '变更后状态', + `action` varchar(32) NOT NULL COMMENT '触发动作', + `reason` varchar(1000) DEFAULT NULL COMMENT '变更原因', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `occurred_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '发生时间', + PRIMARY KEY (`id`), + KEY `idx_inbound_history_time` (`tenant_id`,`inbound_id`,`occurred_at`), + KEY `fk_history_inbound` (`inbound_id`), + CONSTRAINT `fk_history_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单流程状态不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_transport_snapshot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_transport_snapshot` ( + `id` bigint unsigned NOT NULL COMMENT '运输信息快照ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `loading_status` varchar(24) DEFAULT NULL COMMENT '配载状态快照', + `container_no` varchar(64) DEFAULT NULL COMMENT '集装箱号', + `cabinet_no` varchar(64) DEFAULT NULL COMMENT '柜号或内部柜单号', + `vessel_name` varchar(128) DEFAULT NULL COMMENT '船名', + `voyage_no` varchar(64) DEFAULT NULL COMMENT '航次', + `sailing_at` datetime(3) DEFAULT NULL COMMENT '开船时间', + `port_arrival_at` datetime(3) DEFAULT NULL COMMENT '到港时间', + `source_updated_at` datetime(3) DEFAULT NULL COMMENT '上游数据更新时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_transport_inbound` (`tenant_id`,`inbound_id`), + KEY `idx_transport_container` (`tenant_id`,`container_no`), + KEY `idx_transport_cabinet` (`tenant_id`,`cabinet_no`), + KEY `idx_transport_loading` (`tenant_id`,`loading_status`,`sailing_at`), + KEY `fk_transport_inbound` (`inbound_id`), + CONSTRAINT `fk_transport_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单关联运输信息只读快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_weight_result`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_weight_result` ( + `id` bigint unsigned NOT NULL COMMENT 'OCR重量结果ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `file_id` bigint unsigned NOT NULL COMMENT '称重图片文件ID', + `pallet_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT 'Warehouse托盘ID', + `pallet_code` varchar(50) NOT NULL DEFAULT '' COMMENT '托盘编码快照', + `pallet_type` varchar(32) NOT NULL DEFAULT '' COMMENT '托盘类型快照', + `pallet_capacity_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '托盘容量CBM快照', + `pallet_tare_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '托盘皮重KG快照', + `ocr_provider` varchar(64) DEFAULT NULL COMMENT 'OCR服务商编码', + `ocr_raw_text` varchar(1000) DEFAULT NULL COMMENT 'OCR原始文本', + `ocr_weight_value` decimal(18,3) DEFAULT NULL COMMENT 'OCR识别原始重量值', + `ocr_weight_unit` varchar(8) DEFAULT NULL COMMENT 'OCR识别原始单位', + `confidence` decimal(6,5) DEFAULT NULL COMMENT '识别置信度', + `adjusted_weight_value` decimal(18,3) DEFAULT NULL COMMENT '人工修正后的原单位重量', + `adjusted_weight_unit` varchar(8) DEFAULT NULL COMMENT '人工修正后的单位', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '确认时统一换算后的含托盘毛重kg', + `net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '确认毛重扣除托盘皮重后的货物净重kg', + `recognition_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '重量识别状态:PENDING待识别、PENDING_CONFIRM待确认、NEEDS_MANUAL需人工录入、CONFIRMED已确认', + `adjustment_reason` varchar(500) DEFAULT NULL COMMENT '人工修正原因', + `adjusted_by` bigint unsigned DEFAULT NULL COMMENT '修正人ID', + `adjusted_at` datetime(3) DEFAULT NULL COMMENT '修正时间', + `confirmed_by` bigint unsigned DEFAULT NULL COMMENT '确认人ID', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '确认时间', + `created_by` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL DEFAULT '0' COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_weight_inbound_file` (`tenant_id`,`inbound_id`,`file_id`), + KEY `idx_weight_inbound_status` (`tenant_id`,`inbound_id`,`recognition_status`), + KEY `fk_weight_inbound` (`inbound_id`), + KEY `idx_weight_inbound_pallet` (`tenant_id`,`inbound_id`,`pallet_id`), + CONSTRAINT `fk_weight_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='称重图片OCR原值、人工修正值和确认重量'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_weight_revision`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_weight_revision` ( + `id` bigint unsigned NOT NULL COMMENT 'OCR重量修订记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `weight_result_id` bigint unsigned NOT NULL COMMENT 'OCR重量结果ID', + `revision_no` int unsigned NOT NULL COMMENT '结果版本号,与乐观锁版本一致', + `action` varchar(24) NOT NULL COMMENT '动作:CORRECT或CONFIRM', + `before_weight_value` decimal(18,3) DEFAULT NULL COMMENT '变更前原单位重量', + `before_weight_unit` varchar(8) DEFAULT NULL COMMENT '变更前单位', + `after_weight_value` decimal(18,3) DEFAULT NULL COMMENT '变更后原单位重量', + `after_weight_unit` varchar(8) DEFAULT NULL COMMENT '变更后单位', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '确认时统一换算后的含托盘毛重kg', + `net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '确认毛重扣除托盘皮重后的货物净重kg', + `reason` varchar(500) DEFAULT NULL COMMENT '人工修正原因', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `operated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_weight_revision_no` (`tenant_id`,`weight_result_id`,`revision_no`), + KEY `idx_weight_revision_time` (`tenant_id`,`inbound_id`,`operated_at`), + KEY `fk_weight_revision_inbound` (`inbound_id`), + KEY `fk_weight_revision_result` (`weight_result_id`), + CONSTRAINT `fk_weight_revision_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_weight_revision_result` FOREIGN KEY (`weight_result_id`) REFERENCES `fl_inbound_weight_result` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='OCR重量人工修正和确认的不可变版本历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_cabinet_evidence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_cabinet_evidence` ( + `id` bigint unsigned NOT NULL COMMENT '柜次证据记录ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '证据唯一归属柜次ID', + `source_task_id` bigint unsigned NOT NULL COMMENT '上传来源PDA任务ID,仅用于审计', + `evidence_type` varchar(32) NOT NULL COMMENT '四步照片或带锁码照类型', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件ID', + `file_name` varchar(255) NOT NULL COMMENT '文件名称快照', + `seal_no` varchar(64) DEFAULT NULL COMMENT '带锁码照对应锁码', + `remark` varchar(1000) DEFAULT NULL COMMENT '证据备注', + `status` varchar(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '证据状态:ACTIVE有效、VOID作废', + `active_flag` tinyint unsigned DEFAULT '1' COMMENT '有效唯一标识;作废后置NULL', + `operation_key` varchar(128) NOT NULL COMMENT '任务范围内幂等操作键', + `request_hash` char(64) NOT NULL COMMENT '规范化请求SHA-256摘要', + `void_reason` varchar(500) DEFAULT NULL COMMENT '作废原因', + `voided_by` bigint unsigned DEFAULT NULL COMMENT '作废操作人ID', + `voided_by_name` varchar(128) DEFAULT NULL COMMENT '作废操作人名称快照', + `voided_at` datetime(3) DEFAULT NULL COMMENT '作废时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` bigint unsigned NOT NULL COMMENT '创建操作人ID', + `created_by_name` varchar(128) DEFAULT NULL COMMENT '创建操作人名称快照', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(128) DEFAULT NULL COMMENT '最后修改操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_cabinet_evidence_operation` (`source_task_id`,`operation_key`), + UNIQUE KEY `uk_cabinet_evidence_active` (`container_booking_id`,`evidence_type`,`active_flag`), + KEY `idx_cabinet_evidence_container` (`container_booking_id`,`status`), + KEY `idx_cabinet_evidence_seal` (`seal_no`,`active_flag`), + CONSTRAINT `fk_cabinet_evidence_booking` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `fk_cabinet_evidence_task` FOREIGN KEY (`source_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_cabinet_evidence_status` CHECK ((`status` in (_utf8mb4'ACTIVE',_utf8mb4'VOID'))), + CONSTRAINT `chk_cabinet_evidence_type` CHECK ((`evidence_type` in (_utf8mb4'PHOTO_STEP_1',_utf8mb4'PHOTO_STEP_2',_utf8mb4'PHOTO_STEP_3',_utf8mb4'PHOTO_STEP_4',_utf8mb4'SEAL'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次物理装柜证据;task仅记录来源审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_completion_checkpoint`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_completion_checkpoint` ( + `command_id` bigint unsigned NOT NULL COMMENT '可靠装柜完成命令ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '入库单客户ID', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `owner_sequence` int unsigned NOT NULL COMMENT '稳定处理顺序', + `checkpoint_stage` varchar(24) NOT NULL COMMENT '入库单处理检查点', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '检查点创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '检查点更新时间', + PRIMARY KEY (`command_id`,`tenant_id`,`inbound_id`), + KEY `idx_loading_completion_owner` (`command_id`,`owner_sequence`), + CONSTRAINT `fk_loading_completion_checkpoint_command` FOREIGN KEY (`command_id`) REFERENCES `fl_loading_completion_command` (`id`), + CONSTRAINT `chk_loading_completion_checkpoint` CHECK ((`checkpoint_stage` in (_utf8mb4'READY',_utf8mb4'SETTLED',_utf8mb4'INBOUND_COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA装柜完成按入库单恢复检查点'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_completion_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_completion_command` ( + `id` bigint unsigned NOT NULL COMMENT '可靠装柜完成命令ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT 'PDA任务ID', + `operation_id` varchar(128) NOT NULL COMMENT '客户端全局幂等操作ID', + `request_hash` char(64) NOT NULL COMMENT '规范化请求摘要', + `command_status` varchar(16) NOT NULL COMMENT 'PROCESSING、RETRYABLE、FAILED、COMPLETED', + `expected_task_version` int unsigned NOT NULL COMMENT '受理时客户端任务版本', + `remark` varchar(500) DEFAULT NULL COMMENT '完成备注', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `attempt_count` int unsigned NOT NULL DEFAULT '0' COMMENT 'worker认领次数', + `next_retry_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '下次处理时间', + `lease_owner` varchar(128) DEFAULT NULL COMMENT 'worker租约持有者', + `lease_until` datetime(3) DEFAULT NULL COMMENT 'worker租约截止时间', + `failure_stage` varchar(40) DEFAULT NULL COMMENT '脱敏失败阶段', + `failure_code` varchar(32) DEFAULT NULL COMMENT '下游或业务错误码', + `failure_request_id` varchar(64) DEFAULT NULL COMMENT '下游请求ID', + `failure_trace_id` varchar(64) DEFAULT NULL COMMENT '下游链路ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `completed_at` datetime(3) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_completion_operation` (`operation_id`), + KEY `idx_loading_completion_dispatch` (`command_status`,`next_retry_at`,`lease_until`), + KEY `fk_loading_completion_task` (`pick_task_id`), + CONSTRAINT `fk_loading_completion_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_completion_status` CHECK ((`command_status` in (_utf8mb4'PROCESSING',_utf8mb4'RETRYABLE',_utf8mb4'FAILED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA装柜完成可靠异步命令'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_evidence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_evidence` ( + `id` bigint unsigned NOT NULL COMMENT '装柜证据记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '关联入库单逻辑ID', + `evidence_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'PHOTO_STEP_1空仓/PHOTO_STEP_2半仓/PHOTO_STEP_3满仓/PHOTO_STEP_4锁仓/SEAL带锁码照', + `file_id` bigint unsigned DEFAULT NULL COMMENT 'File 服务逻辑文件ID', + `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '上传时文件名称快照', + `seal_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '锁码文本;带锁码照必填,客户不可见', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '证据补充说明', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + `created_by` bigint unsigned NOT NULL COMMENT '上传证据的操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '上传证据的操作人姓名快照', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '证据记录创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '证据记录最后更新时间', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '证据状态:ACTIVE有效、VOID已作废;错误照片保留记录不硬删除', + `void_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '照片作废原因', + `voided_by` bigint unsigned DEFAULT NULL COMMENT '执行作废的平台操作人ID', + `voided_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '执行作废的平台操作人姓名快照', + `voided_at` datetime(3) DEFAULT NULL COMMENT '照片作废时间', + PRIMARY KEY (`id`), + KEY `idx_loading_evidence_time` (`tenant_id`,`inbound_id`,`updated_at`), + KEY `fk_loading_evidence_inbound` (`inbound_id`), + KEY `idx_loading_evidence_type` (`tenant_id`,`inbound_id`,`evidence_type`,`status`), + KEY `idx_loading_evidence_seal` (`tenant_id`,`seal_no`,`status`), + CONSTRAINT `fk_loading_evidence_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订单装柜空仓/半仓/满仓/锁仓/带锁码照证据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_operation` ( + `id` bigint unsigned NOT NULL COMMENT '装柜写操作记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '操作目标入库单逻辑ID', + `operator_id` bigint unsigned NOT NULL COMMENT '执行写操作的平台用户ID', + `operation` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '装柜或证据写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端幂等键,同一操作重试复用', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '幂等处理状态:PROCESSING处理中、SUCCESS成功、FAILED失败', + `result_json` json DEFAULT NULL COMMENT '成功结果或失败信息JSON快照,用于幂等重放', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作声明创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '操作完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_operation` (`tenant_id`,`inbound_id`,`operator_id`,`operation`,`idempotency_key`), + KEY `idx_loading_operation_time` (`tenant_id`,`inbound_id`,`created_at`), + KEY `fk_loading_operation_inbound` (`inbound_id`), + CONSTRAINT `fk_loading_operation_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='装柜与派送写操作幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pallet_label`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pallet_label` ( + `id` bigint unsigned NOT NULL COMMENT '散货托盘标签ID(雪花ID)', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID', + `loading_plan_item_id` bigint unsigned NOT NULL COMMENT '标签归属装柜明细ID', + `account_id` bigint unsigned NOT NULL COMMENT '客户ID快照', + `inbound_id` bigint unsigned NOT NULL COMMENT '入仓单ID快照', + `inbound_code` varchar(40) NOT NULL COMMENT '入仓码快照', + `container_no` varchar(64) NOT NULL COMMENT '真实集装箱号快照', + `destination_warehouse_code` varchar(64) NOT NULL COMMENT 'FBA仓编码快照', + `destination_warehouse_name` varchar(128) DEFAULT NULL COMMENT 'FBA仓名称快照', + `pallet_index` int unsigned NOT NULL COMMENT '当前柜当前FBA仓内从1开始的序号', + `pallet_code` varchar(128) NOT NULL COMMENT '托盘码:集装箱号-FBA仓编码-三位序号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '生成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pallet_code` (`pallet_code`), + UNIQUE KEY `uk_loading_pallet_index` (`loading_plan_id`,`destination_warehouse_code`,`pallet_index`), + KEY `idx_loading_pallet_item` (`loading_plan_item_id`,`pallet_index`), + KEY `idx_loading_pallet_inbound` (`account_id`,`inbound_id`), + CONSTRAINT `fk_loading_pallet_item` FOREIGN KEY (`loading_plan_item_id`) REFERENCES `fl_loading_plan_item` (`id`), + CONSTRAINT `fk_loading_pallet_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `chk_loading_pallet_index` CHECK ((`pallet_index` between 1 and 999)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='散货按柜号和FBA仓冻结的可打印托盘码'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_assignment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_assignment` ( + `pick_task_id` bigint unsigned NOT NULL COMMENT '柜次PDA拣货任务ID;同一任务仅保留一名作业员', + `assignee_id` bigint unsigned NOT NULL COMMENT '当前唯一作业员ID', + `assignee_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '当前作业员姓名快照', + `assigned_by` bigint unsigned NOT NULL COMMENT '领取任务的作业员或执行分配的平台用户ID', + `assigned_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '领取或分配操作人姓名快照', + `assignment_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '分配方式:CLAIMED作业员领取、ASSIGNED平台指派', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,防止多人并发领取或覆盖', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '任务领取或分配时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '作业员分配最后更新时间', + PRIMARY KEY (`pick_task_id`), + KEY `idx_loading_pick_assignee` (`assignee_id`,`updated_at`), + CONSTRAINT `fk_loading_pick_assignment_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_pick_assignment_type` CHECK ((`assignment_type` in (_utf8mb4'CLAIMED',_utf8mb4'ASSIGNED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次PDA任务领取与作业员分配'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_history` ( + `id` bigint unsigned NOT NULL COMMENT 'PDA拣货操作历史ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT 'PDA拣货任务ID', + `pick_item_id` bigint unsigned NOT NULL COMMENT 'PDA拣货明细ID', + `operation_id` varchar(128) NOT NULL COMMENT '客户端幂等操作号', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '完整批量请求内容SHA-256摘要', + `action_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PICK' COMMENT '拣货动作:PICK正常拣货、PARTIAL部分拣货、SKIP跳拣', + `picked_package_count` int unsigned NOT NULL COMMENT '本次拣货箱数', + `operation_reason` varchar(500) DEFAULT NULL COMMENT '部分拣货或跳拣原因', + `operator_id` bigint unsigned NOT NULL COMMENT '执行PDA拣货操作的作业员ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '作业员姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '不可变拣货操作历史创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pick_history_operation` (`operation_id`), + KEY `idx_loading_pick_history_item` (`pick_item_id`,`created_at`), + KEY `fk_loading_pick_history_task` (`pick_task_id`), + CONSTRAINT `fk_loading_pick_history_item` FOREIGN KEY (`pick_item_id`) REFERENCES `fl_loading_pick_item` (`id`), + CONSTRAINT `fk_loading_pick_history_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA拣货幂等和操作审计历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_item` ( + `id` bigint unsigned NOT NULL COMMENT 'PDA拣货明细ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT 'PDA拣货任务ID', + `loading_plan_item_id` bigint unsigned NOT NULL COMMENT '装柜计划明细ID', + `inbound_id` bigint unsigned NOT NULL COMMENT '父入库单ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '订单货物明细ID', + `planned_package_count` int unsigned NOT NULL COMMENT '计划拣货箱数;上层拆分按业务规则向上取整', + `picked_package_count` int unsigned NOT NULL DEFAULT '0' COMMENT '已拣货箱数', + `item_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '拣货明细状态:PENDING待拣、PICKING拣货中、PICKED已拣完、PARTIAL部分拣货、SKIPPED跳拣', + `release_mode` varchar(10) DEFAULT NULL COMMENT 'AUTO按比例释放,MANUAL按人工选择释放', + `release_location_ids` json DEFAULT NULL COMMENT '人工选择释放库位ID;空数组表示明确释放0个', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'PDA拣货明细创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'PDA拣货明细最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pick_item_plan_item` (`loading_plan_item_id`), + KEY `idx_loading_pick_item_task` (`pick_task_id`,`item_status`,`id`), + CONSTRAINT `fk_loading_pick_item_plan_item` FOREIGN KEY (`loading_plan_item_id`) REFERENCES `fl_loading_plan_item` (`id`), + CONSTRAINT `fk_loading_pick_item_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_pick_item_count` CHECK ((`picked_package_count` <= `planned_package_count`)), + CONSTRAINT `chk_loading_pick_item_planned` CHECK ((`planned_package_count` > 0)), + CONSTRAINT `chk_loading_pick_item_status` CHECK ((`item_status` in (_utf8mb4'PENDING',_utf8mb4'PICKING',_utf8mb4'PICKED',_utf8mb4'PARTIAL',_utf8mb4'SKIPPED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA装柜拣货明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_item_assignment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_item_assignment` ( + `pick_item_id` bigint unsigned NOT NULL COMMENT 'PDA拣货明细ID,同时作为本表主键', + `assignee_id` bigint unsigned NOT NULL COMMENT '当前领取或被分配的作业员ID', + `assignee_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '当前作业员姓名快照', + `assigned_by` bigint unsigned NOT NULL COMMENT '执行领取或分配操作的用户ID', + `assigned_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '执行领取或分配操作的用户姓名快照', + `assignment_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '分配类型:CLAIMED作业员领取、ASSIGNED管理员分配', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '明细分配记录创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '明细分配记录最后更新时间', + PRIMARY KEY (`pick_item_id`), + KEY `idx_loading_pick_item_assignee` (`assignee_id`,`updated_at`), + CONSTRAINT `fk_loading_pick_item_assignment_item` FOREIGN KEY (`pick_item_id`) REFERENCES `fl_loading_pick_item` (`id`), + CONSTRAINT `chk_loading_pick_item_assignment_type` CHECK ((`assignment_type` in (_utf8mb4'CLAIMED',_utf8mb4'ASSIGNED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA拣货明细领取与作业员分配'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_operation` ( + `id` bigint unsigned NOT NULL COMMENT 'PDA任务操作审计记录ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT '关联柜次PDA拣货任务ID', + `operation_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '全局唯一操作ID,用于幂等重放', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '完整批量请求或任务操作内容SHA-256摘要', + `action_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '动作类型:CLAIM领取、ASSIGN分配、REVIEW复核、BATCH批量提交', + `operator_id` bigint unsigned NOT NULL COMMENT '执行PDA任务操作的用户ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '不可变操作审计创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pick_operation_id` (`operation_id`), + KEY `idx_loading_pick_operation_task` (`pick_task_id`,`created_at`), + CONSTRAINT `fk_loading_pick_operation_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_pick_operation_action` CHECK ((`action_type` in (_gbk'CLAIM',_gbk'ASSIGN',_gbk'ITEM_CLAIM',_gbk'ITEM_ASSIGN',_gbk'REVIEW',_gbk'BATCH',_gbk'COMPLETE_LOADING'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次PDA任务级幂等审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_review`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_review` ( + `pick_task_id` bigint unsigned NOT NULL COMMENT '已完成的柜次PDA拣货任务ID', + `review_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'APPROVED' COMMENT '复核状态:APPROVED已通过;记录创建后不可修改或删除', + `reviewed_by` bigint unsigned NOT NULL COMMENT '执行完成复核的平台用户ID', + `reviewed_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '复核人姓名快照', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'PDA任务复核备注', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '复核记录版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '复核通过时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '复核记录最后更新时间;正常业务不允许更新', + PRIMARY KEY (`pick_task_id`), + KEY `idx_loading_pick_reviewer` (`reviewed_by`,`created_at`), + CONSTRAINT `fk_loading_pick_review_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_pick_review_status` CHECK ((`review_status` = _utf8mb4'APPROVED')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次PDA任务完成复核'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_task` ( + `id` bigint unsigned NOT NULL COMMENT 'PDA拣货任务ID', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '稳定柜次ID', + `cabinet_no` varchar(64) DEFAULT NULL COMMENT '稳定内部柜次号快照', + `container_no` varchar(64) DEFAULT NULL COMMENT '真实集装箱号;生成PDA任务前允许为空', + `task_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'LOADING' COMMENT 'PDA任务状态:LOADING拣货装柜中、COMPLETED已完成', + `started_by` bigint unsigned NOT NULL COMMENT '开始装柜人', + `started_by_name` varchar(64) DEFAULT NULL COMMENT '开始装柜人名称', + `started_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '开始时间', + `completed_by` bigint unsigned DEFAULT NULL COMMENT '完成装柜人', + `completed_by_name` varchar(64) DEFAULT NULL COMMENT '完成装柜人名称', + `completed_at` datetime(3) DEFAULT NULL COMMENT '完成时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pick_task_plan` (`loading_plan_id`), + UNIQUE KEY `uk_loading_pick_task_booking` (`container_booking_id`), + KEY `idx_loading_pick_container` (`container_no`,`task_status`,`started_at`), + CONSTRAINT `fk_loading_pick_task_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `chk_loading_pick_task_status` CHECK ((`task_status` in (_utf8mb4'LOADING',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA装柜拣货任务'; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `trg_loading_pick_task_before_update` BEFORE UPDATE ON `fl_loading_pick_task` FOR EACH ROW BEGIN IF OLD.task_status = 'COMPLETED' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '已完成PDA拣货任务不可修改'; END IF; IF NEW.loading_plan_id <> OLD.loading_plan_id OR NOT (NEW.container_booking_id <=> OLD.container_booking_id) OR NOT (NEW.cabinet_no <=> OLD.cabinet_no) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PDA拣货任务稳定归属不可修改'; END IF; IF NOT (OLD.task_status = 'LOADING' AND NEW.task_status IN ('LOADING', 'COMPLETED')) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PDA拣货任务状态只允许完成'; END IF; END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +DROP TABLE IF EXISTS `fl_loading_plan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_plan` ( + `id` bigint unsigned NOT NULL COMMENT '智能装柜计划ID(雪花ID)', + `plan_no` varchar(40) NOT NULL COMMENT '平台唯一装柜计划号', + `container_booking_id` bigint unsigned NOT NULL COMMENT '货柜预订ID', + `plan_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'EDITING' COMMENT '装柜计划状态:EDITING编辑中、LOADING装柜中、COMPLETED装柜完成;建议须经人工确认', + `push_idempotency_key` varchar(128) DEFAULT NULL COMMENT '推送预装幂等键', + `preload_pushed_by` bigint unsigned DEFAULT NULL COMMENT '推送预装操作人ID', + `preload_pushed_by_name` varchar(64) DEFAULT NULL COMMENT '推送预装操作人名称快照', + `preload_pushed_at` datetime(3) DEFAULT NULL COMMENT '开始装柜并进入LOADING的时间', + `preload_completed_by` bigint unsigned DEFAULT NULL COMMENT '预装完成操作人ID', + `preload_completed_by_name` varchar(64) DEFAULT NULL COMMENT '预装完成操作人名称快照', + `preload_completed_at` datetime(3) DEFAULT NULL COMMENT '预装完成时间', + `confirmed_by` bigint unsigned DEFAULT NULL COMMENT '确认操作人ID', + `confirmed_by_name` varchar(64) DEFAULT NULL COMMENT '确认操作人名称快照', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '确认时间', + `remark` varchar(500) DEFAULT NULL COMMENT '平台装柜计划备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_by_name` varchar(64) DEFAULT NULL COMMENT '最后修改人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '装柜计划最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_plan_no` (`plan_no`), + UNIQUE KEY `uk_loading_plan_booking` (`container_booking_id`), + UNIQUE KEY `uk_loading_plan_push_key` (`push_idempotency_key`), + KEY `idx_loading_plan_status` (`plan_status`,`updated_at`,`id`), + CONSTRAINT `fk_loading_plan_booking` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_loading_plan_status` CHECK ((`plan_status` in (_utf8mb4'EDITING',_utf8mb4'LOADING',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台智能装柜计划与唯一预装状态源'; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `trg_loading_plan_after_update` AFTER UPDATE ON `fl_loading_plan` FOR EACH ROW BEGIN IF OLD.plan_status = 'LOADING' AND NEW.plan_status = 'COMPLETED' THEN UPDATE fl_loading_plan_item SET frozen_at = COALESCE(frozen_at, NEW.confirmed_at, CURRENT_TIMESTAMP(3)), frozen_by = COALESCE(frozen_by, NEW.updated_by), updated_by = NEW.updated_by, updated_by_name = NEW.updated_by_name, version = version + 1 WHERE loading_plan_id = NEW.id AND deleted = 0; UPDATE fl_loading_pick_task SET task_status = 'COMPLETED', completed_by = NEW.updated_by, completed_by_name = NEW.updated_by_name, completed_at = CURRENT_TIMESTAMP(3), version = version + 1 WHERE loading_plan_id = NEW.id AND task_status = 'LOADING'; END IF; END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +DROP TABLE IF EXISTS `fl_loading_plan_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_plan_history` ( + `id` bigint unsigned NOT NULL COMMENT '装柜操作历史ID(雪花ID)', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '智能装柜计划ID', + `loading_plan_item_id` bigint unsigned DEFAULT NULL COMMENT '装柜计划明细ID', + `operation_id` varchar(128) NOT NULL COMMENT '操作幂等ID', + `action_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '动作类型:CREATE_PLAN创建计划、ADD_ITEM新增明细、ADJUST_ITEM调整明细、REMOVE_ITEM移除明细、START_LOADING开始装柜、COMPLETE_LOADING完成装柜、PICK_ITEM拣货', + `from_status` varchar(24) DEFAULT NULL COMMENT '变更前状态', + `to_status` varchar(24) DEFAULT NULL COMMENT '变更后状态', + `before_snapshot` json DEFAULT NULL COMMENT '变更前快照', + `after_snapshot` json DEFAULT NULL COMMENT '变更后快照', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `operation_reason` varchar(500) DEFAULT NULL COMMENT '操作原因', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_history_operation` (`operation_id`), + KEY `idx_loading_history_plan` (`loading_plan_id`,`created_at`,`id`), + KEY `idx_loading_history_item` (`loading_plan_item_id`,`created_at`,`id`), + CONSTRAINT `fk_loading_history_item` FOREIGN KEY (`loading_plan_item_id`) REFERENCES `fl_loading_plan_item` (`id`), + CONSTRAINT `fk_loading_history_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='智能装柜追加式不可变操作历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_plan_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_plan_item` ( + `id` bigint unsigned NOT NULL COMMENT '装柜计划明细ID(雪花ID)', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '智能装柜计划ID', + `account_id` bigint unsigned NOT NULL COMMENT '客户账号ID;装柜业务唯一客户归属字段', + `customer_name` varchar(128) NOT NULL COMMENT '客户名称快照', + `inbound_id` bigint unsigned NOT NULL COMMENT 'Firstleg入库单ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '订单货物或入库货物明细ID,不建立跨库外键', + `order_id` bigint unsigned NOT NULL COMMENT '订单服务订单ID快照,不建立跨库外键', + `order_no` varchar(32) NOT NULL COMMENT '订单号快照', + `inbound_code` varchar(40) NOT NULL COMMENT '入仓码快照', + `destination_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '目的仓ID快照', + `destination_warehouse_code` varchar(64) DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `sku_code` varchar(128) DEFAULT NULL COMMENT 'SKU编码快照', + `product_name_zh` varchar(255) DEFAULT NULL COMMENT '中文品名快照', + `product_name_en` varchar(255) DEFAULT NULL COMMENT '英文品名快照', + `product_image_file_id` bigint unsigned DEFAULT NULL COMMENT '产品图片File对象ID', + `product_image_url` varchar(1000) DEFAULT NULL COMMENT '产品图片访问地址快照', + `package_count` int unsigned NOT NULL COMMENT '本次装柜箱数', + `product_quantity` int unsigned DEFAULT NULL COMMENT '产品总数量', + `units_per_carton` int unsigned DEFAULT NULL COMMENT '每箱产品数', + `pallet_count` int unsigned DEFAULT NULL COMMENT '托盘数', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '本次装柜毛重kg', + `net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '本次装柜净重kg', + `dimensional_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '本次装柜材积重kg', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '本次装柜体积m3', + `fba_tracking_no` varchar(128) DEFAULT NULL COMMENT 'FBA追踪号快照', + `shipment_no` varchar(128) DEFAULT NULL COMMENT '货件编号快照', + `shipping_mark` varchar(500) DEFAULT NULL COMMENT '唛头快照', + `load_sequence` int unsigned NOT NULL DEFAULT '0' COMMENT '装柜顺序', + `position_snapshot` json DEFAULT NULL COMMENT '智能装柜位置与摆放结果快照', + `internal_remark` varchar(1000) DEFAULT NULL COMMENT '平台内部备注', + `customer_remark` varchar(1000) DEFAULT NULL COMMENT '客户备注快照', + `warehouse_remark` varchar(1000) DEFAULT NULL COMMENT '仓库备注快照', + `frozen_at` datetime(3) DEFAULT NULL COMMENT '装柜完成后的永久冻结时间', + `frozen_by` bigint unsigned DEFAULT NULL COMMENT '冻结操作人ID', + `removed_by` bigint unsigned DEFAULT NULL COMMENT '推送前逻辑删除操作人ID', + `removed_by_name` varchar(64) DEFAULT NULL COMMENT '推送前逻辑删除操作人名称快照', + `removed_at` datetime(3) DEFAULT NULL COMMENT '推送前逻辑删除时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '推送前逻辑删除标记;冻结后不可修改', + `active_inbound_detail_id` bigint unsigned GENERATED ALWAYS AS ((case when (`deleted` = 0) then `inbound_detail_id` else NULL end)) STORED COMMENT '未删除明细唯一锁;删除后返回NULL释放分配资格', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_by_name` varchar(64) DEFAULT NULL COMMENT '最后修改人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '装柜明细最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `unit_type` varchar(24) NOT NULL DEFAULT 'PACKAGE' COMMENT '分配单元:PACKAGE普通箱、SEALED_PALLET一件代发封托', + `pallet_id` bigint unsigned DEFAULT NULL COMMENT '一件代发封托ID;普通箱为空', + `pallet_no` varchar(32) DEFAULT NULL COMMENT '一件代发系统托盘码快照', + `indivisible` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否为不可拆整托单元', + `customer_service_remark` varchar(1000) DEFAULT NULL COMMENT '客服备注快照', + `active_assignment_key` varchar(96) GENERATED ALWAYS AS ((case when (`deleted` = 0) then concat((case when (`pallet_id` is null) then _utf8mb4'D:0' else concat(_utf8mb4'P:',`pallet_id`) end),_utf8mb4':',`inbound_detail_id`) else NULL end)) STORED COMMENT '普通明细或已封托托盘明细的有效唯一锁', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_item_plan_detail` (`loading_plan_id`,`active_inbound_detail_id`), + UNIQUE KEY `uk_loading_item_plan_assignment` (`loading_plan_id`,`active_assignment_key`), + KEY `idx_loading_item_active_detail` (`account_id`,`active_inbound_detail_id`), + KEY `idx_loading_item_plan` (`loading_plan_id`,`deleted`,`load_sequence`,`id`), + KEY `idx_loading_item_account` (`account_id`,`created_at`,`id`), + KEY `idx_loading_item_inbound` (`account_id`,`inbound_id`,`deleted`), + KEY `idx_loading_item_order` (`account_id`,`order_id`,`deleted`), + KEY `idx_loading_item_candidate` (`account_id`,`inbound_id`,`inbound_detail_id`,`deleted`), + KEY `idx_loading_item_pallet` (`pallet_id`,`deleted`), + CONSTRAINT `fk_loading_item_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `chk_loading_item_account` CHECK ((`account_id` > 0)), + CONSTRAINT `chk_loading_item_deleted` CHECK ((`deleted` in (0,1))), + CONSTRAINT `chk_loading_item_package` CHECK ((`package_count` > 0)), + CONSTRAINT `chk_loading_item_pallet` CHECK (((`pallet_count` is null) or (`pallet_count` >= 0))), + CONSTRAINT `chk_loading_item_product_quantity` CHECK (((`product_quantity` is null) or (`product_quantity` > 0))), + CONSTRAINT `chk_loading_item_units` CHECK (((`units_per_carton` is null) or (`units_per_carton` > 0))), + CONSTRAINT `chk_loading_item_volume` CHECK (((`volume_cbm` is null) or (`volume_cbm` >= 0))), + CONSTRAINT `chk_loading_item_weight` CHECK ((((`gross_weight_kg` is null) or (`gross_weight_kg` >= 0)) and ((`net_weight_kg` is null) or (`net_weight_kg` >= 0)) and ((`dimensional_weight_kg` is null) or (`dimensional_weight_kg` >= 0)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='智能装柜客户货物明细;客户归属仅在明细层'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_work_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_work_pallet` ( + `id` bigint unsigned NOT NULL COMMENT '一件代发现场作业托盘ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT 'PDA装柜拣货任务ID', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID快照', + `warehouse_id` bigint unsigned NOT NULL COMMENT '作业仓库ID', + `warehouse_pallet_id` bigint unsigned DEFAULT NULL COMMENT '仓库实物托盘ID;未绑定仓库资源时为空', + `pallet_code` varchar(64) NOT NULL COMMENT '现场托盘号', + `open_operation_id` varchar(128) NOT NULL COMMENT '开托幂等操作号', + `seal_operation_id` varchar(128) DEFAULT NULL COMMENT '封托幂等操作号', + `pallet_status` varchar(16) NOT NULL DEFAULT 'OPEN' COMMENT '托盘状态:OPEN打托中、SEALED已封托、CANCELLED已取消', + `created_by` bigint unsigned NOT NULL COMMENT '创建操作人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建操作人名称快照', + `sealed_by` bigint unsigned DEFAULT NULL COMMENT '封托操作人ID', + `sealed_by_name` varchar(64) DEFAULT NULL COMMENT '封托操作人名称快照', + `sealed_at` datetime(3) DEFAULT NULL COMMENT '封托时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_work_pallet_code` (`pick_task_id`,`pallet_code`), + UNIQUE KEY `uk_loading_work_pallet_open_operation` (`open_operation_id`), + UNIQUE KEY `uk_loading_work_pallet_seal_operation` (`seal_operation_id`), + KEY `idx_loading_work_pallet_plan` (`loading_plan_id`,`pallet_status`,`id`), + CONSTRAINT `fk_loading_work_pallet_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `fk_loading_work_pallet_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_work_pallet_status` CHECK ((`pallet_status` in (_utf8mb4'OPEN',_utf8mb4'SEALED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发PDA现场实际托盘;允许同托盘承载多个客户订单'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_work_pallet_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_work_pallet_carton` ( + `id` bigint unsigned NOT NULL COMMENT '一件代发现场托盘箱唛绑定ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT 'PDA装柜拣货任务ID', + `work_pallet_id` bigint unsigned NOT NULL COMMENT '现场作业托盘ID', + `loading_plan_item_id` bigint unsigned NOT NULL COMMENT '装柜计划货物明细ID', + `pick_item_id` bigint unsigned NOT NULL COMMENT 'PDA拣货明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '箱唛所属客户ID', + `inbound_id` bigint unsigned NOT NULL COMMENT '来源入仓单ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '来源入仓货物明细ID', + `carton_label_id` bigint unsigned NOT NULL COMMENT '稳定箱唛记录ID', + `box_code` varchar(80) NOT NULL COMMENT '稳定箱唛箱码快照', + `sku_code` varchar(128) NOT NULL COMMENT 'SKU编码快照', + `units_per_carton` int unsigned DEFAULT NULL COMMENT '每箱产品数量快照', + `bound_by` bigint unsigned NOT NULL COMMENT '最后绑定操作人ID', + `bound_by_name` varchar(64) DEFAULT NULL COMMENT '最后绑定操作人名称快照', + `operation_id` varchar(128) NOT NULL COMMENT '最近一次绑定或移托幂等操作号', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '首次上托时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后移托时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_work_carton_task_label` (`pick_task_id`,`carton_label_id`), + UNIQUE KEY `uk_loading_work_carton_operation` (`operation_id`), + KEY `idx_loading_work_carton_pallet` (`work_pallet_id`,`sku_code`,`id`), + KEY `idx_loading_work_carton_plan_item` (`loading_plan_item_id`,`id`), + KEY `fk_loading_work_carton_pick_item` (`pick_item_id`), + KEY `fk_loading_work_carton_label` (`carton_label_id`), + CONSTRAINT `fk_loading_work_carton_label` FOREIGN KEY (`carton_label_id`) REFERENCES `fl_inbound_carton_label` (`id`), + CONSTRAINT `fk_loading_work_carton_pallet` FOREIGN KEY (`work_pallet_id`) REFERENCES `fl_loading_work_pallet` (`id`), + CONSTRAINT `fk_loading_work_carton_pick_item` FOREIGN KEY (`pick_item_id`) REFERENCES `fl_loading_pick_item` (`id`), + CONSTRAINT `fk_loading_work_carton_plan_item` FOREIGN KEY (`loading_plan_item_id`) REFERENCES `fl_loading_plan_item` (`id`), + CONSTRAINT `fk_loading_work_carton_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_work_carton_units` CHECK (((`units_per_carton` is null) or (`units_per_carton` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发PDA逐箱上托事实;客户订单不合并但实际托盘可混托'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_measure_review_record`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_measure_review_record` ( + `id` bigint unsigned NOT NULL COMMENT '测量审核记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `measurement_id` bigint unsigned DEFAULT NULL COMMENT '被审核的测量批次ID', + `review_result` varchar(24) NOT NULL COMMENT '审核结果', + `review_reason` varchar(1000) DEFAULT NULL COMMENT '审核或驳回原因', + `exception_release` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否异常放行', + `release_reason` varchar(1000) DEFAULT NULL COMMENT '异常放行原因', + `allow_rejected_config` tinyint(1) NOT NULL DEFAULT '0' COMMENT '操作时Nacos异常放行开关值', + `reviewer_id` bigint unsigned NOT NULL COMMENT '审核人ID', + `reviewer_name` varchar(64) DEFAULT NULL COMMENT '审核人名称快照', + `reviewed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '审核时间', + PRIMARY KEY (`id`), + KEY `idx_review_inbound_time` (`tenant_id`,`inbound_id`,`reviewed_at`), + KEY `idx_review_exception_release` (`tenant_id`,`inbound_id`,`exception_release`,`reviewed_at`), + KEY `fk_review_inbound` (`inbound_id`), + KEY `fk_review_measurement` (`measurement_id`), + CONSTRAINT `fk_review_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_review_measurement` FOREIGN KEY (`measurement_id`) REFERENCES `fl_inbound_measurement` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='测量审核、驳回和异常放行不可变记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_mojia_measurement_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_mojia_measurement_receipt` ( + `id` bigint unsigned NOT NULL COMMENT '墨家联调收件记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `subject_id` bigint unsigned NOT NULL COMMENT '设备应用操作主体ID', + `box_code` varchar(128) NOT NULL COMMENT '设备扫描的原始箱码或不带#的SKU', + `inbound_code` varchar(64) DEFAULT NULL COMMENT '箱码命中后的权威入仓码;SKU记录为空', + `measurement_kind` varchar(16) NOT NULL DEFAULT 'BOX_LABEL' COMMENT '测量分流:BOX_LABEL箱唛;SKU一件代发SKU', + `scanned_shipment_id` varchar(64) DEFAULT NULL COMMENT '设备从Amazon FBA箱标实扫的Shipment ID', + `length_cm` decimal(12,3) NOT NULL COMMENT '设备实测长度cm', + `width_cm` decimal(12,3) NOT NULL COMMENT '设备实测宽度cm', + `height_cm` decimal(12,3) NOT NULL COMMENT '设备实测高度cm', + `weight_kg` decimal(18,3) NOT NULL COMMENT '设备实测重量kg', + `machine_no` varchar(64) NOT NULL COMMENT '设备编号', + `measured_at` datetime(3) NOT NULL COMMENT '设备测量时间或服务接收时间', + `image_file_id` bigint unsigned NOT NULL COMMENT 'File服务中的墨家联调图片ID', + `status` varchar(24) NOT NULL DEFAULT 'UNMATCHED' COMMENT '原始收件状态;SKU记录使用SKU_PENDING_SYNC', + `sync_status` varchar(24) DEFAULT NULL COMMENT 'SKU同步状态:PENDING/SYNCING/SUCCESS/FAILED', + `sync_failure_code` varchar(64) DEFAULT NULL COMMENT 'SKU同步失败业务码', + `sync_failure_reason` varchar(500) DEFAULT NULL COMMENT '脱敏后的SKU同步失败原因', + `lingxing_sku_id` varchar(128) DEFAULT NULL COMMENT '领星SKU内部标识', + `revision` int NOT NULL DEFAULT '1' COMMENT '当前测量版本号', + `match_failure_code` varchar(16) DEFAULT NULL COMMENT '正式箱唛业务匹配失败码', + `match_failure_reason` varchar(500) DEFAULT NULL COMMENT '脱敏后的箱唛匹配失败原因', + `request_id` varchar(128) DEFAULT NULL COMMENT '请求链路ID', + `trace_id` varchar(128) DEFAULT NULL COMMENT '调用链ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_mojia_receipt_status_time` (`tenant_id`,`status`,`created_at`), + KEY `idx_mojia_receipt_box_time` (`tenant_id`,`box_code`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='墨家模拟或未匹配入库单的原始测量收件箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking` ( + `id` bigint unsigned NOT NULL COMMENT '海运订舱ID', + `booking_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '平台海运订舱编号', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'DRAFT' COMMENT '订舱状态:DRAFT草稿、SUBMITTED已提交、CONFIRMED已确认、RELEASED已放舱、FAILED失败、CHANGE_PENDING船期待变更、CANCELLED已取消', + `customer_id` bigint unsigned DEFAULT NULL COMMENT '可选客户ID快照', + `customer_name` varchar(128) DEFAULT NULL COMMENT '可选客户名称快照', + `channel_code` varchar(64) DEFAULT NULL, + `channel_name` varchar(128) DEFAULT NULL, + `warehouse_id` bigint unsigned DEFAULT NULL, + `warehouse_name` varchar(128) DEFAULT NULL, + `bill_of_lading_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '提单号', + `shipping_company_id` bigint unsigned DEFAULT NULL COMMENT '船公司逻辑ID快照', + `shipping_company_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '船公司名称快照', + `carrier_code` varchar(16) DEFAULT NULL COMMENT '船司标准编码:MATSON/SML/ZIM/COSCO/EMC/HEDE/OTHER;发布前必填', + `booking_agent_id` bigint unsigned DEFAULT NULL COMMENT '订舱代理逻辑ID快照', + `booking_agent_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '订舱代理名称快照', + `vessel_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '当前确认船名快照', + `voyage_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '当前确认航次号快照', + `departure_port_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '起运港编码快照', + `departure_port_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '起运港名称快照', + `destination_port_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '目的港编码快照', + `destination_port_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '目的港名称快照', + `place_of_delivery` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最终交货地快照', + `service_term` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '运输服务条款快照', + `freight_term` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '海运费支付条款快照', + `estimated_sailing_at` datetime(3) DEFAULT NULL COMMENT '当前确认预计开船时间', + `estimated_arrival_at` datetime(3) DEFAULT NULL COMMENT '当前确认预计到港时间', + `pending_vessel_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '待确认变更船名', + `pending_voyage_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '待确认变更航次号', + `pending_estimated_sailing_at` datetime(3) DEFAULT NULL COMMENT '待确认变更预计开船时间', + `pending_estimated_arrival_at` datetime(3) DEFAULT NULL COMMENT '待确认变更预计到港时间', + `change_reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '船期变更原因', + `cancellation_reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '取消订舱原因', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '平台内部备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '订舱记录创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改操作人姓名快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '订舱记录最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ocean_booking_no` (`booking_no`), + UNIQUE KEY `uk_ocean_booking_bill_of_lading` (`bill_of_lading_no`), + KEY `idx_ocean_booking_customer` (`customer_id`,`status`,`updated_at`,`id`), + KEY `idx_ocean_booking_voyage` (`vessel_name`,`voyage_no`,`updated_at`), + CONSTRAINT `chk_ocean_booking_carrier_code` CHECK (((`carrier_code` is null) or (`carrier_code` in (_utf8mb4'MATSON',_utf8mb4'SML',_utf8mb4'ZIM',_utf8mb4'COSCO',_utf8mb4'EMC',_utf8mb4'HEDE',_utf8mb4'OTHER')))), + CONSTRAINT `chk_ocean_booking_customer` CHECK ((`customer_id` > 0)), + CONSTRAINT `chk_ocean_booking_pending_schedule` CHECK (((`pending_estimated_sailing_at` is null) or (`pending_estimated_arrival_at` is null) or (`pending_estimated_arrival_at` >= `pending_estimated_sailing_at`))), + CONSTRAINT `chk_ocean_booking_schedule` CHECK (((`estimated_sailing_at` is null) or (`estimated_arrival_at` is null) or (`estimated_arrival_at` >= `estimated_sailing_at`))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='独立海运订舱聚合;柜次仍由fl_container_booking承载'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_container_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_container_allocation` ( + `id` bigint unsigned NOT NULL COMMENT '订舱柜次分配关系ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '所属海运订舱ID', + `requirement_id` bigint unsigned NOT NULL COMMENT '对应订舱箱型需求ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '明确引用现有柜次ID', + `allocated_by` bigint unsigned NOT NULL COMMENT '分配操作人ID', + `allocated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '分配操作人姓名快照', + `allocated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '柜次分配时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ocean_allocation_container` (`container_booking_id`), + KEY `idx_ocean_allocation_booking` (`ocean_booking_id`,`requirement_id`,`allocated_at`), + KEY `fk_ocean_allocation_requirement` (`requirement_id`), + CONSTRAINT `fk_ocean_allocation_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `fk_ocean_allocation_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `fk_ocean_allocation_requirement` FOREIGN KEY (`requirement_id`) REFERENCES `fl_ocean_booking_container_requirement` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订舱需求与现有柜次的唯一分配关系'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_container_requirement`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_container_requirement` ( + `id` bigint unsigned NOT NULL COMMENT '订舱箱型需求ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '所属海运订舱ID', + `container_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '所需集装箱尺寸类型编码', + `container_kind` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '所需集装箱箱种编码', + `capacity_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000', + `max_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000', + `quantity` int unsigned NOT NULL COMMENT '该箱型箱种所需柜数', + `sort_no` int unsigned NOT NULL DEFAULT '0' COMMENT '订舱需求展示顺序', + PRIMARY KEY (`id`), + KEY `idx_ocean_requirement_booking` (`ocean_booking_id`,`sort_no`,`id`), + CONSTRAINT `fk_ocean_requirement_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `chk_ocean_requirement_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订舱箱型箱种及数量需求'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_document` ( + `id` bigint unsigned NOT NULL COMMENT '订舱文件关联ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '所属海运订舱ID', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件逻辑ID', + `document_type` varchar(32) NOT NULL COMMENT '文件类型:BOOKING_CONFIRMATION订舱确认、BILL_OF_LADING提单', + `file_name` varchar(255) NOT NULL COMMENT 'File返回的原始文件名快照', + `file_hash` char(64) DEFAULT NULL COMMENT 'File返回的SHA-256快照', + `size_bytes` bigint unsigned DEFAULT NULL COMMENT 'File返回的文件大小快照', + `content_type` varchar(128) DEFAULT NULL COMMENT 'File返回的内容类型快照', + `valid` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否为有效文件关联', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传或关联操作人ID', + `uploaded_by_name` varchar(64) DEFAULT NULL COMMENT '上传或关联操作人姓名快照', + `uploaded_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传或关联时间', + `invalidated_by` bigint unsigned DEFAULT NULL COMMENT '作废操作人ID', + `invalidated_by_name` varchar(64) DEFAULT NULL COMMENT '作废操作人姓名快照', + `invalidated_at` datetime(3) DEFAULT NULL COMMENT '作废时间', + PRIMARY KEY (`id`), + KEY `idx_ocean_document_booking` (`ocean_booking_id`,`valid`,`uploaded_at`,`id`), + KEY `idx_ocean_document_file` (`file_id`), + CONSTRAINT `fk_ocean_document_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`) ON DELETE CASCADE, + CONSTRAINT `chk_ocean_document_type` CHECK ((`document_type` in (_utf8mb4'BOOKING_CONFIRMATION',_utf8mb4'BILL_OF_LADING'))), + CONSTRAINT `chk_ocean_document_valid` CHECK ((`valid` in (0,1))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订舱聚合拥有的订舱确认与提单文件关联'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_operation` ( + `id` bigint unsigned NOT NULL COMMENT '订舱写操作幂等记录ID', + `ocean_booking_id` bigint unsigned DEFAULT NULL COMMENT '关联海运订舱ID;创建请求完成前允许为空', + `operator_id` bigint unsigned NOT NULL COMMENT '发起写操作的平台操作人ID', + `operation` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '幂等写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端写操作幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要;用于识别同键不同请求', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '处理状态:PROCESSING处理中、SUCCESS成功', + `result_json` json DEFAULT NULL COMMENT '成功结果JSON快照;供幂等重放返回', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等记录创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '写操作成功完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ocean_operation` (`operator_id`,`operation`,`idempotency_key`), + KEY `idx_ocean_operation_booking` (`ocean_booking_id`,`created_at`), + CONSTRAINT `fk_ocean_operation_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `chk_ocean_operation_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='海运订舱写操作幂等与请求哈希'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_party`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_party` ( + `id` bigint unsigned NOT NULL COMMENT '订舱提单关系方ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '所属海运订舱ID', + `party_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '关系方类型:SHIPPER发货人、CONSIGNEE收货人、NOTIFY_PARTY通知人', + `party_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '关系方名称快照', + `address` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '关系方地址快照', + `contact_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '关系方联系人快照', + `contact_phone` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '关系方联系电话快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ocean_booking_party` (`ocean_booking_id`,`party_type`), + CONSTRAINT `fk_ocean_booking_party` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `chk_ocean_booking_party_type` CHECK ((`party_type` in (_utf8mb4'SHIPPER',_utf8mb4'CONSIGNEE',_utf8mb4'NOTIFY_PARTY'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订舱提单关系方快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_status_history` ( + `id` bigint unsigned NOT NULL COMMENT '订舱状态历史ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '所属海运订舱ID', + `from_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '变更前订舱状态;创建时为空', + `to_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '变更后订舱状态', + `action` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '触发状态变更的业务动作', + `reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '状态变更原因', + `before_snapshot` json DEFAULT NULL COMMENT '状态变更前订舱数据快照;创建时为空', + `after_snapshot` json NOT NULL COMMENT '状态变更后订舱数据快照', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '状态历史创建时间', + PRIMARY KEY (`id`), + KEY `idx_ocean_history_booking` (`ocean_booking_id`,`created_at`,`id`), + CONSTRAINT `fk_ocean_history_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='海运订舱不可变状态历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_order_declaration_event`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_order_declaration_event` ( + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和隔离键', + `event_id` varchar(128) NOT NULL COMMENT '永久保留的Order Outbox事件ID', + `order_id` bigint unsigned NOT NULL COMMENT 'Order订单ID', + `order_version` int NOT NULL COMMENT '事件携带的Order聚合版本', + `request_hash` char(64) NOT NULL COMMENT '完整事件SHA-256,用于异参重放拒绝', + `consumed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`tenant_id`,`event_id`), + KEY `idx_order_declaration_event_order` (`tenant_id`,`order_id`,`order_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Order客户申报事件永久幂等账本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_order_declaration_snapshot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_order_declaration_snapshot` ( + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和隔离键', + `order_id` bigint unsigned NOT NULL COMMENT 'Order订单ID', + `event_id` varchar(128) NOT NULL COMMENT 'Order Outbox事件ID', + `order_version` int NOT NULL COMMENT 'Order聚合版本,严格单调消费', + `request_hash` char(64) NOT NULL COMMENT '完整事件SHA-256', + `customer_remark` varchar(1000) DEFAULT NULL COMMENT '客户备注快照', + `expected_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到仓时间快照', + `channel_code` varchar(64) NOT NULL COMMENT '渠道编码快照', + `channel_name` varchar(128) NOT NULL COMMENT '渠道名称快照', + `cargoes_json` json NOT NULL COMMENT '客户申报货物行完整快照,不覆盖实测事实', + `changes_json` json DEFAULT NULL COMMENT '本版本申报字段变化摘要', + `occurred_at` datetime(3) NOT NULL COMMENT 'Order事件发生时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`tenant_id`,`order_id`), + UNIQUE KEY `uk_order_declaration_event` (`tenant_id`,`event_id`), + KEY `idx_order_declaration_version` (`tenant_id`,`order_id`,`order_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Order客户申报版本快照;与箱码、实测、托盘、PDA和计费事实隔离'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_outbound_dispatch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_outbound_dispatch` ( + `id` bigint unsigned NOT NULL COMMENT '国内出仓调度记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `order_id` bigint unsigned NOT NULL COMMENT 'Order服务订单逻辑ID,不复制订单主数据', + `inbound_id` bigint unsigned NOT NULL COMMENT '关联入库单逻辑ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '关联柜次逻辑ID', + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'READY_FOR_DISPATCH' COMMENT '出仓状态:READY_FOR_DISPATCH待确认出仓、WAITING_FOR_LOADING等待装柜', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + `confirmed_by` bigint unsigned DEFAULT NULL COMMENT '确认国内出仓的操作人ID', + `confirmed_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '确认国内出仓的操作人姓名快照', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '国内出仓确认时间', + `reversed_by` bigint unsigned DEFAULT NULL COMMENT '撤销国内出仓的操作人ID', + `reversed_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '撤销国内出仓的操作人姓名快照', + `reversed_at` datetime(3) DEFAULT NULL COMMENT '国内出仓撤销时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '国内出仓调度备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '出仓调度记录创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '出仓调度记录最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_outbound_dispatch_owner` (`tenant_id`,`inbound_id`,`container_booking_id`), + KEY `idx_outbound_dispatch_order` (`tenant_id`,`order_id`,`updated_at`), + KEY `idx_outbound_dispatch_container` (`container_booking_id`,`status`,`updated_at`), + KEY `fk_outbound_dispatch_inbound` (`inbound_id`), + CONSTRAINT `fk_outbound_dispatch_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `fk_outbound_dispatch_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_outbound_dispatch_status` CHECK ((`status` in (_utf8mb4'READY_FOR_DISPATCH',_utf8mb4'WAITING_FOR_LOADING'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='三期国内出仓派车状态,不重复创建出仓单'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_outbound_dispatch_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_outbound_dispatch_history` ( + `id` bigint unsigned NOT NULL COMMENT '出仓状态历史记录ID', + `dispatch_id` bigint unsigned NOT NULL COMMENT '关联国内出仓调度记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '关联入库单逻辑ID快照', + `container_booking_id` bigint unsigned NOT NULL COMMENT '关联柜次逻辑ID快照', + `action` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '出仓状态变更动作', + `from_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '变更前出仓状态;首次创建时为空', + `to_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '变更后出仓状态', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '状态变更原因或备注', + `operator_id` bigint unsigned NOT NULL COMMENT '执行状态变更的平台用户ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '执行状态变更的平台用户姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '状态历史创建时间', + PRIMARY KEY (`id`), + KEY `idx_outbound_dispatch_history` (`tenant_id`,`inbound_id`,`container_booking_id`,`created_at`,`id`), + KEY `fk_outbound_dispatch_history` (`dispatch_id`), + CONSTRAINT `fk_outbound_dispatch_history` FOREIGN KEY (`dispatch_id`) REFERENCES `fl_outbound_dispatch` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='国内出仓追加式审计历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_outbound_dispatch_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_outbound_dispatch_operation` ( + `id` bigint unsigned NOT NULL COMMENT '出仓幂等操作记录ID', + `dispatch_id` bigint unsigned DEFAULT NULL COMMENT '首次声明幂等键时允许为空', + `operator_id` bigint unsigned NOT NULL COMMENT '执行写操作的平台用户ID', + `operation` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '国内出仓写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端幂等键,同一操作重试复用', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '幂等处理状态:PROCESSING处理中、SUCCESS成功', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等声明创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '幂等操作完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_outbound_dispatch_operation` (`operator_id`,`operation`,`idempotency_key`), + KEY `idx_outbound_dispatch_operation_resource` (`dispatch_id`,`created_at`), + CONSTRAINT `fk_outbound_dispatch_operation` FOREIGN KEY (`dispatch_id`) REFERENCES `fl_outbound_dispatch` (`id`), + CONSTRAINT `chk_outbound_dispatch_operation_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='国内出仓写操作幂等声明'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_port_schedule`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_port_schedule` ( + `id` bigint unsigned NOT NULL COMMENT '港务船期记录ID', + `schedule_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '港务船期记录编号', + `customer_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '关联海运订舱ID', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '关联柜次ID;订舱整票船期时为空', + `source_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船期来源类型:MANUAL人工录入、CARRIER船公司、TERMINAL码头、API外部接口', + `source_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船期来源名称', + `source_ref` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '来源侧记录唯一引用或查询凭据摘要', + `vessel_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船名快照', + `voyage_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '航次号快照', + `departure_port_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '起运港编码快照', + `departure_port_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '起运港名称快照', + `destination_port_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '目的港编码快照', + `destination_port_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '目的港名称快照', + `etd_at` datetime(3) DEFAULT NULL COMMENT '预计离港时间', + `eta_at` datetime(3) DEFAULT NULL COMMENT '预计到港时间', + `booking_cutoff_at` datetime(3) DEFAULT NULL COMMENT '截单时间', + `customs_cutoff_at` datetime(3) DEFAULT NULL COMMENT '截关时间', + `port_cutoff_at` datetime(3) DEFAULT NULL COMMENT '截港时间', + `observed_at` datetime(3) NOT NULL COMMENT '来源数据观测时间', + `expires_at` datetime(3) NOT NULL COMMENT '超过该时间即由API计算为过期', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '平台内部备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '船期记录创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改操作人姓名快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '船期记录最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_port_schedule_no` (`schedule_no`), + UNIQUE KEY `uk_port_schedule_source` (`source_type`,`source_name`,`source_ref`), + KEY `idx_port_schedule_customer` (`customer_id`,`observed_at`,`id`), + KEY `idx_port_schedule_booking` (`ocean_booking_id`,`observed_at`,`id`), + KEY `idx_port_schedule_container` (`container_booking_id`,`observed_at`,`id`), + KEY `idx_port_schedule_expiry` (`expires_at`,`id`), + CONSTRAINT `fk_port_schedule_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `fk_port_schedule_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_port_schedule_booking_cutoff` CHECK (((`booking_cutoff_at` is null) or (`etd_at` is null) or (`booking_cutoff_at` <= `etd_at`))), + CONSTRAINT `chk_port_schedule_customer` CHECK ((`customer_id` > 0)), + CONSTRAINT `chk_port_schedule_customs_cutoff` CHECK (((`customs_cutoff_at` is null) or (`etd_at` is null) or (`customs_cutoff_at` <= `etd_at`))), + CONSTRAINT `chk_port_schedule_eta` CHECK (((`etd_at` is null) or (`eta_at` is null) or (`eta_at` >= `etd_at`))), + CONSTRAINT `chk_port_schedule_expiry` CHECK ((`expires_at` > `observed_at`)), + CONSTRAINT `chk_port_schedule_port_cutoff` CHECK (((`port_cutoff_at` is null) or (`etd_at` is null) or (`port_cutoff_at` <= `etd_at`))), + CONSTRAINT `chk_port_schedule_source_type` CHECK ((`source_type` in (_utf8mb4'MANUAL',_utf8mb4'CARRIER',_utf8mb4'TERMINAL',_utf8mb4'API'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='独立港务船期来源聚合,不替代订舱快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_port_schedule_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_port_schedule_history` ( + `id` bigint unsigned NOT NULL COMMENT '港务船期变更历史ID', + `port_schedule_id` bigint unsigned NOT NULL COMMENT '所属港务船期记录ID', + `action` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '变更动作:CREATE创建、UPDATE更新', + `from_version` int unsigned DEFAULT NULL COMMENT '变更前版本;创建时为空', + `to_version` int unsigned NOT NULL COMMENT '变更后版本', + `reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '变更原因或说明', + `before_snapshot` json DEFAULT NULL COMMENT '变更前船期数据快照;创建时为空', + `after_snapshot` json NOT NULL COMMENT '变更后船期数据快照', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '历史记录创建时间', + PRIMARY KEY (`id`), + KEY `idx_port_schedule_history` (`port_schedule_id`,`created_at`,`id`), + CONSTRAINT `fk_port_schedule_history` FOREIGN KEY (`port_schedule_id`) REFERENCES `fl_port_schedule` (`id`), + CONSTRAINT `chk_port_schedule_history_action` CHECK ((`action` in (_utf8mb4'CREATE',_utf8mb4'UPDATE'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='港务船期不可变变更历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_port_schedule_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_port_schedule_operation` ( + `id` bigint unsigned NOT NULL COMMENT '港务船期写操作幂等记录ID', + `port_schedule_id` bigint unsigned DEFAULT NULL COMMENT '关联港务船期ID;创建请求完成前允许为空', + `operator_id` bigint unsigned NOT NULL COMMENT '发起写操作的平台操作人ID', + `operation` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '幂等写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端写操作幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要;用于识别同键不同请求', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '处理状态:PROCESSING处理中、SUCCESS成功', + `result_json` json DEFAULT NULL COMMENT '成功结果JSON快照;供幂等重放返回', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等记录创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '写操作成功完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_port_schedule_operation` (`operator_id`,`idempotency_key`), + KEY `idx_port_schedule_operation_resource` (`port_schedule_id`,`created_at`), + CONSTRAINT `fk_port_schedule_operation` FOREIGN KEY (`port_schedule_id`) REFERENCES `fl_port_schedule` (`id`), + CONSTRAINT `chk_port_schedule_operation_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='港务船期写操作幂等与请求哈希'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_preload_loading_plan_link`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_preload_loading_plan_link` ( + `id` bigint unsigned NOT NULL COMMENT '关联ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '入库单客户隔离ID', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `preload_plan_id` bigint unsigned NOT NULL COMMENT '入库单级预装计划ID', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '柜次级装柜计划ID', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '建立关联幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '建立关联请求SHA-256', + `created_by` bigint unsigned NOT NULL COMMENT '建立预装与装柜计划关联的操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '建立关联的操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '关联记录创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_preload_loading_pair` (`tenant_id`,`inbound_id`,`loading_plan_id`), + UNIQUE KEY `uk_preload_loading_idempotency` (`created_by`,`idempotency_key`), + KEY `idx_preload_loading_preload` (`preload_plan_id`,`loading_plan_id`), + KEY `idx_preload_loading_plan` (`loading_plan_id`,`tenant_id`,`inbound_id`), + KEY `fk_preload_loading_inbound` (`inbound_id`), + CONSTRAINT `fk_preload_loading_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_preload_loading_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `fk_preload_loading_preload` FOREIGN KEY (`preload_plan_id`) REFERENCES `fl_preload_plan` (`id`), + CONSTRAINT `chk_preload_loading_tenant` CHECK ((`tenant_id` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单预装与柜次装柜计划多对多关联'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_preload_plan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_preload_plan` ( + `id` bigint unsigned NOT NULL COMMENT '预装清单ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '关联入库单逻辑ID', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '预装状态:PENDING待确认、CONFIRMING确认中、CONFIRMED已确认', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + `items_json` json NOT NULL COMMENT '可编辑分柜明细JSON快照;人工确认后作为预装依据', + `remark` varchar(1000) DEFAULT NULL COMMENT '预装备注', + `confirmed_by` bigint unsigned DEFAULT NULL, + `confirmed_by_name` varchar(64) DEFAULT NULL, + `confirmed_at` datetime(3) DEFAULT NULL, + `created_by` bigint unsigned NOT NULL COMMENT '创建预装清单的操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建操作人姓名快照', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '预装清单创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '预装清单最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_preload_tenant_inbound` (`tenant_id`,`inbound_id`), + KEY `idx_preload_status` (`tenant_id`,`status`,`updated_at`), + KEY `fk_preload_inbound` (`inbound_id`), + CONSTRAINT `fk_preload_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订单分柜预装清单'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_price_book_channel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_price_book_channel` ( + `id` bigint unsigned NOT NULL COMMENT '版本渠道快照ID', + `price_book_version_id` bigint unsigned NOT NULL COMMENT '整表价格版本ID', + `channel_code` varchar(64) NOT NULL COMMENT '固定渠道编码', + `channel_name` varchar(128) NOT NULL COMMENT '渠道名称快照', + `price_model` varchar(32) NOT NULL COMMENT '价格模型快照', + `source_sheet_name` varchar(128) NOT NULL COMMENT '原始Excel Sheet', + `estimated_departure_date` date DEFAULT NULL COMMENT '标准预计开船日期', + `estimated_departure_text` varchar(128) DEFAULT NULL COMMENT '原始预计开船日期文本', + `latest_warehouse_entry` varchar(128) DEFAULT NULL COMMENT '最晚进仓时间', + `vessel_name` varchar(128) DEFAULT NULL COMMENT '船名', + `voyage_no` varchar(64) DEFAULT NULL COMMENT '航次', + `reference_transit` varchar(128) DEFAULT NULL COMMENT '参考时效', + `surcharge_description` varchar(2000) DEFAULT NULL COMMENT '附加费说明,仅展示', + `remark` varchar(2000) DEFAULT NULL COMMENT '渠道备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '渠道快照创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '渠道快照最后更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_price_book_channel` (`price_book_version_id`,`channel_code`), + KEY `idx_price_book_channel_code` (`channel_code`,`price_book_version_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='价格版本渠道及船期快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_price_book_version`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_price_book_version` ( + `id` bigint unsigned NOT NULL COMMENT '整表价格版本ID', + `tenant_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '平台公共价格作用域固定为0', + `version_no` int unsigned NOT NULL COMMENT '整表版本号', + `original_file_name` varchar(255) NOT NULL COMMENT '原始Excel文件名', + `source_file_id` bigint unsigned DEFAULT NULL COMMENT 'File服务原始文件ID', + `source_sha256` char(64) DEFAULT NULL COMMENT '原始文件SHA-256', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING_CONFIRMATION' COMMENT '价格版本状态:PENDING_CONFIRMATION待确认、ACTIVE已生效、SUPERSEDED已被替代、FAILED解析失败', + `blocking_error_count` int unsigned NOT NULL DEFAULT '0' COMMENT '阻断错误数', + `warning_count` int unsigned NOT NULL DEFAULT '0' COMMENT '警告数', + `parse_issues_json` json DEFAULT NULL COMMENT '上传解析问题及待确认重新校验结果', + `channel_count` int unsigned NOT NULL DEFAULT '0' COMMENT '解析渠道数', + `rate_count` int unsigned NOT NULL DEFAULT '0' COMMENT '解析价格数', + `created_by` bigint unsigned NOT NULL COMMENT '上传价格表的操作人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传记录创建时间', + `published_by` bigint unsigned DEFAULT NULL COMMENT '确认并发布价格版本的操作人ID', + `published_at` datetime(3) DEFAULT NULL COMMENT '确认并生效时间', + `superseded_at` datetime(3) DEFAULT NULL COMMENT '被下一版本替换时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记:0未删除、1已删除', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `voided_by` bigint unsigned DEFAULT NULL COMMENT '作废操作人ID', + `voided_at` datetime(3) DEFAULT NULL COMMENT '作废时间', + `void_reason` varchar(500) DEFAULT NULL COMMENT '作废原因', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_price_book_version` (`tenant_id`,`version_no`), + KEY `idx_price_book_status` (`tenant_id`,`status`,`published_at`), + KEY `idx_price_book_source_hash` (`tenant_id`,`source_sha256`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台公共船期价格整表版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_price_channel_catalog`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_price_channel_catalog` ( + `id` bigint unsigned NOT NULL COMMENT '渠道目录ID', + `channel_code` varchar(64) NOT NULL COMMENT '稳定渠道编码', + `display_name` varchar(128) NOT NULL COMMENT '平台渠道名称', + `price_model` varchar(32) NOT NULL COMMENT '默认价格模型', + `source_sheet_name` varchar(128) NOT NULL COMMENT '来源Sheet名称;海派为同一Sheet', + `aliases_json` json NOT NULL COMMENT '上传名称别名数组', + `inbound_code_prefix` varchar(6) DEFAULT NULL, + `overseas_inbound_code_prefix` varchar(6) DEFAULT NULL, + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '目录状态:ACTIVE启用、DISABLED停用', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_price_channel_code` (`channel_code`), + KEY `idx_price_channel_status` (`status`,`price_model`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台公共船期价格固定渠道目录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_price_origin_alias`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_price_origin_alias` ( + `id` bigint unsigned NOT NULL COMMENT '起运仓别名ID', + `warehouse_code` varchar(64) NOT NULL COMMENT '平台仓库稳定编码,不存环境专属ID', + `alias_name` varchar(128) NOT NULL COMMENT 'Excel起运仓名称别名', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE启用、DISABLED停用', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_price_origin_alias` (`warehouse_code`,`alias_name`), + KEY `idx_price_origin_alias_name` (`alias_name`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='价格表起运仓名称别名映射'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_price_warehouse_mapping`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_price_warehouse_mapping` ( + `id` bigint unsigned NOT NULL COMMENT '价格仓映射ID', + `source_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '来源维度:ORIGIN_CODE或OVERSEAS_NAME', + `source_value` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '解析后的来源仓编码或海外仓名称', + `warehouse_id` bigint unsigned NOT NULL COMMENT '固定平台公共仓库ID', + `warehouse_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '平台仓库稳定编码快照', + `warehouse_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'DOMESTIC或OVERSEAS', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE启用、DISABLED停用', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_price_warehouse_mapping_source` (`source_type`,`source_value`), + KEY `idx_price_warehouse_mapping_target` (`warehouse_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='价格表来源仓与固定平台公共仓映射'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_sailing`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_sailing` ( + `id` bigint NOT NULL, + `sailing_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `template_id` bigint DEFAULT NULL, + `channel_id` bigint NOT NULL, + `channel_code_snapshot` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `channel_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `warehouse_id` bigint NOT NULL, + `warehouse_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `departure_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `destination_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `vessel_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `voyage_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `etd_at` datetime(3) NOT NULL, + `warehouse_cutoff_at` datetime(3) NOT NULL, + `eta_at` datetime(3) DEFAULT NULL, + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'OPEN', + `source_type` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'MANUAL', + `generated_key` varchar(192) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `planned_capacity_cbm` decimal(14,3) DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_by` bigint NOT NULL, + `created_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_by` bigint NOT NULL, + `updated_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `version` int NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fl_sailing_no` (`sailing_no`), + UNIQUE KEY `uk_fl_sailing_generated_key` (`generated_key`), + UNIQUE KEY `uk_fl_sailing_business` (`warehouse_id`,`channel_code_snapshot`,`departure_port_code`,`destination_port_code`,`etd_at`,`voyage_no`), + KEY `idx_fl_sailing_calendar` (`etd_at`,`warehouse_id`,`channel_id`,`status`), + KEY `idx_fl_sailing_route` (`departure_port_code`,`destination_port_code`), + CONSTRAINT `ck_fl_sailing_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'OPEN',_utf8mb4'CLOSED',_utf8mb4'DEPARTED',_utf8mb4'CANCELLED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_sailing_assignment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_sailing_assignment` ( + `id` bigint unsigned NOT NULL COMMENT '归班事实ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键', + `sailing_id` bigint unsigned DEFAULT NULL COMMENT '船期实例ID,UNMATCHED为空', + `origin_sailing_id` bigint unsigned DEFAULT NULL COMMENT '异常重排/取消前的原船期实例ID', + `inbound_id` bigint unsigned DEFAULT NULL COMMENT '归班对象入库单ID', + `inbound_code` varchar(64) DEFAULT NULL COMMENT '入仓码快照,仅用于展示', + `receipt_batch_id` bigint unsigned DEFAULT NULL COMMENT '收货批次事实ID', + `forecast_id` bigint unsigned DEFAULT NULL COMMENT '货量预报事实ID', + `assignment_source` varchar(24) NOT NULL DEFAULT 'AUTO' COMMENT '归班来源:AUTO/MANUAL/ROLLOVER', + `assignment_version` int unsigned NOT NULL COMMENT '同一对象的归班版本', + `match_status` varchar(24) NOT NULL COMMENT 'FORECAST_MATCHED/RECEIVED/LATE/UNMATCHED/SUPERSEDED', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '已收实测体积', + `forecast_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '未收有效预计体积', + `route_source` varchar(32) DEFAULT NULL COMMENT '航线来源:INBOUND_FACT/FORECAST_FACT/CHANNEL_DEFAULT', + `volume_source` varchar(32) DEFAULT NULL COMMENT 'MEASURED_ACTUAL或预报来源', + `rule_version` varchar(64) NOT NULL COMMENT '自动归班规则版本', + `matched_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `superseded_at` datetime(3) DEFAULT NULL, + `locked_at` datetime(3) DEFAULT NULL COMMENT '截止/订舱/关闭后冻结时间', + `lock_reason` varchar(32) DEFAULT NULL COMMENT 'CUTOFF/BOOKING_CONFIRMED/CLOSED', + `operator_id` bigint unsigned DEFAULT NULL, + `reason` varchar(500) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_sailing_assignment_current` (`tenant_id`,`sailing_id`,`match_status`,`matched_at`,`id`), + KEY `idx_sailing_assignment_origin` (`tenant_id`,`origin_sailing_id`,`match_status`,`id`), + KEY `idx_sailing_assignment_receipt` (`tenant_id`,`receipt_batch_id`,`assignment_version`,`id`), + KEY `idx_sailing_assignment_forecast` (`tenant_id`,`forecast_id`,`assignment_version`,`id`), + KEY `idx_sailing_assignment_inbound` (`tenant_id`,`inbound_id`,`match_status`,`id`), + CONSTRAINT `chk_sailing_assignment_source` CHECK ((`assignment_source` in (_utf8mb4'AUTO',_utf8mb4'MANUAL',_utf8mb4'ROLLOVER'))), + CONSTRAINT `chk_sailing_assignment_status` CHECK ((`match_status` in (_utf8mb4'FORECAST_MATCHED',_utf8mb4'RECEIVED',_utf8mb4'LATE',_utf8mb4'UNMATCHED',_utf8mb4'SUPERSEDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期日历自动归班事实及不可变版本历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_sailing_booking_link`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_sailing_booking_link` ( + `id` bigint unsigned NOT NULL COMMENT '船期-订舱关联ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '平台关联隔离键', + `sailing_id` bigint unsigned NOT NULL COMMENT '计划船期实例ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '海运订舱ID', + `link_status` varchar(24) NOT NULL DEFAULT 'ACTIVE' COMMENT '关联状态:ACTIVE/REVOKED', + `active_booking_guard` tinyint DEFAULT NULL COMMENT 'ACTIVE为1,REVOKED为空,用于唯一约束', + `booking_status_snapshot` varchar(24) NOT NULL COMMENT '关联时订舱状态快照;只有RELEASED可建立', + `warehouse_id` bigint unsigned DEFAULT NULL COMMENT '关联仓库快照', + `channel_code` varchar(64) DEFAULT NULL COMMENT '关联渠道快照', + `departure_port_code` varchar(32) DEFAULT NULL COMMENT '关联起运港快照', + `destination_port_code` varchar(32) DEFAULT NULL COMMENT '关联目的港快照', + `linked_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `revoked_at` datetime(3) DEFAULT NULL, + `operator_id` bigint unsigned DEFAULT NULL, + `operator_name` varchar(64) DEFAULT NULL, + `reason` varchar(500) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_sailing_booking_active` (`ocean_booking_id`,`active_booking_guard`), + KEY `idx_sailing_booking_link` (`sailing_id`,`link_status`,`ocean_booking_id`), + KEY `idx_sailing_booking_booking` (`ocean_booking_id`,`link_status`,`id`), + CONSTRAINT `chk_sailing_booking_link_guard` CHECK ((((`link_status` = _utf8mb4'ACTIVE') and (`active_booking_guard` = 1)) or ((`link_status` = _utf8mb4'REVOKED') and (`active_booking_guard` is null)))), + CONSTRAINT `chk_sailing_booking_link_status` CHECK ((`link_status` in (_utf8mb4'ACTIVE',_utf8mb4'REVOKED'))), + CONSTRAINT `chk_sailing_booking_released` CHECK ((`booking_status_snapshot` = _utf8mb4'RELEASED')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期计划与已放舱订舱的最小关联及历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_sailing_channel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_sailing_channel` ( + `id` bigint NOT NULL, + `channel_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `channel_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_type` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL, + `mapped_channel_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `default_departure_port_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `default_destination_port_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `default_cutoff_days` tinyint NOT NULL DEFAULT '3', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_by` bigint NOT NULL, + `created_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_by` bigint NOT NULL, + `updated_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `version` int NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fl_sailing_channel_code` (`channel_code`), + KEY `idx_fl_sailing_channel_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_sailing_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_sailing_history` ( + `id` bigint NOT NULL, + `sailing_id` bigint NOT NULL, + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `from_status` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `to_status` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `operator_id` bigint DEFAULT NULL, + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_fl_sailing_history_sailing` (`sailing_id`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_sailing_inbound_volume_forecast`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_sailing_inbound_volume_forecast` ( + `id` bigint unsigned NOT NULL COMMENT '货量预报事实ID(forecastId)', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键,继承入库事实', + `forecast_key` varchar(64) NOT NULL COMMENT '同一未收货对象的不可变业务键', + `fact_version` int unsigned NOT NULL DEFAULT '1' COMMENT '预报修订版本', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `receiving_warehouse_id` bigint unsigned NOT NULL COMMENT '预计收货仓ID', + `channel_code` varchar(64) DEFAULT NULL COMMENT '预计渠道编码快照', + `channel_name` varchar(128) DEFAULT NULL COMMENT '预计渠道名称快照', + `departure_port_code` varchar(32) DEFAULT NULL COMMENT '预计起运港编码快照', + `destination_port_code` varchar(32) DEFAULT NULL COMMENT '预计目的港编码快照', + `expected_arrival_at` datetime(3) NOT NULL COMMENT '预计到仓时间', + `forecast_volume_cbm` decimal(18,4) NOT NULL COMMENT '未收货预计体积m3,不得使用申报体积代替', + `source_type` varchar(32) NOT NULL COMMENT '预报来源,例如OPERATIONS/UPSTREAM_MEASUREMENT;不得使用客户申报体积冒充预报', + `fact_status` varchar(24) NOT NULL DEFAULT 'VALID' COMMENT '事实状态:VALID/SUPERSEDED/VOIDED/CONSUMED', + `effective_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '本版本生效时间', + `created_by` bigint unsigned DEFAULT NULL COMMENT '写入人或系统主体', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_sailing_forecast_version` (`tenant_id`,`forecast_key`,`fact_version`), + KEY `idx_sailing_forecast_current` (`tenant_id`,`forecast_key`,`fact_status`,`fact_version`), + KEY `idx_sailing_forecast_match` (`tenant_id`,`receiving_warehouse_id`,`channel_code`,`expected_arrival_at`,`id`), + KEY `idx_sailing_forecast_inbound` (`tenant_id`,`inbound_id`,`expected_arrival_at`,`id`), + CONSTRAINT `chk_sailing_forecast_status` CHECK ((`fact_status` in (_utf8mb4'VALID',_utf8mb4'SUPERSEDED',_utf8mb4'VOIDED',_utf8mb4'CONSUMED'))), + CONSTRAINT `chk_sailing_forecast_volume` CHECK ((`forecast_volume_cbm` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期日历未收货量预报事实及版本历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_sailing_receipt_batch_fact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_sailing_receipt_batch_fact` ( + `id` bigint unsigned NOT NULL COMMENT '稳定收货批次事实ID(receiptBatchId)', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键,继承入库事实', + `receipt_batch_key` varchar(64) NOT NULL COMMENT '同一物理收货批次的不可变业务键', + `fact_version` int unsigned NOT NULL DEFAULT '1' COMMENT '同一批次复测/冲正版本', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `measurement_id` bigint unsigned DEFAULT NULL COMMENT '最终审核测量批次ID', + `receiving_warehouse_id` bigint unsigned NOT NULL COMMENT '实际收货仓ID', + `channel_code` varchar(64) DEFAULT NULL COMMENT '收货渠道编码快照', + `channel_name` varchar(128) DEFAULT NULL COMMENT '收货渠道名称快照', + `departure_port_code` varchar(32) DEFAULT NULL COMMENT '起运港编码快照', + `destination_port_code` varchar(32) DEFAULT NULL COMMENT '目的港编码快照', + `received_at` datetime(3) NOT NULL COMMENT '实际收货完成时间,不使用入库单inbounded_at替代', + `actual_volume_cbm` decimal(18,4) NOT NULL COMMENT '最终审核实测体积m3', + `fact_status` varchar(24) NOT NULL DEFAULT 'APPROVED' COMMENT '事实状态:APPROVED/REVERSED/VOIDED/SUPERSEDED', + `reversal_of_fact_id` bigint unsigned DEFAULT NULL COMMENT '冲正所替代的事实ID', + `source_type` varchar(32) NOT NULL DEFAULT 'FIRSTLEG_RECEIPT' COMMENT '事实来源', + `created_by` bigint unsigned DEFAULT NULL COMMENT '写入人或系统主体', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_sailing_receipt_batch_version` (`tenant_id`,`receipt_batch_key`,`fact_version`), + KEY `idx_sailing_receipt_batch_current` (`tenant_id`,`receipt_batch_key`,`fact_status`,`fact_version`), + KEY `idx_sailing_receipt_match` (`tenant_id`,`receiving_warehouse_id`,`channel_code`,`received_at`,`id`), + KEY `idx_sailing_receipt_inbound` (`tenant_id`,`inbound_id`,`received_at`,`id`), + CONSTRAINT `chk_sailing_receipt_status` CHECK ((`fact_status` in (_utf8mb4'APPROVED',_utf8mb4'REVERSED',_utf8mb4'VOIDED',_utf8mb4'SUPERSEDED'))), + CONSTRAINT `chk_sailing_receipt_volume` CHECK ((`actual_volume_cbm` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期日历稳定收货批次实测事实及版本历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_sailing_template`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_sailing_template` ( + `id` bigint NOT NULL, + `template_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `template_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `channel_id` bigint NOT NULL, + `channel_code_snapshot` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `channel_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `warehouse_id` bigint NOT NULL, + `warehouse_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `departure_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `destination_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `weekday` tinyint NOT NULL, + `weekday_mask` tinyint NOT NULL DEFAULT '1', + `etd_local_time` time NOT NULL, + `cutoff_days` tinyint NOT NULL DEFAULT '3', + `cutoff_local_time` time NOT NULL DEFAULT '18:00:00', + `valid_from` date NOT NULL, + `valid_to` date DEFAULT NULL, + `voyage_rule` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `vessel_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_by` bigint NOT NULL, + `created_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_by` bigint NOT NULL, + `updated_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `version` int NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fl_sailing_template_no` (`template_no`), + KEY `idx_fl_sailing_template_filter` (`warehouse_id`,`channel_id`,`status`,`weekday`), + CONSTRAINT `ck_fl_sailing_template_cutoff_days` CHECK ((`cutoff_days` between 0 and 30)), + CONSTRAINT `ck_fl_sailing_template_weekday` CHECK ((`weekday` between 1 and 7)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_split_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_split_operation` ( + `id` bigint unsigned NOT NULL COMMENT '幂等记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '操作目标入库单逻辑ID', + `operator_id` bigint unsigned NOT NULL COMMENT '执行分柜或预装写操作的平台用户ID', + `operation` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '分柜或预装写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端幂等键,同一操作重试复用', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '幂等处理状态:PROCESSING处理中、SUCCESS成功', + `result_json` json DEFAULT NULL COMMENT '操作结果JSON快照,用于幂等重放', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等操作声明创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_split_operation` (`tenant_id`,`inbound_id`,`operator_id`,`operation`,`idempotency_key`), + KEY `idx_split_operation_time` (`tenant_id`,`inbound_id`,`created_at`), + KEY `fk_split_operation_inbound` (`inbound_id`), + CONSTRAINT `fk_split_operation_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='分柜操作幂等与审计索引'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_terminal_drayage`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_terminal_drayage` ( + `id` bigint unsigned NOT NULL COMMENT '目的港码头拖车聚合ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '唯一归属物理货柜ID', + `fleet_supplier_id` bigint unsigned DEFAULT NULL COMMENT 'Warehouse ACTIVE/TRUCKING供应商ID快照', + `fleet_supplier_name` varchar(128) DEFAULT NULL COMMENT 'Warehouse供应商名称快照', + `pickup_appointment_at` datetime(3) DEFAULT NULL COMMENT '预约提柜时间', + `actual_pickup_at` datetime(3) DEFAULT NULL COMMENT '实际提柜时间', + `estimated_empty_return_at` datetime(3) DEFAULT NULL COMMENT '服务端按卸柜完成时间加72小时计算的预计还柜时间', + `actual_empty_return_at` datetime(3) DEFAULT NULL COMMENT '实际还空柜时间', + `version` int unsigned NOT NULL DEFAULT '1' COMMENT '乐观锁版本号', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后更新人ID', + `updated_by_name` varchar(64) DEFAULT NULL COMMENT '最后更新人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_terminal_drayage_container` (`container_booking_id`), + KEY `idx_terminal_drayage_warning` (`actual_empty_return_at`,`estimated_empty_return_at`), + CONSTRAINT `fk_terminal_drayage_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_terminal_drayage_times` CHECK ((((`actual_pickup_at` is null) or (`pickup_appointment_at` is not null)) and ((`actual_empty_return_at` is null) or (`actual_pickup_at` is null) or (`actual_empty_return_at` >= `actual_pickup_at`)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='目的港货柜级码头拖车与还空事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_terminal_drayage_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_terminal_drayage_history` ( + `id` bigint unsigned NOT NULL COMMENT '历史ID', + `drayage_id` bigint unsigned NOT NULL COMMENT '码头拖车聚合ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '货柜ID快照', + `action` varchar(32) NOT NULL COMMENT '业务动作', + `from_status` varchar(32) NOT NULL COMMENT '操作前状态', + `to_status` varchar(32) NOT NULL COMMENT '操作后状态', + `from_version` int unsigned NOT NULL COMMENT '操作前版本', + `to_version` int unsigned NOT NULL COMMENT '操作后版本', + `reason` varchar(500) DEFAULT NULL COMMENT '操作说明', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + KEY `idx_terminal_drayage_history` (`container_booking_id`,`created_at`,`id`), + KEY `fk_terminal_drayage_history` (`drayage_id`), + CONSTRAINT `fk_terminal_drayage_history` FOREIGN KEY (`drayage_id`) REFERENCES `fl_terminal_drayage` (`id`), + CONSTRAINT `chk_terminal_drayage_history_action` CHECK ((`action` in (_utf8mb4'SELECT_FLEET',_utf8mb4'SEND_PICKUP_EMAIL',_utf8mb4'SCHEDULE_PICKUP',_utf8mb4'RECORD_PICKUP',_utf8mb4'RECORD_EMPTY_RETURN'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='目的港码头拖车不可变操作历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_terminal_drayage_mail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_terminal_drayage_mail` ( + `id` bigint unsigned NOT NULL COMMENT '邮件任务ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '归属物理货柜ID', + `fleet_supplier_id` bigint unsigned NOT NULL COMMENT '车队供应商ID快照', + `fleet_name` varchar(128) NOT NULL COMMENT '车队名称快照', + `recipient` varchar(254) NOT NULL COMMENT '收件人邮箱', + `kind` varchar(32) NOT NULL COMMENT '邮件类型:REQUEST_PICKUP提柜请求、CANCEL_PICKUP取消提柜', + `subject` varchar(255) NOT NULL COMMENT '邮件主题', + `body` text NOT NULL COMMENT '邮件正文', + `status` varchar(16) NOT NULL DEFAULT 'PENDING' COMMENT '投递状态:PENDING待发送、SENDING发送中、SENT已发送、FAILED失败', + `attempts` int NOT NULL DEFAULT '0' COMMENT '发送尝试次数', + `failure_reason` varchar(500) DEFAULT NULL COMMENT '发送失败原因', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `updated_by` bigint unsigned NOT NULL COMMENT '最后更新人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `sent_at` datetime(3) DEFAULT NULL COMMENT '发送成功时间', + PRIMARY KEY (`id`), + KEY `idx_terminal_mail_dispatch` (`status`,`id`), + KEY `idx_terminal_mail_container` (`container_booking_id`,`id`,`status`), + CONSTRAINT `fk_terminal_mail_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_terminal_mail_kind` CHECK ((`kind` in (_utf8mb4'REQUEST_PICKUP',_utf8mb4'CANCEL_PICKUP'))), + CONSTRAINT `chk_terminal_mail_status` CHECK ((`status` in (_utf8mb4'PENDING',_utf8mb4'SENDING',_utf8mb4'SENT',_utf8mb4'FAILED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='码头车队邮件任务与投递记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_terminal_drayage_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_terminal_drayage_operation` ( + `id` bigint unsigned NOT NULL COMMENT '幂等操作ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '货柜ID', + `operation` varchar(32) NOT NULL COMMENT '业务动作', + `idempotency_key` varchar(255) NOT NULL COMMENT '客户端幂等键', + `request_hash` char(64) NOT NULL COMMENT '请求载荷SHA-256', + `result_version` int unsigned NOT NULL COMMENT '成功结果版本', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_terminal_drayage_operation` (`container_booking_id`,`idempotency_key`), + KEY `idx_terminal_drayage_operation` (`container_booking_id`,`created_at`), + CONSTRAINT `fk_terminal_drayage_operation_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='目的港码头拖车成功幂等操作'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_third_party_call_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_third_party_call_log` ( + `id` bigint unsigned NOT NULL COMMENT '第三方调用日志ID(雪花ID)', + `tenant_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '第三方未知/未解析主体哨兵值;不是平台客户记录或平台作用域,不得用于业务数据授权', + `app_key` varchar(128) DEFAULT NULL COMMENT '第三方应用标识', + `signature_subject` varchar(128) DEFAULT NULL COMMENT '签名主体快照', + `request_method` varchar(8) NOT NULL COMMENT 'HTTP方法', + `request_path` varchar(255) NOT NULL COMMENT '签名使用的规范路径', + `request_timestamp` varchar(32) DEFAULT NULL COMMENT '请求头Unix毫秒时间戳原值', + `nonce` varchar(128) DEFAULT NULL COMMENT '请求Nonce', + `idempotency_key` varchar(128) DEFAULT NULL COMMENT 'HTTP幂等键,查询接口为空', + `idempotency_anchor` tinyint unsigned DEFAULT NULL COMMENT '签名通过后首个请求为1,重复调用为空', + `signature_value` varchar(128) DEFAULT NULL COMMENT '第三方签名原值', + `request_hash` char(64) NOT NULL COMMENT '原始请求体SHA-256小写十六进制', + `raw_payload` longtext NOT NULL COMMENT '未经重新序列化的UTF-8原始请求体', + `processing_status` varchar(16) NOT NULL COMMENT 'PROCESSING、ACCEPTED或REJECTED', + `result_code` varchar(32) DEFAULT NULL COMMENT '统一响应业务码', + `result_message` varchar(1000) DEFAULT NULL COMMENT '处理结果或失败原因', + `result_json` json DEFAULT NULL COMMENT '首次成功结果快照', + `requested_at` datetime(3) NOT NULL COMMENT '服务端接收时间', + `processed_at` datetime(3) DEFAULT NULL COMMENT '处理完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_third_call_idempotency_owner` (`tenant_id`,`app_key`,`idempotency_key`,`idempotency_anchor`), + KEY `idx_third_call_app_time` (`tenant_id`,`app_key`,`requested_at`), + KEY `idx_third_call_idempotency` (`tenant_id`,`app_key`,`idempotency_key`), + KEY `idx_third_call_nonce` (`tenant_id`,`app_key`,`nonce`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='第三方测量开放接口原始请求、签名主体和处理结果留档'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_truck_appointment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_truck_appointment` ( + `id` bigint unsigned NOT NULL COMMENT '拖车预约ID', + `appointment_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '平台拖车预约编号', + `outbound_order_id` bigint unsigned DEFAULT NULL COMMENT '关联头程订单逻辑ID;不跨库建外键', + `ocean_booking_id` bigint unsigned DEFAULT NULL COMMENT '关联海运订舱逻辑ID', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '关联柜次逻辑ID;拖车完成供装柜门禁校验', + `loading_plan_id` bigint unsigned DEFAULT NULL COMMENT '关联装柜计划逻辑ID', + `warehouse_id` bigint unsigned DEFAULT NULL COMMENT '预约到仓的国内收货仓逻辑ID', + `customer_id` bigint unsigned DEFAULT NULL COMMENT '客户ID和数据隔离键', + `customer_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '客户名称快照', + `carrier_id` bigint unsigned DEFAULT NULL COMMENT '拖车服务商逻辑ID', + `carrier_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '拖车服务商名称快照', + `bill_of_lading_no` varchar(128) DEFAULT NULL, + `fleet_contact` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '车队联系人', + `fleet_phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '车队联系电话', + `driver_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '司机姓名', + `driver_phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '司机联系电话', + `driver_id_card` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '司机身份证号;平台内部敏感信息', + `vehicle_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '车辆车牌号', + `store_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓装柜地点名称快照', + `store_contact` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓地点联系人快照', + `store_phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓地点联系电话快照', + `store_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓装柜地点地址快照', + `store_city` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓地点城市快照', + `store_zipcode` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓地点邮编快照', + `package_count` int unsigned DEFAULT NULL COMMENT '预约货物包装件数快照', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '预约货物毛重,单位千克', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '预约货物体积,单位立方米', + `pallet_count` int unsigned DEFAULT NULL COMMENT '预约托盘数量', + `po_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '关联采购单号或客户PO号', + `planned_loading_at` datetime(3) DEFAULT NULL COMMENT '预约到仓装柜时间', + `actual_arrived_warehouse_at` datetime(3) DEFAULT NULL COMMENT '车辆实际到达收货仓时间', + `actual_loading_at` datetime(3) DEFAULT NULL COMMENT '实际开始装柜时间', + `actual_departed_at` datetime(3) DEFAULT NULL COMMENT '车辆实际离仓时间;DEPARTED后供LOADED门禁使用', + `transit_minutes` int unsigned DEFAULT NULL COMMENT '从到仓到离仓的运输作业耗时,单位分钟', + `payable_amount` decimal(18,2) DEFAULT NULL COMMENT '应付拖车服务商金额;币种由currency指定', + `receivable_amount` decimal(18,2) DEFAULT NULL COMMENT '向客户收取的拖车金额;币种由currency指定', + `currency` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'RMB' COMMENT '金额币种;首期默认RMB', + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'DRAFT' COMMENT '拖车预约状态:DRAFT草稿、PENDING_DISPATCH待派车、DISPATCHED已派车、PICKUP_IN_PROGRESS提货中、ARRIVED_WAREHOUSE已到仓、LOADING装柜中、DEPARTED已离仓、COMPLETED已完成、RESCHEDULED已改约、EXCEPTION异常、CANCELLED已取消', + `revision` int unsigned NOT NULL DEFAULT '0' COMMENT '拖车预约业务修订号;每次状态或改约递增', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '平台内部备注或异常说明', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '拖车预约创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '拖车预约最后更新时间', + `active_container_booking_id` bigint unsigned GENERATED ALWAYS AS ((case when (`status` not in (_utf8mb4'COMPLETED',_utf8mb4'CANCELLED',_utf8mb4'EXCEPTION')) then `container_booking_id` else NULL end)) STORED COMMENT '非终态预约的柜次唯一键', + `active_ocean_booking_id` bigint unsigned GENERATED ALWAYS AS ((case when (`status` not in (_utf8mb4'COMPLETED',_utf8mb4'CANCELLED',_utf8mb4'EXCEPTION')) then `ocean_booking_id` else NULL end)) STORED COMMENT '非终态预约的订舱唯一键', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_truck_appointment_no` (`appointment_no`), + UNIQUE KEY `uk_truck_active_ocean_booking` (`active_ocean_booking_id`), + KEY `idx_truck_appointment_status` (`status`,`updated_at`), + KEY `idx_truck_appointment_container` (`container_booking_id`), + KEY `idx_truck_appointment_customer` (`customer_id`), + KEY `idx_truck_appointment_ocean` (`ocean_booking_id`), + CONSTRAINT `chk_truck_appointment_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'PENDING_DISPATCH',_utf8mb4'DISPATCHED',_utf8mb4'PICKUP_IN_PROGRESS',_utf8mb4'ARRIVED_WAREHOUSE',_utf8mb4'LOADING',_utf8mb4'DEPARTED',_utf8mb4'COMPLETED',_utf8mb4'RESCHEDULED',_utf8mb4'EXCEPTION',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='三期拖车预约派车聚合'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_truck_appointment_attachment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_truck_appointment_attachment` ( + `id` bigint unsigned NOT NULL COMMENT '拖车附件关系ID', + `appointment_id` bigint unsigned NOT NULL COMMENT '所属拖车预约ID', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件逻辑ID', + `attachment_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '附件类型编码;由业务动作约定', + `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '上传时文件名快照', + `file_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '文件内容SHA-256摘要', + `visibility` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'INTERNAL' COMMENT '可见范围:INTERNAL仅平台内部、CLIENT客户可见', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传操作人ID', + `uploaded_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '附件上传时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_truck_attachment` (`appointment_id`,`file_id`), + KEY `idx_truck_attachment` (`appointment_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='拖车附件文件引用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_truck_appointment_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_truck_appointment_history` ( + `id` bigint unsigned NOT NULL COMMENT '拖车预约历史ID', + `appointment_id` bigint unsigned NOT NULL COMMENT '所属拖车预约ID', + `revision` int unsigned NOT NULL COMMENT '该预约业务修订号', + `action` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '触发状态或改约的业务动作', + `from_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '变更前拖车状态;创建时为空', + `to_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '变更后拖车状态;改约时可保持原状态', + `reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '状态或改约原因', + `operator_id` bigint unsigned NOT NULL COMMENT '执行操作的平台用户ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作人姓名快照', + `request_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '请求链路中的请求ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '历史记录创建时间', + PRIMARY KEY (`id`), + KEY `idx_truck_history` (`appointment_id`,`revision`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='拖车状态与改约历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_truck_appointment_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_truck_appointment_operation` ( + `id` bigint unsigned NOT NULL COMMENT '拖车写操作幂等记录ID', + `appointment_id` bigint unsigned NOT NULL COMMENT '所属拖车预约ID', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端写操作幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要;用于识别同键不同请求', + `action` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '执行的拖车业务动作', + `response_snapshot` json DEFAULT NULL COMMENT '成功响应JSON快照;供相同幂等请求重放', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等记录创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_truck_operation` (`idempotency_key`), + KEY `idx_truck_operation_appointment` (`appointment_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='拖车操作幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `sys_audit_outbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_audit_outbox` ( + `event_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '审计事件全局唯一ID', + `event_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '审计事件类型', + `resource_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '被审计业务资源类型', + `resource_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '被审计业务资源ID;无法确定时为空', + `service_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '产生审计事件的服务名称', + `payload_json` json NOT NULL COMMENT '待发送的审计事件完整负载快照', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '发送状态:PENDING待发送、SENDING发送中、SENT已发送、DEAD已转死信', + `attempt_count` int NOT NULL DEFAULT '0' COMMENT '正常发送累计尝试次数', + `compensation_count` int NOT NULL DEFAULT '0' COMMENT '人工或自动补偿累计次数', + `next_retry_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '允许下次重试的最早时间', + `lease_owner` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '当前发送任务租约持有者标识', + `lease_until` datetime(3) DEFAULT NULL COMMENT '当前发送任务租约到期时间', + `last_error` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最近一次发送失败原因', + `dead_at` datetime(3) DEFAULT NULL COMMENT '转入死信状态的时间', + `sent_at` datetime(3) DEFAULT NULL COMMENT '首次成功发送时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '事件创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '记录最后更新时间', + PRIMARY KEY (`event_id`), + KEY `idx_audit_outbox_publish` (`status`,`next_retry_at`,`lease_until`,`created_at`), + KEY `idx_audit_outbox_retention` (`status`,`sent_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='可靠审计事件本地发送箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + diff --git a/output/local-schema-repair/schema-before.sql b/output/local-schema-repair/schema-before.sql new file mode 100644 index 000000000..832c16b7d --- /dev/null +++ b/output/local-schema-repair/schema-before.sql @@ -0,0 +1,7980 @@ + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `baiyue_lastleg` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `baiyue_lastleg`; +DROP TABLE IF EXISTS `backup_fba_appointment_item_20261013`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `backup_fba_appointment_item_20261013` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '绉熸埛/瀹㈡埛璐﹀彿鏍囪瘑', + `appointment_id` bigint NOT NULL, + `plan_id` bigint NOT NULL, + `line_id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '取消或失败后释放货源占用', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_fba_appointment_item_line` (`appointment_id`,`line_id`), + KEY `idx_ll_fba_appointment_item_plan` (`plan_id`), + KEY `idx_ll_fba_appointment_item_order` (`order_id`), + KEY `idx_ll_fba_item_tenant_appointment` (`customer_id`,`appointment_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='FBA appointment line snapshot'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `event_delivery_attempt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `event_delivery_attempt` ( + `attempt_id` varchar(36) NOT NULL COMMENT '本次投递租约UUID和审计主键', + `service_name` varchar(32) NOT NULL COMMENT '本库所属生产服务', + `event_type` varchar(96) NOT NULL COMMENT '白名单业务事件类型', + `entry_id` varchar(128) NOT NULL COMMENT '生产者发件箱主键', + `event_id` varchar(128) DEFAULT NULL COMMENT '合法原事件UUID或ULID;格式错误时为空', + `target_name` varchar(64) NOT NULL COMMENT '固定目标业务服务', + `started_at` datetime(3) NOT NULL COMMENT '领取及审计事务提交前的开始时间', + `finished_at` datetime(3) DEFAULT NULL COMMENT '尝试完成或租约过期恢复时间', + `duration_ms` bigint DEFAULT NULL COMMENT '尝试耗时毫秒', + `outcome` varchar(24) NOT NULL COMMENT 'STARTED/APPLIED/DUPLICATE/STALE/RETRY/DEAD/LEASE_EXPIRED', + `error_code` varchar(64) DEFAULT NULL COMMENT '有限错误类别或HTTP状态;不含载荷与令牌', + `next_retry_at` datetime(3) DEFAULT NULL COMMENT '本次失败后下次计划投递时间', + PRIMARY KEY (`attempt_id`), + KEY `idx_delivery_attempt_entry` (`service_name`,`entry_id`,`started_at`), + KEY `idx_delivery_attempt_outcome` (`outcome`,`started_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='本服务业务事件逐次投递审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_work`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_work` ( + `work_item_key` varchar(96) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '不可变事项键,业务身份确定性生成', + `container_booking_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源柜次内部关联标识,不作展示编号', + `version` int NOT NULL DEFAULT '0' COMMENT '工作命令乐观锁版本', + `retired` tinyint(1) NOT NULL DEFAULT '0' COMMENT '已替代或已完成路线需求,不计活动工作', + `state_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '工作关系责任跟进及影响基线,不保存可编辑业务执行事实', + PRIMARY KEY (`work_item_key`), + KEY `idx_appointment_work_container` (`container_booking_id`,`retired`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约工作事项需求与关系'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_work_commitment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_work_commitment` ( + `entity_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原业务实体稳定键', + `state_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原业务命令产生的只读语义影响基线,不是第二份可编辑计划', + `impact_version` bigint NOT NULL DEFAULT '0' COMMENT '承诺影响单调递增版本', + PRIMARY KEY (`entity_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作事项承诺影响审计基线'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_work_guard`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_work_guard` ( + `id` int NOT NULL COMMENT '工作事项协调锁,固定1', + `scan_cursor` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '已开船来源同步游标', + `initialized` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否完成首次完整来源扫描', + `scope_version` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '完整同步已确认的权威来源集合版本', + `scan_scope_version` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前扫描来源集合版本,防跨页漂移', + `completed_at` datetime(3) DEFAULT NULL COMMENT '最近完整同步UTC时间', + `requirement_version` bigint NOT NULL DEFAULT '0' COMMENT '原域命令在同一事务推进的需求版本', + `synchronized_requirement_version` bigint NOT NULL DEFAULT '0' COMMENT '完整扫描已消费需求版本', + `scan_requirement_version` bigint NOT NULL DEFAULT '0' COMMENT '当前扫描需求版本,防跨页漂移', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约工作事项同步与命令串行守卫'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_appointment_work_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_appointment_work_history` ( + `id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '历史记录标识', + `work_item_key` varchar(96) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事项稳定键', + `operator_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实操作人员标识', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人显示名称', + `action` varchar(48) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '工作命令或观察动作', + `summary` varchar(2000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理或责任变更依据', + `command_key` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请求幂等键,观察记录为空', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '包含操作者的规范请求摘要', + `response_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '原命令响应快照,重放不随当前状态改变', + `occurred_at` datetime(3) NOT NULL COMMENT '历史发生UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_appointment_work_command` (`work_item_key`,`command_key`), + KEY `idx_appointment_work_history` (`work_item_key`,`occurred_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约工作事项历史与幂等命令'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_cargo_discard_application`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_cargo_discard_application` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `discard_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `outbound_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '废弃出库单号', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_codes` varchar(2000) COLLATE utf8mb4_unicode_ci NOT NULL, + `total_packages` int NOT NULL, + `fee_per_package` decimal(18,2) NOT NULL, + `total_fee` decimal(18,2) NOT NULL, + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'USD', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_REVIEW', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `review_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核幂等键', + `review_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核请求内容哈希', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `review_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `reviewed_at` datetime(3) DEFAULT NULL, + `completed_at` datetime(3) DEFAULT NULL COMMENT '废弃完成时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `customer_confirmed_at` datetime(3) DEFAULT NULL COMMENT '客户确认完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_cargo_discard_no` (`customer_id`,`discard_no`), + UNIQUE KEY `uk_ll_cargo_discard_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_cargo_discard_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_cargo_discard_warehouse` (`customer_id`,`overseas_warehouse_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Cargo discard application requiring warehouse approval'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_cargo_discard_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_cargo_discard_carton` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `application_id` bigint NOT NULL, + `item_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `carton_id` bigint NOT NULL, + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_cargo_discard_carton` (`application_id`,`carton_id`), + KEY `idx_ll_cargo_discard_carton_application` (`customer_id`,`application_id`,`item_id`), + KEY `idx_ll_cargo_discard_carton_identity` (`customer_id`,`carton_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Cartons reserved while a cargo discard application awaits review'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_cargo_discard_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_cargo_discard_item` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `application_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_id` bigint DEFAULT NULL COMMENT '一件代发订单ID', + `source_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'DROPSHIP' COMMENT '库存来源:一件代发DROPSHIP、退货箱RETURN_CARTON', + `return_carton_id` bigint DEFAULT NULL COMMENT '退货库存箱ID', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `profile_id` bigint DEFAULT NULL COMMENT '托盘档案ID', + `sku_inventory_id` bigint DEFAULT NULL COMMENT 'SKU库存记录ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `available_packages_snapshot` int NOT NULL, + `discard_packages` int NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `actual_discard_packages` int DEFAULT NULL, + `pda_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `pda_operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pda_completed_at` datetime(3) DEFAULT NULL, + `completion_photo_file_ids` text COLLATE utf8mb4_unicode_ci COMMENT 'PDA完工照片文件ID JSON数组', + `inventory_position_id` bigint DEFAULT NULL COMMENT '废弃来源库存仓位ID', + `carton_marks_json` text COLLATE utf8mb4_unicode_ci COMMENT '本次废弃所选真实箱唛快照JSON数组', + `carton_scan_required` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否需要逐箱核对本次所选箱子', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_cargo_discard_item` (`application_id`,`profile_id`,`sku_code`), + KEY `idx_ll_cargo_discard_item_list` (`customer_id`,`application_id`), + KEY `idx_ll_cargo_discard_item_inbound` (`customer_id`,`inbound_code`,`sku_code`), + KEY `idx_ll_cargo_discard_return_carton` (`customer_id`,`return_carton_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Frozen SKU quantities in a cargo discard application'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_cargo_discard_photo`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_cargo_discard_photo` ( + `id` bigint NOT NULL, + `customer_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `application_id` bigint NOT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `file_id` bigint NOT NULL, + `file_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `content_type` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `size_bytes` bigint NOT NULL, + `operator_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(6) NOT NULL, + `submitted_at` datetime(6) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_cargo_discard_photo_file` (`file_id`), + KEY `idx_cargo_discard_photo_application` (`customer_id`,`application_id`,`pallet_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_cargo_discard_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_cargo_discard_status_history` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `application_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_ll_cargo_discard_history` (`customer_id`,`application_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable cargo discard approval history'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_compact_number_clock`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_compact_number_clock` ( + `number_key` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务前缀和客户名称缩写', + `last_second` bigint NOT NULL COMMENT '最后分配的Unix逻辑秒', + PRIMARY KEY (`number_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外业务短单号分配时钟'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_container_arrival_time_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_container_arrival_time_operation` ( + `id` bigint NOT NULL COMMENT '柜级预计到仓时间修改操作ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定来源柜预订ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台请求幂等键', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化修改请求SHA-256摘要', + `result_version` int NOT NULL COMMENT '修改成功后的柜级时间版本', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台操作人名称', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '预计到仓时间修改备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_container_arrival_time_idempotency` (`idempotency_key`), + KEY `idx_ll_container_arrival_time_container` (`source_container_booking_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜级预计到仓时间修改幂等审计记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_container_loading_evidence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_container_loading_evidence` ( + `id` bigint NOT NULL COMMENT '海外整柜装柜照片投影ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国内稳定来源柜预订ID', + `evidence_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PHOTO_STEP_1至PHOTO_STEP_4或SEAL', + `source_file_id` bigint NOT NULL COMMENT '国内File服务文件ID', + `file_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国内文件名快照', + `created_at` datetime(3) NOT NULL COMMENT '投影创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_container_loading_evidence_type` (`source_container_booking_id`,`evidence_type`), + UNIQUE KEY `uk_ll_container_loading_evidence_file` (`source_container_booking_id`,`source_file_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外拆柜只读国内装柜照片引用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_container_plan_conversion_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_container_plan_conversion_command` ( + `id` bigint NOT NULL COMMENT '柜级转换命令ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定来源柜预订ID', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '调用方幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '确认请求SHA-256摘要', + `snapshot_version` bigint NOT NULL COMMENT '确认的柜级快照版本', + `snapshot_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '确认的柜级快照SHA-256', + `warehouse_id` bigint NOT NULL COMMENT '海外接柜仓ID', + `batch_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '海外仓托盘批次幂等键', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令状态:PREPARED/APPLYING/FAILED/LOCAL_COMMITTED/COMPLETED', + `lease_token` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前执行租约令牌,用于陈旧执行者隔离', + `preparation_json` json NOT NULL COMMENT '稳定计划号与托盘业务键快照', + `result_json` json DEFAULT NULL COMMENT '本地计划提交结果', + `last_error` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次跨服务错误', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '命令创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '命令状态或租约更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_container_conversion_command` (`source_container_booking_id`), + UNIQUE KEY `uk_ll_container_conversion_batch` (`warehouse_id`,`batch_key`), + KEY `idx_ll_container_conversion_status` (`status`,`updated_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜级入库计划转换Saga与幂等命令'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_container_shipping_gate`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_container_shipping_gate` ( + `container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源头程柜预订ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户标识', + `ocean_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源海运订舱ID', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际集装箱号', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'AWAITING_PICKUP_READY' COMMENT '海外收货门禁状态:AWAITING_PICKUP_READY、RECEIVING_AVAILABLE', + `standard_node` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最新有效标准船节点', + `node_sequence` int NOT NULL DEFAULT '0' COMMENT '最新有效节点单调序号', + `observed_at` datetime(3) DEFAULT NULL COMMENT '供应商节点观测时间', + `actual_at` datetime(3) DEFAULT NULL COMMENT '节点实际发生时间', + `location_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '节点地点编码', + `location_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '节点地点名称', + `provider_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '船节点供应商编码', + `provider_event_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商事件ID', + `provider_node_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商原始节点编码', + `source_reference` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商来源引用', + `raw_payload_hash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商原始负载SHA-256', + `aggregate_version` bigint NOT NULL DEFAULT '0' COMMENT '来源查询聚合版本', + `handover_version` bigint NOT NULL DEFAULT '1' COMMENT '跨区交接版本', + `last_event_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近采纳的跨区事件ID', + `payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近采纳事件规范化负载摘要', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`container_booking_id`), + KEY `idx_ll_shipping_gate_candidate` (`customer_id`,`container_no`,`status`), + KEY `idx_ll_shipping_gate_version` (`container_booking_id`,`aggregate_version`,`node_sequence`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA柜号船节点收货资格快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_customer_visit`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_customer_visit` ( + `id` bigint NOT NULL COMMENT '客户回访记录ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `delivery_order_id` bigint NOT NULL COMMENT '关联派送单ID', + `delivery_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '关联派送单号', + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户名称快照', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户联系人姓名快照', + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户联系人电话快照', + `destination` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送目的仓编码汇总快照', + `delivery_completed_at` datetime(3) NOT NULL COMMENT '派送完成时间', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING' COMMENT '回访状态:PENDING待回访或COMPLETED已回访', + `selected_last_mile_order_id` bigint DEFAULT NULL COMMENT '本次回访选择的尾程订单ID', + `selected_last_mile_order_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本次回访选择的尾程订单号', + `selected_inbound_order_id` bigint DEFAULT NULL COMMENT '本次回访选择的入仓单ID', + `selected_inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本次回访选择的入仓码', + `visit_result` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次回访结果', + `customer_feedback` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次客户反馈', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次回访备注', + `attachment_json` json DEFAULT NULL COMMENT '当前回访资料文件元数据列表', + `visited_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次回访操作人ID', + `visited_at` datetime(3) DEFAULT NULL COMMENT '最近一次回访时间', + `visit_count` int NOT NULL DEFAULT '0' COMMENT '累计保存回访次数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_customer_visit_delivery` (`customer_id`,`delivery_order_id`), + KEY `idx_ll_customer_visit_list` (`customer_id`,`status`,`delivery_completed_at`), + KEY `idx_ll_customer_visit_delivery_no` (`customer_id`,`delivery_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='派送单维度客户回访记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_delivery_document_revision`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_delivery_document_revision` ( + `id` bigint NOT NULL COMMENT '派送资料历史ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '派送所属客户隔离键', + `delivery_order_id` bigint NOT NULL COMMENT '派送单ID', + `version` bigint NOT NULL COMMENT '保存成功时派送单版本', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资料保存幂等键', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '完整保存请求哈希', + `snapshot_json` json NOT NULL COMMENT '不可变三类资料及BOL号结果快照', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '保存操作人ID', + `created_at` datetime(3) NOT NULL COMMENT '资料保存时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_delivery_document_command` (`customer_id`,`delivery_order_id`,`idempotency_key`), + UNIQUE KEY `uk_delivery_document_version` (`customer_id`,`delivery_order_id`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='派送资料版本历史与幂等保存记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_delivery_fee`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_delivery_fee` ( + `id` bigint NOT NULL COMMENT '派送费用主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `delivery_order_id` bigint NOT NULL COMMENT '派送单ID', + `fee_direction` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PAYABLE' COMMENT '应收应付方向', + `fee_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用类型', + `currency` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '币种', + `amount` decimal(18,2) NOT NULL COMMENT '费用金额', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '费用备注', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_delivery_fee_order` (`customer_id`,`delivery_order_id`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='派送单费用明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_delivery_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_delivery_operation` ( + `id` bigint NOT NULL COMMENT '派送操作主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `delivery_order_id` bigint NOT NULL COMMENT '派送单ID', + `operation_node` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作节点', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人ID', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人名称', + `result` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理结果', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + KEY `idx_ll_delivery_operation_order` (`customer_id`,`delivery_order_id`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='派送单操作记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_delivery_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_delivery_order` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `delivery_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `outbound_order_id` bigint NOT NULL, + `outbound_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `dispatch_order_id` bigint DEFAULT NULL COMMENT '关联派车单ID,仓储转运直接出库时为空', + `dispatch_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关联派车单号,仓储转运直接出库时为空', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外仓名称快照', + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户名称快照', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本派送单目的FBA仓ID快照', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本派送单目的FBA仓编码快照,私人仓为空', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本派送单目的FBA仓名称快照', + `destination_type` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地类型:FBA或PRIVATE', + `delivery_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓派送地址', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系人', + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系电话', + `delivery_group_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '同一出库单内按目的FBA仓拆单的稳定分组键', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'WAIT_DELIVERY', + `seller_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '卖家姓名', + `package_count` int NOT NULL DEFAULT '0', + `pallet_count` int NOT NULL DEFAULT '0', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送备注', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `version` bigint NOT NULL DEFAULT '0' COMMENT '派送单乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `waybill_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '承运运单号', + `delivery_method` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送方式', + `carrier_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送承运商', + `pickup_method` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '提货方式', + `loading_type` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '装车类型', + `vehicle_type` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '车辆类型', + `vehicle_size` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '车辆大小', + `vehicle_plate` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '车牌号', + `driver_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '司机或车队名称', + `driver_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '车队联系电话', + `appointment_account` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '预约账号', + `total_weight_kg` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '总重量(千克)', + `total_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '体积(立方米),来源未确认时为空', + `planned_delivery_at` datetime(3) DEFAULT NULL COMMENT '预计派送时间', + `dispatched_at` datetime(3) DEFAULT NULL COMMENT '实际派送时间', + `expected_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到达时间', + `signed_at` datetime(3) DEFAULT NULL COMMENT '签收时间', + `bol_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送资料BOL号,不作为文件归属标识', + `documents_json` json DEFAULT NULL COMMENT '娲鹃�佷笁绫昏祫鏂欏綋鍓嶇粦瀹氬強鏉冨▉鏂囦欢鍏冩暟鎹揩鐓�', + `postal_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓邮编', + `signed_packages` int DEFAULT NULL COMMENT '保存签收资料时冻结的实际签收箱数,不含此前已退回量', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_delivery_no` (`customer_id`,`delivery_no`), + UNIQUE KEY `uk_ll_delivery_idempotency` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_delivery_outbound_destination` (`customer_id`,`outbound_order_id`,`delivery_group_key`), + KEY `idx_ll_delivery_list` (`customer_id`,`status`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Delivery document linked to an outbound document'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_destuff_pallet_cost`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_destuff_pallet_cost` ( + `id` bigint NOT NULL COMMENT '主键ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源柜次业务ID', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '集装箱号', + `warehouse_id` bigint DEFAULT NULL COMMENT '海外仓ID', + `pallet_count` int NOT NULL COMMENT '实际打托数', + `total_actual_volume_cbm` decimal(20,6) NOT NULL COMMENT '客户实收总体积', + `total_cost` decimal(20,2) NOT NULL COMMENT '打托总成本', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '成本币种', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '生成状态', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_destuff_cost_booking` (`source_container_booking_id`), + CONSTRAINT `chk_ll_destuff_cost` CHECK (((`pallet_count` > 0) and (`total_actual_volume_cbm` > 0) and (`total_cost` > 0) and (`currency` = _utf8mb4'CNY'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='拆柜打托实际成本汇总'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_destuff_pallet_cost_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_destuff_pallet_cost_allocation` ( + `id` bigint NOT NULL COMMENT '主键ID', + `cost_id` bigint NOT NULL COMMENT '打托成本汇总ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID', + `actual_volume_cbm` decimal(20,6) NOT NULL COMMENT '客户实收体积', + `allocated_amount` decimal(20,2) NOT NULL COMMENT '客户分摊金额', + `fee_source_id` bigint NOT NULL COMMENT '海外费用来源ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_destuff_customer` (`cost_id`,`customer_id`), + UNIQUE KEY `uk_ll_destuff_fee_source` (`fee_source_id`), + CONSTRAINT `chk_ll_destuff_allocation` CHECK (((`actual_volume_cbm` > 0) and (`allocated_amount` >= 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='拆柜打托成本按客户实收体积分摊'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_appointment_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_appointment_allocation` ( + `dispatch_id` bigint NOT NULL COMMENT '排车单标识', + `dispatch_item_id` bigint NOT NULL COMMENT '排车明细标识', + `plan_pallet_id` bigint NOT NULL COMMENT '入仓计划托盘标识', + `batch_key` varchar(96) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预约稳定批次键', + `customer_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属客户标识', + `source_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '货物来源稳定键', + `destination_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目的地稳定键', + `package_count` int NOT NULL COMMENT '本票分配实物箱数', + PRIMARY KEY (`dispatch_item_id`,`batch_key`,`source_key`,`destination_key`), + KEY `idx_dispatch_appointment_batch` (`batch_key`,`customer_id`), + KEY `idx_dispatch_appointment_dispatch` (`dispatch_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='排车实物与预约批次逐票分配,原执行域事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_draft`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_draft` ( + `id` bigint NOT NULL, + `draft_token` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `plan_ids_json` varchar(4000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `containers_json` longtext COLLATE utf8mb4_unicode_ci, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', + `expires_at` datetime(3) DEFAULT NULL, + `released_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_draft_token` (`draft_token`), + KEY `idx_ll_dispatch_draft_operator` (`operator_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='智能排车草稿'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_draft_container`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_draft_container` ( + `id` bigint NOT NULL, + `draft_id` bigint NOT NULL, + `draft_token` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `sequence_no` int NOT NULL, + `capacity` int NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_ll_dispatch_draft_container_token` (`draft_token`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='智能排车草稿装车托盘'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_item` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `dispatch_order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `plan_id` bigint DEFAULT NULL, + `plan_pallet_id` bigint DEFAULT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL, + `order_id` bigint DEFAULT NULL, + `order_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `order_refs` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `package_count` int NOT NULL DEFAULT '0', + `gross_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '毛重(千克)', + `volume_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '材积重(千克)', + `volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000', + `source_stage` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PLAN or RECEIVED', + `carton_marks` varchar(4000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标箱唛映射快照', + `source_business_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源业务类型', + `source_business_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源业务单号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `destination_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的类型:FBA或PRIVATE', + `delivery_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓目的地址快照', + `postal_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓邮编快照', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系人快照', + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系电话快照', + `return_receipt_id` bigint DEFAULT NULL COMMENT '明确选用的真实退回入仓来源', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_item_source` (`dispatch_order_id`,`plan_pallet_id`,`warehouse_pallet_id`), + KEY `idx_ll_dispatch_item_order` (`customer_id`,`order_id`), + KEY `idx_ll_dispatch_item_inbound` (`customer_id`,`inbound_code`), + KEY `idx_ll_dispatch_item_pallet` (`customer_id`,`plan_pallet_id`,`warehouse_pallet_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Frozen pallet and cargo snapshot for a dispatch order'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_order` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `dispatch_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Dispatch order number', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `vehicle_plate` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Editable vehicle plate; required before PDA picking', + `driver_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `driver_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `carrier_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `route` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `depart_at` datetime(3) DEFAULT NULL, + `fba_appointment_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `fba_appointment_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `vehicle_appointment_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `estimated_arrival_at` datetime(3) DEFAULT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_DEPARTURE', + `item_count` int NOT NULL DEFAULT '0', + `pallet_count` int NOT NULL DEFAULT '0', + `package_count` int NOT NULL DEFAULT '0', + `picked_package_count` int NOT NULL DEFAULT '0', + `shipped_package_count` int NOT NULL DEFAULT '0', + `partial_completion_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_order_no` (`customer_id`,`dispatch_no`), + KEY `idx_ll_dispatch_order_list` (`customer_id`,`status`,`depart_at`), + KEY `idx_ll_dispatch_order_vehicle` (`customer_id`,`vehicle_plate`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Last-leg pre-dispatch order'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_pallet_lock`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_pallet_lock` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_pallet_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PLAN:{planPalletId} or RECEIVED:{warehousePalletId}', + `active_key` varchar(160) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Equals source key only while lock is active', + `plan_id` bigint DEFAULT NULL, + `plan_pallet_id` bigint DEFAULT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL, + `dispatch_order_id` bigint DEFAULT NULL COMMENT '正式派车单ID,草稿锁阶段为空', + `draft_container_id` bigint DEFAULT NULL COMMENT '智能排车草稿装车托盘ID', + `draft_token` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '智能排车草稿随机标识', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '草稿锁操作人ID', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', + `locked_at` datetime(3) NOT NULL, + `expires_at` datetime(3) DEFAULT NULL COMMENT '草稿锁失效时间,正式派车锁为空', + `released_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `return_receipt_id` bigint DEFAULT NULL COMMENT '明确选用的真实退回入仓来源', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_active_pallet` (`customer_id`,`active_key`), + KEY `idx_ll_dispatch_pallet_lock_order` (`customer_id`,`dispatch_order_id`,`status`), + KEY `idx_ll_dispatch_pallet_lock_source` (`customer_id`,`source_pallet_key`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Active dispatch pallet exclusion lock'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_pda_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_pda_operation` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `task_id` bigint DEFAULT NULL, + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `result_json` longtext COLLATE utf8mb4_unicode_ci, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_pda_operation_key` (`customer_id`,`idempotency_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Idempotent dispatch PDA operations'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_pda_pick`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_pda_pick` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `task_id` bigint NOT NULL, + `dispatch_item_id` bigint NOT NULL, + `inventory_position_id` bigint DEFAULT NULL COMMENT '普通库存仓位记录ID', + `packages` bigint NOT NULL, + `product_quantity` bigint NOT NULL DEFAULT '0', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `picked_at` datetime(3) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `return_carton_id` bigint DEFAULT NULL COMMENT '独立退货库存箱ID,与普通仓位互斥', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_pda_pick_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_dispatch_pda_pick_item` (`customer_id`,`task_id`,`dispatch_item_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable dispatch PDA pallet package picks'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_pda_pick_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_pda_pick_order` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `pick_id` bigint NOT NULL, + `receipt_id` bigint DEFAULT NULL COMMENT '原入仓实收来源,与退回来源或原生退货箱互斥', + `order_id` bigint NOT NULL, + `packages` bigint NOT NULL, + `product_quantity` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `return_carton_id` bigint DEFAULT NULL COMMENT '原生退货箱来源ID,与实收来源互斥', + `return_receipt_id` bigint DEFAULT NULL COMMENT '明确选用的真实退回入仓来源', + PRIMARY KEY (`id`), + KEY `idx_ll_dispatch_pick_order_pick` (`customer_id`,`pick_id`), + KEY `idx_ll_dispatch_pick_order_receipt` (`customer_id`,`receipt_id`), + CONSTRAINT `chk_dispatch_pick_receipt_source` CHECK (((((`receipt_id` is not null) + (`return_receipt_id` is not null)) + (`return_carton_id` is not null)) = 1)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PDA pick attribution to frozen inbound receipt and tail order'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dispatch_pda_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dispatch_pda_task` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `dispatch_order_id` bigint NOT NULL, + `task_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pushed_at` datetime(3) NOT NULL, + `completed_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dispatch_pda_task_dispatch` (`customer_id`,`dispatch_order_id`), + UNIQUE KEY `uk_ll_dispatch_pda_task_no` (`customer_id`,`task_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PDA task for a pre-arranged dispatch'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dropship_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dropship_carton` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_id` bigint NOT NULL, + `profile_id` bigint NOT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `carton_sequence` int NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'AVAILABLE', + `outbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `version` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dropship_carton` (`customer_id`,`order_id`,`carton_mark`), + KEY `idx_ll_dropship_carton_status` (`customer_id`,`status`), + KEY `idx_ll_dropship_carton_sku` (`customer_id`,`sku_code`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dropship_carton_ledger`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dropship_carton_ledger` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_id` bigint NOT NULL, + `carton_id` bigint NOT NULL, + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `before_packages` bigint NOT NULL, + `delta_packages` bigint NOT NULL, + `after_packages` bigint NOT NULL, + `business_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `occurred_at` datetime(3) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dropship_ledger_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_dropship_ledger_sku` (`customer_id`,`sku_code`,`carton_mark`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dropship_carton_sku`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dropship_carton_sku` ( + `id` bigint NOT NULL COMMENT '主键ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `profile_id` bigint NOT NULL COMMENT '一件代发托盘档案ID', + `carton_id` bigint NOT NULL COMMENT '一件代发物理箱ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '箱内SKU编码', + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '产品名称快照', + `product_quantity` bigint NOT NULL COMMENT '该物理箱内此SKU实收件数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dropship_carton_sku` (`carton_id`,`sku_code`), + KEY `idx_ll_dropship_carton_sku_order` (`customer_id`,`order_id`,`sku_code`), + KEY `idx_ll_dropship_carton_sku_profile` (`customer_id`,`profile_id`,`sku_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='一件代发物理箱内SKU明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dropship_order_profile`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dropship_order_profile` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_id` bigint NOT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Pallet number snapshot supplied by first-leg handover', + `inventory_position_id` bigint DEFAULT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'RECEIVED', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `version` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dropship_profile_key` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_dropship_profile_order_pallet` (`customer_id`,`order_id`,`source_pallet_no`), + KEY `idx_ll_dropship_profile_order` (`customer_id`,`order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_dropship_sku_inventory`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_dropship_sku_inventory` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_id` bigint NOT NULL, + `profile_id` bigint NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `package_count` bigint NOT NULL, + `product_quantity` bigint NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_dropship_sku_profile` (`profile_id`,`sku_code`), + KEY `idx_ll_dropship_sku_order` (`customer_id`,`order_id`,`sku_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_event_conflict`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_event_conflict` ( + `id` bigint NOT NULL COMMENT '冲突记录主键', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '冲突事件 ID', + `customer_id` bigint NOT NULL COMMENT '租户 ID', + `conflict_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '冲突类型', + `conflict_message` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '冲突说明', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_conflict_event` (`event_id`,`customer_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='事件冲突记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_event_inbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_event_inbox` ( + `id` bigint NOT NULL COMMENT '事件接收记录主键', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件全局唯一 ID', + `customer_id` bigint NOT NULL COMMENT '租户 ID', + `event_type` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件类型', + `aggregate_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聚合类型', + `aggregate_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聚合 ID', + `aggregate_version` bigint NOT NULL COMMENT '聚合版本', + `payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '负载摘要', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '消费状态', + `error_message` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '错误信息', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbox_event` (`event_id`), + KEY `idx_ll_inbox_source` (`customer_id`,`aggregate_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通用事件接收幂等箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_event_outbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_event_outbox` ( + `id` bigint NOT NULL COMMENT '事件主键ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `aggregate_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聚合类型', + `aggregate_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聚合标识', + `event_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件类型', + `event_version` int NOT NULL COMMENT '事件版本', + `event_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务幂等键', + `payload_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件载荷JSON', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING' COMMENT '发布状态', + `retry_count` int NOT NULL DEFAULT '0' COMMENT '重试次数', + `next_retry_at` datetime(3) DEFAULT NULL COMMENT '下次重试时间', + `published_at` datetime(3) DEFAULT NULL COMMENT '发布时间', + `locked_at` datetime(3) DEFAULT NULL COMMENT '投递租约获取时间', + `locked_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '投递租约持有者', + `last_error` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最后一次发布错误', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_event_outbox_key` (`event_key`), + KEY `idx_ll_event_outbox_publish` (`status`,`next_retry_at`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程跨区业务事件发件箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_exception_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_exception_order` ( + `id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `exception_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `exception_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL, + `last_mile_order_id` bigint DEFAULT NULL, + `last_mile_order_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_order_id` bigint DEFAULT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `delivery_order_id` bigint DEFAULT NULL, + `delivery_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `outbound_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `package_count` int DEFAULT NULL, + `return_direction` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `return_logistics_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `handling_action` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `handling_result` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '异常处理结果', + `evidence_file_ids_json` json DEFAULT NULL COMMENT '异常处理证据文件ID列表', + `inventory_adjustment_id` bigint DEFAULT NULL COMMENT '退回库存恢复操作ID', + `handler_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `handler_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'MANUAL', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `exception_at` datetime(3) NOT NULL, + `completed_at` datetime(3) DEFAULT NULL COMMENT '异常处理完成时间', + `version` bigint NOT NULL DEFAULT '0' COMMENT '异常订单乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_exception_no` (`customer_id`,`exception_no`), + UNIQUE KEY `uk_ll_exception_delivery_return` (`customer_id`,`delivery_order_id`,`exception_type`), + KEY `idx_ll_exception_list` (`customer_id`,`status`,`exception_at`), + KEY `idx_ll_exception_tail` (`customer_id`,`last_mile_order_no`), + KEY `idx_ll_exception_inbound` (`customer_id`,`inbound_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外仓异常订单'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_exception_order_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_exception_order_command` ( + `id` bigint NOT NULL COMMENT '异常处理命令ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `exception_order_id` bigint NOT NULL COMMENT '异常订单ID', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常处理动作', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '幂等键', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容SHA256哈希', + `result_json` json NOT NULL COMMENT '命令结果快照', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_exception_command_key` (`customer_id`,`action`,`idempotency_key`), + KEY `idx_ll_exception_command_order` (`customer_id`,`exception_order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='异常处理命令幂等审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_exception_return_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_exception_return_item` ( + `id` bigint NOT NULL COMMENT '异常退回明细ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `exception_order_id` bigint NOT NULL COMMENT '异常订单ID', + `outbound_pallet_item_id` bigint NOT NULL COMMENT '原出库托盘明细ID', + `inventory_position_id` bigint NOT NULL COMMENT '原出库库存位置ID', + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原出库托盘码快照', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原出库SKU快照', + `max_return_packages` bigint NOT NULL COMMENT '原出库可退箱数上限', + `approved_return_packages` bigint NOT NULL COMMENT '批准退回箱数', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_exception_return_source` (`customer_id`,`exception_order_id`,`outbound_pallet_item_id`,`inventory_position_id`), + KEY `idx_ll_exception_return_order` (`customer_id`,`exception_order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='异常退回原出库库存冻结明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_finance_fee_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_finance_fee_command` ( + `id` bigint NOT NULL COMMENT '幂等命令ID', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人ID', + `action` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'CREATE、SUBMIT、REVIEW、ADJUST或VOID', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容SHA-256', + `source_fee_id` bigint NOT NULL COMMENT '稳定费用来源ID', + `source_version` int NOT NULL COMMENT '命令结果版本', + `created_at` datetime(3) NOT NULL COMMENT '命令创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_finance_fee_command` (`operator_id`,`action`,`idempotency_key`), + KEY `idx_ll_finance_fee_command_source` (`source_fee_id`,`source_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外费用来源写操作幂等审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_finance_fee_source`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_finance_fee_source` ( + `id` bigint NOT NULL COMMENT '费用版本记录ID', + `source_fee_id` bigint NOT NULL COMMENT '跨版本稳定费用来源ID', + `source_version` int NOT NULL COMMENT '费用来源版本,从1递增', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `customer_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户名称快照', + `source_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '海外费用来源类型', + `source_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源业务编号或入仓码快照', + `business_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源业务类型', + `business_id` bigint DEFAULT NULL COMMENT '来源业务记录ID', + `business_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源业务编号', + `order_id` bigint DEFAULT NULL COMMENT '关联订单ID', + `inbound_id` bigint DEFAULT NULL COMMENT '关联海外入仓计划或入仓记录ID', + `inbound_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关联入仓码;并非所有费用必填', + `container_id` bigint DEFAULT NULL COMMENT '关联柜次ID', + `container_booking_id` bigint DEFAULT NULL COMMENT '来源订舱柜ID', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '真实集装箱号快照', + `warehouse_id` bigint DEFAULT NULL COMMENT '关联海外仓ID', + `fee_item_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项目编码快照', + `fee_item_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项目名称快照', + `direction` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'RECEIVABLE应收或PAYABLE应付', + `supplier_id` bigint DEFAULT NULL COMMENT '应付供应商ID', + `supplier_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '应付供应商名称快照', + `supplier_category` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '应付供应商类别约束', + `settlement_mode` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ON_ACCOUNT账期应付或DIRECT_PAID业务已付', + `paid_at` datetime(3) DEFAULT NULL COMMENT '直接已付时间', + `payment_method` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '直接已付方式', + `payment_reference_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '直接已付流水号', + `payment_voucher_file_ids` json DEFAULT NULL COMMENT '直接已付凭证文件ID快照', + `wallet_settlement` json DEFAULT NULL COMMENT '已实扣应收的Finance资金命令、冻结和消费流水引用', + `business_date` date NOT NULL COMMENT '费用业务日期', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '财务结算币种,当前固定CNY', + `amount` decimal(20,6) NOT NULL COMMENT '费用金额', + `review_status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'DRAFT、PENDING、APPROVED或REJECTED', + `publication_status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'UNPUBLISHED或PUBLISHED', + `source_status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ACTIVE、SUPERSEDED或VOIDED', + `review_reason` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核或作废原因', + `reviewer_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核人ID', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '审核时间', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人ID', + `updated_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '最后更新人ID', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + `original_currency` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '原币币种', + `original_amount` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '原币金额', + `exchange_rate` decimal(18,8) NOT NULL DEFAULT '1.00000000' COMMENT '原币折算CNY汇率', + `exchange_rate_month` char(7) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '汇率月份YYYY-MM', + `chargeable_quantity` decimal(18,4) DEFAULT NULL COMMENT '计费数量', + `quantity_unit` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '计费单位', + `unit_price` decimal(18,4) DEFAULT NULL COMMENT '原币单价', + `period_start` date DEFAULT NULL COMMENT '周期费用开始日期', + `period_end` date DEFAULT NULL COMMENT '周期费用结束日期', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_finance_fee_version` (`source_fee_id`,`source_version`), + KEY `idx_ll_finance_fee_customer` (`customer_id`,`source_status`,`created_at`), + KEY `idx_ll_finance_fee_business` (`business_type`,`business_no`,`created_at`), + KEY `idx_ll_finance_fee_container_customer` (`container_booking_id`,`customer_id`,`source_status`,`created_at`), + CONSTRAINT `chk_ll_finance_fee_amount` CHECK ((`amount` > 0)), + CONSTRAINT `chk_ll_finance_fee_currency` CHECK ((`currency` = _utf8mb4'CNY')), + CONSTRAINT `chk_ll_finance_fee_direction` CHECK ((`direction` in (_utf8mb4'RECEIVABLE',_utf8mb4'PAYABLE'))), + CONSTRAINT `chk_ll_finance_fee_publication` CHECK ((`publication_status` in (_utf8mb4'UNPUBLISHED',_utf8mb4'PUBLISHED'))), + CONSTRAINT `chk_ll_finance_fee_review` CHECK ((`review_status` in (_utf8mb4'DRAFT',_utf8mb4'PENDING',_utf8mb4'APPROVED',_utf8mb4'REJECTED'))), + CONSTRAINT `chk_ll_finance_fee_status` CHECK ((`source_status` in (_utf8mb4'ACTIVE',_utf8mb4'SUPERSEDED',_utf8mb4'VOIDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外业务不可变费用来源版本;发布后经跨区事件进入Finance'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_capacity_offer`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_capacity_offer` ( + `id` bigint NOT NULL COMMENT '内部主键', + `offer_no` varchar(64) NOT NULL COMMENT '拼车运力发布业务编号', + `trip_id` bigint NOT NULL COMMENT '唯一所属车次', + `trip_no` varchar(64) NOT NULL COMMENT '车次业务编号', + `status` varchar(16) NOT NULL COMMENT '发布状态:草稿、开放、暂停、关闭', + `cutoff_at` datetime(3) NOT NULL COMMENT '最晚交货及新询价截止UTC时间', + `contact_name` varchar(128) DEFAULT NULL COMMENT '对内部销售公开的调度联系人', + `contact_phone` varchar(128) DEFAULT NULL COMMENT '对内部销售公开的调度联系电话', + `remark` varchar(1000) DEFAULT NULL COMMENT '公开承运说明', + `published_fingerprint` char(64) DEFAULT NULL COMMENT '已核对路线车辆及容量计划事实摘要', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` varchar(64) NOT NULL COMMENT '创建人', + `created_at` datetime(3) NOT NULL COMMENT '创建UTC时间', + `updated_by` varchar(64) NOT NULL COMMENT '修改人', + `updated_at` datetime(3) NOT NULL COMMENT '修改UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_capacity_offer_no` (`offer_no`), + UNIQUE KEY `uk_fleet_capacity_offer_trip` (`trip_id`), + KEY `idx_fleet_capacity_offer_status` (`status`,`cutoff_at`,`id`), + CONSTRAINT `fk_fleet_capacity_offer_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`), + CONSTRAINT `chk_fleet_capacity_offer_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'OPEN',_utf8mb4'PAUSED',_utf8mb4'CLOSED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='内部拼车车次余位发布;容量实时计算不在此另存'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_capacity_offer_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_capacity_offer_command` ( + `id` bigint NOT NULL COMMENT '内部主键', + `trip_id` bigint NOT NULL COMMENT '所属车次锁作用域', + `operator_id` varchar(64) NOT NULL COMMENT '原请求操作者', + `action` varchar(32) NOT NULL COMMENT '业务命令类型', + `scope_no` varchar(64) NOT NULL COMMENT '发布或预订业务编号作用域', + `idempotency_key` varchar(128) NOT NULL COMMENT '原请求幂等键', + `request_hash` char(64) NOT NULL COMMENT '原请求业务内容摘要', + `result_json` json NOT NULL COMMENT '成功命令原始结果用于精确重放', + `created_at` datetime(3) NOT NULL COMMENT '命令完成UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_capacity_offer_command` (`trip_id`,`operator_id`,`action`,`scope_no`,`idempotency_key`), + CONSTRAINT `fk_fleet_capacity_command_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='拼车发布及销售意向持久幂等结果'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_driver`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_driver` ( + `id` bigint NOT NULL COMMENT '内部主键', + `driver_no` varchar(32) NOT NULL COMMENT '司机业务编号', + `warehouse_id` bigint DEFAULT NULL COMMENT '所属公共仓库引用', + `warehouse_code` varchar(64) DEFAULT NULL COMMENT '所属仓库编码快照', + `warehouse_name` varchar(256) DEFAULT NULL COMMENT '所属仓库名称快照', + `vehicle_models` varchar(128) DEFAULT NULL COMMENT '可驾驶车型描述', + `languages_and_area` varchar(256) DEFAULT NULL COMMENT '语言及服务区域', + `medical_expires_on` date DEFAULT NULL COMMENT '体检到期日,当前不作为必需资质', + `training_expires_on` date DEFAULT NULL COMMENT '培训安全到期日,当前不作为必需资质', + `insurance_expires_on` date DEFAULT NULL COMMENT '保险到期日,当前不作为必需资质', + `name` varchar(128) NOT NULL COMMENT '姓名', + `phone` varchar(64) NOT NULL COMMENT '联系电话', + `ownership` varchar(16) NOT NULL COMMENT '归属 OWNED自有 DISPATCHED外派', + `region` varchar(16) NOT NULL COMMENT '区域 DOMESTIC国内 OVERSEAS海外', + `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用', + `review_status` varchar(16) NOT NULL DEFAULT 'PENDING' COMMENT '证照审核 PENDING待审 APPROVED通过 REJECTED打回', + `license_number` varchar(128) DEFAULT NULL COMMENT '驾驶证编号', + `license_type` varchar(64) DEFAULT NULL COMMENT '驾驶证类型', + `license_issued_on` date DEFAULT NULL COMMENT '驾驶证签发日期', + `license_expires_on` date DEFAULT NULL COMMENT '驾驶证有效截止日', + `license_zone` varchar(64) NOT NULL COMMENT '证照有效日期的IANA时区', + `license_file_id` bigint DEFAULT NULL COMMENT '平台驾驶证文件引用', + `remark` varchar(1000) DEFAULT NULL COMMENT '备注', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '并发版本', + `created_by` varchar(64) NOT NULL COMMENT '创建人', + `created_at` datetime(3) NOT NULL COMMENT '创建时间UTC', + `updated_by` varchar(64) NOT NULL COMMENT '修改人', + `updated_at` datetime(3) NOT NULL COMMENT '修改时间UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_driver_no` (`driver_no`), + KEY `idx_fleet_driver_page` (`active`,`review_status`,`updated_at`,`id`), + KEY `idx_fleet_driver_expiry` (`license_expires_on`), + CONSTRAINT `chk_fleet_driver_dates` CHECK (((`license_issued_on` is null) or (`license_expires_on` is null) or (`license_issued_on` <= `license_expires_on`))), + CONSTRAINT `chk_fleet_driver_ownership` CHECK ((`ownership` in (_utf8mb4'OWNED',_utf8mb4'DISPATCHED'))), + CONSTRAINT `chk_fleet_driver_region` CHECK ((`region` in (_utf8mb4'DOMESTIC',_utf8mb4'OVERSEAS'))), + CONSTRAINT `chk_fleet_driver_review` CHECK ((`review_status` in (_utf8mb4'PENDING',_utf8mb4'APPROVED',_utf8mb4'REJECTED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台司机档案'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_driver_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_driver_history` ( + `id` bigint NOT NULL COMMENT '内部主键', + `driver_id` bigint NOT NULL COMMENT '司机内部引用', + `record_version` bigint NOT NULL COMMENT '操作后的档案版本', + `action` varchar(32) NOT NULL COMMENT '创建编辑启停证照上传及审核动作', + `reason` varchar(1000) DEFAULT NULL COMMENT '操作原因或审核意见', + `license_file_id` bigint DEFAULT NULL COMMENT '当时驾驶证文件引用', + `snapshot_json` json NOT NULL COMMENT '操作后不可变档案快照', + `operator_id` varchar(64) NOT NULL COMMENT '操作人', + `occurred_at` datetime(3) NOT NULL COMMENT '操作时间UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_driver_history_version` (`driver_id`,`record_version`), + KEY `idx_fleet_driver_history_file` (`driver_id`,`license_file_id`), + CONSTRAINT `fk_fleet_driver_history_driver` FOREIGN KEY (`driver_id`) REFERENCES `ll_fleet_driver` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='司机档案及审核历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_external_booking`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_external_booking` ( + `id` bigint NOT NULL COMMENT '内部主键', + `booking_no` varchar(32) NOT NULL COMMENT '外接预订业务编号', + `trip_id` bigint NOT NULL COMMENT '所属车次', + `trip_no` varchar(32) NOT NULL COMMENT '车次业务编号', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '委托客户及付款归属', + `customer_code` varchar(64) NOT NULL COMMENT '客户编号快照', + `customer_name` varchar(255) NOT NULL COMMENT '客户名称快照', + `status` varchar(16) NOT NULL COMMENT 'DRAFT询价/CONFIRMED占位/RECEIVED确认实收/BOUND关联发运/CANCELLED取消', + `cargo_json` json NOT NULL COMMENT '货物、计划载荷、联系人及约定报价快照', + `quote_source_json` json DEFAULT NULL COMMENT '选用销售报价的可信版本快照,与实际成交金额分开保存', + `destination_key` varchar(160) NOT NULL COMMENT '已有路线卸货站匹配键', + `destination_label` varchar(255) NOT NULL COMMENT '约定卸货站名称', + `agreed_amount` decimal(16,2) DEFAULT NULL COMMENT '约定金额,非已入账应收或实收', + `idempotency_key` varchar(128) NOT NULL COMMENT '登记请求键', + `request_hash` char(64) NOT NULL COMMENT '登记内容摘要', + `confirm_key` varchar(128) DEFAULT NULL COMMENT '承运确认请求键', + `confirm_hash` char(64) DEFAULT NULL COMMENT '承运确认摘要', + `cancel_key` varchar(128) DEFAULT NULL COMMENT '取消请求键', + `cancel_hash` char(64) DEFAULT NULL COMMENT '取消摘要', + `incoming_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '正式来货单业务编号', + `dispatch_no` varchar(64) DEFAULT NULL COMMENT '已关联客户排车业务编号', + `receipt_json` json DEFAULT NULL COMMENT '实测来源及运营确认的托位和运费依据', + `incoming_key` varchar(128) DEFAULT NULL COMMENT '来货登记请求键', + `incoming_hash` char(64) DEFAULT NULL COMMENT '来货登记摘要', + `receipt_key` varchar(128) DEFAULT NULL COMMENT '实收确认请求键', + `receipt_hash` char(64) DEFAULT NULL COMMENT '实收确认摘要', + `binding_key` varchar(128) DEFAULT NULL COMMENT '关联发运请求键', + `binding_hash` char(64) DEFAULT NULL COMMENT '关联发运摘要', + `offer_id` bigint DEFAULT NULL COMMENT '来源运力发布,普通车次预订为空', + `sales_owner_user_id` varchar(64) DEFAULT NULL COMMENT '登录身份冻结的销售负责人', + `business_type` varchar(32) DEFAULT NULL COMMENT '本土商业类型LOCAL_LOOSEBOARD或US_TRUCK', + `delivery_mode` varchar(32) DEFAULT NULL COMMENT '客户送仓或人工安排提货回仓', + `estimated_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计实际到我仓UTC时间', + `expected_pallet_count` int DEFAULT NULL COMMENT '预计实托数,与托位分开且未知为空', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '记录版本', + `created_by` varchar(64) NOT NULL COMMENT '登记人', + `created_at` datetime(3) NOT NULL COMMENT '登记UTC时间', + `updated_by` varchar(64) NOT NULL COMMENT '修改人', + `updated_at` datetime(3) NOT NULL COMMENT '修改UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_booking_no` (`booking_no`), + UNIQUE KEY `uk_fleet_booking_create` (`trip_id`,`created_by`,`idempotency_key`), + UNIQUE KEY `uk_fleet_booking_incoming` (`incoming_no`), + KEY `idx_fleet_booking_offer` (`offer_id`,`status`,`id`), + KEY `idx_fleet_booking_sales` (`sales_owner_user_id`,`offer_id`,`id`), + KEY `idx_fleet_booking_trip` (`trip_id`,`status`,`id`), + KEY `idx_fleet_booking_dispatch` (`dispatch_no`), + CONSTRAINT `fk_fleet_booking_offer` FOREIGN KEY (`offer_id`) REFERENCES `ll_fleet_capacity_offer` (`id`), + CONSTRAINT `fk_fleet_booking_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`), + CONSTRAINT `chk_fleet_booking_expected_pallet` CHECK (((`expected_pallet_count` is null) or (`expected_pallet_count` > 0))), + CONSTRAINT `chk_fleet_booking_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'CONFIRMED',_utf8mb4'RECEIVED',_utf8mb4'BOUND',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='外接询价及确认承运占位;货物收发和费用入账分别引用正式事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_finance_source`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_finance_source` ( + `id` bigint unsigned NOT NULL COMMENT '来源提交主键', + `record_id` bigint unsigned NOT NULL COMMENT '车辆运维记录主键', + `source_version` bigint unsigned NOT NULL COMMENT '独立财务来源版本,从1递增', + `record_version` bigint unsigned NOT NULL COMMENT '提交时运维记录版本', + `operator_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '提交操作人标识', + `request_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原请求幂等键', + `request_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范请求摘要,含sha256前缀', + `event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '关联公共Outbox事件ID', + `payload_json` json NOT NULL COMMENT '不可变公司成本来源快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '提交时间UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_finance_source_version` (`record_id`,`source_version`), + UNIQUE KEY `uk_fleet_finance_source_request` (`record_id`,`operator_id`,`request_key`), + UNIQUE KEY `uk_fleet_finance_source_event` (`event_id`), + CONSTRAINT `chk_fleet_finance_source_version` CHECK ((`source_version` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='维修救援公司成本提交来源,不保存付款推定'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pickup_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pickup_command` ( + `trip_no` varchar(64) NOT NULL COMMENT '取货车次号', + `request_key` varchar(128) NOT NULL COMMENT '成功命令幂等键', + `request_hash` varchar(64) NOT NULL COMMENT '命令动作与内容摘要', + PRIMARY KEY (`trip_no`,`request_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='取货命令幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pickup_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pickup_history` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '操作流水', + `customer_id` varchar(64) NOT NULL COMMENT '客户隔离键', + `transfer_no` varchar(64) NOT NULL COMMENT '原转运单号', + `trip_no` varchar(64) NOT NULL COMMENT '当时取货车次号', + `action` varchar(32) NOT NULL COMMENT '安排解除取货到仓动作', + `operator_id` varchar(64) NOT NULL COMMENT '操作人', + `occurred_at` datetime NOT NULL COMMENT '操作UTC时间', + `detail` varchar(2000) DEFAULT NULL COMMENT '操作说明', + PRIMARY KEY (`id`), + KEY `idx_pickup_history_source` (`customer_id`,`transfer_no`,`id`), + KEY `idx_pickup_history_trip` (`trip_no`,`id`) +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='取货不可变操作历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pickup_plan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pickup_plan` ( + `trip_no` varchar(64) NOT NULL COMMENT '现有车辆车次号', + `request_hash` varchar(64) NOT NULL COMMENT '创建来源与计划摘要', + PRIMARY KEY (`trip_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='仓储转运取货计划'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pickup_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pickup_task` ( + `transfer_order_id` bigint NOT NULL COMMENT '原仓储转运单ID,一票唯一', + `customer_id` varchar(64) NOT NULL COMMENT '客户隔离键', + `transfer_no` varchar(64) NOT NULL COMMENT '原仓储转运单号', + `trip_no` varchar(64) DEFAULT NULL COMMENT '当前取货车次,解除后为空', + `status` varchar(32) NOT NULL COMMENT 'WAITING待安排 ASSIGNED已安排 PICKED已取货 ARRIVED已送仓', + `actual_packages` int DEFAULT NULL COMMENT '司机实提箱数,非仓库实收', + `picked_at` datetime DEFAULT NULL COMMENT '实际确认取货UTC时间', + `arrived_at` datetime DEFAULT NULL COMMENT '实际确认送仓UTC时间', + `evidence_json` longtext COMMENT '本票已确认凭证元数据', + `remark` varchar(1000) DEFAULT NULL COMMENT '取货备注', + `updated_at` datetime NOT NULL COMMENT '最近修改UTC时间', + PRIMARY KEY (`transfer_order_id`), + UNIQUE KEY `uk_pickup_source` (`customer_id`,`transfer_no`), + KEY `idx_pickup_trip` (`trip_no`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='仓储转运逐票取货执行'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pickup_upload`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pickup_upload` ( + `transfer_order_id` bigint NOT NULL COMMENT '凭证所属原单', + `trip_no` varchar(64) NOT NULL COMMENT '凭证所属车次', + `file_id` bigint NOT NULL COMMENT '平台归属文件ID', + PRIMARY KEY (`file_id`), + KEY `idx_pickup_upload_source` (`transfer_order_id`,`trip_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='取货上传凭证精确单据归属'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_pool_order_link`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_pool_order_link` ( + `id` bigint NOT NULL COMMENT '内部主键', + `booking_id` bigint NOT NULL COMMENT '唯一外接预订', + `booking_no` varchar(64) NOT NULL COMMENT '预订业务编号', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商业客户隔离范围', + `business_type` varchar(32) NOT NULL COMMENT '本土散板或本土卡车商业类型', + `business_order_id` bigint NOT NULL COMMENT '对应商业订单内部关联', + `business_order_no` varchar(64) NOT NULL COMMENT '本土商业订单业务编号', + `warehouse_id` varchar(128) NOT NULL COMMENT '真实我仓上车仓库', + `destination_key` varchar(160) NOT NULL COMMENT '冻结卸货站匹配键', + `delivery_mode` varchar(32) NOT NULL COMMENT '客户送仓或人工提货回仓', + `delivery_instructions` varchar(1000) DEFAULT NULL COMMENT '实际到仓交货说明', + `incoming_no` varchar(64) DEFAULT NULL COMMENT '真实来货业务编号,未登记为空', + `lastleg_order_id` bigint DEFAULT NULL COMMENT '唯一真实尾程来源,未发生为空', + `dispatch_no` varchar(64) DEFAULT NULL COMMENT '已关联客户排车编号', + `fulfillment_stage` varchar(32) NOT NULL COMMENT '实际履约阶段,不能手工冒充完成', + `stage_occurred_at` datetime(3) NOT NULL COMMENT '实际阶段发生UTC时间', + `actual_pallet_count` int DEFAULT NULL COMMENT '实际去重托盘数,未知为空', + `actual_package_count` int DEFAULT NULL COMMENT '实际箱数,未知为空', + `actual_pallet_spaces` int DEFAULT NULL COMMENT '实际核准占用托位,未知为空', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '桥记录版本', + `creation_request_hash` char(64) NOT NULL COMMENT '商业单创建身份和预报事实摘要', + `created_by` varchar(64) NOT NULL COMMENT '确认承运操作者', + `created_at` datetime(3) NOT NULL COMMENT '创建UTC时间', + `updated_at` datetime(3) NOT NULL COMMENT '修改UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_pool_order_booking` (`booking_id`), + UNIQUE KEY `uk_fleet_pool_order_booking_no` (`booking_no`), + UNIQUE KEY `uk_fleet_pool_order_business` (`business_type`,`business_order_id`), + UNIQUE KEY `uk_fleet_pool_order_incoming` (`incoming_no`), + UNIQUE KEY `uk_fleet_pool_order_lastleg` (`lastleg_order_id`), + KEY `idx_fleet_pool_order_customer` (`customer_id`,`business_type`,`business_order_no`), + KEY `idx_fleet_pool_order_dispatch` (`customer_id`,`dispatch_no`), + CONSTRAINT `fk_fleet_pool_order_booking` FOREIGN KEY (`booking_id`) REFERENCES `ll_fleet_external_booking` (`id`), + CONSTRAINT `chk_fleet_pool_order_actual` CHECK ((((`actual_pallet_count` is null) or (`actual_pallet_count` >= 0)) and ((`actual_package_count` is null) or (`actual_package_count` >= 0)) and ((`actual_pallet_spaces` is null) or (`actual_pallet_spaces` >= 0)))), + CONSTRAINT `chk_fleet_pool_order_type` CHECK ((`business_type` in (_utf8mb4'LOCAL_LOOSEBOARD',_utf8mb4'US_TRUCK'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='拼车预订与本土商业单唯一真实履约关联,不重复记运费'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_quote`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_quote` ( + `id` bigint NOT NULL COMMENT '报价记录主键', + `quote_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价业务编号', + `kind` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价用途采购或销售', + `party_id` bigint NOT NULL COMMENT '供应商或客户主档标识', + `party_name` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '往来单位名称快照', + `origin_city` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '发货城市', + `destination_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目的仓业务编码', + `valid_from` date NOT NULL COMMENT '报价生效日期', + `valid_to` date NOT NULL COMMENT '报价失效日期含当天', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价启停或删除状态', + `natural_key` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价组合去重摘要', + `details_json` json NOT NULL COMMENT '完整报价明细快照', + `record_version` bigint NOT NULL COMMENT '报价记录版本', + `create_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建幂等键', + `create_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建请求含导入批次内容摘要', + `created_by` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建操作人标识', + `created_at` datetime(3) NOT NULL COMMENT '创建时间UTC', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_quote_no` (`quote_no`), + UNIQUE KEY `uk_fleet_quote_natural` (`natural_key`), + UNIQUE KEY `uk_fleet_quote_create` (`created_by`,`create_key`), + KEY `idx_fleet_quote_search` (`kind`,`status`,`valid_from`,`valid_to`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车辆采购与外接销售报价'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_quote_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_quote_history` ( + `id` bigint NOT NULL COMMENT '报价历史主键', + `quote_id` bigint NOT NULL COMMENT '报价记录标识', + `record_version` bigint NOT NULL COMMENT '报价记录版本', + `action` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价操作类型', + `operator_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人标识', + `occurred_at` datetime(3) NOT NULL COMMENT '操作时间UTC', + `snapshot_json` json NOT NULL COMMENT '报价完整版本快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_quote_history_version` (`quote_id`,`record_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车辆报价不可变版本历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_resource_assignment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_resource_assignment` ( + `resource_kind` varchar(16) NOT NULL COMMENT '资源种类 VEHICLE或DRIVER', + `resource_id` bigint NOT NULL COMMENT '对应车辆或司机档案引用', + `trip_id` bigint NOT NULL COMMENT '占用车次', + `trip_no` varchar(32) NOT NULL COMMENT '占用车次业务编号', + PRIMARY KEY (`resource_kind`,`resource_id`), + KEY `idx_fleet_resource_trip` (`trip_id`), + CONSTRAINT `fk_fleet_resource_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`), + CONSTRAINT `chk_fleet_resource_kind` CHECK ((`resource_kind` in (_utf8mb4'VEHICLE',_utf8mb4'DRIVER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车辆及司机当前车次占用,释放后删除锁行,历史保留在车次'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip` ( + `id` bigint NOT NULL COMMENT '内部主键', + `trip_no` varchar(32) NOT NULL COMMENT '车次业务编号', + `idempotency_key` varchar(128) NOT NULL COMMENT '创建请求幂等键', + `request_hash` varchar(64) NOT NULL COMMENT '创建请求SHA256', + `status` varchar(16) NOT NULL COMMENT '车次状态', + `warehouse_id` bigint NOT NULL COMMENT '起运公共仓库引用', + `warehouse_code` varchar(64) NOT NULL COMMENT '起运仓编码快照', + `warehouse_name` varchar(256) NOT NULL COMMENT '起运仓名称快照', + `vehicle_id` bigint DEFAULT NULL COMMENT '车辆档案引用', + `vehicle_plate` varchar(64) DEFAULT NULL COMMENT '分配时车牌快照', + `driver_id` bigint DEFAULT NULL COMMENT '司机档案引用', + `driver_name` varchar(128) DEFAULT NULL COMMENT '分配时司机姓名', + `driver_phone` varchar(64) DEFAULT NULL COMMENT '分配时司机电话', + `max_pallet_spaces` int DEFAULT NULL COMMENT '分配时托位容量快照', + `max_load_kg` decimal(12,3) DEFAULT NULL COMMENT '分配时载重千克', + `max_volume_cbm` decimal(12,3) DEFAULT NULL COMMENT '分配时可用容积立方米', + `planned_departure_at` datetime(3) NOT NULL COMMENT '计划发车UTC', + `expected_driver_end_at` datetime(3) NOT NULL COMMENT '司机预计任务结束UTC,含承担的返程转场', + `departed_at` datetime(3) DEFAULT NULL COMMENT '实际发车UTC', + `completed_at` datetime(3) DEFAULT NULL COMMENT '实际运输完成UTC', + `stops_json` json NOT NULL COMMENT '按顺序保存的路线站点', + `planned_load_json` json DEFAULT NULL COMMENT '拣货前自有货计划载荷与逐段剩余容量', + `load_json` json DEFAULT NULL COMMENT '已确认实物装载及客户货物来源快照', + `loading_review_json` longtext COMMENT '整车理货审核快照,空值为待审核', + `departure_key` varchar(128) DEFAULT NULL COMMENT '整车发车幂等标识', + `departure_hash` char(64) DEFAULT NULL COMMENT '整车发车请求摘要', + `departure_result_json` json DEFAULT NULL COMMENT '整车发车结果及各客户出库结果', + `completion_json` json DEFAULT NULL COMMENT '货物结案来源及幂等结果快照', + `vehicle_release_json` json DEFAULT NULL COMMENT '车辆任务结束地点状态与幂等记录', + `driver_release_json` json DEFAULT NULL COMMENT '司机任务结束地点与幂等记录', + `remark` varchar(1000) DEFAULT NULL COMMENT '备注', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '并发版本', + `created_by` varchar(64) NOT NULL COMMENT '创建人', + `created_at` datetime(3) NOT NULL COMMENT '创建UTC时间', + `updated_by` varchar(64) NOT NULL COMMENT '更新人', + `updated_at` datetime(3) NOT NULL COMMENT '更新UTC时间', + `trip_purpose` varchar(16) NOT NULL DEFAULT 'DELIVERY' COMMENT 'DELIVERY出库派送 PICKUP上门取货入仓', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_trip_no` (`trip_no`), + UNIQUE KEY `uk_fleet_trip_create` (`created_by`,`idempotency_key`), + KEY `idx_fleet_trip_page` (`warehouse_id`,`status`,`updated_at`,`id`), + KEY `fk_fleet_trip_vehicle` (`vehicle_id`), + KEY `fk_fleet_trip_driver` (`driver_id`), + CONSTRAINT `fk_fleet_trip_driver` FOREIGN KEY (`driver_id`) REFERENCES `ll_fleet_driver` (`id`), + CONSTRAINT `fk_fleet_trip_vehicle` FOREIGN KEY (`vehicle_id`) REFERENCES `ll_vehicle` (`id`), + CONSTRAINT `chk_fleet_trip_status` CHECK ((`status` in (_utf8mb4'PLANNED',_utf8mb4'DEPARTING',_utf8mb4'IN_TRANSIT',_utf8mb4'COMPLETED',_utf8mb4'CANCELLED'))), + CONSTRAINT `chk_fleet_trip_time` CHECK ((`expected_driver_end_at` > `planned_departure_at`)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台运输车次'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_cost`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_cost` ( + `id` bigint NOT NULL COMMENT '内部主键', + `trip_id` bigint NOT NULL COMMENT '车次内部引用', + `cost_no` varchar(32) NOT NULL COMMENT '车次成本业务编号', + `category` varchar(16) NOT NULL COMMENT '直接成本类别FUEL/DRIVER/TOLL/PARKING/OTHER', + `currency` varchar(3) NOT NULL COMMENT '原始成本币种CNY/USD,不混币汇总', + `amount` decimal(14,2) NOT NULL COMMENT '运营登记金额,不代表付款', + `incurred_at` datetime(3) NOT NULL COMMENT '实际费用发生UTC时间', + `remark` varchar(1000) DEFAULT NULL COMMENT '费用备注', + `record_version` bigint NOT NULL COMMENT '成本记录版本', + `request_key` varchar(128) NOT NULL COMMENT '创建幂等键', + `request_hash` char(64) NOT NULL COMMENT '创建请求摘要', + `created_by` varchar(64) NOT NULL COMMENT '登记人', + `updated_by` varchar(64) NOT NULL COMMENT '最近更正人', + `created_at` datetime(3) NOT NULL COMMENT '登记UTC时间', + `updated_at` datetime(3) NOT NULL COMMENT '更正UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_trip_cost_no` (`cost_no`), + UNIQUE KEY `uk_fleet_trip_cost_request` (`trip_id`,`created_by`,`request_key`), + KEY `idx_fleet_trip_cost_page` (`trip_id`,`incurred_at`,`id`), + CONSTRAINT `fk_fleet_trip_cost_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`), + CONSTRAINT `ck_fleet_trip_cost_amount` CHECK ((`amount` >= 0)), + CONSTRAINT `ck_fleet_trip_cost_category` CHECK ((`category` in (_utf8mb4'FUEL',_utf8mb4'DRIVER',_utf8mb4'TOLL',_utf8mb4'PARKING',_utf8mb4'OTHER'))), + CONSTRAINT `ck_fleet_trip_cost_currency` CHECK ((`currency` in (_utf8mb4'CNY',_utf8mb4'USD'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车次直接运营成本,不生成客户账单或付款'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_cost_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_cost_history` ( + `id` bigint NOT NULL COMMENT '内部主键', + `cost_id` bigint NOT NULL COMMENT '成本记录内部引用', + `record_version` bigint NOT NULL COMMENT '成本更正后版本', + `action` varchar(16) NOT NULL COMMENT '成本操作CREATE/UPDATE', + `reason` varchar(1000) DEFAULT NULL COMMENT '登记或更正说明', + `operator_id` varchar(64) NOT NULL COMMENT '操作人', + `occurred_at` datetime(3) NOT NULL COMMENT '操作UTC时间', + `snapshot_json` json NOT NULL COMMENT '成本与当时整趟汇总及分摊快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_trip_cost_history` (`cost_id`,`record_version`), + CONSTRAINT `fk_fleet_trip_cost_history` FOREIGN KEY (`cost_id`) REFERENCES `ll_fleet_trip_cost` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车次成本不可变更正历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_dispatch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_dispatch` ( + `dispatch_id` bigint NOT NULL COMMENT '客户排车单内部引用,唯一有效车次关联', + `dispatch_no` varchar(64) NOT NULL COMMENT '客户排车业务单号', + `customer_id` varchar(128) NOT NULL COMMENT '排车单自身客户归属', + `trip_id` bigint NOT NULL COMMENT '共享运输车次内部引用', + `trip_no` varchar(32) NOT NULL COMMENT '共享运输车次业务编号', + `package_count` int NOT NULL COMMENT '关联时待发运箱数快照', + `bound_by` varchar(64) NOT NULL COMMENT '关联操作人', + `bound_at` datetime(3) NOT NULL COMMENT '关联UTC时间', + `review_json` longtext COMMENT '客户排车调度审核快照,空值为待审核', + PRIMARY KEY (`dispatch_id`), + UNIQUE KEY `uk_fleet_trip_dispatch_no` (`dispatch_no`), + KEY `idx_fleet_trip_dispatch_trip` (`trip_id`,`dispatch_id`), + CONSTRAINT `fk_fleet_trip_dispatch_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车次与各客户排车单的有效关联,解除前快照保留在车次历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_handover`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_handover` ( + `id` bigint NOT NULL COMMENT '内部主键', + `trip_id` bigint NOT NULL COMMENT '所属车次', + `trip_version` bigint NOT NULL COMMENT '交接对应车次历史版本', + `trip_no` varchar(32) NOT NULL COMMENT '车次业务编号', + `handover_no` varchar(32) NOT NULL COMMENT '交接业务编号', + `request_key` varchar(128) NOT NULL COMMENT '交接请求幂等键', + `request_hash` char(64) NOT NULL COMMENT '交接请求摘要', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '资源结束并发版本', + `handed_over_at` datetime(3) NOT NULL COMMENT '实际交接UTC时间', + `snapshot_json` json NOT NULL COMMENT '不可变资源及剩余货物交接快照', + `vehicle_release_json` json DEFAULT NULL COMMENT '原车辆任务结束及幂等结果', + `driver_release_json` json DEFAULT NULL COMMENT '原司机任务结束及幂等结果', + `created_by` varchar(64) NOT NULL COMMENT '记录操作人', + `created_at` datetime(3) NOT NULL COMMENT '记录UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_handover_no` (`handover_no`), + UNIQUE KEY `uk_fleet_handover_request` (`trip_id`,`request_key`), + UNIQUE KEY `uk_fleet_handover_version` (`trip_id`,`trip_version`), + KEY `idx_fleet_handover_page` (`trip_id`,`id`), + CONSTRAINT `fk_fleet_handover_trip` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='在途车辆司机交接'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_history` ( + `id` bigint NOT NULL COMMENT '内部主键', + `trip_id` bigint NOT NULL COMMENT '车次内部引用', + `record_version` bigint NOT NULL COMMENT '操作后版本', + `action` varchar(32) NOT NULL COMMENT '车次操作', + `reason` varchar(1000) DEFAULT NULL COMMENT '操作原因', + `operator_id` varchar(64) NOT NULL COMMENT '操作人', + `occurred_at` datetime(3) NOT NULL COMMENT '操作UTC时间', + `snapshot_json` json NOT NULL COMMENT '操作后不可变车次快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_trip_history_version` (`trip_id`,`record_version`), + CONSTRAINT `fk_fleet_trip_history` FOREIGN KEY (`trip_id`) REFERENCES `ll_fleet_trip` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='运输车次操作历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_trip_operations_record`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_trip_operations_record` ( + `id` bigint NOT NULL COMMENT '出车实测历史主键', + `trip_no` varchar(64) NOT NULL COMMENT '车次业务编号', + `record_version` bigint NOT NULL COMMENT '实测记录版本从一递增', + `details_json` json NOT NULL COMMENT '实际里程英里油耗升与备注快照', + `reason` varchar(1000) NOT NULL COMMENT '实测更正说明', + `operator_id` varchar(64) NOT NULL COMMENT '实测操作人标识', + `request_key` varchar(128) NOT NULL COMMENT '实测保存幂等键', + `request_hash` char(64) NOT NULL COMMENT '实测请求内容摘要', + `occurred_at` datetime(3) NOT NULL COMMENT '实测保存时间UTC', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fleet_operations_version` (`trip_no`,`record_version`), + UNIQUE KEY `uk_fleet_operations_request` (`trip_no`,`operator_id`,`request_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车次里程油耗不可变更正记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_vehicle_record`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_vehicle_record` ( + `id` bigint NOT NULL COMMENT '记录内部主键', + `record_no` varchar(32) NOT NULL COMMENT '车辆运维业务编号', + `vehicle_id` bigint NOT NULL COMMENT '所属车辆主键', + `vehicle_plate` varchar(64) NOT NULL COMMENT '建档时车牌快照', + `record_type` varchar(32) NOT NULL COMMENT '运维类型:保养、加油、维修、故障、救援、异常', + `occurred_at` datetime(3) NOT NULL COMMENT '记录发生时间(UTC)', + `details_json` json NOT NULL COMMENT '带明确单位的业务字段快照', + `files_json` json NOT NULL COMMENT '所属记录照片与上传幂等摘要', + `idempotency_key` varchar(128) NOT NULL COMMENT '创建请求幂等键', + `request_hash` char(64) NOT NULL COMMENT '原创建业务内容摘要', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` varchar(64) NOT NULL COMMENT '创建操作人', + `updated_by` varchar(64) NOT NULL COMMENT '最后操作人', + `created_at` datetime(3) NOT NULL COMMENT '创建时间(UTC)', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间(UTC)', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_vehicle_record_no` (`record_no`), + UNIQUE KEY `uk_vehicle_record_creation` (`vehicle_id`,`created_by`,`idempotency_key`), + KEY `idx_vehicle_record_page` (`vehicle_id`,`record_type`,`occurred_at`,`id`), + CONSTRAINT `fk_vehicle_record_vehicle` FOREIGN KEY (`vehicle_id`) REFERENCES `ll_vehicle` (`id`), + CONSTRAINT `ck_vehicle_record_type` CHECK ((`record_type` in (_utf8mb4'MAINTENANCE',_utf8mb4'FUEL',_utf8mb4'REPAIR',_utf8mb4'BREAKDOWN',_utf8mb4'RESCUE',_utf8mb4'EXCEPTION'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车辆运维记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_fleet_vehicle_record_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_fleet_vehicle_record_history` ( + `id` bigint NOT NULL COMMENT '历史内部主键', + `record_id` bigint NOT NULL COMMENT '运维记录主键', + `record_version` bigint NOT NULL COMMENT '对应业务版本', + `action` varchar(32) NOT NULL COMMENT '操作类型', + `reason` varchar(1000) DEFAULT NULL COMMENT '更正原因或附件名称', + `operator_id` varchar(64) NOT NULL COMMENT '操作人', + `occurred_at` datetime(3) NOT NULL COMMENT '操作时间(UTC)', + `snapshot_json` json NOT NULL COMMENT '当时完整业务快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_vehicle_record_revision` (`record_id`,`record_version`), + CONSTRAINT `fk_vehicle_record_history` FOREIGN KEY (`record_id`) REFERENCES `ll_fleet_vehicle_record` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='车辆运维记录不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_fba_appointment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_fba_appointment` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `appointment_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预约单号', + `appointment_at` datetime(3) NOT NULL COMMENT '预约时间', + `appointment_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `appointment_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `selected_count` int NOT NULL DEFAULT '0', + `replacement_nos_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '分批或合并后的新预约业务号列表,非空时原批次只读', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `expected_loading_at` datetime(3) NOT NULL, + `appointment_end_at` datetime(3) DEFAULT NULL COMMENT '预约结束时间,未明确时为空', + `version` int NOT NULL DEFAULT '0' COMMENT '并发版本', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_fba_appointment_no` (`customer_id`,`appointment_no`), + KEY `idx_ll_fba_appointment_list` (`customer_id`,`appointment_status`,`fba_warehouse_code`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Batch FBA appointment'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_fba_appointment_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_fba_appointment_item` ( + `id` bigint NOT NULL COMMENT '记录主键', + `appointment_id` bigint NOT NULL COMMENT '预约主记录标识', + `source_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定ORDER或BOOKING货源键', + `source_version` varchar(160) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '保存时核实的来源版本', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本票所属客户', + `order_id` bigint DEFAULT NULL COMMENT '尚未形成尾程订单时为空', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '真实入仓码,不伪造', + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目的FBA仓编码', + `package_count` int DEFAULT NULL COMMENT '所选整票预报箱数,未知保持空', + `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '取消或失败后释放货源占用', + `active_source_key` varchar(160) COLLATE utf8mb4_unicode_ci GENERATED ALWAYS AS ((case when (`active` = 1) then `source_key` else NULL end)) STORED COMMENT '有效货源唯一占用键', + `active_order_id` bigint GENERATED ALWAYS AS ((case when (`active` = 1) then `order_id` else NULL end)) STORED COMMENT '有效订单唯一占用键', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建UTC时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_fba_item_source` (`appointment_id`,`source_key`), + UNIQUE KEY `uk_ll_fba_active_source` (`active_source_key`), + UNIQUE KEY `uk_ll_fba_active_order` (`active_order_id`), + KEY `idx_ll_fba_item_source_lookup` (`source_key`,`customer_id`), + KEY `idx_ll_fba_item_customer_order` (`customer_id`,`order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入仓前后共用的预约真实货源'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_order` ( + `id` bigint NOT NULL COMMENT '入仓单主键', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` bigint NOT NULL COMMENT '租户 ID', + `source_region` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源区域', + `source_inbound_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源入仓分片 ID', + `root_inbound_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '根入仓单 ID', + `source_order_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源订单 ID', + `source_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源订单号', + `root_order_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '根订单 ID', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '入仓码', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓 ID', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称', + `destination_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的类型:FBA按箱数接收、OVERSEAS逐箱扫码', + `package_count` int NOT NULL DEFAULT '0' COMMENT '箱数', + `product_quantity` int DEFAULT NULL COMMENT '数量', + `pallet_count` int DEFAULT NULL COMMENT '托数', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '毛重(千克)', + `net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '净重(千克)', + `volume_cbm` decimal(18,6) DEFAULT NULL COMMENT '体积(立方米)', + `source_event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源事件 ID', + `source_loading_plan_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '装柜计划 ID', + `source_loading_plan_version` bigint NOT NULL COMMENT '装柜计划版本', + `handover_version` bigint NOT NULL COMMENT '交接版本', + `payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '负载摘要', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入仓单状态', + `exception_flag` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'NONE' COMMENT '异常标记', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `lx_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发领星入库单代码', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_source` (`customer_id`,`source_region`,`source_inbound_id`), + UNIQUE KEY `uk_ll_order_event` (`source_event_id`,`source_inbound_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入仓单快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_order_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_order_item` ( + `id` bigint NOT NULL COMMENT '入仓明细主键', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` bigint NOT NULL COMMENT '租户ID', + `order_id` bigint NOT NULL COMMENT '入仓单ID', + `source_inbound_detail_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源入仓明细ID', + `package_count` int NOT NULL COMMENT '箱数', + `product_quantity` int DEFAULT NULL COMMENT '数量', + `pallet_count` int DEFAULT NULL COMMENT '托数', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '毛重(千克)', + `net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '净重(千克)', + `dimensional_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '体积重量(千克)', + `volume_cbm` decimal(18,6) DEFAULT NULL COMMENT '体积(立方米)', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓ID', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称', + `fba_tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA跟踪号', + `shipment_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '货件编号', + `shipping_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '唛头', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU编码', + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名', + `product_name_en` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '英文品名', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_item_order` (`customer_id`,`order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入仓商品明细快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_pallet_merge`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_pallet_merge` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `task_id` bigint NOT NULL, + `merge_group_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_pallet_id` bigint NOT NULL, + `target_pallet_id` bigint NOT NULL, + `source_allocation_id` bigint NOT NULL, + `target_allocation_id` bigint NOT NULL, + `source_line_id` bigint NOT NULL, + `target_line_id` bigint NOT NULL, + `source_order_id` bigint NOT NULL, + `target_order_id` bigint NOT NULL, + `moved_package_count` int NOT NULL, + `moved_volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000', + `source_pallet_scrapped` tinyint NOT NULL DEFAULT '0', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_ll_inbound_merge_task` (`customer_id`,`task_id`), + KEY `idx_ll_inbound_merge_group` (`merge_group_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_pda_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_pda_operation` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `task_id` bigint NOT NULL, + `allocation_id` bigint DEFAULT NULL, + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL, + `result_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_pda_operation_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_inbound_pda_operation_task` (`task_id`), + KEY `idx_ll_inbound_pda_operation_allocation` (`allocation_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_pda_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_pda_task` ( + `id` bigint NOT NULL, + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `plan_id` bigint NOT NULL, + `task_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `operator_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pushed_at` datetime(3) DEFAULT NULL, + `started_at` datetime(3) DEFAULT NULL, + `completed_at` datetime(3) DEFAULT NULL, + `unload_photo_file_ids` json DEFAULT NULL COMMENT '卸柜照片文件ID列表', + `unload_photo_uploaded_at` datetime(3) DEFAULT NULL COMMENT '卸柜照片上传成功时间', + `estimated_empty_return_at` datetime(3) DEFAULT NULL COMMENT '预计报空时间(卸柜照片上传成功后两天)', + `version` int NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_pda_task_plan` (`customer_id`,`plan_id`), + UNIQUE KEY `uk_ll_inbound_pda_task_no` (`task_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_plan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_plan` ( + `id` bigint NOT NULL COMMENT '入库计划ID(雪花ID)', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `plan_no` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入库单号', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户/客户账号标识', + `source_order_id` bigint NOT NULL COMMENT '来源尾程订单ID,一张入仓单对应一张入库计划', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '集装箱号', + `overseas_warehouse_id` bigint DEFAULT NULL COMMENT '海外实际收货共享物理仓ID,由PDA认领柜号时冻结', + `planned_arrival_date` date DEFAULT NULL COMMENT '人工计划预计到仓日期', + `pallet_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '人工计划托盘类型', + `assigned_flag` tinyint NOT NULL DEFAULT '0' COMMENT '人工计划是否已分配:0否1是', + `merge_required` tinyint NOT NULL DEFAULT '0' COMMENT '人工计划是否要求合托:0否1是', + `urgent_flag` tinyint NOT NULL DEFAULT '0' COMMENT '人工计划是否加急:0否1是', + `creation_mode` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'AUTO' COMMENT '计划生成方式:AUTO柜级自动、MANUAL单票人工、WAREHOUSE_TRANSFER仓储转运', + `plan_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '入仓计划备注', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_ASSIGNMENT' COMMENT '入库计划状态:PENDING_ASSIGNMENT待分配及后续正式状态', + `line_count` int NOT NULL DEFAULT '0' COMMENT '入仓码明细数量', + `pallet_count` int NOT NULL DEFAULT '0' COMMENT '系统自动分配托盘数量', + `total_volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '集装箱总体积(立方米)', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `version` int NOT NULL DEFAULT '0' COMMENT '入库计划乐观锁版本', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_plan_no` (`plan_no`), + KEY `idx_ll_inbound_plan_container` (`customer_id`,`container_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入库计划表:每张来源入仓单生成一张入库计划,同柜计划共享集装箱号'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_plan_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_plan_carton` ( + `id` bigint NOT NULL COMMENT '箱唛作业主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `order_id` bigint DEFAULT NULL COMMENT '海外首扫确权后的尾程订单ID', + `source_inbound_detail_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源入库明细ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU编码快照', + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国内冻结箱唛', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓ID快照', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称快照', + `plan_id` bigint DEFAULT NULL COMMENT '海外入库计划ID', + `line_id` bigint DEFAULT NULL COMMENT '入库计划明细ID', + `plan_pallet_id` bigint DEFAULT NULL COMMENT '海外计划托盘ID', + `warehouse_pallet_id` bigint DEFAULT NULL COMMENT '海外实物托盘ID', + `warehouse_location_id` bigint DEFAULT NULL COMMENT '海外库位ID', + `pda_task_id` bigint DEFAULT NULL COMMENT '首次扫码PDA任务ID', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '箱唛状态:UNASSIGNED、ON_PALLET、AVAILABLE', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `bound_at` datetime(3) DEFAULT NULL COMMENT '绑定托盘时间', + `received_at` datetime(3) DEFAULT NULL COMMENT '完成入库时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_carton_mark` (`customer_id`,`carton_mark`), + KEY `idx_ll_inbound_carton_plan` (`plan_id`,`status`), + KEY `idx_ll_inbound_carton_pallet` (`plan_pallet_id`,`status`), + KEY `idx_ll_inbound_carton_order` (`order_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜次冻结箱唛及海外入库箱级作业账'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_plan_line`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_plan_line` ( + `id` bigint NOT NULL COMMENT '入库计划明细ID(雪花ID)', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户账号标识', + `plan_id` bigint NOT NULL COMMENT '入库计划ID', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '头程入仓码快照', + `destination_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'OVERSEAS' COMMENT '目的类型:FBA按箱数接收、OVERSEAS逐箱扫码', + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA仓库编码', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓ID快照', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称快照', + `volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '入仓码体积(立方米)', + `planned_pallet_count` int NOT NULL DEFAULT '0' COMMENT '该明细分配的托盘数量', + `required_package_count` int NOT NULL DEFAULT '0', + `delivery_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓目的地址快照', + `postal_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓邮编快照', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系人快照', + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系电话快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_line_order` (`plan_id`,`order_id`), + KEY `idx_ll_inbound_line_plan` (`plan_id`), + KEY `idx_ll_inbound_line_tenant_plan` (`customer_id`,`plan_id`), + KEY `idx_ll_inbound_line_customer_plan` (`customer_id`,`plan_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入库计划明细表:按入仓码和尾程订单维度记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_plan_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_plan_pallet` ( + `id` bigint NOT NULL COMMENT '计划托盘ID(雪花ID)', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户账号标识', + `plan_id` bigint NOT NULL COMMENT '入库计划ID', + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '海外仓资源服务返回的真实托盘码', + `source_pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发不可变来源托盘号快照', + `pallet_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '人工计划托盘类型', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓ID快照', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称快照', + `capacity_cbm` decimal(18,4) NOT NULL DEFAULT '2.0000' COMMENT '托盘容量,固定为2立方米', + `allocated_volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '已分配体积(立方米)', + `sequence_no` int NOT NULL COMMENT '计划内托盘序号', + `warehouse_pallet_id` bigint DEFAULT NULL, + `warehouse_location_id` bigint DEFAULT NULL, + `warehouse_resource_lock_id` bigint DEFAULT NULL, + `assignment_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'UNASSIGNED', + `locked_at` datetime(3) DEFAULT NULL, + `actual_volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000', + `actual_package_count` int NOT NULL DEFAULT '0', + `version` int NOT NULL DEFAULT '0' COMMENT '收货累计值乐观锁版本', + `destination_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的类型:FBA或PRIVATE', + `delivery_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓目的地址快照', + `postal_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓邮编快照', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系人快照', + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系电话快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_pallet_sequence` (`plan_id`,`sequence_no`), + UNIQUE KEY `uk_ll_inbound_pallet_no` (`customer_id`,`pallet_no`), + KEY `idx_ll_inbound_pallet_plan` (`plan_id`), + KEY `idx_ll_inbound_pallet_tenant_plan` (`customer_id`,`plan_id`), + KEY `idx_ll_inbound_pallet_customer_plan` (`customer_id`,`plan_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入库计划托盘表:按目的仓隔离合托'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_plan_pallet_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_plan_pallet_allocation` ( + `id` bigint NOT NULL COMMENT '托盘分配记录ID(雪花ID)', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户账号标识', + `plan_id` bigint NOT NULL COMMENT '入库计划ID', + `line_id` bigint NOT NULL COMMENT '入库计划明细ID', + `pallet_id` bigint NOT NULL COMMENT '计划托盘ID', + `allocated_volume_cbm` decimal(18,4) NOT NULL COMMENT '该明细分配到托盘的体积(立方米)', + `planned_package_count` int NOT NULL DEFAULT '0', + `counted_package_count` int NOT NULL DEFAULT '0', + `picked_package_count` int NOT NULL DEFAULT '0', + `actual_volume_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_COUNT', + `version` int NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inbound_allocation` (`line_id`,`pallet_id`), + KEY `idx_ll_inbound_allocation_plan` (`plan_id`), + KEY `idx_ll_inbound_allocation_pallet` (`pallet_id`), + KEY `idx_ll_inbound_allocation_tenant_plan` (`customer_id`,`plan_id`), + KEY `idx_ll_inbound_allocation_customer_plan` (`customer_id`,`plan_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程入库计划托盘分配表:记录入仓码明细与计划托盘的分配关系'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inbound_stock_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inbound_stock_receipt` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `plan_id` bigint NOT NULL, + `task_id` bigint NOT NULL, + `allocation_id` bigint NOT NULL, + `line_id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名快照', + `product_name_en` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '英文品名快照', + `sku_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_detail_ids` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `warehouse_pallet_id` bigint NOT NULL, + `pallet_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发不可变来源托盘号快照', + `warehouse_location_id` bigint DEFAULT NULL, + `warehouse_location_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `batch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `received_packages` bigint NOT NULL, + `received_quantity` bigint DEFAULT '0', + `inventory_balance_id` bigint NOT NULL, + `inventory_position_id` bigint NOT NULL, + `inventory_operation_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `received_at` datetime(3) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_stock_receipt_task_allocation_sku` (`customer_id`,`task_id`,`allocation_id`,`sku_code`), + KEY `idx_ll_stock_receipt_plan` (`customer_id`,`plan_id`,`line_id`), + KEY `idx_ll_stock_receipt_inventory` (`inventory_balance_id`,`inventory_position_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable SKU-pallet PDA stock-in receipt snapshot'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inventory_balance`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inventory_balance` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Customer tenant', + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Customer name snapshot', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Actual overseas warehouse ID', + `overseas_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Actual overseas warehouse code snapshot', + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Actual overseas warehouse name snapshot', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Customer destination warehouse ID snapshot', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'Customer destination warehouse code snapshot', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Customer destination warehouse name snapshot', + `inbound_order_id` bigint NOT NULL, + `inbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `sku_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Chinese product name', + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名快照', + `product_name_en` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '英文品名快照', + `available_packages` bigint NOT NULL DEFAULT '0', + `hold_packages` bigint NOT NULL DEFAULT '0', + `allocated_packages` bigint NOT NULL DEFAULT '0', + `picked_packages` bigint NOT NULL DEFAULT '0', + `in_transit_packages` bigint NOT NULL DEFAULT '0', + `receiving_packages` bigint NOT NULL DEFAULT '0', + `procurement_packages` bigint NOT NULL DEFAULT '0', + `available_quantity` bigint NOT NULL DEFAULT '0', + `hold_quantity` bigint NOT NULL DEFAULT '0', + `allocated_quantity` bigint NOT NULL DEFAULT '0', + `picked_quantity` bigint NOT NULL DEFAULT '0', + `in_transit_quantity` bigint NOT NULL DEFAULT '0', + `receiving_quantity` bigint NOT NULL DEFAULT '0', + `procurement_quantity` bigint NOT NULL DEFAULT '0', + `version` bigint NOT NULL DEFAULT '0' COMMENT 'Optimistic lock version', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inventory_dimension` (`customer_id`,`overseas_warehouse_id`,`destination_warehouse_code`,`inbound_order_id`,`inbound_code`), + KEY `idx_ll_inventory_list` (`customer_id`,`overseas_warehouse_id`,`updated_at`), + KEY `idx_ll_inventory_inbound` (`customer_id`,`inbound_code`), + KEY `idx_ll_inventory_sku` (`customer_id`,`sku_code`,`updated_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户入仓单与海外目的仓维度实时库存余额'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inventory_ledger`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inventory_ledger` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '瀹㈡埛鍚嶇О涓嶅彲鍙樺揩鐓�', + `balance_id` bigint NOT NULL, + `position_id` bigint DEFAULT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', + `inbound_order_id` bigint NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `carton_packages` bigint DEFAULT NULL, + `pallet_id` bigint DEFAULT NULL, + `pallet_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `batch_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `warehouse_location_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `business_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `business_order_id` bigint DEFAULT NULL, + `business_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `outbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_event_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `status_from` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `status_to` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `before_packages` bigint NOT NULL, + `delta_packages` bigint NOT NULL, + `after_packages` bigint NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `occurred_at` datetime(3) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inventory_ledger_idempotency` (`customer_id`,`idempotency_key`), + KEY `idx_ll_inventory_ledger_query` (`customer_id`,`overseas_warehouse_id`,`occurred_at`), + KEY `idx_ll_inventory_ledger_business` (`customer_id`,`business_type`,`business_order_no`), + KEY `idx_ll_inventory_ledger_inbound` (`customer_id`,`inbound_code`,`occurred_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable inventory package and quantity ledger'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inventory_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inventory_operation` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PROCESSING', + `result_json` longtext COLLATE utf8mb4_unicode_ci, + `last_error` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inventory_operation_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_inventory_operation_status` (`customer_id`,`status`,`updated_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Inventory command idempotency record'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_inventory_position`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_inventory_position` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `balance_id` bigint NOT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pallet_id` bigint NOT NULL, + `pallet_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `batch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', + `warehouse_location_id` bigint DEFAULT NULL, + `warehouse_location_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Informational default location code', + `available_packages` bigint NOT NULL DEFAULT '0', + `hold_packages` bigint NOT NULL DEFAULT '0', + `allocated_packages` bigint NOT NULL DEFAULT '0', + `picked_packages` bigint NOT NULL DEFAULT '0', + `receiving_packages` bigint NOT NULL DEFAULT '0', + `product_quantity` bigint NOT NULL DEFAULT '0', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', + `version` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_inventory_position` (`balance_id`,`pallet_id`,`batch_no`), + KEY `idx_ll_inventory_position_pallet` (`customer_id`,`pallet_id`), + KEY `idx_ll_inventory_position_location` (`customer_id`,`overseas_warehouse_id`,`warehouse_location_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SKU package stock by pallet, default location and batch'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_loading_event_inbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_loading_event_inbox` ( + `event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件全局唯一标识', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户/客户账号标识', + `event_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '事件类型', + `event_version` int NOT NULL COMMENT '事件契约版本', + `payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化事件负载 SHA-256 摘要', + `payload_json` json NOT NULL COMMENT '事件冻结负载 JSON', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'RECEIVED' COMMENT '消费状态:RECEIVED/PROCESSED', + `received_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '接收时间', + `processed_at` datetime(3) DEFAULT NULL COMMENT '处理完成时间', + `last_error` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近一次处理错误', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`event_id`), + UNIQUE KEY `uk_ll_loading_inbox_tenant_key` (`customer_id`,`event_type`,`event_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='头程装柜完成事件接收幂等箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_loading_order_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_loading_order_status_history` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '状态历史主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单 ID', + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更前状态', + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '变更后状态', + `event_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '触发事件 ID', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '状态变更备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '记录时间', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + KEY `idx_ll_loading_history_order` (`order_id`,`created_at`), + KEY `idx_ll_loading_history_tenant_order` (`customer_id`,`order_id`), + KEY `idx_ll_loading_history_customer_order` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB AUTO_INCREMENT=2104482219476070737 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单状态变更历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_local_looseboard_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_local_looseboard_history` ( + `id` bigint NOT NULL COMMENT '主键ID', + `order_id` bigint NOT NULL COMMENT '本土散板订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型:CREATE、UPDATE或STATUS', + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更前状态', + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '变更后状态', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作幂等键', + `change_detail` json DEFAULT NULL COMMENT '字段变更前后值JSON', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_local_looseboard_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='本土散板操作流水'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_local_looseboard_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_local_looseboard_operation` ( + `id` bigint NOT NULL COMMENT '操作记录ID', + `order_id` bigint NOT NULL COMMENT '本土散板订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作请求内容哈希', + `result_version` bigint NOT NULL COMMENT '操作完成后的订单版本', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_local_looseboard_operation_key` (`customer_id`,`order_id`,`idempotency_key`), + KEY `idx_ll_local_looseboard_operation_order` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='本土散板订单幂等操作账'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_local_looseboard_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_local_looseboard_order` ( + `id` bigint NOT NULL COMMENT '主键ID', + `lastleg_order_id` bigint DEFAULT NULL COMMENT '关联尾程主订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `order_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本土散板订单号', + `transport_mode` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '运输方式:拼车或优先拼载', + `pallet_required` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '是否需要打盘:YES或NO', + `transport_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '运输类型', + `origin` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '起运地', + `origin_address` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运详细地址', + `destination` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目的地', + `destination_address` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的详细地址、码头或仓号', + `container_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '柜型', + `package_count` int NOT NULL DEFAULT '0' COMMENT '货物件数', + `total_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '总重量(千克)', + `total_volume_cbm` decimal(18,6) NOT NULL DEFAULT '0.000000' COMMENT '总体积(立方米)', + `budget_amount` decimal(18,2) DEFAULT NULL COMMENT '预算总价', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'USD' COMMENT '预算币种', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '联系人姓名', + `contact_info` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '联系人联系方式', + `requested_date` date DEFAULT NULL COMMENT '要求服务日期', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_ACCEPTANCE' COMMENT '本土散板订单状态', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建请求内容哈希', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人ID', + `version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_local_looseboard_no` (`customer_id`,`order_no`), + UNIQUE KEY `uk_ll_local_looseboard_key` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_local_looseboard_lastleg` (`lastleg_order_id`), + KEY `idx_ll_local_looseboard_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_local_looseboard_date` (`customer_id`,`requested_date`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='本土散板订单'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_monthly_exchange_rate`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_monthly_exchange_rate` ( + `id` bigint NOT NULL COMMENT '月度汇率ID', + `rate_month` char(7) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '汇率月份,格式yyyy-MM', + `base_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'USD' COMMENT '基准币种', + `quote_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '报价币种', + `usd_to_cny_average` decimal(18,8) NOT NULL COMMENT '美元兑人民币月平均汇率', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE/INACTIVE', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人', + `updated_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更新人', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_exchange_rate_month` (`rate_month`), + KEY `idx_ll_exchange_rate_page` (`status`,`rate_month`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='美元兑人民币月度平均汇率'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_monthly_exchange_rate_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_monthly_exchange_rate_history` ( + `id` bigint NOT NULL COMMENT '汇率变更历史ID', + `exchange_rate_id` bigint NOT NULL COMMENT '月度汇率ID', + `before_rate` decimal(18,8) DEFAULT NULL COMMENT '变更前汇率', + `after_rate` decimal(18,8) NOT NULL COMMENT '变更后汇率', + `before_status` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更前状态', + `after_status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '变更后状态', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更说明', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_exchange_rate_history` (`exchange_rate_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='月度汇率变更历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order` ( + `id` bigint NOT NULL COMMENT '雪花 ID', + `order_no` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '尾程单号', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户/客户账号标识', + `order_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'FIRST_LEG' COMMENT '订单类型', + `lx_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发领星入库单代码', + `destination_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的类型:FBA按箱数接收、OVERSEAS逐箱扫码', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '真实来源入仓码;无入仓关系的海外本土业务为空', + `source_region` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源区域/系统', + `source_inbound_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '最终实装 LOADED 分片 ID,建单幂等键', + `root_inbound_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '根入仓单 ID', + `source_order_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源订单 ID', + `source_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源订单号', + `root_order_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '根订单 ID', + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '货主名称', + `source_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源国内装柜仓 ID 快照', + `source_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源国内装柜仓名称快照', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外接柜仓ID;新建尾程订单由业务服务预分配', + `overseas_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外接柜仓业务编码快照', + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外接柜仓名称快照', + `receiving_warehouse_version` int NOT NULL DEFAULT '0' COMMENT '柜级接柜仓分配乐观锁版本', + `transfer_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '转入目的仓ID', + `transfer_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '转入目的仓编码', + `transfer_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '转入目的仓名称', + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA 仓库编码', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '集装箱号', + `container_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '待转柜' COMMENT '货柜状态', + `abnormal` tinyint NOT NULL DEFAULT '0' COMMENT '是否异常:0否1是', + `detained` tinyint NOT NULL DEFAULT '0' COMMENT '是否暂扣:0否1是', + `hold_chargeable` tinyint NOT NULL DEFAULT '0' COMMENT '当前暂扣是否计费:0否1是', + `hold_reason` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前暂扣原因;解除后为空', + `manual_node_override` tinyint NOT NULL DEFAULT '0' COMMENT '是否启用单票人工计划节点覆盖:0否1是', + `version` int NOT NULL DEFAULT '0' COMMENT '尾程订单命令乐观锁版本', + `pallet_count` int NOT NULL DEFAULT '0' COMMENT '托数', + `package_count` int NOT NULL DEFAULT '0' COMMENT '箱数', + `received_package_count` int DEFAULT NULL COMMENT 'PDA实际入库箱数', + `picked_package_count` int NOT NULL DEFAULT '0', + `shipped_package_count` int NOT NULL DEFAULT '0', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '体积(立方米)', + `product_quantity` int DEFAULT NULL COMMENT '货物数量', + `volume_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '体积重量(千克)', + `estimated_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到港时间', + `actual_arrival_at` datetime(3) DEFAULT NULL COMMENT '实际到港时间', + `estimated_warehouse_at` datetime(3) DEFAULT NULL COMMENT '预计到仓时间', + `arrival_time_version` int NOT NULL DEFAULT '0' COMMENT '柜级预计到仓时间乐观锁版本', + `inbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '入库单号', + `outbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '出库单号', + `delivery_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送单号', + `relabel_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标单号', + `relabel_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标状态', + `pallet_merge_flag` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '合托标记', + `pallet_merge_batch_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '平台预标记合托分组号', + `current_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_ASSIGNMENT' COMMENT '当前业务状态', + `private_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注(仅自己)', + `customer_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注(客户)', + `warehouse_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注(仓库)', + `source_event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源事件 ID', + `source_loading_plan_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源装柜计划 ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源头程货柜预订ID', + `source_loading_plan_version` bigint DEFAULT NULL COMMENT '来源装柜计划版本', + `source_handover_version` bigint DEFAULT NULL COMMENT '交接版本', + `source_payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源事件负载摘要', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `sub_order_status` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '子单据状态汇总', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_source` (`customer_id`,`source_region`,`source_inbound_id`), + KEY `idx_ll_order_list` (`customer_id`,`current_status`,`created_at`), + KEY `idx_ll_order_group` (`customer_id`,`order_no`), + KEY `idx_ll_order_container` (`customer_id`,`container_no`), + KEY `idx_ll_order_container_progress` (`source_container_booking_id`,`estimated_warehouse_at`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单主表'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_command_record`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_command_record` ( + `id` bigint NOT NULL COMMENT '尾程订单命令幂等记录ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令动作:MANUAL_PLAN、HOLD、MANUAL_NODES', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台操作人ID', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端幂等键', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化请求SHA-256摘要', + `result_ref` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '结果业务引用', + `result_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '首次成功响应JSON快照', + `result_version` int NOT NULL COMMENT '命令成功后的订单版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '首次成功时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_command_key` (`customer_id`,`order_id`,`action`,`operator_id`,`idempotency_key`), + KEY `idx_ll_order_command_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单写命令幂等与结果审计记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_detail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_detail` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单明细主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单 ID', + `source_inbound_detail_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源入仓明细 ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU 编码', + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名', + `product_name_en` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '英文品名', + `package_count` int NOT NULL DEFAULT '0' COMMENT '箱数', + `product_quantity` int DEFAULT NULL COMMENT '数量', + `pallet_count` int DEFAULT NULL COMMENT '托数', + `gross_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '毛重(千克)', + `net_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '净重(千克)', + `dimensional_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '体积重量(千克)', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '体积(立方米)', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓 ID', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称', + `fba_tracking_no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA跟踪号', + `shipment_no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '货件编号', + `shipping_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '唛头', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_detail_source` (`order_id`,`source_inbound_detail_id`), + KEY `idx_ll_detail_order` (`order_id`), + KEY `idx_ll_detail_tenant_order` (`customer_id`,`order_id`), + KEY `idx_ll_detail_customer_order` (`customer_id`,`order_id`,`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2291500000000010433 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单实装商品冻结明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_fee`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_fee` ( + `id` bigint NOT NULL COMMENT '费用明细主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `fee_item` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项目', + `currency` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '币种代码', + `amount` decimal(18,2) NOT NULL COMMENT '费用金额', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_REVIEW' COMMENT '费用状态:PENDING_REVIEW待审核、APPROVED审核通过、REJECTED已驳回', + `supplier_description` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商或费用说明', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建操作人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_ll_order_fee_customer_order` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单费用明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_hold_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_hold_history` ( + `id` bigint NOT NULL COMMENT '尾程订单暂扣历史ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `held` tinyint NOT NULL COMMENT '操作后是否暂扣:0否1是', + `chargeable` tinyint NOT NULL COMMENT '本次暂扣是否计费:0否1是', + `reason` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '暂扣或解除原因', + `order_version` int NOT NULL COMMENT '操作成功后的订单版本', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人ID', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人名称', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端幂等键', + `created_at` datetime(3) NOT NULL COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_hold_key` (`customer_id`,`order_id`,`operator_id`,`idempotency_key`), + KEY `idx_ll_order_hold_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单暂扣与解除不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_manual_node`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_manual_node` ( + `id` bigint NOT NULL COMMENT '尾程订单人工节点ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `node_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '八行人工展示节点稳定代码,与Carrier标准节点隔离', + `node_at` datetime(3) DEFAULT NULL COMMENT '人工填写节点时间,允许为空', + `source` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'MANUAL' COMMENT '节点来源,固定MANUAL', + `order_version` int NOT NULL COMMENT '最近编辑后的订单版本', + `updated_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '最近操作人ID', + `updated_at` datetime(3) NOT NULL COMMENT '最近编辑时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_manual_node` (`customer_id`,`order_id`,`node_code`), + KEY `idx_ll_order_manual_node_order` (`customer_id`,`order_id`,`node_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单当前人工节点覆盖事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_manual_node_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_manual_node_history` ( + `id` bigint NOT NULL COMMENT '尾程订单人工节点历史ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `nodes_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次全量人工节点JSON快照', + `order_version` int NOT NULL COMMENT '操作成功后的订单版本', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人ID', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人名称', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端幂等键', + `created_at` datetime(3) NOT NULL COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_order_manual_node_history_key` (`customer_id`,`order_id`,`operator_id`,`idempotency_key`), + KEY `idx_ll_order_manual_node_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单人工节点覆盖不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_no_daily_sequence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_no_daily_sequence` ( + `business_date` date NOT NULL COMMENT '业务日期(Asia/Shanghai)', + `last_sequence` int NOT NULL COMMENT '当日已分配尾程单流水号', + PRIMARY KEY (`business_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程单号按日原子流水'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_operation_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_operation_log` ( + `id` bigint NOT NULL COMMENT '操作记录主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `operation_node` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作节点', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作人名称', + `result` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理结果', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + KEY `idx_ll_order_operation_customer_order` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单操作记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_source_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_source_pallet` ( + `id` bigint NOT NULL COMMENT '来源托盘快照ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `source_pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '头程冻结托盘码', + `sequence_no` int NOT NULL COMMENT '订单内稳定顺序', + `source_event_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源装柜完成事件ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_source_pallet_no` (`source_pallet_no`), + UNIQUE KEY `uk_ll_source_pallet_sequence` (`customer_id`,`order_id`,`sequence_no`), + KEY `idx_ll_source_pallet_order` (`customer_id`,`order_id`), + KEY `fk_ll_source_pallet_order` (`order_id`), + CONSTRAINT `fk_ll_source_pallet_order` FOREIGN KEY (`order_id`) REFERENCES `ll_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='头程交接的不可变托盘码快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_order_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_order_status_history` ( + `id` bigint NOT NULL COMMENT '订单状态历史主键', + `customer_id` bigint NOT NULL COMMENT '租户 ID', + `order_id` bigint NOT NULL COMMENT '订单 ID', + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更前状态', + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '变更后状态', + `reason` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变更原因', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间', + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='尾程订单状态历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_outbound_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_outbound_order` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `outbound_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `dispatch_order_id` bigint DEFAULT NULL COMMENT '派车单ID,一件代发为空', + `dispatch_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派车单号,一件代发为空', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'WAIT_OUTBOUND', + `outbound_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'DISPATCH_DELIVERY' COMMENT '出库类型', + `lx_codes` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关联一件代发领星入库单代码汇总', + `recipient_info` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发收件信息', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发创建请求摘要,其他出库类型为空', + `package_count` int NOT NULL DEFAULT '0', + `pallet_count` int NOT NULL DEFAULT '0', + `gross_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '毛重(千克)', + `volume_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '材积重(千克)', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '体积(立方米),来源未确认时为空', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `fee_coverage_json` json DEFAULT NULL COMMENT '发运原费用及服务覆盖确认快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_outbound_no` (`customer_id`,`outbound_no`), + UNIQUE KEY `uk_ll_outbound_idempotency` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_outbound_dispatch` (`customer_id`,`dispatch_order_id`), + KEY `idx_ll_outbound_list` (`customer_id`,`status`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Outbound document generated from a dispatch'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_outbound_pallet_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_outbound_pallet_item` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `outbound_order_id` bigint NOT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL COMMENT '浠撳簱瀹炵墿鎵樼洏ID', + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鎵樼洏鍙凤紝绠辩淮搴﹀嚭搴撲负绌�', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `package_count` int NOT NULL DEFAULT '0', + `gross_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '毛重(千克)', + `volume_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '材积重(千克)', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '体积(立方米),来源未确认时为空', + `picked_package_count` int NOT NULL DEFAULT '0' COMMENT '已拣箱数', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'WAIT_PICK' COMMENT '拣货状态', + `order_refs` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '一件代发SKU', + `return_sku_quantity` bigint DEFAULT NULL COMMENT '退货单SKU本来源计划出库件数快照,NULL为历史整箱出库', + `carton_marks` varchar(4000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_outbound_pallet` (`customer_id`,`outbound_order_id`,`warehouse_pallet_id`), + KEY `idx_ll_outbound_pallet_list` (`customer_id`,`outbound_order_id`), + KEY `idx_ll_outbound_pallet_destination` (`customer_id`,`destination_warehouse_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Pallet detail snapshot for an outbound document'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_outbound_pda_pick`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_outbound_pda_pick` ( + `id` bigint NOT NULL COMMENT '主键ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `task_id` bigint NOT NULL COMMENT 'PDA任务ID', + `outbound_pallet_item_id` bigint NOT NULL COMMENT '出库托盘明细ID', + `inventory_position_id` bigint DEFAULT NULL COMMENT '库存仓位ID,退货箱唛出库为空', + `packages` bigint NOT NULL COMMENT '拣货箱数', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `picked_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_outbound_pda_pick_key` (`customer_id`,`idempotency_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='一件代发出库PDA托盘拣货记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_outbound_pda_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_outbound_pda_task` ( + `id` bigint NOT NULL COMMENT '主键ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `outbound_order_id` bigint NOT NULL COMMENT '出库单ID', + `task_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA任务号', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING' COMMENT '任务状态:待拣货、拣货中、已完成', + `completion_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '完成命令幂等键', + `pushed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '推送时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '完成时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_outbound_pda_task_order` (`customer_id`,`outbound_order_id`), + UNIQUE KEY `uk_ll_outbound_pda_task_no` (`customer_id`,`task_no`), + UNIQUE KEY `uk_ll_outbound_pda_complete_key` (`customer_id`,`completion_idempotency_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='一件代发出库PDA拣货任务'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_procurement_fee`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_procurement_fee` ( + `id` bigint NOT NULL COMMENT '主键ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID', + `fee_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用业务号', + `fee_item_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项编码', + `fee_item_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项名称', + `amount` decimal(20,2) NOT NULL COMMENT 'CNY金额', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '费用币种', + `voucher_file_id` bigint NOT NULL COMMENT '凭证文件ID', + `voucher_file_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '凭证文件名', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '说明', + `wallet_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资金状态', + `wallet_error_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资金错误码', + `wallet_error_message` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资金错误说明', + `wallet_command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前资金指令事件ID', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '登记人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_procurement_fee_no` (`fee_no`), + KEY `idx_ll_procurement_fee_order` (`customer_id`,`order_id`,`created_at`), + CONSTRAINT `chk_ll_procurement_fee_amount` CHECK ((`amount` > 0)), + CONSTRAINT `chk_ll_procurement_fee_currency` CHECK ((`currency` = _utf8mb4'CNY')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外采购费用明细及资金生命周期'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_procurement_file`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_procurement_file` ( + `id` bigint NOT NULL COMMENT '主键ID', + `order_id` bigint NOT NULL COMMENT '采购订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID', + `category` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'RECEIPT签收文件或VOUCHER费用凭证', + `file_id` bigint NOT NULL COMMENT 'File服务文件ID', + `file_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件名快照', + `content_type` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '媒体类型', + `size_bytes` bigint NOT NULL DEFAULT '0' COMMENT '文件大小', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '上传人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_procurement_file` (`order_id`,`file_id`), + KEY `idx_ll_procurement_file_order` (`customer_id`,`order_id`,`category`,`created_at`), + CONSTRAINT `chk_ll_procurement_file_category` CHECK ((`category` in (_utf8mb4'RECEIPT',_utf8mb4'VOUCHER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外采购签收文件及费用凭证'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_procurement_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_procurement_order` ( + `id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `order_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `purchase_category` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `product_specification` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `product_url` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `purchase_quantity` bigint NOT NULL, + `budget_unit_price` decimal(18,2) DEFAULT NULL, + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'USD', + `receiving_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `purchase_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `purchase_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `inbound_quantity` bigint NOT NULL DEFAULT '0', + `outbound_details` json DEFAULT NULL COMMENT '出库明细', + `outbound_quantity` bigint NOT NULL DEFAULT '0', + `domestic_carrier` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `domestic_tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_carrier` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `overseas_tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `estimated_arrival_at` datetime(3) DEFAULT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_REVIEW', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `review_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `review_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核幂等键', + `review_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核请求内容哈希', + `reviewed_at` datetime(3) DEFAULT NULL, + `version` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_overseas_procurement_order_no` (`customer_id`,`order_no`), + UNIQUE KEY `uk_ll_overseas_procurement_order_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_overseas_procurement_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_overseas_procurement_warehouse` (`customer_id`,`purchase_warehouse_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Overseas procurement order awaiting business approval'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_procurement_outbound`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_procurement_outbound` ( + `id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `quantity` bigint NOT NULL, + `outbound_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `carrier` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `outbound_at` datetime(3) NOT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_overseas_procurement_outbound_no` (`customer_id`,`order_id`,`outbound_no`), + KEY `idx_ll_overseas_procurement_outbound_order` (`customer_id`,`order_id`,`outbound_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Manual outbound records for overseas procurement inventory'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_procurement_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_procurement_status_history` ( + `id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作幂等键', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + KEY `idx_ll_overseas_procurement_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable overseas procurement review history'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_quote`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_quote` ( + `id` bigint NOT NULL COMMENT '报价ID', + `name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价名称', + `warehouse_id` bigint NOT NULL COMMENT '国内平台海外合作仓ID', + `warehouse_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '合作仓编码快照', + `warehouse_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '合作仓名称快照', + `country_code` varchar(2) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国家二字码快照', + `provider_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价方', + `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '币种', + `effective_start` date NOT NULL COMMENT '生效开始日期', + `effective_end` date NOT NULL COMMENT '生效结束日期', + `version_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务版本号', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'INACTIVE' COMMENT '状态:ACTIVE/INACTIVE', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人', + `updated_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更新人', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_quote_warehouse_provider_version` (`warehouse_id`,`provider_name`,`version_code`), + KEY `idx_ll_quote_page` (`status`,`updated_at`,`id`), + KEY `idx_ll_quote_effective` (`warehouse_id`,`provider_name`,`currency`,`effective_start`,`effective_end`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外仓报价主表'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_quote_fee`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_quote_fee` ( + `id` bigint NOT NULL COMMENT '费用明细ID', + `quote_id` bigint NOT NULL COMMENT '报价ID', + `sequence_no` int NOT NULL COMMENT '显示顺序', + `item` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '费用项目', + `billing_unit` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '计费单位', + `unit_price` decimal(18,4) NOT NULL COMMENT '单价', + `minimum_charge` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '最低收费', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_quote_fee_sequence` (`quote_id`,`sequence_no`), + KEY `idx_ll_quote_fee_quote` (`quote_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外仓报价仓库费用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_overseas_quote_transit_price`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_overseas_quote_transit_price` ( + `id` bigint NOT NULL COMMENT '中转价格ID', + `quote_id` bigint NOT NULL COMMENT '报价ID', + `sequence_no` int NOT NULL COMMENT '显示顺序', + `fba_warehouse_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'FBA仓编码', + `delivery_method` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报价运输方式', + `estimated_miles` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '预估英里数', + `price` decimal(18,4) NOT NULL COMMENT '报价金额', + `minimum_charge` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '最低收费', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_quote_transit_sequence` (`quote_id`,`sequence_no`), + KEY `idx_ll_quote_transit_quote` (`quote_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外仓报价中转价格明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_inventory_move`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_inventory_move` ( + `id` bigint NOT NULL COMMENT '移库操作ID', + `move_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '移库操作单号', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'Token冻结的海外实际仓ID', + `pallet_id` bigint NOT NULL COMMENT '整托移库的实物托盘ID', + `pallet_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实物托盘码快照', + `source_location_id` bigint NOT NULL COMMENT '来源库位ID', + `source_location_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源库位码快照', + `target_location_id` bigint NOT NULL COMMENT '目标库位ID', + `target_location_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目标库位码快照', + `customer_count` int NOT NULL COMMENT '托盘涉及客户数', + `position_count` int NOT NULL COMMENT '迁移库存位置数', + `package_count` bigint NOT NULL COMMENT '迁移总箱数', + `pallet_version_before` int NOT NULL COMMENT '迁移前托盘版本', + `pallet_version_after` int DEFAULT NULL COMMENT '迁移后托盘版本', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作账号标识', + `reason` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '移库原因', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '移库幂等键', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '移库请求哈希', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '移库处理状态', + `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '成功响应JSON', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_inventory_move_no` (`move_no`), + UNIQUE KEY `uk_ll_pda_inventory_move_key` (`overseas_warehouse_id`,`operator_key`,`idempotency_key`), + KEY `idx_ll_pda_inventory_move_pallet` (`overseas_warehouse_id`,`pallet_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA同仓整托移库记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_operation_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_operation_history` ( + `id` bigint NOT NULL COMMENT 'PDA作业历史ID', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'Token冻结的海外实际仓ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '作业涉及的客户标识', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作账号标识', + `operation_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作业类型', + `business_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作业业务键', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作业结果状态', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '写操作幂等键', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '写请求内容哈希', + `summary` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '作业结果摘要', + `occurred_at` datetime(3) NOT NULL COMMENT '作业发生时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_history_idempotency` (`operator_key`,`idempotency_key`), + KEY `idx_ll_pda_history_operator` (`overseas_warehouse_id`,`operator_key`,`occurred_at`), + KEY `idx_ll_pda_history_business` (`overseas_warehouse_id`,`operation_type`,`business_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA真实作业历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_pallet_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_pallet_operation` ( + `id` bigint NOT NULL COMMENT 'PDA托盘作业ID', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'Token冻结的海外实际仓ID', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作账号标识', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备幂等键', + `operation_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '托盘作业类型', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容摘要', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理状态:PROCESSING、COMPLETED、FAILED_COMPENSATED、COMPENSATION_REQUIRED', + `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '成功响应快照', + `remote_transitions_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '实物托盘状态变更回执', + `last_error` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最后失败原因', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_pallet_idempotency` (`operator_key`,`idempotency_key`), + KEY `idx_ll_pda_pallet_warehouse` (`overseas_warehouse_id`,`status`,`updated_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA托盘作业幂等、补偿与结果记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_stocktake_action`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_stocktake_action` ( + `id` bigint NOT NULL COMMENT '盘点动作ID', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'Token冻结的海外实际仓ID', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作账号标识', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '动作幂等键', + `action_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点动作类型', + `task_id` bigint DEFAULT NULL COMMENT '盘点任务ID', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '动作请求哈希', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '动作处理状态', + `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '成功响应JSON', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_stocktake_action` (`overseas_warehouse_id`,`operator_key`,`idempotency_key`), + KEY `idx_ll_pda_stocktake_action_task` (`task_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA盘点动作幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_stocktake_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_stocktake_item` ( + `id` bigint NOT NULL COMMENT '盘点明细ID', + `task_id` bigint NOT NULL COMMENT '盘点任务ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '库存所属客户标识', + `balance_id` bigint NOT NULL COMMENT '库存余额ID', + `position_id` bigint NOT NULL COMMENT '库存位置ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU快照', + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '品名快照', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '入仓码快照', + `pallet_id` bigint NOT NULL COMMENT '实物托盘ID', + `pallet_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实物托盘码快照', + `location_id` bigint NOT NULL COMMENT '库位ID快照', + `location_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '库位码快照', + `book_packages` bigint NOT NULL COMMENT '任务创建时账面总箱数', + `actual_packages` bigint DEFAULT NULL COMMENT '现场实盘总箱数', + `difference_packages` bigint DEFAULT NULL COMMENT '实盘与账面箱数差异', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点明细状态', + `position_version` bigint NOT NULL COMMENT '任务创建时库存位置版本', + `counted_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '盘点操作账号标识', + `version` bigint NOT NULL DEFAULT '0' COMMENT '明细乐观锁版本', + `counted_at` datetime(3) DEFAULT NULL COMMENT '盘点时间', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_stocktake_item` (`task_id`,`position_id`), + KEY `idx_ll_pda_stocktake_item_task` (`task_id`,`status`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA库存盘点位置明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_pda_stocktake_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_pda_stocktake_task` ( + `id` bigint NOT NULL COMMENT '盘点任务ID', + `task_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点任务号', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'Token冻结的海外实际仓ID', + `scope_type` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点范围类型LOCATION或PALLET', + `scope_resource_id` bigint NOT NULL COMMENT '盘点库位或托盘资源ID', + `scope_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点库位码或托盘码快照', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '盘点任务状态', + `position_count` int NOT NULL COMMENT '库存位置总数', + `counted_count` int NOT NULL DEFAULT '0' COMMENT '已盘库存位置数', + `difference_count` int NOT NULL DEFAULT '0' COMMENT '存在差异的库存位置数', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建操作账号标识', + `submitted_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '提交操作账号标识', + `submit_reason` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '盘点差异提交原因', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建幂等键', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建请求哈希', + `version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + `submitted_at` datetime(3) DEFAULT NULL COMMENT '提交完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_pda_stocktake_no` (`task_no`), + UNIQUE KEY `uk_ll_pda_stocktake_create` (`overseas_warehouse_id`,`created_by`,`idempotency_key`), + KEY `idx_ll_pda_stocktake_list` (`overseas_warehouse_id`,`status`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA库存盘点任务'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_procurement_daily_sequence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_procurement_daily_sequence` ( + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID', + `business_date` date NOT NULL COMMENT '北京时间业务日期', + `sequence_value` int NOT NULL COMMENT '客户当日已分配最大序号', + PRIMARY KEY (`customer_id`,`business_date`), + CONSTRAINT `chk_ll_procurement_sequence` CHECK ((`sequence_value` between 1 and 9999)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外采购客户日序列'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_receiving_container_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_receiving_container_operation` ( + `id` bigint NOT NULL COMMENT '柜号收货操作ID', + `session_id` bigint NOT NULL COMMENT '柜号签收会话ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户账号标识', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作账号唯一标识', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作动作', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户端幂等键', + `request_hash` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容哈希', + `request_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容快照', + `result_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '响应内容快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_receiving_operation` (`operator_key`,`idempotency_key`), + KEY `idx_ll_receiving_operation_session` (`session_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA柜号收货幂等审计记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_receiving_container_session`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_receiving_container_session` ( + `id` bigint NOT NULL COMMENT '柜号签收会话ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所选柜解析出的客户标识', + `container_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '集装箱号', + `overseas_warehouse_id` bigint NOT NULL COMMENT '操作员Token绑定并冻结的海外实际收货共享物理仓ID', + `overseas_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '仓库服务校验后的海外实际收货共享物理仓名称快照', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作账号唯一标识', + `operator_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作账号名称', + `active_operator_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '未完成会话平台操作账号全局唯一锁键', + `active_container_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '未完成会话柜号全局唯一锁键', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'WAIT_SIGN' COMMENT '会话状态:WAIT_SIGN、SIGNED、RECEIVING、COMPLETED', + `sign_photos` json DEFAULT NULL COMMENT '签收卸柜照片角色与文件ID列表', + `prepared_at` datetime(3) DEFAULT NULL COMMENT '选择柜号时间', + `signed_at` datetime(3) DEFAULT NULL COMMENT '签收时间', + `receiving_at` datetime(3) DEFAULT NULL COMMENT '首次收货时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '完成时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_receiving_active_operator` (`active_operator_key`), + UNIQUE KEY `uk_ll_receiving_active_container` (`active_container_key`), + KEY `idx_ll_receiving_container` (`customer_id`,`container_no`,`status`), + KEY `idx_ll_receiving_operator` (`customer_id`,`operator_key`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA柜号签收收货会话'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_receiving_fba_pallet_count`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_receiving_fba_pallet_count` ( + `id` bigint NOT NULL COMMENT 'FBA托盘现场累计箱数ID', + `session_id` bigint NOT NULL COMMENT '柜号签收会话ID', + `group_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '柜号与FBA仓组成的收货组键', + `pallet_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '现有FBA托盘码', + `actual_packages` int NOT NULL COMMENT '该托现场累计实物箱数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_receiving_fba_count` (`session_id`,`group_key`,`pallet_code`), + KEY `idx_ll_receiving_fba_group` (`session_id`,`group_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA普通FBA托盘现场累计与超收标记'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_receiving_sku_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_receiving_sku_receipt` ( + `id` bigint NOT NULL COMMENT 'FBA SKU实收进度ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户账号标识', + `session_id` bigint NOT NULL COMMENT '柜号签收会话ID', + `plan_id` bigint NOT NULL COMMENT '入仓计划ID', + `line_id` bigint NOT NULL COMMENT '入仓计划明细ID', + `pallet_id` bigint NOT NULL COMMENT '计划托盘ID', + `order_id` bigint NOT NULL COMMENT '尾程订单ID', + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入仓码快照', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SKU编码快照', + `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '产品名称快照', + `received_packages` int NOT NULL COMMENT 'SKU实收箱数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_receiving_sku_pallet` (`customer_id`,`line_id`,`pallet_id`,`sku_code`), + KEY `idx_ll_receiving_sku_session` (`customer_id`,`session_id`,`line_id`), + KEY `idx_ll_receiving_sku_plan` (`customer_id`,`plan_id`,`line_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA柜号FBA SKU实收进度'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_receiving_warehouse_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_receiving_warehouse_operation` ( + `id` bigint NOT NULL COMMENT '柜级接柜仓修改操作ID', + `source_container_booking_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定来源柜预订ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台请求幂等键', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化修改请求SHA-256摘要', + `result_version` int NOT NULL COMMENT '修改成功后的柜级分配版本', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台操作人名称', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '接柜仓修改备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_receiving_warehouse_idempotency` (`idempotency_key`), + KEY `idx_ll_receiving_warehouse_container` (`source_container_booking_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜级海外接柜仓修改幂等审计记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_application`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_application` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `relabel_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `lastleg_order_id` bigint NOT NULL, + `customer_order_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `label_deadline` datetime(3) NOT NULL, + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `delivery_method` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '派送方式:TRUCK卡车、PICKUP自提、EXPRESS快递;仅涉及箱唛换标时必填', + `print_shipping_label` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否需要打印面单', + `shipping_label_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户上传面单文件ID', + `shipping_label_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户上传面单文件名', + `shipping_label_file_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户上传面单下载地址', + `fulfillment_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'WAIT_RELABEL' COMMENT '换标后履约状态', + `outbound_order_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '自提或快递生成的换标出库单号', + `customer_confirmation_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户确认完成幂等键', + `customer_confirmed_at` datetime(3) DEFAULT NULL COMMENT '客户确认换标完成时间', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `total_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '总换标PDF文件ID', + `total_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '总换标PDF文件名', + `total_file_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '总换标PDF预览地址', + `carton_total_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱唛总文件ID', + `carton_total_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱唛总文件名', + `carton_total_file_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱唛总文件地址', + `sku_total_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU总文件ID', + `sku_total_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU总文件名', + `sku_total_file_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU总文件地址', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_PROCESSING', + `item_count` int NOT NULL DEFAULT '0', + `total_package_count` int NOT NULL DEFAULT '0', + `notified_package_count` int NOT NULL DEFAULT '0', + `charge_amount` decimal(20,2) NOT NULL DEFAULT '0.00' COMMENT '换标费用CNY', + `charge_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '费用币种', + `wallet_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'FREEZE_PENDING' COMMENT '资金状态', + `wallet_error_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资金错误码', + `wallet_error_message` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资金错误说明', + `wallet_command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前资金指令事件ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_relabel_application_no` (`customer_id`,`relabel_no`), + UNIQUE KEY `uk_ll_relabel_application_idempotency` (`customer_id`,`idempotency_key`), + KEY `idx_ll_relabel_application_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_relabel_application_customer` (`customer_id`,`customer_order_no`), + KEY `idx_ll_relabel_application_warehouse` (`customer_id`,`overseas_warehouse_id`), + KEY `idx_ll_relabel_application_order` (`lastleg_order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Customer relabel application header'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_item` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `application_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU编码(选填)', + `product_image_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `product_image_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `product_image_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `total_package_count` int NOT NULL, + `notified_package_count` int NOT NULL, + `shipment_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '货件编号(无FBA去向时为空)', + `tracking_code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `new_sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标后SKU编码', + `label_requirement` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '货物明细备注', + `relabel_file_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `relabel_file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `relabel_file_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '瀹㈡埛鑷湁绠卞敍', + `return_carton_id` bigint DEFAULT NULL COMMENT '閫�璐ф崲绠卞敍鏉ユ簮閫�璐у簱瀛樼ID', + `source_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '閫�璐ф崲绠卞敍鍘熺鍞涘揩鐓�', + `new_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '閫�璐ф崲绠卞敍鏂扮鍞�', + `fba_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鍏宠仈FBA绠卞敍', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '该箱目的海外仓ID', + `destination_fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '可选FBA目的仓编码(与海外操作仓分离)', + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CARTON_LABEL' COMMENT '换标模式:箱唛、SKU或组合换标', + `sku_relabel_items_json` json DEFAULT NULL COMMENT '同箱SKU换标子明细快照(数量按件)', + `source_inventory_balance_id` bigint DEFAULT NULL COMMENT '原库存余额ID(预入仓换标任务可为空)', + `source_inventory_position_id` bigint DEFAULT NULL COMMENT '原库存库位ID(预入仓换标任务可为空)', + `source_inbound_order_id` bigint DEFAULT NULL COMMENT '原入仓单ID(预入仓换标任务可为空)', + `source_inbound_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `source_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_ll_relabel_item_application` (`customer_id`,`application_id`), + KEY `idx_ll_relabel_item_sku` (`customer_id`,`sku_code`), + KEY `idx_ll_relabel_item_destination` (`customer_id`,`destination_warehouse_id`,`application_id`), + KEY `idx_ll_relabel_item_source_position` (`customer_id`,`source_inventory_position_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Frozen customer relabel cargo items'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_pda_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_pda_history` ( + `id` bigint NOT NULL COMMENT '换标PDA任务历史ID', + `task_id` bigint NOT NULL COMMENT '换标PDA任务ID', + `application_id` bigint NOT NULL COMMENT '换标申请单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '现场动作类型', + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '动作前任务状态', + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '动作后任务状态', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作账号标识', + `operator_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作员名称快照', + `detail_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '动作详情JSON', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_ll_relabel_pda_history_task` (`customer_id`,`task_id`,`created_at`,`id`), + KEY `idx_ll_relabel_pda_history_application` (`customer_id`,`application_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA换标任务不可变操作历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_pda_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_pda_operation` ( + `id` bigint NOT NULL COMMENT '换标PDA幂等操作ID', + `task_id` bigint NOT NULL COMMENT '换标PDA任务ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求操作账号标识', + `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '幂等操作动作', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备生成的幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容哈希', + `result_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '成功响应快照JSON', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_relabel_pda_operation_key` (`operator_key`,`idempotency_key`), + KEY `idx_ll_relabel_pda_operation_task` (`customer_id`,`task_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA换标写操作幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_pda_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_pda_task` ( + `id` bigint NOT NULL COMMENT '换标PDA任务ID', + `application_id` bigint NOT NULL COMMENT '换标申请单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `relabel_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换标申请单号快照', + `overseas_warehouse_id` bigint NOT NULL COMMENT 'PDA令牌冻结的海外实际作业仓ID', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务状态:PROCESSING、WAIT_REVIEW或COMPLETED', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '认领操作账号标识', + `operator_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '认领操作员名称快照', + `reviewer_key` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '复核账号标识', + `reviewer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '复核员名称快照', + `expected_packages` int NOT NULL COMMENT '申请单通知的应换标箱数', + `relabelled_packages` int NOT NULL DEFAULT '0' COMMENT '已正常换标箱数', + `skipped_packages` int NOT NULL DEFAULT '0' COMMENT '已说明原因跳过箱数', + `exception_packages` int NOT NULL DEFAULT '0' COMMENT '已登记异常箱数', + `completion_photo_file_ids` json DEFAULT NULL COMMENT '换标完成现场照片文件ID列表', + `completion_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '完成提交备注', + `review_decision` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近复核结论:APPROVE、REWORK或CUSTOMER_CONFIRMED', + `review_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近复核备注', + `claimed_at` datetime(3) NOT NULL COMMENT '任务认领时间', + `submitted_at` datetime(3) DEFAULT NULL COMMENT '提交复核时间', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '最近复核时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_relabel_pda_task_application` (`customer_id`,`application_id`), + UNIQUE KEY `uk_ll_relabel_pda_task_no` (`relabel_no`), + KEY `idx_ll_relabel_pda_task_warehouse` (`overseas_warehouse_id`,`status`,`updated_at`), + KEY `idx_ll_relabel_pda_task_operator` (`operator_key`,`status`,`updated_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA换标现场作业任务'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_pda_unit_fact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_pda_unit_fact` ( + `id` bigint NOT NULL COMMENT '逐件换标事实ID', + `task_id` bigint NOT NULL COMMENT '换标PDA任务ID', + `application_id` bigint NOT NULL COMMENT '换标申请单ID', + `item_id` bigint NOT NULL COMMENT '换标申请明细ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', + `old_label` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '扫描的实物旧标签或箱标', + `new_label` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '扫描的换标后新标签', + `result` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '逐件结果:RELABELLED、SKIPPED或EXCEPTION', + `exception_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '异常编码', + `reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '跳过或异常原因', + `quantity` int NOT NULL DEFAULT '1' COMMENT '本次事实处理件数,箱级作业固定为1', + `operator_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作账号标识', + `operator_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作员名称快照', + `occurred_at` datetime(3) NOT NULL COMMENT '逐件事实发生时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_relabel_pda_old_label` (`old_label`), + KEY `idx_ll_relabel_pda_unit_task` (`customer_id`,`task_id`,`occurred_at`,`id`), + KEY `idx_ll_relabel_pda_unit_item` (`customer_id`,`application_id`,`item_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外PDA逐件换标扫码与异常事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_relabel_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_relabel_status_history` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `application_id` bigint NOT NULL, + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + KEY `idx_ll_relabel_status_history_application` (`customer_id`,`application_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable customer relabel process history'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_carton_count_session`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_carton_count_session` ( + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台PDA操作员标识', + `warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '认领时绑定海外仓标识', + `receipt_id` bigint DEFAULT NULL COMMENT '正在清点的签收批次,完成后释放为NULL', + `started_at` datetime(3) DEFAULT NULL COMMENT '本次开始清点时间', + `created_at` datetime(3) NOT NULL COMMENT '会话创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '会话更新时间', + PRIMARY KEY (`operator_id`), + UNIQUE KEY `uk_ll_return_count_session_receipt` (`receipt_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货箱内清点单人单任务持久会话'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_inventory_balance`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_inventory_balance` ( + `id` bigint NOT NULL COMMENT '退货库存余额ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '海外仓ID', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SKU编码', + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名', + `total_quantity` bigint NOT NULL DEFAULT '0' COMMENT '实物总库存,仅实际出库扣减', + `available_quantity` bigint NOT NULL COMMENT '可用上架数量', + `carton_quantity` bigint NOT NULL COMMENT '包含该SKU的可用箱数', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_inventory_balance` (`customer_id`,`overseas_warehouse_id`,`sku_code`), + CONSTRAINT `chk_ll_return_inventory_balance_quantity` CHECK (((`available_quantity` >= 0) and (`carton_quantity` >= 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货库存按客户海外仓SKU汇总余额'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_inventory_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_inventory_carton` ( + `id` bigint NOT NULL COMMENT '退货库存箱ID', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `overseas_warehouse_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '海外仓ID', + `source_receipt_id` bigint DEFAULT NULL COMMENT '来源PDA签收单ID', + `source_batch_no` text COLLATE utf8mb4_unicode_ci COMMENT '实际消耗来源签收批次号,多个批次逗号分隔', + `source_return_no` text COLLATE utf8mb4_unicode_ci COMMENT '实际消耗来源退货单号,多个单号逗号分隔', + `source_unit_type` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源实物类型', + `source_unit_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源实物编码', + `pallet_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '签收时绑定的托盘码', + `carton_mark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '退货箱号和箱唛编码', + `fba_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA箱唛', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称', + `relabel_application_id` bigint DEFAULT NULL COMMENT '绑定换标申请单ID', + `relabel_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '绑定换标单号', + `relabel_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标状态', + `relabel_completed_at` datetime(3) DEFAULT NULL COMMENT '换标完成时间', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'AVAILABLE可用或MERGED已合箱', + `sku_types` int NOT NULL COMMENT '箱内SKU种类数', + `total_quantity` bigint NOT NULL COMMENT '箱内总件数', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + `merged_at` datetime(3) DEFAULT NULL COMMENT '合箱完成时间', + `length` decimal(12,3) DEFAULT NULL COMMENT '绠遍暱CM', + `width` decimal(12,3) DEFAULT NULL COMMENT '绠卞CM', + `height` decimal(12,3) DEFAULT NULL COMMENT '绠遍珮CM', + `weight` decimal(12,3) DEFAULT NULL COMMENT '绠遍噸KG', + `original_packaging` tinyint(1) DEFAULT NULL COMMENT '是否使用原箱原包装', + `new_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鎹㈡爣鍚庢柊绠卞敍', + `location_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '退货箱当前库位', + `putaway_at` datetime(3) DEFAULT NULL COMMENT '退货箱上架时间', + `count_status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CONFIRMED' COMMENT '箱内清点状态 PENDING待清点 CONFIRMED已确认', + `counted_at` datetime(3) DEFAULT NULL COMMENT '箱内清点确认时间', + `counted_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱内清点确认操作人', + `label_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'WAIT_LABEL寰呰创鏍� CONFIRMED宸叉壂鐮佺‘璁ゆ爣绛�', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_inventory_carton_mark` (`carton_mark`), + KEY `idx_ll_return_inventory_carton_customer` (`customer_id`,`overseas_warehouse_id`,`status`,`created_at`), + KEY `idx_ll_return_inventory_carton_receipt` (`source_receipt_id`), + KEY `idx_ll_return_count` (`overseas_warehouse_id`,`count_status`,`status`,`source_receipt_id`), + CONSTRAINT `chk_ll_return_inventory_carton_quantity` CHECK ((((`status` in (_utf8mb4'AVAILABLE',_utf8mb4'PACKING_RESERVED',_utf8mb4'RELABEL_PENDING',_utf8mb4'OUTBOUND_PENDING',_utf8mb4'OUTBOUNDED',_utf8mb4'DISCARD_PENDING')) and (`sku_types` > 0) and (`total_quantity` > 0)) or ((`status` in (_utf8mb4'MERGED',_utf8mb4'DISCARDED')) and (`sku_types` = 0) and (`total_quantity` = 0)))), + CONSTRAINT `chk_ll_return_inventory_carton_status` CHECK ((`status` in (_utf8mb4'AVAILABLE',_utf8mb4'PACKING_RESERVED',_utf8mb4'RELABEL_PENDING',_utf8mb4'OUTBOUND_PENDING',_utf8mb4'MERGED',_utf8mb4'OUTBOUNDED',_utf8mb4'DISCARD_PENDING',_utf8mb4'DISCARDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货实物库存箱及箱唛'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_inventory_carton_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_inventory_carton_item` ( + `id` bigint NOT NULL COMMENT '退货库存箱SKU明细ID', + `carton_id` bigint NOT NULL COMMENT '退货库存箱ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SKU编码', + `product_name_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名', + `quantity` bigint NOT NULL COMMENT '该SKU箱内数量', + `packing_reserved_quantity` bigint NOT NULL DEFAULT '0' COMMENT '合箱计划预占件数', + `relabelled_quantity` bigint NOT NULL DEFAULT '0' COMMENT '当前SKU已经换标的实物件数,不可二次换标', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_inventory_carton_item` (`carton_id`,`sku_code`), + KEY `idx_ll_return_inventory_carton_item_customer` (`customer_id`,`sku_code`), + CONSTRAINT `chk_ll_return_inventory_carton_item_quantity` CHECK ((`quantity` >= 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货库存箱内SKU和数量'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_inventory_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_inventory_operation` ( + `id` bigint NOT NULL COMMENT '退货库存PDA操作ID', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作人ID', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求内容SHA-256', + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型,当前MERGE', + `result_carton_id` bigint DEFAULT NULL COMMENT '合箱结果退货库存箱ID', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + `result_json` json DEFAULT NULL COMMENT '幂等操作不可变返回快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_inventory_operation_operator_key` (`operator_id`,`idempotency_key`), + KEY `idx_ll_return_inventory_operation_result` (`result_carton_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货库存PDA合箱幂等操作审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_inventory_outbound_movement`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_inventory_outbound_movement` ( + `id` bigint NOT NULL COMMENT '退货出库SKU流水ID', + `outbound_pick_id` bigint NOT NULL COMMENT '同事务PDA出库拣货记录ID', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '库存所属客户ID和隔离键', + `overseas_warehouse_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际出库海外仓ID', + `carton_id` bigint NOT NULL COMMENT '真实退货库存箱ID', + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '冻结的真实退货箱业务码', + `outbound_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次退货出库业务单号', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次出库SKU编码快照', + `product_name_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名快照', + `quantity` bigint NOT NULL COMMENT '本箱该SKU实际出库件数,始终为正', + `total_before` bigint NOT NULL COMMENT '客户仓SKU出库前实物总数量', + `total_after` bigint NOT NULL COMMENT '客户仓SKU出库后实物总数量', + `available_before` bigint NOT NULL COMMENT '客户仓SKU出库前可用数量', + `available_after` bigint NOT NULL COMMENT '客户仓SKU出库后可用数量', + `cartons_before` bigint NOT NULL COMMENT '客户仓包含该SKU的出库前可用箱数', + `cartons_after` bigint NOT NULL COMMENT '客户仓包含该SKU的出库后可用箱数', + `occurred_at` datetime(3) NOT NULL COMMENT '出库记账时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_outbound_pick_sku` (`outbound_pick_id`,`sku_code`), + KEY `idx_ll_return_outbound_movement_query` (`customer_id`,`overseas_warehouse_id`,`sku_code`,`occurred_at`), + KEY `idx_ll_return_outbound_carton_sku` (`customer_id`,`carton_id`,`sku_code`), + CONSTRAINT `chk_ll_return_outbound_movement_delta` CHECK (((`quantity` > 0) and (`total_after` >= 0) and (`available_after` >= 0) and ((`total_before` - `total_after`) = `quantity`) and ((`available_before` - `available_after`) = `quantity`) and (`cartons_after` >= 0) and ((`cartons_before` - `cartons_after`) in (0,1)) and (`total_after` >= `available_after`))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='不可变退货出库SKU库存流水'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_order` ( + `id` bigint NOT NULL COMMENT '退货订单ID', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `return_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '退货订单号', + `overseas_warehouse_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作海外仓ID', + `warehouse_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中转仓联系人快照', + `warehouse_contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中转仓联系电话快照', + `customer_reference_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户参考号', + `lastleg_order_id` bigint DEFAULT NULL COMMENT '鍏宠仈灏剧▼涓昏鍗旾D', + `lastleg_order_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'linked lastleg order no', + `need_relabel` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否需要换标', + `relabel_application_id` bigint DEFAULT NULL COMMENT '绑定换标申请单ID', + `relabel_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '绑定换标单号', + `relabel_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标状态', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PENDING_RECEIPT、PARTIALLY_RECEIVED或COMPLETED', + `expected_sku_types` int NOT NULL COMMENT '预报SKU种类数', + `expected_quantity` bigint NOT NULL COMMENT '预报总数量', + `received_quantity` bigint NOT NULL DEFAULT '0' COMMENT '累计实收总数量', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户备注', + `discrepancy_reason` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手动完结差异原因', + `manually_completed_at` datetime(3) DEFAULT NULL COMMENT '手动差异完结时间', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建请求SHA-256', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建操作人ID', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_order_customer_no` (`customer_id`,`return_no`), + UNIQUE KEY `uk_ll_return_order_customer_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_return_order_warehouse_status` (`overseas_warehouse_id`,`status`,`created_at`), + CONSTRAINT `chk_ll_return_order_quantity` CHECK (((`expected_sku_types` > 0) and (`expected_quantity` > 0) and (`received_quantity` >= 0) and (`received_quantity` <= `expected_quantity`))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户退货订单及SKU实收汇总'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_order_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_order_item` ( + `id` bigint NOT NULL COMMENT '退货预报明细ID', + `return_order_id` bigint NOT NULL COMMENT '退货订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SKU编码', + `product_name_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名', + `expected_quantity` bigint NOT NULL COMMENT '该快递单SKU预报数量', + `received_quantity` bigint NOT NULL DEFAULT '0' COMMENT '该快递单SKU累计实收数量', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_item_order_sku` (`return_order_id`,`sku_code`), + KEY `idx_ll_return_item_sku` (`sku_code`,`received_quantity`), + CONSTRAINT `chk_ll_return_item_quantity` CHECK (((`expected_quantity` > 0) and (`received_quantity` >= 0) and (`received_quantity` <= `expected_quantity`))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户退货订单的快递单SKU预报与实收明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_packing_plan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_packing_plan` ( + `id` bigint NOT NULL, + `plan_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `return_nos_json` json NOT NULL, + `boxes_json` json NOT NULL, + `mode` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL, + `updated_at` datetime(3) NOT NULL, + `pushed_at` datetime(3) DEFAULT NULL, + `completed_at` datetime(3) DEFAULT NULL, + `source_items_json` json DEFAULT NULL COMMENT '精确来源箱和SKU锁定数量', + `result_marks_json` json DEFAULT NULL COMMENT '完成生成或并入的目标箱唛', + `request_hash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建载荷摘要', + `completion_hash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '完成载荷摘要', + `result_labels_json` json DEFAULT NULL COMMENT '计划完工标签快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_packing_plan_no` (`plan_no`), + UNIQUE KEY `uk_ll_return_packing_plan_key` (`idempotency_key`), + KEY `idx_ll_return_packing_plan_warehouse_status` (`overseas_warehouse_id`,`status`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货合箱计划'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_packing_trace`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_packing_trace` ( + `id` bigint NOT NULL COMMENT '合箱追溯ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原客户隔离键', + `operation_id` bigint NOT NULL COMMENT '合箱操作ID', + `source_carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源箱唛 空值表示目标箱原有库存快照', + `target_carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目标箱唛', + `return_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始退货单号', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品SKU编码', + `quantity` bigint NOT NULL COMMENT '本次移动件数', + `created_at` datetime(3) NOT NULL COMMENT '发生时间', + PRIMARY KEY (`id`), + KEY `idx_return_packing_trace_order` (`customer_id`,`return_no`,`created_at`), + KEY `idx_return_packing_trace_target` (`customer_id`,`target_carton_mark`,`sku_code`), + KEY `idx_return_packing_trace_source` (`customer_id`,`source_carton_mark`,`sku_code`), + CONSTRAINT `chk_return_packing_trace_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货合箱逐SKU原始退货单不可变追溯'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_receipt` ( + `id` bigint NOT NULL COMMENT 'PDA退货签收单ID', + `return_order_id` bigint NOT NULL COMMENT '退货订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `receipt_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '签收单号', + `receipt_batch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '签收批次号', + `unit_type` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '签收实物类型 PALLET/BOX/PARCEL', + `unit_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '签收实物编码', + `total_box_count` bigint DEFAULT NULL COMMENT '本次实物总箱数,托盘独立于SKU箱数', + `length` decimal(12,3) DEFAULT NULL COMMENT '托盘长度CM', + `width` decimal(12,3) DEFAULT NULL COMMENT '托盘宽度CM', + `height` decimal(12,3) DEFAULT NULL COMMENT '托盘高度CM', + `weight` decimal(12,3) DEFAULT NULL COMMENT '托盘重量KG', + `original_packaging` tinyint(1) DEFAULT NULL COMMENT '是否使用原箱原包装', + `measurement_source` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '尺寸重量来源 PALLET_MEASURED托盘实测 UNIT_SUM子箱汇总', + `pallet_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本次签收绑定的托盘码', + `carton_mark` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '签收生成或绑定的退货箱号', + `tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本次签收包裹的可选快递单号', + `bound_by` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '开始签收方式,RETURN_NO退货单号或SKU候选', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '签收状态,当前SIGNED', + `received_quantity` bigint NOT NULL COMMENT '本次实收数量', + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA操作人ID', + `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'PDA操作人名称', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA确认幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'PDA确认请求SHA-256', + `signed_at` datetime(3) NOT NULL COMMENT '签收时间', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_receipt_no` (`receipt_no`), + UNIQUE KEY `uk_ll_return_receipt_batch` (`receipt_batch_no`), + UNIQUE KEY `uk_ll_return_receipt_operator_key` (`operator_id`,`idempotency_key`), + KEY `idx_ll_return_receipt_order` (`return_order_id`,`signed_at`), + CONSTRAINT `chk_ll_return_receipt_bound` CHECK ((`bound_by` in (_utf8mb4'RETURN_NO',_utf8mb4'SKU'))), + CONSTRAINT `chk_ll_return_receipt_quantity` CHECK ((`received_quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PDA退货实收签收事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_receipt_batch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_receipt_batch` ( + `id` bigint NOT NULL COMMENT '退货仓储计费批次ID', + `return_order_id` bigint NOT NULL COMMENT '退货订单ID', + `receipt_id` bigint NOT NULL COMMENT 'PDA退货签收单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `batch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '签收批次号', + `overseas_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作海外仓ID', + `storage_billing_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '仓储计费状态,初始PENDING_PRICING', + `storage_started_at` datetime(3) NOT NULL COMMENT '仓储计费起算时间', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_return_batch_no` (`batch_no`), + UNIQUE KEY `uk_ll_return_batch_receipt` (`receipt_id`), + KEY `idx_ll_return_batch_billing` (`customer_id`,`overseas_warehouse_id`,`storage_billing_status`,`storage_started_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='每次退货签收生成的仓储费起算批次'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_receipt_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_receipt_item` ( + `id` bigint NOT NULL COMMENT '签收SKU明细ID', + `receipt_id` bigint NOT NULL COMMENT 'PDA退货签收单ID', + `return_order_item_id` bigint NOT NULL COMMENT '退货预报明细ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户ID和隔离键', + `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SKU编码', + `received_quantity` bigint NOT NULL COMMENT '本次SKU实收数量', + `box_count` bigint DEFAULT NULL COMMENT '本次 SKU 对应箱数', + PRIMARY KEY (`id`), + KEY `idx_ll_return_receipt_item_receipt` (`receipt_id`), + KEY `idx_ll_return_receipt_item_order_item` (`return_order_item_id`), + CONSTRAINT `chk_ll_return_receipt_item_quantity` CHECK ((`received_quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PDA退货签收SKU实际数量明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_sku_conversion`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_sku_conversion` ( + `id` bigint NOT NULL COMMENT 'SKU库存转换记录ID', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', + `overseas_warehouse_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作海外仓ID', + `application_id` bigint NOT NULL COMMENT '换标申请ID', + `relabel_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换标单号', + `item_id` bigint NOT NULL COMMENT '换标箱级明细ID', + `round_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '作业轮次,退回重做使用新轮次', + `carton_id` bigint NOT NULL COMMENT '实物来源包裹或箱ID', + `carton_mark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '完工时仓库识别码', + `old_sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换标前SKU', + `new_sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换标后SKU', + `product_name_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中文品名快照', + `quantity` bigint NOT NULL COMMENT '实际完成转换件数', + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'APPLIED待客户确认/CONFIRMED已确认/REVERSED退回冲回', + `ownership_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '本次转换件数的来源退货单快照,供精确冲回', + `completed_at` datetime(3) NOT NULL COMMENT '实物SKU转换时间', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '客户确认时间', + `reversed_at` datetime(3) DEFAULT NULL COMMENT '退回冲回时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_return_sku_conversion_round` (`item_id`,`round_key`,`old_sku_code`,`new_sku_code`), + KEY `idx_return_sku_conversion_app` (`customer_id`,`application_id`,`status`), + KEY `idx_return_sku_conversion_carton` (`customer_id`,`carton_id`), + CONSTRAINT `chk_return_sku_conversion_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退货实物SKU换标库存转换和冲回记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_return_stock_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_return_stock_receipt` ( + `id` bigint NOT NULL COMMENT '退回入仓实收凭据ID', + `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据归属', + `receipt_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '退回实收业务编号', + `inventory_ledger_id` bigint NOT NULL COMMENT '唯一实际退回入账流水', + `exception_order_id` bigint NOT NULL COMMENT '退回异常订单', + `order_id` bigint NOT NULL COMMENT '原尾程订单', + `inbound_order_id` bigint NOT NULL COMMENT '原入仓单', + `source_outbound_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原发运出库业务编号', + `source_outbound_pallet_item_id` bigint NOT NULL COMMENT '原出库托盘明细', + `source_inventory_position_id` bigint NOT NULL COMMENT '原拣货库存位置', + `inventory_balance_id` bigint NOT NULL COMMENT '实际退回库存余额', + `inventory_position_id` bigint NOT NULL COMMENT '实际退回库存位置', + `received_packages` bigint NOT NULL COMMENT '实际退回箱数,不增加原订单箱数', + `received_at` datetime(3) NOT NULL COMMENT '实际退回入账时间', + `created_at` datetime(3) NOT NULL COMMENT '凭据记录时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_return_stock_receipt_no` (`customer_id`,`receipt_no`), + UNIQUE KEY `uk_return_stock_receipt_ledger` (`customer_id`,`inventory_ledger_id`), + KEY `idx_return_stock_receipt_order` (`customer_id`,`order_id`), + KEY `idx_return_stock_receipt_position` (`customer_id`,`inventory_balance_id`,`inventory_position_id`), + CONSTRAINT `chk_return_stock_receipt_packages` CHECK ((`received_packages` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='真实退回入仓及再次发运来源凭据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_security_event_inbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_security_event_inbox` ( + `event_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '跨区安全事件ID', + `event_type` varchar(96) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'IAM安全事件类型', + `payload_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化载荷SHA-256哈希', + `payload_json` json NOT NULL COMMENT '冻结事件载荷JSON', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '消费状态:RECEIVED或PROCESSED', + `result` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '处理结果:APPLIED、STALE、DUPLICATE或DUPLICATE_VERSION', + `received_at` datetime(3) NOT NULL COMMENT '接收时间', + `processed_at` datetime(3) DEFAULT NULL COMMENT '处理完成时间', + PRIMARY KEY (`event_id`), + KEY `idx_security_inbox_type_time` (`event_type`,`received_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外IAM安全事件消费者收件箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_security_projection`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_security_projection` ( + `aggregate_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '聚合类型:USER、TENANT或AUTHORIZATION', + `aggregate_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户或客户聚合ID', + `tenant_id` bigint NOT NULL COMMENT '平台0或客户ID', + `security_status` varchar(24) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前安全状态:ACTIVE或DISABLED', + `permission_version` bigint DEFAULT NULL COMMENT '当前单调权限版本', + `roles_json` json NOT NULL COMMENT 'IAM投影的当前角色快照', + `authorities_json` json NOT NULL COMMENT 'IAM投影的当前海外权限快照', + `aggregate_version` bigint NOT NULL COMMENT '事件聚合单调版本', + `payload_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '当前版本载荷哈希', + `last_event_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '最后应用的事件ID', + `changed_at` datetime(3) NOT NULL COMMENT '国内IAM事实发生时间', + `updated_at` datetime(3) NOT NULL COMMENT '投影更新时间', + PRIMARY KEY (`aggregate_type`,`aggregate_id`), + KEY `idx_security_projection_tenant` (`tenant_id`), + KEY `idx_security_projection_permission` (`aggregate_id`,`permission_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='海外IAM安全状态与权限版本投影'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_us_truck_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_us_truck_order` ( + `id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `order_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `transport_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `origin` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `origin_address` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `destination` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `destination_address` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `container_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `pallet_count` int NOT NULL DEFAULT '1', + `package_count` int NOT NULL DEFAULT '0', + `received_pallet_count` int NOT NULL DEFAULT '0', + `allocated_pallet_count` int NOT NULL DEFAULT '0', + `shipped_pallet_count` int NOT NULL DEFAULT '0', + `total_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000', + `total_volume_cbm` decimal(18,6) NOT NULL DEFAULT '0.000000', + `budget_amount` decimal(18,2) DEFAULT NULL, + `currency` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'USD', + `contact_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `contact_info` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `requested_date` date NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `receipt_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `receipt_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `version` bigint NOT NULL DEFAULT '0', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_us_truck_order_no` (`customer_id`,`order_no`), + UNIQUE KEY `uk_ll_us_truck_order_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_us_truck_order_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_us_truck_order_date` (`customer_id`,`requested_date`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='US domestic trucking customer order'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_us_truck_order_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_us_truck_order_operation` ( + `id` bigint NOT NULL COMMENT '操作记录ID', + `order_id` bigint NOT NULL COMMENT '美国卡车订单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `operation_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '具名操作类型', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作请求内容哈希', + `result_version` bigint NOT NULL COMMENT '操作完成后的订单版本', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_us_truck_operation_key` (`customer_id`,`order_id`,`idempotency_key`), + KEY `idx_ll_us_truck_operation_order` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='美国卡车订单幂等操作账'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_us_truck_order_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_us_truck_order_pallet` ( + `id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sequence_no` int NOT NULL, + `source` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `warehouse_pallet_id` bigint DEFAULT NULL, + `package_count` int DEFAULT NULL, + `received_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_us_truck_order_pallet_no` (`customer_id`,`order_id`,`pallet_no`), + UNIQUE KEY `uk_ll_us_truck_order_pallet_seq` (`customer_id`,`order_id`,`sequence_no`), + KEY `idx_ll_us_truck_order_pallet_list` (`customer_id`,`order_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_us_truck_order_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_us_truck_order_status_history` ( + `id` bigint NOT NULL, + `order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `operation_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'UPDATE' COMMENT '具名操作类型', + `from_status` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `to_status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作幂等键', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + KEY `idx_ll_us_truck_history` (`customer_id`,`order_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Immutable US trucking order status history'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_vehicle`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_vehicle` ( + `id` bigint NOT NULL COMMENT '车辆档案ID', + `plate_number` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '车牌号', + `model` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '车型', + `fuel_consumption_per100_km` decimal(10,2) NOT NULL COMMENT '百公里油耗,单位升', + `mileage_km` bigint NOT NULL COMMENT '当前公里码,单位公里', + `driver_or_dispatch_company` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '司机姓名或外派单位', + `phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '司机或外派单位联系电话', + `region` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '区域:DOMESTIC/OVERSEAS', + `ownership` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '车辆归属:OWNED/DISPATCHED', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '状态:IN_SERVICE/DISPATCHED/MAINTENANCE/INACTIVE/RETURNED', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `record_version` bigint NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人', + `updated_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更新人', + `created_at` datetime(3) NOT NULL COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '更新时间', + `max_pallet_spaces` int DEFAULT NULL COMMENT '最大标准托位,未知时为空', + `max_load_kg` decimal(12,3) DEFAULT NULL COMMENT '最大载重,千克', + `max_volume_cbm` decimal(12,3) DEFAULT NULL COMMENT '可用容积,立方米', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_vehicle_plate` (`plate_number`), + KEY `idx_ll_vehicle_page` (`ownership`,`region`,`status`,`updated_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='平台车辆主数据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_wallet_event_inbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_wallet_event_inbox` ( + `event_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国内Finance资金结果事件ID', + `command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原海外资金指令事件ID', + `payload_hash` varchar(71) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规范化载荷SHA-256,包含sha256:前缀', + `payload_json` json NOT NULL COMMENT '冻结事件信封', + `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'RECEIVED或PROCESSED', + `received_at` datetime(3) NOT NULL COMMENT '接收时间', + `processed_at` datetime(3) DEFAULT NULL COMMENT '处理完成时间', + PRIMARY KEY (`event_id`), + UNIQUE KEY `uk_ll_wallet_command_result` (`command_event_id`), + KEY `idx_ll_wallet_event_status` (`status`,`received_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='跨区客户资金结果幂等收件箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_carton` ( + `id` bigint NOT NULL COMMENT '预报箱主键', + `transfer_order_id` bigint NOT NULL COMMENT '转运单ID', + `transfer_item_id` bigint DEFAULT NULL COMMENT '实际箱内首项SKU明细ID,预报补箱可为空', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '系统生成的一箱一码箱唛', + `customer_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户原箱唛,用于换标现场绑定', + `carton_index` int NOT NULL COMMENT '全单箱序号', + `total_cartons` int NOT NULL COMMENT '首次生成时全单总箱数', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'EXPECTED' COMMENT '箱状态:EXPECTED待实收', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `length_cm` decimal(12,2) DEFAULT NULL COMMENT '箱子实测长度厘米', + `width_cm` decimal(12,2) DEFAULT NULL COMMENT '箱子实测宽度厘米', + `height_cm` decimal(12,2) DEFAULT NULL COMMENT '箱子实测高度厘米', + `gross_weight_kg` decimal(12,2) DEFAULT NULL COMMENT '箱子实测重量千克', + `counted_quantity` bigint DEFAULT NULL COMMENT '箱内SKU实点件数', + `count_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱内清点幂等键', + `count_request_hash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱内清点请求摘要', + `counted_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '箱内清点操作人', + `counted_at` datetime(3) DEFAULT NULL COMMENT '箱内清点完成时间', + `discrepancy_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实收与预报箱数差异原因', + `transfer_pallet_id` bigint DEFAULT NULL COMMENT '签收箱所属转运托盘事实ID', + `sku_items_json` json DEFAULT NULL COMMENT '实收箱内SKU及逐项件数明细', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_transfer_carton_mark` (`customer_id`,`carton_mark`), + UNIQUE KEY `uk_ll_wh_transfer_carton_index` (`transfer_order_id`,`carton_index`), + KEY `idx_ll_wh_transfer_carton_list` (`customer_id`,`transfer_order_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仓储转运系统箱唛预报'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_inventory_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_inventory_allocation` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `transfer_order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `inventory_position_id` bigint NOT NULL, + `inventory_balance_id` bigint NOT NULL, + `inbound_order_id` bigint NOT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `pallet_id` bigint NOT NULL, + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `package_count` int NOT NULL, + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'RESERVED', + `active_position_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `allocated_at` datetime(3) NOT NULL, + `shipped_at` datetime(3) DEFAULT NULL, + `received_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本次来源分配的实际SKU快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_transfer_allocation_position` (`transfer_order_id`,`inventory_position_id`), + UNIQUE KEY `uk_ll_wh_transfer_active_position` (`customer_id`,`active_position_key`), + KEY `idx_ll_wh_transfer_allocation_list` (`customer_id`,`transfer_order_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Exclusive source inventory positions allocated to a warehouse transfer'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_item` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `transfer_order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `sku_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `product_name_zh` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `package_count` int NOT NULL, + `shipping_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `declared_quantity` bigint DEFAULT NULL COMMENT 'SKU鐢虫姤浠舵暟锛岄潪棰勮鎴栧疄鏀剁鏁�', + PRIMARY KEY (`id`), + KEY `idx_ll_wh_transfer_item_list` (`customer_id`,`transfer_order_id`), + KEY `idx_ll_wh_transfer_item_sku` (`customer_id`,`sku_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Frozen warehouse transfer cargo items'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_measurement_photo`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_measurement_photo` ( + `id` bigint NOT NULL COMMENT '测量照片引用ID', + `transfer_order_id` bigint NOT NULL COMMENT '仓储转运单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `file_id` bigint NOT NULL COMMENT '文件服务文件ID', + `file_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件名快照', + `content_type` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件媒体类型快照', + `size_bytes` bigint NOT NULL DEFAULT '0' COMMENT '文件字节数快照', + `uploaded_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'PDA上传操作人', + `uploaded_at` datetime(3) NOT NULL COMMENT '上传时间', + `submitted_at` datetime(3) DEFAULT NULL COMMENT '随测量打托提交时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_transfer_measurement_photo_file` (`customer_id`,`transfer_order_id`,`file_id`), + KEY `idx_ll_transfer_measurement_photo_order` (`customer_id`,`transfer_order_id`,`uploaded_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仓储转运PDA测量现场照片引用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_order` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `transfer_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `inbound_order_id` bigint NOT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `lastleg_order_id` bigint NOT NULL, + `lastleg_order_no` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `operating_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `fba_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '可选FBA目的仓编码', + `delivery_address` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '提货地址或中转仓收货地址', + `pickup_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '提货联系人', + `pickup_contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '提货联系电话', + `package_count` int NOT NULL, + `delivery_method` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '入仓方式', + `estimated_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计入仓时间,库存转运不填写', + `estimated_ship_at` datetime(3) DEFAULT NULL COMMENT '预计发货时间', + `fba_shipment_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '可选FBA货件编号', + `tracking_no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `fba_box_nos` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `need_relabel` tinyint NOT NULL DEFAULT '0', + `relabel_application_id` bigint DEFAULT NULL, + `relabel_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `relabel_completed_at` datetime(3) DEFAULT NULL COMMENT '鍏宠仈璐存爣瀹屾垚鏃堕棿', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING_REVIEW', + `review_decision` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核决定', + `review_remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核备注或驳回原因', + `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核人ID', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '审核时间', + `allocation_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '库存分配幂等键', + `allocation_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '库存分配请求哈希', + `outbound_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '出库幂等键', + `outbound_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '出库请求哈希', + `outbound_at` datetime(3) DEFAULT NULL COMMENT '出库时间', + `measured_at` datetime(3) DEFAULT NULL COMMENT 'PDA测量完成时间', + `actual_ship_at` datetime(3) DEFAULT NULL COMMENT '实际发货时间', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + `label_deadline` datetime(3) DEFAULT NULL COMMENT '换标截止时间', + `relabel_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标联系人', + `relabel_contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标联系电话', + `relabel_charge_amount` decimal(20,2) DEFAULT NULL COMMENT '换标费用CNY', + `relabel_delivery_method` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '换标后派送方式', + `palletize_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'PDA打托幂等键', + `palletize_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'PDA打托请求哈希', + `confirmation_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户测量确认幂等键', + `confirmation_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户测量确认请求哈希', + `customer_confirmed_at` datetime(3) DEFAULT NULL COMMENT '客户确认测量时间', + `destination_type` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的类型:FBA或PRIVATE', + `destination_warehouse_id` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓ID快照', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓名称快照', + `private_destination_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓完整地址', + `private_destination_postal_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓邮编', + `private_destination_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系人', + `private_destination_contact_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '私人仓联系电话', + `destination_binding_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地绑定幂等键', + `destination_binding_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地绑定请求哈希', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_transfer_no` (`customer_id`,`transfer_no`), + UNIQUE KEY `uk_ll_wh_transfer_key` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_wh_transfer_tail_order` (`lastleg_order_id`), + KEY `idx_ll_wh_transfer_list` (`customer_id`,`status`,`created_at`), + KEY `idx_ll_wh_transfer_inbound` (`customer_id`,`inbound_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Customer warehouse transfer order'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_pallet` ( + `id` bigint NOT NULL COMMENT '打托事实ID', + `transfer_order_id` bigint NOT NULL COMMENT '转运单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `sequence_no` int NOT NULL COMMENT '托序号', + `warehouse_pallet_id` bigint DEFAULT NULL COMMENT '鐢熸垚鍚庣殑娴峰?浠撶湡瀹炴墭鐩業D', + `pallet_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鐢熸垚鍚庣殑鐪熷疄鎵樼洏鐮', + `warehouse_location_id` bigint DEFAULT NULL COMMENT '鐢熸垚鍚庣殑鐪熷疄搴撲綅ID', + `warehouse_location_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '真实库位码', + `warehouse_resource_lock_id` bigint DEFAULT NULL COMMENT '鐢熸垚鍚庣殑浠撳偍璧勬簮閿両D', + `carton_count` int NOT NULL COMMENT '本托实收箱数', + `length_cm` decimal(12,2) NOT NULL COMMENT '实测长cm', + `width_cm` decimal(12,2) NOT NULL COMMENT '实测宽cm', + `height_cm` decimal(12,2) NOT NULL COMMENT '实测高cm', + `gross_weight_kg` decimal(12,3) NOT NULL COMMENT '实测毛重kg', + `volume_cbm` decimal(18,6) NOT NULL COMMENT '实测体积CBM', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '打托状态', + `draft_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鑽夌?淇濆瓨骞傜瓑閿', + `draft_request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鑽夌?璇锋眰鎽樿?', + `generate_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鏂版墭鐩樼敓鎴愬箓绛夐敭', + `bind_idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鎵?爜缁戝畾骞傜瓑閿', + `bound_at` datetime(3) DEFAULT NULL COMMENT '鎵?爜纭??缁戝畾鏃堕棿', + `completed_at` datetime(3) DEFAULT NULL COMMENT '鏁村崟鎵撴墭瀹屾垚鏃堕棿', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_transfer_pallet_seq` (`transfer_order_id`,`sequence_no`), + UNIQUE KEY `uk_ll_transfer_pallet_physical` (`customer_id`,`warehouse_pallet_id`), + KEY `idx_ll_transfer_pallet_order` (`customer_id`,`transfer_order_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仓储转运PDA实测打托事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_pallet_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_pallet_item` ( + `id` bigint NOT NULL COMMENT '主键ID', + `transfer_order_id` bigint NOT NULL COMMENT '转运单ID', + `transfer_pallet_id` bigint NOT NULL COMMENT '转运托盘事实ID', + `transfer_item_id` bigint NOT NULL COMMENT '转运申报明细ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `package_count` int NOT NULL COMMENT '本托该SKU实收箱数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_transfer_pallet_item` (`transfer_pallet_id`,`transfer_item_id`), + KEY `idx_ll_transfer_pallet_item_order` (`customer_id`,`transfer_order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仓储转运每托SKU箱数回填'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_receipt` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `transfer_order_id` bigint NOT NULL, + `allocation_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_inventory_position_id` bigint NOT NULL, + `destination_inventory_balance_id` bigint NOT NULL, + `destination_inventory_position_id` bigint NOT NULL, + `package_count` int NOT NULL, + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `inventory_operation_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `received_at` datetime(3) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_transfer_receipt_source` (`transfer_order_id`,`source_inventory_position_id`), + UNIQUE KEY `uk_ll_wh_transfer_receipt_key` (`customer_id`,`idempotency_key`), + UNIQUE KEY `uk_ll_wh_transfer_receipt_operation` (`customer_id`,`inventory_operation_key`), + KEY `idx_ll_wh_transfer_receipt_list` (`customer_id`,`transfer_order_id`,`received_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Idempotent destination stock receipt for one transfer source position'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_receipt_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_receipt_command` ( + `id` bigint NOT NULL COMMENT '收货命令主键', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户标识', + `transfer_order_id` bigint NOT NULL COMMENT '转运单标识', + `source_inventory_position_id` bigint NOT NULL COMMENT '本次收货来源库存位置', + `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始收货幂等键', + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '完整原始收货请求摘要', + `request_json` json NOT NULL COMMENT '完整原始收货请求快照', + `target_warehouse_id` bigint NOT NULL COMMENT '实际目标海外收货仓', + `target_pallet_id` bigint NOT NULL COMMENT '目标实物托盘', + `target_location_id` bigint NOT NULL COMMENT '目标实际库位', + `target_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '共享目标资源绑定摘要', + `target_json` json NOT NULL COMMENT '权威目标仓托盘库位及目的仓快照', + `reservation_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '同转运同目标托盘共享资源占用键', + `resource_lock_id` bigint DEFAULT NULL COMMENT '已确认有效的海外资源锁标识', + `status` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令状态PREPARED准备完成RESERVED资源占用COMPLETED收货完成', + `created_at` datetime(3) NOT NULL COMMENT '命令创建时间', + `updated_at` datetime(3) NOT NULL COMMENT '命令最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_receipt_cmd_source` (`transfer_order_id`,`source_inventory_position_id`), + UNIQUE KEY `uk_ll_wh_receipt_cmd_key` (`customer_id`,`idempotency_key`), + KEY `idx_ll_wh_receipt_cmd_target` (`customer_id`,`transfer_order_id`,`target_pallet_id`), + CONSTRAINT `ck_ll_wh_receipt_cmd_status` CHECK ((`status` in (_utf8mb4'PREPARED',_utf8mb4'RESERVED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转运逐来源收货原请求与共享目标资源占用命令'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_relabel_binding`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_relabel_binding` ( + `id` bigint NOT NULL COMMENT '主键ID', + `transfer_order_id` bigint NOT NULL COMMENT '转运单ID', + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID', + `operation_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换标类型', + `customer_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户原箱唛', + `original_sku` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '旧SKU', + `new_sku` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '新SKU', + `quantity` int NOT NULL COMMENT '换标件数', + `fba_carton_mark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '新FBA箱唛', + `destination_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'FBA目的仓', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `source_allocation_id` bigint DEFAULT NULL COMMENT '已有库存转运的原始来源分配ID', + `relabel_item_id` bigint DEFAULT NULL COMMENT '本票关联换标明细ID', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_transfer_relabel_mark` (`transfer_order_id`,`customer_carton_mark`), + KEY `idx_ll_transfer_relabel_order` (`customer_id`,`transfer_order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仓储转运换标预绑定明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `ll_warehouse_transfer_source_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `ll_warehouse_transfer_source_order` ( + `id` bigint NOT NULL COMMENT 'Snowflake ID', + `transfer_order_id` bigint NOT NULL, + `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `source_lastleg_order_id` bigint NOT NULL, + `source_lastleg_order_no` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `inbound_order_id` bigint NOT NULL, + `inbound_code` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `tenant_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BAIYUE' COMMENT 'SaaS租户标识,当前单租户固定为BAIYUE', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ll_wh_transfer_source` (`transfer_order_id`,`source_lastleg_order_id`), + KEY `idx_ll_wh_transfer_source_list` (`customer_id`,`transfer_order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Selected historical customer orders and inbound bindings'; +/*!40101 SET character_set_client = @saved_cs_client */; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `baiyue_firstleg` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; + +USE `baiyue_firstleg`; +DROP TABLE IF EXISTS `event_delivery_attempt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `event_delivery_attempt` ( + `attempt_id` varchar(36) NOT NULL COMMENT '本次投递租约UUID和审计主键', + `service_name` varchar(32) NOT NULL COMMENT '本库所属生产服务', + `event_type` varchar(96) NOT NULL COMMENT '白名单业务事件类型', + `entry_id` varchar(128) NOT NULL COMMENT '生产者发件箱主键', + `event_id` varchar(128) DEFAULT NULL COMMENT '合法原事件UUID或ULID;格式错误时为空', + `target_name` varchar(64) NOT NULL COMMENT '固定目标业务服务', + `started_at` datetime(3) NOT NULL COMMENT '领取及审计事务提交前的开始时间', + `finished_at` datetime(3) DEFAULT NULL COMMENT '尝试完成或租约过期恢复时间', + `duration_ms` bigint DEFAULT NULL COMMENT '尝试耗时毫秒', + `outcome` varchar(24) NOT NULL COMMENT 'STARTED/APPLIED/DUPLICATE/STALE/RETRY/DEAD/LEASE_EXPIRED', + `error_code` varchar(64) DEFAULT NULL COMMENT '有限错误类别或HTTP状态;不含载荷与令牌', + `next_retry_at` datetime(3) DEFAULT NULL COMMENT '本次失败后下次计划投递时间', + PRIMARY KEY (`attempt_id`), + KEY `idx_delivery_attempt_entry` (`service_name`,`entry_id`,`started_at`), + KEY `idx_delivery_attempt_outcome` (`outcome`,`started_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='本服务业务事件逐次投递审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_assignment_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_assignment_history` ( + `id` bigint unsigned NOT NULL COMMENT '指派历史ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `task_id` bigint unsigned NOT NULL COMMENT '所属履约任务ID', + `previous_assignee_id` bigint unsigned DEFAULT NULL COMMENT '原负责人ID', + `assignee_id` bigint unsigned NOT NULL COMMENT '新负责人ID', + `assignee_name` varchar(64) NOT NULL COMMENT '新负责人名称快照', + `reason` varchar(500) DEFAULT NULL COMMENT '指派或改派原因', + `operator_id` bigint unsigned NOT NULL COMMENT '执行指派的操作人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '指派发生时间', + PRIMARY KEY (`id`), + KEY `idx_assignment_task_time` (`tenant_id`,`task_id`,`created_at`), + KEY `fk_assignment_task` (`task_id`), + CONSTRAINT `fk_assignment_task` FOREIGN KEY (`task_id`) REFERENCES `fl_fulfillment_task` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='头程任务指派历史表:不可变记录每次负责人变更及原因,用于追踪和审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_fba_rate`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_fba_rate` ( + `id` bigint unsigned NOT NULL COMMENT '船司FBA价格ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '平台价格作用域ID,船司价格固定为0', + `price_book_version_id` bigint unsigned DEFAULT NULL COMMENT '整表价格版本ID;历史兼容价格可为空', + `rate_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '平台公共价格编码', + `rate_version` int unsigned NOT NULL COMMENT '价格版本号', + `origin_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '确认前可为空;确认后绑定平台公共起运仓逻辑ID', + `origin_warehouse_code` varchar(64) DEFAULT NULL COMMENT '起运仓稳定编码', + `origin_warehouse_name` varchar(128) NOT NULL COMMENT '起运仓名称快照', + `business_type` varchar(32) NOT NULL COMMENT '业务或计费类型', + `channel_code` varchar(64) DEFAULT NULL COMMENT '渠道编码', + `price_model` varchar(32) NOT NULL DEFAULT 'FBA_WAREHOUSE_RATE' COMMENT '价格模型', + `carrier_id` bigint unsigned DEFAULT NULL COMMENT '船司逻辑ID', + `carrier_name` varchar(128) DEFAULT NULL COMMENT '历史承运商名称;渠道价格可为空', + `destination_type` varchar(16) DEFAULT NULL COMMENT '目的地类型:FBA或OVERSEAS;REGION_WEIGHT_TIER区域阶梯行为空', + `destination_code` varchar(32) DEFAULT NULL COMMENT 'FBA目的仓编码;区域阶梯模型为空', + `destination_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '平台海外仓稳定ID;不存环境专属ID', + `destination_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `region_code` varchar(16) DEFAULT NULL COMMENT '区域阶梯模型区域编码', + `pricing_tax_mode` varchar(16) DEFAULT NULL COMMENT '报价包税维度;独立于订单tax_mode', + `weight_from_kg` decimal(18,6) DEFAULT NULL COMMENT '区域阶梯起始计费重量KG', + `charge_unit` varchar(16) NOT NULL COMMENT '计费单位:KG或CBM', + `unit_price` decimal(18,6) NOT NULL COMMENT '基础单价', + `currency` char(3) NOT NULL COMMENT '币种', + `additional_fee` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '固定附加费', + `source_sheet_name` varchar(128) DEFAULT NULL COMMENT '原始Excel Sheet', + `source_row_number` int unsigned DEFAULT NULL COMMENT '原始Excel行号', + `source_destination_text` varchar(1000) DEFAULT NULL COMMENT '原始组合仓库或区域文本', + `effective_from` datetime(3) NOT NULL COMMENT '生效开始时间', + `effective_to` datetime(3) DEFAULT NULL COMMENT '生效结束时间', + `status` varchar(24) NOT NULL DEFAULT 'ACTIVE' COMMENT '价格状态:PENDING_CONFIRMATION、ACTIVE或SUPERSEDED', + `remark` varchar(500) DEFAULT NULL COMMENT '价格备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fba_rate_version` (`tenant_id`,`rate_code`,`rate_version`), + KEY `idx_fba_rate_unique_match` (`tenant_id`,`origin_warehouse_id`,`business_type`,`channel_code`,`carrier_id`,`destination_code`,`charge_unit`,`status`,`effective_from`,`effective_to`), + KEY `idx_fba_rate_match` (`tenant_id`,`origin_warehouse_id`,`business_type`,`channel_code`,`carrier_id`,`destination_type`,`destination_code`,`destination_warehouse_id`,`charge_unit`,`status`,`effective_from`,`effective_to`), + KEY `idx_fba_rate_book` (`price_book_version_id`,`channel_code`,`origin_warehouse_id`,`price_model`,`status`), + KEY `idx_fba_rate_destination` (`price_book_version_id`,`channel_code`,`origin_warehouse_id`,`destination_type`,`destination_warehouse_id`,`destination_code`), + KEY `idx_fba_rate_region` (`price_book_version_id`,`channel_code`,`origin_warehouse_id`,`region_code`,`weight_from_kg`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船司FBA目的仓价格版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_exception_fact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_exception_fact` ( + `id` bigint unsigned NOT NULL COMMENT '船节点异常事实ID', + `query_id` bigint unsigned NOT NULL COMMENT '所属查询任务ID', + `event_key` varchar(192) NOT NULL COMMENT '供应商编码与供应商事件ID组成的幂等键', + `provider_code` varchar(32) NOT NULL COMMENT '供应商编码', + `provider_event_id` varchar(128) NOT NULL COMMENT '供应商稳定事件ID', + `provider_status` varchar(128) NOT NULL COMMENT '供应商原始异常状态', + `exception_code` varchar(32) NOT NULL COMMENT '平台异常编码', + `active` tinyint(1) NOT NULL COMMENT '1异常发生;0异常解除', + `observed_at` datetime(3) NOT NULL COMMENT '供应商观测时间', + `location_code` varchar(32) DEFAULT NULL COMMENT '地点编码', + `location_name` varchar(128) DEFAULT NULL COMMENT '地点名称', + `source_reference` varchar(500) DEFAULT NULL COMMENT '可审计来源引用', + `raw_payload_hash` char(64) NOT NULL COMMENT '原始响应SHA-256', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '事实入库时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carrier_schedule_exception_event` (`query_id`,`event_key`), + KEY `idx_carrier_schedule_exception_timeline` (`query_id`,`observed_at`,`id`), + CONSTRAINT `fk_carrier_schedule_exception_query` FOREIGN KEY (`query_id`) REFERENCES `fl_carrier_schedule_query` (`id`), + CONSTRAINT `chk_carrier_schedule_exception_active` CHECK ((`active` in (0,1))), + CONSTRAINT `chk_carrier_schedule_exception_code` CHECK ((`exception_code` in (_utf8mb4'CUSTOMS_HOLD',_utf8mb4'TERMINAL_HOLD',_utf8mb4'DOCUMENT_HOLD',_utf8mb4'UNKNOWN_HOLD'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船节点异常发生与解除不可变事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_node_fact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_node_fact` ( + `id` bigint unsigned NOT NULL COMMENT '标准船节点事实ID', + `query_id` bigint unsigned NOT NULL COMMENT '所属查询任务ID', + `event_key` varchar(192) NOT NULL COMMENT '供应商编码与供应商事件ID组成的幂等键', + `provider_code` varchar(32) NOT NULL COMMENT '轨迹供应商编码', + `provider_event_id` varchar(128) NOT NULL COMMENT '供应商稳定事件ID', + `provider_node_code` varchar(64) NOT NULL COMMENT '供应商原始节点编码', + `standard_node` varchar(32) NOT NULL COMMENT '标准船节点', + `node_sequence` int unsigned NOT NULL COMMENT '标准节点单调序号', + `observed_at` datetime(3) NOT NULL COMMENT '供应商观测时间', + `estimated_at` datetime(3) DEFAULT NULL COMMENT '供应商预计发生时间', + `actual_at` datetime(3) DEFAULT NULL COMMENT '供应商确认实际发生时间', + `location_code` varchar(32) DEFAULT NULL COMMENT '节点地点编码', + `location_name` varchar(128) DEFAULT NULL COMMENT '节点地点名称', + `source_reference` varchar(500) DEFAULT NULL COMMENT '可审计来源引用', + `raw_payload_hash` char(64) NOT NULL COMMENT '原始响应SHA-256;不保存敏感原文', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '事实入库时间', + `container_booking_id` bigint unsigned NOT NULL COMMENT '所属真实货柜ID', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carrier_schedule_node_event` (`query_id`,`event_key`), + KEY `idx_carrier_schedule_node_timeline` (`query_id`,`node_sequence`,`observed_at`,`id`), + CONSTRAINT `fk_carrier_schedule_node_query` FOREIGN KEY (`query_id`) REFERENCES `fl_carrier_schedule_query` (`id`), + CONSTRAINT `chk_carrier_schedule_node_sequence` CHECK ((`node_sequence` in (10,20,30,40,50,60,70,80,90,100))), + CONSTRAINT `chk_carrier_schedule_node_standard` CHECK ((`standard_node` in (_utf8mb4'DEPARTED_WAREHOUSE',_utf8mb4'AT_ORIGIN_PORT',_utf8mb4'LOADED_ON_VESSEL',_utf8mb4'DEPARTED_ORIGIN_PORT',_utf8mb4'IN_TRANSIT',_utf8mb4'ARRIVED_DESTINATION_PORT',_utf8mb4'DISCHARGED_FROM_VESSEL',_utf8mb4'PICKUP_READY',_utf8mb4'PICKED_UP',_utf8mb4'EMPTY_RETURNED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='供应商标准船节点不可变事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_query`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_query` ( + `id` bigint unsigned NOT NULL COMMENT '船司官网查询任务ID', + `query_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船司官网查询任务编号', + `customer_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '关联海运订舱ID', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '指定查询的柜次ID;整票订舱查询时为空', + `container_scope_id` bigint unsigned GENERATED ALWAYS AS (coalesce(`container_booking_id`,0)) STORED COMMENT '柜次唯一作用域计算值;整票订舱查询固定为0', + `carrier_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船公司编码:MATSON美森、SML森罗、ZIM以星、COSCO中远海运、EMC长荣、HEDE合德', + `tracking_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '官网跟踪类型:BOOKING_NO订舱号、BILL_OF_LADING提单号、CONTAINER_NO箱号', + `tracking_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '提交至船公司官网的跟踪号码', + `official_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船公司官网查询入口地址快照', + `access_mode` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '官网访问方式:PUBLIC_FORM公开表单、HCAPTCHA人机校验、DYNAMIC_IFRAME动态页面', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '任务状态:READY可查询、MANUAL_REQUIRED需人工处理、SUCCESS已取得有效结果', + `window_started_at` datetime(3) NOT NULL COMMENT '当前三天查询窗口起始时间', + `attempt_count` int unsigned NOT NULL DEFAULT '0' COMMENT '当前查询窗口已执行次数;最多3次', + `next_allowed_at` datetime(3) NOT NULL COMMENT '频控规则允许的下次查询时间', + `last_attempt_at` datetime(3) DEFAULT NULL COMMENT '最近一次查询尝试时间', + `last_success_at` datetime(3) DEFAULT NULL COMMENT '最近一次取得有效结果时间', + `source_updated_at` datetime(3) DEFAULT NULL COMMENT '船公司官网展示的结果更新时间', + `expires_at` datetime(3) DEFAULT NULL COMMENT '当前最近有效结果过期时间;到期后仍保留但标记过期', + `result_port_schedule_id` bigint unsigned DEFAULT NULL COMMENT '最近有效结果对应的船期记录ID', + `last_attempt_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最近查询尝试状态快照', + `manual_reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '需要人工查询或录入的原因', + `last_error_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最近查询失败错误码', + `last_error_message` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最近查询失败错误说明', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '平台内部备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '任务创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改操作人姓名快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '任务最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `consecutive_failures` int unsigned NOT NULL DEFAULT '0' COMMENT '当前正常查询槽位内的连续技术失败次数', + `latest_node_observed_at` datetime(3) DEFAULT NULL COMMENT '最近实际标准节点发生时间', + `latest_standard_node` varchar(32) DEFAULT NULL COMMENT '最近实际标准船节点;预计事实不推进', + `lease_owner` varchar(64) DEFAULT NULL COMMENT '当前调度租约持有者', + `lease_until` datetime(3) DEFAULT NULL COMMENT '当前调度租约过期时间', + `stop_reason` varchar(500) DEFAULT NULL COMMENT '任务停止原因', + `stopped_at` datetime(3) DEFAULT NULL COMMENT '任务停止时间', + `trigger_source` varchar(32) NOT NULL DEFAULT 'MANUAL' COMMENT '任务触发来源:OUTBOUND_CONFIRM或MANUAL', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carrier_schedule_query_no` (`query_no`), + UNIQUE KEY `uk_carrier_schedule_query_scope` (`customer_id`,`ocean_booking_id`,`container_scope_id`,`carrier_code`,`tracking_type`,`tracking_no`), + KEY `idx_carrier_schedule_query_due` (`status`,`next_allowed_at`,`id`), + KEY `idx_carrier_schedule_query_customer` (`customer_id`,`updated_at`,`id`), + KEY `idx_carrier_schedule_query_expiry` (`expires_at`,`id`), + KEY `fk_carrier_schedule_query_booking` (`ocean_booking_id`), + KEY `fk_carrier_schedule_query_container` (`container_booking_id`), + KEY `fk_carrier_schedule_query_result` (`result_port_schedule_id`), + CONSTRAINT `fk_carrier_schedule_query_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `fk_carrier_schedule_query_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `fk_carrier_schedule_query_result` FOREIGN KEY (`result_port_schedule_id`) REFERENCES `fl_port_schedule` (`id`), + CONSTRAINT `chk_carrier_schedule_query_attempt` CHECK ((`attempt_count` between 0 and 3)), + CONSTRAINT `chk_carrier_schedule_query_customer` CHECK ((`customer_id` > 0)), + CONSTRAINT `chk_carrier_schedule_query_tracking` CHECK ((`tracking_type` in (_utf8mb4'BOOKING_NO',_utf8mb4'BILL_OF_LADING',_utf8mb4'CONTAINER_NO'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='六家船公司官网查询任务与三天窗口频控'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_query_attempt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_query_attempt` ( + `id` bigint unsigned NOT NULL COMMENT '船司官网查询尝试ID', + `query_id` bigint unsigned NOT NULL COMMENT '所属船司官网查询任务ID', + `window_attempt_no` int unsigned NOT NULL COMMENT '当前三天窗口内的尝试序号;取值1至3', + `carrier_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '本次尝试的船公司编码快照', + `access_mode` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '本次尝试的官网访问方式快照', + `official_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '本次尝试使用的官网地址快照', + `attempt_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '尝试结果:MANUAL_REQUIRED需人工处理、SUCCESS成功、FAILED失败', + `coverage_gap` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否存在自动化覆盖缺口:0否、1是', + `coverage_gap_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '自动化覆盖缺口编码', + `manual_reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '转人工处理原因', + `error_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '查询失败错误码', + `error_message` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '查询失败错误说明', + `operator_id` bigint unsigned NOT NULL COMMENT '执行本次尝试的操作人ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '执行操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '尝试记录创建时间', + PRIMARY KEY (`id`), + KEY `idx_carrier_schedule_attempt_query` (`query_id`,`created_at`,`id`), + CONSTRAINT `fk_carrier_schedule_attempt_query` FOREIGN KEY (`query_id`) REFERENCES `fl_carrier_schedule_query` (`id`), + CONSTRAINT `chk_carrier_schedule_attempt_no` CHECK ((`window_attempt_no` between 1 and 3)), + CONSTRAINT `chk_carrier_schedule_attempt_status` CHECK ((`attempt_status` in (_utf8mb4'MANUAL_REQUIRED',_utf8mb4'SUCCESS',_utf8mb4'FAILED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船司官网查询尝试不可变审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_query_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_query_history` ( + `id` bigint unsigned NOT NULL COMMENT '船司查询任务历史ID', + `query_id` bigint unsigned NOT NULL COMMENT '所属船司官网查询任务ID', + `action` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '历史动作:CREATE创建、ATTEMPT执行查询、MANUAL_RESULT录入人工结果', + `from_version` int unsigned DEFAULT NULL COMMENT '变更前任务版本;创建时为空', + `to_version` int unsigned NOT NULL COMMENT '变更后任务版本', + `reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作原因或说明', + `before_snapshot` json DEFAULT NULL COMMENT '变更前任务数据快照;创建时为空', + `after_snapshot` json NOT NULL COMMENT '变更后任务数据快照', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '历史记录创建时间', + PRIMARY KEY (`id`), + KEY `idx_carrier_schedule_history_query` (`query_id`,`created_at`,`id`), + CONSTRAINT `fk_carrier_schedule_history_query` FOREIGN KEY (`query_id`) REFERENCES `fl_carrier_schedule_query` (`id`), + CONSTRAINT `chk_carrier_schedule_history_action` CHECK ((`action` in (_utf8mb4'CREATE',_utf8mb4'ATTEMPT',_utf8mb4'MANUAL_RESULT'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船司查询任务不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_carrier_schedule_query_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_carrier_schedule_query_operation` ( + `id` bigint unsigned NOT NULL COMMENT '船司查询写操作幂等记录ID', + `query_id` bigint unsigned DEFAULT NULL COMMENT '关联查询任务ID;创建任务落库前允许为空', + `operator_id` bigint unsigned NOT NULL COMMENT '发起写操作的平台操作人ID', + `operation` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '幂等写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端写操作幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要;用于识别同键不同请求', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '处理状态:PROCESSING处理中、SUCCESS成功', + `result_json` json DEFAULT NULL COMMENT '成功结果JSON快照;供幂等重放返回', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等记录创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '写操作成功完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carrier_schedule_operation` (`operator_id`,`idempotency_key`), + KEY `idx_carrier_schedule_operation_query` (`query_id`,`created_at`,`id`), + CONSTRAINT `fk_carrier_schedule_operation_query` FOREIGN KEY (`query_id`) REFERENCES `fl_carrier_schedule_query` (`id`), + CONSTRAINT `chk_carrier_schedule_operation_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船司查询写操作幂等与请求摘要'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_coload_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_coload_command` ( + `id` bigint unsigned NOT NULL COMMENT '幂等命令ID', + `actor_id` bigint unsigned NOT NULL COMMENT '平台或内部操作人ID', + `action_type` varchar(16) NOT NULL, + `idempotency_key` varchar(128) NOT NULL, + `request_hash` char(64) NOT NULL, + `command_status` varchar(16) NOT NULL COMMENT 'PROCESSING、SUCCESS', + `result_group_id` bigint unsigned DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `completed_at` datetime(3) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_coload_command` (`actor_id`,`action_type`,`idempotency_key`), + KEY `fk_coload_command_group` (`result_group_id`), + CONSTRAINT `fk_coload_command_group` FOREIGN KEY (`result_group_id`) REFERENCES `fl_coload_group` (`id`), + CONSTRAINT `chk_coload_command_status` CHECK ((`command_status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='同柜不可拆组幂等写命令'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_coload_group`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_coload_group` ( + `id` bigint unsigned NOT NULL COMMENT '同柜不可拆组ID', + `group_no` varchar(40) NOT NULL COMMENT '稳定组号CLG-{id}', + `group_status` varchar(16) NOT NULL COMMENT 'ACTIVE、LOCKED、CONSUMED、CANCELLED', + `warehouse_id` bigint unsigned NOT NULL COMMENT '国内收货仓ID快照', + `channel_code` varchar(64) NOT NULL COMMENT '物流渠道编码快照', + `locked_plan_id` bigint unsigned DEFAULT NULL COMMENT 'LOCKED/CONSUMED绑定装柜计划ID', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观版本', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `locked_by` bigint unsigned DEFAULT NULL, + `locked_by_name` varchar(64) DEFAULT NULL, + `locked_at` datetime(3) DEFAULT NULL, + `consumed_by` bigint unsigned DEFAULT NULL, + `consumed_by_name` varchar(64) DEFAULT NULL, + `consumed_at` datetime(3) DEFAULT NULL, + `cancelled_by` bigint unsigned DEFAULT NULL, + `cancelled_by_name` varchar(64) DEFAULT NULL, + `cancelled_at` datetime(3) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_coload_group_no` (`group_no`), + KEY `idx_coload_group_status` (`group_status`,`updated_at`,`id`), + KEY `idx_coload_group_plan` (`locked_plan_id`,`group_status`), + CONSTRAINT `fk_coload_group_plan` FOREIGN KEY (`locked_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `chk_coload_group_lock` CHECK ((((`group_status` in (_utf8mb4'ACTIVE',_utf8mb4'CANCELLED')) and (`locked_plan_id` is null)) or ((`group_status` in (_utf8mb4'LOCKED',_utf8mb4'CONSUMED')) and (`locked_plan_id` is not null)))), + CONSTRAINT `chk_coload_group_status` CHECK ((`group_status` in (_utf8mb4'ACTIVE',_utf8mb4'LOCKED',_utf8mb4'CONSUMED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='同柜且不可拆业务组聚合根'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_coload_group_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_coload_group_history` ( + `id` bigint unsigned NOT NULL COMMENT '状态历史ID', + `group_id` bigint unsigned NOT NULL, + `action_type` varchar(16) NOT NULL COMMENT 'CREATE、CANCEL、LOCK、UNLOCK、CONSUME', + `from_status` varchar(16) DEFAULT NULL, + `to_status` varchar(16) NOT NULL, + `plan_id` bigint unsigned DEFAULT NULL, + `operation_id` varchar(128) NOT NULL COMMENT '稳定幂等操作ID', + `remark` varchar(500) DEFAULT NULL, + `operator_id` bigint unsigned NOT NULL, + `operator_name` varchar(64) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_coload_history_operation` (`group_id`,`action_type`,`operation_id`), + KEY `idx_coload_history_group` (`group_id`,`created_at`,`id`), + CONSTRAINT `fk_coload_history_group` FOREIGN KEY (`group_id`) REFERENCES `fl_coload_group` (`id`), + CONSTRAINT `chk_coload_history_action` CHECK ((`action_type` in (_utf8mb4'CREATE',_utf8mb4'CANCEL',_utf8mb4'LOCK',_utf8mb4'UNLOCK',_utf8mb4'CONSUME'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='同柜不可拆组不可变状态历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_coload_group_member`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_coload_group_member` ( + `id` bigint unsigned NOT NULL COMMENT '组成员ID', + `group_id` bigint unsigned NOT NULL COMMENT '同柜不可拆组ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '成员客户ID;允许跨客户成组', + `order_id` bigint unsigned NOT NULL COMMENT '订单ID', + `inbound_id` bigint unsigned NOT NULL COMMENT '创建时权威入库单ID', + `full_package_count` int unsigned NOT NULL COMMENT '必须整组分配的满箱数快照', + `active_flag` tinyint unsigned DEFAULT '1' COMMENT '当前约束唯一标识;取消或消费后置NULL', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `closed_at` datetime(3) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_coload_group_member` (`group_id`,`inbound_id`), + UNIQUE KEY `uk_coload_active_inbound` (`tenant_id`,`inbound_id`,`active_flag`), + KEY `idx_coload_member_order` (`order_id`,`created_at`,`group_id`), + KEY `fk_coload_member_inbound` (`inbound_id`), + CONSTRAINT `fk_coload_member_group` FOREIGN KEY (`group_id`) REFERENCES `fl_coload_group` (`id`), + CONSTRAINT `fk_coload_member_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_coload_member_active` CHECK (((`active_flag` is null) or (`active_flag` = 1))), + CONSTRAINT `chk_coload_member_packages` CHECK ((`full_package_count` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='同柜不可拆组成员与满箱数快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_consumed_event`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_consumed_event` ( + `event_id` bigint unsigned NOT NULL COMMENT '已消费领域事件ID,与生产端Outbox事件ID一致', + `event_type` varchar(64) NOT NULL COMMENT '已消费事件类型', + `consumed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '首次成功消费时间', + PRIMARY KEY (`event_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='头程消息消费幂等表:记录已处理事件并按事件ID去重,防止RocketMQ重复投递造成重复建单;不是消息发布表'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_booking`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_booking` ( + `id` bigint unsigned NOT NULL COMMENT '货柜预订ID(雪花ID)', + `booking_no` varchar(40) NOT NULL COMMENT '平台唯一货柜预订单号', + `container_no` varchar(64) DEFAULT NULL COMMENT '集装箱号;确认前允许修订', + `cabinet_no` varchar(64) NOT NULL COMMENT '平台唯一内部柜号', + `channel_code` varchar(64) DEFAULT NULL COMMENT '订舱渠道编码快照', + `channel_name` varchar(128) DEFAULT NULL COMMENT '订舱渠道名称快照', + `ocean_booking_id` bigint unsigned DEFAULT NULL COMMENT '来源订舱ID', + `ocean_booking_requirement_id` bigint unsigned DEFAULT NULL COMMENT '来源订舱箱型需求ID', + `warehouse_id` bigint unsigned NOT NULL COMMENT '装柜仓库ID;平台公共资源', + `warehouse_name` varchar(128) NOT NULL COMMENT '装柜仓库名称快照', + `bill_of_lading_no` varchar(128) DEFAULT NULL COMMENT '提单号', + `vessel_name` varchar(128) DEFAULT NULL COMMENT '船名快照', + `voyage_no` varchar(64) DEFAULT NULL COMMENT '航次;确认前允许修订', + `container_type` varchar(32) NOT NULL COMMENT '箱型,例如20GP、40GP、40HQ', + `shipping_company_id` bigint unsigned DEFAULT NULL COMMENT '船司ID快照', + `shipping_company_name` varchar(128) DEFAULT NULL COMMENT '船司名称快照', + `departure_port_code` varchar(32) DEFAULT NULL COMMENT '起运港编码快照', + `departure_port_name` varchar(128) DEFAULT NULL COMMENT '起运港名称快照', + `destination_port_code` varchar(32) DEFAULT NULL COMMENT '目的港编码快照', + `destination_port_name` varchar(128) DEFAULT NULL COMMENT '目的港名称快照', + `destination_warehouse_code` varchar(64) DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `capacity_cbm` decimal(18,4) DEFAULT NULL COMMENT '货柜容量m3', + `max_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '货柜最大承重kg', + `terminal_trucking_company` varchar(128) DEFAULT NULL COMMENT '码头拖车公司', + `loading_at` datetime(3) DEFAULT NULL COMMENT '计划或实际装柜时间', + `estimated_sailing_at` datetime(3) DEFAULT NULL COMMENT '预计开船时间', + `actual_sailing_at` datetime(3) DEFAULT NULL COMMENT '实际开船时间', + `estimated_port_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到港时间', + `actual_port_arrival_at` datetime(3) DEFAULT NULL COMMENT '实际到港时间', + `estimated_warehouse_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到仓时间', + `actual_warehouse_arrival_at` datetime(3) DEFAULT NULL COMMENT '实际到仓时间', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_by_name` varchar(64) DEFAULT NULL COMMENT '最后修改人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '货柜资料最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `source_type` varchar(24) NOT NULL DEFAULT 'SIMULATION', + `record_status` varchar(16) NOT NULL DEFAULT 'ACTIVE', + `merged_into_container_booking_id` bigint unsigned DEFAULT NULL, + `customer_id` bigint unsigned DEFAULT NULL, + `customer_name` varchar(128) DEFAULT NULL, + `terminal_trucking_company_id` bigint unsigned DEFAULT NULL, + `unloading_completed_at` datetime(3) DEFAULT NULL, + `unloading_photo_uploaded_at` datetime(3) DEFAULT NULL, + `estimated_empty_reported_at` datetime(3) DEFAULT NULL, + `actual_empty_reported_at` datetime(3) DEFAULT NULL, + `empty_report_source_version` bigint DEFAULT NULL, + `channel_group_code` varchar(64) DEFAULT NULL COMMENT '模拟柜计划渠道分组;关联真实订舱后继续保留', + `pickup_code` varchar(64) DEFAULT NULL COMMENT 'PU数字码;按字符串保存以保留前导零', + `pickup_code_updated_by` bigint unsigned DEFAULT NULL COMMENT 'PU码最后填写人ID', + `pickup_code_updated_by_name` varchar(64) DEFAULT NULL COMMENT 'PU码最后填写人名称快照', + `pickup_code_updated_at` datetime(3) DEFAULT NULL COMMENT 'PU码最后填写时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_container_booking_no` (`booking_no`), + UNIQUE KEY `uk_container_booking_cabinet` (`cabinet_no`), + KEY `idx_container_booking_container` (`container_no`), + KEY `idx_container_booking_warehouse` (`warehouse_id`,`updated_at`,`id`), + KEY `idx_container_booking_voyage` (`voyage_no`,`updated_at`), + CONSTRAINT `chk_container_booking_capacity` CHECK (((`capacity_cbm` is null) or (`capacity_cbm` > 0))), + CONSTRAINT `chk_container_booking_weight` CHECK (((`max_weight_kg` is null) or (`max_weight_kg` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台货柜预订资料;预装状态唯一来源为装柜计划'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_document` ( + `id` bigint unsigned NOT NULL COMMENT '货柜文件关联ID(雪花ID)', + `container_booking_id` bigint unsigned NOT NULL COMMENT '货柜预订ID', + `document_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文件类型:CUSTOMS_CLEARANCE清关文件、DELIVERY_ORDER提货单、PICKUP_ORDER取货单', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件ID,不建立跨库外键', + `file_name` varchar(255) NOT NULL COMMENT '文件名称快照', + `file_hash` varchar(64) DEFAULT NULL, + `file_url` varchar(1000) DEFAULT NULL COMMENT '文件访问地址快照', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传操作人ID', + `uploaded_by_name` varchar(64) DEFAULT NULL COMMENT '上传操作人名称快照', + `completed_by` bigint unsigned DEFAULT NULL, + `completed_by_name` varchar(64) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '货柜文件关联最后更新时间', + `completed_at` datetime(3) DEFAULT NULL, + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_container_document_type` (`container_booking_id`,`document_type`), + KEY `idx_container_document_file` (`file_id`), + CONSTRAINT `fk_container_document_booking` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_container_document_type` CHECK ((`document_type` in (_utf8mb4'DESTINATION_CLEARANCE',_utf8mb4'CUSTOMS_DECLARATION',_utf8mb4'DELIVERY_ORDER',_utf8mb4'PICKUP_ORDER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台货柜清关、DO与PU文件关联'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_event_inbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_event_inbox` ( + `event_id` varchar(64) NOT NULL COMMENT '跨区事件全局唯一ID', + `event_type` varchar(64) NOT NULL COMMENT '事件类型', + `event_version` int unsigned NOT NULL COMMENT '事件契约版本', + `aggregate_id` varchar(64) NOT NULL COMMENT '货柜聚合ID', + `aggregate_version` bigint unsigned NOT NULL COMMENT '货柜聚合版本', + `payload_hash` varchar(80) NOT NULL COMMENT '规范化负载SHA-256摘要', + `payload_json` json NOT NULL COMMENT '原始事件负载', + `status` varchar(16) NOT NULL COMMENT 'RECEIVED或PROCESSED', + `received_at` datetime(3) NOT NULL COMMENT '接收时间(UTC)', + `processed_at` datetime(3) DEFAULT NULL COMMENT '处理完成时间(UTC)', + PRIMARY KEY (`event_id`), + KEY `idx_container_event_aggregate` (`aggregate_id`,`aggregate_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='海外货柜事件消费Inbox'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_exception_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_exception_history` ( + `id` bigint unsigned NOT NULL COMMENT '异常历史ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '稳定货柜预订ID', + `action` varchar(16) NOT NULL COMMENT 'MARK标记异常/CANCEL取消异常', + `reason` varchar(500) NOT NULL COMMENT '标记或取消原因', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `operation_id` varchar(128) NOT NULL COMMENT '同一操作人幂等键', + `request_hash` char(64) NOT NULL COMMENT '规范化请求摘要', + `occurred_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '发生时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_container_exception_operation` (`container_booking_id`,`operator_id`,`operation_id`), + KEY `idx_container_exception_history` (`container_booking_id`,`occurred_at`,`id`), + CONSTRAINT `fk_container_exception_booking` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_container_exception_action` CHECK ((`action` in (_utf8mb4'MARK',_utf8mb4'CANCEL'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='货柜异常标记及取消原因历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_fee_detail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_fee_detail` ( + `id` bigint unsigned NOT NULL COMMENT '柜次费用来源ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '柜次ID,对应fl_loading_plan.id', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '订舱柜ID快照', + `container_no` varchar(64) DEFAULT NULL COMMENT '柜号快照', + `fee_item_id` bigint unsigned NOT NULL COMMENT '平台公共费用项目ID', + `fee_item_code_snapshot` varchar(50) NOT NULL COMMENT '费用项目稳定编码快照', + `fee_item_name_snapshot` varchar(128) NOT NULL COMMENT '费用项目名称快照', + `direction` varchar(16) NOT NULL COMMENT '费用方向:RECEIVABLE应收、PAYABLE应付', + `business_date` date NOT NULL COMMENT '费用业务日期', + `amount` decimal(18,2) NOT NULL COMMENT 'CNY费用金额', + `currency` char(3) NOT NULL DEFAULT 'CNY' COMMENT '币种,首期固定CNY', + `settlement_included` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否参与财务结算来源池', + `review_status` varchar(16) NOT NULL DEFAULT 'PENDING' COMMENT '审核状态:PENDING待审核、APPROVED通过、REJECTED驳回', + `source_status` varchar(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '来源状态:ACTIVE有效、VOIDED作废', + `source_version` int unsigned NOT NULL DEFAULT '1' COMMENT '费用来源版本;调整递增,作废携带当前版本', + `remark` varchar(500) DEFAULT NULL COMMENT '人工备注', + `reviewer_id` bigint unsigned DEFAULT NULL COMMENT '审核人ID', + `reviewer_name` varchar(64) DEFAULT NULL COMMENT '审核人名称快照', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '审核时间', + `review_reason` varchar(500) DEFAULT NULL COMMENT '审核驳回原因', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后更新人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + `paid_at` datetime(3) DEFAULT NULL COMMENT 'DIRECT_PAID业务已付时间', + `payment_method` varchar(32) DEFAULT NULL COMMENT 'DIRECT_PAID付款方式', + `payment_reference_no` varchar(128) DEFAULT NULL COMMENT 'DIRECT_PAID付款流水号', + `payment_voucher_file_ids` json DEFAULT NULL COMMENT 'DIRECT_PAID付款凭证File ID数组', + `settlement_mode` varchar(16) DEFAULT NULL COMMENT '仅PAYABLE:ON_ACCOUNT账期应付、DIRECT_PAID业务已付;RECEIVABLE为空', + `supplier_category` varchar(16) DEFAULT NULL COMMENT '费用项目供应商类别约束快照;为空表示任意启用供应商', + `supplier_id` bigint unsigned DEFAULT NULL COMMENT '应付Warehouse供应商ID快照;应收为空', + `supplier_name` varchar(200) DEFAULT NULL COMMENT '应付Warehouse供应商名称快照;应收为空', + `allocation_group_id` bigint unsigned DEFAULT NULL COMMENT '柜级公共费用分摊组ID;单入仓直接费用为空', + `allocation_order_id` bigint unsigned DEFAULT NULL COMMENT '本分摊行业务订单ID', + `allocation_order_no` varchar(64) DEFAULT NULL COMMENT '本分摊行业务订单号', + `allocation_inbound_id` bigint unsigned DEFAULT NULL COMMENT '本分摊行对应入仓单ID', + `allocation_inbound_code` varchar(64) DEFAULT NULL COMMENT '本分摊行对应入仓码', + `allocation_group_amount` decimal(18,2) DEFAULT NULL COMMENT '柜级原始费用总额快照', + PRIMARY KEY (`id`), + KEY `idx_container_fee_customer_plan` (`tenant_id`,`loading_plan_id`,`source_status`), + KEY `idx_container_fee_settlement` (`tenant_id`,`review_status`,`settlement_included`,`source_status`), + CONSTRAINT `chk_container_fee_amount` CHECK ((`amount` >= 0)), + CONSTRAINT `chk_container_fee_currency` CHECK ((`currency` = _utf8mb4'CNY')), + CONSTRAINT `chk_container_fee_direction` CHECK ((`direction` in (_utf8mb4'RECEIVABLE',_utf8mb4'PAYABLE'))), + CONSTRAINT `chk_container_fee_review` CHECK ((`review_status` in (_utf8mb4'PENDING',_utf8mb4'APPROVED',_utf8mb4'REJECTED'))), + CONSTRAINT `chk_container_fee_source` CHECK ((`source_status` in (_utf8mb4'ACTIVE',_utf8mb4'VOIDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次级人工应收应付费用来源;审核通过且参与结算后同步Finance'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_fee_source_snapshot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_fee_source_snapshot` ( + `id` bigint unsigned NOT NULL COMMENT '柜次费用快照ID', + `source_fee_id` bigint unsigned NOT NULL COMMENT '柜次费用来源ID', + `source_version` int unsigned NOT NULL COMMENT '费用来源版本', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '柜次ID', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '订舱柜ID快照', + `container_no` varchar(64) DEFAULT NULL COMMENT '柜号快照', + `fee_item_id` bigint unsigned NOT NULL COMMENT '费用项目ID快照', + `fee_item_code` varchar(50) NOT NULL COMMENT '费用项目编码快照', + `fee_item_name` varchar(128) NOT NULL COMMENT '费用项目名称快照', + `direction` varchar(16) NOT NULL COMMENT '费用方向', + `supplier_id` bigint unsigned DEFAULT NULL COMMENT 'Warehouse供应商ID快照', + `supplier_name` varchar(200) DEFAULT NULL COMMENT 'Warehouse供应商名称快照', + `supplier_category` varchar(16) DEFAULT NULL COMMENT '费用项目供应商类别约束快照;为空表示任意启用供应商', + `settlement_mode` varchar(16) DEFAULT NULL COMMENT '仅PAYABLE:ON_ACCOUNT账期应付、DIRECT_PAID业务已付;RECEIVABLE为空', + `paid_at` datetime(3) DEFAULT NULL COMMENT 'DIRECT_PAID业务已付时间', + `payment_method` varchar(32) DEFAULT NULL COMMENT 'DIRECT_PAID付款方式', + `payment_reference_no` varchar(128) DEFAULT NULL COMMENT 'DIRECT_PAID付款流水号', + `payment_voucher_file_ids` json DEFAULT NULL COMMENT 'DIRECT_PAID付款凭证File ID数组', + `business_date` date NOT NULL COMMENT '费用业务日期', + `amount` decimal(18,2) NOT NULL COMMENT 'CNY费用金额', + `currency` char(3) NOT NULL DEFAULT 'CNY' COMMENT '币种,首期固定CNY', + `review_status` varchar(16) NOT NULL COMMENT '审核状态快照', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '审核时间快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '快照创建时间', + `allocation_group_id` bigint unsigned DEFAULT NULL COMMENT '柜级公共费用分摊组ID', + `allocation_order_id` bigint unsigned DEFAULT NULL COMMENT '分摊业务订单ID快照', + `allocation_order_no` varchar(64) DEFAULT NULL COMMENT '分摊业务订单号快照', + `allocation_inbound_id` bigint unsigned DEFAULT NULL COMMENT '分摊入仓单ID快照', + `allocation_inbound_code` varchar(64) DEFAULT NULL COMMENT '分摊入仓码快照', + `allocation_group_amount` decimal(18,2) DEFAULT NULL COMMENT '柜级原始费用总额快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_container_fee_source_version` (`loading_plan_id`,`source_fee_id`,`source_version`), + KEY `idx_container_fee_snapshot_tenant` (`tenant_id`,`loading_plan_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次费用不可变版本快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_container_transport_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_container_transport_history` ( + `id` bigint unsigned NOT NULL COMMENT '运输字段变更历史ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '稳定柜次ID', + `before_container_no` varchar(64) DEFAULT NULL COMMENT '变更前真实集装箱号', + `after_container_no` varchar(64) DEFAULT NULL COMMENT '变更后真实集装箱号', + `before_voyage_no` varchar(64) DEFAULT NULL COMMENT '变更前航次号', + `after_voyage_no` varchar(64) DEFAULT NULL COMMENT '变更后航次号', + `reason` varchar(500) DEFAULT NULL COMMENT '运输字段变更原因', + `operator_id` bigint unsigned NOT NULL COMMENT '变更操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '变更操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '变更记录创建时间', + `operation_id` varchar(64) NOT NULL COMMENT '运输字段操作幂等ID', + `request_hash` char(64) NOT NULL COMMENT '运输字段请求哈希', + PRIMARY KEY (`id`), + KEY `idx_container_transport_history` (`container_booking_id`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次真实运输字段不可变变更审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customer_charge_rule`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customer_charge_rule` ( + `id` bigint unsigned NOT NULL COMMENT '客户计费规则ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `rule_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户内唯一计费规则编码', + `rule_version` int unsigned NOT NULL COMMENT '规则版本号', + `customer_id` bigint unsigned NOT NULL COMMENT '客户逻辑ID', + `customer_name` varchar(128) NOT NULL COMMENT '客户名称快照', + `business_type` varchar(32) NOT NULL COMMENT '业务类型', + `charge_mode` varchar(16) NOT NULL COMMENT '计费口径:KG或CBM', + `tax_mode` varchar(24) DEFAULT NULL COMMENT '包税或不包税类型', + `conversion_factor` decimal(18,6) NOT NULL COMMENT '重量体积换算系数', + `length_factor` decimal(18,6) NOT NULL DEFAULT '1.000000' COMMENT 'length factor', + `width_factor` decimal(18,6) NOT NULL DEFAULT '1.000000' COMMENT 'width factor', + `height_factor` decimal(18,6) NOT NULL DEFAULT '1.000000' COMMENT 'height factor', + `rounding_scale` tinyint unsigned NOT NULL DEFAULT '3' COMMENT '结果保留小数位数', + `rounding_mode` varchar(24) NOT NULL DEFAULT 'CEILING' COMMENT '舍入方式', + `currency` char(3) NOT NULL COMMENT '默认币种', + `effective_from` datetime(3) NOT NULL COMMENT '生效开始时间', + `effective_to` datetime(3) DEFAULT NULL COMMENT '生效结束时间', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '规则状态:ACTIVE启用、DISABLED停用', + `default_rule` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'default customer rule', + `remark` varchar(500) DEFAULT NULL COMMENT '规则备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `initialization_key` varchar(128) DEFAULT NULL COMMENT '客户创建执行器幂等键及补偿归属', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_charge_rule_version` (`tenant_id`,`rule_code`,`rule_version`), + KEY `idx_charge_rule_match` (`tenant_id`,`customer_id`,`business_type`,`status`,`effective_from`,`effective_to`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户头程计费规则版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customer_dimension_config`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customer_dimension_config` ( + `id` bigint unsigned NOT NULL COMMENT '配置ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `box_type` varchar(24) NOT NULL COMMENT '固定箱规类型:SMALL/MEDIUM/LARGE/EXTRA_LARGE', + `inner_length_cm` decimal(9,3) NOT NULL COMMENT '箱规内长(厘米)', + `inner_width_cm` decimal(9,3) NOT NULL COMMENT '箱规内宽(厘米)', + `inner_height_cm` decimal(9,3) NOT NULL COMMENT '箱规内高(厘米)', + `edge_addition_cm` decimal(6,3) NOT NULL DEFAULT '2.000' COMMENT '每个尺寸方向的单侧加宽厘米数', + `default_calculation_mode` varchar(16) NOT NULL DEFAULT 'ADD' COMMENT '订单外箱规默认计算方式:ADD或MULTIPLY', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `initialization_key` varchar(128) NOT NULL COMMENT '创建流程幂等键及补偿归属', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customer_dimension_config_tenant_box` (`tenant_id`,`box_type`), + KEY `idx_customer_dimension_config_initialization` (`tenant_id`,`initialization_key`), + CONSTRAINT `chk_customer_dimension_box_type` CHECK ((`box_type` in (_utf8mb4'SMALL',_utf8mb4'MEDIUM',_utf8mb4'LARGE',_utf8mb4'EXTRA_LARGE'))), + CONSTRAINT `chk_customer_dimension_edge_addition` CHECK (((`edge_addition_cm` >= 0.001) and (`edge_addition_cm` <= 100.000))), + CONSTRAINT `chk_customer_dimension_inner_size` CHECK (((`inner_length_cm` >= 0.001) and (`inner_width_cm` >= 0.001) and (`inner_height_cm` >= 0.001))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户固定四箱规尺寸配置'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_case`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_case` ( + `id` bigint unsigned NOT NULL COMMENT '报关协同单逻辑ID', + `customs_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '全局唯一报关协同单号', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `order_id` bigint unsigned NOT NULL COMMENT 'Order服务订单逻辑ID;跨库不建立外键', + `inbound_id` bigint unsigned NOT NULL COMMENT 'Firstleg入库单逻辑ID', + `container_booking_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '关联柜次逻辑ID;0表示创建时尚未关联柜次', + `checklist_version_id` bigint unsigned NOT NULL COMMENT '本单冻结使用的报关资料清单版本ID', + `checklist_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建协同单时的清单编码快照;源清单变化不回写', + `checklist_version_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建协同单时的清单版本号快照;源清单变化不回写', + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'DOCUMENTS_PENDING' COMMENT '协同状态:DOCUMENTS_PENDING待补资料、REVIEWING审核中、SUPPLEMENT_REQUIRED需补件、READY_TO_SUBMIT待提交代理、RECEIPT_PENDING待回执、RECEIPT_AVAILABLE已有回执、CLEARANCE_COMPLETED已放行、CANCELLED已取消', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '报关协同单内部业务备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建协同单的平台操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建协同单时的平台操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '协同单创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改协同单的平台操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改时的平台操作人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '协同单最后修改时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号;每次状态变更递增', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_no` (`customs_no`), + UNIQUE KEY `uk_customs_case_scope` (`tenant_id`,`order_id`,`inbound_id`,`container_booking_id`), + KEY `idx_customs_case_status` (`status`,`updated_at`), + KEY `idx_customs_case_container` (`container_booking_id`), + KEY `fk_customs_case_checklist` (`checklist_version_id`), + CONSTRAINT `fk_customs_case_checklist` FOREIGN KEY (`checklist_version_id`) REFERENCES `fl_customs_checklist_version` (`id`), + CONSTRAINT `chk_customs_case_status` CHECK ((`status` in (_utf8mb4'DOCUMENTS_PENDING',_utf8mb4'REVIEWING',_utf8mb4'SUPPLEMENT_REQUIRED',_utf8mb4'READY_TO_SUBMIT',_utf8mb4'RECEIPT_PENDING',_utf8mb4'RECEIPT_AVAILABLE',_utf8mb4'CLEARANCE_COMPLETED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='三期订单报关协同聚合'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_checklist_version`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_checklist_version` ( + `id` bigint unsigned NOT NULL COMMENT '报关资料清单版本逻辑ID', + `checklist_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '报关资料清单编码;同一清单的多个版本共用', + `version_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '清单业务版本号', + `country_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '清单适用的目的国家或地区编码', + `channel_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '清单适用的运输渠道编码', + `cargo_type` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '清单适用的货物类型编码', + `items_json` json NOT NULL COMMENT '不可变清单项目数组;元素包含code项目编码、name项目名称和required是否必填', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '清单版本状态:ACTIVE启用、RETIRED停用', + `created_by` bigint unsigned NOT NULL COMMENT '创建清单版本的平台操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建清单版本时的平台操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '清单版本创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_checklist_version` (`checklist_code`,`version_no`), + KEY `idx_customs_checklist_match` (`country_code`,`channel_code`,`cargo_type`,`status`), + CONSTRAINT `chk_customs_checklist_status` CHECK ((`status` in (_utf8mb4'ACTIVE',_utf8mb4'RETIRED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='三期报关资料清单不可变版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_command` ( + `id` bigint unsigned NOT NULL, + `actor_id` bigint unsigned NOT NULL, + `action` varchar(80) NOT NULL, + `idempotency_key` varchar(128) NOT NULL, + `request_hash` char(64) NOT NULL, + `status` varchar(16) NOT NULL, + `result_id` bigint unsigned DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `completed_at` datetime(3) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_command` (`actor_id`,`action`,`idempotency_key`), + CONSTRAINT `chk_customs_command_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='整柜报关写命令幂等事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_completion_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_completion_document` ( + `id` bigint unsigned NOT NULL, + `source_document_id` bigint unsigned NOT NULL COMMENT '一份冻结客户资料严格对应一份完成文件逻辑根', + `file_id` bigint unsigned NOT NULL, + `file_name` varchar(255) NOT NULL, + `file_hash` char(64) NOT NULL, + `content_type` varchar(128) DEFAULT NULL, + `size_bytes` bigint unsigned NOT NULL, + `uploaded_by` bigint unsigned NOT NULL, + `uploaded_by_name` varchar(64) DEFAULT NULL, + `uploaded_at` datetime(3) NOT NULL, + `version` int unsigned NOT NULL DEFAULT '1', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_completion_source` (`source_document_id`), + CONSTRAINT `fk_customs_completion_source` FOREIGN KEY (`source_document_id`) REFERENCES `fl_customs_customer_document` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关完成文件当前版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_completion_document_version`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_completion_document_version` ( + `id` bigint unsigned NOT NULL, + `completion_document_id` bigint unsigned NOT NULL, + `document_version` int unsigned NOT NULL, + `file_id` bigint unsigned NOT NULL, + `file_name` varchar(255) NOT NULL, + `file_hash` char(64) NOT NULL, + `content_type` varchar(128) DEFAULT NULL, + `size_bytes` bigint unsigned NOT NULL, + `operator_id` bigint unsigned NOT NULL, + `operator_name` varchar(64) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_completion_version` (`completion_document_id`,`document_version`), + CONSTRAINT `fk_customs_completion_version` FOREIGN KEY (`completion_document_id`) REFERENCES `fl_customs_completion_document` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关完成文件不可变覆盖版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_container`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_container` ( + `id` bigint unsigned NOT NULL, + `loading_plan_id` bigint unsigned NOT NULL COMMENT '已完成装柜计划ID;报关柜级聚合唯一键', + `container_booking_id` bigint unsigned NOT NULL COMMENT '物理货柜ID', + `status` varchar(40) NOT NULL COMMENT 'WAITING_CUSTOMER_DOCUMENTS、READY_TO_START、DECLARING、COMPLETED', + `started_by` bigint unsigned DEFAULT NULL, + `started_by_name` varchar(64) DEFAULT NULL, + `started_at` datetime(3) DEFAULT NULL, + `completed_by` bigint unsigned DEFAULT NULL, + `completed_by_name` varchar(64) DEFAULT NULL, + `completed_at` datetime(3) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `version` int unsigned NOT NULL DEFAULT '0', + `broker_submitted_by` bigint unsigned DEFAULT NULL COMMENT '发送报关行执行的操作人ID', + `broker_submitted_by_name` varchar(64) DEFAULT NULL COMMENT '发送报关行执行的操作人名称', + `broker_submitted_at` datetime(3) DEFAULT NULL COMMENT '发送报关行执行时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_container_plan` (`loading_plan_id`), + UNIQUE KEY `uk_customs_container_booking` (`container_booking_id`), + KEY `idx_customs_container_status` (`status`,`updated_at`), + CONSTRAINT `chk_customs_container_status` CHECK ((`status` in (_utf8mb4'WAITING_CUSTOMER_DOCUMENTS',_utf8mb4'READY_TO_START',_utf8mb4'DECLARING',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='装柜完成后的整柜出口报关聚合'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_container_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_container_history` ( + `id` bigint unsigned NOT NULL, + `customs_container_id` bigint unsigned NOT NULL, + `action` varchar(40) NOT NULL, + `from_status` varchar(40) DEFAULT NULL, + `to_status` varchar(40) DEFAULT NULL, + `remark` varchar(500) DEFAULT NULL, + `operator_id` bigint unsigned NOT NULL, + `operator_name` varchar(64) DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_customs_container_history` (`customs_container_id`,`created_at`,`id`), + CONSTRAINT `fk_customs_container_history` FOREIGN KEY (`customs_container_id`) REFERENCES `fl_customs_container` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='整柜报关状态与系统触发历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_customer_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_customer_document` ( + `id` bigint unsigned NOT NULL, + `customs_container_id` bigint unsigned NOT NULL, + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键;只允许关联同客户退税票', + `file_id` bigint unsigned NOT NULL, + `file_name` varchar(255) NOT NULL, + `file_hash` char(64) NOT NULL, + `content_type` varchar(128) DEFAULT NULL, + `size_bytes` bigint unsigned NOT NULL, + `status` varchar(16) NOT NULL DEFAULT 'ACTIVE', + `uploaded_by` bigint unsigned NOT NULL, + `uploaded_at` datetime(3) NOT NULL, + `frozen_version` int unsigned DEFAULT NULL, + `frozen_at` datetime(3) DEFAULT NULL, + `deleted_by` bigint unsigned DEFAULT NULL, + `deleted_at` datetime(3) DEFAULT NULL, + `version` int unsigned NOT NULL DEFAULT '1', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `idx_customs_customer_document_container` (`customs_container_id`,`status`,`tenant_id`), + CONSTRAINT `fk_customs_customer_document_container` FOREIGN KEY (`customs_container_id`) REFERENCES `fl_customs_container` (`id`), + CONSTRAINT `chk_customs_customer_document_freeze` CHECK ((((`frozen_at` is null) and (`frozen_version` is null)) or ((`frozen_at` is not null) and (`frozen_version` is not null)))), + CONSTRAINT `chk_customs_customer_document_status` CHECK ((`status` in (_utf8mb4'ACTIVE',_utf8mb4'DELETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户整份退税报送资料逻辑根'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_customer_document_inbound`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_customer_document_inbound` ( + `document_id` bigint unsigned NOT NULL, + `inbound_id` bigint unsigned NOT NULL, + `tenant_id` bigint unsigned NOT NULL, + `order_id` bigint unsigned NOT NULL, + `inbound_code` varchar(40) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`document_id`,`inbound_id`), + KEY `idx_customs_document_inbound` (`inbound_id`,`tenant_id`), + CONSTRAINT `fk_customs_document_inbound_document` FOREIGN KEY (`document_id`) REFERENCES `fl_customs_customer_document` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户报送资料与当前柜退税入仓码多对多关系'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_customer_document_version`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_customer_document_version` ( + `id` bigint unsigned NOT NULL, + `document_id` bigint unsigned NOT NULL, + `document_version` int unsigned NOT NULL, + `file_id` bigint unsigned NOT NULL, + `file_name` varchar(255) NOT NULL, + `file_hash` char(64) NOT NULL, + `content_type` varchar(128) DEFAULT NULL, + `size_bytes` bigint unsigned NOT NULL, + `scope_snapshot_json` json NOT NULL, + `action` varchar(24) NOT NULL COMMENT 'UPLOAD、REPLACE、SCOPE_CHANGE、DELETE', + `operator_id` bigint unsigned NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_customer_document_version` (`document_id`,`document_version`), + CONSTRAINT `fk_customs_customer_document_version` FOREIGN KEY (`document_id`) REFERENCES `fl_customs_customer_document` (`id`), + CONSTRAINT `chk_customs_customer_document_version_action` CHECK ((`action` in (_utf8mb4'UPLOAD',_utf8mb4'REPLACE',_utf8mb4'SCOPE_CHANGE',_utf8mb4'DELETE'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户报送资料文件与覆盖范围不可变版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_document` ( + `id` bigint unsigned NOT NULL COMMENT '报关资料文件版本逻辑ID', + `customs_case_id` bigint unsigned NOT NULL COMMENT '所属报关协同单ID', + `checklist_item_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '对应冻结清单中的资料项目编码', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件逻辑ID;跨库不建立外键', + `document_version` int unsigned NOT NULL COMMENT '同一协同单和清单项目下的文件版本序号', + `replaces_document_id` bigint unsigned DEFAULT NULL COMMENT '被本版本替换的上一资料版本ID;首个版本为空', + `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '上传或引用时的文件名称快照', + `file_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文件内容SHA-256摘要;用于版本审计和幂等校验', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'UPLOADED' COMMENT '资料状态:UPLOADED待审核、APPROVED审核通过、RETURNED已退回、SUPERSEDED已被替换、FROZEN已随代理提交批次冻结', + `visibility` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'CUSTOMER' COMMENT '资料可见范围:PLATFORM仅平台可见、CUSTOMER客户可见', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传或引用资料的操作人ID', + `uploaded_by_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '上传主体类型:PLATFORM平台操作人、MERCHANT客户操作人', + `uploaded_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '资料上传或引用时间', + `reviewed_by` bigint unsigned DEFAULT NULL COMMENT '审核资料的平台操作人ID;未审核时为空', + `reviewed_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '审核时的平台操作人名称快照', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '资料审核时间', + `review_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '审核退回原因或审核备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_document_version` (`customs_case_id`,`checklist_item_code`,`document_version`), + UNIQUE KEY `uk_customs_document_file` (`customs_case_id`,`file_id`), + KEY `idx_customs_document_case` (`customs_case_id`,`status`), + CONSTRAINT `fk_customs_document_case` FOREIGN KEY (`customs_case_id`) REFERENCES `fl_customs_case` (`id`), + CONSTRAINT `chk_customs_document_actor` CHECK ((`uploaded_by_type` in (_utf8mb4'PLATFORM',_utf8mb4'MERCHANT'))), + CONSTRAINT `chk_customs_document_status` CHECK ((`status` in (_utf8mb4'UPLOADED',_utf8mb4'APPROVED',_utf8mb4'RETURNED',_utf8mb4'SUPERSEDED',_utf8mb4'FROZEN'))), + CONSTRAINT `chk_customs_document_visibility` CHECK ((`visibility` in (_utf8mb4'PLATFORM',_utf8mb4'CUSTOMER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关客户文件版本引用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_final_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_final_document` ( + `id` bigint unsigned NOT NULL COMMENT '真实报关完税文件ID', + `source_document_id` bigint unsigned NOT NULL COMMENT '对应冻结客户资料ID', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件ID', + `file_name` varchar(255) NOT NULL COMMENT '真实报关完税文件名称快照', + `file_hash` char(64) NOT NULL COMMENT '真实报关完税文件SHA-256摘要', + `content_type` varchar(128) DEFAULT NULL COMMENT '真实报关完税文件媒体类型', + `size_bytes` bigint unsigned NOT NULL COMMENT '真实报关完税文件大小(字节)', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传操作人ID', + `uploaded_by_name` varchar(64) DEFAULT NULL COMMENT '上传操作人名称快照', + `uploaded_at` datetime(3) NOT NULL COMMENT '上传时间', + `version` int unsigned NOT NULL DEFAULT '1' COMMENT '完税文件版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_final_source` (`source_document_id`), + CONSTRAINT `fk_customs_final_source` FOREIGN KEY (`source_document_id`) REFERENCES `fl_customs_customer_document` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='真实报关完税文件当前版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_frozen_document_inbound`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_frozen_document_inbound` ( + `document_id` bigint unsigned NOT NULL, + `inbound_id` bigint unsigned NOT NULL, + `tenant_id` bigint unsigned NOT NULL, + `order_id` bigint unsigned NOT NULL, + `inbound_code` varchar(40) NOT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`document_id`,`inbound_id`), + CONSTRAINT `fk_customs_frozen_document` FOREIGN KEY (`document_id`) REFERENCES `fl_customs_customer_document` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='开始报关时冻结的客户资料覆盖范围'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_history` ( + `id` bigint unsigned NOT NULL COMMENT '报关协同历史逻辑ID', + `customs_case_id` bigint unsigned NOT NULL COMMENT '所属报关协同单ID', + `action` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '业务动作编码,如CREATE、UPLOAD_DOCUMENT、REPLACE_DOCUMENT、REVIEW_DOCUMENT_APPROVE、REVIEW_DOCUMENT_RETURN、SUBMIT_AGENT_BATCH或UPLOAD_RECEIPT', + `from_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '动作发生前的协同状态;创建动作时为空', + `to_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '动作完成后的协同状态', + `resource_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '动作关联资源类型:CASE协同单、DOCUMENT资料、SUBMISSION_BATCH提交批次或RECEIPT回执', + `resource_id` bigint unsigned NOT NULL COMMENT '动作关联资源逻辑ID', + `note` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '动作原因、资料项目编码或业务备注快照', + `operator_id` bigint unsigned NOT NULL COMMENT '执行业务动作的操作人ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '执行动作时的操作人名称快照', + `operator_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '操作主体类型:PLATFORM平台操作人、MERCHANT客户操作人', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '历史记录创建时间', + PRIMARY KEY (`id`), + KEY `idx_customs_history_case` (`customs_case_id`,`created_at`,`id`), + CONSTRAINT `fk_customs_history_case` FOREIGN KEY (`customs_case_id`) REFERENCES `fl_customs_case` (`id`), + CONSTRAINT `chk_customs_history_actor` CHECK ((`operator_type` in (_utf8mb4'PLATFORM',_utf8mb4'MERCHANT'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关协同稳定历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_operation` ( + `id` bigint unsigned NOT NULL COMMENT '报关写命令幂等记录逻辑ID', + `operator_id` bigint unsigned NOT NULL COMMENT '发起写命令的操作人ID;与动作和幂等键共同限定重放范围', + `action` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '幂等业务动作编码,包含平台或客户动作及资料、审核、提交、回执类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端提供的幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化完整请求内容的SHA-256摘要;同键不同请求时拒绝', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '幂等处理状态:PROCESSING处理中、SUCCESS处理成功', + `result_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '成功结果资源类型:CHECKLIST、CASE、DOCUMENT、BATCH或RECEIPT', + `result_id` bigint unsigned DEFAULT NULL COMMENT '成功结果资源逻辑ID;处理中为空', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等记录创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '写命令成功完成时间;处理中为空', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_operation` (`operator_id`,`action`,`idempotency_key`), + CONSTRAINT `chk_customs_operation_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关协同命令幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_receipt` ( + `id` bigint unsigned NOT NULL COMMENT '报关回执文件版本逻辑ID', + `customs_case_id` bigint unsigned NOT NULL COMMENT '所属报关协同单ID', + `submission_batch_id` bigint unsigned NOT NULL COMMENT '产生本回执的报关代理提交批次ID', + `receipt_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '回执类型:RECEIVED已收件、DECLARED已申报、REJECTED已拒绝、INSPECTION查验通知、RELEASED放行回执、OTHER其他回执', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务回执文件逻辑ID;跨库不建立外键', + `receipt_version` int unsigned NOT NULL COMMENT '同一提交批次和回执类型下的版本序号', + `replaces_receipt_id` bigint unsigned DEFAULT NULL COMMENT '被本版本替换的上一回执版本ID;首个版本为空', + `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '上传或引用时的回执文件名称快照', + `file_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '回执文件内容SHA-256摘要;用于版本审计和幂等校验', + `visibility` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PLATFORM' COMMENT '回执可见范围:PLATFORM仅平台可见、CUSTOMER客户可查询下载', + `note` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '回执业务备注', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传或引用回执的平台操作人ID', + `uploaded_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '上传回执时的平台操作人名称快照', + `uploaded_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '回执上传或引用时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_receipt_version` (`submission_batch_id`,`receipt_type`,`receipt_version`), + UNIQUE KEY `uk_customs_receipt_file` (`submission_batch_id`,`file_id`), + KEY `idx_customs_receipt_case` (`customs_case_id`,`visibility`,`uploaded_at`), + CONSTRAINT `fk_customs_receipt_batch` FOREIGN KEY (`submission_batch_id`) REFERENCES `fl_customs_submission_batch` (`id`), + CONSTRAINT `fk_customs_receipt_case` FOREIGN KEY (`customs_case_id`) REFERENCES `fl_customs_case` (`id`), + CONSTRAINT `chk_customs_receipt_type` CHECK ((`receipt_type` in (_utf8mb4'RECEIVED',_utf8mb4'DECLARED',_utf8mb4'REJECTED',_utf8mb4'INSPECTION',_utf8mb4'RELEASED',_utf8mb4'OTHER'))), + CONSTRAINT `chk_customs_receipt_visibility` CHECK ((`visibility` in (_utf8mb4'PLATFORM',_utf8mb4'CUSTOMER'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关代理回执版本与客户可见范围'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_submission_batch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_submission_batch` ( + `id` bigint unsigned NOT NULL COMMENT '报关代理提交批次逻辑ID', + `customs_case_id` bigint unsigned NOT NULL COMMENT '所属报关协同单ID', + `batch_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '全局唯一代理提交批次号', + `batch_version` int unsigned NOT NULL COMMENT '同一报关协同单内的提交批次版本序号', + `customs_agent_id` bigint unsigned DEFAULT NULL, + `customs_agent_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '本批次接收报关资料的报关代理名称快照', + `external_reference` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '报关代理或外部系统返回的业务参考号', + `file_snapshot_json` json NOT NULL COMMENT '提交时冻结的已审核资料数组;元素包含documentId、fileId、itemCode、documentVersion和fileHash', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'SUBMITTED' COMMENT '代理提交状态:SUBMITTED已提交、ACKNOWLEDGED代理已确认、REJECTED代理已拒绝、COMPLETED代理处理完成', + `note` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '提交报关代理时的平台备注', + `submitted_by` bigint unsigned NOT NULL COMMENT '提交报关代理的平台操作人ID', + `submitted_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '提交时的平台操作人名称快照', + `submitted_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '提交报关代理时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_customs_batch_no` (`batch_no`), + UNIQUE KEY `uk_customs_batch_version` (`customs_case_id`,`batch_version`), + CONSTRAINT `fk_customs_batch_case` FOREIGN KEY (`customs_case_id`) REFERENCES `fl_customs_case` (`id`), + CONSTRAINT `chk_customs_batch_status` CHECK ((`status` in (_utf8mb4'SUBMITTED',_utf8mb4'ACKNOWLEDGED',_utf8mb4'REJECTED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关代理提交批次及冻结文件版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_customs_supplement_request`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_customs_supplement_request` ( + `id` bigint unsigned NOT NULL COMMENT '报关补件请求逻辑ID', + `customs_case_id` bigint unsigned NOT NULL COMMENT '所属报关协同单ID', + `source_document_id` bigint unsigned NOT NULL COMMENT '触发本次补件的被退回资料版本ID', + `resolved_document_id` bigint unsigned DEFAULT NULL COMMENT '解决本次补件的新资料版本ID;未解决时为空', + `checklist_item_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '需要补充的报关资料项目编码', + `reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '平台审核人员填写的补件原因', + `due_at` datetime(3) DEFAULT NULL COMMENT '期望完成补件时间;未设置时为空', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'OPEN' COMMENT '补件状态:OPEN待补件、RESOLVED已由新资料解决、CANCELLED已取消', + `requested_by` bigint unsigned NOT NULL COMMENT '发起补件的平台操作人ID', + `requested_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '发起补件时的平台操作人名称快照', + `requested_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '补件请求发起时间', + `resolved_by` bigint unsigned DEFAULT NULL COMMENT '提交解决资料的操作人ID;未解决时为空', + `resolved_at` datetime(3) DEFAULT NULL COMMENT '补件请求解决时间', + PRIMARY KEY (`id`), + KEY `idx_customs_supplement_case` (`customs_case_id`,`status`,`due_at`), + CONSTRAINT `fk_customs_supplement_case` FOREIGN KEY (`customs_case_id`) REFERENCES `fl_customs_case` (`id`), + CONSTRAINT `chk_customs_supplement_status` CHECK ((`status` in (_utf8mb4'OPEN',_utf8mb4'RESOLVED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报关补件请求'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_direct_delivery_unloading`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_direct_delivery_unloading` ( + `container_booking_id` bigint unsigned NOT NULL, + `inbound_id` bigint unsigned NOT NULL COMMENT 'Immutable physically loaded inbound source', + `actual_at` datetime(3) NOT NULL COMMENT 'Actual destination local time', + `timezone` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Explicit destination IANA timezone', + `received_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Actual recipient', + `evidence_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Actual delivery receipt reference', + `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `version` int NOT NULL DEFAULT '1', + `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, + `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_by` bigint unsigned NOT NULL, + `created_by_name` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`container_booking_id`,`inbound_id`), + UNIQUE KEY `uk_direct_unloading_command` (`container_booking_id`,`idempotency_key`), + CONSTRAINT `fk_direct_unloading_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='直送目的仓真实卸货凭据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_document_sequence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_document_sequence` ( + `sequence_key` varchar(32) NOT NULL COMMENT '单据类型与北京时间日期组合键,例如CAB:20260818', + `current_value` int unsigned NOT NULL COMMENT '该类型当日已分配的最大序号', + PRIMARY KEY (`sequence_key`), + CONSTRAINT `chk_fl_document_sequence_value` CHECK ((`current_value` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='头程履约业务单号日序列;生成YYMMDD加四位当日序号'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_dropship_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_dropship_pallet` ( + `id` bigint unsigned NOT NULL COMMENT '合托托盘ID', + `task_id` bigint unsigned NOT NULL COMMENT '所属合托任务ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '一件代发入仓单ID', + `warehouse_id` bigint unsigned NOT NULL COMMENT '作业仓库ID', + `pallet_no` varchar(32) NOT NULL COMMENT '现场扫描的系统DP托盘码', + `pallet_status` varchar(16) NOT NULL COMMENT '托盘状态:OPEN合托中、COMPLETED已封托', + `open_operation_id` varchar(128) NOT NULL COMMENT '创建托盘幂等操作ID', + `seal_operation_id` varchar(128) DEFAULT NULL COMMENT '封托幂等操作ID', + `created_by` bigint unsigned NOT NULL COMMENT '托盘创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '托盘创建人姓名快照', + `completed_by` bigint unsigned DEFAULT NULL COMMENT '封托操作人ID', + `completed_by_name` varchar(64) DEFAULT NULL COMMENT '封托操作人姓名快照', + `completed_at` datetime(3) DEFAULT NULL COMMENT '封托完成时间', + `version` int NOT NULL DEFAULT '1' COMMENT '托盘乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '托盘创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '托盘更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dropship_pallet_open_op` (`open_operation_id`), + UNIQUE KEY `uk_dropship_pallet_no` (`pallet_no`), + UNIQUE KEY `uk_dropship_pallet_seal_op` (`seal_operation_id`), + KEY `idx_dropship_pallet_inbound` (`tenant_id`,`inbound_id`,`pallet_status`), + KEY `fk_dropship_pallet_task` (`task_id`), + CONSTRAINT `fk_dropship_pallet_task` FOREIGN KEY (`task_id`) REFERENCES `fl_dropship_pallet_task` (`id`), + CONSTRAINT `chk_dropship_pallet_status` CHECK ((`pallet_status` in (_utf8mb4'OPEN',_utf8mb4'SEALED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发合托形成的可打印托盘'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_dropship_pallet_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_dropship_pallet_carton` ( + `id` bigint unsigned NOT NULL COMMENT '托盘箱明细ID', + `task_id` bigint unsigned NOT NULL COMMENT '所属合托任务ID', + `pallet_id` bigint unsigned DEFAULT NULL COMMENT '所属组托托盘ID;已清点待绑托时为空', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '一件代发入仓单ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '入仓货物明细ID', + `carton_label_id` bigint unsigned NOT NULL COMMENT '稳定箱唛记录ID', + `sku_code` varchar(128) NOT NULL COMMENT '箱唛冻结SKU编码', + `cargo_name` varchar(255) DEFAULT NULL COMMENT '货物名称快照', + `box_code` varchar(80) NOT NULL COMMENT '稳定箱码', + `expected_sku_quantity` int unsigned NOT NULL COMMENT '箱唛冻结的应收SKU数量', + `actual_sku_quantity` int unsigned NOT NULL COMMENT 'PDA确认的实收SKU数量', + `discrepancy_status` varchar(24) NOT NULL COMMENT '差异状态:MATCH或ACCEPTED_VARIANCE', + `discrepancy_remark` varchar(500) DEFAULT NULL COMMENT '差异接受说明', + `count_operation_id` varchar(128) NOT NULL COMMENT '逐箱清点幂等操作ID', + `bind_operation_id` varchar(128) DEFAULT NULL COMMENT '批量绑托幂等操作ID', + `last_operation_id` varchar(128) NOT NULL COMMENT '最后一次绑托或换托操作幂等号', + `counted_by` bigint unsigned NOT NULL COMMENT '清点操作人ID', + `counted_by_name` varchar(64) DEFAULT NULL COMMENT '清点操作人姓名快照', + `counted_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '清点时间', + `bound_by` bigint unsigned DEFAULT NULL COMMENT '上托操作人ID', + `bound_by_name` varchar(64) DEFAULT NULL COMMENT '上托操作人姓名快照', + `bound_at` datetime(3) DEFAULT NULL COMMENT '上托时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dropship_carton_task_label` (`task_id`,`carton_label_id`), + UNIQUE KEY `uk_dropship_carton_count_operation` (`count_operation_id`), + KEY `idx_dropship_carton_pallet_sku` (`pallet_id`,`sku_code`,`id`), + KEY `idx_dropship_carton_inbound` (`tenant_id`,`inbound_id`,`pallet_id`), + KEY `idx_dropship_carton_operation` (`count_operation_id`), + KEY `fk_dropship_carton_label` (`carton_label_id`), + KEY `idx_dropship_carton_bind_operation` (`task_id`,`bind_operation_id`), + CONSTRAINT `fk_dropship_carton_label` FOREIGN KEY (`carton_label_id`) REFERENCES `fl_inbound_carton_label` (`id`), + CONSTRAINT `fk_dropship_carton_pallet` FOREIGN KEY (`pallet_id`) REFERENCES `fl_dropship_pallet` (`id`), + CONSTRAINT `fk_dropship_carton_task` FOREIGN KEY (`task_id`) REFERENCES `fl_dropship_pallet_task` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发托盘内逐箱SKU和入仓单明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_dropship_pallet_carton_sku`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_dropship_pallet_carton_sku` ( + `id` bigint unsigned NOT NULL COMMENT '清点箱SKU明细ID', + `carton_id` bigint unsigned NOT NULL COMMENT '清点物理箱ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '入仓货物明细ID', + `sku_code` varchar(128) NOT NULL COMMENT 'SKU编码快照', + `cargo_name` varchar(255) DEFAULT NULL COMMENT '货物名称快照', + `expected_quantity` int unsigned NOT NULL COMMENT '应收数量', + `actual_quantity` int unsigned NOT NULL COMMENT '实收数量', + `discrepancy_status` varchar(24) NOT NULL COMMENT 'MATCH或ACCEPTED_VARIANCE', + `discrepancy_remark` varchar(500) DEFAULT NULL COMMENT '差异处理说明', + `line_no` int unsigned NOT NULL COMMENT '箱内SKU顺序', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dropship_carton_sku_detail` (`carton_id`,`inbound_detail_id`), + KEY `idx_dropship_carton_sku_code` (`sku_code`,`carton_id`), + CONSTRAINT `fk_dropship_carton_sku_carton` FOREIGN KEY (`carton_id`) REFERENCES `fl_dropship_pallet_carton` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发物理箱内逐SKU清点事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_dropship_pallet_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_dropship_pallet_task` ( + `id` bigint unsigned NOT NULL COMMENT '合托任务ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '一件代发入仓单ID', + `warehouse_id` bigint unsigned NOT NULL COMMENT '作业仓库ID', + `task_status` varchar(24) NOT NULL COMMENT '任务状态:PENDING待领取、CLAIMED已领取、COMPLETED已完成', + `total_cartons` int unsigned NOT NULL COMMENT '测量确认总箱数', + `counted_cartons` int unsigned NOT NULL DEFAULT '0' COMMENT '已逐箱确认实收数量的箱数', + `allocated_cartons` int unsigned NOT NULL DEFAULT '0' COMMENT '已上托箱数', + `discrepancy_cartons` int unsigned NOT NULL DEFAULT '0' COMMENT '已确认差异箱数', + `assignee_id` bigint unsigned DEFAULT NULL COMMENT '任务领取人ID', + `assignee_name` varchar(64) DEFAULT NULL COMMENT '任务领取人姓名快照', + `claimed_at` datetime(3) DEFAULT NULL COMMENT '任务领取时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '任务完成时间', + `version` int NOT NULL DEFAULT '1' COMMENT '任务乐观锁版本', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '任务创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '任务更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dropship_task_inbound` (`tenant_id`,`inbound_id`), + KEY `idx_dropship_task_operator` (`task_status`,`assignee_id`,`warehouse_id`,`created_at`), + KEY `fk_dropship_task_inbound` (`inbound_id`), + CONSTRAINT `fk_dropship_task_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_dropship_task_cartons` CHECK (((`allocated_cartons` <= `counted_cartons`) and (`counted_cartons` <= `total_cartons`))), + CONSTRAINT `chk_dropship_task_status` CHECK ((`task_status` in (_utf8mb4'PENDING',_utf8mb4'CLAIMED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发测量后PDA合托任务'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_fee_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_fee_item` ( + `id` bigint unsigned NOT NULL COMMENT '费用项目ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '平台公共费用项目作用域,固定为0;物理字段名沿用 tenant_id', + `category` varchar(64) NOT NULL COMMENT '费用分类', + `trade_scope` varchar(20) NOT NULL COMMENT 'DOMESTIC国内、INTERNATIONAL国际', + `fee_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '稳定费用编码;系统费用使用固定编码', + `fee_type_name` varchar(128) NOT NULL COMMENT '费用类型名称', + `pickup_payable` tinyint(1) NOT NULL DEFAULT '0' COMMENT '提柜应付是否参与', + `pickup_receivable` tinyint(1) NOT NULL DEFAULT '0' COMMENT '提柜应收是否参与', + `warehouse_payable` tinyint(1) NOT NULL DEFAULT '0' COMMENT '仓储应付是否参与', + `warehouse_receivable` tinyint(1) NOT NULL DEFAULT '0' COMMENT '仓储应收是否参与', + `allocation_fee` tinyint(1) NOT NULL DEFAULT '0' COMMENT '平摊费用是否参与', + `description` varchar(500) DEFAULT NULL COMMENT '说明', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE启用、DISABLED停用', + `created_by` bigint DEFAULT NULL COMMENT '创建人ID;系统初始化时可为空', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint DEFAULT NULL COMMENT '最后修改人ID;系统初始化时可为空', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记:0未删除、1已删除', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `supplier_category` varchar(16) DEFAULT NULL COMMENT 'PAYABLE供应商类别约束;为空表示任意启用供应商', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fee_item_code` (`fee_code`), + KEY `idx_fee_item_query` (`tenant_id`,`trade_scope`,`category`,`status`,`deleted`), + KEY `idx_fee_item_name` (`tenant_id`,`fee_type_name`,`deleted`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台公共费用项目主数据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_finance_fee_source_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_finance_fee_source_command` ( + `id` bigint unsigned NOT NULL COMMENT 'Finance费用来源命令ID', + `customer_id` bigint unsigned NOT NULL COMMENT '客户隔离键,由Firstleg费用事实再次校验', + `operator_id` bigint unsigned NOT NULL COMMENT 'Finance操作人ID', + `operator_name` varchar(64) NOT NULL COMMENT 'Finance操作人名称快照', + `action` varchar(24) NOT NULL COMMENT '命令动作;当前仅VOID', + `idempotency_key` varchar(128) NOT NULL COMMENT 'Finance透传的幂等键', + `request_hash` char(64) NOT NULL COMMENT '规范化请求SHA-256', + `source_type` varchar(24) NOT NULL COMMENT 'INBOUND_FEE或CONTAINER_FEE', + `source_fee_id` bigint unsigned NOT NULL COMMENT '稳定费用来源ID', + `source_version` int unsigned NOT NULL COMMENT '精确费用来源版本', + `inbound_id` bigint unsigned DEFAULT NULL COMMENT '入库费用所属入库单ID', + `container_id` bigint unsigned DEFAULT NULL COMMENT '柜次费用所属柜次ID', + `reason` varchar(500) NOT NULL COMMENT '操作原因', + `status` varchar(16) NOT NULL COMMENT 'PROCESSING或SUCCEEDED', + `result_status` varchar(16) DEFAULT NULL COMMENT '成功业务结果;当前为VOIDED', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '命令创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '命令成功完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_finance_fee_command_idem` (`customer_id`,`operator_id`,`action`,`idempotency_key`), + KEY `idx_finance_fee_command_source` (`source_type`,`source_fee_id`,`source_version`,`created_at`), + CONSTRAINT `chk_finance_fee_command_action` CHECK ((`action` = _utf8mb4'VOID')), + CONSTRAINT `chk_finance_fee_command_source` CHECK ((`source_type` in (_utf8mb4'INBOUND_FEE',_utf8mb4'CONTAINER_FEE'))), + CONSTRAINT `chk_finance_fee_command_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCEEDED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Finance发起、Firstleg执行业务费用命令的幂等审计记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_fulfillment_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_fulfillment_task` ( + `id` bigint unsigned NOT NULL COMMENT '履约任务ID(雪花ID)', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `order_id` bigint unsigned NOT NULL COMMENT '订单服务中的订单逻辑ID,不建立跨库外键', + `order_no` varchar(32) NOT NULL COMMENT '订单号快照', + `order_snapshot_json` json NOT NULL COMMENT '创建履约任务时所需的订单业务快照', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING_ASSIGNMENT' COMMENT '履约状态:PENDING_ASSIGNMENT待指派、ASSIGNED已指派、PROCESSING处理中、COMPLETED已完成、CANCELLED已取消', + `assignee_id` bigint unsigned DEFAULT NULL COMMENT '当前负责人ID', + `assignee_name` varchar(64) DEFAULT NULL COMMENT '当前负责人名称快照', + `assigned_at` datetime(3) DEFAULT NULL COMMENT '最近指派时间', + `started_at` datetime(3) DEFAULT NULL COMMENT '开始履约时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '履约完成时间', + `created_by` bigint unsigned NOT NULL COMMENT '创建人或系统主体ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_task_tenant_order` (`tenant_id`,`order_id`), + KEY `idx_task_assignee_status` (`tenant_id`,`assignee_id`,`status`,`created_at`), + KEY `idx_task_tenant_created` (`tenant_id`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='头程履约任务表:接收订单事件后形成独立履约任务,管理指派、执行和完成状态'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_carton_label`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_carton_label` ( + `id` bigint unsigned NOT NULL COMMENT '实际箱唛头映射ID(雪花ID)', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `order_id` bigint unsigned NOT NULL COMMENT '订单服务订单ID快照', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '订单货物明细ID,不建立跨库外键', + `cargo_item_no` int unsigned NOT NULL COMMENT '订单货物明细序号快照', + `cargo_name` varchar(255) DEFAULT NULL COMMENT '货物名称快照', + `sku_code` varchar(128) DEFAULT NULL COMMENT '箱唛绑定的SKU快照;二维码内容不变', + `units_per_carton` int unsigned DEFAULT NULL COMMENT '每箱SKU数量快照;一件代发必须为正数', + `detail_package_count` int unsigned NOT NULL COMMENT '该订单货物明细箱数快照', + `inbound_code` varchar(40) NOT NULL COMMENT '入仓码快照', + `box_code` varchar(80) NOT NULL COMMENT '固定二维码内容:入仓码#总箱数-箱下标', + `total_carton_count` int unsigned NOT NULL COMMENT '首次分配时整单总箱数', + `carton_index` int unsigned NOT NULL COMMENT '整单从1开始的稳定箱下标', + `label_version` int unsigned NOT NULL DEFAULT '1' COMMENT '箱唛批次版本,从1递增', + `batch_status` varchar(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '批次状态:ACTIVE有效、VOID已作废', + `cargo_fingerprint` char(64) DEFAULT NULL COMMENT '影响标签字段的SHA-256指纹', + `voided_at` datetime(3) DEFAULT NULL COMMENT '批次作废时间', + `box_specification` varchar(255) NOT NULL COMMENT '订单箱规或货物明细描述快照', + `length_cm` decimal(12,3) DEFAULT NULL COMMENT '下单箱规长度cm快照', + `width_cm` decimal(12,3) DEFAULT NULL COMMENT '下单箱规宽度cm快照', + `height_cm` decimal(12,3) DEFAULT NULL COMMENT '下单箱规高度cm快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '首次分配时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carton_label_box_code` (`tenant_id`,`box_code`), + UNIQUE KEY `uk_carton_label_index` (`tenant_id`,`inbound_id`,`label_version`,`carton_index`), + KEY `idx_carton_label_detail` (`tenant_id`,`inbound_id`,`inbound_detail_id`), + KEY `fk_carton_label_inbound` (`inbound_id`), + KEY `idx_carton_label_active` (`tenant_id`,`inbound_id`,`batch_status`,`label_version`), + CONSTRAINT `fk_carton_label_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='首次打印前冻结的实际箱号与订单货物明细映射'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_carton_label_sku`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_carton_label_sku` ( + `id` bigint unsigned NOT NULL COMMENT '箱唛SKU快照ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `carton_label_id` bigint unsigned NOT NULL COMMENT '物理箱唛ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '订单货物明细ID', + `sku_code` varchar(128) NOT NULL COMMENT 'SKU编码快照', + `cargo_name` varchar(255) DEFAULT NULL COMMENT '货物名称快照', + `expected_quantity` int unsigned NOT NULL COMMENT '该物理箱内应收SKU数量', + `line_no` int unsigned NOT NULL COMMENT '箱内SKU展示顺序', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_carton_label_sku_detail` (`carton_label_id`,`inbound_detail_id`), + KEY `idx_carton_label_sku_code` (`tenant_id`,`inbound_id`,`sku_code`), + CONSTRAINT `fk_carton_label_sku_label` FOREIGN KEY (`carton_label_id`) REFERENCES `fl_inbound_carton_label` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='物理箱唛内的多SKU冻结快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_destination_snapshot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_destination_snapshot` ( + `id` bigint unsigned NOT NULL COMMENT '目的仓地址快照ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `destination_type` varchar(24) DEFAULT NULL COMMENT '目的仓类型', + `destination_code` varchar(32) DEFAULT NULL COMMENT '目的仓编码', + `destination_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称', + `country_code` char(2) DEFAULT NULL COMMENT '国家二字码', + `state_province` varchar(100) DEFAULT NULL COMMENT '省或州', + `city` varchar(100) DEFAULT NULL COMMENT '城市', + `address_line` varchar(512) DEFAULT NULL COMMENT '详细地址', + `postal_code` varchar(20) DEFAULT NULL COMMENT '邮编', + `contact_name` varchar(64) DEFAULT NULL COMMENT '联系人', + `contact_phone` varchar(32) DEFAULT NULL COMMENT '联系人电话', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_destination_inbound` (`tenant_id`,`inbound_id`), + KEY `fk_destination_inbound` (`inbound_id`), + CONSTRAINT `fk_destination_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单目的仓地址和联系人快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_fee`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_fee` ( + `id` bigint unsigned NOT NULL COMMENT '入库费用ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `measurement_id` bigint unsigned DEFAULT NULL COMMENT '璐圭敤缁戝畾鐨勬祴閲忔壒娆D蹇収', + `measurement_source` varchar(32) DEFAULT NULL COMMENT '璁¤垂灏哄鏉ユ簮蹇収锛歄UTER涓哄绠辫鏁版嵁', + `fee_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户内唯一费用单号', + `fee_version` int unsigned NOT NULL DEFAULT '1' COMMENT '费用快照版本', + `charge_rule_id` bigint unsigned DEFAULT NULL COMMENT '历史客户计费规则ID;渠道价格可为空', + `charge_rule_version` int unsigned DEFAULT NULL COMMENT '历史客户规则版本快照', + `carrier_rate_id` bigint unsigned DEFAULT NULL COMMENT '船司FBA价格ID;人工报价为空', + `carrier_rate_version` int unsigned DEFAULT NULL COMMENT '船司价格版本快照;人工报价为空', + `price_book_version_id` bigint unsigned DEFAULT NULL COMMENT '整表价格版本ID快照', + `rule_code` varchar(50) DEFAULT NULL COMMENT '历史客户规则编码快照', + `customer_id` bigint unsigned DEFAULT NULL COMMENT '可选业务客户快照;平台公共渠道计费不依赖该字段', + `customer_name` varchar(128) NOT NULL COMMENT '客户名称快照', + `business_type` varchar(32) NOT NULL COMMENT '业务类型快照', + `tax_mode` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '订单买单或退税模式快照', + `pricing_tax_mode` varchar(16) DEFAULT NULL COMMENT '报价包税维度快照', + `rounding_scale` tinyint unsigned DEFAULT NULL COMMENT '历史客户规则计费量保留位数快照', + `rounding_mode` varchar(24) DEFAULT NULL COMMENT '历史客户规则舍入方式快照', + `rule_effective_from` datetime(3) DEFAULT NULL COMMENT '历史客户规则生效开始快照', + `rule_effective_to` datetime(3) DEFAULT NULL COMMENT '客户规则生效结束快照', + `rate_code` varchar(50) NOT NULL COMMENT '船司价格编码快照', + `origin_warehouse_id` bigint unsigned NOT NULL COMMENT '起运仓ID快照', + `origin_warehouse_name` varchar(128) NOT NULL COMMENT '起运仓名称快照', + `channel_code` varchar(64) NOT NULL COMMENT '渠道编码快照', + `carrier_id` bigint unsigned DEFAULT NULL COMMENT '历史承运商ID;渠道价格可为空', + `carrier_name` varchar(128) DEFAULT NULL COMMENT '历史承运商名称;渠道价格可为空', + `destination_type` varchar(16) DEFAULT NULL COMMENT '目的地类型快照:FBA或OVERSEAS', + `destination_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '海外仓或FBA目的仓ID快照', + `destination_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `destination_code` varchar(32) DEFAULT NULL COMMENT 'FBA仓编码快照;海外仓可为空', + `rate_effective_from` datetime(3) DEFAULT NULL COMMENT '价格生效开始快照;人工报价为空', + `rate_effective_to` datetime(3) DEFAULT NULL COMMENT '价格生效结束快照', + `charge_mode` varchar(16) DEFAULT NULL COMMENT '计费口径:KG或CBM', + `conversion_factor` decimal(18,6) DEFAULT NULL COMMENT '历史客户规则使用的换算系数快照', + `actual_weight_kg` decimal(18,3) NOT NULL COMMENT '试算时实际重量kg', + `actual_volume_cbm` decimal(18,4) NOT NULL COMMENT '试算时实际体积m3', + `converted_quantity` decimal(18,4) NOT NULL COMMENT '换算后的重量或体积', + `chargeable_quantity` decimal(18,4) NOT NULL COMMENT '最终计费量', + `charge_unit` varchar(16) NOT NULL COMMENT '计费单位', + `currency` char(3) NOT NULL COMMENT '币种', + `subtotal_amount` decimal(18,2) NOT NULL COMMENT '基础费用金额', + `additional_amount` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '附加费金额', + `total_amount` decimal(18,2) NOT NULL COMMENT '总金额', + `fee_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'CALCULATED' COMMENT '费用状态:CALCULATED已计算、SUPERSEDED已被新版本替代', + `review_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NOT_SUBMITTED' COMMENT '费用审核状态:NOT_SUBMITTED未提交、PENDING待审核、APPROVED已通过、REJECTED已驳回、CONFIRMED已确认', + `exception_release` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否基于测量异常放行生成', + `calculated_by` bigint unsigned NOT NULL COMMENT '试算人ID', + `calculated_at` datetime(3) NOT NULL COMMENT '试算时间', + `confirmed_by` bigint unsigned DEFAULT NULL COMMENT '确认人ID', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '确认时间', + `sent_by` bigint unsigned DEFAULT NULL COMMENT '发送人ID', + `sent_at` datetime(3) DEFAULT NULL COMMENT '发送客户时间', + `customer_confirmed_by` bigint unsigned DEFAULT NULL COMMENT '瀹㈡埛纭浜虹敤鎴稩D', + `customer_confirmed_by_name` varchar(64) DEFAULT NULL COMMENT '瀹㈡埛纭浜哄悕绉板揩鐓�', + `customer_confirmed_at` datetime(3) DEFAULT NULL COMMENT '瀹㈡埛纭璐圭敤鏃堕棿锛涢潪绌哄悗璐圭敤鐗堟湰閿佸畾', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `baseline_chargeable_quantity` decimal(18,6) NOT NULL COMMENT '系统按权威测量与生效报价计算的原始计费量', + `tolerance_percent` decimal(5,2) NOT NULL DEFAULT '10.00' COMMENT '人工调整允许的最大偏差百分比,边界包含', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_fee_no` (`tenant_id`,`fee_no`), + UNIQUE KEY `uk_inbound_fee_version` (`tenant_id`,`inbound_id`,`fee_version`), + KEY `idx_inbound_fee_status` (`tenant_id`,`inbound_id`,`fee_status`,`review_status`), + KEY `fk_fee_inbound` (`inbound_id`), + KEY `fk_fee_charge_rule` (`charge_rule_id`), + KEY `fk_fee_carrier_rate` (`carrier_rate_id`), + CONSTRAINT `fk_fee_carrier_rate` FOREIGN KEY (`carrier_rate_id`) REFERENCES `fl_carrier_fba_rate` (`id`), + CONSTRAINT `fk_fee_charge_rule` FOREIGN KEY (`charge_rule_id`) REFERENCES `fl_customer_charge_rule` (`id`), + CONSTRAINT `fk_fee_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库头程费用计算和确认快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_fee_detail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_fee_detail` ( + `id` bigint unsigned NOT NULL COMMENT '入库费用明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID(客户隔离键);费用明细引用平台公共费用项目', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `fee_item_id` bigint unsigned NOT NULL COMMENT '绑定费用项目ID', + `source_type` varchar(32) NOT NULL DEFAULT 'MANUAL' COMMENT 'MANUAL或FBA_PRICING', + `source_fee_id` bigint unsigned DEFAULT NULL COMMENT '来源计费快照ID', + `source_fee_version` int unsigned DEFAULT NULL COMMENT '来源计费快照版本', + `source_fee_no` varchar(40) DEFAULT NULL COMMENT '来源费用单号', + `inbound_code` varchar(40) NOT NULL COMMENT '入仓码快照', + `direction` varchar(16) NOT NULL COMMENT 'RECEIVABLE应收、PAYABLE应付', + `business_date` date NOT NULL COMMENT '业务发生日', + `customer_id` bigint unsigned DEFAULT NULL COMMENT '客户ID快照', + `customer_name` varchar(128) DEFAULT NULL COMMENT '客户公司名称快照', + `invoice_title` varchar(256) DEFAULT NULL COMMENT '发票抬头快照', + `fee_category_snapshot` varchar(64) NOT NULL COMMENT '费用分类快照', + `trade_scope_snapshot` varchar(20) NOT NULL COMMENT '国内国际快照', + `fee_type_name_snapshot` varchar(128) NOT NULL COMMENT '费用类型名称快照', + `channel_code` varchar(64) DEFAULT NULL COMMENT '渠道编码快照', + `channel_name` varchar(128) DEFAULT NULL COMMENT '渠道名称快照', + `destination_code` varchar(32) DEFAULT NULL COMMENT '目的仓编码快照', + `destination_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `package_count` int DEFAULT NULL COMMENT '件数快照', + `actual_gross_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '仓库实测毛重快照,单位千克', + `actual_volume_cbm` decimal(18,6) DEFAULT NULL COMMENT '实际体积快照,单位立方米', + `volume_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '材积重快照,单位千克', + `chargeable_weight_kg` decimal(18,4) DEFAULT NULL COMMENT '费用计算采用的计费重量,单位千克', + `chargeable_volume_cbm` decimal(18,6) DEFAULT NULL COMMENT '费用计算采用的计费体积,单位立方米', + `chargeable_quantity` decimal(18,4) DEFAULT NULL COMMENT '本费用最终计费量', + `charge_unit` varchar(16) DEFAULT NULL COMMENT 'KG或CBM', + `unit_price` decimal(18,4) NOT NULL COMMENT '费用单价;计价单位由对应费用项目规则确定', + `currency` char(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '金额币种三字码,如CNY', + `amount` decimal(18,2) NOT NULL COMMENT '该费用明细金额,币种由currency字段指定', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `review_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '审核状态:PENDING待审核、APPROVED已通过、REJECTED已驳回', + `reviewer_id` bigint DEFAULT NULL COMMENT '审核人ID', + `reviewer_name` varchar(64) DEFAULT NULL COMMENT '审核人名称快照', + `reviewed_at` datetime(3) DEFAULT NULL COMMENT '审核时间', + `review_reason` varchar(500) DEFAULT NULL COMMENT '审核驳回原因', + `publication_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'DRAFT' COMMENT '费用发布状态:DRAFT草稿、PUBLISHED已发布、SUPERSEDED已替代', + `published_by` bigint DEFAULT NULL COMMENT '发布人ID', + `published_by_name` varchar(64) DEFAULT NULL COMMENT '发布人名称快照', + `published_at` datetime(3) DEFAULT NULL COMMENT '发布时间', + `inbounded_at` datetime(3) DEFAULT NULL COMMENT '入库完成时间快照', + `settlement_included` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否参与结算', + `created_by` bigint DEFAULT NULL COMMENT '创建人或系统主体ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint DEFAULT NULL COMMENT '最后修改人或系统主体ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记:0未删除、1已删除', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `paid_at` datetime(3) DEFAULT NULL COMMENT 'DIRECT_PAID业务已付时间', + `payment_method` varchar(32) DEFAULT NULL COMMENT 'DIRECT_PAID付款方式', + `payment_reference_no` varchar(128) DEFAULT NULL COMMENT 'DIRECT_PAID付款流水号', + `payment_voucher_file_ids` json DEFAULT NULL COMMENT 'DIRECT_PAID付款凭证File ID数组', + `settlement_mode` varchar(16) DEFAULT NULL COMMENT '仅PAYABLE:ON_ACCOUNT或DIRECT_PAID', + `supplier_category` varchar(16) DEFAULT NULL COMMENT '费用项目供应商类别约束快照;为空表示任意启用供应商', + `supplier_id` bigint unsigned DEFAULT NULL COMMENT '应付Warehouse供应商ID快照;应收为空', + `supplier_name` varchar(200) DEFAULT NULL COMMENT '应付Warehouse供应商名称快照;应收为空', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_fee_source` (`tenant_id`,`source_type`,`source_fee_id`), + KEY `idx_inbound_fee_detail` (`tenant_id`,`inbound_id`,`business_date`,`deleted`), + KEY `idx_inbound_fee_review` (`tenant_id`,`review_status`,`business_date`,`deleted`), + KEY `idx_inbound_fee_item` (`tenant_id`,`fee_item_id`,`deleted`), + KEY `fk_inbound_fee_detail_order` (`inbound_id`), + KEY `fk_inbound_fee_detail_item` (`fee_item_id`), + KEY `idx_inbound_fee_published` (`tenant_id`,`inbound_id`,`publication_status`,`source_fee_version`), + CONSTRAINT `fk_inbound_fee_detail_item` FOREIGN KEY (`fee_item_id`) REFERENCES `fl_fee_item` (`id`), + CONSTRAINT `fk_inbound_fee_detail_order` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单应收应付费用明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_fee_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_fee_item` ( + `id` bigint unsigned NOT NULL COMMENT '费用明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `fee_id` bigint unsigned NOT NULL COMMENT '费用头ID', + `item_no` int unsigned NOT NULL COMMENT '费用单内序号', + `fee_code` varchar(50) NOT NULL COMMENT '费用项目编码', + `fee_name` varchar(128) NOT NULL COMMENT '费用项目名称快照', + `quantity` decimal(18,4) NOT NULL COMMENT '计费数量', + `unit` varchar(16) NOT NULL COMMENT '计费单位', + `unit_price` decimal(18,6) NOT NULL COMMENT '单价', + `amount` decimal(18,2) NOT NULL COMMENT '金额', + `currency` char(3) NOT NULL COMMENT '币种', + `automatic_flag` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否自动计算', + `remark` varchar(500) DEFAULT NULL COMMENT '费用备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_fee_item_no` (`tenant_id`,`fee_id`,`item_no`), + KEY `fk_fee_item_header` (`fee_id`), + CONSTRAINT `fk_fee_item_header` FOREIGN KEY (`fee_id`) REFERENCES `fl_inbound_fee` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库头程费用项目明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_file`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_file` ( + `id` bigint unsigned NOT NULL COMMENT '入库单文件关系ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `file_id` bigint unsigned NOT NULL COMMENT '文件服务文件ID', + `file_type` varchar(24) NOT NULL COMMENT '文件类型:RELATED、MARK、PC_ORDER、MEASURE或WEIGHT', + `file_name_snapshot` varchar(255) NOT NULL COMMENT '文件名快照', + `visibility` varchar(16) NOT NULL DEFAULT 'INTERNAL' COMMENT '可见范围', + `file_version` int unsigned NOT NULL DEFAULT '1' COMMENT '业务文件版本', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传人ID', + `uploaded_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_file_relation` (`tenant_id`,`inbound_id`,`file_id`,`file_type`), + KEY `idx_inbound_file_type` (`tenant_id`,`inbound_id`,`file_type`,`deleted`), + KEY `fk_file_inbound` (`inbound_id`), + CONSTRAINT `fk_file_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单与文件中心对象的分类关系'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_hold_record`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_hold_record` ( + `id` bigint unsigned NOT NULL COMMENT '扣货记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `hold_action` varchar(16) NOT NULL COMMENT '动作:HOLD或RELEASE', + `reason` varchar(1000) NOT NULL COMMENT '扣货或解除原因', + `evidence_file_id` bigint unsigned DEFAULT NULL COMMENT '证据文件ID', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `operated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + KEY `idx_hold_inbound_time` (`tenant_id`,`inbound_id`,`operated_at`), + KEY `fk_hold_inbound` (`inbound_id`), + CONSTRAINT `fk_hold_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单扣货和解除扣货不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_idempotency`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_idempotency` ( + `id` bigint unsigned NOT NULL COMMENT '入库写操作幂等记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `operation` varchar(40) NOT NULL COMMENT '操作类型', + `operator_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '操作者或外部应用ID', + `inbound_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '入库单ID,创建前可为0', + `idempotency_key` varchar(128) NOT NULL COMMENT '幂等键', + `request_hash` char(64) NOT NULL COMMENT '请求内容摘要', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '幂等处理状态:PROCESSING处理中、SUCCEEDED已成功、FAILED已失败', + `result_json` json DEFAULT NULL COMMENT '成功结果摘要', + `result_resource_id` bigint unsigned DEFAULT NULL COMMENT '成功结果资源ID', + `completed_at` datetime(3) DEFAULT NULL COMMENT '完成时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_idempotency` (`tenant_id`,`operation`,`operator_id`,`idempotency_key`), + KEY `idx_inbound_idempotency_created` (`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='第三方测量、审核、费用发送和入库写操作幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_internal_note`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_internal_note` ( + `id` bigint unsigned NOT NULL COMMENT '客服内部备注ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `content` varchar(2000) NOT NULL COMMENT '仅内部可见备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_internal_note_time` (`tenant_id`,`inbound_id`,`created_at`), + KEY `fk_internal_note_inbound` (`inbound_id`), + CONSTRAINT `fk_internal_note_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单客服内部备注历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_loading_pick_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_loading_pick_task` ( + `id` bigint unsigned NOT NULL COMMENT '入库单级PDA拣货任务ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '关联入库单逻辑ID', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '任务状态:PENDING待拣货、IN_PROGRESS拣货中、COMPLETED已完成', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + `expected_count` int unsigned DEFAULT NULL COMMENT '计划应拣箱数', + `picked_count` int unsigned DEFAULT NULL COMMENT '实际已拣箱数', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '拣货结果或异常补充说明', + `updated_by` bigint unsigned NOT NULL COMMENT '最后操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'PDA拣货任务创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'PDA拣货任务最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pick_tenant_inbound` (`tenant_id`,`inbound_id`), + KEY `idx_loading_pick_status` (`tenant_id`,`status`,`updated_at`), + KEY `fk_loading_pick_inbound` (`inbound_id`), + CONSTRAINT `fk_loading_pick_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA拣货任务及结果'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_measurement`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_measurement` ( + `id` bigint unsigned NOT NULL COMMENT '测量批次ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `split_batch_id` bigint unsigned DEFAULT NULL COMMENT '产生该测量批次的入仓拆分批次ID', + `source_measurement_id` bigint unsigned DEFAULT NULL COMMENT '子单继承或复核时的来源测量批次ID', + `source_type` varchar(24) NOT NULL COMMENT '数据来源:THIRD_PARTY或MANUAL', + `source_code` varchar(64) DEFAULT NULL COMMENT '第三方应用或来源编码', + `external_event_no` varchar(128) DEFAULT NULL COMMENT '第三方事件号', + `external_request_hash` char(64) DEFAULT NULL COMMENT '第三方data原文和图片内容联合请求哈希', + `device_code` varchar(64) DEFAULT NULL COMMENT '测量设备编码', + `warehouse_code` varchar(50) DEFAULT NULL COMMENT '第三方回传仓库编码', + `measured_at` datetime(3) DEFAULT NULL COMMENT '设备测量时间', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'RECEIVED' COMMENT '测量批次状态:DRAFT草稿、RECEIVED已接收、SUBMITTED已提交、APPROVED已通过、REJECTED已驳回', + `raw_payload_json` json DEFAULT NULL COMMENT '第三方原始报文', + `original_document_no` varchar(64) DEFAULT NULL COMMENT '原单据号码快照', + `original_gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '原单据毛重kg', + `original_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '原单据体积或材积m3', + `actual_goods_name` varchar(255) DEFAULT NULL COMMENT '实际品名', + `total_package_count` int unsigned DEFAULT NULL COMMENT '本批次总箱数', + `total_volume_raw_cbm` decimal(18,6) DEFAULT NULL COMMENT '本批次原始总体积m3', + `total_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '本批次业务总体积m3', + `volume_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '本批次总材积重kg', + `created_by` bigint unsigned DEFAULT NULL COMMENT '创建人或系统主体ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_measure_external_event` (`tenant_id`,`source_code`,`external_event_no`), + KEY `idx_measure_inbound_time` (`tenant_id`,`inbound_id`,`created_at`), + KEY `fk_measure_inbound` (`inbound_id`), + KEY `fk_measure_split_batch` (`split_batch_id`), + KEY `fk_measure_source_batch` (`source_measurement_id`), + KEY `idx_measure_split_source` (`tenant_id`,`split_batch_id`,`source_measurement_id`,`created_at`), + CONSTRAINT `fk_measure_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_measure_source_batch` FOREIGN KEY (`source_measurement_id`) REFERENCES `fl_inbound_measurement` (`id`), + CONSTRAINT `fk_measure_split_batch` FOREIGN KEY (`split_batch_id`) REFERENCES `fl_inbound_split_batch` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库长宽高测量批次和第三方原始数据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_measurement_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_measurement_item` ( + `id` bigint unsigned NOT NULL COMMENT '测量明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `measurement_id` bigint unsigned NOT NULL COMMENT '测量批次ID', + `split_item_id` bigint unsigned DEFAULT NULL COMMENT '产生该子单测量明细的拆分台账ID', + `source_measurement_item_id` bigint unsigned DEFAULT NULL COMMENT '被拆分继承的来源测量箱规明细ID', + `inbound_detail_id` bigint unsigned DEFAULT NULL COMMENT '绑定的订单货物明细ID,平台手工明细可为空', + `external_detail_no` varchar(128) DEFAULT NULL COMMENT '第三方测量明细唯一号,平台手工明细可为空', + `box_code` varchar(128) DEFAULT NULL COMMENT '柏悦唛头箱号;设备单箱测量时同一客户内唯一', + `scanned_shipment_id` varchar(64) DEFAULT NULL COMMENT '设备从Amazon FBA箱标实扫的Shipment ID', + `item_no` varchar(32) NOT NULL COMMENT '批次内明细号', + `box_specification` varchar(64) NOT NULL COMMENT '箱规标识', + `package_count` int unsigned NOT NULL COMMENT '相同箱规箱数', + `length_cm` decimal(12,3) NOT NULL COMMENT '原始长度cm', + `width_cm` decimal(12,3) NOT NULL COMMENT '原始宽度cm', + `height_cm` decimal(12,3) NOT NULL COMMENT '原始高度cm', + `girth_cm` decimal(12,3) NOT NULL COMMENT '周长cm,规则为长+2*(宽+高)', + `unit_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '单箱重量kg,第三方仅回传尺寸时可为空', + `unit_volume_cbm` decimal(18,4) NOT NULL COMMENT '单箱业务体积m3', + `volume_raw_cbm` decimal(18,6) NOT NULL COMMENT '原始体积m3', + `volume_cbm` decimal(18,4) NOT NULL COMMENT '业务体积m3', + `total_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '本箱规总重量kg', + `total_volume_cbm` decimal(18,4) NOT NULL COMMENT '本箱规总体积m3', + `volume_weight_kg` decimal(18,3) NOT NULL COMMENT '本箱规材积重kg', + `charge_rule_id` bigint unsigned DEFAULT NULL COMMENT 'customer charge rule id', + `coefficient_mode` varchar(16) DEFAULT NULL COMMENT '系数模式快照:ADD或MULTIPLY', + `calculation_rule_version` varchar(64) NOT NULL COMMENT '体积计算和舍入规则版本', + `source_image_file_id` bigint unsigned DEFAULT NULL COMMENT '测量设备图片文件ID', + `machine_no` varchar(64) DEFAULT NULL COMMENT '本次测量设备编号', + `device_measured_at` datetime(3) DEFAULT NULL COMMENT '本次设备测量时间', + `over_limit_warning` varchar(500) DEFAULT NULL COMMENT '超线提醒快照', + `outer_length_cm` decimal(12,3) DEFAULT NULL COMMENT '外箱规长度cm', + `outer_width_cm` decimal(12,3) DEFAULT NULL COMMENT '外箱规宽度cm', + `outer_height_cm` decimal(12,3) DEFAULT NULL COMMENT '外箱规高度cm', + `manual_outer_length_cm` decimal(12,3) DEFAULT NULL COMMENT '浠撳簱浜哄伐澶栫瑙勯暱搴﹁绠楀熀鏁癱m', + `manual_outer_width_cm` decimal(12,3) DEFAULT NULL COMMENT '浠撳簱浜哄伐澶栫瑙勫搴﹁绠楀熀鏁癱m', + `manual_outer_height_cm` decimal(12,3) DEFAULT NULL COMMENT '浠撳簱浜哄伐澶栫瑙勯珮搴﹁绠楀熀鏁癱m', + `remark` varchar(500) DEFAULT NULL COMMENT '测量明细备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_measure_item_no` (`tenant_id`,`measurement_id`,`item_no`), + UNIQUE KEY `uk_measure_external_detail` (`tenant_id`,`inbound_detail_id`,`external_detail_no`), + UNIQUE KEY `uk_measure_box_code` (`tenant_id`,`box_code`), + KEY `fk_measure_item_batch` (`measurement_id`), + KEY `fk_measure_item_split_item` (`split_item_id`), + KEY `fk_measure_item_source_item` (`source_measurement_item_id`), + KEY `idx_measure_item_split_source` (`tenant_id`,`split_item_id`,`source_measurement_item_id`), + CONSTRAINT `fk_measure_item_batch` FOREIGN KEY (`measurement_id`) REFERENCES `fl_inbound_measurement` (`id`), + CONSTRAINT `fk_measure_item_source_item` FOREIGN KEY (`source_measurement_item_id`) REFERENCES `fl_inbound_measurement_item` (`id`), + CONSTRAINT `fk_measure_item_split_item` FOREIGN KEY (`split_item_id`) REFERENCES `fl_inbound_split_item` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库长宽高和箱数测量明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_order`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_order` ( + `id` bigint unsigned NOT NULL COMMENT '入库单ID(雪花ID)', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `task_id` bigint unsigned DEFAULT NULL COMMENT '头程履约任务ID', + `order_id` bigint unsigned NOT NULL COMMENT '订单服务订单ID,不建立跨库外键', + `order_no` varchar(32) NOT NULL COMMENT '订单号快照', + `inbound_code` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户内唯一入仓码', + `inbound_role` varchar(16) NOT NULL DEFAULT 'MASTER' COMMENT '入仓单层级:MASTER主单、CHILD子单', + `parent_inbound_id` bigint unsigned DEFAULT NULL COMMENT '直属主入仓单ID;主单为空', + `root_inbound_id` bigint unsigned DEFAULT NULL COMMENT '根主入仓单ID;存量主单可为空,按自身ID解释', + `split_sequence` int unsigned DEFAULT NULL COMMENT '同一主单下的子单顺序号', + `split_status` varchar(24) NOT NULL DEFAULT 'NOT_SPLIT' COMMENT '拆分状态:NOT_SPLIT、PARTIALLY_SPLIT、FULLY_SPLIT', + `process_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'WAIT_MEASURE' COMMENT '入库流程状态:WAIT_MEASURE待测量、MEASURING测量中、MEASURE_PENDING待审核、MEASURE_REJECTED测量驳回、WAIT_PRICING待计费、FEE_CONFIRMING费用确认中、INBOUNDING入库收口中、INBOUNDED已入库、WAIT_SPLIT历史待分柜', + `order_status_snapshot` varchar(24) NOT NULL COMMENT '订单状态快照', + `measure_review_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NOT_SUBMITTED' COMMENT '测量审核状态:NOT_SUBMITTED未提交、PENDING待审核、APPROVED已通过、REJECTED已驳回', + `fee_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'UNPRICED' COMMENT '费用状态:UNPRICED未计费、CALCULATED已计算、CONFIRMED已确认、SENT已发送、VOIDED已作废', + `fee_review_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NOT_SUBMITTED' COMMENT '费用审核状态:NOT_SUBMITTED未提交、PENDING待审核、APPROVED已通过、REJECTED已驳回、CONFIRMED已确认', + `notification_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NOT_CREATED' COMMENT '客户通知状态:NOT_CREATED未创建、PENDING待通知', + `expected_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到达时间', + `customer_id` bigint unsigned DEFAULT NULL COMMENT '客户逻辑ID', + `customer_name` varchar(128) NOT NULL COMMENT '客户名称快照', + `company_id` bigint unsigned DEFAULT NULL COMMENT '运营公司逻辑ID', + `company_name` varchar(128) DEFAULT NULL COMMENT '运营公司名称快照', + `warehouse_id` bigint unsigned NOT NULL COMMENT '实际作业仓库ID', + `warehouse_name` varchar(128) NOT NULL COMMENT '实际作业仓库名称快照', + `delivery_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '交货仓逻辑ID', + `delivery_warehouse_name` varchar(128) DEFAULT NULL COMMENT '交货仓名称快照', + `business_type` varchar(32) NOT NULL COMMENT '业务类型', + `fulfillment_type` varchar(32) NOT NULL DEFAULT 'STANDARD' COMMENT '履约类型:STANDARD普通头程、ONE_CLICK_DROPSHIP一键代发', + `lx_code` varchar(128) DEFAULT NULL COMMENT '一件代发领星入库单代码', + `channel_code` varchar(64) DEFAULT NULL COMMENT '渠道编码', + `channel_name` varchar(128) DEFAULT NULL COMMENT '渠道名称快照', + `carrier_id` bigint unsigned DEFAULT NULL COMMENT '计费船司逻辑ID', + `carrier_name` varchar(128) DEFAULT NULL COMMENT '计费船司名称快照', + `tax_mode` varchar(24) DEFAULT NULL COMMENT '买单或退税模式', + `pricing_tax_mode` varchar(16) DEFAULT NULL COMMENT '报价包税维度:TAX_INCLUDED/TAX_EXCLUDED', + `container_mode` varchar(24) DEFAULT NULL COMMENT '整柜或散货模式', + `customs_inspection` tinyint(1) DEFAULT NULL COMMENT '是否商检', + `destination_type` varchar(24) DEFAULT NULL COMMENT '目的仓类型', + `destination_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '目的仓逻辑ID', + `destination_code` varchar(32) DEFAULT NULL COMMENT '目的仓编码,例如FBA仓编码', + `destination_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `hold_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '当前是否扣货', + `current_hold_reason` varchar(500) DEFAULT NULL COMMENT '当前扣货理由快照', + `last_overseas_hold_version` bigint unsigned DEFAULT NULL COMMENT '海外暂扣事件最新聚合版本,用于阻止乱序覆盖', + `total_package_count` int unsigned DEFAULT NULL COMMENT '确认后的总箱数', + `package_count` int unsigned DEFAULT NULL COMMENT '入仓单箱数;三期唯一数量口径', + `split_purpose` varchar(16) NOT NULL DEFAULT 'MASTER' COMMENT '履约分片用途:MASTER、LOADED、REMAINDER', + `actual_gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '确认后的实际总毛重kg', + `chargeable_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '当前费用快照的计费重量kg', + `actual_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '确认后的实际总体积m3', + `chargeable_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '当前费用快照的计费体积m3', + `pallet_count` int unsigned DEFAULT NULL COMMENT '已分配总托盘数快照', + `volume_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '总材积重kg', + `actual_net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '总净重kg', + `measure_completed_at` datetime(3) DEFAULT NULL COMMENT '测量完成时间', + `inbounded_at` datetime(3) DEFAULT NULL COMMENT '入库完成时间', + `express_company_code` varchar(64) DEFAULT NULL COMMENT '快递公司编码快照', + `express_company_name` varchar(128) DEFAULT NULL COMMENT '快递公司名称快照', + `express_tracking_no` varchar(128) DEFAULT NULL COMMENT '快递单号快照', + `public_remark` varchar(1000) DEFAULT NULL COMMENT '客户可见备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `master_order_id` bigint unsigned GENERATED ALWAYS AS ((case when ((`inbound_role` = _utf8mb4'MASTER') and (`deleted` = 0)) then `order_id` else NULL end)) STORED COMMENT '仅用于约束有效主单订单唯一性', + `active_remainder_root_id` bigint unsigned GENERATED ALWAYS AS ((case when ((`inbound_role` = _utf8mb4'CHILD') and (`split_purpose` = _utf8mb4'REMAINDER') and (`split_status` = _utf8mb4'NOT_SPLIT') and (`deleted` = 0)) then `root_inbound_id` else NULL end)) STORED COMMENT '有效余量唯一约束键;历史已完成分片为空', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_code` (`inbound_code`), + UNIQUE KEY `uk_inbound_master_order` (`tenant_id`,`master_order_id`), + UNIQUE KEY `uk_inbound_parent_split_sequence` (`tenant_id`,`parent_inbound_id`,`split_sequence`), + UNIQUE KEY `uk_inbound_one_active_remainder` (`tenant_id`,`active_remainder_root_id`), + KEY `idx_inbound_process_time` (`tenant_id`,`process_status`,`created_at`,`id`), + KEY `idx_inbound_measure_time` (`tenant_id`,`measure_review_status`,`created_at`,`id`), + KEY `idx_inbound_fee_time` (`tenant_id`,`fee_review_status`,`created_at`,`id`), + KEY `idx_inbound_warehouse_status` (`tenant_id`,`warehouse_id`,`process_status`,`created_at`), + KEY `idx_inbound_customer_time` (`tenant_id`,`customer_id`,`created_at`), + KEY `idx_inbound_company_time` (`tenant_id`,`company_id`,`created_at`), + KEY `idx_inbound_arrival` (`tenant_id`,`expected_arrival_at`), + KEY `idx_inbound_destination` (`tenant_id`,`destination_code`,`created_at`), + KEY `idx_inbound_channel` (`tenant_id`,`channel_code`,`created_at`), + KEY `fk_inbound_task` (`task_id`), + KEY `idx_inbound_root_role` (`tenant_id`,`root_inbound_id`,`inbound_role`,`created_at`,`id`), + KEY `fk_inbound_parent_order` (`parent_inbound_id`), + KEY `fk_inbound_root_order` (`root_inbound_id`), + CONSTRAINT `fk_inbound_parent_order` FOREIGN KEY (`parent_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_root_order` FOREIGN KEY (`root_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_task` FOREIGN KEY (`task_id`) REFERENCES `fl_fulfillment_task` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='二期头程入库单聚合根和列表查询快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_outbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_outbox` ( + `id` bigint unsigned NOT NULL COMMENT '领域事件全局ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '事件所属客户ID和数据隔离键', + `aggregate_type` varchar(32) NOT NULL DEFAULT 'INBOUND' COMMENT '聚合类型', + `aggregate_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `event_type` varchar(64) NOT NULL COMMENT '事件类型', + `event_key` varchar(160) DEFAULT NULL COMMENT '费用来源事件幂等键;历史事件允许为空', + `event_version` int unsigned NOT NULL DEFAULT '1' COMMENT '事件信封版本', + `aggregate_sequence` int unsigned DEFAULT NULL COMMENT '同一费用来源的单调版本序号', + `payload_hash` varchar(71) DEFAULT NULL COMMENT '事件规范化负载SHA-256;标准跨区事件含sha256:前缀', + `payload_json` longtext NOT NULL COMMENT '事件负载快照;文本类型保留跨区事件摘要所依赖的数值词法', + `publish_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '事件发布状态:PENDING待发布、PUBLISHED已发布、FAILED发布失败', + `retry_count` int NOT NULL DEFAULT '0' COMMENT '重试次数', + `next_retry_at` datetime(3) DEFAULT NULL COMMENT '下次重试时间', + `published_at` datetime(3) DEFAULT NULL COMMENT '发布时间', + `locked_at` datetime(3) DEFAULT NULL COMMENT 'Relay抢占租约时间', + `locked_by` varchar(64) DEFAULT NULL COMMENT 'Relay抢占实例ID', + `last_error` varchar(500) DEFAULT NULL COMMENT '最近一次投递失败摘要,不记录令牌', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_outbox_event_key` (`event_key`), + KEY `idx_inbound_outbox_publish` (`publish_status`,`next_retry_at`,`created_at`), + KEY `idx_inbound_outbox_finance_relay` (`publish_status`,`next_retry_at`,`created_at`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库事务Outbox事件表'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_pallet_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_pallet_allocation` ( + `id` bigint unsigned NOT NULL COMMENT '头程托盘分配引用ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `allocation_no` int unsigned NOT NULL COMMENT '入库单内分配序号', + `block_id` bigint unsigned NOT NULL COMMENT 'Warehouse整票连续库位块ID', + `slot_no` int unsigned NOT NULL COMMENT '连续块内稳定槽位序号', + `weight_result_id` bigint unsigned DEFAULT NULL COMMENT '已绑定称重结果ID;预留空槽为空', + `pallet_sequence` int unsigned DEFAULT NULL COMMENT '已绑定称重托盘在整票内的稳定顺序;空槽为空', + `warehouse_id` bigint unsigned NOT NULL COMMENT '仓库服务仓库ID', + `warehouse_resource_tenant_id` bigint unsigned NOT NULL COMMENT '平台公共仓储资源固定使用 0;tenant_id 仍是客户隔离键', + `pallet_id` bigint unsigned NOT NULL COMMENT '仓库服务托盘ID', + `pallet_code` varchar(50) NOT NULL COMMENT '托盘编码快照', + `pallet_capacity_cbm` decimal(18,4) NOT NULL COMMENT '托盘可用容积快照', + `allocated_volume_cbm` decimal(18,4) NOT NULL COMMENT '本托盘分配体积', + `allocated_package_count` int unsigned DEFAULT NULL COMMENT '本托盘分配箱数', + `picked_package_count` int unsigned NOT NULL DEFAULT '0' COMMENT '已拣货箱数', + `location_id` bigint unsigned NOT NULL COMMENT '仓库服务库位ID', + `location_code` varchar(50) NOT NULL COMMENT '库位编码快照', + `shared_overflow` tinyint(1) NOT NULL DEFAULT '0' COMMENT '普通连续位不足时是否使用共享A0', + `reservation_id` bigint unsigned DEFAULT NULL COMMENT '仓库预占资源唯一ID,A0共享场景用于区分托盘', + `slot_status` varchar(24) NOT NULL DEFAULT 'RESERVED_EMPTY' COMMENT '槽位状态:RESERVED_EMPTY、BOUND、TRANSFERRED、RELEASED', + `reservation_no` varchar(64) NOT NULL COMMENT '仓库库位预占单号', + `allocation_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'RESERVED' COMMENT '托盘库位分配状态:RESERVED已预占、CONFIRMED已确认、TRANSFERRED已转移、RELEASED已释放', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_pallet_allocation_no` (`tenant_id`,`inbound_id`,`allocation_no`), + UNIQUE KEY `uk_pallet_allocation_slot` (`tenant_id`,`block_id`,`slot_no`), + UNIQUE KEY `uk_pallet_allocation_weight` (`tenant_id`,`weight_result_id`), + KEY `idx_allocation_location` (`tenant_id`,`warehouse_id`,`location_id`,`allocation_status`), + KEY `fk_allocation_inbound` (`inbound_id`), + KEY `idx_allocation_reservation` (`reservation_id`), + CONSTRAINT `fk_allocation_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='头程侧托盘、库位和仓库预占结果引用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_pickup_snapshot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_pickup_snapshot` ( + `id` bigint unsigned NOT NULL COMMENT '提货信息快照ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `pickup_method` varchar(24) DEFAULT NULL COMMENT '提货方式', + `pickup_at` datetime(3) DEFAULT NULL COMMENT '提货时间', + `contact_name` varchar(64) DEFAULT NULL COMMENT '提货联系人', + `contact_phone` varchar(32) DEFAULT NULL COMMENT '提货联系人电话', + `contact_email` varchar(128) DEFAULT NULL COMMENT '提货联系人邮箱', + `country_code` char(2) DEFAULT NULL COMMENT '国家二字码', + `province` varchar(64) DEFAULT NULL COMMENT '省或州', + `city` varchar(64) DEFAULT NULL COMMENT '城市', + `district` varchar(64) DEFAULT NULL COMMENT '区县', + `address_line` varchar(512) DEFAULT NULL COMMENT '提货详细地址', + `postal_code` varchar(20) DEFAULT NULL COMMENT '提货邮编', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_pickup_inbound` (`tenant_id`,`inbound_id`), + KEY `fk_pickup_inbound` (`inbound_id`), + CONSTRAINT `fk_pickup_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单提货信息不可变快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_split_batch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_split_batch` ( + `id` bigint unsigned NOT NULL COMMENT '拆分批次ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `parent_inbound_id` bigint unsigned NOT NULL COMMENT '主入仓单ID', + `source_inbound_id` bigint unsigned DEFAULT NULL COMMENT '本批次实际消耗的MASTER或REMAINDER分片ID', + `operation_id` varchar(64) NOT NULL COMMENT '业务操作幂等号', + `idempotency_key` varchar(128) NOT NULL COMMENT '请求幂等键', + `expected_parent_version` int NOT NULL COMMENT '操作时主单乐观锁版本', + `package_count` int unsigned NOT NULL COMMENT '本批次拆分箱数', + `loaded_child_inbound_id` bigint unsigned DEFAULT NULL COMMENT '本批次实装子单ID', + `remainder_child_inbound_id` bigint unsigned DEFAULT NULL COMMENT '本批次余量子单ID', + `loaded_package_count` int unsigned NOT NULL DEFAULT '0' COMMENT '本批次实装箱数', + `remaining_package_count` int unsigned NOT NULL DEFAULT '0' COMMENT '本批次未装箱数', + `loading_plan_id` bigint unsigned DEFAULT NULL COMMENT '关联装柜计划/柜次', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '关联柜次标识(兼容查询)', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PREPARED' COMMENT '拆分批次状态:PREPARED已准备、APPLIED已生效、CANCELLED已取消', + `remark` varchar(500) DEFAULT NULL COMMENT '拆分原因或备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '拆分批次创建时间', + `applied_at` datetime(3) DEFAULT NULL COMMENT '批次生效时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_split_operation` (`tenant_id`,`operation_id`), + UNIQUE KEY `uk_inbound_split_idempotency` (`tenant_id`,`parent_inbound_id`,`idempotency_key`), + UNIQUE KEY `uk_inbound_split_source_once` (`tenant_id`,`source_inbound_id`), + KEY `idx_inbound_split_parent` (`tenant_id`,`parent_inbound_id`,`created_at`,`id`), + KEY `fk_inbound_split_parent` (`parent_inbound_id`), + KEY `fk_inbound_split_loaded_child` (`loaded_child_inbound_id`), + KEY `fk_inbound_split_source` (`source_inbound_id`), + KEY `fk_inbound_split_remainder_child` (`remainder_child_inbound_id`), + KEY `idx_inbound_split_loading_plan` (`tenant_id`,`loading_plan_id`,`container_booking_id`,`status`,`id`), + CONSTRAINT `fk_inbound_split_loaded_child` FOREIGN KEY (`loaded_child_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_split_parent` FOREIGN KEY (`parent_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_split_remainder_child` FOREIGN KEY (`remainder_child_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_split_source` FOREIGN KEY (`source_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_inbound_split_package` CHECK ((`package_count` > 0)), + CONSTRAINT `chk_inbound_split_status` CHECK ((`status` in (_utf8mb4'PREPARED',_utf8mb4'APPLIED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='主入仓单拆分批次;数量口径仅为箱数'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_split_detail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_split_detail` ( + `id` bigint unsigned NOT NULL COMMENT '部分锁定明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `parent_inbound_id` bigint unsigned NOT NULL COMMENT '主入库单ID', + `child_inbound_id` bigint unsigned DEFAULT NULL COMMENT '完成拆单后生成的二级子入库单ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '原订单货物明细ID,不建立跨库外键', + `source_package_count` int unsigned NOT NULL COMMENT '拆分前该明细总箱数快照', + `locked_package_count` int unsigned NOT NULL COMMENT '本次装柜锁定箱数', + `remaining_package_count` int unsigned GENERATED ALWAYS AS ((`source_package_count` - `locked_package_count`)) STORED COMMENT '锁定后剩余箱数,由来源箱数减锁定箱数生成', + `status` varchar(16) NOT NULL DEFAULT 'LOCKED' COMMENT '分柜明细状态:LOCKED已锁定、COMPLETED已完成拆分', + `operation_id` varchar(128) NOT NULL COMMENT '部分锁定操作幂等号', + `created_by` bigint unsigned NOT NULL COMMENT '创建部分锁定明细的操作人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建操作人姓名快照', + `completed_by` bigint unsigned DEFAULT NULL COMMENT '完成拆分的操作人ID', + `completed_by_name` varchar(64) DEFAULT NULL COMMENT '完成操作人姓名快照', + `completed_at` datetime(3) DEFAULT NULL COMMENT '部分拆分完成时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '部分锁定明细创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '部分锁定明细最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_split_parent_detail` (`tenant_id`,`parent_inbound_id`,`inbound_detail_id`), + UNIQUE KEY `uk_inbound_split_operation` (`operation_id`), + UNIQUE KEY `uk_inbound_split_child_detail` (`tenant_id`,`child_inbound_id`,`inbound_detail_id`), + KEY `idx_inbound_split_status` (`tenant_id`,`parent_inbound_id`,`status`), + KEY `fk_inbound_split_detail_parent` (`parent_inbound_id`), + KEY `fk_inbound_split_detail_child` (`child_inbound_id`), + CONSTRAINT `fk_inbound_split_detail_child` FOREIGN KEY (`child_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_split_detail_parent` FOREIGN KEY (`parent_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_inbound_split_completion` CHECK ((((`status` = _utf8mb4'LOCKED') and (`child_inbound_id` is null) and (`completed_at` is null)) or ((`status` = _utf8mb4'COMPLETED') and (`child_inbound_id` is not null) and (`completed_at` is not null)))), + CONSTRAINT `chk_inbound_split_partial` CHECK (((`source_package_count` > 1) and (`locked_package_count` > 0) and (`locked_package_count` < `source_package_count`))), + CONSTRAINT `chk_legacy_inbound_split_status` CHECK ((`status` in (_utf8mb4'LOCKED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='按箱数部分锁定及剩余箱数生成二级子入库单的不可变契约'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_split_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_split_history` ( + `id` bigint unsigned NOT NULL COMMENT '拆分历史ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `split_batch_id` bigint unsigned NOT NULL COMMENT '拆分批次ID', + `operation_id` varchar(64) NOT NULL COMMENT '历史操作幂等号', + `action_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '拆分动作:CREATE创建批次、APPLY生效、CANCEL取消', + `before_snapshot` json DEFAULT NULL COMMENT '操作前快照', + `after_snapshot` json NOT NULL COMMENT '操作后快照', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `operation_reason` varchar(500) DEFAULT NULL COMMENT '操作原因', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '不可变拆分历史创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_split_history_operation` (`tenant_id`,`operation_id`), + KEY `idx_inbound_split_history` (`tenant_id`,`split_batch_id`,`created_at`,`id`), + KEY `fk_inbound_split_history_batch` (`split_batch_id`), + CONSTRAINT `fk_inbound_split_history_batch` FOREIGN KEY (`split_batch_id`) REFERENCES `fl_inbound_split_batch` (`id`), + CONSTRAINT `chk_inbound_split_action` CHECK ((`action_type` in (_utf8mb4'CREATE',_utf8mb4'APPLY',_utf8mb4'CANCEL'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='不可变主子入仓单拆分审计历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_split_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_split_item` ( + `id` bigint unsigned NOT NULL COMMENT '拆分明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `split_batch_id` bigint unsigned NOT NULL COMMENT '拆分批次ID', + `parent_inbound_id` bigint unsigned NOT NULL COMMENT '主入仓单ID', + `child_inbound_id` bigint unsigned NOT NULL COMMENT '子入仓单ID', + `line_no` int unsigned NOT NULL COMMENT '同一拆分批次内的行号', + `source_inbound_detail_id` bigint unsigned DEFAULT NULL COMMENT '订单货物明细逻辑ID', + `source_measurement_id` bigint unsigned NOT NULL COMMENT '来源测量批次ID', + `source_measurement_item_id` bigint unsigned NOT NULL COMMENT '来源测量箱规明细ID', + `package_count` int unsigned NOT NULL COMMENT '分配给子单的箱数', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '拆分数量台账创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_inbound_split_batch_line` (`tenant_id`,`split_batch_id`,`line_no`), + UNIQUE KEY `uk_inbound_split_batch_source_child` (`tenant_id`,`split_batch_id`,`source_measurement_item_id`,`child_inbound_id`), + KEY `idx_inbound_split_detail` (`tenant_id`,`source_inbound_detail_id`,`created_at`), + KEY `fk_inbound_split_item_batch` (`split_batch_id`), + KEY `fk_inbound_split_item_parent` (`parent_inbound_id`), + KEY `fk_inbound_split_item_child` (`child_inbound_id`), + KEY `fk_inbound_split_item_measurement` (`source_measurement_id`), + KEY `fk_inbound_split_item_measure_item` (`source_measurement_item_id`), + CONSTRAINT `fk_inbound_split_item_batch` FOREIGN KEY (`split_batch_id`) REFERENCES `fl_inbound_split_batch` (`id`), + CONSTRAINT `fk_inbound_split_item_child` FOREIGN KEY (`child_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_inbound_split_item_measure_item` FOREIGN KEY (`source_measurement_item_id`) REFERENCES `fl_inbound_measurement_item` (`id`), + CONSTRAINT `fk_inbound_split_item_measurement` FOREIGN KEY (`source_measurement_id`) REFERENCES `fl_inbound_measurement` (`id`), + CONSTRAINT `fk_inbound_split_item_parent` FOREIGN KEY (`parent_inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_inbound_split_item_package` CHECK ((`package_count` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='主子入仓单拆分数量台账'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_status_history` ( + `id` bigint unsigned NOT NULL COMMENT '入库状态历史ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `from_status` varchar(24) DEFAULT NULL COMMENT '变更前状态', + `to_status` varchar(24) NOT NULL COMMENT '变更后状态', + `action` varchar(32) NOT NULL COMMENT '触发动作', + `reason` varchar(1000) DEFAULT NULL COMMENT '变更原因', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `occurred_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '发生时间', + PRIMARY KEY (`id`), + KEY `idx_inbound_history_time` (`tenant_id`,`inbound_id`,`occurred_at`), + KEY `fk_history_inbound` (`inbound_id`), + CONSTRAINT `fk_history_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单流程状态不可变历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_transport_snapshot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_transport_snapshot` ( + `id` bigint unsigned NOT NULL COMMENT '运输信息快照ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `loading_status` varchar(24) DEFAULT NULL COMMENT '配载状态快照', + `container_no` varchar(64) DEFAULT NULL COMMENT '集装箱号', + `cabinet_no` varchar(64) DEFAULT NULL COMMENT '柜号或内部柜单号', + `vessel_name` varchar(128) DEFAULT NULL COMMENT '船名', + `voyage_no` varchar(64) DEFAULT NULL COMMENT '航次', + `sailing_at` datetime(3) DEFAULT NULL COMMENT '开船时间', + `port_arrival_at` datetime(3) DEFAULT NULL COMMENT '到港时间', + `source_updated_at` datetime(3) DEFAULT NULL COMMENT '上游数据更新时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_transport_inbound` (`tenant_id`,`inbound_id`), + KEY `idx_transport_container` (`tenant_id`,`container_no`), + KEY `idx_transport_cabinet` (`tenant_id`,`cabinet_no`), + KEY `idx_transport_loading` (`tenant_id`,`loading_status`,`sailing_at`), + KEY `fk_transport_inbound` (`inbound_id`), + CONSTRAINT `fk_transport_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单关联运输信息只读快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_weight_result`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_weight_result` ( + `id` bigint unsigned NOT NULL COMMENT 'OCR重量结果ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `file_id` bigint unsigned NOT NULL COMMENT '称重图片文件ID', + `pallet_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT 'Warehouse托盘ID', + `pallet_code` varchar(50) NOT NULL DEFAULT '' COMMENT '托盘编码快照', + `pallet_type` varchar(32) NOT NULL DEFAULT '' COMMENT '托盘类型快照', + `pallet_capacity_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000' COMMENT '托盘容量CBM快照', + `pallet_tare_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '托盘皮重KG快照', + `ocr_provider` varchar(64) DEFAULT NULL COMMENT 'OCR服务商编码', + `ocr_raw_text` varchar(1000) DEFAULT NULL COMMENT 'OCR原始文本', + `ocr_weight_value` decimal(18,3) DEFAULT NULL COMMENT 'OCR识别原始重量值', + `ocr_weight_unit` varchar(8) DEFAULT NULL COMMENT 'OCR识别原始单位', + `confidence` decimal(6,5) DEFAULT NULL COMMENT '识别置信度', + `adjusted_weight_value` decimal(18,3) DEFAULT NULL COMMENT '人工修正后的原单位重量', + `adjusted_weight_unit` varchar(8) DEFAULT NULL COMMENT '人工修正后的单位', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '确认时统一换算后的含托盘毛重kg', + `net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '确认毛重扣除托盘皮重后的货物净重kg', + `recognition_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '重量识别状态:PENDING待识别、PENDING_CONFIRM待确认、NEEDS_MANUAL需人工录入、CONFIRMED已确认', + `adjustment_reason` varchar(500) DEFAULT NULL COMMENT '人工修正原因', + `adjusted_by` bigint unsigned DEFAULT NULL COMMENT '修正人ID', + `adjusted_at` datetime(3) DEFAULT NULL COMMENT '修正时间', + `confirmed_by` bigint unsigned DEFAULT NULL COMMENT '确认人ID', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '确认时间', + `created_by` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL DEFAULT '0' COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_weight_inbound_file` (`tenant_id`,`inbound_id`,`file_id`), + KEY `idx_weight_inbound_status` (`tenant_id`,`inbound_id`,`recognition_status`), + KEY `fk_weight_inbound` (`inbound_id`), + KEY `idx_weight_inbound_pallet` (`tenant_id`,`inbound_id`,`pallet_id`), + CONSTRAINT `fk_weight_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='称重图片OCR原值、人工修正值和确认重量'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_inbound_weight_revision`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_inbound_weight_revision` ( + `id` bigint unsigned NOT NULL COMMENT 'OCR重量修订记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `weight_result_id` bigint unsigned NOT NULL COMMENT 'OCR重量结果ID', + `revision_no` int unsigned NOT NULL COMMENT '结果版本号,与乐观锁版本一致', + `action` varchar(24) NOT NULL COMMENT '动作:CORRECT或CONFIRM', + `before_weight_value` decimal(18,3) DEFAULT NULL COMMENT '变更前原单位重量', + `before_weight_unit` varchar(8) DEFAULT NULL COMMENT '变更前单位', + `after_weight_value` decimal(18,3) DEFAULT NULL COMMENT '变更后原单位重量', + `after_weight_unit` varchar(8) DEFAULT NULL COMMENT '变更后单位', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '确认时统一换算后的含托盘毛重kg', + `net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '确认毛重扣除托盘皮重后的货物净重kg', + `reason` varchar(500) DEFAULT NULL COMMENT '人工修正原因', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `operated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_weight_revision_no` (`tenant_id`,`weight_result_id`,`revision_no`), + KEY `idx_weight_revision_time` (`tenant_id`,`inbound_id`,`operated_at`), + KEY `fk_weight_revision_inbound` (`inbound_id`), + KEY `fk_weight_revision_result` (`weight_result_id`), + CONSTRAINT `fk_weight_revision_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_weight_revision_result` FOREIGN KEY (`weight_result_id`) REFERENCES `fl_inbound_weight_result` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='OCR重量人工修正和确认的不可变版本历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_cabinet_evidence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_cabinet_evidence` ( + `id` bigint unsigned NOT NULL COMMENT '柜次证据记录ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '证据唯一归属柜次ID', + `source_task_id` bigint unsigned NOT NULL COMMENT '上传来源PDA任务ID,仅用于审计', + `evidence_type` varchar(32) NOT NULL COMMENT '四步照片或带锁码照类型', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件ID', + `file_name` varchar(255) NOT NULL COMMENT '文件名称快照', + `seal_no` varchar(64) DEFAULT NULL COMMENT '带锁码照对应锁码', + `remark` varchar(1000) DEFAULT NULL COMMENT '证据备注', + `status` varchar(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '证据状态:ACTIVE有效、VOID作废', + `active_flag` tinyint unsigned DEFAULT '1' COMMENT '有效唯一标识;作废后置NULL', + `operation_key` varchar(128) NOT NULL COMMENT '任务范围内幂等操作键', + `request_hash` char(64) NOT NULL COMMENT '规范化请求SHA-256摘要', + `void_reason` varchar(500) DEFAULT NULL COMMENT '作废原因', + `voided_by` bigint unsigned DEFAULT NULL COMMENT '作废操作人ID', + `voided_by_name` varchar(128) DEFAULT NULL COMMENT '作废操作人名称快照', + `voided_at` datetime(3) DEFAULT NULL COMMENT '作废时间', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本', + `created_by` bigint unsigned NOT NULL COMMENT '创建操作人ID', + `created_by_name` varchar(128) DEFAULT NULL COMMENT '创建操作人名称快照', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(128) DEFAULT NULL COMMENT '最后修改操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_cabinet_evidence_operation` (`source_task_id`,`operation_key`), + UNIQUE KEY `uk_cabinet_evidence_active` (`container_booking_id`,`evidence_type`,`active_flag`), + KEY `idx_cabinet_evidence_container` (`container_booking_id`,`status`), + KEY `idx_cabinet_evidence_seal` (`seal_no`,`active_flag`), + CONSTRAINT `fk_cabinet_evidence_booking` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `fk_cabinet_evidence_task` FOREIGN KEY (`source_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_cabinet_evidence_status` CHECK ((`status` in (_utf8mb4'ACTIVE',_utf8mb4'VOID'))), + CONSTRAINT `chk_cabinet_evidence_type` CHECK ((`evidence_type` in (_utf8mb4'PHOTO_STEP_1',_utf8mb4'PHOTO_STEP_2',_utf8mb4'PHOTO_STEP_3',_utf8mb4'PHOTO_STEP_4',_utf8mb4'SEAL'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次物理装柜证据;task仅记录来源审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_completion_checkpoint`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_completion_checkpoint` ( + `command_id` bigint unsigned NOT NULL COMMENT '可靠装柜完成命令ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '入库单客户ID', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `owner_sequence` int unsigned NOT NULL COMMENT '稳定处理顺序', + `checkpoint_stage` varchar(24) NOT NULL COMMENT '入库单处理检查点', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '检查点创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '检查点更新时间', + PRIMARY KEY (`command_id`,`tenant_id`,`inbound_id`), + KEY `idx_loading_completion_owner` (`command_id`,`owner_sequence`), + CONSTRAINT `fk_loading_completion_checkpoint_command` FOREIGN KEY (`command_id`) REFERENCES `fl_loading_completion_command` (`id`), + CONSTRAINT `chk_loading_completion_checkpoint` CHECK ((`checkpoint_stage` in (_utf8mb4'READY',_utf8mb4'SETTLED',_utf8mb4'INBOUND_COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA装柜完成按入库单恢复检查点'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_completion_command`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_completion_command` ( + `id` bigint unsigned NOT NULL COMMENT '可靠装柜完成命令ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT 'PDA任务ID', + `operation_id` varchar(128) NOT NULL COMMENT '客户端全局幂等操作ID', + `request_hash` char(64) NOT NULL COMMENT '规范化请求摘要', + `command_status` varchar(16) NOT NULL COMMENT 'PROCESSING、RETRYABLE、FAILED、COMPLETED', + `expected_task_version` int unsigned NOT NULL COMMENT '受理时客户端任务版本', + `remark` varchar(500) DEFAULT NULL COMMENT '完成备注', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `attempt_count` int unsigned NOT NULL DEFAULT '0' COMMENT 'worker认领次数', + `next_retry_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '下次处理时间', + `lease_owner` varchar(128) DEFAULT NULL COMMENT 'worker租约持有者', + `lease_until` datetime(3) DEFAULT NULL COMMENT 'worker租约截止时间', + `failure_stage` varchar(40) DEFAULT NULL COMMENT '脱敏失败阶段', + `failure_code` varchar(32) DEFAULT NULL COMMENT '下游或业务错误码', + `failure_request_id` varchar(64) DEFAULT NULL COMMENT '下游请求ID', + `failure_trace_id` varchar(64) DEFAULT NULL COMMENT '下游链路ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `completed_at` datetime(3) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_completion_operation` (`operation_id`), + KEY `idx_loading_completion_dispatch` (`command_status`,`next_retry_at`,`lease_until`), + KEY `fk_loading_completion_task` (`pick_task_id`), + CONSTRAINT `fk_loading_completion_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_completion_status` CHECK ((`command_status` in (_utf8mb4'PROCESSING',_utf8mb4'RETRYABLE',_utf8mb4'FAILED',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA装柜完成可靠异步命令'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_evidence`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_evidence` ( + `id` bigint unsigned NOT NULL COMMENT '装柜证据记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '关联入库单逻辑ID', + `evidence_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'PHOTO_STEP_1空仓/PHOTO_STEP_2半仓/PHOTO_STEP_3满仓/PHOTO_STEP_4锁仓/SEAL带锁码照', + `file_id` bigint unsigned DEFAULT NULL COMMENT 'File 服务逻辑文件ID', + `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '上传时文件名称快照', + `seal_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '锁码文本;带锁码照必填,客户不可见', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '证据补充说明', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + `created_by` bigint unsigned NOT NULL COMMENT '上传证据的操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '上传证据的操作人姓名快照', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '证据记录创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '证据记录最后更新时间', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '证据状态:ACTIVE有效、VOID已作废;错误照片保留记录不硬删除', + `void_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '照片作废原因', + `voided_by` bigint unsigned DEFAULT NULL COMMENT '执行作废的平台操作人ID', + `voided_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '执行作废的平台操作人姓名快照', + `voided_at` datetime(3) DEFAULT NULL COMMENT '照片作废时间', + PRIMARY KEY (`id`), + KEY `idx_loading_evidence_time` (`tenant_id`,`inbound_id`,`updated_at`), + KEY `fk_loading_evidence_inbound` (`inbound_id`), + KEY `idx_loading_evidence_type` (`tenant_id`,`inbound_id`,`evidence_type`,`status`), + KEY `idx_loading_evidence_seal` (`tenant_id`,`seal_no`,`status`), + CONSTRAINT `fk_loading_evidence_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订单装柜空仓/半仓/满仓/锁仓/带锁码照证据'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_operation` ( + `id` bigint unsigned NOT NULL COMMENT '装柜写操作记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '操作目标入库单逻辑ID', + `operator_id` bigint unsigned NOT NULL COMMENT '执行写操作的平台用户ID', + `operation` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '装柜或证据写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端幂等键,同一操作重试复用', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '幂等处理状态:PROCESSING处理中、SUCCESS成功、FAILED失败', + `result_json` json DEFAULT NULL COMMENT '成功结果或失败信息JSON快照,用于幂等重放', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作声明创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '操作完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_operation` (`tenant_id`,`inbound_id`,`operator_id`,`operation`,`idempotency_key`), + KEY `idx_loading_operation_time` (`tenant_id`,`inbound_id`,`created_at`), + KEY `fk_loading_operation_inbound` (`inbound_id`), + CONSTRAINT `fk_loading_operation_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='装柜与派送写操作幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pallet_label`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pallet_label` ( + `id` bigint unsigned NOT NULL COMMENT '散货托盘标签ID(雪花ID)', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID', + `loading_plan_item_id` bigint unsigned NOT NULL COMMENT '标签归属装柜明细ID', + `account_id` bigint unsigned NOT NULL COMMENT '客户ID快照', + `inbound_id` bigint unsigned NOT NULL COMMENT '入仓单ID快照', + `inbound_code` varchar(40) NOT NULL COMMENT '入仓码快照', + `container_no` varchar(64) NOT NULL COMMENT '真实集装箱号快照', + `destination_warehouse_code` varchar(64) NOT NULL COMMENT 'FBA仓编码快照', + `destination_warehouse_name` varchar(128) DEFAULT NULL COMMENT 'FBA仓名称快照', + `pallet_index` int unsigned NOT NULL COMMENT '当前柜当前FBA仓内从1开始的序号', + `pallet_code` varchar(128) NOT NULL COMMENT '托盘码:集装箱号-FBA仓编码-三位序号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '生成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pallet_code` (`pallet_code`), + UNIQUE KEY `uk_loading_pallet_index` (`loading_plan_id`,`destination_warehouse_code`,`pallet_index`), + KEY `idx_loading_pallet_item` (`loading_plan_item_id`,`pallet_index`), + KEY `idx_loading_pallet_inbound` (`account_id`,`inbound_id`), + CONSTRAINT `fk_loading_pallet_item` FOREIGN KEY (`loading_plan_item_id`) REFERENCES `fl_loading_plan_item` (`id`), + CONSTRAINT `fk_loading_pallet_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `chk_loading_pallet_index` CHECK ((`pallet_index` between 1 and 999)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='散货按柜号和FBA仓冻结的可打印托盘码'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_assignment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_assignment` ( + `pick_task_id` bigint unsigned NOT NULL COMMENT '柜次PDA拣货任务ID;同一任务仅保留一名作业员', + `assignee_id` bigint unsigned NOT NULL COMMENT '当前唯一作业员ID', + `assignee_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '当前作业员姓名快照', + `assigned_by` bigint unsigned NOT NULL COMMENT '领取任务的作业员或执行分配的平台用户ID', + `assigned_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '领取或分配操作人姓名快照', + `assignment_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '分配方式:CLAIMED作业员领取、ASSIGNED平台指派', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,防止多人并发领取或覆盖', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '任务领取或分配时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '作业员分配最后更新时间', + PRIMARY KEY (`pick_task_id`), + KEY `idx_loading_pick_assignee` (`assignee_id`,`updated_at`), + CONSTRAINT `fk_loading_pick_assignment_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_pick_assignment_type` CHECK ((`assignment_type` in (_utf8mb4'CLAIMED',_utf8mb4'ASSIGNED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次PDA任务领取与作业员分配'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_history` ( + `id` bigint unsigned NOT NULL COMMENT 'PDA拣货操作历史ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT 'PDA拣货任务ID', + `pick_item_id` bigint unsigned NOT NULL COMMENT 'PDA拣货明细ID', + `operation_id` varchar(128) NOT NULL COMMENT '客户端幂等操作号', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '完整批量请求内容SHA-256摘要', + `action_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PICK' COMMENT '拣货动作:PICK正常拣货、PARTIAL部分拣货、SKIP跳拣', + `picked_package_count` int unsigned NOT NULL COMMENT '本次拣货箱数', + `operation_reason` varchar(500) DEFAULT NULL COMMENT '部分拣货或跳拣原因', + `operator_id` bigint unsigned NOT NULL COMMENT '执行PDA拣货操作的作业员ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '作业员姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '不可变拣货操作历史创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pick_history_operation` (`operation_id`), + KEY `idx_loading_pick_history_item` (`pick_item_id`,`created_at`), + KEY `fk_loading_pick_history_task` (`pick_task_id`), + CONSTRAINT `fk_loading_pick_history_item` FOREIGN KEY (`pick_item_id`) REFERENCES `fl_loading_pick_item` (`id`), + CONSTRAINT `fk_loading_pick_history_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA拣货幂等和操作审计历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_item` ( + `id` bigint unsigned NOT NULL COMMENT 'PDA拣货明细ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT 'PDA拣货任务ID', + `loading_plan_item_id` bigint unsigned NOT NULL COMMENT '装柜计划明细ID', + `inbound_id` bigint unsigned NOT NULL COMMENT '父入库单ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '订单货物明细ID', + `planned_package_count` int unsigned NOT NULL COMMENT '计划拣货箱数;上层拆分按业务规则向上取整', + `picked_package_count` int unsigned NOT NULL DEFAULT '0' COMMENT '已拣货箱数', + `item_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '拣货明细状态:PENDING待拣、PICKING拣货中、PICKED已拣完、PARTIAL部分拣货、SKIPPED跳拣', + `release_mode` varchar(10) DEFAULT NULL COMMENT 'AUTO按比例释放,MANUAL按人工选择释放', + `release_location_ids` json DEFAULT NULL COMMENT '人工选择释放库位ID;空数组表示明确释放0个', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'PDA拣货明细创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 'PDA拣货明细最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pick_item_plan_item` (`loading_plan_item_id`), + KEY `idx_loading_pick_item_task` (`pick_task_id`,`item_status`,`id`), + CONSTRAINT `fk_loading_pick_item_plan_item` FOREIGN KEY (`loading_plan_item_id`) REFERENCES `fl_loading_plan_item` (`id`), + CONSTRAINT `fk_loading_pick_item_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_pick_item_count` CHECK ((`picked_package_count` <= `planned_package_count`)), + CONSTRAINT `chk_loading_pick_item_planned` CHECK ((`planned_package_count` > 0)), + CONSTRAINT `chk_loading_pick_item_status` CHECK ((`item_status` in (_utf8mb4'PENDING',_utf8mb4'PICKING',_utf8mb4'PICKED',_utf8mb4'PARTIAL',_utf8mb4'SKIPPED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA装柜拣货明细'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_item_assignment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_item_assignment` ( + `pick_item_id` bigint unsigned NOT NULL COMMENT 'PDA拣货明细ID,同时作为本表主键', + `assignee_id` bigint unsigned NOT NULL COMMENT '当前领取或被分配的作业员ID', + `assignee_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '当前作业员姓名快照', + `assigned_by` bigint unsigned NOT NULL COMMENT '执行领取或分配操作的用户ID', + `assigned_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '执行领取或分配操作的用户姓名快照', + `assignment_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '分配类型:CLAIMED作业员领取、ASSIGNED管理员分配', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '明细分配记录创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '明细分配记录最后更新时间', + PRIMARY KEY (`pick_item_id`), + KEY `idx_loading_pick_item_assignee` (`assignee_id`,`updated_at`), + CONSTRAINT `fk_loading_pick_item_assignment_item` FOREIGN KEY (`pick_item_id`) REFERENCES `fl_loading_pick_item` (`id`), + CONSTRAINT `chk_loading_pick_item_assignment_type` CHECK ((`assignment_type` in (_utf8mb4'CLAIMED',_utf8mb4'ASSIGNED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA拣货明细领取与作业员分配'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_operation` ( + `id` bigint unsigned NOT NULL COMMENT 'PDA任务操作审计记录ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT '关联柜次PDA拣货任务ID', + `operation_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '全局唯一操作ID,用于幂等重放', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '完整批量请求或任务操作内容SHA-256摘要', + `action_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '动作类型:CLAIM领取、ASSIGN分配、REVIEW复核、BATCH批量提交', + `operator_id` bigint unsigned NOT NULL COMMENT '执行PDA任务操作的用户ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '不可变操作审计创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pick_operation_id` (`operation_id`), + KEY `idx_loading_pick_operation_task` (`pick_task_id`,`created_at`), + CONSTRAINT `fk_loading_pick_operation_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_pick_operation_action` CHECK ((`action_type` in (_gbk'CLAIM',_gbk'ASSIGN',_gbk'ITEM_CLAIM',_gbk'ITEM_ASSIGN',_gbk'REVIEW',_gbk'BATCH',_gbk'COMPLETE_LOADING'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次PDA任务级幂等审计'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_review`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_review` ( + `pick_task_id` bigint unsigned NOT NULL COMMENT '已完成的柜次PDA拣货任务ID', + `review_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'APPROVED' COMMENT '复核状态:APPROVED已通过;记录创建后不可修改或删除', + `reviewed_by` bigint unsigned NOT NULL COMMENT '执行完成复核的平台用户ID', + `reviewed_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '复核人姓名快照', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'PDA任务复核备注', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '复核记录版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '复核通过时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '复核记录最后更新时间;正常业务不允许更新', + PRIMARY KEY (`pick_task_id`), + KEY `idx_loading_pick_reviewer` (`reviewed_by`,`created_at`), + CONSTRAINT `fk_loading_pick_review_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_pick_review_status` CHECK ((`review_status` = _utf8mb4'APPROVED')) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次PDA任务完成复核'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_pick_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_pick_task` ( + `id` bigint unsigned NOT NULL COMMENT 'PDA拣货任务ID', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '稳定柜次ID', + `cabinet_no` varchar(64) DEFAULT NULL COMMENT '稳定内部柜次号快照', + `container_no` varchar(64) DEFAULT NULL COMMENT '真实集装箱号;生成PDA任务前允许为空', + `task_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'LOADING' COMMENT 'PDA任务状态:LOADING拣货装柜中、COMPLETED已完成', + `started_by` bigint unsigned NOT NULL COMMENT '开始装柜人', + `started_by_name` varchar(64) DEFAULT NULL COMMENT '开始装柜人名称', + `started_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '开始时间', + `completed_by` bigint unsigned DEFAULT NULL COMMENT '完成装柜人', + `completed_by_name` varchar(64) DEFAULT NULL COMMENT '完成装柜人名称', + `completed_at` datetime(3) DEFAULT NULL COMMENT '完成时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_pick_task_plan` (`loading_plan_id`), + UNIQUE KEY `uk_loading_pick_task_booking` (`container_booking_id`), + KEY `idx_loading_pick_container` (`container_no`,`task_status`,`started_at`), + CONSTRAINT `fk_loading_pick_task_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `chk_loading_pick_task_status` CHECK ((`task_status` in (_utf8mb4'LOADING',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='PDA装柜拣货任务'; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `trg_loading_pick_task_before_update` BEFORE UPDATE ON `fl_loading_pick_task` FOR EACH ROW BEGIN IF OLD.task_status = 'COMPLETED' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '已完成PDA拣货任务不可修改'; END IF; IF NEW.loading_plan_id <> OLD.loading_plan_id OR NOT (NEW.container_booking_id <=> OLD.container_booking_id) OR NOT (NEW.cabinet_no <=> OLD.cabinet_no) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PDA拣货任务稳定归属不可修改'; END IF; IF NOT (OLD.task_status = 'LOADING' AND NEW.task_status IN ('LOADING', 'COMPLETED')) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'PDA拣货任务状态只允许完成'; END IF; END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +DROP TABLE IF EXISTS `fl_loading_plan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_plan` ( + `id` bigint unsigned NOT NULL COMMENT '智能装柜计划ID(雪花ID)', + `plan_no` varchar(40) NOT NULL COMMENT '平台唯一装柜计划号', + `container_booking_id` bigint unsigned NOT NULL COMMENT '货柜预订ID', + `plan_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'EDITING' COMMENT '装柜计划状态:EDITING编辑中、LOADING装柜中、COMPLETED装柜完成;建议须经人工确认', + `push_idempotency_key` varchar(128) DEFAULT NULL COMMENT '推送预装幂等键', + `preload_pushed_by` bigint unsigned DEFAULT NULL COMMENT '推送预装操作人ID', + `preload_pushed_by_name` varchar(64) DEFAULT NULL COMMENT '推送预装操作人名称快照', + `preload_pushed_at` datetime(3) DEFAULT NULL COMMENT '开始装柜并进入LOADING的时间', + `preload_completed_by` bigint unsigned DEFAULT NULL COMMENT '预装完成操作人ID', + `preload_completed_by_name` varchar(64) DEFAULT NULL COMMENT '预装完成操作人名称快照', + `preload_completed_at` datetime(3) DEFAULT NULL COMMENT '预装完成时间', + `confirmed_by` bigint unsigned DEFAULT NULL COMMENT '确认操作人ID', + `confirmed_by_name` varchar(64) DEFAULT NULL COMMENT '确认操作人名称快照', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '确认时间', + `remark` varchar(500) DEFAULT NULL COMMENT '平台装柜计划备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_by_name` varchar(64) DEFAULT NULL COMMENT '最后修改人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '装柜计划最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_plan_no` (`plan_no`), + UNIQUE KEY `uk_loading_plan_booking` (`container_booking_id`), + UNIQUE KEY `uk_loading_plan_push_key` (`push_idempotency_key`), + KEY `idx_loading_plan_status` (`plan_status`,`updated_at`,`id`), + CONSTRAINT `fk_loading_plan_booking` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_loading_plan_status` CHECK ((`plan_status` in (_utf8mb4'EDITING',_utf8mb4'LOADING',_utf8mb4'COMPLETED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台智能装柜计划与唯一预装状态源'; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_0900_ai_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `trg_loading_plan_after_update` AFTER UPDATE ON `fl_loading_plan` FOR EACH ROW BEGIN IF OLD.plan_status = 'LOADING' AND NEW.plan_status = 'COMPLETED' THEN UPDATE fl_loading_plan_item SET frozen_at = COALESCE(frozen_at, NEW.confirmed_at, CURRENT_TIMESTAMP(3)), frozen_by = COALESCE(frozen_by, NEW.updated_by), updated_by = NEW.updated_by, updated_by_name = NEW.updated_by_name, version = version + 1 WHERE loading_plan_id = NEW.id AND deleted = 0; UPDATE fl_loading_pick_task SET task_status = 'COMPLETED', completed_by = NEW.updated_by, completed_by_name = NEW.updated_by_name, completed_at = CURRENT_TIMESTAMP(3), version = version + 1 WHERE loading_plan_id = NEW.id AND task_status = 'LOADING'; END IF; END */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +DROP TABLE IF EXISTS `fl_loading_plan_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_plan_history` ( + `id` bigint unsigned NOT NULL COMMENT '装柜操作历史ID(雪花ID)', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '智能装柜计划ID', + `loading_plan_item_id` bigint unsigned DEFAULT NULL COMMENT '装柜计划明细ID', + `operation_id` varchar(128) NOT NULL COMMENT '操作幂等ID', + `action_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '动作类型:CREATE_PLAN创建计划、ADD_ITEM新增明细、ADJUST_ITEM调整明细、REMOVE_ITEM移除明细、START_LOADING开始装柜、COMPLETE_LOADING完成装柜、PICK_ITEM拣货', + `from_status` varchar(24) DEFAULT NULL COMMENT '变更前状态', + `to_status` varchar(24) DEFAULT NULL COMMENT '变更后状态', + `before_snapshot` json DEFAULT NULL COMMENT '变更前快照', + `after_snapshot` json DEFAULT NULL COMMENT '变更后快照', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `operation_reason` varchar(500) DEFAULT NULL COMMENT '操作原因', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_history_operation` (`operation_id`), + KEY `idx_loading_history_plan` (`loading_plan_id`,`created_at`,`id`), + KEY `idx_loading_history_item` (`loading_plan_item_id`,`created_at`,`id`), + CONSTRAINT `fk_loading_history_item` FOREIGN KEY (`loading_plan_item_id`) REFERENCES `fl_loading_plan_item` (`id`), + CONSTRAINT `fk_loading_history_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='智能装柜追加式不可变操作历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_plan_item`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_plan_item` ( + `id` bigint unsigned NOT NULL COMMENT '装柜计划明细ID(雪花ID)', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '智能装柜计划ID', + `account_id` bigint unsigned NOT NULL COMMENT '客户账号ID;装柜业务唯一客户归属字段', + `customer_name` varchar(128) NOT NULL COMMENT '客户名称快照', + `inbound_id` bigint unsigned NOT NULL COMMENT 'Firstleg入库单ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '订单货物或入库货物明细ID,不建立跨库外键', + `order_id` bigint unsigned NOT NULL COMMENT '订单服务订单ID快照,不建立跨库外键', + `order_no` varchar(32) NOT NULL COMMENT '订单号快照', + `inbound_code` varchar(40) NOT NULL COMMENT '入仓码快照', + `destination_warehouse_id` bigint unsigned DEFAULT NULL COMMENT '目的仓ID快照', + `destination_warehouse_code` varchar(64) DEFAULT NULL COMMENT '目的仓编码快照', + `destination_warehouse_name` varchar(128) DEFAULT NULL COMMENT '目的仓名称快照', + `sku_code` varchar(128) DEFAULT NULL COMMENT 'SKU编码快照', + `product_name_zh` varchar(255) DEFAULT NULL COMMENT '中文品名快照', + `product_name_en` varchar(255) DEFAULT NULL COMMENT '英文品名快照', + `product_image_file_id` bigint unsigned DEFAULT NULL COMMENT '产品图片File对象ID', + `product_image_url` varchar(1000) DEFAULT NULL COMMENT '产品图片访问地址快照', + `package_count` int unsigned NOT NULL COMMENT '本次装柜箱数', + `product_quantity` int unsigned DEFAULT NULL COMMENT '产品总数量', + `units_per_carton` int unsigned DEFAULT NULL COMMENT '每箱产品数', + `pallet_count` int unsigned DEFAULT NULL COMMENT '托盘数', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '本次装柜毛重kg', + `net_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '本次装柜净重kg', + `dimensional_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '本次装柜材积重kg', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '本次装柜体积m3', + `fba_tracking_no` varchar(128) DEFAULT NULL COMMENT 'FBA追踪号快照', + `shipment_no` varchar(128) DEFAULT NULL COMMENT '货件编号快照', + `shipping_mark` varchar(500) DEFAULT NULL COMMENT '唛头快照', + `load_sequence` int unsigned NOT NULL DEFAULT '0' COMMENT '装柜顺序', + `position_snapshot` json DEFAULT NULL COMMENT '智能装柜位置与摆放结果快照', + `internal_remark` varchar(1000) DEFAULT NULL COMMENT '平台内部备注', + `customer_remark` varchar(1000) DEFAULT NULL COMMENT '客户备注快照', + `warehouse_remark` varchar(1000) DEFAULT NULL COMMENT '仓库备注快照', + `frozen_at` datetime(3) DEFAULT NULL COMMENT '装柜完成后的永久冻结时间', + `frozen_by` bigint unsigned DEFAULT NULL COMMENT '冻结操作人ID', + `removed_by` bigint unsigned DEFAULT NULL COMMENT '推送前逻辑删除操作人ID', + `removed_by_name` varchar(64) DEFAULT NULL COMMENT '推送前逻辑删除操作人名称快照', + `removed_at` datetime(3) DEFAULT NULL COMMENT '推送前逻辑删除时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '推送前逻辑删除标记;冻结后不可修改', + `active_inbound_detail_id` bigint unsigned GENERATED ALWAYS AS ((case when (`deleted` = 0) then `inbound_detail_id` else NULL end)) STORED COMMENT '未删除明细唯一锁;删除后返回NULL释放分配资格', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_by_name` varchar(64) DEFAULT NULL COMMENT '最后修改人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '装柜明细最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `unit_type` varchar(24) NOT NULL DEFAULT 'PACKAGE' COMMENT '分配单元:PACKAGE普通箱、SEALED_PALLET一件代发封托', + `pallet_id` bigint unsigned DEFAULT NULL COMMENT '一件代发封托ID;普通箱为空', + `pallet_no` varchar(32) DEFAULT NULL COMMENT '一件代发系统托盘码快照', + `indivisible` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否为不可拆整托单元', + `customer_service_remark` varchar(1000) DEFAULT NULL COMMENT '客服备注快照', + `active_assignment_key` varchar(96) GENERATED ALWAYS AS ((case when (`deleted` = 0) then concat((case when (`pallet_id` is null) then _utf8mb4'D:0' else concat(_utf8mb4'P:',`pallet_id`) end),_utf8mb4':',`inbound_detail_id`) else NULL end)) STORED COMMENT '普通明细或已封托托盘明细的有效唯一锁', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_item_plan_detail` (`loading_plan_id`,`active_inbound_detail_id`), + KEY `idx_loading_item_active_detail` (`account_id`,`active_inbound_detail_id`), + KEY `idx_loading_item_plan` (`loading_plan_id`,`deleted`,`load_sequence`,`id`), + KEY `idx_loading_item_account` (`account_id`,`created_at`,`id`), + KEY `idx_loading_item_inbound` (`account_id`,`inbound_id`,`deleted`), + KEY `idx_loading_item_order` (`account_id`,`order_id`,`deleted`), + CONSTRAINT `fk_loading_item_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `chk_loading_item_account` CHECK ((`account_id` > 0)), + CONSTRAINT `chk_loading_item_deleted` CHECK ((`deleted` in (0,1))), + CONSTRAINT `chk_loading_item_package` CHECK ((`package_count` > 0)), + CONSTRAINT `chk_loading_item_pallet` CHECK (((`pallet_count` is null) or (`pallet_count` >= 0))), + CONSTRAINT `chk_loading_item_product_quantity` CHECK (((`product_quantity` is null) or (`product_quantity` > 0))), + CONSTRAINT `chk_loading_item_units` CHECK (((`units_per_carton` is null) or (`units_per_carton` > 0))), + CONSTRAINT `chk_loading_item_volume` CHECK (((`volume_cbm` is null) or (`volume_cbm` >= 0))), + CONSTRAINT `chk_loading_item_weight` CHECK ((((`gross_weight_kg` is null) or (`gross_weight_kg` >= 0)) and ((`net_weight_kg` is null) or (`net_weight_kg` >= 0)) and ((`dimensional_weight_kg` is null) or (`dimensional_weight_kg` >= 0)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='智能装柜客户货物明细;客户归属仅在明细层'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_work_pallet`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_work_pallet` ( + `id` bigint unsigned NOT NULL COMMENT '一件代发现场作业托盘ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT 'PDA装柜拣货任务ID', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID快照', + `warehouse_id` bigint unsigned NOT NULL COMMENT '作业仓库ID', + `warehouse_pallet_id` bigint unsigned DEFAULT NULL COMMENT '仓库实物托盘ID;未绑定仓库资源时为空', + `pallet_code` varchar(64) NOT NULL COMMENT '现场托盘号', + `open_operation_id` varchar(128) NOT NULL COMMENT '开托幂等操作号', + `seal_operation_id` varchar(128) DEFAULT NULL COMMENT '封托幂等操作号', + `pallet_status` varchar(16) NOT NULL DEFAULT 'OPEN' COMMENT '托盘状态:OPEN打托中、SEALED已封托、CANCELLED已取消', + `created_by` bigint unsigned NOT NULL COMMENT '创建操作人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建操作人名称快照', + `sealed_by` bigint unsigned DEFAULT NULL COMMENT '封托操作人ID', + `sealed_by_name` varchar(64) DEFAULT NULL COMMENT '封托操作人名称快照', + `sealed_at` datetime(3) DEFAULT NULL COMMENT '封托时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_work_pallet_code` (`pick_task_id`,`pallet_code`), + UNIQUE KEY `uk_loading_work_pallet_open_operation` (`open_operation_id`), + UNIQUE KEY `uk_loading_work_pallet_seal_operation` (`seal_operation_id`), + KEY `idx_loading_work_pallet_plan` (`loading_plan_id`,`pallet_status`,`id`), + CONSTRAINT `fk_loading_work_pallet_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `fk_loading_work_pallet_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_work_pallet_status` CHECK ((`pallet_status` in (_utf8mb4'OPEN',_utf8mb4'SEALED',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发PDA现场实际托盘;允许同托盘承载多个客户订单'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_loading_work_pallet_carton`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_loading_work_pallet_carton` ( + `id` bigint unsigned NOT NULL COMMENT '一件代发现场托盘箱唛绑定ID', + `pick_task_id` bigint unsigned NOT NULL COMMENT 'PDA装柜拣货任务ID', + `work_pallet_id` bigint unsigned NOT NULL COMMENT '现场作业托盘ID', + `loading_plan_item_id` bigint unsigned NOT NULL COMMENT '装柜计划货物明细ID', + `pick_item_id` bigint unsigned NOT NULL COMMENT 'PDA拣货明细ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '箱唛所属客户ID', + `inbound_id` bigint unsigned NOT NULL COMMENT '来源入仓单ID', + `inbound_detail_id` bigint unsigned NOT NULL COMMENT '来源入仓货物明细ID', + `carton_label_id` bigint unsigned NOT NULL COMMENT '稳定箱唛记录ID', + `box_code` varchar(80) NOT NULL COMMENT '稳定箱唛箱码快照', + `sku_code` varchar(128) NOT NULL COMMENT 'SKU编码快照', + `units_per_carton` int unsigned DEFAULT NULL COMMENT '每箱产品数量快照', + `bound_by` bigint unsigned NOT NULL COMMENT '最后绑定操作人ID', + `bound_by_name` varchar(64) DEFAULT NULL COMMENT '最后绑定操作人名称快照', + `operation_id` varchar(128) NOT NULL COMMENT '最近一次绑定或移托幂等操作号', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '首次上托时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后移托时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_loading_work_carton_task_label` (`pick_task_id`,`carton_label_id`), + UNIQUE KEY `uk_loading_work_carton_operation` (`operation_id`), + KEY `idx_loading_work_carton_pallet` (`work_pallet_id`,`sku_code`,`id`), + KEY `idx_loading_work_carton_plan_item` (`loading_plan_item_id`,`id`), + KEY `fk_loading_work_carton_pick_item` (`pick_item_id`), + KEY `fk_loading_work_carton_label` (`carton_label_id`), + CONSTRAINT `fk_loading_work_carton_label` FOREIGN KEY (`carton_label_id`) REFERENCES `fl_inbound_carton_label` (`id`), + CONSTRAINT `fk_loading_work_carton_pallet` FOREIGN KEY (`work_pallet_id`) REFERENCES `fl_loading_work_pallet` (`id`), + CONSTRAINT `fk_loading_work_carton_pick_item` FOREIGN KEY (`pick_item_id`) REFERENCES `fl_loading_pick_item` (`id`), + CONSTRAINT `fk_loading_work_carton_plan_item` FOREIGN KEY (`loading_plan_item_id`) REFERENCES `fl_loading_plan_item` (`id`), + CONSTRAINT `fk_loading_work_carton_task` FOREIGN KEY (`pick_task_id`) REFERENCES `fl_loading_pick_task` (`id`), + CONSTRAINT `chk_loading_work_carton_units` CHECK (((`units_per_carton` is null) or (`units_per_carton` > 0))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一件代发PDA逐箱上托事实;客户订单不合并但实际托盘可混托'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_measure_review_record`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_measure_review_record` ( + `id` bigint unsigned NOT NULL COMMENT '测量审核记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `measurement_id` bigint unsigned DEFAULT NULL COMMENT '被审核的测量批次ID', + `review_result` varchar(24) NOT NULL COMMENT '审核结果', + `review_reason` varchar(1000) DEFAULT NULL COMMENT '审核或驳回原因', + `exception_release` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否异常放行', + `release_reason` varchar(1000) DEFAULT NULL COMMENT '异常放行原因', + `allow_rejected_config` tinyint(1) NOT NULL DEFAULT '0' COMMENT '操作时Nacos异常放行开关值', + `reviewer_id` bigint unsigned NOT NULL COMMENT '审核人ID', + `reviewer_name` varchar(64) DEFAULT NULL COMMENT '审核人名称快照', + `reviewed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '审核时间', + PRIMARY KEY (`id`), + KEY `idx_review_inbound_time` (`tenant_id`,`inbound_id`,`reviewed_at`), + KEY `idx_review_exception_release` (`tenant_id`,`inbound_id`,`exception_release`,`reviewed_at`), + KEY `fk_review_inbound` (`inbound_id`), + KEY `fk_review_measurement` (`measurement_id`), + CONSTRAINT `fk_review_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_review_measurement` FOREIGN KEY (`measurement_id`) REFERENCES `fl_inbound_measurement` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='测量审核、驳回和异常放行不可变记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_mojia_measurement_receipt`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_mojia_measurement_receipt` ( + `id` bigint unsigned NOT NULL COMMENT '墨家联调收件记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `subject_id` bigint unsigned NOT NULL COMMENT '设备应用操作主体ID', + `box_code` varchar(128) NOT NULL COMMENT '设备扫描的原始箱码或不带#的SKU', + `inbound_code` varchar(64) DEFAULT NULL COMMENT '箱码命中后的权威入仓码;SKU记录为空', + `measurement_kind` varchar(16) NOT NULL DEFAULT 'BOX_LABEL' COMMENT '测量分流:BOX_LABEL箱唛;SKU一件代发SKU', + `scanned_shipment_id` varchar(64) DEFAULT NULL COMMENT '设备从Amazon FBA箱标实扫的Shipment ID', + `length_cm` decimal(12,3) NOT NULL COMMENT '设备实测长度cm', + `width_cm` decimal(12,3) NOT NULL COMMENT '设备实测宽度cm', + `height_cm` decimal(12,3) NOT NULL COMMENT '设备实测高度cm', + `weight_kg` decimal(18,3) NOT NULL COMMENT '设备实测重量kg', + `machine_no` varchar(64) NOT NULL COMMENT '设备编号', + `measured_at` datetime(3) NOT NULL COMMENT '设备测量时间或服务接收时间', + `image_file_id` bigint unsigned NOT NULL COMMENT 'File服务中的墨家联调图片ID', + `status` varchar(24) NOT NULL DEFAULT 'UNMATCHED' COMMENT '原始收件状态;SKU记录使用SKU_PENDING_SYNC', + `sync_status` varchar(24) DEFAULT NULL COMMENT 'SKU同步状态:PENDING/SYNCING/SUCCESS/FAILED', + `sync_failure_code` varchar(64) DEFAULT NULL COMMENT 'SKU同步失败业务码', + `sync_failure_reason` varchar(500) DEFAULT NULL COMMENT '脱敏后的SKU同步失败原因', + `lingxing_sku_id` varchar(128) DEFAULT NULL COMMENT '领星SKU内部标识', + `revision` int NOT NULL DEFAULT '1' COMMENT '当前测量版本号', + `match_failure_code` varchar(16) DEFAULT NULL COMMENT '正式箱唛业务匹配失败码', + `match_failure_reason` varchar(500) DEFAULT NULL COMMENT '脱敏后的箱唛匹配失败原因', + `request_id` varchar(128) DEFAULT NULL COMMENT '请求链路ID', + `trace_id` varchar(128) DEFAULT NULL COMMENT '调用链ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_mojia_receipt_status_time` (`tenant_id`,`status`,`created_at`), + KEY `idx_mojia_receipt_box_time` (`tenant_id`,`box_code`,`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='墨家模拟或未匹配入库单的原始测量收件箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking` ( + `id` bigint unsigned NOT NULL COMMENT '海运订舱ID', + `booking_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '平台海运订舱编号', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'DRAFT' COMMENT '订舱状态:DRAFT草稿、SUBMITTED已提交、CONFIRMED已确认、RELEASED已放舱、FAILED失败、CHANGE_PENDING船期待变更、CANCELLED已取消', + `customer_id` bigint unsigned DEFAULT NULL COMMENT '可选客户ID快照', + `customer_name` varchar(128) DEFAULT NULL COMMENT '可选客户名称快照', + `channel_code` varchar(64) DEFAULT NULL, + `channel_name` varchar(128) DEFAULT NULL, + `warehouse_id` bigint unsigned DEFAULT NULL, + `warehouse_name` varchar(128) DEFAULT NULL, + `bill_of_lading_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '提单号', + `shipping_company_id` bigint unsigned DEFAULT NULL COMMENT '船公司逻辑ID快照', + `shipping_company_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '船公司名称快照', + `carrier_code` varchar(16) DEFAULT NULL COMMENT '船司标准编码:MATSON/SML/ZIM/COSCO/EMC/HEDE/OTHER;发布前必填', + `booking_agent_id` bigint unsigned DEFAULT NULL COMMENT '订舱代理逻辑ID快照', + `booking_agent_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '订舱代理名称快照', + `vessel_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '当前确认船名快照', + `voyage_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '当前确认航次号快照', + `departure_port_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '起运港编码快照', + `departure_port_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '起运港名称快照', + `destination_port_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '目的港编码快照', + `destination_port_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '目的港名称快照', + `place_of_delivery` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最终交货地快照', + `service_term` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '运输服务条款快照', + `freight_term` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '海运费支付条款快照', + `estimated_sailing_at` datetime(3) DEFAULT NULL COMMENT '当前确认预计开船时间', + `estimated_arrival_at` datetime(3) DEFAULT NULL COMMENT '当前确认预计到港时间', + `pending_vessel_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '待确认变更船名', + `pending_voyage_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '待确认变更航次号', + `pending_estimated_sailing_at` datetime(3) DEFAULT NULL COMMENT '待确认变更预计开船时间', + `pending_estimated_arrival_at` datetime(3) DEFAULT NULL COMMENT '待确认变更预计到港时间', + `change_reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '船期变更原因', + `cancellation_reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '取消订舱原因', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '平台内部备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '订舱记录创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改操作人姓名快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '订舱记录最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ocean_booking_no` (`booking_no`), + KEY `idx_ocean_booking_customer` (`customer_id`,`status`,`updated_at`,`id`), + KEY `idx_ocean_booking_voyage` (`vessel_name`,`voyage_no`,`updated_at`), + CONSTRAINT `chk_ocean_booking_carrier_code` CHECK (((`carrier_code` is null) or (`carrier_code` in (_utf8mb4'MATSON',_utf8mb4'SML',_utf8mb4'ZIM',_utf8mb4'COSCO',_utf8mb4'EMC',_utf8mb4'HEDE',_utf8mb4'OTHER')))), + CONSTRAINT `chk_ocean_booking_customer` CHECK ((`customer_id` > 0)), + CONSTRAINT `chk_ocean_booking_pending_schedule` CHECK (((`pending_estimated_sailing_at` is null) or (`pending_estimated_arrival_at` is null) or (`pending_estimated_arrival_at` >= `pending_estimated_sailing_at`))), + CONSTRAINT `chk_ocean_booking_schedule` CHECK (((`estimated_sailing_at` is null) or (`estimated_arrival_at` is null) or (`estimated_arrival_at` >= `estimated_sailing_at`))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='独立海运订舱聚合;柜次仍由fl_container_booking承载'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_container_allocation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_container_allocation` ( + `id` bigint unsigned NOT NULL COMMENT '订舱柜次分配关系ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '所属海运订舱ID', + `requirement_id` bigint unsigned NOT NULL COMMENT '对应订舱箱型需求ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '明确引用现有柜次ID', + `allocated_by` bigint unsigned NOT NULL COMMENT '分配操作人ID', + `allocated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '分配操作人姓名快照', + `allocated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '柜次分配时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ocean_allocation_container` (`container_booking_id`), + KEY `idx_ocean_allocation_booking` (`ocean_booking_id`,`requirement_id`,`allocated_at`), + KEY `fk_ocean_allocation_requirement` (`requirement_id`), + CONSTRAINT `fk_ocean_allocation_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `fk_ocean_allocation_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `fk_ocean_allocation_requirement` FOREIGN KEY (`requirement_id`) REFERENCES `fl_ocean_booking_container_requirement` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订舱需求与现有柜次的唯一分配关系'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_container_requirement`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_container_requirement` ( + `id` bigint unsigned NOT NULL COMMENT '订舱箱型需求ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '所属海运订舱ID', + `container_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '所需集装箱尺寸类型编码', + `container_kind` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '所需集装箱箱种编码', + `capacity_cbm` decimal(18,4) NOT NULL DEFAULT '0.0000', + `max_weight_kg` decimal(18,3) NOT NULL DEFAULT '0.000', + `quantity` int unsigned NOT NULL COMMENT '该箱型箱种所需柜数', + `sort_no` int unsigned NOT NULL DEFAULT '0' COMMENT '订舱需求展示顺序', + PRIMARY KEY (`id`), + KEY `idx_ocean_requirement_booking` (`ocean_booking_id`,`sort_no`,`id`), + CONSTRAINT `fk_ocean_requirement_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `chk_ocean_requirement_quantity` CHECK ((`quantity` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订舱箱型箱种及数量需求'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_document`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_document` ( + `id` bigint unsigned NOT NULL COMMENT '订舱文件关联ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '所属海运订舱ID', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件逻辑ID', + `document_type` varchar(32) NOT NULL COMMENT '文件类型:BOOKING_CONFIRMATION订舱确认、BILL_OF_LADING提单', + `file_name` varchar(255) NOT NULL COMMENT 'File返回的原始文件名快照', + `file_hash` char(64) DEFAULT NULL COMMENT 'File返回的SHA-256快照', + `size_bytes` bigint unsigned DEFAULT NULL COMMENT 'File返回的文件大小快照', + `content_type` varchar(128) DEFAULT NULL COMMENT 'File返回的内容类型快照', + `valid` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否为有效文件关联', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传或关联操作人ID', + `uploaded_by_name` varchar(64) DEFAULT NULL COMMENT '上传或关联操作人姓名快照', + `uploaded_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传或关联时间', + `invalidated_by` bigint unsigned DEFAULT NULL COMMENT '作废操作人ID', + `invalidated_by_name` varchar(64) DEFAULT NULL COMMENT '作废操作人姓名快照', + `invalidated_at` datetime(3) DEFAULT NULL COMMENT '作废时间', + PRIMARY KEY (`id`), + KEY `idx_ocean_document_booking` (`ocean_booking_id`,`valid`,`uploaded_at`,`id`), + KEY `idx_ocean_document_file` (`file_id`), + CONSTRAINT `fk_ocean_document_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`) ON DELETE CASCADE, + CONSTRAINT `chk_ocean_document_type` CHECK ((`document_type` in (_utf8mb4'BOOKING_CONFIRMATION',_utf8mb4'BILL_OF_LADING'))), + CONSTRAINT `chk_ocean_document_valid` CHECK ((`valid` in (0,1))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订舱聚合拥有的订舱确认与提单文件关联'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_operation` ( + `id` bigint unsigned NOT NULL COMMENT '订舱写操作幂等记录ID', + `ocean_booking_id` bigint unsigned DEFAULT NULL COMMENT '关联海运订舱ID;创建请求完成前允许为空', + `operator_id` bigint unsigned NOT NULL COMMENT '发起写操作的平台操作人ID', + `operation` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '幂等写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端写操作幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要;用于识别同键不同请求', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '处理状态:PROCESSING处理中、SUCCESS成功', + `result_json` json DEFAULT NULL COMMENT '成功结果JSON快照;供幂等重放返回', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等记录创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '写操作成功完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ocean_operation` (`operator_id`,`operation`,`idempotency_key`), + KEY `idx_ocean_operation_booking` (`ocean_booking_id`,`created_at`), + CONSTRAINT `fk_ocean_operation_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `chk_ocean_operation_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='海运订舱写操作幂等与请求哈希'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_party`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_party` ( + `id` bigint unsigned NOT NULL COMMENT '订舱提单关系方ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '所属海运订舱ID', + `party_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '关系方类型:SHIPPER发货人、CONSIGNEE收货人、NOTIFY_PARTY通知人', + `party_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '关系方名称快照', + `address` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '关系方地址快照', + `contact_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '关系方联系人快照', + `contact_phone` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '关系方联系电话快照', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ocean_booking_party` (`ocean_booking_id`,`party_type`), + CONSTRAINT `fk_ocean_booking_party` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `chk_ocean_booking_party_type` CHECK ((`party_type` in (_utf8mb4'SHIPPER',_utf8mb4'CONSIGNEE',_utf8mb4'NOTIFY_PARTY'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订舱提单关系方快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_ocean_booking_status_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_ocean_booking_status_history` ( + `id` bigint unsigned NOT NULL COMMENT '订舱状态历史ID', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '所属海运订舱ID', + `from_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '变更前订舱状态;创建时为空', + `to_status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '变更后订舱状态', + `action` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '触发状态变更的业务动作', + `reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '状态变更原因', + `before_snapshot` json DEFAULT NULL COMMENT '状态变更前订舱数据快照;创建时为空', + `after_snapshot` json NOT NULL COMMENT '状态变更后订舱数据快照', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '状态历史创建时间', + PRIMARY KEY (`id`), + KEY `idx_ocean_history_booking` (`ocean_booking_id`,`created_at`,`id`), + CONSTRAINT `fk_ocean_history_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='海运订舱不可变状态历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_order_declaration_event`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_order_declaration_event` ( + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和隔离键', + `event_id` varchar(128) NOT NULL COMMENT '永久保留的Order Outbox事件ID', + `order_id` bigint unsigned NOT NULL COMMENT 'Order订单ID', + `order_version` int NOT NULL COMMENT '事件携带的Order聚合版本', + `request_hash` char(64) NOT NULL COMMENT '完整事件SHA-256,用于异参重放拒绝', + `consumed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`tenant_id`,`event_id`), + KEY `idx_order_declaration_event_order` (`tenant_id`,`order_id`,`order_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Order客户申报事件永久幂等账本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_order_declaration_snapshot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_order_declaration_snapshot` ( + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和隔离键', + `order_id` bigint unsigned NOT NULL COMMENT 'Order订单ID', + `event_id` varchar(128) NOT NULL COMMENT 'Order Outbox事件ID', + `order_version` int NOT NULL COMMENT 'Order聚合版本,严格单调消费', + `request_hash` char(64) NOT NULL COMMENT '完整事件SHA-256', + `customer_remark` varchar(1000) DEFAULT NULL COMMENT '客户备注快照', + `expected_arrival_at` datetime(3) DEFAULT NULL COMMENT '预计到仓时间快照', + `channel_code` varchar(64) NOT NULL COMMENT '渠道编码快照', + `channel_name` varchar(128) NOT NULL COMMENT '渠道名称快照', + `cargoes_json` json NOT NULL COMMENT '客户申报货物行完整快照,不覆盖实测事实', + `changes_json` json DEFAULT NULL COMMENT '本版本申报字段变化摘要', + `occurred_at` datetime(3) NOT NULL COMMENT 'Order事件发生时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + PRIMARY KEY (`tenant_id`,`order_id`), + UNIQUE KEY `uk_order_declaration_event` (`tenant_id`,`event_id`), + KEY `idx_order_declaration_version` (`tenant_id`,`order_id`,`order_version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Order客户申报版本快照;与箱码、实测、托盘、PDA和计费事实隔离'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_outbound_dispatch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_outbound_dispatch` ( + `id` bigint unsigned NOT NULL COMMENT '国内出仓调度记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `order_id` bigint unsigned NOT NULL COMMENT 'Order服务订单逻辑ID,不复制订单主数据', + `inbound_id` bigint unsigned NOT NULL COMMENT '关联入库单逻辑ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '关联柜次逻辑ID', + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'READY_FOR_DISPATCH' COMMENT '出仓状态:READY_FOR_DISPATCH待确认出仓、WAITING_FOR_LOADING等待装柜', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + `confirmed_by` bigint unsigned DEFAULT NULL COMMENT '确认国内出仓的操作人ID', + `confirmed_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '确认国内出仓的操作人姓名快照', + `confirmed_at` datetime(3) DEFAULT NULL COMMENT '国内出仓确认时间', + `reversed_by` bigint unsigned DEFAULT NULL COMMENT '撤销国内出仓的操作人ID', + `reversed_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '撤销国内出仓的操作人姓名快照', + `reversed_at` datetime(3) DEFAULT NULL COMMENT '国内出仓撤销时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '国内出仓调度备注', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '出仓调度记录创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '出仓调度记录最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_outbound_dispatch_owner` (`tenant_id`,`inbound_id`,`container_booking_id`), + KEY `idx_outbound_dispatch_order` (`tenant_id`,`order_id`,`updated_at`), + KEY `idx_outbound_dispatch_container` (`container_booking_id`,`status`,`updated_at`), + KEY `fk_outbound_dispatch_inbound` (`inbound_id`), + CONSTRAINT `fk_outbound_dispatch_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `fk_outbound_dispatch_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `chk_outbound_dispatch_status` CHECK ((`status` in (_utf8mb4'READY_FOR_DISPATCH',_utf8mb4'WAITING_FOR_LOADING'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='三期国内出仓派车状态,不重复创建出仓单'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_outbound_dispatch_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_outbound_dispatch_history` ( + `id` bigint unsigned NOT NULL COMMENT '出仓状态历史记录ID', + `dispatch_id` bigint unsigned NOT NULL COMMENT '关联国内出仓调度记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '关联入库单逻辑ID快照', + `container_booking_id` bigint unsigned NOT NULL COMMENT '关联柜次逻辑ID快照', + `action` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '出仓状态变更动作', + `from_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '变更前出仓状态;首次创建时为空', + `to_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '变更后出仓状态', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '状态变更原因或备注', + `operator_id` bigint unsigned NOT NULL COMMENT '执行状态变更的平台用户ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '执行状态变更的平台用户姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '状态历史创建时间', + PRIMARY KEY (`id`), + KEY `idx_outbound_dispatch_history` (`tenant_id`,`inbound_id`,`container_booking_id`,`created_at`,`id`), + KEY `fk_outbound_dispatch_history` (`dispatch_id`), + CONSTRAINT `fk_outbound_dispatch_history` FOREIGN KEY (`dispatch_id`) REFERENCES `fl_outbound_dispatch` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='国内出仓追加式审计历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_outbound_dispatch_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_outbound_dispatch_operation` ( + `id` bigint unsigned NOT NULL COMMENT '出仓幂等操作记录ID', + `dispatch_id` bigint unsigned DEFAULT NULL COMMENT '首次声明幂等键时允许为空', + `operator_id` bigint unsigned NOT NULL COMMENT '执行写操作的平台用户ID', + `operation` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '国内出仓写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端幂等键,同一操作重试复用', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '幂等处理状态:PROCESSING处理中、SUCCESS成功', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等声明创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '幂等操作完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_outbound_dispatch_operation` (`operator_id`,`operation`,`idempotency_key`), + KEY `idx_outbound_dispatch_operation_resource` (`dispatch_id`,`created_at`), + CONSTRAINT `fk_outbound_dispatch_operation` FOREIGN KEY (`dispatch_id`) REFERENCES `fl_outbound_dispatch` (`id`), + CONSTRAINT `chk_outbound_dispatch_operation_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='国内出仓写操作幂等声明'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_port_schedule`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_port_schedule` ( + `id` bigint unsigned NOT NULL COMMENT '港务船期记录ID', + `schedule_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '港务船期记录编号', + `customer_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `ocean_booking_id` bigint unsigned NOT NULL COMMENT '关联海运订舱ID', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '关联柜次ID;订舱整票船期时为空', + `source_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船期来源类型:MANUAL人工录入、CARRIER船公司、TERMINAL码头、API外部接口', + `source_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船期来源名称', + `source_ref` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '来源侧记录唯一引用或查询凭据摘要', + `vessel_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '船名快照', + `voyage_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '航次号快照', + `departure_port_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '起运港编码快照', + `departure_port_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '起运港名称快照', + `destination_port_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '目的港编码快照', + `destination_port_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '目的港名称快照', + `etd_at` datetime(3) DEFAULT NULL COMMENT '预计离港时间', + `eta_at` datetime(3) DEFAULT NULL COMMENT '预计到港时间', + `booking_cutoff_at` datetime(3) DEFAULT NULL COMMENT '截单时间', + `customs_cutoff_at` datetime(3) DEFAULT NULL COMMENT '截关时间', + `port_cutoff_at` datetime(3) DEFAULT NULL COMMENT '截港时间', + `observed_at` datetime(3) NOT NULL COMMENT '来源数据观测时间', + `expires_at` datetime(3) NOT NULL COMMENT '超过该时间即由API计算为过期', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '平台内部备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '船期记录创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改操作人姓名快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '船期记录最后更新时间', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_port_schedule_no` (`schedule_no`), + UNIQUE KEY `uk_port_schedule_source` (`source_type`,`source_name`,`source_ref`), + KEY `idx_port_schedule_customer` (`customer_id`,`observed_at`,`id`), + KEY `idx_port_schedule_booking` (`ocean_booking_id`,`observed_at`,`id`), + KEY `idx_port_schedule_container` (`container_booking_id`,`observed_at`,`id`), + KEY `idx_port_schedule_expiry` (`expires_at`,`id`), + CONSTRAINT `fk_port_schedule_booking` FOREIGN KEY (`ocean_booking_id`) REFERENCES `fl_ocean_booking` (`id`), + CONSTRAINT `fk_port_schedule_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_port_schedule_booking_cutoff` CHECK (((`booking_cutoff_at` is null) or (`etd_at` is null) or (`booking_cutoff_at` <= `etd_at`))), + CONSTRAINT `chk_port_schedule_customer` CHECK ((`customer_id` > 0)), + CONSTRAINT `chk_port_schedule_customs_cutoff` CHECK (((`customs_cutoff_at` is null) or (`etd_at` is null) or (`customs_cutoff_at` <= `etd_at`))), + CONSTRAINT `chk_port_schedule_eta` CHECK (((`etd_at` is null) or (`eta_at` is null) or (`eta_at` >= `etd_at`))), + CONSTRAINT `chk_port_schedule_expiry` CHECK ((`expires_at` > `observed_at`)), + CONSTRAINT `chk_port_schedule_port_cutoff` CHECK (((`port_cutoff_at` is null) or (`etd_at` is null) or (`port_cutoff_at` <= `etd_at`))), + CONSTRAINT `chk_port_schedule_source_type` CHECK ((`source_type` in (_utf8mb4'MANUAL',_utf8mb4'CARRIER',_utf8mb4'TERMINAL',_utf8mb4'API'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='独立港务船期来源聚合,不替代订舱快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_port_schedule_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_port_schedule_history` ( + `id` bigint unsigned NOT NULL COMMENT '港务船期变更历史ID', + `port_schedule_id` bigint unsigned NOT NULL COMMENT '所属港务船期记录ID', + `action` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '变更动作:CREATE创建、UPDATE更新', + `from_version` int unsigned DEFAULT NULL COMMENT '变更前版本;创建时为空', + `to_version` int unsigned NOT NULL COMMENT '变更后版本', + `reason` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '变更原因或说明', + `before_snapshot` json DEFAULT NULL COMMENT '变更前船期数据快照;创建时为空', + `after_snapshot` json NOT NULL COMMENT '变更后船期数据快照', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '历史记录创建时间', + PRIMARY KEY (`id`), + KEY `idx_port_schedule_history` (`port_schedule_id`,`created_at`,`id`), + CONSTRAINT `fk_port_schedule_history` FOREIGN KEY (`port_schedule_id`) REFERENCES `fl_port_schedule` (`id`), + CONSTRAINT `chk_port_schedule_history_action` CHECK ((`action` in (_utf8mb4'CREATE',_utf8mb4'UPDATE'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='港务船期不可变变更历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_port_schedule_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_port_schedule_operation` ( + `id` bigint unsigned NOT NULL COMMENT '港务船期写操作幂等记录ID', + `port_schedule_id` bigint unsigned DEFAULT NULL COMMENT '关联港务船期ID;创建请求完成前允许为空', + `operator_id` bigint unsigned NOT NULL COMMENT '发起写操作的平台操作人ID', + `operation` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '幂等写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端写操作幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要;用于识别同键不同请求', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '处理状态:PROCESSING处理中、SUCCESS成功', + `result_json` json DEFAULT NULL COMMENT '成功结果JSON快照;供幂等重放返回', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等记录创建时间', + `completed_at` datetime(3) DEFAULT NULL COMMENT '写操作成功完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_port_schedule_operation` (`operator_id`,`idempotency_key`), + KEY `idx_port_schedule_operation_resource` (`port_schedule_id`,`created_at`), + CONSTRAINT `fk_port_schedule_operation` FOREIGN KEY (`port_schedule_id`) REFERENCES `fl_port_schedule` (`id`), + CONSTRAINT `chk_port_schedule_operation_status` CHECK ((`status` in (_utf8mb4'PROCESSING',_utf8mb4'SUCCESS'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='港务船期写操作幂等与请求哈希'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_preload_loading_plan_link`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_preload_loading_plan_link` ( + `id` bigint unsigned NOT NULL COMMENT '关联ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '入库单客户隔离ID', + `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', + `preload_plan_id` bigint unsigned NOT NULL COMMENT '入库单级预装计划ID', + `loading_plan_id` bigint unsigned NOT NULL COMMENT '柜次级装柜计划ID', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '建立关联幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '建立关联请求SHA-256', + `created_by` bigint unsigned NOT NULL COMMENT '建立预装与装柜计划关联的操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '建立关联的操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '关联记录创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_preload_loading_pair` (`tenant_id`,`inbound_id`,`loading_plan_id`), + UNIQUE KEY `uk_preload_loading_idempotency` (`created_by`,`idempotency_key`), + KEY `idx_preload_loading_preload` (`preload_plan_id`,`loading_plan_id`), + KEY `idx_preload_loading_plan` (`loading_plan_id`,`tenant_id`,`inbound_id`), + KEY `fk_preload_loading_inbound` (`inbound_id`), + CONSTRAINT `fk_preload_loading_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`), + CONSTRAINT `fk_preload_loading_plan` FOREIGN KEY (`loading_plan_id`) REFERENCES `fl_loading_plan` (`id`), + CONSTRAINT `fk_preload_loading_preload` FOREIGN KEY (`preload_plan_id`) REFERENCES `fl_preload_plan` (`id`), + CONSTRAINT `chk_preload_loading_tenant` CHECK ((`tenant_id` > 0)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='入库单预装与柜次装柜计划多对多关联'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_preload_plan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_preload_plan` ( + `id` bigint unsigned NOT NULL COMMENT '预装清单ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '关联入库单逻辑ID', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '预装状态:PENDING待确认、CONFIRMING确认中、CONFIRMED已确认', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号,每次更新递增', + `items_json` json NOT NULL COMMENT '可编辑分柜明细JSON快照;人工确认后作为预装依据', + `remark` varchar(1000) DEFAULT NULL COMMENT '预装备注', + `confirmed_by` bigint unsigned DEFAULT NULL, + `confirmed_by_name` varchar(64) DEFAULT NULL, + `confirmed_at` datetime(3) DEFAULT NULL, + `created_by` bigint unsigned NOT NULL COMMENT '创建预装清单的操作人ID', + `created_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建操作人姓名快照', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改操作人ID', + `updated_by_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最后修改操作人姓名快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '预装清单创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '预装清单最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_preload_tenant_inbound` (`tenant_id`,`inbound_id`), + KEY `idx_preload_status` (`tenant_id`,`status`,`updated_at`), + KEY `fk_preload_inbound` (`inbound_id`), + CONSTRAINT `fk_preload_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订单分柜预装清单'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_price_book_channel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_price_book_channel` ( + `id` bigint unsigned NOT NULL COMMENT '版本渠道快照ID', + `price_book_version_id` bigint unsigned NOT NULL COMMENT '整表价格版本ID', + `channel_code` varchar(64) NOT NULL COMMENT '固定渠道编码', + `channel_name` varchar(128) NOT NULL COMMENT '渠道名称快照', + `price_model` varchar(32) NOT NULL COMMENT '价格模型快照', + `source_sheet_name` varchar(128) NOT NULL COMMENT '原始Excel Sheet', + `estimated_departure_date` date DEFAULT NULL COMMENT '标准预计开船日期', + `estimated_departure_text` varchar(128) DEFAULT NULL COMMENT '原始预计开船日期文本', + `latest_warehouse_entry` varchar(128) DEFAULT NULL COMMENT '最晚进仓时间', + `vessel_name` varchar(128) DEFAULT NULL COMMENT '船名', + `voyage_no` varchar(64) DEFAULT NULL COMMENT '航次', + `reference_transit` varchar(128) DEFAULT NULL COMMENT '参考时效', + `surcharge_description` varchar(2000) DEFAULT NULL COMMENT '附加费说明,仅展示', + `remark` varchar(2000) DEFAULT NULL COMMENT '渠道备注', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '渠道快照创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '渠道快照最后更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_price_book_channel` (`price_book_version_id`,`channel_code`), + KEY `idx_price_book_channel_code` (`channel_code`,`price_book_version_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='价格版本渠道及船期快照'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_price_book_version`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_price_book_version` ( + `id` bigint unsigned NOT NULL COMMENT '整表价格版本ID', + `tenant_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '平台公共价格作用域固定为0', + `version_no` int unsigned NOT NULL COMMENT '整表版本号', + `original_file_name` varchar(255) NOT NULL COMMENT '原始Excel文件名', + `source_file_id` bigint unsigned DEFAULT NULL COMMENT 'File服务原始文件ID', + `source_sha256` char(64) DEFAULT NULL COMMENT '原始文件SHA-256', + `status` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING_CONFIRMATION' COMMENT '价格版本状态:PENDING_CONFIRMATION待确认、ACTIVE已生效、SUPERSEDED已被替代、FAILED解析失败', + `blocking_error_count` int unsigned NOT NULL DEFAULT '0' COMMENT '阻断错误数', + `warning_count` int unsigned NOT NULL DEFAULT '0' COMMENT '警告数', + `parse_issues_json` json DEFAULT NULL COMMENT '上传解析问题及待确认重新校验结果', + `channel_count` int unsigned NOT NULL DEFAULT '0' COMMENT '解析渠道数', + `rate_count` int unsigned NOT NULL DEFAULT '0' COMMENT '解析价格数', + `created_by` bigint unsigned NOT NULL COMMENT '上传价格表的操作人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传记录创建时间', + `published_by` bigint unsigned DEFAULT NULL COMMENT '确认并发布价格版本的操作人ID', + `published_at` datetime(3) DEFAULT NULL COMMENT '确认并生效时间', + `superseded_at` datetime(3) DEFAULT NULL COMMENT '被下一版本替换时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后修改人ID', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记:0未删除、1已删除', + `version` int NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `voided_by` bigint unsigned DEFAULT NULL COMMENT '作废操作人ID', + `voided_at` datetime(3) DEFAULT NULL COMMENT '作废时间', + `void_reason` varchar(500) DEFAULT NULL COMMENT '作废原因', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_price_book_version` (`tenant_id`,`version_no`), + KEY `idx_price_book_status` (`tenant_id`,`status`,`published_at`), + KEY `idx_price_book_source_hash` (`tenant_id`,`source_sha256`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台公共船期价格整表版本'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_price_channel_catalog`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_price_channel_catalog` ( + `id` bigint unsigned NOT NULL COMMENT '渠道目录ID', + `channel_code` varchar(64) NOT NULL COMMENT '稳定渠道编码', + `display_name` varchar(128) NOT NULL COMMENT '平台渠道名称', + `price_model` varchar(32) NOT NULL COMMENT '默认价格模型', + `source_sheet_name` varchar(128) NOT NULL COMMENT '来源Sheet名称;海派为同一Sheet', + `aliases_json` json NOT NULL COMMENT '上传名称别名数组', + `inbound_code_prefix` varchar(6) DEFAULT NULL, + `overseas_inbound_code_prefix` varchar(6) DEFAULT NULL, + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '目录状态:ACTIVE启用、DISABLED停用', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_price_channel_code` (`channel_code`), + KEY `idx_price_channel_status` (`status`,`price_model`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台公共船期价格固定渠道目录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_price_origin_alias`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_price_origin_alias` ( + `id` bigint unsigned NOT NULL COMMENT '起运仓别名ID', + `warehouse_code` varchar(64) NOT NULL COMMENT '平台仓库稳定编码,不存环境专属ID', + `alias_name` varchar(128) NOT NULL COMMENT 'Excel起运仓名称别名', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE启用、DISABLED停用', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_price_origin_alias` (`warehouse_code`,`alias_name`), + KEY `idx_price_origin_alias_name` (`alias_name`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='价格表起运仓名称别名映射'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_price_warehouse_mapping`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_price_warehouse_mapping` ( + `id` bigint unsigned NOT NULL COMMENT '价格仓映射ID', + `source_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '来源维度:ORIGIN_CODE或OVERSEAS_NAME', + `source_value` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '解析后的来源仓编码或海外仓名称', + `warehouse_id` bigint unsigned NOT NULL COMMENT '固定平台公共仓库ID', + `warehouse_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '平台仓库稳定编码快照', + `warehouse_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'DOMESTIC或OVERSEAS', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE启用、DISABLED停用', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_price_warehouse_mapping_source` (`source_type`,`source_value`), + KEY `idx_price_warehouse_mapping_target` (`warehouse_id`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='价格表来源仓与固定平台公共仓映射'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_split_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_split_operation` ( + `id` bigint unsigned NOT NULL COMMENT '幂等记录ID', + `tenant_id` bigint unsigned NOT NULL COMMENT '客户ID和数据隔离键', + `inbound_id` bigint unsigned NOT NULL COMMENT '操作目标入库单逻辑ID', + `operator_id` bigint unsigned NOT NULL COMMENT '执行分柜或预装写操作的平台用户ID', + `operation` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '分柜或预装写操作类型', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端幂等键,同一操作重试复用', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROCESSING' COMMENT '幂等处理状态:PROCESSING处理中、SUCCESS成功', + `result_json` json DEFAULT NULL COMMENT '操作结果JSON快照,用于幂等重放', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等操作声明创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_split_operation` (`tenant_id`,`inbound_id`,`operator_id`,`operation`,`idempotency_key`), + KEY `idx_split_operation_time` (`tenant_id`,`inbound_id`,`created_at`), + KEY `fk_split_operation_inbound` (`inbound_id`), + CONSTRAINT `fk_split_operation_inbound` FOREIGN KEY (`inbound_id`) REFERENCES `fl_inbound_order` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='分柜操作幂等与审计索引'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_terminal_drayage`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_terminal_drayage` ( + `id` bigint unsigned NOT NULL COMMENT '目的港码头拖车聚合ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '唯一归属物理货柜ID', + `fleet_supplier_id` bigint unsigned DEFAULT NULL COMMENT 'Warehouse ACTIVE/TRUCKING供应商ID快照', + `fleet_supplier_name` varchar(128) DEFAULT NULL COMMENT 'Warehouse供应商名称快照', + `pickup_appointment_at` datetime(3) DEFAULT NULL COMMENT '预约提柜时间', + `actual_pickup_at` datetime(3) DEFAULT NULL COMMENT '实际提柜时间', + `estimated_empty_return_at` datetime(3) DEFAULT NULL COMMENT '服务端按卸柜完成时间加72小时计算的预计还柜时间', + `actual_empty_return_at` datetime(3) DEFAULT NULL COMMENT '实际还空柜时间', + `version` int unsigned NOT NULL DEFAULT '1' COMMENT '乐观锁版本号', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `created_by_name` varchar(64) DEFAULT NULL COMMENT '创建人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_by` bigint unsigned NOT NULL COMMENT '最后更新人ID', + `updated_by_name` varchar(64) DEFAULT NULL COMMENT '最后更新人名称快照', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_terminal_drayage_container` (`container_booking_id`), + KEY `idx_terminal_drayage_warning` (`actual_empty_return_at`,`estimated_empty_return_at`), + CONSTRAINT `fk_terminal_drayage_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_terminal_drayage_times` CHECK ((((`actual_pickup_at` is null) or (`pickup_appointment_at` is not null)) and ((`actual_empty_return_at` is null) or (`actual_pickup_at` is null) or (`actual_empty_return_at` >= `actual_pickup_at`)))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='目的港货柜级码头拖车与还空事实'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_terminal_drayage_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_terminal_drayage_history` ( + `id` bigint unsigned NOT NULL COMMENT '历史ID', + `drayage_id` bigint unsigned NOT NULL COMMENT '码头拖车聚合ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '货柜ID快照', + `action` varchar(32) NOT NULL COMMENT '业务动作', + `from_status` varchar(32) NOT NULL COMMENT '操作前状态', + `to_status` varchar(32) NOT NULL COMMENT '操作后状态', + `from_version` int unsigned NOT NULL COMMENT '操作前版本', + `to_version` int unsigned NOT NULL COMMENT '操作后版本', + `reason` varchar(500) DEFAULT NULL COMMENT '操作说明', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称快照', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间', + PRIMARY KEY (`id`), + KEY `idx_terminal_drayage_history` (`container_booking_id`,`created_at`,`id`), + KEY `fk_terminal_drayage_history` (`drayage_id`), + CONSTRAINT `fk_terminal_drayage_history` FOREIGN KEY (`drayage_id`) REFERENCES `fl_terminal_drayage` (`id`), + CONSTRAINT `chk_terminal_drayage_history_action` CHECK ((`action` in (_utf8mb4'SELECT_FLEET',_utf8mb4'SEND_PICKUP_EMAIL',_utf8mb4'SCHEDULE_PICKUP',_utf8mb4'RECORD_PICKUP',_utf8mb4'RECORD_EMPTY_RETURN'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='目的港码头拖车不可变操作历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_terminal_drayage_mail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_terminal_drayage_mail` ( + `id` bigint unsigned NOT NULL COMMENT '邮件任务ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '归属物理货柜ID', + `fleet_supplier_id` bigint unsigned NOT NULL COMMENT '车队供应商ID快照', + `fleet_name` varchar(128) NOT NULL COMMENT '车队名称快照', + `recipient` varchar(254) NOT NULL COMMENT '收件人邮箱', + `kind` varchar(32) NOT NULL COMMENT '邮件类型:REQUEST_PICKUP提柜请求、CANCEL_PICKUP取消提柜', + `subject` varchar(255) NOT NULL COMMENT '邮件主题', + `body` text NOT NULL COMMENT '邮件正文', + `status` varchar(16) NOT NULL DEFAULT 'PENDING' COMMENT '投递状态:PENDING待发送、SENDING发送中、SENT已发送、FAILED失败', + `attempts` int NOT NULL DEFAULT '0' COMMENT '发送尝试次数', + `failure_reason` varchar(500) DEFAULT NULL COMMENT '发送失败原因', + `created_by` bigint unsigned NOT NULL COMMENT '创建人ID', + `updated_by` bigint unsigned NOT NULL COMMENT '最后更新人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + `sent_at` datetime(3) DEFAULT NULL COMMENT '发送成功时间', + PRIMARY KEY (`id`), + KEY `idx_terminal_mail_dispatch` (`status`,`id`), + KEY `idx_terminal_mail_container` (`container_booking_id`,`id`,`status`), + CONSTRAINT `fk_terminal_mail_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`), + CONSTRAINT `chk_terminal_mail_kind` CHECK ((`kind` in (_utf8mb4'REQUEST_PICKUP',_utf8mb4'CANCEL_PICKUP'))), + CONSTRAINT `chk_terminal_mail_status` CHECK ((`status` in (_utf8mb4'PENDING',_utf8mb4'SENDING',_utf8mb4'SENT',_utf8mb4'FAILED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='码头车队邮件任务与投递记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_terminal_drayage_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_terminal_drayage_operation` ( + `id` bigint unsigned NOT NULL COMMENT '幂等操作ID', + `container_booking_id` bigint unsigned NOT NULL COMMENT '货柜ID', + `operation` varchar(32) NOT NULL COMMENT '业务动作', + `idempotency_key` varchar(255) NOT NULL COMMENT '客户端幂等键', + `request_hash` char(64) NOT NULL COMMENT '请求载荷SHA-256', + `result_version` int unsigned NOT NULL COMMENT '成功结果版本', + `operator_id` bigint unsigned NOT NULL COMMENT '操作人ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_terminal_drayage_operation` (`container_booking_id`,`idempotency_key`), + KEY `idx_terminal_drayage_operation` (`container_booking_id`,`created_at`), + CONSTRAINT `fk_terminal_drayage_operation_container` FOREIGN KEY (`container_booking_id`) REFERENCES `fl_container_booking` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='目的港码头拖车成功幂等操作'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_third_party_call_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_third_party_call_log` ( + `id` bigint unsigned NOT NULL COMMENT '第三方调用日志ID(雪花ID)', + `tenant_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '第三方未知/未解析主体哨兵值;不是平台客户记录或平台作用域,不得用于业务数据授权', + `app_key` varchar(128) DEFAULT NULL COMMENT '第三方应用标识', + `signature_subject` varchar(128) DEFAULT NULL COMMENT '签名主体快照', + `request_method` varchar(8) NOT NULL COMMENT 'HTTP方法', + `request_path` varchar(255) NOT NULL COMMENT '签名使用的规范路径', + `request_timestamp` varchar(32) DEFAULT NULL COMMENT '请求头Unix毫秒时间戳原值', + `nonce` varchar(128) DEFAULT NULL COMMENT '请求Nonce', + `idempotency_key` varchar(128) DEFAULT NULL COMMENT 'HTTP幂等键,查询接口为空', + `idempotency_anchor` tinyint unsigned DEFAULT NULL COMMENT '签名通过后首个请求为1,重复调用为空', + `signature_value` varchar(128) DEFAULT NULL COMMENT '第三方签名原值', + `request_hash` char(64) NOT NULL COMMENT '原始请求体SHA-256小写十六进制', + `raw_payload` longtext NOT NULL COMMENT '未经重新序列化的UTF-8原始请求体', + `processing_status` varchar(16) NOT NULL COMMENT 'PROCESSING、ACCEPTED或REJECTED', + `result_code` varchar(32) DEFAULT NULL COMMENT '统一响应业务码', + `result_message` varchar(1000) DEFAULT NULL COMMENT '处理结果或失败原因', + `result_json` json DEFAULT NULL COMMENT '首次成功结果快照', + `requested_at` datetime(3) NOT NULL COMMENT '服务端接收时间', + `processed_at` datetime(3) DEFAULT NULL COMMENT '处理完成时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_third_call_idempotency_owner` (`tenant_id`,`app_key`,`idempotency_key`,`idempotency_anchor`), + KEY `idx_third_call_app_time` (`tenant_id`,`app_key`,`requested_at`), + KEY `idx_third_call_idempotency` (`tenant_id`,`app_key`,`idempotency_key`), + KEY `idx_third_call_nonce` (`tenant_id`,`app_key`,`nonce`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='第三方测量开放接口原始请求、签名主体和处理结果留档'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_truck_appointment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_truck_appointment` ( + `id` bigint unsigned NOT NULL COMMENT '拖车预约ID', + `appointment_no` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '平台拖车预约编号', + `outbound_order_id` bigint unsigned DEFAULT NULL COMMENT '关联头程订单逻辑ID;不跨库建外键', + `ocean_booking_id` bigint unsigned DEFAULT NULL COMMENT '关联海运订舱逻辑ID', + `container_booking_id` bigint unsigned DEFAULT NULL COMMENT '关联柜次逻辑ID;拖车完成供装柜门禁校验', + `loading_plan_id` bigint unsigned DEFAULT NULL COMMENT '关联装柜计划逻辑ID', + `warehouse_id` bigint unsigned DEFAULT NULL COMMENT '预约到仓的国内收货仓逻辑ID', + `customer_id` bigint unsigned DEFAULT NULL COMMENT '客户ID和数据隔离键', + `customer_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '客户名称快照', + `carrier_id` bigint unsigned DEFAULT NULL COMMENT '拖车服务商逻辑ID', + `carrier_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '拖车服务商名称快照', + `bill_of_lading_no` varchar(128) DEFAULT NULL, + `fleet_contact` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '车队联系人', + `fleet_phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '车队联系电话', + `driver_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '司机姓名', + `driver_phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '司机联系电话', + `driver_id_card` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '司机身份证号;平台内部敏感信息', + `vehicle_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '车辆车牌号', + `store_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓装柜地点名称快照', + `store_contact` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓地点联系人快照', + `store_phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓地点联系电话快照', + `store_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓装柜地点地址快照', + `store_city` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓地点城市快照', + `store_zipcode` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '到仓地点邮编快照', + `package_count` int unsigned DEFAULT NULL COMMENT '预约货物包装件数快照', + `gross_weight_kg` decimal(18,3) DEFAULT NULL COMMENT '预约货物毛重,单位千克', + `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '预约货物体积,单位立方米', + `pallet_count` int unsigned DEFAULT NULL COMMENT '预约托盘数量', + `po_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '关联采购单号或客户PO号', + `planned_loading_at` datetime(3) DEFAULT NULL COMMENT '预约到仓装柜时间', + `actual_arrived_warehouse_at` datetime(3) DEFAULT NULL COMMENT '车辆实际到达收货仓时间', + `actual_loading_at` datetime(3) DEFAULT NULL COMMENT '实际开始装柜时间', + `actual_departed_at` datetime(3) DEFAULT NULL COMMENT '车辆实际离仓时间;DEPARTED后供LOADED门禁使用', + `transit_minutes` int unsigned DEFAULT NULL COMMENT '从到仓到离仓的运输作业耗时,单位分钟', + `payable_amount` decimal(18,2) DEFAULT NULL COMMENT '应付拖车服务商金额;币种由currency指定', + `receivable_amount` decimal(18,2) DEFAULT NULL COMMENT '向客户收取的拖车金额;币种由currency指定', + `currency` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'RMB' COMMENT '金额币种;首期默认RMB', + `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'DRAFT' COMMENT '拖车预约状态:DRAFT草稿、PENDING_DISPATCH待派车、DISPATCHED已派车、PICKUP_IN_PROGRESS提货中、ARRIVED_WAREHOUSE已到仓、LOADING装柜中、DEPARTED已离仓、COMPLETED已完成、RESCHEDULED已改约、EXCEPTION异常、CANCELLED已取消', + `revision` int unsigned NOT NULL DEFAULT '0' COMMENT '拖车预约业务修订号;每次状态或改约递增', + `version` int unsigned NOT NULL DEFAULT '0' COMMENT '乐观锁版本号', + `remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '平台内部备注或异常说明', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '拖车预约创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '拖车预约最后更新时间', + `active_container_booking_id` bigint unsigned GENERATED ALWAYS AS ((case when (`status` not in (_utf8mb4'COMPLETED',_utf8mb4'CANCELLED',_utf8mb4'EXCEPTION')) then `container_booking_id` else NULL end)) STORED COMMENT '非终态预约的柜次唯一键', + `active_ocean_booking_id` bigint unsigned GENERATED ALWAYS AS ((case when (`status` not in (_utf8mb4'COMPLETED',_utf8mb4'CANCELLED',_utf8mb4'EXCEPTION')) then `ocean_booking_id` else NULL end)) STORED COMMENT '非终态预约的订舱唯一键', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_truck_appointment_no` (`appointment_no`), + KEY `idx_truck_appointment_status` (`status`,`updated_at`), + KEY `idx_truck_appointment_container` (`container_booking_id`), + KEY `idx_truck_appointment_customer` (`customer_id`), + CONSTRAINT `chk_truck_appointment_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'PENDING_DISPATCH',_utf8mb4'DISPATCHED',_utf8mb4'PICKUP_IN_PROGRESS',_utf8mb4'ARRIVED_WAREHOUSE',_utf8mb4'LOADING',_utf8mb4'DEPARTED',_utf8mb4'COMPLETED',_utf8mb4'RESCHEDULED',_utf8mb4'EXCEPTION',_utf8mb4'CANCELLED'))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='三期拖车预约派车聚合'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_truck_appointment_attachment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_truck_appointment_attachment` ( + `id` bigint unsigned NOT NULL COMMENT '拖车附件关系ID', + `appointment_id` bigint unsigned NOT NULL COMMENT '所属拖车预约ID', + `file_id` bigint unsigned NOT NULL COMMENT 'File服务文件逻辑ID', + `attachment_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '附件类型编码;由业务动作约定', + `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '上传时文件名快照', + `file_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '文件内容SHA-256摘要', + `visibility` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'INTERNAL' COMMENT '可见范围:INTERNAL仅平台内部、CLIENT客户可见', + `uploaded_by` bigint unsigned NOT NULL COMMENT '上传操作人ID', + `uploaded_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '附件上传时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_truck_attachment` (`appointment_id`,`file_id`), + KEY `idx_truck_attachment` (`appointment_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='拖车附件文件引用'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_truck_appointment_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_truck_appointment_history` ( + `id` bigint unsigned NOT NULL COMMENT '拖车预约历史ID', + `appointment_id` bigint unsigned NOT NULL COMMENT '所属拖车预约ID', + `revision` int unsigned NOT NULL COMMENT '该预约业务修订号', + `action` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '触发状态或改约的业务动作', + `from_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '变更前拖车状态;创建时为空', + `to_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '变更后拖车状态;改约时可保持原状态', + `reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '状态或改约原因', + `operator_id` bigint unsigned NOT NULL COMMENT '执行操作的平台用户ID', + `operator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作人姓名快照', + `request_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '请求链路中的请求ID', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '历史记录创建时间', + PRIMARY KEY (`id`), + KEY `idx_truck_history` (`appointment_id`,`revision`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='拖车状态与改约历史'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `fl_truck_appointment_operation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `fl_truck_appointment_operation` ( + `id` bigint unsigned NOT NULL COMMENT '拖车写操作幂等记录ID', + `appointment_id` bigint unsigned NOT NULL COMMENT '所属拖车预约ID', + `idempotency_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '客户端写操作幂等键', + `request_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '规范化请求内容SHA-256摘要;用于识别同键不同请求', + `action` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '执行的拖车业务动作', + `response_snapshot` json DEFAULT NULL COMMENT '成功响应JSON快照;供相同幂等请求重放', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '幂等记录创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_truck_operation` (`idempotency_key`), + KEY `idx_truck_operation_appointment` (`appointment_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='拖车操作幂等记录'; +/*!40101 SET character_set_client = @saved_cs_client */; +DROP TABLE IF EXISTS `sys_audit_outbox`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_audit_outbox` ( + `event_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '审计事件全局唯一ID', + `event_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '审计事件类型', + `resource_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '被审计业务资源类型', + `resource_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '被审计业务资源ID;无法确定时为空', + `service_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '产生审计事件的服务名称', + `payload_json` json NOT NULL COMMENT '待发送的审计事件完整负载快照', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PENDING' COMMENT '发送状态:PENDING待发送、SENDING发送中、SENT已发送、DEAD已转死信', + `attempt_count` int NOT NULL DEFAULT '0' COMMENT '正常发送累计尝试次数', + `compensation_count` int NOT NULL DEFAULT '0' COMMENT '人工或自动补偿累计次数', + `next_retry_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '允许下次重试的最早时间', + `lease_owner` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '当前发送任务租约持有者标识', + `lease_until` datetime(3) DEFAULT NULL COMMENT '当前发送任务租约到期时间', + `last_error` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最近一次发送失败原因', + `dead_at` datetime(3) DEFAULT NULL COMMENT '转入死信状态的时间', + `sent_at` datetime(3) DEFAULT NULL COMMENT '首次成功发送时间', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '事件创建时间', + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '记录最后更新时间', + PRIMARY KEY (`event_id`), + KEY `idx_audit_outbox_publish` (`status`,`next_retry_at`,`lease_until`,`created_at`), + KEY `idx_audit_outbox_retention` (`status`,`sent_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='可靠审计事件本地发送箱'; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + diff --git a/output/local-schema-repair/schema-verification.json b/output/local-schema-repair/schema-verification.json new file mode 100644 index 000000000..b664715bb --- /dev/null +++ b/output/local-schema-repair/schema-verification.json @@ -0,0 +1,20 @@ +[ + { + "db": "baiyue_firstleg", + "baselineTables": 131, + "missingColumns": [], + "missingIndexes": [], + "appliedIndexes": [], + "blockedIndexes": [] + }, + { + "db": "baiyue_lastleg", + "baselineTables": 218, + "missingColumns": [], + "missingIndexes": [ + "ll_inbound_plan.uk_ll_inbound_plan_source_order" + ], + "appliedIndexes": [], + "blockedIndexes": [] + } +] \ No newline at end of file diff --git a/output/local-schema-repair/summarize.mjs b/output/local-schema-repair/summarize.mjs new file mode 100644 index 000000000..897aa1e4d --- /dev/null +++ b/output/local-schema-repair/summarize.mjs @@ -0,0 +1,12 @@ +import fs from 'node:fs'; +const dir=new URL('./',import.meta.url); +function parse(file){let db='';const result=new Map();for(const m of fs.readFileSync(new URL(file,dir),'utf8').matchAll(/USE `(\w+)`;|CREATE TABLE `(\w+)` \(([\s\S]*?)\n\) ENGINE=[^;]+;/g)){if(m[1])db=m[1];else result.set(db+'.'+m[2],{db,name:m[2],sql:m[0],defs:m[3].split(/\r?\n/).map(s=>s.trim().replace(/,$/,''))});}return result;} +const before=parse('schema-before.sql'),after=parse('schema-after.sql'),report={},ddl=['-- 本次本机结构修复的实际增量,仅用于审阅与原始快照对照。已执行,禁止在当前库重复执行。','SET NAMES utf8mb4;']; +for(const [key,t] of after){const r=report[t.db]??={createdTables:[],addedColumns:[],addedIndexes:[]};const old=before.get(key);ddl.push('USE `'+t.db+'`;'); + if(!old){r.createdTables.push(t.name);ddl.push(t.sql);continue;} + const oldCols=new Set(old.defs.map(d=>d.match(/^`(\w+)`/)?.[1]).filter(Boolean)); + const oldKeys=new Set(old.defs.map(d=>d.match(/^(?:UNIQUE )?KEY `(\w+)`/)?.[1]).filter(Boolean)); + for(const d of t.defs){const c=d.match(/^`(\w+)`/),i=d.match(/^(?:UNIQUE )?KEY `(\w+)`/);if(c&&!oldCols.has(c[1])){r.addedColumns.push(t.name+'.'+c[1]);ddl.push('ALTER TABLE `'+t.name+'` ADD COLUMN '+d+';');}else if(i&&!oldKeys.has(i[1])){r.addedIndexes.push(t.name+'.'+i[1]);ddl.push('ALTER TABLE `'+t.name+'` ADD '+d+';');}} +} +fs.writeFileSync(new URL('actual-changes.json',dir),JSON.stringify(report,null,2));fs.writeFileSync(new URL('actual-incremental-review.sql',dir),ddl.join('\n\n')); +for(const [db,r] of Object.entries(report))console.log(db,{tables:r.createdTables.length,columns:r.addedColumns.length,indexes:r.addedIndexes.length}); diff --git a/output/local-schema-repair/tab-count-consistency.json b/output/local-schema-repair/tab-count-consistency.json new file mode 100644 index 000000000..a9938d370 --- /dev/null +++ b/output/local-schema-repair/tab-count-consistency.json @@ -0,0 +1,116 @@ +[ + { + "status": "PENDING_REVIEW", + "count": 127, + "total": 127, + "passed": true + }, + { + "status": "WAIT_MEASURE", + "count": 195, + "total": 195, + "passed": true + }, + { + "status": "WAIT_WEIGHT_CONFIRM", + "count": 125, + "total": 125, + "passed": true + }, + { + "status": "WEIGHT_CONFIRMED", + "count": 1, + "total": 1, + "passed": true + }, + { + "status": "WAIT_CUSTOMS_DOCS", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "WAIT_PALLETIZE", + "count": 6, + "total": 6, + "passed": true + }, + { + "status": "WAIT_SPLIT", + "count": 126, + "total": 126, + "passed": true + }, + { + "status": "LOADING", + "count": 9, + "total": 9, + "passed": true + }, + { + "status": "LOADED", + "count": 73, + "total": 73, + "passed": true + }, + { + "status": "EXPORT_CUSTOMS", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "SAILING_CLEARANCE", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "WAIT_UNLOAD", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "WAIT_DISPATCH", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "OUTBOUND_DOCUMENT", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "DELIVERING", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "SIGNED", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "DELIVERED", + "count": 0, + "total": 0, + "passed": true + }, + { + "status": "COMPLETED", + "count": 2, + "total": 2, + "passed": true + }, + { + "status": "MEASUREMENT_REVIEW", + "count": 120, + "total": 120, + "passed": true + } +] diff --git a/output/local-schema-repair/tab-smoke.json b/output/local-schema-repair/tab-smoke.json new file mode 100644 index 000000000..22b841365 --- /dev/null +++ b/output/local-schema-repair/tab-smoke.json @@ -0,0 +1,537 @@ +[ + { + "path": "/api/auth/login", + "http": 200, + "code": "200", + "requestId": "5a80dd52-e63b-4750-9176-2d6d97a5e3c8, dddd7757-a5d2-4185-839b-04b34ab2837c", + "passed": true + }, + { + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200", + "requestId": "1da4d48a-e0bb-41a3-ae43-1ddf12d5a14b, 741bf672-5db1-4914-81d0-d0a46745f67c", + "passed": true, + "counts": { + "PENDING_REVIEW": 127, + "WAIT_MEASURE": 195, + "WAIT_PALLETIZE": 6, + "WAIT_SPLIT": 127, + "LOADING": 8, + "LOADED": 74, + "DELIVERED": 0, + "COMPLETED": 2, + "WAIT_WEIGHT_CONFIRM": 124, + "WEIGHT_CONFIRMED": 1, + "WAIT_CUSTOMS_DOCS": 0, + "EXPORT_CUSTOMS": 55, + "SAILING_CLEARANCE": 0, + "WAIT_UNLOAD": 1, + "WAIT_DISPATCH": 1, + "OUTBOUND_DOCUMENT": 0, + "DELIVERING": 0, + "SIGNED": 0, + "MEASUREMENT_REVIEW": 120 + } + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=PENDING_REVIEW", + "http": 200, + "code": "200", + "requestId": "3bbf7448-f7e1-40a3-bea6-8e7007bb5c23, 10fd5748-ea6f-413f-9d96-f67cc930b664", + "passed": true, + "total": "127", + "records": [ + { + "orderId": "2112105953787518978", + "tenantId": "2112105501490544641", + "inboundId": "2112105957231161346", + "mainStatus": "PENDING_REVIEW" + }, + { + "orderId": "2112105886309556225", + "tenantId": "2112105195373461506", + "inboundId": "2112105890017439745", + "mainStatus": "PENDING_REVIEW" + }, + { + "orderId": "2112105822484832258", + "tenantId": "2112105195373461506", + "inboundId": "2112105825983000577", + "mainStatus": "PENDING_REVIEW" + }, + { + "orderId": "2112105768302813186", + "tenantId": "2112105195373461506", + "inboundId": "2112105772081999873", + "mainStatus": "PENDING_REVIEW" + }, + { + "orderId": "2112105682319581185", + "tenantId": "2112105501490544641", + "inboundId": "2112105687122178049", + "mainStatus": "PENDING_REVIEW" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_MEASURE", + "http": 200, + "code": "200", + "requestId": "71a6b016-4d23-448d-aa30-ed7c954e29ee, 60c5e10b-faf1-4e61-b16f-35306513a7f1", + "passed": true, + "total": "195", + "records": [ + { + "orderId": "2112102981498183681", + "tenantId": "2112102958765047809", + "inboundId": "2112103003577118721", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2098325342631428097", + "tenantId": "2098324852501774338", + "inboundId": "2098325343935848449", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2098325190034259969", + "tenantId": "2098324852501774338", + "inboundId": "2098325191338680322", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2098325037621641217", + "tenantId": "2098324852501774338", + "inboundId": "2098325038921867265", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2098324887905959938", + "tenantId": "2098324852501774338", + "inboundId": "2098324891550801921", + "mainStatus": "WAIT_MEASURE" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_WEIGHT_CONFIRM", + "http": 200, + "code": "200", + "requestId": "ac639d03-1d4f-4140-bd19-a50e15e211ab, 8d6dfa2b-85c5-4cd8-bb8a-7bd112d2fe0d", + "passed": true, + "total": "124", + "records": [ + { + "orderId": "2085355345216114689", + "tenantId": "2085308606829346818", + "inboundId": "2085355347941904385", + "mainStatus": null + }, + { + "orderId": "2085355345975283713", + "tenantId": "2085308606829346818", + "inboundId": "2085355347992236034", + "mainStatus": null + }, + { + "orderId": "2085355346734452738", + "tenantId": "2085308606829346818", + "inboundId": "2085355360826806273", + "mainStatus": null + }, + { + "orderId": "2085355347493621762", + "tenantId": "2085308606829346818", + "inboundId": "2085355360881332226", + "mainStatus": null + }, + { + "orderId": "2085355348282150913", + "tenantId": "2085308606829346818", + "inboundId": "2085355360931663873", + "mainStatus": null + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WEIGHT_CONFIRMED", + "http": 200, + "code": "200", + "requestId": "c47772c4-8188-47d5-9a8f-6e9aaabb2d7e, 52eabd98-7666-47da-b8e0-3447cdace665", + "passed": true, + "total": "1", + "records": [ + { + "orderId": "2085341741574098946", + "tenantId": "2085308606829346818", + "inboundId": "2085341749429522434", + "mainStatus": null + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_CUSTOMS_DOCS", + "http": 200, + "code": "200", + "requestId": "febd1b16-fdea-4c4b-8cb8-69aecb5e1ff6, 82627b67-04a6-47b7-b168-e653d4eeb5e3", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_PALLETIZE", + "http": 200, + "code": "200", + "requestId": "8f84977d-97f1-4acf-b9e5-0e062a901490, 03707bbf-cb42-4b34-ba5f-a924f9bae410", + "passed": true, + "total": "6", + "records": [ + { + "orderId": "2112105882580819970", + "tenantId": "2112105195373461506", + "inboundId": "2112105899853082626", + "mainStatus": "WAIT_PALLETIZE" + }, + { + "orderId": "2112105818881925122", + "tenantId": "2112105195373461506", + "inboundId": "2112105836158382082", + "mainStatus": "WAIT_PALLETIZE" + }, + { + "orderId": "2112105764741849089", + "tenantId": "2112105195373461506", + "inboundId": "2112105781263331330", + "mainStatus": "WAIT_PALLETIZE" + }, + { + "orderId": "2112104925457424385", + "tenantId": "2112104631512203266", + "inboundId": "2112104942167650305", + "mainStatus": "WAIT_PALLETIZE" + }, + { + "orderId": "2112104871636115457", + "tenantId": "2112104551203864578", + "inboundId": "2112104887486509058", + "mainStatus": "WAIT_PALLETIZE" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_SPLIT", + "http": 200, + "code": "200", + "requestId": "6fed641c-6076-41ca-b4e4-9567d1a843f5, 7199357b-7616-43c9-922f-74e2fa900477", + "passed": true, + "total": "127", + "records": [ + { + "orderId": "2112374338811326466", + "tenantId": "2092814835845664769", + "inboundId": "2112376564246077441", + "mainStatus": "WAIT_SPLIT" + }, + { + "orderId": "2112105949454802945", + "tenantId": "2112105501490544641", + "inboundId": "2112105974222286850", + "mainStatus": "WAIT_SPLIT" + }, + { + "orderId": "2112105677974282242", + "tenantId": "2112105501490544641", + "inboundId": "2112105696567750658", + "mainStatus": "WAIT_SPLIT" + }, + { + "orderId": "2112105550538743809", + "tenantId": "2112105501490544641", + "inboundId": "2112105615210835970", + "mainStatus": "WAIT_SPLIT" + }, + { + "orderId": "2112105269298077697", + "tenantId": "2112105195373461506", + "inboundId": "2112105371026845697", + "mainStatus": "WAIT_SPLIT" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=LOADING", + "http": 200, + "code": "200", + "requestId": "acabdb6d-f822-46e4-92ae-30bc8efa7537, 8d45744a-682e-41a9-b738-9ade63926b28", + "passed": true, + "total": "8", + "records": [ + { + "orderId": "2092816910277038081", + "tenantId": "2092816814294667266", + "inboundId": "2092816913754202115", + "mainStatus": "LOADING" + }, + { + "orderId": "2092816871253233665", + "tenantId": "2092816814294667266", + "inboundId": "2092816875699281923", + "mainStatus": "LOADING" + }, + { + "orderId": "2092816836365012994", + "tenantId": "2092816814294667266", + "inboundId": "2092816850256633858", + "mainStatus": "LOADING" + }, + { + "orderId": "2091000814000001101", + "tenantId": "10001", + "inboundId": "2091000814000001301", + "mainStatus": "LOADING" + }, + { + "orderId": "2091000814000000101", + "tenantId": "10001", + "inboundId": "2091000814000000301", + "mainStatus": "LOADING" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=LOADED", + "http": 200, + "code": "200", + "requestId": "0e6536aa-a82a-4c1b-a41c-7d7520511eeb, 03629346-096b-465c-956f-c9326328dcee", + "passed": true, + "total": "74", + "records": [ + { + "orderId": "2093269574496440322", + "tenantId": "2093269089353961474", + "inboundId": "2093269587792433154", + "mainStatus": "LOADED" + }, + { + "orderId": "2093269527184691202", + "tenantId": "2093269089353961474", + "inboundId": "2093269537020383234", + "mainStatus": "LOADED" + }, + { + "orderId": "2093269460814024706", + "tenantId": "2093269089353961474", + "inboundId": "2093269473657032707", + "mainStatus": "LOADED" + }, + { + "orderId": "2093269413967843329", + "tenantId": "2093269089353961474", + "inboundId": "2093269422700433411", + "mainStatus": "LOADED" + }, + { + "orderId": "2093269346426966017", + "tenantId": "2093269089353961474", + "inboundId": "2093269359261585410", + "mainStatus": "LOADED" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=EXPORT_CUSTOMS", + "http": 200, + "code": "200", + "requestId": "b0568387-1d75-4d6e-8755-8fb49623a224, ba4bf212-2ea9-4909-b816-f1650265211a", + "passed": true, + "total": "55", + "records": [ + { + "orderId": "2086081433932726274", + "tenantId": "10001", + "inboundId": "2086081437650956290", + "mainStatus": null + }, + { + "orderId": "2086085225151528961", + "tenantId": "10001", + "inboundId": "2086085239259049985", + "mainStatus": null + }, + { + "orderId": "2086085487601713154", + "tenantId": "10001", + "inboundId": "2086085491298971650", + "mainStatus": null + }, + { + "orderId": "2086086464165707778", + "tenantId": "10001", + "inboundId": "2086086473193926658", + "mainStatus": null + }, + { + "orderId": "2086088193535967234", + "tenantId": "10001", + "inboundId": "2086088197887537154", + "mainStatus": null + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=SAILING_CLEARANCE", + "http": 200, + "code": "200", + "requestId": "6de0f6f1-db74-43bd-a2df-1356dd2621dc, 836088e2-6974-4d24-86b5-3381f988cee4", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_UNLOAD", + "http": 200, + "code": "200", + "requestId": "4134d8d3-dd4d-4fd6-8950-83e3697d3f74, aae63083-913c-4453-82d3-7f8c7c97ef3f", + "passed": true, + "total": "1", + "records": [ + { + "orderId": "2092814878690398210", + "tenantId": "2092814835845664769", + "inboundId": "2092814880129130499", + "mainStatus": "LOADED" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_DISPATCH", + "http": 200, + "code": "200", + "requestId": "cbb986f8-a8db-4057-a4ce-f81973b9f167, bf7e93c6-dfce-435f-a1fa-ee8a5801defd", + "passed": true, + "total": "1", + "records": [ + { + "orderId": "2092814878690398210", + "tenantId": "2092814835845664769", + "inboundId": "2092814880129130499", + "mainStatus": "LOADED" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=OUTBOUND_DOCUMENT", + "http": 200, + "code": "200", + "requestId": "95e78822-1d56-4699-b90b-87322f972067, db5f9b65-6f7b-4cf6-a875-1c90e45d8f79", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=DELIVERING", + "http": 200, + "code": "200", + "requestId": "a98b495a-db94-471e-bc59-a3aeba7d2997, f409423a-5e9f-4f46-b2ec-203f987aa39a", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=SIGNED", + "http": 200, + "code": "200", + "requestId": "06260f7b-84cd-49f4-a03c-fa699a4e1a86, 3c3879e7-869d-4e9b-a725-868a466f8fb2", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=DELIVERED", + "http": 200, + "code": "200", + "requestId": "c6451658-5d84-4fa6-b2e5-2fee098c50c1, 05eb6078-71c4-4e98-b205-c643d69647b9", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=COMPLETED", + "http": 200, + "code": "200", + "requestId": "d46153fb-bfdd-4493-b789-a3a5261eed6d, 2b71ece4-b561-47f6-8978-68f71c9f62b3", + "passed": true, + "total": "2", + "records": [ + { + "orderId": "2084515377635758081", + "tenantId": "2084513933705150465", + "inboundId": "2085623586303365121", + "mainStatus": "COMPLETED" + }, + { + "orderId": "2084210113483173890", + "tenantId": "10001", + "inboundId": "2085623585678413826", + "mainStatus": "COMPLETED" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=MEASUREMENT_REVIEW", + "http": 200, + "code": "200", + "requestId": "16fe4770-d066-42f0-b9a0-3fb9e5ab7403, b51983ce-cf48-42b3-b003-0156ca953e44", + "passed": true, + "total": "120", + "records": [ + { + "orderId": "2085355294326624258", + "tenantId": "2085308606829346818", + "inboundId": "2085355307252961281", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2085355295115153410", + "tenantId": "2085308606829346818", + "inboundId": "2085355307303292930", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2085355295895293953", + "tenantId": "2085308606829346818", + "inboundId": "2085355307357818882", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2085355296650268673", + "tenantId": "2085308606829346818", + "inboundId": "2085355307408150530", + "mainStatus": "WAIT_MEASURE" + }, + { + "orderId": "2085355297438797826", + "tenantId": "2085308606829346818", + "inboundId": "2085355307462676481", + "mainStatus": "WAIT_MEASURE" + } + ] + }, + { + "path": "9202/actuator/health", + "http": 200, + "body": { + "status": "UP" + }, + "passed": true + }, + { + "path": "9303/actuator/health", + "http": 200, + "body": { + "status": "UP" + }, + "passed": true + } +] \ No newline at end of file diff --git a/output/local-schema-repair/tab-smoke.mjs b/output/local-schema-repair/tab-smoke.mjs new file mode 100644 index 000000000..1afc8a491 --- /dev/null +++ b/output/local-schema-repair/tab-smoke.mjs @@ -0,0 +1,17 @@ +import fs from 'node:fs'; +const base=process.env.ADMIN_TEST_GATEWAY; +if(!base||!['127.0.0.1','localhost'].includes(new URL(base).hostname))throw new Error('仅允许本机'); +let token='';const checks=[]; +async function call(path,body) { + const r=await fetch(base+path,{method:body?'POST':'GET',headers:{...(token?{Authorization:'Bearer '+token}:{}),...(body?{'Content-Type':'application/json'}:{})},body:body?JSON.stringify(body):undefined,signal:AbortSignal.timeout(45000)}); + const value=await r.json().catch(()=>null); + checks.push({path,http:r.status,code:value?.code,message:String(value?.code)==='200'?undefined:value?.message,requestId:r.headers.get('x-request-id'),passed:r.status===200&&String(value?.code)==='200',total:value?.data?.total,counts:value?.data?.counts,records:value?.data?.records?.map(x=>({orderId:x.orderId,tenantId:x.tenantId,inboundId:x.inboundId,mainStatus:x.mainStatus}))}); + fs.writeFileSync(new URL('tab-smoke.json',import.meta.url),JSON.stringify(checks,null,2)); + return value; +} +const login=await call('/api/auth/login',{loginId:process.env.ADMIN_TEST_USERNAME,password:process.env.ADMIN_TEST_PASSWORD}); +if(!login?.data?.accessToken)throw new Error('本地登录失败');token=login.data.accessToken; +for(const path of ['/api/platform/v1/orders/status-counts',...['PENDING_REVIEW','WAIT_MEASURE','WAIT_WEIGHT_CONFIRM','WEIGHT_CONFIRMED','WAIT_CUSTOMS_DOCS','WAIT_PALLETIZE','WAIT_SPLIT','LOADING','LOADED','EXPORT_CUSTOMS','SAILING_CLEARANCE','WAIT_UNLOAD','WAIT_DISPATCH','OUTBOUND_DOCUMENT','DELIVERING','SIGNED','DELIVERED','COMPLETED','MEASUREMENT_REVIEW'].map(s=>'/api/platform/v1/orders?page=1&size=5&mainStatus='+s)])await call(path); +for(const port of [9202,9303]){const r=await fetch(`http://127.0.0.1:${port}/actuator/health`);checks.push({path:`${port}/actuator/health`,http:r.status,body:await r.json(),passed:r.ok});} +fs.writeFileSync(new URL('tab-smoke.json',import.meta.url),JSON.stringify(checks,null,2));console.log(JSON.stringify(checks,null,2)); + diff --git a/output/local-schema-repair/tail-final-consistency.json b/output/local-schema-repair/tail-final-consistency.json new file mode 100644 index 000000000..a2dce8a8d --- /dev/null +++ b/output/local-schema-repair/tail-final-consistency.json @@ -0,0 +1,67 @@ +{ + "at": "2026-10-20T03:20:01.182Z", + "checks": 23, + "failed": [], + "mismatches": [], + "tail": [ + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=SAILING_CLEARANCE", + "http": 200, + "code": "200", + "requestId": "6de0f6f1-db74-43bd-a2df-1356dd2621dc, 836088e2-6974-4d24-86b5-3381f988cee4", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_UNLOAD", + "http": 200, + "code": "200", + "requestId": "4134d8d3-dd4d-4fd6-8950-83e3697d3f74, aae63083-913c-4453-82d3-7f8c7c97ef3f", + "passed": true, + "total": "1", + "records": [ + { + "orderId": "2092814878690398210", + "tenantId": "2092814835845664769", + "inboundId": "2092814880129130499", + "mainStatus": "LOADED" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=WAIT_DISPATCH", + "http": 200, + "code": "200", + "requestId": "cbb986f8-a8db-4057-a4ce-f81973b9f167, bf7e93c6-dfce-435f-a1fa-ee8a5801defd", + "passed": true, + "total": "1", + "records": [ + { + "orderId": "2092814878690398210", + "tenantId": "2092814835845664769", + "inboundId": "2092814880129130499", + "mainStatus": "LOADED" + } + ] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=DELIVERING", + "http": 200, + "code": "200", + "requestId": "a98b495a-db94-471e-bc59-a3aeba7d2997, f409423a-5e9f-4f46-b2ec-203f987aa39a", + "passed": true, + "total": "0", + "records": [] + }, + { + "path": "/api/platform/v1/orders?page=1&size=5&mainStatus=SIGNED", + "http": 200, + "code": "200", + "requestId": "06260f7b-84cd-49f4-a03c-fa699a4e1a86, 3c3879e7-869d-4e9b-a725-868a466f8fb2", + "passed": true, + "total": "0", + "records": [] + } + ] +} \ No newline at end of file diff --git a/output/local-schema-repair/tail-flow-inspect.json b/output/local-schema-repair/tail-flow-inspect.json new file mode 100644 index 000000000..1aa585f0f --- /dev/null +++ b/output/local-schema-repair/tail-flow-inspect.json @@ -0,0 +1,189 @@ +[ + { + "path": "/api/platform/v1/iam/users/domestic-pda-operators?warehouseId=193000000000200001", + "code": "200", + "message": "success", + "data": [ + { + "userId": "1790048228520288513", + "displayName": "张三" + }, + { + "userId": "1790048228520288516", + "displayName": "李四" + } + ], + "requestId": null, + "traceId": null, + "timestamp": "2026-10-20T02:33:57.852782300Z" + }, + { + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "code": "200", + "message": "success", + "data": { + "id": "2102273311474982914", + "loadingPlanId": "2092814929479311362", + "containerBookingId": "2092814929307344898", + "inboundId": "2092814880129130499", + "inboundVersion": 6, + "loadingVersion": 6, + "cabinetNo": "CAB-260827-0019", + "currentContainerNo": "CSQU3054383", + "sourceType": "SIMULATION", + "recordStatus": "ACTIVE", + "mergedIntoContainerBookingId": null, + "taskStatus": "LOADING", + "workflowStatus": "IN_PROGRESS", + "version": 0, + "assignment": { + "assigneeId": "1790048228520288513", + "assigneeName": "pda_zhangsan", + "assignedBy": "1790048228520288513", + "assignedByName": "pda_zhangsan", + "assignmentType": "CLAIMED", + "version": 0 + }, + "review": null, + "completionCommand": null, + "items": [ + { + "id": "2102273311542091778", + "loadingPlanItemId": "2092814929680637954", + "tenantId": "2092814835845664769", + "inboundId": "2092814880129130499", + "inboundDetailId": "2092814878690398211", + "unitType": "PACKAGE", + "palletId": null, + "palletNo": null, + "indivisible": false, + "orderNo": "FL2092814878690398210", + "inboundCode": "NYEXX2608270051", + "cargoName": "SMALL 测试产品", + "boxCodes": [ + "NYEXX2608270051#4-1" + ], + "inventoryResources": [ + { + "blockId": "2092814880129130499", + "slotNo": 1, + "reservationId": "2092814900999888899", + "weightResultId": "2092814900605722626", + "palletSequence": 1, + "palletId": "2092814900211359746", + "locationId": "193000000000200202", + "locationCode": "A0", + "sharedOverflow": true, + "slotStatus": "BOUND", + "availablePackageCount": 4 + } + ], + "plannedPackageCount": 1, + "pickedPackageCount": 0, + "itemStatus": "PENDING", + "version": 0 + } + ] + }, + "requestId": null, + "traceId": null, + "timestamp": "2026-10-20T02:33:57.981150700Z" + }, + { + "path": "/api/platform/v1/containers/2092814929307344898/overview", + "code": "200", + "message": "success", + "data": { + "container": { + "id": "2092814929307344898", + "cabinetNo": "CAB-260827-0019", + "containerNo": "CSQU3054383", + "status": "LOADING", + "warehouseId": "193000000000200001", + "warehouseName": "义乌仓", + "voyageNo": "P3V-32153799-AA35DF75", + "vesselName": "P3VESSEL-32153799-AA35DF75", + "billOfLadingNo": "P3BL-32153799-AA35DF75", + "shippingCompanyId": "2092808875341127681", + "shippingCompanyName": "MATSON 开发联调船司", + "departurePortCode": "CNSZX", + "departurePortName": "深圳", + "destinationPortCode": "USLAX", + "destinationPortName": "洛杉矶", + "estimatedSailingAt": "2026-09-01T08:00:00", + "actualSailingAt": null, + "estimatedPortArrivalAt": "2026-09-20T08:00:00", + "actualPortArrivalAt": null, + "estimatedWarehouseArrivalAt": null, + "actualWarehouseArrivalAt": null, + "unloadingCompletedAt": null, + "unloadingPhotoUploadedAt": null, + "estimatedEmptyReportedAt": null, + "actualEmptyReportedAt": null, + "emptyReportSourceVersion": null, + "pickupCode": null, + "pickupCodeUpdatedBy": null, + "pickupCodeUpdatedByName": null, + "pickupCodeUpdatedAt": null, + "version": 2 + }, + "loadingPlanId": "2092814929479311362", + "pda": { + "taskId": "2102273311474982914", + "loadingPlanId": "2092814929479311362", + "containerBookingId": "2092814929307344898", + "taskStatus": "LOADING", + "workflowStatus": "IN_PROGRESS", + "taskVersion": 0, + "itemCount": 1, + "completedItemCount": 0, + "unresolvedItemCount": 1, + "photoCounts": [], + "photos": [], + "exceptionReasons": [] + }, + "documents": [], + "exception": { + "active": false, + "reason": null, + "markedBy": null, + "markedByName": null, + "markedAt": null + }, + "exceptionHistory": [], + "timeline": [ + { + "eventType": "TRANSPORT_UPDATE", + "detail": "按业务测试要求绑定已通过 ISO 6346 校验的集装箱号,暂不推送 PDA", + "operatorId": "9000000001", + "operatorName": "platform_custom_admin", + "occurredAt": "2026-09-22T11:32:55.69" + }, + { + "eventType": "PDA_CLAIM", + "detail": "claim-1790048228520288513-2102273311474982914-2092814929479311362-2092814929307344898", + "operatorId": "1790048228520288513", + "operatorName": "pda_zhangsan", + "occurredAt": "2026-09-22T14:27:48.707" + } + ] + }, + "requestId": null, + "traceId": null, + "timestamp": "2026-10-20T02:33:58.064086600Z" + }, + { + "path": "/api/platform/v1/container-shipping-nodes/2092814929307344898", + "code": "200", + "message": "success", + "data": { + "containerBookingId": "2092814929307344898", + "currentNode": null, + "currentNodeAt": null, + "nodes": [] + }, + "requestId": null, + "traceId": null, + "timestamp": "2026-10-20T02:33:58.128845700Z" + } +] \ No newline at end of file diff --git a/output/local-schema-repair/tail-flow-inspect.mjs b/output/local-schema-repair/tail-flow-inspect.mjs new file mode 100644 index 000000000..60bb7d4c3 --- /dev/null +++ b/output/local-schema-repair/tail-flow-inspect.mjs @@ -0,0 +1,16 @@ +import fs from 'node:fs'; +const base=process.env.ADMIN_TEST_GATEWAY; +if(!base || !['127.0.0.1','localhost'].includes(new URL(base).hostname))throw Error('仅允许本机'); +let token=''; +const login=await fetch(base+'/api/auth/login',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({loginId:process.env.ADMIN_TEST_USERNAME,password:process.env.ADMIN_TEST_PASSWORD})}).then(r=>r.json()); +if(String(login.code)!=='200'||!login.data?.accessToken)throw Error('登录失败'); +token=login.data.accessToken; +const paths=[ +'/api/platform/v1/iam/users/domestic-pda-operators?warehouseId=193000000000200001', +'/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001', +'/api/platform/v1/containers/2092814929307344898/overview', +'/api/platform/v1/container-shipping-nodes/2092814929307344898', +]; +const out=[]; +for(const path of paths){const r=await fetch(base+path,{headers:{Authorization:'Bearer '+token}}); const v=await r.json(); out.push({path,...v});console.log(path,v.code,String(v.message||''),v.data?Object.keys(v.data):'');} +fs.writeFileSync(new URL('tail-flow-inspect.json',import.meta.url),JSON.stringify(out,null,2)); diff --git a/output/local-schema-repair/tail-flow-state.json b/output/local-schema-repair/tail-flow-state.json new file mode 100644 index 000000000..893940890 --- /dev/null +++ b/output/local-schema-repair/tail-flow-state.json @@ -0,0 +1,1233 @@ +{ + "marker": "LOCAL-TAIL-20261020", + "environment": "LOCAL", + "photoEvidence": "SYNTHETIC_TEST_PNG", + "checks": [ + { + "method": "GET", + "path": "/api/platform/v1/iam/roles?page=1&size=200", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/iam/roles?page=1&size=200", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/iam/users", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/iam/users?page=1&size=20&keyword=local_tail_pda_20261020", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/assign", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/items/2102273311542091778/pick", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001&expectedVersion=0&evidenceType=PHOTO_STEP_1&remark=LOCAL-TAIL-20261020+%E5%90%88%E6%88%90%E6%B5%8B%E8%AF%95%E5%9B%BE%E7%89%87%EF%BC%9B%E4%BB%85%E6%9C%AC%E5%9C%B0%E6%B5%81%E8%BD%AC%E9%AA%8C%E6%94%B6", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001&expectedVersion=0&evidenceType=PHOTO_STEP_2&remark=LOCAL-TAIL-20261020+%E5%90%88%E6%88%90%E6%B5%8B%E8%AF%95%E5%9B%BE%E7%89%87%EF%BC%9B%E4%BB%85%E6%9C%AC%E5%9C%B0%E6%B5%81%E8%BD%AC%E9%AA%8C%E6%94%B6", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001&expectedVersion=0&evidenceType=PHOTO_STEP_3&remark=LOCAL-TAIL-20261020+%E5%90%88%E6%88%90%E6%B5%8B%E8%AF%95%E5%9B%BE%E7%89%87%EF%BC%9B%E4%BB%85%E6%9C%AC%E5%9C%B0%E6%B5%81%E8%BD%AC%E9%AA%8C%E6%94%B6", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001&expectedVersion=0&evidenceType=PHOTO_STEP_4&remark=LOCAL-TAIL-20261020+%E5%90%88%E6%88%90%E6%B5%8B%E8%AF%95%E5%9B%BE%E7%89%87%EF%BC%9B%E4%BB%85%E6%9C%AC%E5%9C%B0%E6%B5%81%E8%BD%AC%E9%AA%8C%E6%94%B6", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001&expectedVersion=0&evidenceType=SEAL&remark=LOCAL-TAIL-20261020+%E5%90%88%E6%88%90%E6%B5%8B%E8%AF%95%E5%9B%BE%E7%89%87%EF%BC%9B%E4%BB%85%E6%9C%AC%E5%9C%B0%E6%B5%81%E8%BD%AC%E9%AA%8C%E6%94%B6&sealNo=LOCALTEST20261020", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/complete", + "http": 200, + "code": "S0500", + "message": "Internal server error" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/complete", + "http": 200, + "code": "S0500", + "message": "Internal server error" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/complete", + "http": 200, + "code": "S0500", + "message": "Internal server error" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/complete", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/complete", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/complete", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/complete", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/complete", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/complete", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/evidence?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914/complete", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/container-shipping-nodes/2092814929307344898", + "http": 200, + "code": "S0500", + "message": "Internal server error" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/container-shipping-nodes/2092814929307344898", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/containers/2092814929307344898/clearance", + "http": 200, + "code": "A0403", + "message": "Access denied" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "S0503", + "message": "统一订单状态查询响应无效" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "S0503", + "message": "统一订单状态查询响应无效" + }, + { + "method": "GET", + "path": "/api/platform/v1/containers/2092814929307344898/clearance", + "http": 200, + "code": "A0404", + "message": "国外工作台货柜不存在" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/outbound-dispatches?containerBookingId=2092814929307344898", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/outbound-dispatches/2092814929307344898/gate", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "S0503", + "message": "统一订单状态查询响应无效" + }, + { + "method": "GET", + "path": "/api/platform/v1/first-leg/pda-loading/tasks/2102273311474982914?warehouseId=193000000000200001", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/containers/2092814929307344898/clearance", + "http": 200, + "code": "200" + }, + { + "method": "POST", + "path": "/api/platform/v1/containers/2092814929307344898/clearance/document/upload?expectedVersion=0&operationReason=%E6%9C%AC%E5%9C%B0%E6%B5%81%E8%BD%AC%E6%B5%8B%E8%AF%95%E8%B5%84%E6%96%99", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders/status-counts", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/containers/2092814929307344898/clearance", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders?page=1&size=200&mainStatus=SAILING_CLEARANCE", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders?page=1&size=200&mainStatus=WAIT_UNLOAD", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders?page=1&size=200&mainStatus=WAIT_DISPATCH", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/containers/2092814929307344898/clearance", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders?page=1&size=200&mainStatus=SAILING_CLEARANCE", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders?page=1&size=200&mainStatus=WAIT_UNLOAD", + "http": 200, + "code": "200" + }, + { + "method": "GET", + "path": "/api/platform/v1/orders?page=1&size=200&mainStatus=WAIT_DISPATCH", + "http": 200, + "code": "200" + } + ], + "taskId": "2102273311474982914", + "containerId": "2092814929307344898", + "inboundId": "2092814880129130499", + "orderId": "2092814878690398210", + "warehouseId": "193000000000200001", + "lastError": "GET /api/platform/v1/orders/status-counts: S0503 统一订单状态查询响应无效", + "pdaUsername": "local_tail_pda_20261020", + "pdaUserId": "2112372466490671105", + "before": { + "counts": { + "PENDING_REVIEW": 127, + "WAIT_MEASURE": 195, + "WAIT_PALLETIZE": 6, + "WAIT_SPLIT": 126, + "LOADING": 9, + "LOADED": 73, + "DELIVERED": 0, + "COMPLETED": 2, + "WAIT_WEIGHT_CONFIRM": 125, + "WEIGHT_CONFIRMED": 1, + "WAIT_CUSTOMS_DOCS": 0, + "EXPORT_CUSTOMS": 12, + "SAILING_CLEARANCE": 0, + "WAIT_UNLOAD": 0, + "WAIT_DISPATCH": 0, + "OUTBOUND_DOCUMENT": 0, + "DELIVERING": 0, + "SIGNED": 0, + "MEASUREMENT_REVIEW": 120 + } + }, + "evidence": [ + "PHOTO_STEP_1", + "PHOTO_STEP_2", + "PHOTO_STEP_3", + "PHOTO_STEP_4", + "SEAL" + ], + "completion": { + "id": "2102273311474982914", + "loadingPlanId": "2092814929479311362", + "containerBookingId": "2092814929307344898", + "inboundId": "2092814880129130499", + "inboundVersion": 6, + "loadingVersion": 6, + "cabinetNo": "CAB-260827-0019", + "currentContainerNo": "CSQU3054383", + "sourceType": "SIMULATION", + "recordStatus": "ACTIVE", + "mergedIntoContainerBookingId": null, + "taskStatus": "COMPLETING", + "workflowStatus": "PROCESSING", + "version": 14, + "assignment": { + "assigneeId": "2112372466490671105", + "assigneeName": "本地尾程流转验证PDA", + "assignedBy": "1000001", + "assignedByName": "platform_admin", + "assignmentType": "ASSIGNED", + "version": 1 + }, + "review": null, + "completionCommand": { + "id": "2112373676283224065", + "operationId": "LOCAL-TAIL-20261020-complete", + "status": "RETRYABLE", + "expectedTaskVersion": 1, + "remark": "LOCAL-TAIL-20261020 本地测试装柜交接验证", + "attemptCount": 8, + "nextRetryAt": "2026-10-20T10:53:11.922", + "failureStage": "WAREHOUSE_SETTLEMENT", + "failureCode": "S0503", + "requestId": null, + "traceId": null, + "completedAt": null + }, + "items": [ + { + "id": "2102273311542091778", + "loadingPlanItemId": "2092814929680637954", + "tenantId": "2092814835845664769", + "inboundId": "2092814880129130499", + "inboundDetailId": "2092814878690398211", + "unitType": "PACKAGE", + "palletId": null, + "palletNo": null, + "indivisible": false, + "orderNo": "FL2092814878690398210", + "inboundCode": "NYEXX2608270051", + "cargoName": "SMALL 测试产品", + "boxCodes": [ + "NYEXX2608270051#4-1" + ], + "inventoryResources": [ + { + "blockId": "2092814880129130499", + "slotNo": 1, + "reservationId": "2092814900999888899", + "weightResultId": "2092814900605722626", + "palletSequence": 1, + "palletId": "2092814900211359746", + "locationId": "193000000000200202", + "locationCode": "A0", + "sharedOverflow": true, + "slotStatus": "BOUND", + "availablePackageCount": 4 + } + ], + "plannedPackageCount": 1, + "pickedPackageCount": 1, + "itemStatus": "PICKED", + "version": 1 + } + ] + }, + "task": { + "id": "2102273311474982914", + "loadingPlanId": "2092814929479311362", + "containerBookingId": "2092814929307344898", + "inboundId": "2092814880129130499", + "inboundVersion": 9, + "loadingVersion": 9, + "cabinetNo": "CAB-260827-0019", + "currentContainerNo": "CSQU3054383", + "sourceType": "SIMULATION", + "recordStatus": "ACTIVE", + "mergedIntoContainerBookingId": null, + "taskStatus": "COMPLETED", + "workflowStatus": "COMPLETED", + "version": 15, + "assignment": { + "assigneeId": "2112372466490671105", + "assigneeName": "本地尾程流转验证PDA", + "assignedBy": "1000001", + "assignedByName": "platform_admin", + "assignmentType": "ASSIGNED", + "version": 1 + }, + "review": { + "status": "APPROVED", + "reviewedBy": "2112372466490671105", + "reviewedByName": "local_tail_pda_20261020", + "remark": "LOCAL-TAIL-20261020 本地测试装柜交接验证", + "version": 0 + }, + "completionCommand": { + "id": "2112373676283224065", + "operationId": "LOCAL-TAIL-20261020-complete", + "status": "COMPLETED", + "expectedTaskVersion": 1, + "remark": "LOCAL-TAIL-20261020 本地测试装柜交接验证", + "attemptCount": 9, + "nextRetryAt": "2026-10-20T10:53:11.922", + "failureStage": null, + "failureCode": null, + "requestId": null, + "traceId": null, + "completedAt": "2026-10-20T10:53:13.826" + }, + "items": [ + { + "id": "2102273311542091778", + "loadingPlanItemId": "2092814929680637954", + "tenantId": "2092814835845664769", + "inboundId": "2092814880129130499", + "inboundDetailId": "2092814878690398211", + "unitType": "PACKAGE", + "palletId": null, + "palletNo": null, + "indivisible": false, + "orderNo": "FL2092814878690398210", + "inboundCode": "NYEXX2608270051", + "cargoName": "SMALL 测试产品", + "boxCodes": [ + "NYEXX2608270051#4-1" + ], + "inventoryResources": [], + "plannedPackageCount": 1, + "pickedPackageCount": 1, + "itemStatus": "PICKED", + "version": 1 + } + ] + }, + "counts": { + "counts": { + "PENDING_REVIEW": 127, + "WAIT_MEASURE": 195, + "WAIT_PALLETIZE": 6, + "WAIT_SPLIT": 127, + "LOADING": 8, + "LOADED": 74, + "DELIVERED": 0, + "COMPLETED": 2, + "WAIT_WEIGHT_CONFIRM": 124, + "WEIGHT_CONFIRMED": 1, + "WAIT_CUSTOMS_DOCS": 0, + "EXPORT_CUSTOMS": 55, + "SAILING_CLEARANCE": 1, + "WAIT_UNLOAD": 0, + "WAIT_DISPATCH": 1, + "OUTBOUND_DOCUMENT": 0, + "DELIVERING": 0, + "SIGNED": 0, + "MEASUREMENT_REVIEW": 120 + } + }, + "nodeTime": "2026-10-20T10:54:20", + "departure": { + "containerBookingId": "2092814929307344898", + "currentNode": "DEPARTED_ORIGIN_PORT", + "currentNodeAt": "2026-10-20T10:54:20", + "nodes": [ + { + "id": "2112377029255979010", + "providerCode": "MANUAL", + "providerEventId": "39f3f09e55b61fc0e0beba2cc50bf167b060cc1b11862d2af2f25713d1d239ce", + "providerNodeCode": "DEPARTED_ORIGIN_PORT", + "standardNode": "DEPARTED_ORIGIN_PORT", + "nodeSequence": 40, + "observedAt": "2026-10-20T10:54:20", + "estimatedAt": null, + "actualAt": "2026-10-20T10:54:20", + "locationCode": null, + "locationName": "本地手动开船流转验收", + "sourceReference": "MANUAL:1000001", + "rawPayloadHash": "6435970b1711830d6f5ee86cb844346f655fba2b7056c009bce285b8505df4c5", + "createdAt": "2026-10-20T10:55:04.513" + } + ] + }, + "afterDeparture": { + "counts": { + "PENDING_REVIEW": 127, + "WAIT_MEASURE": 195, + "WAIT_PALLETIZE": 6, + "WAIT_SPLIT": 127, + "LOADING": 8, + "LOADED": 74, + "DELIVERED": 0, + "COMPLETED": 2, + "WAIT_WEIGHT_CONFIRM": 124, + "WEIGHT_CONFIRMED": 1, + "WAIT_CUSTOMS_DOCS": 0, + "EXPORT_CUSTOMS": 12, + "SAILING_CLEARANCE": 0, + "WAIT_UNLOAD": 0, + "WAIT_DISPATCH": 0, + "OUTBOUND_DOCUMENT": 0, + "DELIVERING": 0, + "SIGNED": 0, + "MEASUREMENT_REVIEW": 120 + } + }, + "clearanceBefore": null, + "clearance": { + "id": "2112381005493927938", + "documentType": "DESTINATION_CLEARANCE", + "fileId": "2112381005254864897", + "fileName": "LOCAL-TAIL-20261020-clearance.txt", + "fileHash": "95e01269c0ae1de50bb60315d5b7a0ec5c82dba5d2bd6911566ede581e8e69e2", + "uploadedBy": "1000001", + "uploadedByName": "platform_admin", + "uploadedAt": "2026-10-20T11:10:52.514", + "completedBy": null, + "completedByName": null, + "completedAt": null, + "version": 0 + }, + "afterClearance": { + "counts": { + "PENDING_REVIEW": 127, + "WAIT_MEASURE": 195, + "WAIT_PALLETIZE": 6, + "WAIT_SPLIT": 127, + "LOADING": 8, + "LOADED": 74, + "DELIVERED": 0, + "COMPLETED": 2, + "WAIT_WEIGHT_CONFIRM": 124, + "WEIGHT_CONFIRMED": 1, + "WAIT_CUSTOMS_DOCS": 0, + "EXPORT_CUSTOMS": 55, + "SAILING_CLEARANCE": 0, + "WAIT_UNLOAD": 1, + "WAIT_DISPATCH": 1, + "OUTBOUND_DOCUMENT": 0, + "DELIVERING": 0, + "SIGNED": 0, + "MEASUREMENT_REVIEW": 120 + } + }, + "verification": { + "at": "2026-10-20T03:20:03.315Z", + "document": { + "id": "2112381005493927938", + "documentType": "DESTINATION_CLEARANCE", + "fileId": "2112381005254864897", + "fileName": "LOCAL-TAIL-20261020-clearance.txt", + "fileHash": "95e01269c0ae1de50bb60315d5b7a0ec5c82dba5d2bd6911566ede581e8e69e2", + "uploadedBy": "1000001", + "uploadedByName": "platform_admin", + "uploadedAt": "2026-10-20T11:10:52.514", + "completedBy": null, + "completedByName": null, + "completedAt": null, + "version": 0 + }, + "rows": { + "SAILING_CLEARANCE": { + "total": "0", + "matching": [] + }, + "WAIT_UNLOAD": { + "total": "1", + "matching": [ + { + "orderId": "2092814878690398210", + "orderVersion": 5, + "tenantId": "2092814835845664769", + "orderNo": "FL2092814878690398210", + "mainStatus": "LOADED", + "nextAction": null, + "customerFeeConfirmationRequired": true, + "relation": { + "role": "PARENT", + "rootOrderId": "2092814878690398210", + "parentOrderId": null, + "splitSequence": null, + "childCount": 1 + }, + "internalOrderStatus": "APPROVED", + "customerId": "2092814835845664769", + "customerName": "全量验收下单客户-7032153799", + "channelCode": "EXX_RAIL_NY", + "channelName": "纽约EXX海铁", + "channelChanged": false, + "receivingWarehouseId": "193000000000200001", + "receivingWarehouseName": "义乌仓", + "destinationWarehouseId": "193000000000000244", + "destinationWarehouseName": "XLX1", + "inboundId": "2092814880129130499", + "inboundVersion": 9, + "inboundCode": "NYEXX2608270051", + "expectedShipDate": null, + "holdFlag": false, + "currentHoldReason": null, + "totalPackageCount": 4, + "recommendedPalletType": null, + "locationCodes": "A0", + "estimatedVolumeCbm": null, + "expectedVolumeCbm": 0.278, + "actualGrossWeightKg": 100, + "actualVolumeCbm": 0.187, + "expectedArrivalAt": "2026-09-26T00:00:00", + "feeReviewStatus": "NOT_SUBMITTED", + "companyName": null, + "businessType": "FBA_SEA", + "fulfillmentType": "STANDARD", + "lxCode": null, + "pickupMethod": "PICKUP", + "taxMode": "BUY_DECLARATION", + "containerMode": "LCL", + "customsInspection": false, + "destinationType": "FBA", + "destinationCode": "XLX1", + "totalPalletCount": 1, + "chargeableWeightKg": null, + "chargeableVolumeCbm": null, + "volumetricWeightKg": 31.229, + "totalNetWeightKg": 92, + "measurementCompletedAt": "2026-08-27T11:22:09.659", + "inboundCompletedAt": "2026-08-27T11:22:09.815", + "expressCompany": null, + "expressTrackingNo": null, + "createdBy": null, + "skuNos": [ + "SKU-SMALL-ADMIN-API-20260827032153799-LOAD", + "SKU-MEDIUM-ADMIN-API-20260827032153799-LOAD", + "SKU-LARGE-ADMIN-API-20260827032153799-LOAD", + "SKU-EXTRA_LARGE-ADMIN-API-20260827032153799-LOAD" + ], + "totalQuantity": 46, + "shipmentId": "SHIP-ADMIN-API-20260827032153799-LOAD", + "referenceId": "REF-ADMIN-API-20260827032153799-LOAD", + "measurement": { + "reviewStatus": "APPROVED", + "actualGrossWeightKg": 100, + "actualVolumeCbm": 0.187, + "chargeableWeightKg": null, + "completedAt": "2026-08-27T11:22:09.659" + }, + "preload": { + "status": "CONFIRMED", + "version": 2, + "itemCount": 0, + "updatedAt": "2026-09-22T13:46:30.454" + }, + "loading": { + "status": "COMPLETED", + "loadingVersion": 2, + "pickingVersion": 2, + "expectedCount": 1, + "pickedCount": 1, + "evidenceCount": 5, + "sealNo": "LOCALTEST20261020", + "updatedAt": "2026-10-20T10:53:13.825" + }, + "delivery": { + "status": "PENDING", + "completedAt": null, + "trackingNo": null + }, + "transport": { + "containerNo": "CSQU3054383", + "cabinetNo": "CAB-260827-0019", + "vesselName": "P3VESSEL-32153799-AA35DF75", + "voyageNo": "P3V-32153799-AA35DF75", + "estimatedSailingAt": "2026-09-01T08:00:00", + "actualSailingAt": null, + "effectiveSailingAt": "2026-09-01T08:00:00", + "effectiveSailingAtEstimated": true, + "estimatedPortArrivalAt": "2026-09-20T08:00:00", + "actualPortArrivalAt": null, + "effectivePortArrivalAt": "2026-09-20T08:00:00", + "effectivePortArrivalAtEstimated": true + }, + "coLoadGroup": null, + "customerRemark": "ADMIN-API-20260827032153799-LOAD Client 创建隔离订单", + "latestInternalNote": null, + "warehouseRemark": null, + "customerServiceRemark": null, + "createdAt": "2026-08-27T11:22:04.702", + "updatedAt": "2026-10-20T10:53:13.725", + "requestedPickupAt": "2026-09-03T03:22:04" + } + ] + }, + "WAIT_DISPATCH": { + "total": "1", + "matching": [ + { + "orderId": "2092814878690398210", + "orderVersion": 5, + "tenantId": "2092814835845664769", + "orderNo": "FL2092814878690398210", + "mainStatus": "LOADED", + "nextAction": null, + "customerFeeConfirmationRequired": true, + "relation": { + "role": "PARENT", + "rootOrderId": "2092814878690398210", + "parentOrderId": null, + "splitSequence": null, + "childCount": 1 + }, + "internalOrderStatus": "APPROVED", + "customerId": "2092814835845664769", + "customerName": "全量验收下单客户-7032153799", + "channelCode": "EXX_RAIL_NY", + "channelName": "纽约EXX海铁", + "channelChanged": false, + "receivingWarehouseId": "193000000000200001", + "receivingWarehouseName": "义乌仓", + "destinationWarehouseId": "193000000000000244", + "destinationWarehouseName": "XLX1", + "inboundId": "2092814880129130499", + "inboundVersion": 9, + "inboundCode": "NYEXX2608270051", + "expectedShipDate": null, + "holdFlag": false, + "currentHoldReason": null, + "totalPackageCount": 4, + "recommendedPalletType": null, + "locationCodes": "A0", + "estimatedVolumeCbm": null, + "expectedVolumeCbm": 0.278, + "actualGrossWeightKg": 100, + "actualVolumeCbm": 0.187, + "expectedArrivalAt": "2026-09-26T00:00:00", + "feeReviewStatus": "NOT_SUBMITTED", + "companyName": null, + "businessType": "FBA_SEA", + "fulfillmentType": "STANDARD", + "lxCode": null, + "pickupMethod": "PICKUP", + "taxMode": "BUY_DECLARATION", + "containerMode": "LCL", + "customsInspection": false, + "destinationType": "FBA", + "destinationCode": "XLX1", + "totalPalletCount": 1, + "chargeableWeightKg": null, + "chargeableVolumeCbm": null, + "volumetricWeightKg": 31.229, + "totalNetWeightKg": 92, + "measurementCompletedAt": "2026-08-27T11:22:09.659", + "inboundCompletedAt": "2026-08-27T11:22:09.815", + "expressCompany": null, + "expressTrackingNo": null, + "createdBy": null, + "skuNos": [ + "SKU-SMALL-ADMIN-API-20260827032153799-LOAD", + "SKU-MEDIUM-ADMIN-API-20260827032153799-LOAD", + "SKU-LARGE-ADMIN-API-20260827032153799-LOAD", + "SKU-EXTRA_LARGE-ADMIN-API-20260827032153799-LOAD" + ], + "totalQuantity": 46, + "shipmentId": "SHIP-ADMIN-API-20260827032153799-LOAD", + "referenceId": "REF-ADMIN-API-20260827032153799-LOAD", + "measurement": { + "reviewStatus": "APPROVED", + "actualGrossWeightKg": 100, + "actualVolumeCbm": 0.187, + "chargeableWeightKg": null, + "completedAt": "2026-08-27T11:22:09.659" + }, + "preload": { + "status": "CONFIRMED", + "version": 2, + "itemCount": 0, + "updatedAt": "2026-09-22T13:46:30.454" + }, + "loading": { + "status": "COMPLETED", + "loadingVersion": 2, + "pickingVersion": 2, + "expectedCount": 1, + "pickedCount": 1, + "evidenceCount": 5, + "sealNo": "LOCALTEST20261020", + "updatedAt": "2026-10-20T10:53:13.825" + }, + "delivery": { + "status": "PENDING", + "completedAt": null, + "trackingNo": null + }, + "transport": { + "containerNo": "CSQU3054383", + "cabinetNo": "CAB-260827-0019", + "vesselName": "P3VESSEL-32153799-AA35DF75", + "voyageNo": "P3V-32153799-AA35DF75", + "estimatedSailingAt": "2026-09-01T08:00:00", + "actualSailingAt": null, + "effectiveSailingAt": "2026-09-01T08:00:00", + "effectiveSailingAtEstimated": true, + "estimatedPortArrivalAt": "2026-09-20T08:00:00", + "actualPortArrivalAt": null, + "effectivePortArrivalAt": "2026-09-20T08:00:00", + "effectivePortArrivalAtEstimated": true + }, + "coLoadGroup": null, + "customerRemark": "ADMIN-API-20260827032153799-LOAD Client 创建隔离订单", + "latestInternalNote": null, + "warehouseRemark": null, + "customerServiceRemark": null, + "createdAt": "2026-08-27T11:22:04.702", + "updatedAt": "2026-10-20T10:53:13.725", + "requestedPickupAt": "2026-09-03T03:22:04" + } + ] + } + }, + "download": { + "http": 200, + "containsLocalTestMarker": true + } + } +} \ No newline at end of file diff --git a/output/local-schema-repair/tail-flow-warehouse-before.tsv b/output/local-schema-repair/tail-flow-warehouse-before.tsv new file mode 100644 index 000000000..dda43ca7a --- /dev/null +++ b/output/local-schema-repair/tail-flow-warehouse-before.tsv @@ -0,0 +1,2 @@ +id warehouse_code internal_code version +193000000000000244 XLX1 NULL 0 diff --git a/output/local-schema-repair/tail-flow.mjs b/output/local-schema-repair/tail-flow.mjs new file mode 100644 index 000000000..6ac18214e --- /dev/null +++ b/output/local-schema-repair/tail-flow.mjs @@ -0,0 +1,84 @@ +import fs from 'node:fs'; +const base=process.env.ADMIN_TEST_GATEWAY; +if(!base||!['127.0.0.1','localhost'].includes(new URL(base).hostname))throw Error('仅允许本机'); +const marker='LOCAL-TAIL-20261020'; +const file=new URL('tail-flow-state.json',import.meta.url); +const state=fs.existsSync(file)?JSON.parse(fs.readFileSync(file,'utf8')):{marker,environment:'LOCAL',photoEvidence:'SYNTHETIC_TEST_PNG',checks:[],taskId:'2102273311474982914',containerId:'2092814929307344898',inboundId:'2092814880129130499',orderId:'2092814878690398210',warehouseId:'193000000000200001'}; +const save=()=>fs.writeFileSync(file,JSON.stringify(state,null,2)); +async function api(token,method,path,body,key){ + const form=body instanceof FormData; + const r=await fetch(base+path,{method,headers:{...(token?{Authorization:'Bearer '+token}:{}),...(!form&&body!==undefined?{'Content-Type':'application/json'}:{}),...(key?{'Idempotency-Key':key}:{})},body:body===undefined?undefined:form?body:JSON.stringify(body),signal:AbortSignal.timeout(60000)}); + const v=await r.json(); + if(!path.includes('/auth/')){state.checks.push({method,path,http:r.status,code:v.code,message:String(v.code)==='200'?undefined:v.message});save();console.log(method,path,v.code,String(v.code)==='200'?'':v.message);} + if(!r.ok||String(v.code)!=='200')throw Error(`${method} ${path}: ${v.code} ${v.message}`); + return v.data; +} +const admin=(await api('','POST','/api/auth/login',{loginId:process.env.ADMIN_TEST_USERNAME,password:process.env.ADMIN_TEST_PASSWORD})).accessToken; +const root='/api/platform/v1/first-leg/pda-loading/tasks/'+state.taskId; +const task=()=>api(admin,'GET',root+'?warehouseId='+state.warehouseId); +const action=process.argv[2]||'inspect'; +try { + if(action==='gate'){ + for(const suffix of ['?containerBookingId='+state.containerId,'/'+state.containerId+'/gate']){ + console.log(JSON.stringify(await api(admin,'GET','/api/platform/v1/first-leg/outbound-dispatches'+suffix))); + } + } + if(action==='verify'){ + const doc=await api(admin,'GET','/api/platform/v1/containers/'+state.containerId+'/clearance'); + const rows={}; + for(const status of ['SAILING_CLEARANCE','WAIT_UNLOAD','WAIT_DISPATCH']){ + const page=await api(admin,'GET','/api/platform/v1/orders?page=1&size=200&mainStatus='+status); + rows[status]={total:page.total,matching:page.records.filter(r=>r.inboundId===state.inboundId)}; + } + if(rows.SAILING_CLEARANCE.matching.length||rows.WAIT_UNLOAD.matching.length!==1||rows.WAIT_DISPATCH.matching.length!==1)throw Error('测试来源页签流转不符合预期'); + const r=await fetch(base+'/api/platform/v1/containers/'+state.containerId+'/clearance/document/'+doc.fileId+'/download',{headers:{Authorization:'Bearer '+admin},signal:AbortSignal.timeout(30000)}); + const downloaded=await r.text(); + if(!r.ok||!downloaded.includes(marker))throw Error('测试清关附件下载不一致'); + state.verification={at:new Date().toISOString(),document:doc,rows,download:{http:r.status,containsLocalTestMarker:true}};save(); + console.log(JSON.stringify({document:doc,rows:Object.fromEntries(Object.entries(rows).map(([s,p])=>[s,{total:p.total,matching:p.matching.map(r=>r.inboundId)}])),downloadHttp:r.status})); + } + if(action==='prepare'){ + if(!state.pdaUserId && state.checks.some(c=>c.method==='POST'&&c.path==='/api/platform/v1/iam/users'&&String(c.code)==='200')){ const a=await api('','POST','/api/auth/login',{loginId:state.pdaUsername,password:process.env.LOCAL_TRANSFER_PDA_PASSWORD}); state.pdaUserId=JSON.parse(Buffer.from(a.accessToken.split('.')[1],'base64url')).sub;save(); } + if(!state.pdaUserId){ + const roles=await api(admin,'GET','/api/platform/v1/iam/roles?page=1&size=200'); + const role=(roles.records||roles).find(r=>r.roleCode==='CN_FIRSTLEG_PDA_OPERATOR'); + if(!role)throw Error('缺少国内PDA角色'); + state.pdaUsername='local_tail_pda_20261020';save(); + await api(admin,'POST','/api/platform/v1/iam/users',{username:state.pdaUsername,displayName:'本地尾程流转验证PDA',phone:'18'+String(Date.now()).slice(-9),tenantId:'0',roleIds:[role.id],domesticWarehouseId:state.warehouseId,password:process.env.LOCAL_TRANSFER_PDA_PASSWORD,status:'ACTIVE'}); + const users=await api(admin,'GET','/api/platform/v1/iam/users?page=1&size=20&keyword='+state.pdaUsername); + const user=users.records.find(r=>r.username===state.pdaUsername); + if(!user)throw Error('PDA创建后未查到');state.pdaUserId=user.userId;save(); + } + const pda=(await api('','POST','/api/auth/login',{loginId:state.pdaUsername,password:process.env.LOCAL_TRANSFER_PDA_PASSWORD})).accessToken; + let current=await task(); + if(current.assignment?.assigneeId!==state.pdaUserId)current=await api(admin,'POST',root+'/assign',{assigneeId:state.pdaUserId,assigneeName:'本地尾程流转验证PDA',expectedAssignmentVersion:current.assignment?.version||0,operationId:marker+'-assign'}); + if(!state.before){state.before=await api(admin,'GET','/api/platform/v1/orders/status-counts');save();} + for(const item of current.items){if(item.itemStatus!=='PICKED')await api(pda,'POST',root+'/items/'+item.id+'/pick',{warehouseId:state.warehouseId,pickedPackageCount:item.plannedPackageCount,version:item.version,operationId:marker+'-pick-'+item.id});} + const evidence=await api(pda,'GET',root+'/evidence?warehouseId='+state.warehouseId); + for(const type of ['PHOTO_STEP_1','PHOTO_STEP_2','PHOTO_STEP_3','PHOTO_STEP_4','SEAL']){ + if(evidence.evidences?.some(e=>e.evidenceType===type&&e.status==='ACTIVE'))continue; + if(state.evidence?.includes(type))continue; + const q=new URLSearchParams({warehouseId:state.warehouseId,expectedVersion:'0',evidenceType:type,remark:marker+' 合成测试图片;仅本地流转验收'}); + if(type==='SEAL')q.set('sealNo','LOCALTEST20261020'); + const bytes=Uint8Array.from([137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,1,0,0,0,1,8,6,0,0,0,31,21,196,137,0,0,0,13,73,68,65,84,8,215,99,248,207,192,240,31,0,5,0,1,255,137,153,61,29,0,0,0,0,73,69,78,68,174,66,96,130]); + const body=new FormData();body.append('file',new Blob([bytes],{type:'image/png'}),marker+'-'+type+'.png'); + await api(pda,'POST',root+'/evidence?'+q,body,marker+'-'+type);(state.evidence??=[]).push(type);save(); + } + current=await task(); + if(current.taskStatus==='LOADING'||current.taskStatus==='COMPLETION_FAILED')state.completion=await api(pda,'POST',root+'/complete',{expectedTaskVersion:state.completion?.completionCommand?.expectedTaskVersion??current.version,operationId:marker+'-complete',remark:marker+' 本地测试装柜交接验证'}); + save(); + } + if(action==='inspect'||action==='prepare') {state.task=await task();state.counts=await api(admin,'GET','/api/platform/v1/orders/status-counts');save();console.log(JSON.stringify({taskStatus:state.task.taskStatus,completion:state.task.completionCommand,counts:state.counts}));} + if(action==='depart'){ + if((await task()).taskStatus!=='COMPLETED')throw Error('必须先装柜完成'); + state.nodeTime??=new Date(Date.now()+8*3600000).toISOString().slice(0,19);save(); + state.departure=await api(admin,'POST','/api/platform/v1/container-shipping-nodes/'+state.containerId,{standardNode:'DEPARTED_ORIGIN_PORT',observedAt:state.nodeTime,actualAt:state.nodeTime,locationName:'本地手动开船流转验收',reason:marker+' 用户授权本地手动节点验证'},marker+'-depart'); + state.afterDeparture=await api(admin,'GET','/api/platform/v1/orders/status-counts');save();console.log(JSON.stringify(state.afterDeparture)); + } + if(action==='clearance'){ + state.clearanceBefore=await api(admin,'GET','/api/platform/v1/containers/'+state.containerId+'/clearance');save(); + const form=new FormData();form.append('file',new Blob([marker+' LOCAL TEST ONLY 清关资料上传流转测试\n'],{type:'text/plain'}),marker+'-clearance.txt'); + state.clearance=await api(admin,'POST','/api/platform/v1/containers/'+state.containerId+'/clearance/document/upload?expectedVersion='+(state.clearanceBefore?.version||0)+'&operationReason='+encodeURIComponent('本地流转测试资料'),form,marker+'-clearance'); + state.afterClearance=await api(admin,'GET','/api/platform/v1/orders/status-counts');save();console.log(JSON.stringify(state.afterClearance)); + } +}catch(e){state.lastError=e.message;save();console.error(e.message);process.exitCode=1;} diff --git a/output/local-schema-repair/verify-schema.mjs b/output/local-schema-repair/verify-schema.mjs new file mode 100644 index 000000000..c1c90f0bf --- /dev/null +++ b/output/local-schema-repair/verify-schema.mjs @@ -0,0 +1,26 @@ +import fs from 'node:fs'; +import {spawnSync} from 'node:child_process'; +const dir=new URL('./',import.meta.url), results=[]; +function sql(db,query){const r=spawnSync('D:/baiyue-runtime/mysql/server/bin/mysql.exe',['--host=127.0.0.1','--user=root','--database='+db,'-N','-B','--default-character-set=utf8mb4'],{input:query,encoding:'utf8',env:process.env,maxBuffer:20e6});if(r.status)throw new Error(r.stderr);return r.stdout.trim();} +function parts(s){let q='',d=0,start=0;const out=[];for(let i=0;ix.inboundId); +if(!target)throw new Error('测试客户没有可确认来源'); +const ticket=await api(admin,'POST','/api/platform/v1/iam/tenants/2085308606829346818/impersonation',{reason:'本地新增订单页签验收:独立确认测试客户计费重并核对队列流转'}); +merchant=(await api('','POST','/api/auth/impersonations/exchange',{code:ticket.code})).accessToken; +const weights=await api(merchant,'GET',`/api/merchant/v1/first-leg/orders/${target.orderId}/chargeable-weights`); +const weight=weights.find(x=>String(x.inboundId)===String(target.inboundId)&&!x.confirmed); +if(!weight)throw new Error('测试来源没有当前待确认计费重'); +const key=randomUUID(); +const result=await api(merchant,'POST',`/api/merchant/v1/first-leg/chargeable-weights/${weight.inboundId}/confirm`,{expectedFingerprint:weight.fingerprint},{'Idempotency-Key':key}); +if(!result.confirmed)throw new Error('未读回已确认事实'); +await api(merchant,'POST',`/api/merchant/v1/first-leg/chargeable-weights/${weight.inboundId}/confirm`,{expectedFingerprint:weight.fingerprint},{'Idempotency-Key':key}); +const confirmed=await api(admin,'GET',`/api/platform/v1/orders?tenantId=2085308606829346818&mainStatus=WEIGHT_CONFIRMED&inboundCode=${encodeURIComponent(target.inboundCode)}&page=1&size=5`); +const pending=await api(admin,'GET',`/api/platform/v1/orders?tenantId=2085308606829346818&mainStatus=WAIT_WEIGHT_CONFIRM&inboundCode=${encodeURIComponent(target.inboundCode)}&page=1&size=5`); +if(!confirmed.records.some(x=>String(x.orderId)===String(target.orderId))||pending.records.some(x=>String(x.orderId)===String(target.orderId)))throw new Error('确认后页签流转不一致'); +checks.push({label:'同一测试订单确认后进入已确认、离开待确认;同幂等命令重放成功',passed:true,orderId:target.orderId,inboundId:weight.inboundId}); +fs.writeFileSync(new URL('weight-flow.json',import.meta.url),JSON.stringify(checks,null,2));console.log(JSON.stringify(checks,null,2)); + diff --git a/output/local-schema-repair/新增页签验收记录.md b/output/local-schema-repair/新增页签验收记录.md new file mode 100644 index 000000000..a6ed15394 --- /dev/null +++ b/output/local-schema-repair/新增页签验收记录.md @@ -0,0 +1,127 @@ +# 新增订单页签本地验收 + +2026-10-19,目标仅为本机 Gateway/MySQL/Nacos。此前已执行的结构补齐见同目录《验收记录.md》。本轮没有通过直接写业务表生成任何物流事实,没有远程部署。 + +## 本轮修复 + +复现发现,运行中的 Order 仍为旧版代码:新增 mainStatus 参数返回“统一订单主状态不合法”,status-counts 未生效。当前代码已支持这些状态,因此重新编译并重启 Order、Firstleg、Lastleg,并为本地跨服务调用配置 localhost 地址。 + +编译通过。当前后台服务为 Order PID 54860(9204)、Firstleg PID 33804(9202)、Lastleg PID 48016(9303)。进程由本轮启动;以后使用 IDE 启动前先核对端口占用,避免双启动。 + +本轮没有发现需要额外补齐的页签 SQL 表或字段;此前新建的 fl_chargeable_weight_confirmation、ll_delivery_facts_changed 等结构已被实际查询使用。 + +## 真实 HTTP 读取 + +通过既有本地平台账号登录统一 Gateway,19 个状态列表、status-counts 均 HTTP 200 / code 200。19 个状态列表 total 均与汇总对应数量一致,包括所有零数据状态。原有页签继续可读取。 + +| 页签 | 本轮最后核对数量 | +|---|---:| +| 待审核 | 127 | +| 待测量数据 | 195 | +| 测量审核 | 120 | +| 待客户确认计费重 | 125 | +| 已确认数据 | 1 | +| 待上传资料 | 0 | +| 一件代发打托 | 6 | +| 待分柜 | 126 | +| 装柜中 | 9 | +| 装柜完成 | 73 | +| 出口报关 | 0 | +| 已开船/待清关 | 0 | +| 待拆柜 | 0 | +| 待排车 | 0 | +| 出库单 | 0 | +| 派送 | 0 | +| 签收 | 0 | +| 派送完成 | 0 | +| 已完成 | 2 | + +证据:tab-smoke.json、tab-count-consistency.json。数量是检查时刻的本地事实,不是固定产品配置。此次未完成全部浏览器页面的人工视觉验收。 + +## 真实本地业务流转 + +通过正式 IAM 代登录与 Auth 交换接口取得既有 ACTIVE 测试企业会话;仅确认一条该测试企业既有待确认计费重,没有改费用金额或物流主状态。 + +测试订单 2085341741574098946、入仓单 2085341749429522434: + +1. 通过客户 API 读取当前审核通过的计费重及 fingerprint。 +2. 使用当前 fingerprint 与独立幂等键提交确认。 +3. 读回 confirmed=true;同一命令重放仍成功。 +4. 平台按同入仓码查询:进入 WEIGHT_CONFIRMED,退出 WAIT_WEIGHT_CONFIRM。 +5. 全量数量从待确认 126 / 已确认 0,变为待确认 125 / 已确认 1。 + +证据:weight-flow.json。测试确认历史予以保留。其他客户未被修改。 + +## 定向回归 + +Order / Firstleg 共 96 项通过;尾程独立定向编译与两项测试通过,共 98 项。覆盖当前来源的确认、重复命令、旧版本拒绝、重测失效、分柜父子来源、资料客户归属、清关上传、报关、卸柜事实、建出库单、取消回显、实际出库、派送及客户隔离。 + +尾程为临时 POM 限定 workflow 测试编译及独立测试输出目录,未视作尾程完整测试套件通过。临时 POM 已删除,正常构建配置没有修改。证据:tab-regression.log、lastleg-tab-regression.log。 + +Mapper 扫描合同通过:10 个持久化模块、396 个 Mapper。 + +截至 21:08 运行日志未发现 ERROR、BadSqlGrammarException、SQLSyntaxErrorException 或预约同步失败。两业务服务健康检查均为 UP。 + +## 后半程现场数据边界 + +本地 fl_carrier_schedule_node_fact 当前为 0 行,fl_customs_container 当前无 DECLARING 记录,因此待排车等后半程页签没有符合前置事实的订单。清关资料已有记录,不能单凭资料存在假设已实际开船。历史尾程来源主要为旧 CN 等标识,不能直接改成当前 FIRSTLEG 或伪造离港记录来证明流转。 + +后半程已通过隔离库真实 Mapper 和领域定向回归;尚未使用新生成的一票业务单,在本机通过完整装柜交接、实际离港录入、卸柜、出库和签收命令完成整链路真实 HTTP 验收。因此不能将本报告称为全部真实业务流验收通过。 + +此前保留的历史重复来源唯一索引冲突、历史必填事实为空及其他页面权限问题仍见《验收记录.md》,本轮未扩大账号授权。 + +## 2026-10-19 页签数量接口修复补验 + +纠正此前验证缺口:旧的统计接口验收请求额外带了 page/size,未覆盖浏览器实际不带分页的调用。此次修复前,以不带参数的 `/api/platform/v1/orders/status-counts` 成功复现 A0422(page 的 null 无法绑定 long),见 tab-smoke-before.log。旧验收结论不能证明该请求正常。 + +修复:统计入口使用独立的无分页筛选 DTO,转换为共用查询条件;保留筛选校验、平台权限及客户范围,忽略页签和分页,不改业务数量口径。前端已有“名称(数量)”显示,包括零数量,全部不显示数量,本轮无需改动布局。 + +验证:Order 定向 69 项、Admin 数量 API/页面定向 27 项全部通过;新增 MVC 用例覆盖不传分页、false 筛选、日期、客户范围、忽略额外分页/状态和非法税务类型。证据:status-count-binding-test.log、status-count-frontend-test.log。 + +本地仅重启 Order,PID 15788。实际经过 Gateway 的无分页统计请求成功(业务码200),19个状态列表均成功,逐项统计数量与各列表总数一致,见 tab-smoke.json、tab-count-consistency.json。当前待客户确认125、已确认数据1、测量数据审核120,无符合业务事实的状态返回0。Firstleg/Lastleg健康检查正常;Order本次启动日志未发现ERROR或SQL语法错误。 + +本轮未取得刷新后人工页面截图,未宣称完整视觉验收或后半程真实全链路验收通过。 + +## 2026-10-19 报关与开船链路口径补充 + +用户明确:待上传资料为报关资料;出口报关汇总本票资料已上传且装柜完成的订单。实际开船(目前人工节点,后续拉取节点)后进入已开船/待清关,头程上传清关资料后进入待拆柜,持续到实际卸柜完成。 + +已调整 WorkflowFactMapper 与 WorkflowTabService:出口报关不再仅匹配 DECLARING,也不要求整柜全部客户资料齐全或点击开始报关;按当前独立来源、本客户、本柜的有效报关资料与真实装柜证据汇总。买单票沿用既有无需客户退税资料的业务规则。实际开船后移出报关前序页签,按清关资料事实分类;预计日期不能替代实际离港。资料已上传但尚未实际开船时,不提前进入待拆柜。现有报关资料上传入口按完成装柜后的柜次关联,本轮未扩大到装柜前上传。原报关四态和实际报关命令保持原有规则。 + +手动及外部船节点均由 CarrierScheduleQueryService.addNode 保存到 fl_carrier_schedule_node_fact,统一按 DEPARTED_ORIGIN_PORT 且 actual_at 非空判断;不增加另一套人工开船标志。 + +自动回归:Order 69项、Firstleg 28项,共97项通过(customs-tab-flow-test.log)。真实 Mapper + H2 隔离库验证资料上传即进入、删除后回显、其他客户及其他柜资料不能覆盖、装柜未完成或无实拣数量不能进入、报关状态等待/就绪/申报/完成均不替代资料事实,以及买单资料豁免;领域测试覆盖开船、清关上传、实际卸柜退出及独立分柜来源。隔离库测试未写本机业务事实。 + +本机生效补验:仅重启 Firstleg(PID45432),启动成功,本次日志未见ERROR或SQL语法异常。通过Gateway重新读取无分页数量及19个状态列表,全部成功且数量逐项一致(customs-tab-live.log、customs-tab-consistency.json)。出口报关从0变为12,待上传报关资料0。 + +只读核对说明:当前满足独立实装关联的来源为BUY_DECLARATION 12条、历史tax_mode空值2条,无TAX_REFUND来源;因此12条是沿用买单免客户退税资料规则,并不表示伪造了12次资料上传。历史空税务模式没有自行补成买单。实际离港节点0条,后半程无数据符合进入条件。本轮没有为填充列表修改业务资料、装柜或船节点事实;真实本机完整开船到签收链路仍未验收。 + +## 2026-10-20 本地尾程节点与清关资料流转补验 + +当前显示口径:派送改为“派送中”,签收改为“签收完成”,签收完成仍显示括号数量;移除“派送完成”“已完成”页签,历史状态及接口保留。 + +修复实际阻塞: + +- 当前部分装柜模型为来源单承接实装、REMAINDER 子单承接余量。统一页签不再把这种来源单当作纯父汇总排除;真正由 LOADED 子票承接的旧父汇总仍不重复计票。 +- 尾程来源按客户、来源入仓单精确字符串匹配,避免 MySQL 连接默认排序规则冲突和大整数隐式比较;record 参数使用 MyBatis 可读取的 record 访问器。 +- 目的港清关资料读取、上传、下载及完成入口接受有效货柜已确认离仓或已有 DEPARTED_ORIGIN_PORT 实际节点;预计节点不放行。保留国内出仓、国外工作台和 DO 原有门禁,未创建虚假的国内出仓确认。 +- 本地补齐 Warehouse 的 wh_location_block / wh_location_block_slot;仅对本轮既有测试票按真实历史预占和占用恢复缺失块表示,保留原预占与占用。部分拣货由正式结算接口转移至余量票。 +- 本地手动节点表 query_id 改为允许空,唯一键使用 container_booking_id/event_key,按当前正式基线支持无拉取任务的手动节点。 +- 本地执行 IAM 正式 container-workspace-permissions.sql 补齐清关入口权限,并更新默认角色相关账号权限版本;旧登录建议重新登录。 + +测试来源:NYEXX2608270051(入仓单 2092814880129130499),柜 CSQU3054383;本轮正式 PDA 装柜完成后尾程新单 2112376565948878849 创建成功,装柜事件与手动开船事件均已处理。来源票实装1箱、独立余量票 NYEXX2608270051-1 为3箱,余量未被错误带入开船页签。 + +经本机 Gateway 的正式业务命令实测: + +1. 装柜完成并保存手动实际开船节点后,已开船/待清关=1、待拆柜=0、待排车=1。 +2. 上传 LOCAL-TAIL-20261020-clearance.txt 后,已开船/待清关=0、待拆柜=1、待排车=1;未点击“清关完成”,读回 completedAt 为空,证明按上传事实流转。 +3. 待拆柜和待排车列表均精确返回本票来源;待清关列表不再返回。清关附件通过正式下载接口校验内容,HTTP200。 +4. 无分页统计、19个状态列表、Firstleg/Lastleg 两个健康检查共23项均成功,各列表 total(字符串)与统计数值规范化后逐项一致,未用失败伪造零值。当前派送中和签收完成均为0,本轮没有真实发车或全签样本。 + +证据:tail-flow-state.json、tail-final-consistency.json、tab-smoke.json、tail-final-smoke.log。头程30项定向测试通过(tail-clearance-access-test.log);此前来源分柜/取消回显/派送/全签分类等12项通过(tail-flow-source-test.log)。Admin 405文件/3375测试及构建类型检查通过(tail-tabs-frontend-test.log、tail-tabs-frontend-build.log)。Gateway入口5项与Mapper扫描397个均通过。 + +边界:PDA照片是明确命名的合成测试图片,清关文件为本机测试文本;不能作为现场装柜或真实报关证据。本轮没有实际卸柜、出库发车和全签命令,后续环节仍以隔离库领域/Mapper测试覆盖;不能宣称真实物流全链路验收完成。浏览器临时页打开后处于登录页,未获得登录后截图,因此不宣称人工视觉验收通过。尾程常规测试编译仍被其他在途模块旧签名阻断,单独回归结果另记,不等于全量通过。 + +尾程补验:tail-workflow-isolated-test.log 最终 BUILD SUCCESS,完整生产源码编译及2项 workflow 隔离测试通过(含相邻长整型ID精确隔离、出库取消、实际派送/卸柜事实、内部令牌);读出键直接由JDBC按long映射,避免 H2 SIGNED 被解释为32位整数。临时模块/聚合POM已删除,正常构建配置未修改。 + +最终生效复核:Firstleg PID56348、Lastleg PID17412。尾程最终修复重启后,重新通过23项HTTP/健康检查且19项数量与列表total一致;清关文件下载及精确来源页签验证再次通过。两个本次启动日志未发现ERROR、BadSqlGrammarException或SQLSyntaxErrorException。头程没有新增代码变更,因此复用已通过的30项及此前12项回归,不重复占用其他任务的共享构建槽。 diff --git a/output/local-schema-repair/验收记录.md b/output/local-schema-repair/验收记录.md new file mode 100644 index 000000000..201a8968e --- /dev/null +++ b/output/local-schema-repair/验收记录.md @@ -0,0 +1,34 @@ +# 本地头程与尾程结构修复 + +时间:2026-10-19;目标:本机 MySQL 127.0.0.1:3306。 + +## 实际改动 + +| 数据库 | 新建表 | 已有表新增字段 | 已有表新增索引 | +|---|---:|---:|---:| +| baiyue_firstleg | 14 | 6 | 18 | +| baiyue_lastleg | 53 | 97 | 18 | + +包含报错表 `ll_delivery_facts_changed`,头程计费重确认、报关/清关和船期表,以及尾程排车、派送事实、采购和自营统计等缺失结构。 + +对照当前统一初始化 SQL 的建表定义复查:头程 131 张基线表、尾程 218 张基线表均已存在,基线字段无缺失。保留本地额外表;未执行整库初始化、删除、业务数据回填或远程部署。 + +执行前后的结构快照为 `schema-before.sql`、`schema-after.sql`。`actual-changes.json` 是实际结构差异;`actual-incremental-review.sql` 是实际增量审阅记录,已执行,不能在当前库重复执行。DDL 隐式提交,前快照仅用于审阅和恢复设计,不应直接覆盖现有库。 + +## 运行验证 + +重启时沿用原 Java 可执行文件、应用主类和类路径,并加载本地 Nacos、Redis、数据库与服务地址配置。原 IDE 启动的两服务进程已停止,新进程在后台运行:头程 PID 48892(9202)、尾程 PID 64060(9303)。后续需要 IDE 调试时,先停止对应后台进程,避免端口冲突。 + +两服务均成功输出 Started;健康检查均为 HTTP 200、status UP。从约 20:36 启动至 20:40 的观察窗口内,未发现 ERROR、BadSqlGrammarException、SQLSyntaxErrorException 或预约同步失败;尾程曾出现一次同步耗时告警,complete=true、failed=false。 + +通过本地统一 Gateway,既有本地验收账号登录成功。尾程订单、整车排车、排车草稿、头程入库单、指定有效客户的履约任务列表五个只读业务接口均返回 HTTP 200 / code 200。未创建、修改或删除业务单据。 + +这次验证为结构、服务运行和 HTTP 读取验证,未完成所有页面的人工视觉验收,也未重新执行全量业务流。 + +## 保留事项 + +1. 已有尾程历史单据的 16 个新必填业务字段无法从结构本身推导真实值,按可空字段补齐,历史行保留 NULL,未伪造来源快照、清单摘要或实收数量。后续推进这些历史单据前需核对真实资料;这部分并非完整 NOT NULL 约束对齐。 +2. `ll_inbound_plan.uk_ll_inbound_plan_source_order` 唯一索引因历史重复来源建索引失败(Duplicate entry)。原记录完整保留;其他缺失索引已建立。对应错误与复查见 `index-repair.json`、`schema-verification.json`。 +3. 当前本地验收账号读取预约工作台汇总、船期渠道、船期模板返回 A0403 / Access denied。这三项是权限阻断,未改动账号授权,不能记作页面验收通过。详细结果见 `http-smoke.json`。 + +服务日志:`firstleg-runtime.log`、`lastleg-runtime.log`;两个标准错误日志均为空。