feat:更改页面

This commit is contained in:
dzc committed 2026-09-08 15:25:23 +08:00
1 parent 4e804a17cd
commit 8995bf89d6
174 files changed
+11342 -220

No files matched your search

@@ -0,0 +1,49 @@
package com.bsd.pjcloud.admin.api.dto;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 终端上报的一条人脸静态图片质量结果。
*/
@Data
public class SysUserFaceQualityReportItemDto {
/**
* 虹软 32 位搜索样本编号,对应 {@code sys_user_face.auto_code}。
*/
@NotBlank(message = "人脸样本编号不能为空")
private String sampleId;
/**
* 检测状态,跨端协议值仅允许 detected 或 failed。
*/
@NotBlank(message = "人脸质量检测状态不能为空")
private String status;
/**
* 虹软静态图片质量分,detected 时必填且范围为 0 到 1,failed 时必须为空。
*/
private BigDecimal score;
/**
* 终端检测所依据的人脸图片版本,必须与服务端当前人脸更新时间一致。
*/
@NotNull(message = "人脸图片版本不能为空")
private LocalDateTime sourceUpdatedAt;
/**
* 终端完成本次检测的本地时间,用于保证重复和延迟上报不会覆盖更新结果。
*/
@NotNull(message = "人脸质量检测时间不能为空")
private LocalDateTime checkedAt;
/**
* 虹软 SDK 或终端插件错误码,detected 时必须为空,failed 时允许为空。
*/
private Integer errorCode;
}
@@ -0,0 +1,27 @@
package com.bsd.pjcloud.admin.api.dto;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.util.List;
/**
* 终端按可信部门批量删除人脸的内部请求。
*/
@Data
public class SysUserFaceTerminalDeleteDto {
/**
* Hardware 根据 DEVICE-ID 解析出的商户部门主键。
*/
@NotNull(message = "终端绑定部门不能为空")
private Long merchantDeptId;
/**
* 待删除的虹软样本编号,单批最多 500 条。
*/
@NotNull(message = "人脸样本编号不能为空")
@Size(min = 1, max = 500, message = "单次最多删除500条人脸")
private List<String> sampleIds;
}
@@ -0,0 +1,36 @@
package com.bsd.pjcloud.admin.api.dto;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.util.List;
/**
* Hardware 向 UPMS 上报终端人脸质量的内部可信请求。
*/
@Data
public class SysUserFaceTerminalQualityReportDto {
/**
* Hardware 根据 DEVICE-ID 解析出的商户部门主键,终端请求体不得指定。
*/
@NotNull(message = "终端绑定部门不能为空")
private Long merchantDeptId;
/**
* Hardware 验证存在且已绑定商户的终端设备主键,用于质量结果来源追踪。
*/
@NotNull(message = "质量上报终端不能为空")
private Long qualityDeviceId;
/**
* 本批人脸质量结果,单次最多 500 条且不允许重复样本编号。
*/
@Valid
@NotEmpty(message = "人脸质量结果不能为空")
@Size(max = 500, message = "单次最多上报500条人脸质量结果")
private List<SysUserFaceQualityReportItemDto> items;
}
@@ -0,0 +1,66 @@
package com.bsd.pjcloud.admin.api.feign;
import com.bsd.pjcloud.admin.api.dto.SysUserFaceTerminalDeleteDto;
import com.bsd.pjcloud.admin.api.dto.SysUserFaceTerminalQualityReportDto;
import com.bsd.pjcloud.admin.api.vo.SysUserFaceStatusCountVo;
import com.bsd.pjcloud.admin.api.vo.SysUserFaceEvidenceSourceVo;
import com.bsd.pjcloud.admin.api.vo.SysUserFaceTerminalDeleteVo;
import com.bsd.pjcloud.admin.api.vo.SysUserFaceTerminalQualityReportVo;
import com.bsd.pjcloud.common.core.constant.ServiceNameConstants;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.feign.annotation.NoToken;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* 用户人脸远程服务。
*/
@FeignClient(contextId = "remoteUserFaceService", value = ServiceNameConstants.UPMS_SERVICE)
public interface RemoteUserFaceService {
/**
* 批量查询用户的人脸可用与审核中数量。
*
* @param userIds 用户ID列表
* @return 各用户的人脸状态数量
*/
@NoToken
@PostMapping("/user-face/inner/status-count")
R<List<SysUserFaceStatusCountVo>> listStatusCounts(@RequestBody List<Long> userIds);
/**
* 按用户和虹软样本编号读取审核通过的人脸原图地址,供订单证据服务复制订单专属快照。
*
* @param userId 识别用户主键
* @param sampleId 虹软样本编号
* @return 受信人脸图片来源;不存在或未审核通过时为空
*/
@NoToken
@GetMapping("/user-face/inner/evidence-source")
R<SysUserFaceEvidenceSourceVo> getEvidenceSource(@RequestParam Long userId, @RequestParam String sampleId);
/**
* 按 Hardware 解析出的可信部门批量删除人脸。
*
* @param dto 商户部门与样本编号
* @return 实际删除和已不存在的样本编号
*/
@NoToken
@PostMapping("/user-face/inner/terminal-delete")
R<SysUserFaceTerminalDeleteVo> terminalDelete(@RequestBody SysUserFaceTerminalDeleteDto dto);
/**
* 按 Hardware 解析出的可信设备和部门批量保存终端人脸质量结果。
*
* @param dto 商户部门、来源设备及质量结果
* @return 已更新、按版本或状态优先级忽略和已不存在的样本编号
*/
@NoToken
@PostMapping("/user-face/inner/terminal-quality-report")
R<SysUserFaceTerminalQualityReportVo> terminalReportQuality(@RequestBody SysUserFaceTerminalQualityReportDto dto);
}
@@ -0,0 +1,38 @@
package com.bsd.pjcloud.admin.api.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 供 Hardware 订单证据服务使用的受信人脸原图来源,不包含特征数据和审核流程内部字段。
*/
@Data
@Schema(description = "人脸证据原图来源")
public class SysUserFaceEvidenceSourceVo {
/**
* 人脸所属用户主键。
*/
@Schema(description = "用户主键")
private Long userId;
/**
* 虹软样本编号。
*/
@Schema(description = "样本编号")
private String sampleId;
/**
* 审核通过的人脸图片地址。
*/
@Schema(description = "人脸图片地址")
private String faceImg;
/**
* 人脸来源最后更新时间,用于证据审计和图片版本判断。
*/
@Schema(description = "来源更新时间")
private LocalDateTime sourceUpdatedAt;
}
@@ -0,0 +1,25 @@
package com.bsd.pjcloud.admin.api.vo;
import lombok.Data;
/**
* 用户人脸状态数量,用于跨服务批量汇总人脸业务状态。
*/
@Data
public class SysUserFaceStatusCountVo {
/**
* 用户ID。
*/
private Long userId;
/**
* 审核通过且当前可用的人脸数量。
*/
private Long availableCount;
/**
* 当前仍在审核中的人脸数量。
*/
private Long pendingCount;
}
@@ -0,0 +1,28 @@
package com.bsd.pjcloud.admin.api.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 终端批量删除人脸的幂等确认结果。
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysUserFaceTerminalDeleteVo {
/**
* 本次实际逻辑删除的样本编号。
*/
private List<String> deletedSampleIds;
/**
* 请求前已经不存在的样本编号,终端可继续清理本地副本。
*/
private List<String> alreadyAbsentSampleIds;
}
@@ -0,0 +1,33 @@
package com.bsd.pjcloud.admin.api.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 终端批量上报人脸质量后的幂等处理结果。
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysUserFaceTerminalQualityReportVo {
/**
* 本次成功写入服务端的人脸样本编号。
*/
private List<String> updatedSampleIds;
/**
* 因图片版本不一致、服务端已有成功结果或已有更新失败结果而忽略的样本编号。
*/
private List<String> ignoredStaleSampleIds;
/**
* 请求时服务端已经不存在的样本编号,终端无需将其视为上报失败。
*/
private List<String> alreadyAbsentSampleIds;
}