小程序对接

This commit is contained in:
2026-09-11 14:39:10 +08:00
parent 93c7e6f8f5
commit aa8b7ade99
40 changed files with 3850 additions and 39 deletions
@@ -0,0 +1,42 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
*/
package org.springblade.transport.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 在途打卡提交
*/
@Data
@Schema(description = "在途打卡提交")
public class EnrouteSubmitDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "运单ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long waybillId;
@Schema(description = "定位信息")
private Location location;
@Schema(description = "货物照片URL")
private String photo;
@Data
@Schema(description = "定位")
public static class Location implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Double longitude;
private Double latitude;
private String address;
}
}
@@ -0,0 +1,61 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
*/
package org.springblade.transport.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 过程节点打卡提交(到场/装货/卸货/签收等,不含在途)
*/
@Data
@Schema(description = "过程节点打卡提交")
public class NodeSubmitDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "运单ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long waybillId;
@Schema(description = "过程节点 key", requiredMode = Schema.RequiredMode.REQUIRED)
private String nodeCode;
@Schema(description = "定位信息")
private Location location;
@Schema(description = "凭证照片 URL 列表")
private List<String> photos;
@Schema(description = "重量(吨)")
private String weight;
@Schema(description = "体积(方)")
private String volume;
@Schema(description = "数量(件)")
private String quantity;
@Schema(description = "备注")
private String remark;
@Schema(description = "是否异常")
private Boolean exception;
@Data
@Schema(description = "定位")
public static class Location implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Double longitude;
private Double latitude;
private String address;
}
}
@@ -22,6 +22,8 @@
*/
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -31,6 +33,7 @@ import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
/**
* 运单管理实体类
@@ -139,6 +142,26 @@ public class Waybill extends TenantEntity {
@Schema(description = "司机手机号")
private String driverPhone;
@Schema(description = "司机接单状态:pending待接单/accepted已接单/rejected已拒绝")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String driverAcceptStatus;
@Schema(description = "司机接单时间")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Date driverAcceptTime;
@Schema(description = "接单司机ID")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Long driverAcceptDriverId;
@Schema(description = "司机拒绝接单时间")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Date driverRejectTime;
@Schema(description = "司机拒绝接单原因")
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String driverRejectReason;
@Schema(description = "车/船/航班/班列号")
private String vehicleNo;
@@ -0,0 +1,53 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
*/
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.Date;
/**
* 运单在途打卡记录
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_waybill_enroute_punch")
@Schema(description = "运单在途打卡记录")
public class WaybillEnroutePunch extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "运单ID")
private Long waybillId;
@Schema(description = "运单号")
private String waybillNo;
@Schema(description = "打卡司机ID")
private Long driverId;
@Schema(description = "打卡时间")
private Date punchTime;
@Schema(description = "经度")
private BigDecimal longitude;
@Schema(description = "纬度")
private BigDecimal latitude;
@Schema(description = "打卡地址")
private String address;
@Schema(description = "货物照片URL")
private String photo;
}
@@ -0,0 +1,74 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
*/
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.Date;
/**
* 运单过程节点打卡记录
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_waybill_node_punch")
@Schema(description = "运单过程节点打卡记录")
public class WaybillNodePunch extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "运单ID")
private Long waybillId;
@Schema(description = "运单号")
private String waybillNo;
@Schema(description = "打卡司机ID")
private Long driverId;
@Schema(description = "过程节点 key")
private String nodeCode;
@Schema(description = "过程节点名称")
private String nodeName;
@Schema(description = "打卡时间")
private Date punchTime;
@Schema(description = "经度")
private BigDecimal longitude;
@Schema(description = "纬度")
private BigDecimal latitude;
@Schema(description = "打卡地址")
private String address;
@Schema(description = "凭证照片URL,多张逗号分隔")
private String photos;
@Schema(description = "重量(吨)")
private String weight;
@Schema(description = "体积(方)")
private String volume;
@Schema(description = "数量(件)")
private String quantity;
@Schema(description = "备注")
private String remark;
@Schema(description = "是否异常:0否 1是")
private Integer exceptionFlag;
}
@@ -0,0 +1,32 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
*/
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;
/**
* 司机端在途打卡记录
*/
@Data
@Schema(description = "司机端在途打卡记录")
public class DriverEnrouteRecordVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "打卡时间 HH:mm 或 yyyy-MM-dd HH:mm:ss")
private String time;
@Schema(description = "打卡地址")
private String address;
@Schema(description = "货物照片")
private String photo;
}
@@ -0,0 +1,52 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
*/
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.ArrayList;
import java.util.List;
/**
* 司机端过程节点打卡结果
*/
@Data
@Schema(description = "司机端过程节点打卡结果")
public class DriverNodePunchVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "运单ID")
private Long waybillId;
@Schema(description = "节点 key")
private String nodeCode;
@Schema(description = "节点名称")
private String nodeName;
@Schema(description = "打卡时间(ISO 或 yyyy-MM-dd HH:mm:ss")
private String checkinTime;
@Schema(description = "打卡地址")
private String address;
@Schema(description = "凭证照片")
private List<String> photos = new ArrayList<>();
@Schema(description = "重量")
private String weight;
@Schema(description = "体积")
private String volume;
@Schema(description = "数量")
private String quantity;
}
@@ -0,0 +1,79 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
*/
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.ArrayList;
import java.util.List;
/**
* 司机端过程打卡节点(过程配置 punch=是)
*/
@Data
@Schema(description = "司机端过程打卡节点")
public class DriverPunchNodeVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "节点 key,如 arrive_scene / load / transit")
private String key;
@Schema(description = "节点名称")
private String name;
@Schema(description = "是否在途节点")
private Boolean transit;
@Schema(description = "是否已打卡(在途=今日已打)")
private Boolean done;
@Schema(description = "当前是否可打卡(顺序门禁 + 在途频次时段)")
private Boolean actionable;
@Schema(description = "是否展示该卡(在途可能因频次/时段隐藏)")
private Boolean visible;
@Schema(description = "是否默认展开(仅第一个可打卡节点)")
private Boolean defaultExpanded;
@Schema(description = "打卡时间展示")
private String checkinTime;
@Schema(description = "打卡地点")
private String checkinPlace;
@Schema(description = "重量(吨)")
private String weight;
@Schema(description = "体积(方)")
private String volume;
@Schema(description = "数量(件)")
private String quantity;
@Schema(description = "已上传凭证图(已打卡回显)")
private List<DriverPunchPhotoVO> photos = new ArrayList<>();
@Schema(description = "是否需要定位")
private Boolean needLocation;
@Schema(description = "是否需要上传货量")
private Boolean needCargo;
@Schema(description = "货量类型:重量/体积/数量")
private List<String> cargoTypes = new ArrayList<>();
@Schema(description = "是否需要上传凭证")
private Boolean needVoucher;
@Schema(description = "凭证类型")
private List<String> voucherTypes = new ArrayList<>();
}
@@ -0,0 +1,32 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
*/
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;
/**
* 司机端打卡凭证图
*/
@Data
@Schema(description = "司机端打卡凭证图")
public class DriverPunchPhotoVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "凭证类型,如 委托单")
private String type;
@Schema(description = "展示标签,如 装货-委托单")
private String label;
@Schema(description = "图片 URL")
private String url;
}
@@ -0,0 +1,74 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* 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;
/**
* 司机端车辆卡片(对齐小程序 VehicleAuthInfo
*/
@Data
@Schema(description = "司机端车辆卡片")
public class DriverVehicleCardVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "车辆ID")
private Long id;
@Schema(description = "车牌号")
private String plateNo;
@Schema(description = "车辆类型")
private String vehicleType;
@Schema(description = "行驶证主页照片")
private String licenseFrontUrl;
@Schema(description = "行驶证副页照片")
private String licenseBackUrl;
@Schema(description = "道路运输证号")
private String roadTransportNo;
@Schema(description = "道路运输证照片")
private String roadTransportUrl;
@Schema(description = "车架号")
private String vin;
@Schema(description = "发动机号")
private String engineNo;
@Schema(description = "行驶证有效期止")
private String licenseValidEnd;
@Schema(description = "认证状态:0认证中 1认证通过 2认证驳回")
private Integer certificationStatus;
}
@@ -0,0 +1,136 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* 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;
/**
* 司机端运单卡片(首页当前任务 / 待接预览 / 列表项)
* <p>
* 字段对齐小程序 MockWaybillItemstatus 为数字枚举:
* 0 待接单 / 1 运输中 / 2 已完成 / 3 已取消
*/
@Data
@Schema(description = "司机端运单卡片")
public class DriverWaybillCardVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "运单ID")
private Long id;
@Schema(description = "运单号")
private String waybillNo;
@Schema(description = "起点名称")
private String fromName;
@Schema(description = "终点名称")
private String toName;
@Schema(description = "起点地址")
private String fromAddress;
@Schema(description = "终点地址")
private String toAddress;
@Schema(description = "货物名称列表")
private List<String> cargoNames;
@Schema(description = "货物类别")
private String cargoCategory;
@Schema(description = "重量(带单位)")
private String weight;
@Schema(description = "状态:0待接单/1运输中/2已完成/3已取消")
private Integer status;
@Schema(description = "创建时间")
private String createTime;
@Schema(description = "发布时间(兼容小程序 publishTime")
private String publishTime;
@Schema(description = "当前过程节点")
private String currentNode;
@Schema(description = "计划/完成时间段展示")
private String timeRange;
@Schema(description = "运费参考金额")
private BigDecimal freight;
@Schema(description = "司机姓名")
private String driverName;
@Schema(description = "司机手机号")
private String driverPhone;
@Schema(description = "车牌号")
private String vehicleNo;
@Schema(description = "是否需要司机确认接单")
private Boolean requireAccept;
@Schema(description = "司机接单状态:pending待接单/accepted已接单/rejected已拒绝")
private String acceptStatus;
@Schema(description = "司机拒绝接单原因")
private String rejectReason;
@Schema(description = "过程配置是否启用在途打卡(在途节点 punch=是)")
private Boolean transitPunchEnabled;
@Schema(description = "是否展示「今日在途打卡」面板(到期且在时段内,或今日已打)")
private Boolean transitCheckinVisible;
@Schema(description = "今日是否需要在途打卡(到期且未打且在时段内)")
private Boolean requireTransitCheckinToday;
@Schema(description = "今日是否已完成在途打卡")
private Boolean transitCheckinDoneToday;
@Schema(description = "在途打卡频次(每 N 天 1 次)")
private Integer transitFrequencyDays;
@Schema(description = "在途打卡时段开始 HH:mm")
private String transitTimeStart;
@Schema(description = "在途打卡时段结束 HH:mm")
private String transitTimeEnd;
@Schema(description = "在途打卡记录(详情返回)")
private List<DriverEnrouteRecordVO> enrouteRecords;
@Schema(description = "过程配置中 punch=是 的打卡节点列表(详情返回)")
private List<DriverPunchNodeVO> punchNodes;
}
@@ -0,0 +1,49 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* 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.ArrayList;
import java.util.List;
/**
* 司机端待接运单预览
*/
@Data
@Schema(description = "司机端待接运单预览")
public class DriverWaybillPreviewVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "预览列表")
private List<DriverWaybillCardVO> records = new ArrayList<>();
@Schema(description = "待接运单总数(角标)")
private Long total = 0L;
}
@@ -0,0 +1,55 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* 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 统计
* <p>
* 对齐小程序 { all, pending, doing, done }
*/
@Data
@Schema(description = "司机端运单 Tab 统计")
public class DriverWaybillTabCountsVO 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;
}
@@ -85,4 +85,12 @@ public class ExceptionDisposalVO extends ExceptionDisposal {
@Schema(description = "扩展信息")
private Map<String, Object> extra;
@TableField(exist = false)
@Schema(description = "运单路线:{start, end}")
private Map<String, String> route;
@TableField(exist = false)
@Schema(description = "货物信息:{name, weight}")
private Map<String, String> cargo;
}
@@ -66,4 +66,8 @@ public class ProcessConfigVO extends ProcessConfig {
@Schema(description = "当前运单是否有关联凭证")
private Boolean hasRelatedVoucher;
@TableField(exist = false)
@Schema(description = "关联项目是否已有运单")
private Boolean hasRelatedWaybill;
}
@@ -0,0 +1,38 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
*/
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;
/**
* 司机打卡上传图片(节点-凭证类型)
*/
@Data
@Schema(description = "司机打卡上传图片")
public class WaybillPunchPhotoVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "展示标签,如 装货-委托单")
private String label;
@Schema(description = "图片 URL")
private String url;
@Schema(description = "节点名称")
private String nodeName;
@Schema(description = "凭证类型")
private String voucherType;
@Schema(description = "打卡时间")
private String punchTime;
}
@@ -0,0 +1,73 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
*/
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.ArrayList;
import java.util.List;
/**
* 管理端单条打卡记录
*/
@Data
@Schema(description = "管理端单条打卡记录")
public class WaybillPunchRecordItemVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "记录ID")
private Long id;
@Schema(description = "类型:node / enroute")
private String type;
@Schema(description = "节点 key")
private String nodeCode;
@Schema(description = "节点名称")
private String nodeName;
@Schema(description = "打卡时间")
private String punchTime;
@Schema(description = "打卡地址")
private String address;
@Schema(description = "经度")
private String longitude;
@Schema(description = "纬度")
private String latitude;
@Schema(description = "重量")
private String weight;
@Schema(description = "体积")
private String volume;
@Schema(description = "数量")
private String quantity;
@Schema(description = "备注")
private String remark;
@Schema(description = "是否异常")
private Boolean exceptionFlag;
@Schema(description = "是否已打卡")
private Boolean punched;
@Schema(description = "状态文案:已打卡/未打卡")
private String statusName;
@Schema(description = "本条打卡凭证图")
private List<WaybillPunchPhotoVO> photos = new ArrayList<>();
}
@@ -0,0 +1,31 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
*/
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.ArrayList;
import java.util.List;
/**
* 管理端运单打卡记录汇总
*/
@Data
@Schema(description = "管理端运单打卡记录汇总")
public class WaybillPunchRecordsVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "打卡流水(按时间升序,含节点/在途)")
private List<WaybillPunchRecordItemVO> records = new ArrayList<>();
@Schema(description = "司机上传凭证图(扁平列表,label=节点-凭证类型)")
private List<WaybillPunchPhotoVO> driverUploads = new ArrayList<>();
}
@@ -66,6 +66,10 @@ public class WaybillVO extends Waybill {
@Schema(description = "业务状态名称")
private String businessStatusName;
@TableField(exist = false)
@Schema(description = "是否需要司机确认接单(过程配置接单节点)")
private Boolean requireAccept;
@TableField(exist = false)
@Schema(description = "是否仅查询未配载运单")
private Integer onlyUnassignedLoading;