c0a0ae29 by xu

可信空间修改

1 parent fcb36ea3
Showing 33 changed files with 2975 additions and 0 deletions
package com.csbr.qingcloud.portal.controller;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.csbr.cloud.common.response.CommonRes;
import com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRQVO;
import com.csbr.qingcloud.portal.enums.TdsDataTypeEnum;
import com.csbr.qingcloud.portal.service.TdsSyncToRegionalNodeCallback;
import com.csbr.qingcloud.portal.service.TdsUserIdentityService;
import csbr.cloud.entity.annotation.SystemLog;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.*;
/**
* @program:
* @description: 可信空间数据同步控制器
* @author: xup
* @create: 2025-08-14 13:21
**/
@RestController
@RequestMapping("/tds-sync")
@Tag(name = "可信空间数据同步控制器")
public class TdsSyncController {
@Resource
private TdsUserIdentityService tdsUserIdentityService;
@PostMapping("/biz-sync-regional")
@SystemLog(value = "业务节点同步到区域节点")
@Operation(summary = "业务节点同步到区域节点",hidden = true)
public CommonRes<Boolean> bizSyncRegional(@RequestBody JSONObject data, @RequestParam String zqName,
@RequestParam TdsDataTypeEnum dataType) {
switch (dataType){
case USER ->{
tdsUserIdentityService.saveTdsUserIdentity(JSON.parseObject(data.toJSONString(),TdsUserIdentityRQVO.class));
break;
}
}
return CommonRes.success(true);
}
@PostMapping("/regional-sync-biz")
@SystemLog(value = "区域节点同步审批信息")
@Operation(summary = "区域节点同步审批信息",hidden = true)
public CommonRes<Boolean> regionalSyncBiz(@RequestParam String bizGuid,
@RequestParam Integer identityStatus,
@RequestParam String message,
@RequestParam TdsDataTypeEnum dataType) {
switch (dataType){
case USER ->{
tdsUserIdentityService.updateTdsUserIdentityStatus(bizGuid,identityStatus,message);
break;
}
}
return CommonRes.success(true);
}
}
package com.csbr.qingcloud.portal.controller;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.csbr.cloud.common.response.CommonRes;
import com.csbr.qingcloud.portal.enums.TdsDataTypeEnum;
import com.csbr.qingcloud.portal.service.impl.TdsSyncToRegionalNodeService;
import csbr.cloud.entity.annotation.SystemLog;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityQueryVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRQVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRSVO;
import com.csbr.qingcloud.portal.service.TdsUserIdentityService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @program:
* @description: 个人用户身份信息-控制器
* @author: xup
* @create: 2025-08-14 13:21
**/
@RestController
@RequestMapping("/tds-user-identity")
@Tag(name = "个人用户身份信息-控制器")
public class TdsUserIdentityController {
@Resource
private TdsUserIdentityService tdsUserIdentityService;
@Resource
private TdsSyncToRegionalNodeService<TdsUserIdentityRQVO> tdsSyncToRegionalNodeService;
//region 基本操作
@PostMapping("/save")
@SystemLog(value = "个人用户身份信息-新增")
@Operation(summary = "个人用户身份信息-新增")
public CommonRes<Boolean> saveTdsUserIdentity(@RequestBody @Valid TdsUserIdentityRQVO vo) {
tdsUserIdentityService.saveTdsUserIdentity(vo);
//数据同步到区域/业务节点
tdsSyncToRegionalNodeService.syncToRegionalNode(TdsDataTypeEnum.USER,vo,tdsUserIdentityService);
return CommonRes.success(true);
}
@PutMapping("/update")
@SystemLog(value = "个人用户身份信息-修改")
@Operation(summary = "个人用户身份信息-修改")
public CommonRes<Boolean> updateTdsUserIdentity(@RequestBody @Valid TdsUserIdentityRQVO vo) {
tdsUserIdentityService.updateTdsUserIdentity(vo);
return CommonRes.success(true);
}
@DeleteMapping("/delete")
@SystemLog(value = "个人用户身份信息-批量删除")
@Operation(summary = "个人用户身份信息-批量删除")
public CommonRes<Boolean> removeByGuids(@RequestBody List<String> guids) {
tdsUserIdentityService.removeByGuids(guids);
return CommonRes.success(true);
}
@PostMapping("/page-list")
@SystemLog(value = "个人用户身份信息-分页")
@Operation(summary = "个人用户身份信息-分页")
public CommonRes<PageListVO<TdsUserIdentityRSVO>> pageList(@RequestBody @Valid TdsUserIdentityQueryVO queryVO) {
PageListVO<TdsUserIdentityRSVO> pageVO = tdsUserIdentityService.pageList(queryVO);
return CommonRes.success(pageVO);
}
@GetMapping("/detail")
@SystemLog(value = "个人用户身份信息-详情")
@Operation(
summary = "个人用户身份信息-详情",
parameters = {
@Parameter(name = "guid", description = "个人用户身份信息唯一标识", required = true)}
)
public CommonRes<TdsUserIdentityRSVO> getTdsUserIdentityDetail(@RequestParam String guid) {
TdsUserIdentityRSVO vo = tdsUserIdentityService.getTdsUserIdentityDetail(guid);
return CommonRes.success(vo);
}
//endregion
}
package com.csbr.qingcloud.portal.domain.vo;
import csbr.cloud.entity.domain.base.dto.BasePageDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.Data;
import java.util.Date;
/**
* @program:
* @description: 个人用户附加信息查询参数
* @author: xup
* @create: 2025-08-14 13:21
**/
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title = "个人用户附加信息查询参数")
public class TdsUserAdditionalQueryVO extends BasePageDTO {
}
package com.csbr.qingcloud.portal.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.util.Date;
/**
* @program:
* @description: 个人用户附加信息新增、修改参数
* @author: xup
* @create: 2025-08-14 13:21
**/
@Data
@Schema(title = "个人用户附加信息新增、修改参数")
public class TdsUserAdditionalRQVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
/**
* 用户Guid
*/
@Schema(description = "用户Guid")
private String userGuid;
/**
* 国籍(来之数据字典国籍)
*/
@Schema(description = "国籍(来之数据字典国籍)")
@Size(max = 20, message = "国籍长度超过20")
private String nationalityCode;
/**
* 性别
*/
@Schema(description = "性别")
@Size(max = 10, message = "性别长度超过10")
private String sex;
/**
* 出生年月
*/
@Schema(description = "出生年月")
@Size(max = 7, message = "出生年月长度超过7")
private String birthdayMonth;
/**
* 社保卡卡号
*/
@Schema(description = "社保卡卡号")
@Size(max = 20, message = "社保卡卡号长度超过20")
private String socialSecurityCard;
/**
* 社保卡发放地
*/
@Schema(description = "社保卡发放地")
@Size(max = 50, message = "社保卡发放地长度超过50")
private String socialSecurityIssuance;
/**
* 支付宝账号
*/
@Schema(description = "支付宝账号")
@Size(max = 20, message = "支付宝账号长度超过20")
private String alipayAccount;
/**
* 微信账号
*/
@Schema(description = "微信账号")
@Size(max = 20, message = "微信账号长度超过20")
private String wechatAccount;
/**
* 邮箱
*/
@Schema(description = "邮箱")
@Size(max = 20, message = "邮箱长度超过20")
private String email;
/**
* 联系地址
*/
@Schema(description = "联系地址")
@Size(max = 100, message = "联系地址长度超过100")
private String contactAddress;
/**
* 其他
*/
@Schema(description = "其他")
@Size(max = 100, message = "其他长度超过100")
private String other;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/******** 子对象 *****/
}
package com.csbr.qingcloud.portal.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* @program:
* @description: 个人用户附加信息返回参数
* @author: xup
* @create: 2025-08-14 13:21
**/
@Data
@Schema(title = "个人用户附加信息返回参数")
public class TdsUserAdditionalRSVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
/**
* 会员Guid
*/
@Schema(description = "会员Guid")
private String tenantGuid;
/**
* 用户Guid
*/
@Schema(description = "用户Guid")
private String userGuid;
/**
* 国籍(来之数据字典国籍)
*/
@Schema(description = "国籍(来之数据字典国籍)")
private String nationalityCode;
/**
* 性别
*/
@Schema(description = "性别")
private String sex;
/**
* 出生年月
*/
@Schema(description = "出生年月")
private String birthdayMonth;
/**
* 社保卡卡号
*/
@Schema(description = "社保卡卡号")
private String socialSecurityCard;
/**
* 社保卡发放地
*/
@Schema(description = "社保卡发放地")
private String socialSecurityIssuance;
/**
* 支付宝账号
*/
@Schema(description = "支付宝账号")
private String alipayAccount;
/**
* 微信账号
*/
@Schema(description = "微信账号")
private String wechatAccount;
/**
* 邮箱
*/
@Schema(description = "邮箱")
private String email;
/**
* 联系地址
*/
@Schema(description = "联系地址")
private String contactAddress;
/**
* 其他
*/
@Schema(description = "其他")
private String other;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/******** 子对象 *****/
}
package com.csbr.qingcloud.portal.domain.vo;
import csbr.cloud.entity.domain.base.dto.BasePageDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.Data;
import java.util.Date;
/**
* @program:
* @description: 个人用户身份信息查询参数
* @author: xup
* @create: 2025-08-14 13:21
**/
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title = "个人用户身份信息查询参数")
public class TdsUserIdentityQueryVO extends BasePageDTO {
}
package com.csbr.qingcloud.portal.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.util.Date;
/**
* @program:
* @description: 个人用户身份信息新增、修改参数
* @author: xup
* @create: 2025-08-14 13:21
**/
@Data
@Schema(title = "个人用户身份信息新增、修改参数")
public class TdsUserIdentityRQVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
/**
* 姓名
*/
@Schema(description = "姓名")
@Size(max = 50, message = "姓名长度超过50")
@NotBlank(message = "姓名为空。")
private String name;
/**
* 证件类型(来之数据字典证件类型)
*/
@Schema(description = "证件类型(来之数据字典证件类型)")
@Size(max = 20, message = "证件类型长度超过20")
@NotBlank(message = "证件类型为空。")
private String idTypeCode;
/**
* 证件号码
*/
@Schema(description = "证件号码")
@Size(max = 50, message = "证件号码长度超过50")
@NotBlank(message = "证件号码为空。")
private String idNumber;
/**
* 证件号码有效起始日期
*/
@Schema(description = "证件号码有效起始日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@NotNull(message = "证件号码有效起始日期为空。")
private Date idNumberStartTime;
/**
* 证件号码有效截止日期
*/
@Schema(description = "证件号码有效截止日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@NotNull(message = "证件号码有效截止日期为空。")
private Date idNumberEndTime;
/**
* 手机号
*/
@Schema(description = "手机号")
@Size(max = 11, message = "手机号长度超过11")
@NotBlank(message = "手机号为空。")
private String mobile;
/**
* 个人实名认证等级(0 未实名;1 身份证实名核验或社保卡实名核验;2 在实名核验基础上增加人脸识别或其他生物特征核验)
*/
@Schema(description = "个人实名认证等级(0 未实名;1 身份证实名核验或社保卡实名核验;2 在实名核验基础上增加人脸识别或其他生物特征核验)")
private Integer authenticationLevel;
/**
* 个人实名认证方式(1 公安部、人社部实名服务;2 国家政务服务平台实名服务;3 微信、支付宝、通讯运营商等第三方平台)
*/
@Schema(description = "个人实名认证方式(1 公安部、人社部实名服务;2 国家政务服务平台实名服务;3 微信、支付宝、通讯运营商等第三方平台)")
private Integer authenticationMethod;
/**
* 实名认证时间
*/
@Schema(description = "实名认证时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date authenticationTime;
/**
* 身份状态(0 不可用 ;1 可用)
*/
@Schema(description = "身份状态(0 不可用 ;1 可用)")
private Integer identityStatus =0;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/******** 子对象 *****/
/**
* 个人用户附加信息
*/
@Schema(description = "个人用户附加信息")
private TdsUserAdditionalRQVO tdsUserAdditional;
/**
* 个人用户可验信息
*/
@Schema(description = "个人用户可验信息")
private TdsUserVerifiableRQVO tdsUserVerifiable;
}
package com.csbr.qingcloud.portal.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
* @program:
* @description: 个人用户身份信息返回参数
* @author: xup
* @create: 2025-08-14 13:21
**/
@Data
@Schema(title = "个人用户身份信息返回参数")
public class TdsUserIdentityRSVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
/**
* 姓名
*/
@Schema(description = "姓名")
private String name;
/**
* 用户身份标识(由区域/行业功能节点生成,唯一标识用户身份)
*/
@Schema(description = "用户身份标识(由区域/行业功能节点生成,唯一标识用户身份)")
private String userIdentity;
/**
* 证件类型(来之数据字典证件类型)
*/
@Schema(description = "证件类型(来之数据字典证件类型)")
private String idTypeCode;
/**
* 证件号码
*/
@Schema(description = "证件号码")
private String idNumber;
/**
* 证件号码有效起始日期
*/
@Schema(description = "证件号码有效起始日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date idNumberStartTime;
/**
* 证件号码有效截止日期
*/
@Schema(description = "证件号码有效截止日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date idNumberEndTime;
/**
* 手机号
*/
@Schema(description = "手机号")
private String mobile;
/**
* 个人实名认证等级(0 未实名;1 身份证实名核验或社保卡实名核验;2 在实名核验基础上增加人脸识别或其他生物特征核验)
*/
@Schema(description = "个人实名认证等级(0 未实名;1 身份证实名核验或社保卡实名核验;2 在实名核验基础上增加人脸识别或其他生物特征核验)")
private Integer authenticationLevel;
/**
* 个人实名认证方式(1 公安部、人社部实名服务;2 国家政务服务平台实名服务;3 微信、支付宝、通讯运营商等第三方平台)
*/
@Schema(description = "个人实名认证方式(1 公安部、人社部实名服务;2 国家政务服务平台实名服务;3 微信、支付宝、通讯运营商等第三方平台)")
private Integer authenticationMethod;
/**
* 实名认证时间
*/
@Schema(description = "实名认证时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date authenticationTime;
/**
* 身份状态(0 不可用 ;1 可用)
*/
@Schema(description = "身份状态(0 不可用 ;1 可用)")
private Integer identityStatus;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/******** 子对象 *****/
/**
* 个人用户附加信息
*/
@Schema(description = "个人用户附加信息")
private TdsUserAdditionalRSVO tdsUserAdditional;
/**
* 个人用户可验信息
*/
@Schema(description = "个人用户可验信息")
private TdsUserVerifiableRSVO tdsUserVerifiable;
}
package com.csbr.qingcloud.portal.domain.vo;
import csbr.cloud.entity.domain.base.dto.BasePageDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.Data;
import java.util.Date;
/**
* @program:
* @description: 个人用户可验信息查询参数
* @author: xup
* @create: 2025-08-14 13:21
**/
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title = "个人用户可验信息查询参数")
public class TdsUserVerifiableQueryVO extends BasePageDTO {
}
package com.csbr.qingcloud.portal.domain.vo;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.media.Schema;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* @program:
* @description: 个人用户可验信息新增、修改参数
* @author: xup
* @create: 2025-08-14 13:21
**/
@Data
@Schema(title = "个人用户可验信息新增、修改参数")
public class TdsUserVerifiableRQVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
/**
* 用户Guid
*/
@Schema(description = "用户Guid")
private String userGuid;
/**
* 学历/学位证书
*/
@Schema(description = "学历/学位证书")
private Map<String,Object> bachelorDegreeCertificate;
/**
* 职业资格证书
*/
@Schema(description = "职业资格证书")
private Map<String,Object> professionalCertificate;
/**
* 信用报告摘要
*/
@Schema(description = "信用报告摘要")
private Map<String,Object> creditReportSummary;
/**
* 数字作品/知识产权登记
*/
@Schema(description = "数字作品/知识产权登记")
private Map<String,Object> intellectualPropertyRegistration;
/**
* 授权委托书
*/
@Schema(description = "授权委托书")
private Map<String,Object> powerOfAttorney;
/**
* 其他第三方认证信息
*/
@Schema(description = "其他第三方认证信息")
private Map<String,Object> thirdPartyCertification;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/******** 子对象 *****/
}
package com.csbr.qingcloud.portal.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* @program:
* @description: 个人用户可验信息返回参数
* @author: xup
* @create: 2025-08-14 13:21
**/
@Data
@Schema(title = "个人用户可验信息返回参数")
public class TdsUserVerifiableRSVO {
/**
* 系统唯一标识
*/
@Schema(description = "系统唯一标识")
private String guid;
/**
* 用户Guid
*/
@Schema(description = "用户Guid")
private String userGuid;
/**
* 学历/学位证书
*/
@Schema(description = "学历/学位证书")
private Map<String,Object> bachelorDegreeCertificate;
/**
* 职业资格证书
*/
@Schema(description = "职业资格证书")
private Map<String,Object> professionalCertificate;
/**
* 信用报告摘要
*/
@Schema(description = "信用报告摘要")
private Map<String,Object> creditReportSummary;
/**
* 数字作品/知识产权登记
*/
@Schema(description = "数字作品/知识产权登记")
private Map<String,Object> intellectualPropertyRegistration;
/**
* 授权委托书
*/
@Schema(description = "授权委托书")
private Map<String,Object> powerOfAttorney;
/**
* 其他第三方认证信息
*/
@Schema(description = "其他第三方认证信息")
private Map<String,Object> thirdPartyCertification;
/******** 库表存储属性 需处理 *****/
/******** 自定义扩展 *****/
/******** 子对象 *****/
}
package com.csbr.qingcloud.portal.enums;
/**
* 可信空间数据类型
*/
public enum TdsDataTypeEnum {
//个人用户
USER,
//法人
ENTERPRISE,
//经办人
OPERATOR;
}
package com.csbr.qingcloud.portal.mybatis.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import csbr.cloud.entity.domain.base.dao.BaseDO;
import jdk.jfr.Name;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* @program:
* @description: 个人用户附加信息实体
* @author: xup
* @create: 2025-08-14 13:21
**/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Name("个人用户附加信息")
public class MfTdsUserAdditional extends BaseDO {
/**
* 会员Guid
*/
@Name("会员Guid")
private String tenantGuid;
/**
* 用户Guid
*/
@Name("用户Guid")
private String userGuid;
/**
* 国籍(来之数据字典国籍)
*/
@Name("国籍(来之数据字典国籍)")
private String nationalityCode;
/**
* 性别
*/
@Name("性别")
private String sex;
/**
* 出生年月
*/
@Name("出生年月")
private String birthdayMonth;
/**
* 社保卡卡号
*/
@Name("社保卡卡号")
private String socialSecurityCard;
/**
* 社保卡发放地
*/
@Name("社保卡发放地")
private String socialSecurityIssuance;
/**
* 支付宝账号
*/
@Name("支付宝账号")
private String alipayAccount;
/**
* 微信账号
*/
@Name("微信账号")
private String wechatAccount;
/**
* 邮箱
*/
@Name("邮箱")
private String email;
/**
* 联系地址
*/
@Name("联系地址")
private String contactAddress;
/**
* 其他
*/
@Name("其他")
private String other;
}
package com.csbr.qingcloud.portal.mybatis.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import csbr.cloud.entity.domain.base.dao.BaseDO;
import jdk.jfr.Name;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* @program:
* @description: 个人用户身份信息实体
* @author: xup
* @create: 2025-08-14 13:21
**/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Name("个人用户身份信息")
public class MfTdsUserIdentity extends BaseDO {
/**
* 会员Guid
*/
@Name("会员Guid")
private String tenantGuid;
/**
* 姓名
*/
@Name("姓名")
private String name;
/**
* 用户身份标识(由区域/行业功能节点生成,唯一标识用户身份)
*/
@Name("用户身份标识(由区域/行业功能节点生成,唯一标识用户身份)")
private String userIdentity;
/**
* 证件类型(来之数据字典证件类型)
*/
@Name("证件类型(来之数据字典证件类型)")
private String idTypeCode;
/**
* 证件号码
*/
@Name("证件号码")
private String idNumber;
/**
* 证件号码有效起始日期
*/
@Name("证件号码有效起始日期")
private Date idNumberStartTime;
/**
* 证件号码有效截止日期
*/
@Name("证件号码有效截止日期")
private Date idNumberEndTime;
/**
* 手机号
*/
@Name("手机号")
private String mobile;
/**
* 个人实名认证等级(0 未实名;1 身份证实名核验或社保卡实名核验;2 在实名核验基础上增加人脸识别或其他生物特征核验)
*/
@Name("个人实名认证等级(0 未实名;1 身份证实名核验或社保卡实名核验;2 在实名核验基础上增加人脸识别或其他生物特征核验)")
private Integer authenticationLevel;
/**
* 个人实名认证方式(1 公安部、人社部实名服务;2 国家政务服务平台实名服务;3 微信、支付宝、通讯运营商等第三方平台)
*/
@Name("个人实名认证方式(1 公安部、人社部实名服务;2 国家政务服务平台实名服务;3 微信、支付宝、通讯运营商等第三方平台)")
private Integer authenticationMethod;
/**
* 实名认证时间
*/
@Name("实名认证时间")
private Date authenticationTime;
/**
* 身份状态(0 不可用 ;1 可用)
*/
@Name("身份状态(0 不可用 ;1 可用)")
private Integer identityStatus;
}
package com.csbr.qingcloud.portal.mybatis.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import csbr.cloud.entity.domain.base.dao.BaseDO;
import jdk.jfr.Name;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
import java.util.Map;
/**
* @program:
* @description: 个人用户可验信息实体
* @author: xup
* @create: 2025-08-14 13:21
**/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Name("个人用户可验信息")
public class MfTdsUserVerifiable extends BaseDO {
/**
* 会员Guid
*/
@Name("会员Guid")
private String tenantGuid;
/**
* 用户Guid
*/
@Name("用户Guid")
private String userGuid;
/**
* 学历/学位证书
*/
@Name("学历/学位证书")
private Map<String,Object> bachelorDegreeCertificate;
/**
* 职业资格证书
*/
@Name("职业资格证书")
private Map<String,Object> professionalCertificate;
/**
* 信用报告摘要
*/
@Name("信用报告摘要")
private Map<String,Object> creditReportSummary;
/**
* 数字作品/知识产权登记
*/
@Name("数字作品/知识产权登记")
private Map<String,Object> intellectualPropertyRegistration;
/**
* 授权委托书
*/
@Name("授权委托书")
private Map<String,Object> powerOfAttorney;
/**
* 其他第三方认证信息
*/
@Name("其他第三方认证信息")
private Map<String,Object> thirdPartyCertification;
}
package com.csbr.qingcloud.portal.mybatis.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserAdditional;
/**
* @program:
* @description: 个人用户附加信息 Mapper 接口
* @author: xup
* @create: 2025-08-14 13:21
**/
@Mapper
public interface MfTdsUserAdditionalMapper extends BaseMapper<MfTdsUserAdditional> {
}
package com.csbr.qingcloud.portal.mybatis.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserIdentity;
/**
* @program:
* @description: 个人用户身份信息 Mapper 接口
* @author: xup
* @create: 2025-08-14 13:21
**/
@Mapper
public interface MfTdsUserIdentityMapper extends BaseMapper<MfTdsUserIdentity> {
}
package com.csbr.qingcloud.portal.mybatis.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserVerifiable;
/**
* @program:
* @description: 个人用户可验信息 Mapper 接口
* @author: xup
* @create: 2025-08-14 13:21
**/
@Mapper
public interface MfTdsUserVerifiableMapper extends BaseMapper<MfTdsUserVerifiable> {
}
package com.csbr.qingcloud.portal.mybatis.service;
import com.csbr.cloud.base.service.CsbrService;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserAdditional;
/**
* @program:
* @description: 个人用户附加信息逻辑层接口
* @author: xup
* @create: 2025-08-14 13:21
**/
public interface MfTdsUserAdditionalService extends CsbrService<MfTdsUserAdditional> {
}
package com.csbr.qingcloud.portal.mybatis.service;
import com.csbr.cloud.base.service.CsbrService;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserIdentity;
/**
* @program:
* @description: 个人用户身份信息逻辑层接口
* @author: xup
* @create: 2025-08-14 13:21
**/
public interface MfTdsUserIdentityService extends CsbrService<MfTdsUserIdentity> {
}
package com.csbr.qingcloud.portal.mybatis.service;
import com.csbr.cloud.base.service.CsbrService;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserVerifiable;
/**
* @program:
* @description: 个人用户可验信息逻辑层接口
* @author: xup
* @create: 2025-08-14 13:21
**/
public interface MfTdsUserVerifiableService extends CsbrService<MfTdsUserVerifiable> {
}
package com.csbr.qingcloud.portal.mybatis.service.impl;
import com.csbr.cloud.mybatis.service.impl.CsbrServiceImpl;
import com.csbr.qingcloud.portal.mybatis.mapper.MfTdsUserAdditionalMapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserAdditional;
import com.csbr.qingcloud.portal.mybatis.service.MfTdsUserAdditionalService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
/**
* @program:
* @description: 个人用户附加信息逻辑层接口实现
* @author: xup
* @create: 2025-08-14 13:21
**/
@Service
public class MfTdsUserAdditionalServiceImpl extends CsbrServiceImpl<MfTdsUserAdditionalMapper, MfTdsUserAdditional> implements MfTdsUserAdditionalService {
@Resource
private MfTdsUserAdditionalMapper mfTdsUserAdditionalMapper;
}
package com.csbr.qingcloud.portal.mybatis.service.impl;
import com.csbr.cloud.mybatis.service.impl.CsbrServiceImpl;
import com.csbr.qingcloud.portal.mybatis.mapper.MfTdsUserIdentityMapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserIdentity;
import com.csbr.qingcloud.portal.mybatis.service.MfTdsUserIdentityService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
/**
* @program:
* @description: 个人用户身份信息逻辑层接口实现
* @author: xup
* @create: 2025-08-14 13:21
**/
@Service
public class MfTdsUserIdentityServiceImpl extends CsbrServiceImpl<MfTdsUserIdentityMapper, MfTdsUserIdentity> implements MfTdsUserIdentityService {
@Resource
private MfTdsUserIdentityMapper mfTdsUserIdentityMapper;
}
package com.csbr.qingcloud.portal.mybatis.service.impl;
import com.csbr.cloud.mybatis.service.impl.CsbrServiceImpl;
import com.csbr.qingcloud.portal.mybatis.mapper.MfTdsUserVerifiableMapper;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserVerifiable;
import com.csbr.qingcloud.portal.mybatis.service.MfTdsUserVerifiableService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
/**
* @program:
* @description: 个人用户可验信息逻辑层接口实现
* @author: xup
* @create: 2025-08-14 13:21
**/
@Service
public class MfTdsUserVerifiableServiceImpl extends CsbrServiceImpl<MfTdsUserVerifiableMapper, MfTdsUserVerifiable> implements MfTdsUserVerifiableService {
@Resource
private MfTdsUserVerifiableMapper mfTdsUserVerifiableMapper;
}
package com.csbr.qingcloud.portal.service;
/**
* 业务节点同步数据到区域节点回调接口
* @param <T>
*/
public interface TdsSyncToRegionalNodeCallback<T> {
/**
* 业务节点同步数据到区域节点回调接口
* @param rqVO
*/
void onTaskComplete(T rqVO);
}
package com.csbr.qingcloud.portal.service;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalQueryVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalRQVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalRSVO;
import java.util.List;
/**
* @program:
* @description: 个人用户附加信息业务逻辑接口
* @author: xup
* @create: 2025-08-14 13:21
**/
public interface TdsUserAdditionalService {
/**
* 个人用户附加信息分页查询
* @author xup
* @date 2025-08-14 13:21
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalRSVO>
*/
PageListVO<TdsUserAdditionalRSVO> pageList(TdsUserAdditionalQueryVO queryVO);
/**
* 个人用户附加信息获取详情数据
* @author xup
* @date 2025-08-14 13:21
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalRSVO
*/
TdsUserAdditionalRSVO getTdsUserAdditionalDetail(String guid);
/**
* 个人用户附加信息数据新增
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
void saveTdsUserAdditional(TdsUserAdditionalRQVO rqVO);
/**
* 个人用户附加信息数据修改
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
void updateTdsUserAdditional(TdsUserAdditionalRQVO rqVO);
/**
* 个人用户附加信息数据删除
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
void removeByGuids(List<String> guids);
/**
* 个人用户附加信息数据删除、并有相关的处理操作
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
void removeHandleByGuids(List<String> guids);
/**
* 通过UserGuid删除附件信息
* @param userGuids
*/
void removeByUserGuids(List<String> userGuids);
/**
* 个人用户附加信息查询
* @param userGuid
* @return
*/
TdsUserAdditionalRSVO getTdsUserAdditionalByUserGuid(String userGuid);
}
package com.csbr.qingcloud.portal.service;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityQueryVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRQVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRSVO;
import java.util.List;
/**
* @program:
* @description: 个人用户身份信息业务逻辑接口
* @author: xup
* @create: 2025-08-14 13:21
**/
public interface TdsUserIdentityService extends TdsSyncToRegionalNodeCallback<TdsUserIdentityRQVO> {
/**
* 个人用户身份信息分页查询
* @author xup
* @date 2025-08-14 13:21
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRSVO>
*/
PageListVO<TdsUserIdentityRSVO> pageList(TdsUserIdentityQueryVO queryVO);
/**
* 个人用户身份信息获取详情数据
* @author xup
* @date 2025-08-14 13:21
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRSVO
*/
TdsUserIdentityRSVO getTdsUserIdentityDetail(String guid);
/**
* 个人用户身份信息数据新增
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
void saveTdsUserIdentity(TdsUserIdentityRQVO rqVO);
/**
* 个人用户身份信息数据修改
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
void updateTdsUserIdentity(TdsUserIdentityRQVO rqVO);
/**
* 个人用户身份信息数据删除
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
void removeByGuids(List<String> guids);
/**
* 个人用户身份信息数据删除、并有相关的处理操作
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
void removeHandleByGuids(List<String> guids);
/**
* 认证个人用户身份信息
* @param bizGuid
* @param identityStatus
* @param message
*/
void updateTdsUserIdentityStatus(String bizGuid, Integer identityStatus, String message);
}
package com.csbr.qingcloud.portal.service;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableQueryVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableRQVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableRSVO;
import java.util.List;
/**
* @program:
* @description: 个人用户可验信息业务逻辑接口
* @author: xup
* @create: 2025-08-14 13:21
**/
public interface TdsUserVerifiableService {
/**
* 个人用户可验信息分页查询
* @author xup
* @date 2025-08-14 13:21
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableRSVO>
*/
PageListVO<TdsUserVerifiableRSVO> pageList(TdsUserVerifiableQueryVO queryVO);
/**
* 个人用户可验信息获取详情数据
* @author xup
* @date 2025-08-14 13:21
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableRSVO
*/
TdsUserVerifiableRSVO getTdsUserVerifiableDetail(String guid);
/**
* 个人用户可验信息数据新增
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
void saveTdsUserVerifiable(TdsUserVerifiableRQVO rqVO);
/**
* 个人用户可验信息数据修改
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
void updateTdsUserVerifiable(TdsUserVerifiableRQVO rqVO);
/**
* 个人用户可验信息数据删除
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
void removeByGuids(List<String> guids);
/**
* 个人用户可验信息数据删除、并有相关的处理操作
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
void removeHandleByGuids(List<String> guids);
void removeByUserGuids(List<String> userGuids);
/**
* 个人用户可验信息查询
* @param userGuid
* @return
*/
TdsUserVerifiableRSVO getTdsUserVerifiableByUserGuid(String userGuid);
}
package com.csbr.qingcloud.portal.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.csbr.cloud.common.enums.SystemError;
import com.csbr.cloud.common.exception.CsbrSystemException;
import com.csbr.cloud.common.response.CommonRes;
import com.csbr.qingcloud.portal.enums.TdsDataTypeEnum;
import com.csbr.qingcloud.portal.service.TdsSyncToRegionalNodeCallback;
import com.csbr.qingcloud.portal.util.ZQConfig;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.core5.util.Timeout;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
/**
* 业务节点同步数据到区域节点服务
* @param <T>
*/
@Slf4j
@Service
public class TdsSyncToRegionalNodeService<T> {
@Resource
public ZQConfig zqConfig;
@Resource
private RestTemplate restTemplate;
/**
* 业务节点同步数据到区域节点
* @param dataTypeEnum
* @param data
* @param callback
*/
@Async
public void syncToRegionalNode(TdsDataTypeEnum dataTypeEnum,
T data,
TdsSyncToRegionalNodeCallback<T> callback){
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("appKey", zqConfig.getAppKey());
JSONObject jsonObject = new JSONObject();
jsonObject.put("data",JSON.parseObject(JSON.toJSONString(data)));
jsonObject.put("dataType",dataTypeEnum);
jsonObject.put("zqName",zqConfig.getZqName());
HttpEntity<JSONObject> requestEntity = new HttpEntity<>(jsonObject, headers);
restTemplate.setRequestFactory(getFactory());
CommonRes commonRes = restTemplate.postForObject(zqConfig.getTdsRegionalNodeUrl(), requestEntity, CommonRes.class);
if (!CommonRes.success().getCode().equals(commonRes.getCode())) {
throw new CsbrSystemException(SystemError.ERROR_CODE, commonRes.getMsg());
} else {
CommonRes commonResData = JSON.parseObject(String.valueOf(commonRes.getData()), CommonRes.class);
if (!CommonRes.success().getCode().equals(commonResData.getCode())) {
throw new CsbrSystemException(SystemError.ERROR_CODE, commonResData.getMsg());
}
}
callback.onTaskComplete(data);
}
private ClientHttpRequestFactory getFactory() {
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(Timeout.ofSeconds(5000)) // 连接超时
.setConnectionRequestTimeout(Timeout.ofSeconds(5000)) // 从连接池获取连接的超时时间
.setResponseTimeout(Timeout.ofSeconds(10000)) // 数据读取超时
.build();
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setDefaultRequestConfig(config)
.build();
return new HttpComponentsClientHttpRequestFactory(httpClient);
}
}
package com.csbr.qingcloud.portal.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.csbr.cloud.common.enums.SystemError;
import com.csbr.cloud.common.exception.CsbrSystemException;
import com.csbr.cloud.common.util.CommonUtil;
import com.csbr.cloud.common.util.CsbrBeanUtil;
import com.csbr.cloud.common.util.MessageSourceUtil;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalQueryVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalRQVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalRSVO;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserAdditional;
import com.csbr.qingcloud.portal.mybatis.service.MfTdsUserAdditionalService;
import com.csbr.qingcloud.portal.service.TdsUserAdditionalService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @program:
* @description: 个人用户附加信息业务逻辑实现
* @author: xup
* @create: 2025-08-14 13:21
**/
@Slf4j
@Service
public class TdsUserAdditionalServiceImpl implements TdsUserAdditionalService {
/**
* 功能名称
*/
private static final String FUNCTION_NAME = "个人用户附加信息";
@Resource
private MfTdsUserAdditionalService mfTdsUserAdditionalService;
@Resource
private CsbrBeanUtil csbrBeanUtil;
@Resource
private MessageSourceUtil messageSourceUtil;
/**
* 个人用户附加信息分页查询
* @author xup
* @date 2025-08-14 13:21
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalRSVO>
*/
@Override
public PageListVO<TdsUserAdditionalRSVO> pageList(TdsUserAdditionalQueryVO queryVO) {
beforeQuery(queryVO);
LambdaQueryWrapper<MfTdsUserAdditional> queryWrapper = mfTdsUserAdditionalService.csbrQueryWrapper(queryVO, MfTdsUserAdditional.class);
queryWrapper.orderByDesc(MfTdsUserAdditional::getCreateTime);
PageListVO<MfTdsUserAdditional> pageList = mfTdsUserAdditionalService.csbrPageList(queryVO, queryWrapper);
PageListVO<TdsUserAdditionalRSVO> rsPageList = csbrBeanUtil.convert(pageList, PageListVO.class);
afterQuery(pageList, rsPageList);
return rsPageList;
}
/**
* 个人用户附加信息获取详情数据
* @author xup
* @date 2025-08-14 13:21
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalRSVO
*/
@Override
public TdsUserAdditionalRSVO getTdsUserAdditionalDetail(String guid) {
if (StringUtils.isBlank(guid)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010",
String.format("获取%s详情数据", FUNCTION_NAME), "数据唯一标识"));
}
MfTdsUserAdditional entity = mfTdsUserAdditionalService.getById(guid);
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(String.format("获取%s详情数据", FUNCTION_NAME)));
}
return convertToVO(entity);
}
/**
* 个人用户附加信息数据新增
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void saveTdsUserAdditional(TdsUserAdditionalRQVO rqVO) {
beforeSave(rqVO);
MfTdsUserAdditional entity = convertToEntity(rqVO);
rqVO.setGuid(entity.getGuid());
mfTdsUserAdditionalService.csbrAddEntity(entity);
boolean flag = mfTdsUserAdditionalService.save(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, messageSourceUtil.addMessage(FUNCTION_NAME));
}
afterSave(rqVO);
}
/**
* 个人用户附加信息数据修改
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void updateTdsUserAdditional(TdsUserAdditionalRQVO rqVO) {
// 将修改前数据查出来缓存下来,传入到修改后方法中,用于一些特殊逻辑处理,如某个值变化才进行
// MfTdsUserAdditional oldEntity = mfTdsUserAdditionalService.getById(rqVO.getGuid());
MfTdsUserAdditional oldEntity = null;
beforeUpdate(rqVO);
MfTdsUserAdditional entity = convertToEntity(rqVO);
mfTdsUserAdditionalService.csbrUpdateEntity(entity);
boolean flag = mfTdsUserAdditionalService.updateById(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, messageSourceUtil.updateMessage(FUNCTION_NAME));
}
afterUpdate(rqVO, oldEntity);
}
/**
* 个人用户附加信息数据删除
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void removeByGuids(List<String> guids) {
if (CollectionUtils.isEmpty(guids)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
String.format("删除%s数据", FUNCTION_NAME), "数据唯一标识"));
}
if (!mfTdsUserAdditionalService.isExistsData(guids, MfTdsUserAdditional.class)) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToDelMessage(FUNCTION_NAME));
}
boolean flag = mfTdsUserAdditionalService.removeByIds(guids);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.delMessage(FUNCTION_NAME));
}
}
/**
* 个人用户附加信息数据删除、并有相关的处理操作
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void removeHandleByGuids(List<String> guids) {
if (CollectionUtils.isEmpty(guids)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
String.format("删除%s数据", FUNCTION_NAME), "数据唯一标识"));
}
for (String guid : guids) {
MfTdsUserAdditional entity = mfTdsUserAdditionalService.getById(guid);
beforeRemove(entity);
boolean flag = mfTdsUserAdditionalService.removeById(guid);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.delMessage(FUNCTION_NAME));
}
afterRemove(entity);
}
}
@Override
public void removeByUserGuids(List<String> userGuids) {
if (CollectionUtils.isEmpty(userGuids)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
String.format("删除%s数据", FUNCTION_NAME), "用户Guid"));
}
LambdaUpdateWrapper<MfTdsUserAdditional> removeWrapper = Wrappers.lambdaUpdate();
removeWrapper.in(MfTdsUserAdditional::getGuid,userGuids);
mfTdsUserAdditionalService.remove(removeWrapper);
}
@Override
public TdsUserAdditionalRSVO getTdsUserAdditionalByUserGuid(String userGuid) {
if (StringUtils.isBlank(userGuid)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010",
String.format("获取%s详情数据", FUNCTION_NAME), "用户Guid"));
}
LambdaQueryWrapper<MfTdsUserAdditional> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(MfTdsUserAdditional::getUserGuid,userGuid);
List<MfTdsUserAdditional> list = mfTdsUserAdditionalService.list(queryWrapper);
if(ObjectUtils.isEmpty(list)){
return null;
}
return convertToVO(list.get(0));
}
/**
* 个人用户附加信息新新增前置处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return void
*/
private void beforeSave(TdsUserAdditionalRQVO rqVO) {
//region 1.输入基础验证
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 个人用户附加信息新增后置处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return void
*/
private void afterSave(TdsUserAdditionalRQVO rqVO) {
//region 1.输出特殊转换
//region 1.1.输出过滤与补充处理
//endregion 1.1.输出过滤与补充处理
//endregion 1.输出特殊转换
}
/**
* 个人用户附加信息修改前置校验、处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return void
*/
private void beforeUpdate(TdsUserAdditionalRQVO rqVO) {
//region 1.输入基础验证
if (StringUtils.isBlank(rqVO.getGuid())) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010", String.format("修改%s数据",FUNCTION_NAME), "数据唯一标识"));
}
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
if (!mfTdsUserAdditionalService.isExistsData(Collections.singletonList(rqVO.getGuid()), MfTdsUserAdditional.class)) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToUpdateMessage(FUNCTION_NAME));
}
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 个人用户附加信息修改后置处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @param entity
* @return void
*/
protected void afterUpdate(TdsUserAdditionalRQVO rqVO, MfTdsUserAdditional entity) {
//region 1.输出特殊转换
//region 1.1.输出过滤与补充处理
//endregion 1.1.输出过滤与补充处理
//endregion 1.输出特殊转换
}
/**
* 个人用户附加信息删除前置处理
* @author xup
* @date 2025-08-14 13:21
* @param entity
* @return void
*/
private void beforeRemove(MfTdsUserAdditional entity) {
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToDelMessage(FUNCTION_NAME));
}
}
/**
* 个人用户附加信息删除后置处理
* @author xup
* @date 2025-08-14 13:21
* @param entity
* @return void
*/
private void afterRemove(MfTdsUserAdditional entity) {
}
/**
* 个人用户附加信息查询方法前置验证、处理
* @author xup
* @date 2025-08-14 13:21
* @param rqQueryVO
* @return void
*/
private void beforeQuery(TdsUserAdditionalQueryVO rqQueryVO) {
}
/**
* 个人用户附加信息查询方法后置数据转换、处理
* @author xup
* @date 2025-08-14 13:21
* @param pageList 数据库查询数据
* @param rsPageList 返回的最终数据
* @return void
*/
private void afterQuery(PageListVO<MfTdsUserAdditional> pageList, PageListVO<TdsUserAdditionalRSVO> rsPageList) {
if (CollectionUtils.isNotEmpty(pageList.getRecords())) {
rsPageList.setRecords(convertToVO(pageList.getRecords()));
}
// 需要特殊处理数据时使用
/*if(CollectionUtils.isNotEmpty(pageList.getRecords())){
List<TdsUserAdditionalRSVO> results = new ArrayList<>();
for (MfTdsUserAdditional item : pageList.getRecords()){
TdsUserAdditionalRSVO vo = convertToVO(item);
results.add(vo);
}
rsPageList.setRecords(results);
}*/
}
//region 辅助操作
/**
* 个人用户附加信息实体数据转换为视图对象数据(多个)
* @author xup
* @date 2025-08-14 13:21
* @param entityList 实体数据列表
* @return java.util.List<com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalRSVO> 视图对象列表
*/
private List<TdsUserAdditionalRSVO> convertToVO(List<MfTdsUserAdditional> entityList) {
if (CollectionUtils.isEmpty(entityList)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
"实体数据转换为视图对象实体数据", "实体数据"));
}
List<TdsUserAdditionalRSVO> voList = new ArrayList<>(entityList.size());
for (MfTdsUserAdditional item : entityList) {
TdsUserAdditionalRSVO vo = convertToVO(item);
voList.add(vo);
}
return voList;
}
/**
* 个人用户附加信息实体数据转换为视图对象数据
* @author xup
* @date 2025-08-14 13:21
* @param entity
* @return com.csbr.qingcloud.portal.domain.vo.TdsUserAdditionalRSVO
*/
private TdsUserAdditionalRSVO convertToVO(MfTdsUserAdditional entity) {
TdsUserAdditionalRSVO vo = csbrBeanUtil.convert(entity, TdsUserAdditionalRSVO.class);
return vo;
}
/**
* 个人用户附加信息新增、修改和其他情况的参数转换为实体
* @author xup
* @date 2025-08-14 13:21
* @param vo
* @return com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserAdditional
*/
private MfTdsUserAdditional convertToEntity(TdsUserAdditionalRQVO vo) {
MfTdsUserAdditional entity = csbrBeanUtil.convert(vo, MfTdsUserAdditional.class);
// 新增时数据默认guid赋值,转换后该guid可能别使用
if (StringUtils.isBlank(vo.getGuid())) {
entity.setGuid(CommonUtil.newGuid());
}
return entity;
}
//endregion
}
package com.csbr.qingcloud.portal.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.csbr.cloud.common.enums.SystemError;
import com.csbr.cloud.common.exception.CsbrSystemException;
import com.csbr.cloud.common.util.CommonUtil;
import com.csbr.cloud.common.util.CsbrBeanUtil;
import com.csbr.cloud.common.util.MessageSourceUtil;
import com.csbr.qingcloud.portal.service.TdsUserAdditionalService;
import com.csbr.qingcloud.portal.service.TdsUserVerifiableService;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityQueryVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRQVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRSVO;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserIdentity;
import com.csbr.qingcloud.portal.mybatis.service.MfTdsUserIdentityService;
import com.csbr.qingcloud.portal.service.TdsUserIdentityService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @program:
* @description: 个人用户身份信息业务逻辑实现
* @author: xup
* @create: 2025-08-14 13:21
**/
@Slf4j
public class TdsUserIdentityServiceImpl implements TdsUserIdentityService {
/**
* 功能名称
*/
private static final String FUNCTION_NAME = "个人用户身份信息";
@Resource
private MfTdsUserIdentityService mfTdsUserIdentityService;
@Resource
private CsbrBeanUtil csbrBeanUtil;
@Resource
private MessageSourceUtil messageSourceUtil;
@Resource
private TdsUserAdditionalService tdsUserAdditionalService;
@Resource
private TdsUserVerifiableService tdsUserVerifiableService;
/**
* 个人用户身份信息分页查询
* @author xup
* @date 2025-08-14 13:21
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRSVO>
*/
@Override
public PageListVO<TdsUserIdentityRSVO> pageList(TdsUserIdentityQueryVO queryVO) {
beforeQuery(queryVO);
LambdaQueryWrapper<MfTdsUserIdentity> queryWrapper = mfTdsUserIdentityService.csbrQueryWrapper(queryVO, MfTdsUserIdentity.class);
queryWrapper.orderByDesc(MfTdsUserIdentity::getCreateTime);
PageListVO<MfTdsUserIdentity> pageList = mfTdsUserIdentityService.csbrPageList(queryVO, queryWrapper);
PageListVO<TdsUserIdentityRSVO> rsPageList = csbrBeanUtil.convert(pageList, PageListVO.class);
afterQuery(pageList, rsPageList);
return rsPageList;
}
/**
* 个人用户身份信息获取详情数据
* @author xup
* @date 2025-08-14 13:21
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRSVO
*/
@Override
public TdsUserIdentityRSVO getTdsUserIdentityDetail(String guid) {
if (StringUtils.isBlank(guid)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010",
String.format("获取%s详情数据", FUNCTION_NAME), "数据唯一标识"));
}
MfTdsUserIdentity entity = mfTdsUserIdentityService.getById(guid);
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(String.format("获取%s详情数据", FUNCTION_NAME)));
}
TdsUserIdentityRSVO vo = convertToVO(entity);
//补充附件信息和个人用户可验信息
vo.setTdsUserAdditional(tdsUserAdditionalService.getTdsUserAdditionalByUserGuid(guid));
vo.setTdsUserVerifiable(tdsUserVerifiableService.getTdsUserVerifiableByUserGuid(guid));
return vo;
}
/**
* 个人用户身份信息数据新增
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void saveTdsUserIdentity(TdsUserIdentityRQVO rqVO) {
beforeSave(rqVO);
MfTdsUserIdentity entity = convertToEntity(rqVO);
rqVO.setGuid(entity.getGuid());
mfTdsUserIdentityService.csbrAddEntity(entity);
boolean flag = mfTdsUserIdentityService.save(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, messageSourceUtil.addMessage(FUNCTION_NAME));
}
afterSave(rqVO);
}
/**
* 个人用户身份信息数据修改
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void updateTdsUserIdentity(TdsUserIdentityRQVO rqVO) {
// 将修改前数据查出来缓存下来,传入到修改后方法中,用于一些特殊逻辑处理,如某个值变化才进行
// MfTdsUserIdentity oldEntity = mfTdsUserIdentityService.getById(rqVO.getGuid());
MfTdsUserIdentity oldEntity = null;
beforeUpdate(rqVO);
MfTdsUserIdentity entity = convertToEntity(rqVO);
mfTdsUserIdentityService.csbrUpdateEntity(entity);
boolean flag = mfTdsUserIdentityService.updateById(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, messageSourceUtil.updateMessage(FUNCTION_NAME));
}
afterUpdate(rqVO, oldEntity);
}
/**
* 个人用户身份信息数据删除
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void removeByGuids(List<String> guids) {
if (CollectionUtils.isEmpty(guids)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
String.format("删除%s数据", FUNCTION_NAME), "数据唯一标识"));
}
if (!mfTdsUserIdentityService.isExistsData(guids, MfTdsUserIdentity.class)) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToDelMessage(FUNCTION_NAME));
}
boolean flag = mfTdsUserIdentityService.removeByIds(guids);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.delMessage(FUNCTION_NAME));
}
//删除附件信息和验证信息
tdsUserVerifiableService.removeByUserGuids(guids);
tdsUserAdditionalService.removeByUserGuids(guids);
}
/**
* 个人用户身份信息数据删除、并有相关的处理操作
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void removeHandleByGuids(List<String> guids) {
if (CollectionUtils.isEmpty(guids)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
String.format("删除%s数据", FUNCTION_NAME), "数据唯一标识"));
}
for (String guid : guids) {
MfTdsUserIdentity entity = mfTdsUserIdentityService.getById(guid);
beforeRemove(entity);
boolean flag = mfTdsUserIdentityService.removeById(guid);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.delMessage(FUNCTION_NAME));
}
afterRemove(entity);
}
}
@Override
public void updateTdsUserIdentityStatus(String bizGuid,
Integer identityStatus, String message) {
}
/**
* 个人用户身份信息新新增前置处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return void
*/
private void beforeSave(TdsUserIdentityRQVO rqVO) {
//region 1.输入基础验证
if(ObjectUtils.isEmpty(rqVO)){
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, String.format("%s参数为空。",FUNCTION_NAME));
}
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
//验证手机号唯一性和证件唯一性
verifyUniqueness(rqVO);
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 验证手机号唯一性和证件唯一性
* @param rqVO
*/
private void verifyUniqueness(TdsUserIdentityRQVO rqVO) {
if(ObjectUtils.isEmpty(rqVO.getIdNumber())){
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR,"证件号码为空。");
}
if(ObjectUtils.isEmpty(rqVO.getMobile())){
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR,"手机号为空。");
}
LambdaQueryWrapper<MfTdsUserIdentity> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(MfTdsUserIdentity::getIdNumber,rqVO.getIdNumber())
.or(wrap->wrap.eq(MfTdsUserIdentity::getMobile,rqVO.getMobile()));
if(StringUtils.isNotBlank(rqVO.getGuid())){
queryWrapper.ne(MfTdsUserIdentity::getGuid,rqVO.getGuid());
}
List<MfTdsUserIdentity> list = mfTdsUserIdentityService.list(queryWrapper);
if(ObjectUtils.isNotEmpty(list)){
for (MfTdsUserIdentity mfTdsUserIdentity : list) {
if(rqVO.getIdNumber().equals(mfTdsUserIdentity.getIdNumber())){
throw new CsbrSystemException(SystemError.DATA_ALREADY_EXISTS,"证件号码重复。");
}
if(rqVO.getMobile().equals(mfTdsUserIdentity.getMobile())){
throw new CsbrSystemException(SystemError.DATA_ALREADY_EXISTS,"手机号重复。");
}
}
}
}
/**
* 个人用户身份信息新增后置处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return void
*/
private void afterSave(TdsUserIdentityRQVO rqVO) {
//region 1.输出特殊转换
//region 1.1.输出过滤与补充处理
//设置userGuid
if(ObjectUtils.isNotEmpty(rqVO.getTdsUserAdditional())){
rqVO.getTdsUserAdditional().setUserGuid(rqVO.getGuid());
//保存个人用户附加信息
tdsUserAdditionalService.saveTdsUserAdditional(rqVO.getTdsUserAdditional());
}
if(ObjectUtils.isNotEmpty(rqVO.getTdsUserVerifiable())){
rqVO.getTdsUserVerifiable().setUserGuid(rqVO.getGuid());
//保存个人用户可验信息
tdsUserVerifiableService.saveTdsUserVerifiable(rqVO.getTdsUserVerifiable());
}
//endregion 1.1.输出过滤与补充处理
//endregion 1.输出特殊转换
}
/**
* 个人用户身份信息修改前置校验、处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return void
*/
private void beforeUpdate(TdsUserIdentityRQVO rqVO) {
//region 1.输入基础验证
if (StringUtils.isBlank(rqVO.getGuid())) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010", String.format("修改%s数据",FUNCTION_NAME), "数据唯一标识"));
}
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
if (!mfTdsUserIdentityService.isExistsData(Collections.singletonList(rqVO.getGuid()), MfTdsUserIdentity.class)) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToUpdateMessage(FUNCTION_NAME));
}
verifyUniqueness(rqVO);
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 个人用户身份信息修改后置处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @param entity
* @return void
*/
protected void afterUpdate(TdsUserIdentityRQVO rqVO, MfTdsUserIdentity entity) {
//region 1.输出特殊转换
//region 1.1.输出过滤与补充处理
if(ObjectUtils.isNotEmpty(rqVO.getTdsUserAdditional())){
rqVO.getTdsUserAdditional().setUserGuid(rqVO.getGuid());
//保存个人用户附加信息
tdsUserAdditionalService.updateTdsUserAdditional(rqVO.getTdsUserAdditional());
}
if(ObjectUtils.isNotEmpty(rqVO.getTdsUserVerifiable())){
rqVO.getTdsUserVerifiable().setUserGuid(rqVO.getGuid());
//保存个人用户可验信息
tdsUserVerifiableService.updateTdsUserVerifiable(rqVO.getTdsUserVerifiable());
}
//endregion 1.1.输出过滤与补充处理
//endregion 1.输出特殊转换
}
/**
* 个人用户身份信息删除前置处理
* @author xup
* @date 2025-08-14 13:21
* @param entity
* @return void
*/
private void beforeRemove(MfTdsUserIdentity entity) {
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToDelMessage(FUNCTION_NAME));
}
}
/**
* 个人用户身份信息删除后置处理
* @author xup
* @date 2025-08-14 13:21
* @param entity
* @return void
*/
private void afterRemove(MfTdsUserIdentity entity) {
}
/**
* 个人用户身份信息查询方法前置验证、处理
* @author xup
* @date 2025-08-14 13:21
* @param rqQueryVO
* @return void
*/
private void beforeQuery(TdsUserIdentityQueryVO rqQueryVO) {
}
/**
* 个人用户身份信息查询方法后置数据转换、处理
* @author xup
* @date 2025-08-14 13:21
* @param pageList 数据库查询数据
* @param rsPageList 返回的最终数据
* @return void
*/
private void afterQuery(PageListVO<MfTdsUserIdentity> pageList, PageListVO<TdsUserIdentityRSVO> rsPageList) {
if (CollectionUtils.isNotEmpty(pageList.getRecords())) {
rsPageList.setRecords(convertToVO(pageList.getRecords()));
}
// 需要特殊处理数据时使用
/*if(CollectionUtils.isNotEmpty(pageList.getRecords())){
List<TdsUserIdentityRSVO> results = new ArrayList<>();
for (MfTdsUserIdentity item : pageList.getRecords()){
TdsUserIdentityRSVO vo = convertToVO(item);
results.add(vo);
}
rsPageList.setRecords(results);
}*/
}
//region 辅助操作
/**
* 个人用户身份信息实体数据转换为视图对象数据(多个)
* @author xup
* @date 2025-08-14 13:21
* @param entityList 实体数据列表
* @return java.util.List<com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRSVO> 视图对象列表
*/
private List<TdsUserIdentityRSVO> convertToVO(List<MfTdsUserIdentity> entityList) {
if (CollectionUtils.isEmpty(entityList)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
"实体数据转换为视图对象实体数据", "实体数据"));
}
List<TdsUserIdentityRSVO> voList = new ArrayList<>(entityList.size());
for (MfTdsUserIdentity item : entityList) {
TdsUserIdentityRSVO vo = convertToVO(item);
voList.add(vo);
}
return voList;
}
/**
* 个人用户身份信息实体数据转换为视图对象数据
* @author xup
* @date 2025-08-14 13:21
* @param entity
* @return com.csbr.qingcloud.portal.domain.vo.TdsUserIdentityRSVO
*/
private TdsUserIdentityRSVO convertToVO(MfTdsUserIdentity entity) {
TdsUserIdentityRSVO vo = csbrBeanUtil.convert(entity, TdsUserIdentityRSVO.class);
return vo;
}
/**
* 个人用户身份信息新增、修改和其他情况的参数转换为实体
* @author xup
* @date 2025-08-14 13:21
* @param vo
* @return com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserIdentity
*/
private MfTdsUserIdentity convertToEntity(TdsUserIdentityRQVO vo) {
MfTdsUserIdentity entity = csbrBeanUtil.convert(vo, MfTdsUserIdentity.class);
// 新增时数据默认guid赋值,转换后该guid可能别使用
if (StringUtils.isBlank(vo.getGuid())) {
entity.setGuid(CommonUtil.newGuid());
}
return entity;
}
@Override
public void onTaskComplete(TdsUserIdentityRQVO rqVO) {
}
//endregion
}
package com.csbr.qingcloud.portal.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.csbr.cloud.common.enums.SystemError;
import com.csbr.cloud.common.exception.CsbrSystemException;
import com.csbr.cloud.common.util.CommonUtil;
import com.csbr.cloud.common.util.CsbrBeanUtil;
import com.csbr.cloud.common.util.MessageSourceUtil;
import csbr.cloud.entity.domain.base.vo.PageListVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableQueryVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableRQVO;
import com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableRSVO;
import com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserVerifiable;
import com.csbr.qingcloud.portal.mybatis.service.MfTdsUserVerifiableService;
import com.csbr.qingcloud.portal.service.TdsUserVerifiableService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @program:
* @description: 个人用户可验信息业务逻辑实现
* @author: xup
* @create: 2025-08-14 13:21
**/
@Slf4j
@Service
public class TdsUserVerifiableServiceImpl implements TdsUserVerifiableService {
/**
* 功能名称
*/
private static final String FUNCTION_NAME = "个人用户可验信息";
@Resource
private MfTdsUserVerifiableService mfTdsUserVerifiableService;
@Resource
private CsbrBeanUtil csbrBeanUtil;
@Resource
private MessageSourceUtil messageSourceUtil;
/**
* 个人用户可验信息分页查询
* @author xup
* @date 2025-08-14 13:21
* @param queryVO
* @return com.csbr.cloud.mybatis.entity.PageListVO<com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableRSVO>
*/
@Override
public PageListVO<TdsUserVerifiableRSVO> pageList(TdsUserVerifiableQueryVO queryVO) {
beforeQuery(queryVO);
LambdaQueryWrapper<MfTdsUserVerifiable> queryWrapper = mfTdsUserVerifiableService.csbrQueryWrapper(queryVO, MfTdsUserVerifiable.class);
queryWrapper.orderByDesc(MfTdsUserVerifiable::getCreateTime);
PageListVO<MfTdsUserVerifiable> pageList = mfTdsUserVerifiableService.csbrPageList(queryVO, queryWrapper);
PageListVO<TdsUserVerifiableRSVO> rsPageList = csbrBeanUtil.convert(pageList, PageListVO.class);
afterQuery(pageList, rsPageList);
return rsPageList;
}
/**
* 个人用户可验信息获取详情数据
* @author xup
* @date 2025-08-14 13:21
* @param guid
* @return com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableRSVO
*/
@Override
public TdsUserVerifiableRSVO getTdsUserVerifiableDetail(String guid) {
if (StringUtils.isBlank(guid)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010",
String.format("获取%s详情数据", FUNCTION_NAME), "数据唯一标识"));
}
MfTdsUserVerifiable entity = mfTdsUserVerifiableService.getById(guid);
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_NOT_EXISTS, messageSourceUtil.notExistsToSelectMessage(String.format("获取%s详情数据", FUNCTION_NAME)));
}
return convertToVO(entity);
}
/**
* 个人用户可验信息数据新增
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void saveTdsUserVerifiable(TdsUserVerifiableRQVO rqVO) {
beforeSave(rqVO);
MfTdsUserVerifiable entity = convertToEntity(rqVO);
rqVO.setGuid(entity.getGuid());
mfTdsUserVerifiableService.csbrAddEntity(entity);
boolean flag = mfTdsUserVerifiableService.save(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_ADD_ERROR, messageSourceUtil.addMessage(FUNCTION_NAME));
}
afterSave(rqVO);
}
/**
* 个人用户可验信息数据修改
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return boolean
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void updateTdsUserVerifiable(TdsUserVerifiableRQVO rqVO) {
// 将修改前数据查出来缓存下来,传入到修改后方法中,用于一些特殊逻辑处理,如某个值变化才进行
// MfTdsUserVerifiable oldEntity = mfTdsUserVerifiableService.getById(rqVO.getGuid());
MfTdsUserVerifiable oldEntity = null;
beforeUpdate(rqVO);
MfTdsUserVerifiable entity = convertToEntity(rqVO);
mfTdsUserVerifiableService.csbrUpdateEntity(entity);
boolean flag = mfTdsUserVerifiableService.updateById(entity);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_UPDATE_ERROR, messageSourceUtil.updateMessage(FUNCTION_NAME));
}
afterUpdate(rqVO, oldEntity);
}
/**
* 个人用户可验信息数据删除
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void removeByGuids(List<String> guids) {
if (CollectionUtils.isEmpty(guids)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
String.format("删除%s数据", FUNCTION_NAME), "数据唯一标识"));
}
if (!mfTdsUserVerifiableService.isExistsData(guids, MfTdsUserVerifiable.class)) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToDelMessage(FUNCTION_NAME));
}
boolean flag = mfTdsUserVerifiableService.removeByIds(guids);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.delMessage(FUNCTION_NAME));
}
}
/**
* 个人用户可验信息数据删除、并有相关的处理操作
* @author xup
* @date 2025-08-14 13:21
* @param guids
* @return void
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void removeHandleByGuids(List<String> guids) {
if (CollectionUtils.isEmpty(guids)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
String.format("删除%s数据", FUNCTION_NAME), "数据唯一标识"));
}
for (String guid : guids) {
MfTdsUserVerifiable entity = mfTdsUserVerifiableService.getById(guid);
beforeRemove(entity);
boolean flag = mfTdsUserVerifiableService.removeById(guid);
if (!flag) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.delMessage(FUNCTION_NAME));
}
afterRemove(entity);
}
}
@Override
public void removeByUserGuids(List<String> userGuids) {
if (CollectionUtils.isEmpty(userGuids)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
String.format("删除%s数据", FUNCTION_NAME), "用户Guids"));
}
LambdaUpdateWrapper<MfTdsUserVerifiable> updateWrapper = Wrappers.lambdaUpdate();
updateWrapper.in(MfTdsUserVerifiable::getUserGuid,userGuids);
mfTdsUserVerifiableService.remove(updateWrapper);
}
@Override
public TdsUserVerifiableRSVO getTdsUserVerifiableByUserGuid(String userGuid) {
if (StringUtils.isBlank(userGuid)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010",
String.format("获取%s详情数据", FUNCTION_NAME), "用户Guid"));
}
LambdaQueryWrapper<MfTdsUserVerifiable> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(MfTdsUserVerifiable::getUserGuid,userGuid);
List<MfTdsUserVerifiable> list = mfTdsUserVerifiableService.list(queryWrapper);
if(ObjectUtils.isEmpty(list)){
return null;
}
return convertToVO(list.get(0));
}
/**
* 个人用户可验信息新新增前置处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return void
*/
private void beforeSave(TdsUserVerifiableRQVO rqVO) {
//region 1.输入基础验证
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 个人用户可验信息新增后置处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return void
*/
private void afterSave(TdsUserVerifiableRQVO rqVO) {
//region 1.输出特殊转换
//region 1.1.输出过滤与补充处理
//endregion 1.1.输出过滤与补充处理
//endregion 1.输出特殊转换
}
/**
* 个人用户可验信息修改前置校验、处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @return void
*/
private void beforeUpdate(TdsUserVerifiableRQVO rqVO) {
//region 1.输入基础验证
if (StringUtils.isBlank(rqVO.getGuid())) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00010", String.format("修改%s数据",FUNCTION_NAME), "数据唯一标识"));
}
//endregion
//region 2.数据验证特殊处理
//region 2.1.业务合规性验证
//endregion 2.1.业务合规性验证
//region 2.2.业务数据验证
if (!mfTdsUserVerifiableService.isExistsData(Collections.singletonList(rqVO.getGuid()), MfTdsUserVerifiable.class)) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToUpdateMessage(FUNCTION_NAME));
}
//endregion 2.2.业务数据验证
//endregion 2.数据验证特殊处理
//region 3.数据转换处理
//region 3.1.数据过程转换
//endregion 3.1.数据过程转换
//endregion 3.数据转换处理
//region 4.数据过滤与补充处理
//endregion 4.数据过滤与补充处理
//region 5.过程处理
//region 5.1.计算逻辑处理
//endregion 5.1.计算逻辑处理
//region 5.2.业务逻辑处理
//endregion 5.2.业务逻辑处理
//endregion 5.过程处理
}
/**
* 个人用户可验信息修改后置处理
* @author xup
* @date 2025-08-14 13:21
* @param rqVO
* @param entity
* @return void
*/
protected void afterUpdate(TdsUserVerifiableRQVO rqVO, MfTdsUserVerifiable entity) {
//region 1.输出特殊转换
//region 1.1.输出过滤与补充处理
//endregion 1.1.输出过滤与补充处理
//endregion 1.输出特殊转换
}
/**
* 个人用户可验信息删除前置处理
* @author xup
* @date 2025-08-14 13:21
* @param entity
* @return void
*/
private void beforeRemove(MfTdsUserVerifiable entity) {
if (entity == null) {
throw new CsbrSystemException(SystemError.DATA_DEL_ERROR, messageSourceUtil.notExistsToDelMessage(FUNCTION_NAME));
}
}
/**
* 个人用户可验信息删除后置处理
* @author xup
* @date 2025-08-14 13:21
* @param entity
* @return void
*/
private void afterRemove(MfTdsUserVerifiable entity) {
}
/**
* 个人用户可验信息查询方法前置验证、处理
* @author xup
* @date 2025-08-14 13:21
* @param rqQueryVO
* @return void
*/
private void beforeQuery(TdsUserVerifiableQueryVO rqQueryVO) {
}
/**
* 个人用户可验信息查询方法后置数据转换、处理
* @author xup
* @date 2025-08-14 13:21
* @param pageList 数据库查询数据
* @param rsPageList 返回的最终数据
* @return void
*/
private void afterQuery(PageListVO<MfTdsUserVerifiable> pageList, PageListVO<TdsUserVerifiableRSVO> rsPageList) {
if (CollectionUtils.isNotEmpty(pageList.getRecords())) {
rsPageList.setRecords(convertToVO(pageList.getRecords()));
}
// 需要特殊处理数据时使用
/*if(CollectionUtils.isNotEmpty(pageList.getRecords())){
List<TdsUserVerifiableRSVO> results = new ArrayList<>();
for (MfTdsUserVerifiable item : pageList.getRecords()){
TdsUserVerifiableRSVO vo = convertToVO(item);
results.add(vo);
}
rsPageList.setRecords(results);
}*/
}
//region 辅助操作
/**
* 个人用户可验信息实体数据转换为视图对象数据(多个)
* @author xup
* @date 2025-08-14 13:21
* @param entityList 实体数据列表
* @return java.util.List<com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableRSVO> 视图对象列表
*/
private List<TdsUserVerifiableRSVO> convertToVO(List<MfTdsUserVerifiable> entityList) {
if (CollectionUtils.isEmpty(entityList)) {
// W00012 = {0}:参数[{1}]不能为空!
throw new CsbrSystemException(SystemError.DATA_INPUT_ERROR, messageSourceUtil.getMessage("W00012",
"实体数据转换为视图对象实体数据", "实体数据"));
}
List<TdsUserVerifiableRSVO> voList = new ArrayList<>(entityList.size());
for (MfTdsUserVerifiable item : entityList) {
TdsUserVerifiableRSVO vo = convertToVO(item);
voList.add(vo);
}
return voList;
}
/**
* 个人用户可验信息实体数据转换为视图对象数据
* @author xup
* @date 2025-08-14 13:21
* @param entity
* @return com.csbr.qingcloud.portal.domain.vo.TdsUserVerifiableRSVO
*/
private TdsUserVerifiableRSVO convertToVO(MfTdsUserVerifiable entity) {
TdsUserVerifiableRSVO vo = csbrBeanUtil.convert(entity, TdsUserVerifiableRSVO.class);
return vo;
}
/**
* 个人用户可验信息新增、修改和其他情况的参数转换为实体
* @author xup
* @date 2025-08-14 13:21
* @param vo
* @return com.csbr.qingcloud.portal.mybatis.entity.MfTdsUserVerifiable
*/
private MfTdsUserVerifiable convertToEntity(TdsUserVerifiableRQVO vo) {
MfTdsUserVerifiable entity = csbrBeanUtil.convert(vo, MfTdsUserVerifiable.class);
// 新增时数据默认guid赋值,转换后该guid可能别使用
if (StringUtils.isBlank(vo.getGuid())) {
entity.setGuid(CommonUtil.newGuid());
}
return entity;
}
//endregion
}
......@@ -4,6 +4,8 @@ import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* @program: daop-projects
* @description:
......@@ -25,4 +27,9 @@ public class ZQConfig {
private Boolean isMain = false;
/**
* 可信空间区域节点数据同步URL地址
*/
private String tdsRegionalNodeUrl;
}
\ No newline at end of file
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!