实名认证

This commit is contained in:
2025-02-17 15:45:55 +08:00
parent 8baee4b858
commit 7af47e35b8
18 changed files with 351 additions and 51 deletions

View File

@ -1,13 +1,18 @@
package com.ruoyi.web.controller.wgz.controller;
import com.ruoyi.common.bo.AnnexQueryBo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.wgz.bo.req.WgzAppPersonalBasicInformationReq;
import com.ruoyi.wgz.bo.req.WgzAppUserLongInReq;
import com.ruoyi.wgz.bo.req.WgzAppUserRegisterReq;
import com.ruoyi.wgz.bo.req.WgzRealNameAuthenticationReq;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.domain.Annex;
import com.ruoyi.common.service.IAnnexService;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysDictTypeService;
import com.ruoyi.wgz.bo.WgzAutonymAnnex;
import com.ruoyi.wgz.bo.WgzUserQueryBo;
import com.ruoyi.wgz.bo.req.*;
import com.ruoyi.wgz.bo.res.WgzAppAttachmentAcquisitionRes;
import com.ruoyi.wgz.bo.res.WgzAppPersonalBasicInformationRes;
import com.ruoyi.wgz.bo.res.WgzAppUserLongInRes;
import com.ruoyi.wgz.service.IWgzUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -17,6 +22,10 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import java.util.ArrayList;
import java.util.List;
/**
* APP务工者Controller
*
@ -32,6 +41,12 @@ public class WgzAppController {
private final IWgzUserService iWgzUserService;
@Autowired
private ISysDictTypeService dictTypeService;
@Autowired
private IAnnexService iAnnexService;
/**
* 【注册】务工者注册
@ -39,20 +54,79 @@ public class WgzAppController {
@ApiOperation("APP务工者注册")
@PreAuthorize("@ss.hasPermi('wgzApp:user:register')")
@PostMapping("/wgzRegister")
public AjaxResult userRegister(@Validated @RequestBody WgzAppUserRegisterReq bo) {
public AjaxResult<Boolean> userRegister(@Validated @RequestBody WgzAppUserRegisterReq bo) {
return AjaxResult.success(iWgzUserService.userRegister(bo));
}
/**
* 【我的】【个人基本信息】查询基础用户信息(还未带附件信息)
*/
@ApiOperation("APP务工者-修改用户头像")
@PreAuthorize("@ss.hasPermi('wgzApp:user:userModifyingUserProfilePicture')")
@PutMapping("/wgzUserModifyingUserProfilePicture")
public AjaxResult<Boolean> userModifyingUserProfilePicture(@Validated @RequestBody WgzAppModifyingUserProfilePictureReq req) {
return AjaxResult.success(iWgzUserService.userModifyingUserProfilePicture(req));
}
/**
* 【我的】【个人基本信息】查询基础用户信息(还未带附件信息)
*/
@ApiOperation("APP务工者-个人基本信息")
@PreAuthorize("@ss.hasPermi('wgzApp:user:userPersonalBasicInformation')")
@GetMapping("/wgzPersonalBasicInformation")
@GetMapping("/wgzUserPersonalBasicInformation")
public AjaxResult<WgzAppPersonalBasicInformationRes> userPersonalBasicInformation(@Validated WgzAppPersonalBasicInformationReq req) {
return AjaxResult.success(iWgzUserService.userPersonalBasicInformation(req));
}
/**
* 【我的】【实名认证】实名认证之务工者附件结构获取
*/
@ApiOperation("APP务工者-实名认证·附件获取")
@PreAuthorize("@ss.hasPermi('wgzApp:user:userAttachmentAcquisition')")
@GetMapping("/wgzUserAttachmentAcquisition")
public AjaxResult<WgzAppAttachmentAcquisitionRes> userAttachmentAcquisition(@Validated WgzAppAttachmentAcquisitionReq req) {
//返回对象
WgzAppAttachmentAcquisitionRes wgzAppAttachmentAcquisitionRes = new WgzAppAttachmentAcquisitionRes();
List<WgzAutonymAnnex> resData = new ArrayList<>();
//附件类型
String userType = "wgz_attachment";
//具体附件值
String[] SpecifiedAttachment = {"0"};
//1、获取指定实名认证的附件结构返回
List<SysDictData> data = dictTypeService.selectDictDataByType(userType);
data.forEach(item -> {
for (String val : SpecifiedAttachment) {
String dictValue = item.getDictValue();
if (dictValue.equals(val)) {
//2、每个结构下有那些附件附件可能有多个或一个查询附件表
AnnexQueryBo annexQueryBo = new AnnexQueryBo();
annexQueryBo.setUserId(req.getUserId());
annexQueryBo.setUserType(userType);
annexQueryBo.setAnnexType(val);
List<Annex> annexes = iAnnexService.queryList(annexQueryBo);
//3、具体附件结构
WgzAutonymAnnex wgzAutonymAnnex = new WgzAutonymAnnex().
setUserType(userType).
setDictLabel(item.getDictLabel()).
setDictValue(dictValue).setAnnex(annexes);
resData.add(wgzAutonymAnnex);
}
}
});
return AjaxResult.success(wgzAppAttachmentAcquisitionRes.setWgzAutonymAnnex(resData));
}
// /**
// * 【我的】【实名认证】实名认证·删除附件
// */
// @ApiOperation("APP务工者-实名认证·删除附件")
// @PreAuthorize("@ss.hasPermi('wgzApp:user:userDeleteAttachment')")
// @DeleteMapping("/WgzUserDeleteAttachment/{attachmentId}")
// public AjaxResult<Boolean> userDeleteAttachment(@NotEmpty(message = "主键不能为空") @PathVariable Long attachmentId) {
// return AjaxResult.success(iAnnexService.deleteByIds(attachmentId));
// }
/**
* 【我的】【实名认证】实名认证
*/

