diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/dto/PersonCertSubmitRequest.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/dto/PersonCertSubmitRequest.java index c33d030f..01cc4f53 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/dto/PersonCertSubmitRequest.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/dto/PersonCertSubmitRequest.java @@ -51,6 +51,12 @@ public class PersonCertSubmitRequest implements Serializable { private String realName; @Schema(description = "身份证号") private String idCardNo; + @Schema(description = "出生年月") + private LocalDate birthday; + @Schema(description = "住址-区划:省市区名称拼接串") + private String addressRegion; + @Schema(description = "住址-详细地址") + private String address; @Schema(description = "身份证正面照") private String idCardFrontUrl; @Schema(description = "身份证反面照") diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/AdminWaybillCardVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/AdminWaybillCardVO.java index 9e63df31..b0dca1a4 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/AdminWaybillCardVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/AdminWaybillCardVO.java @@ -92,4 +92,30 @@ public class AdminWaybillCardVO implements Serializable { @Schema(description = "采购方是否已付款(预留)") private Boolean buyerPaid; + /* ===== 运次(一趟车)字段:列表按运次下发,卡片的展示单号与路线取这些 ===== */ + + @Schema(description = "运次主键:配载单主键或运单主键,按字符串下发(19 位雪花号按数字下发会被前端取整)") + private String tripId; + + @Schema(description = "配载单号,未配载为空") + private String loadingNo; + + @Schema(description = "展示单号:有配载取配载单号,否则取运单号") + private String tripNo; + + @Schema(description = "途经站点:整趟车中间各站按顺序以「 → 」连接,无中间站为空") + private String viaName; + + @Schema(description = "站点数(整趟车,含起终点)") + private Integer stationCount; + + @Schema(description = "货物汇总(整趟车,同名货物合并且单位一致时取数量合计)") + private String cargoSummary; + + @Schema(description = "合计重量(整趟车同单位时才有值,单位不一致为空)") + private String totalWeight; + + @Schema(description = "子运单数(可见口径;配载运次即整趟车的子单数)") + private Integer waybillCount; + } diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/AdminWaybillDetailVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/AdminWaybillDetailVO.java index ebbd9cce..ff601f14 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/AdminWaybillDetailVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/AdminWaybillDetailVO.java @@ -66,9 +66,12 @@ public class AdminWaybillDetailVO implements Serializable { @Schema(description = "卸货地址") private String unloadAddress; - @Schema(description = "货物名称") + @Schema(description = "货物名称:运单上录入的全部货名以「、」连接") private String cargoName; + @Schema(description = "货物名称清单:运单上录入的全部货物,同名的只留一次") + private List cargoNames; + @Schema(description = "货物数量(带单位)") private String cargoQuantity; @@ -135,6 +138,29 @@ public class AdminWaybillDetailVO implements Serializable { @Schema(description = "途打卡记录") private List enrouteRecords; + /* ===== 运次(一趟车)字段:详情按运次下发,与司机端接单页同一口径 ===== */ + + @Schema(description = "运次主键:配载单主键或运单主键,按字符串下发(19 位雪花号按数字下发会被前端取整)") + private String tripId; + + @Schema(description = "配载单号,未配载为空") + private String loadingNo; + + @Schema(description = "展示单号:有配载取配载单号,否则取运单号") + private String tripNo; + + @Schema(description = "途经站点:整趟车中间各站按顺序以「 → 」连接,无中间站为空") + private String viaName; + + @Schema(description = "站点数(整趟车,含起终点)") + private Integer stationCount; + + @Schema(description = "货物汇总(整趟车,同名货物合并且单位一致时取数量合计)") + private String cargoSummary; + + @Schema(description = "站点任务安排(整趟车按实际途经顺序,第 1 站即 ①;配载运次含每站装卸与货物条目)") + private List stations; + @Data @Schema(description = "装卸点") public static class AdminRoutePointVO implements Serializable { diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverPunchNodeVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverPunchNodeVO.java index 03f85510..d7860f6e 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverPunchNodeVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverPunchNodeVO.java @@ -70,6 +70,9 @@ public class DriverPunchNodeVO implements Serializable { @Schema(description = "是否展示该卡(在途可能因频次/时段隐藏)") private Boolean visible; + @Schema(description = "打这张卡即完成运单:该运单的末位可打卡节点,且过程配置不要求业务员确认回单") + private Boolean finishOnPunch; + @Schema(description = "是否默认展开(仅第一个可打卡节点)") private Boolean defaultExpanded; diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverWaybillCardVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverWaybillCardVO.java index 323db157..cf2c7652 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverWaybillCardVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverWaybillCardVO.java @@ -153,6 +153,26 @@ public class DriverWaybillCardVO implements Serializable { @Schema(description = "运输组织:common普通 / load配载") private String transportOrgType; + /* ===== 运次(一趟车)字段:运次接口返回,旧运单接口不填 ===== */ + + @Schema(description = "运次主键:配载单主键或运单主键,按字符串下发(19 位雪花号按数字下发会被前端取整)") + private String tripId; + + @Schema(description = "配载单号,未配载为空") + private String loadingNo; + + @Schema(description = "展示单号:有配载取配载单号,否则取运单号") + private String tripNo; + + @Schema(description = "途经站点:整趟车中间各站按顺序以「 → 」连接") + private String viaName; + + @Schema(description = "站点数(整趟车,含起终点)") + private Integer stationCount; + + @Schema(description = "货物汇总(整趟车,同名货物合并且单位一致时取数量合计)") + private String cargoSummary; + @Schema(description = "计划发货时间") private String planShipTime; @@ -168,6 +188,9 @@ public class DriverWaybillCardVO implements Serializable { @Schema(description = "装卸点(详情返回)") private List routePoints; + @Schema(description = "站点任务安排(详情返回,按实际途经顺序,第 1 站即 ①;有配载时含每站装卸与货物条目)") + private List stations; + @Schema(description = "过程配置 JSON(详情返回,供前端兜底推导打卡节点)") private String processJson; diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripQueryVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripQueryVO.java new file mode 100644 index 00000000..5027ada9 --- /dev/null +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripQueryVO.java @@ -0,0 +1,104 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.transport.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import java.util.Set; + +/** + * 运次查询条件 + *

+ * 司机端用 {@link #forDriver(String)} 按司机手机号收口;管理端用 {@link #forAdmin()} 不按司机收口。 + * 两者都不给时收口为空集——收口一旦缺省就等于把别人的运次发出去,故缺省不放行。 + */ +@Data +@Schema(description = "运次查询条件") +public class TripQueryVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "运次主键(详情按它取单个运次)") + private String tripId; + + @Schema(description = "司机手机号") + private String driverPhone; + + @Schema(description = "是否不按司机收口(管理端)") + private boolean allDrivers; + + @Schema(description = "可见组织 ID 集合:非空时只出这些组织的运单行,空集合表示不按组织过滤") + private List deptIds; + + @Schema(description = "状态:0待接单/1进行中/2已完成/3已取消,不传为全部(不含已取消)") + private Integer status; + + @Schema(description = "多档状态:同上取值,非空时优先于 status(待处理列表要待接单与进行中两档)") + private List statuses; + + @Schema(description = "关键字:运单号 / 配载单号 / 起终点 / 车牌") + private String keyword; + + @Schema(description = "运输组织类型:load 公路配载 / common 普通运输,不传为全部(按子单行筛选)") + private String transportOrgType; + + @Schema(description = "异常筛选:exception 只看命中异常的子单 / normal 只看未命中的,不传为全部(按子单行筛选)") + private String exception; + + @Schema(description = "有未完成异常的子运单主键集合,配合 exception 使用(按子单行筛选)") + private Set exceptionWaybillIds; + + @Schema(description = "创建时间下界,按子单行筛选") + private Date createdFrom; + + @Schema(description = "创建时间上界,按子单行筛选") + private Date createdTo; + + @Schema(description = "是否排除「有子单被拒且这趟车还没结束」的运次(待处理列表用)") + private boolean excludeRejectedTrips; + + @Schema(description = "当前页,从 1 开始") + private Integer current; + + @Schema(description = "每页条数(按运次,不是运单)") + private Integer size; + + public static TripQueryVO forDriver(String driverPhone) { + TripQueryVO query = new TripQueryVO(); + query.setDriverPhone(driverPhone); + return query; + } + + public static TripQueryVO forAdmin() { + TripQueryVO query = new TripQueryVO(); + query.setAllDrivers(true); + return query; + } + +} diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripStationVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripStationVO.java new file mode 100644 index 00000000..7b795898 --- /dev/null +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripStationVO.java @@ -0,0 +1,105 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.transport.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + * 运次站点(任务安排) + *

+ * 有配载单时按配载单的路线信息给出实际途经顺序,第 1 站即 ①;站点上的「装N / 卸N」指向配载单运单集合里的第 N 张子运单, + * 同一站可以既卸又装(装卸)。没有路线信息时回退到子运单的起讫点去重成站。 + *

+ * 站点上的货物条目取子运单,不取配载单的货物信息:配载单的货物条数与子运单不一定同数,行序也对不上站点编号。 + */ +@Data +@Schema(description = "运次站点") +public class TripStationVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "站序,从 1 开始(展示为 ①②③)") + private Integer index; + + @Schema(description = "站名:展示地址优先,回退详细地址") + private String name; + + @Schema(description = "详细地址") + private String address; + + @Schema(description = "站点标记原文:装N / 卸N") + private List tags; + + @Schema(description = "操作类型:load 装货 / unload 卸货 / load_unload 装卸,无从判定时为空") + private String operationType; + + @Schema(description = "操作类型文案:装货 / 卸货 / 装卸") + private String operationTypeLabel; + + @Schema(description = "该站涉及的货物条目") + private List cargos; + + /** + * 站点货物条目 + */ + @Data + @Schema(description = "运次站点货物条目") + public static class TripCargoVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "所属子运单主键,按字符串下发") + private String waybillId; + + @Schema(description = "所属运单号") + private String waybillNo; + + @Schema(description = "货物名称") + private String cargoName; + + @Schema(description = "货主名称") + private String customerName; + + @Schema(description = "数量") + private BigDecimal quantity; + + @Schema(description = "数量单位") + private String quantityUnit; + + @Schema(description = "该站的操作:load 装货 / unload 卸货") + private String operation; + + @Schema(description = "项目名称") + private String projectName; + + } + +} diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripTabCountsVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripTabCountsVO.java new file mode 100644 index 00000000..944c4ded --- /dev/null +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripTabCountsVO.java @@ -0,0 +1,55 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.transport.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 运次 Tab 统计 + *

+ * 与司机端运单统计字段同名同义,但计数单位是运次(一卡一趟车),不是运单。 + */ +@Data +@Schema(description = "运次 Tab 统计") +public class TripTabCountsVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "全部(待接单+进行中+已完成,不含已取消)") + private long all; + + @Schema(description = "待接单") + private long pending; + + @Schema(description = "进行中") + private long doing; + + @Schema(description = "已完成") + private long done; + +} diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripVO.java new file mode 100644 index 00000000..e3c388a2 --- /dev/null +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TripVO.java @@ -0,0 +1,227 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.transport.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + +/** + * 运次:一趟车的展示与操作单位 + *

+ * 有配载单时就是那张配载单连同它的全部子运单,没配载时就是一张运单;它没有自己的表。 + * 状态与接单需求都由子运单读时聚合,配载单上不落这两个字段。 + */ +@Data +@Schema(description = "运次") +public class TripVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "运次主键:配载单主键或运单主键,按字符串下发(19 位雪花号按数字下发会被前端取整)") + private String id; + + @Schema(description = "展示单号:有配载取配载单号,否则取运单号") + private String tripNo; + + @Schema(description = "配载单号,未配载为空") + private String loadingNo; + + @Schema(description = "运输组织类型:load 公路配载 / common 普通运输") + private String transportOrgType; + + @Schema(description = "状态:0待接单/1运输中/2已完成/3已取消,子单集合为空时为空") + private Integer status; + + @Schema(description = "排序键:运次内子运单 create_time 的最大值") + private Date sortTime; + + @Schema(description = "是否需要接单:任一子运单的项目有接单节点即为是") + private Boolean requireAccept; + + @Schema(description = "接单态:accepted 已接单 / pending 待接单,无从判定时为空") + private String acceptStatus; + + @Schema(description = "子运单数(可见口径:已排除本司机拒单的子单)") + private int waybillCount; + + @Schema(description = "司机姓名") + private String driverName; + + @Schema(description = "司机手机号") + private String driverPhone; + + @Schema(description = "车牌号") + private String vehicleNo; + + @Schema(description = "挂车车牌号") + private String trailerVehicleNo; + + @Schema(description = "项目名称") + private String projectName; + + @Schema(description = "客户名称") + private String customerName; + + @Schema(description = "运输类型") + private String transportType; + + @Schema(description = "货物名称:整趟车全部货名以「、」连接,一格多名的历史写法已摊平") + private String cargoName; + + @Schema(description = "货物名称清单:整趟车全部货物,同名的只留一次,保持子单与录入顺序") + private List cargoNames; + + @Schema(description = "货物类型:整趟车全部类型以「、」连接") + private String cargoType; + + @Schema(description = "货物类型清单:整趟车全部货物类型,同类型的只留一次") + private List cargoTypes; + + @Schema(description = "发货地址") + private String departureAddress; + + @Schema(description = "途经地") + private String transitAddress; + + @Schema(description = "到货地") + private String arrivalAddress; + + @Schema(description = "起点名称:整趟车首站,展示地址优先、回退详细地址") + private String departureName; + + @Schema(description = "途经站点:中间各站按顺序以「 → 」连接,无中间站为空") + private String transitName; + + @Schema(description = "终点名称:整趟车末站,展示地址优先、回退详细地址") + private String arrivalName; + + @Schema(description = "站点数(整趟车,含起终点)") + private int stationCount; + + @Schema(description = "货物汇总:按货物名合并数量,同名同单位取合计") + private String cargoSummary; + + @Schema(description = "合计重量:全部子运单同单位时为数量合计,单位不一致时为空") + private BigDecimal totalQuantity; + + @Schema(description = "合计重量的单位,与 totalQuantity 同时为空或同时有值") + private String quantityUnit; + + @Schema(description = "计划发货日期(配载单,未配载为空)") + private LocalDate estimatedStartDate; + + @Schema(description = "计划完成日期(配载单,未配载为空)") + private LocalDate estimatedEndDate; + + @Schema(description = "任务备注(配载单的运输说明)") + private String taskRemark; + + @Schema(description = "路线信息,仅单个运次详情返回(列表不带,省流量)") + private String routeJson; + + @Schema(description = "货物信息,仅单个运次详情返回(列表不带,省流量)") + private String goodsJson; + + @Schema(description = "站点(任务安排,按实际途经顺序),仅单个运次详情返回;列表用起/经/终与站点数") + private List stations; + + @Schema(description = "子运单(可见子单,按创建时间升序)") + private List waybills; + + /** + * 运次下的子运单 + *

+ * 接单事实仍落在每张子运单上,运次只是把它们的需要接单与接单态聚合起来。 + */ + @Data + @Schema(description = "运次下的子运单") + public static class TripWaybillVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "运单主键,按字符串下发") + private String id; + + @Schema(description = "运单号") + private String waybillNo; + + @Schema(description = "业务状态") + private String businessStatus; + + @Schema(description = "接单状态:pending待接单/accepted已接单/rejected已拒绝") + private String acceptStatus; + + @Schema(description = "该运单是否需要接单确认") + private Boolean requireAccept; + + @Schema(description = "项目ID") + private Long projectId; + + @Schema(description = "项目名称") + private String projectName; + + @Schema(description = "货物名称:运单上录入的全部货名以「、」连接,一格多名的历史写法已摊平") + private String cargoName; + + @Schema(description = "货物名称清单:运单上录入的全部货物,同名的只留一次") + private List cargoNames; + + @Schema(description = "货物类型:主表首行的类型,完整清单见 cargoTypes") + private String cargoType; + + @Schema(description = "货物类型清单:运单上录入的全部货物类型,同类型的只留一次") + private List cargoTypes; + + @Schema(description = "数量") + private BigDecimal quantity; + + @Schema(description = "数量单位") + private String quantityUnit; + + @Schema(description = "发货地") + private String departureName; + + @Schema(description = "发货地址") + private String departureAddress; + + @Schema(description = "收货地") + private String arrivalName; + + @Schema(description = "收货地址") + private String arrivalAddress; + + @Schema(description = "创建时间") + private Date createTime; + + } + +} diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillVO.java index ebba5343..a2ecf024 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillVO.java @@ -29,6 +29,7 @@ import lombok.EqualsAndHashCode; import org.springblade.transport.pojo.entity.Waybill; import java.io.Serial; +import java.util.List; /** * 运单管理视图实体类 @@ -78,4 +79,12 @@ public class WaybillVO extends Waybill { @Schema(description = "是否仅查询未配载运单") private Integer onlyUnassignedLoading; + @TableField(exist = false) + @Schema(description = "是否仅查询可配载运单") + private Integer loadableOnly; + + @TableField(exist = false) + @Schema(description = "运单主键集合") + private List ids; + } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/DriverWaybillController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/DriverWaybillController.java index f966601d..bb9b4693 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/DriverWaybillController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/DriverWaybillController.java @@ -105,6 +105,65 @@ public class DriverWaybillController extends BladeController { return R.data(driverWaybillService.detail(id)); } + @GetMapping("/task/current") + @ApiOperationSupport(order = 21) + @Operation(summary = "首页:当前运输中运次", description = "当前用户手机号可见的运输中运次(有配载单的一趟车算一个)最新一条") + public R tripCurrentTask() { + return R.data(driverWaybillService.tripCurrentTask()); + } + + @GetMapping("/task/pending-preview") + @ApiOperationSupport(order = 22) + @Operation(summary = "首页:待接运次预览", description = "当前用户手机号可见的待接运次预览与总数(按运次计)") + public R tripPendingPreview( + @Parameter(description = "预览条数,默认 2") @RequestParam(required = false) Integer size) { + return R.data(driverWaybillService.tripPendingPreview(size)); + } + + @GetMapping("/task/counts") + @ApiOperationSupport(order = 23) + @Operation(summary = "运次 Tab 统计", description = "按运次统计:全部 = 待接单 + 进行中 + 已完成(不含已取消)") + public R tripCounts() { + return R.data(driverWaybillService.tripTabCounts()); + } + + @GetMapping("/task/page") + @ApiOperationSupport(order = 24) + @Operation(summary = "运次分页列表", description = "一页即若干个运次;status:空=全部,0待接单,1运输中,2已完成;keyword 支持运单号/配载单号/起终点/车牌") + public R> tripPage( + @Parameter(description = "当前页") @RequestParam(required = false) Integer current, + @Parameter(description = "每页运次数") @RequestParam(required = false) Integer size, + @Parameter(description = "状态:0待接单/1运输中/2已完成,不传为全部") @RequestParam(required = false) String status, + @Parameter(description = "关键字:运单号/配载单号/起终点/车牌") @RequestParam(required = false) String keyword) { + Integer statusCode = parseStatus(status); + return R.data(driverWaybillService.tripPage(current, size, statusCode, keyword)); + } + + @GetMapping("/task/detail") + @ApiOperationSupport(order = 25) + @Operation(summary = "司机运次详情", description = "按运次主键(字符串)取整趟车;有配载单时下发站点 ①②③(stations)与每站货物条目") + public R tripDetail( + @Parameter(description = "运次主键(配载单主键或运单主键)", required = true) @RequestParam String id) { + return R.data(driverWaybillService.tripDetail(id)); + } + + @PostMapping("/task/accept") + @ApiOperationSupport(order = 26) + @Operation(summary = "运次确认接单", description = "一次接单把该运次全部子运单置为已接单;任一子单已接单即视为整单已接单") + public R tripAccept( + @Parameter(description = "运次主键(配载单主键或运单主键)", required = true) @RequestParam String id) { + return R.status(driverWaybillService.tripAccept(id)); + } + + @PostMapping("/task/reject") + @ApiOperationSupport(order = 27) + @Operation(summary = "运次拒绝接单", description = "整单拒绝:该运次全部未终态子运单一起置为已拒绝,此后该运次对本人不可见") + public R tripReject( + @Parameter(description = "运次主键(配载单主键或运单主键)", required = true) @RequestParam String id, + @Parameter(description = "拒绝原因") @RequestParam(required = false) String reason) { + return R.status(driverWaybillService.tripReject(id, reason)); + } + @PostMapping("/track") @ApiOperationSupport(order = 11) @Operation(summary = "司机端行驶轨迹", description = "按当前用户手机号校验归属后,根据打卡记录/计划时间自动推导起止日期并查询 LBS 轨迹(WGS-84)") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ManageWaybillController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ManageWaybillController.java index 0b7dda41..ee10e0b6 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ManageWaybillController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ManageWaybillController.java @@ -69,7 +69,7 @@ public class ManageWaybillController extends BladeController { @GetMapping("/stats") @ApiOperationSupport(order = 1) - @Operation(summary = "运单状态统计", description = "待接单=pending,运输中=running,已完成=completed;租户内不过滤组织(小程序调度账号组织常与运单不一致);在途异常=异常处置状态≠已完成") + @Operation(summary = "运单状态统计", description = "待接单=pending,运输中=running,已完成=completed;只统计本组织的运单(超级管理员不过滤组织);在途异常=异常处置状态≠已完成") public R stats() { return R.data(manageWaybillService.stats()); } @@ -99,9 +99,9 @@ public class ManageWaybillController extends BladeController { @GetMapping("/detail") @ApiOperationSupport(order = 4) - @Operation(summary = "运单详情", description = "调度端查看运单详情(含 punchNodes / enrouteRecords),不校验司机归属与组织;字段对齐小程序 pages/waybill/detail") + @Operation(summary = "运次详情", description = "调度端查看整趟车详情(含 stations / punchNodes / enrouteRecords),不校验司机归属与组织;id 传运次主键字符串,已拒单的运单主键回落成单票视图") public R detail( - @Parameter(description = "运单ID", required = true) @RequestParam Long id) { + @Parameter(description = "运次主键(配载单主键或运单主键,字符串)", required = true) @RequestParam String id) { return R.data(manageWaybillService.detail(id)); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java index 82d39780..30af8573 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java @@ -373,6 +373,13 @@ public class WaybillController extends BladeController { return R.data(waybillService.batchComplete(ids)); } + @PostMapping("/confirm-return") + @ApiOperationSupport(order = 24) + @Operation(summary = "确认回单", description = "回单节点要求业务员确认时用:该运单的司机打卡节点全部已打卡且无未了结异常,才置为已完成") + public R confirmReturn(@Parameter(description = "主键", required = true) @RequestParam Long id) { + return R.status(waybillService.confirmReturnReceipt(id)); + } + @PostMapping("/road-loading") @ApiOperationSupport(order = 23) @Operation(summary = "公路配载", description = "传入ids") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/ReceiptClaimMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/ReceiptClaimMapper.xml index b1337bbe..5dbc2be7 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/ReceiptClaimMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/ReceiptClaimMapper.xml @@ -102,7 +102,8 @@ FROM blade_receipt_claim c INNER JOIN blade_kingdee_receipt_flow f ON f.id = c.receipt_flow_id WHERE - ORDER BY c.create_time DESC + + ORDER BY c.claim_date DESC, c.id DESC