package com.ydtech.modules.admin.controller; import cn.dev33.satoken.annotation.SaIgnore; import com.ydtech.core.page.HttpResult; import com.ydtech.exception.SystemException; import com.ydtech.modules.admin.components.UnionPayRequestApiComponent; import com.ydtech.modules.admin.components.request.UnionPayRequest; import com.ydtech.modules.admin.components.response.UnionPayResponse; import com.ydtech.modules.admin.constants.UserAgentStatus; import com.ydtech.modules.admin.model.SysDept; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.admin.model.SysUserRole; import com.ydtech.modules.admin.model.dto.AgentAuthDto; import com.ydtech.modules.admin.model.dto.AgentAuthResultDto; import com.ydtech.modules.admin.model.dto.AgentSubmitDto; import com.ydtech.modules.admin.model.dto.AgentUserNewDto; import com.ydtech.modules.admin.service.SysDeptService; import com.ydtech.modules.admin.service.SysUserRoleService; import com.ydtech.modules.admin.service.SysUserService; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.protocol.utils.AssertionUtils; import com.ydtech.utils.StringUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Objects; import static com.ydtech.constants.RedisConstant.PHONE_VERIFICATION_CODE_KEY; @RestController @Api(tags = "个代用户控制器") @RequestMapping("userAgent") @RequiredArgsConstructor @Slf4j public class SysUserAgentController extends BaseController { private final SysUserService sysUserService; private final SysDeptService sysDeptService; private final StringRedisTemplate redisTemplate; private final SysUserRoleService sysUserRoleService; @ApiOperation(value = "个代注册") @PostMapping(value = "/agentRegist") @SaIgnore public HttpResult agentRegist(@RequestBody @Validated AgentUserNewDto dto) { List list = sysUserService.lambdaQuery().eq(SysUser::getMobile, dto.getMobile()).list(); AssertionUtils.isFail(!list.isEmpty(), "手机号已经被注册请重新跟换手机号。如有疑问请联系管理人员。"); String captchaRedis = redisTemplate.opsForValue().get(PHONE_VERIFICATION_CODE_KEY + dto.getMobile()); redisTemplate.delete(PHONE_VERIFICATION_CODE_KEY + dto.getMobile()); AssertionUtils.isFail(StringUtils.isBlank(captchaRedis), "验证码已失效!"); AssertionUtils.isFail(!dto.getMobileMsg().equals(captchaRedis), "验证码错误!"); String recommenderid = dto.getReferrerId(); SysUser recommender = sysUserService.getById(recommenderid); AssertionUtils.isFail(Objects.isNull(recommender), "推荐人信息不存在!"); AssertionUtils.isFail(!"2".equals(dto.getFlag()), "只有个代来源允许注册!"); //只有团队长和代理人才能邀请 SysUserRole recommenderRole = sysUserRoleService.selectByUserId(recommenderid); if (!recommenderRole.getRoleId().equals(20L) && !recommenderRole.getRoleId().equals(21L)) { return HttpResult.error("只有团队长和代理人才能推荐"); } String userId = sysUserService.agentRegist(dto, recommender); return HttpResult.ok("保存成功", userId); } @ApiOperation(value = "个代(认证/审核)结果获取") @PostMapping(value = "/getAuthResult") public HttpResult getAuthResult(@RequestBody @Validated AgentAuthResultDto dto) { SysUser sysUser = sysUserService.getByUserId(dto.getUserId()); AssertionUtils.isFail(Objects.isNull(sysUser), "用户信息不存在!"); AssertionUtils.isFail(!"2".equals(sysUser.getManagementSource()), "只有个代来源需要认证!"); return HttpResult.ok(sysUserService.getAuthResult(sysUser,dto)); } @ApiOperation(value = "个代认证") @PostMapping(value = "/agentAuth") public HttpResult agentAuth(@RequestBody @Validated AgentAuthDto dto) { SysUser sysUser = sysUserService.getByUserId(dto.getUserId()); SysUser mobileUser = sysUserService.findByPhone(dto.getMobile()); AssertionUtils.isFail(!sysUser.getMobile().equals(dto.getMobile()) && Objects.isNull(mobileUser), "用户手机号未注册!"); AssertionUtils.isFail(!"2".equals(sysUser.getManagementSource()), "只有个代来源需要认证!"); List list = sysUserService.lambdaQuery().eq(SysUser::getIdentity, dto.getIdentity()).list(); AssertionUtils.isFail(!list.isEmpty(), "身份证已经被认证。如有疑问请联系管理人员。"); return HttpResult.ok(sysUserService.agentAuth(sysUser,dto)); } @ApiOperation(value = "个代资料提交") @PostMapping(value = "/agentSubmit") public HttpResult agentSubmit(@RequestBody @Validated AgentSubmitDto dto) { SysUser sysUser = sysUserService.getByUserId(dto.getUserId()); AssertionUtils.isFail(Objects.isNull(sysUser), "用户不存在!"); AssertionUtils.isFail(!"2".equals(sysUser.getManagementSource()), "只有个代来源需要资料提交!"); SysUser user = sysUserService.getById(sysUser.getId()); AssertionUtils.isFail("0".equals(sysUser.getFactorVerify()) || "2".equals(sysUser.getFactorVerify()) , "未实名认证的用户不允许提交资料"); sysUserService.agentSubmit(user,dto); return HttpResult.ok("提交成功"); } }