View File

@ -42,6 +42,9 @@ public class AnnexQueryBo extends BaseEntity {
/** 唯一标识 */
@ApiModelProperty("唯一标识")
private Long userId;
/** 用户类型 */
@ApiModelProperty("用户类型")
private String userType;
/** 附件类型 */
@ApiModelProperty("附件类型")
private String annexType;

View File

@ -21,6 +21,9 @@ public class AnnexDTO {
/** 唯一标识 */
@ApiModelProperty("唯一标识")
private Long userId;
/** 用户类型 */
@ApiModelProperty("用户类型")
private String userType;
/** 附件类型 */
@ApiModelProperty("附件类型")
private String annexType;

View File

@ -69,4 +69,9 @@ public interface IAnnexService extends IServicePlus<Annex> {
*/
void insertBatch(List<AnnexDTO> annexList);
/**
* 根据表自增ID来删除指定附件数据并删除对应的资源
*/
Boolean deleteByIds(Long id);
}

View File

@ -4,9 +4,11 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.domain.dto.AnnexDTO;
import com.ruoyi.common.tool.FileDeletionService;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.core.page.PagePlus;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -15,7 +17,9 @@ import com.ruoyi.common.bo.AnnexQueryBo;
import com.ruoyi.common.domain.Annex;
import com.ruoyi.common.mapper.AnnexMapper;
import com.ruoyi.common.service.IAnnexService;
import org.springframework.transaction.annotation.Transactional;
import javax.tools.Tool;
import java.util.List;
import java.util.Map;
import java.util.Collection;
@ -30,6 +34,9 @@ import java.util.stream.Collectors;
@Service
public class AnnexServiceImpl extends ServicePlusImpl<AnnexMapper, Annex> implements IAnnexService {
@Autowired
private FileDeletionService fileDeletionService;
@Override
public Annex queryById(String id){
return getById(id);
@ -103,4 +110,21 @@ public class AnnexServiceImpl extends ServicePlusImpl<AnnexMapper, Annex> implem
.collect(Collectors.toList());
baseMapper.insertAll(annexes);
}
@Override
@Transactional
public Boolean deleteByIds(Long id) {
//1、查询数据
Annex annex = baseMapper.selectById(id);
//2、删除对应的数据并删除相对应的资源
if (baseMapper.deleteById(id)>0){
boolean b = fileDeletionService.deleteFileByPath(annex.getAnnexUrl());
if(!b){
throw new RuntimeException("附件删除失败!");
}
}else{
throw new RuntimeException("数据删除失败!");
}
return true;
}
}

View File

@ -0,0 +1,32 @@
package com.ruoyi.common.tool;
import org.springframework.stereotype.Service;
import java.io.File;
@Service
public class FileDeletionService {
/**
* 根据文件路径删除文件
* @param filePath 文件的完整路径
* @return 如果文件删除成功返回 true否则返回 false
*/
public boolean deleteFileByPath(String filePath) {
if (filePath == null || filePath.isEmpty()) {
return false;
}
File file = new File(filePath);
// 检查文件是否存在并且是一个普通文件
if (file.exists() && file.isFile()) {
try {
// 执行删除操作
return file.delete();
} catch (SecurityException e) {
// 处理没有权限删除文件的异常
System.err.println("没有权限删除文件: " + filePath);
return false;
}
}
return false;
}
}

View File

@ -0,0 +1,34 @@
package com.ruoyi.wgz.bo;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.domain.Annex;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class WgzAutonymAnnex extends BaseEntity {
@ApiModelProperty("用户类型")
@NotBlank(message = "字典标签不能为空")
private String userType;
@ApiModelProperty("字典标签")
@NotBlank(message = "字典标签不能为空")
private String dictLabel;
@ApiModelProperty("字典键值")
@NotBlank(message = "字典标签不能为空")
private String dictValue;
@ApiModelProperty("附件实体数据")
private List<Annex> annex;
}

View File

@ -0,0 +1,22 @@
package com.ruoyi.wgz.bo.req;
import com.ruoyi.wgz.bo.WgzAutonymAnnex;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("务工者APP-实名认证·附件结构请求对象")
public class WgzAppAttachmentAcquisitionReq implements Serializable {
@ApiModelProperty("唯一标识")
@NotNull(message = "唯一标识不能为空")
private Long userId;
}

View File

@ -0,0 +1,26 @@
package com.ruoyi.wgz.bo.req;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("务工者APP-修改头像请求对象")
public class WgzAppModifyingUserProfilePictureReq implements Serializable {
@ApiModelProperty("唯一标识")
@NotNull(message = "唯一标识不能为空")
private Long userId;
@ApiModelProperty("头像地址")
@NotBlank(message = "头像地址不能为空")
private String avatarName;
}

View File

@ -1,5 +1,6 @@
package com.ruoyi.wgz.bo.req;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -11,6 +12,7 @@ import java.io.Serializable;
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("务工者APP-查询个人基本信息对象")
public class WgzAppPersonalBasicInformationReq implements Serializable {
@ApiModelProperty("唯一标识")
@NotBlank(message = "唯一标识不能为空")

View File

@ -1,24 +1,28 @@
package com.ruoyi.wgz.bo.req;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.Pattern;
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("务工者APP注册账号对象")
public class WgzAppUserLongInReq extends BaseEntity {
@ApiModelProperty("联系电话")
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码格式不正确")
private String phone;
@ApiModelProperty("密码")
private String password;
@ApiModelProperty("验证码")
private String verificationCode;
}
//package com.ruoyi.wgz.bo.req;
//
//import com.ruoyi.common.core.domain.BaseEntity;
//import io.swagger.annotations.ApiModel;
//import io.swagger.annotations.ApiModelProperty;
//import lombok.Data;
//import lombok.EqualsAndHashCode;
//import lombok.NoArgsConstructor;
//import lombok.experimental.Accessors;
//
//import javax.validation.constraints.Pattern;
//import java.io.Serializable;
//
//@Data
//@NoArgsConstructor
//@Accessors(chain = true)
//@ApiModel("务工者APP登录账号对象")
//public class WgzAppUserLongInReq implements Serializable {
// @ApiModelProperty("联系电话")
// @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码格式不正确")
// private String phone;
//
// @ApiModelProperty("密码")
// private String password;
//
// @ApiModelProperty("验证码")
// private String verificationCode;
//}

View File

@ -5,18 +5,24 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("务工者APP注册账号对象")
public class WgzAppUserRegisterReq extends BaseEntity {
public class WgzAppUserRegisterReq implements Serializable {
@ApiModelProperty("联系电话")
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码格式不正确")
private String phone;
/** 密码 */
@ApiModelProperty("密码")
@NotBlank(message = "密码不能为空")
private String password;
}

View File

@ -1,19 +1,26 @@
package com.ruoyi.wgz.bo.req;
import com.baomidou.mybatisplus.annotation.TableId;
import com.ruoyi.common.domain.Annex;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class WgzRealNameAuthenticationReq {
@ApiModel("务工者APP-实名认证对象")
public class WgzRealNameAuthenticationReq implements Serializable {
@ApiModelProperty("唯一标识")
@NotBlank(message = "唯一标识不能为空")
@NotNull(message = "唯一标识不能为空")
private Long userId;
@ApiModelProperty("身份证正面图路径")
@ -64,6 +71,9 @@ public class WgzRealNameAuthenticationReq {
@NotBlank(message = "银行卡号不能为空")
private String cardNo;
@ApiModelProperty("附件实体数据")
private List<Annex> annex;
// @ApiModelProperty("银行卡图路径")
// private String bankCardPath;

View File

@ -0,0 +1,20 @@
package com.ruoyi.wgz.bo.res;
import com.ruoyi.wgz.bo.WgzAutonymAnnex;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("务工者APP-实名认证·附件结构返回对象")
public class WgzAppAttachmentAcquisitionRes implements Serializable {
@ApiModelProperty("附件结构")
private List<WgzAutonymAnnex> wgzAutonymAnnex;
}

View File

@ -1,9 +1,20 @@
package com.ruoyi.wgz.bo.res;
import com.baomidou.mybatisplus.annotation.TableId;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
public class WgzAppPersonalBasicInformationRes {
import java.io.Serializable;
@Data
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("务工者APP-个人基本信息返回对象")
public class WgzAppPersonalBasicInformationRes implements Serializable {
@ApiModelProperty("主键ID")
@TableId(value = "id")
private String id;

View File

@ -1,4 +0,0 @@
package com.ruoyi.wgz.bo.res;
public class WgzAppUserLongInRes {
}

View File

@ -3,6 +3,7 @@ package com.ruoyi.wgz.service;
import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.wgz.bo.WgzUserQueryBo;
import com.ruoyi.wgz.bo.req.WgzAppModifyingUserProfilePictureReq;
import com.ruoyi.wgz.bo.req.WgzAppPersonalBasicInformationReq;
import com.ruoyi.wgz.bo.req.WgzAppUserRegisterReq;
import com.ruoyi.wgz.bo.req.WgzRealNameAuthenticationReq;
@ -69,29 +70,26 @@ public interface IWgzUserService extends IServicePlus<WgzUser> {
/**
* 务工者APP注册账号
* @param bo APP务工者注册业务对象
* @return bool
*/
Boolean userRegister(WgzAppUserRegisterReq bo);
/**
* 修改用户头像修改用户头像
*/
Boolean userModifyingUserProfilePicture(@Validated @RequestBody WgzAppModifyingUserProfilePictureReq req);
/**
* 务工者APP登录账号
* @param phone APP务工者登录业务对象
* @return bool
*/
WgzUser userLongIn(String phone);
/**
* 务工者APP登录账号
* @param req APP务工者登录业务对象
* @return bool
* 务工者APP个人基本信息
*/
WgzAppPersonalBasicInformationRes userPersonalBasicInformation(WgzAppPersonalBasicInformationReq req);
/**
* 务工者APP实名认证
* @param req APP务工者实名认证业务对象
* @return bool
*/
Boolean userRealNameAuthentication(@Validated @RequestBody WgzRealNameAuthenticationReq req);
}

View File

@ -7,9 +7,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.domain.Annex;
import com.ruoyi.common.domain.dto.AnnexDTO;
import com.ruoyi.common.service.IAnnexService;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.wgz.bo.WgzUserQueryBo;
import com.ruoyi.wgz.bo.req.WgzAppModifyingUserProfilePictureReq;
import com.ruoyi.wgz.bo.req.WgzAppPersonalBasicInformationReq;
import com.ruoyi.wgz.bo.req.WgzAppUserRegisterReq;
import com.ruoyi.wgz.bo.req.WgzRealNameAuthenticationReq;
@ -19,8 +23,11 @@ import com.ruoyi.wgz.domain.WgzUser;
import com.ruoyi.wgz.mapper.WgzUserMapper;
import com.ruoyi.wgz.service.IWgzUserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@ -36,6 +43,9 @@ import java.util.Map;
@Service
public class WgzUserServiceImpl extends ServicePlusImpl<WgzUserMapper, WgzUser> implements IWgzUserService {
@Autowired
private IAnnexService iAnnexService;
@Override
public WgzUser queryById(String id){
return getById(id);
@ -124,6 +134,17 @@ public class WgzUserServiceImpl extends ServicePlusImpl<WgzUserMapper, WgzUser>
return baseMapper.insert(wgzUser) > 0;
}
@Override
public Boolean userModifyingUserProfilePicture(WgzAppModifyingUserProfilePictureReq req) {
WgzUser user = new WgzUser();
BeanUtils.copyProperties(req, user);
int update = baseMapper.update(user, new LambdaQueryWrapper<WgzUser>().eq(WgzUser::getUserId, req.getUserId()));
if (update == 0){
throw new RuntimeException("当前用户不存在!");
}
return true;
}
//登录-获取用户
@Override
public WgzUser userLongIn(String phone) {
@ -146,12 +167,21 @@ public class WgzUserServiceImpl extends ServicePlusImpl<WgzUserMapper, WgzUser>
//实名认证
@Override
@Transactional()
public Boolean userRealNameAuthentication(WgzRealNameAuthenticationReq req) {
//1、对指定用户进行实名认证
WgzUser user = new WgzUser();
BeanUtils.copyProperties(req,user);
BeanUtils.copyProperties(req, user);
int update = baseMapper.update(user, new LambdaQueryWrapper<WgzUser>().eq(WgzUser::getUserId, req.getUserId()));
return update>0;
if (update == 0){
throw new RuntimeException("当前用户不存在!");
}
//2、新增附件
List<Annex> annex = req.getAnnex();
List<AnnexDTO> annexDTOS = new ArrayList<>();
BeanUtils.copyProperties(annex, annexDTOS);
iAnnexService.insertBatch(annexDTOS);
return true;
}
}