feat:消费机更新

feat:人员调用钱包部门不调动的bug
This commit is contained in:
dzc committed 2026-09-09 11:56:03 +08:00
1 parent 1c86c227ee
commit 2ca14aa1e0
38 files changed
+1903 -35

No files matched your search

@@ -0,0 +1,53 @@
package com.bsd.pjcloud.admin.api.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 终端部门人脸固定上界游标快照查询参数。
*
* <p>首次请求不传 {@code snapshotMaxId},后续分页必须原样携带首次响应中的上界,
* 避免同步期间新增记录改变当前对账集合。</p>
*/
@Data
@Schema(description = "终端部门人脸同步快照查询")
public class SysUserFaceSyncSnapshotDto {
/**
* 终端绑定的商户部门主键;查询范围包含该部门及所有未删除子部门。
*/
@NotNull(message = "商户部门不能为空")
@Schema(description = "商户部门主键", requiredMode = Schema.RequiredMode.REQUIRED)
private Long merchantDeptId;
/**
* 可选用户主键;MQ 增量通知回查时传入,部门完整快照时为空。
*/
@Schema(description = "可选用户主键")
private Long userId;
/**
* 排他起始游标;首次请求为空或 0,后续使用上一页的 nextAfterId。
*/
@Min(value = 0, message = "人脸同步游标不能小于0")
@Schema(description = "排他起始游标")
private Long afterId;
/**
* 单页记录数;空值使用服务端默认值,允许范围为 1 至 500。
*/
@Min(value = 1, message = "人脸同步分页大小不能小于1")
@Max(value = 500, message = "人脸同步分页大小不能超过500")
@Schema(description = "单页记录数")
private Integer limit;
/**
* 首次响应固定的人脸数据库主键上界;首次请求为空,后续分页必须原样携带。
*/
@Min(value = 0, message = "人脸同步快照上界不能小于0")
@Schema(description = "固定快照主键上界")
private Long snapshotMaxId;
}
@@ -12,6 +12,7 @@ import lombok.NoArgsConstructor;
import com.bsd.pjcloud.common.core.util.TenantTable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
@@ -73,6 +74,36 @@ public class SysUserFaceEntity extends Model<SysUserFaceEntity> {
@Schema(description = "人脸图片")
private String faceImg;
/**
* 虹软静态图片质量分,范围为 0 到 1;未检测或检测失败时为空。
*/
@Schema(description = "虹软静态图片质量分,范围0-1")
private BigDecimal qualityScore;
/**
* 终端质量检测状态,持久化协议值为 detected 或 failed;历史未检测记录为空。
*/
@Schema(description = "终端质量检测状态:detected/failed")
private String qualityStatus;
/**
* 终端完成本次静态图片质量检测的本地时间,用于阻止旧结果覆盖新结果。
*/
@Schema(description = "终端完成质量检测的时间")
private LocalDateTime qualityCheckedAt;
/**
* 虹软 SDK 或终端插件质量检测错误码;检测成功时为空。
*/
@Schema(description = "虹软或终端质量检测错误码")
private Integer qualityErrorCode;
/**
* 最后一次成功写入质量结果的终端设备主键,来源于 Hardware 对 DEVICE-ID 的可信解析。
*/
@Schema(description = "最后一次上报质量的终端ID")
private Long qualityDeviceId;
/**
* 创建人
*/
@@ -0,0 +1,65 @@
package com.bsd.pjcloud.admin.api.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 终端人脸同步快照中的单条权威记录。
*
* <p>记录只包含审核通过且位于目标部门树内的人脸;终端使用 {@code sampleId} 作为虹软搜索标识,
* 使用 {@code sourceUpdatedAt} 与图片地址共同判断是否需要重新提取特征。</p>
*/
@Data
@Schema(description = "终端人脸同步快照记录")
public class SysUserFaceSyncRecordVo {
/**
* 人脸记录数据库主键,用于游标排序和快照范围约束。
*/
@Schema(description = "人脸记录数据库主键")
private Long id;
/**
* 虹软人脸库搜索标识,来源于人脸记录 {@code auto_code},必须是 32 位正整数且在当前租户内唯一。
*/
@Schema(description = "虹软人脸库搜索标识")
private String sampleId;
/**
* 人脸所属用户主键,MQ 增量通知按该字段回查同一用户的最多三张人脸。
*/
@Schema(description = "用户主键")
private Long userId;
/**
* 用户姓名,仅用于终端本地展示和识别结果元数据。
*/
@Schema(description = "用户姓名")
private String username;
/**
* 用户当前所属部门主键,数据来源为 {@code sys_user.dept_id}。
*/
@Schema(description = "当前所属部门主键")
private Long deptId;
/**
* 用户当前所属部门名称,仅用于终端本地展示。
*/
@Schema(description = "当前所属部门名称")
private String deptName;
/**
* 服务端人脸图片地址;地址变化会触发终端重新下载和提取特征。
*/
@Schema(description = "人脸图片地址")
private String faceImg;
/**
* 服务端人脸图片版本时间;未修改的历史记录回退为创建时间,终端将其持久化作为上报版本依据。
*/
@Schema(description = "服务端人脸图片版本时间")
private LocalDateTime sourceUpdatedAt;
}
@@ -0,0 +1,41 @@
package com.bsd.pjcloud.admin.api.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
/**
* 终端部门人脸同步的游标快照响应。
*
* <p>首次请求生成固定的 {@code snapshotMaxId},后续分页必须原样携带;终端只有在全部页面成功返回并校验后,
* 才能据此删除不在目标集合中的本地孤儿记录。</p>
*/
@Data
@Schema(description = "终端部门人脸同步游标快照")
public class SysUserFaceSyncSnapshotVo {
/**
* 当前页面的人脸记录,按数据库主键升序排列。
*/
@Schema(description = "当前页面记录")
private List<SysUserFaceSyncRecordVo> records;
/**
* 下一页起始游标;当前页为空时沿用请求游标,末页无需继续请求。
*/
@Schema(description = "下一页起始游标")
private Long nextAfterId;
/**
* 是否仍有位于固定快照上界内的后续记录。
*/
@Schema(description = "是否还有下一页")
private Boolean hasMore;
/**
* 首次请求时固定的人脸数据库主键上界,后续分页必须原样携带。
*/
@Schema(description = "固定快照主键上界")
private Long snapshotMaxId;
}
@@ -0,0 +1,24 @@
package com.bsd.pjcloud.admin.api.vo.base;
import java.util.List;
/**
* 用户部门+商户部门树查询条件接口
* 在 {@link BaseIsIncludeTreeInterface} 用户部门包含/不包含的基础上,增加商户部门的包含/不包含
*/
public interface BaseIsIncludeDeptMchTreeInterface extends BaseIsIncludeTreeInterface {
/**
* 商户部门ids是否包含
*/
Boolean getIsIncludeMerchantDept();
void setIsIncludeMerchantDept(Boolean isIncludeMerchantDept);
/**
* 商户部门ids
*/
List<Long> getMerchantDeptIds();
void setMerchantDeptIds(List<Long> merchantDeptIds);
}