Преглед на файлове

个人中心代码的提交

dongxin преди 1 година
родител
ревизия
2195b1c0d4
променени са 20 файла, в които са добавени 660 реда и са изтрити 18 реда
  1. 1 0
      authentication/src/main/java/com/jzg/controller/AuthController.java
  2. 29 0
      commons/src/main/java/com/jzg/commons/entity/dto/InvitationAddParam.java
  3. 25 0
      commons/src/main/java/com/jzg/commons/entity/dto/UserInfoEditParam.java
  4. 20 0
      commons/src/main/java/com/jzg/commons/entity/dto/ValidateCodeParam.java
  5. 41 0
      commons/src/main/java/com/jzg/commons/entity/po/SysRelationPerson.java
  6. 8 3
      commons/src/main/java/com/jzg/commons/entity/po/SysUser.java
  7. 7 1
      commons/src/main/java/com/jzg/commons/entity/po/SysUserJzgApp.java
  8. 25 0
      commons/src/main/java/com/jzg/commons/entity/vo/SystemListVo.java
  9. 52 0
      commons/src/main/java/com/jzg/commons/entity/vo/UserInfoVo.java
  10. 103 2
      tenant/organization/src/main/java/com/jzg/organization/controller/AppUserController.java
  11. 18 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysRelationPersonMapper.java
  12. 23 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserJzgAppMapper.java
  13. 13 0
      tenant/organization/src/main/java/com/jzg/organization/service/SysRelationPersonService.java
  14. 37 2
      tenant/organization/src/main/java/com/jzg/organization/service/SysUserJzgAppService.java
  15. 18 0
      tenant/organization/src/main/java/com/jzg/organization/service/SysUserService.java
  16. 22 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysRelationPersonServiceImpl.java
  17. 135 9
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgAppServiceImpl.java
  18. 39 1
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java
  19. 13 0
      tenant/organization/src/main/resources/mapper/SysRelationPersonMapper.xml
  20. 31 0
      tenant/organization/src/main/resources/mapper/SysUserJzgAppMapper.xml

+ 1 - 0
authentication/src/main/java/com/jzg/controller/AuthController.java

@@ -363,4 +363,5 @@ public class AuthController extends BaseController {
         return HttpResult.ok("success",sm2PublicKeyHex);
     }
 
+
 }

+ 29 - 0
commons/src/main/java/com/jzg/commons/entity/dto/InvitationAddParam.java

@@ -0,0 +1,29 @@
+package com.jzg.commons.entity.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Schema(description = "邀请码注册新增dto")
+@Data
+@NoArgsConstructor
+public class InvitationAddParam {
+
+    @Schema(description = "手机号")
+    @NotBlank(message = "请输入手机号")
+    private String mobile;
+
+    @Schema(description = "密码")
+    @NotBlank(message = "请输入密码")
+    private String password;
+
+    @Schema(description = "短信验证码")
+    @NotBlank(message = "请输入短信验证码")
+    private String smsCode;
+
+    @Schema(description = "邀请人用户id")
+    @NotBlank(message = "邀请人用户id不能为空")
+    private String userId;
+
+}

+ 25 - 0
commons/src/main/java/com/jzg/commons/entity/dto/UserInfoEditParam.java

@@ -0,0 +1,25 @@
+package com.jzg.commons.entity.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+@Schema(description = "个人信息修改dto")
+@Data
+public class UserInfoEditParam {
+
+    @NotNull(message = "用户id不能为空")
+    @Schema(description = "用户id")
+    private String id;
+
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "性别")
+    private Integer sex;
+
+    @Schema(description = "头像")
+    private String headSculpture;
+
+}

+ 20 - 0
commons/src/main/java/com/jzg/commons/entity/dto/ValidateCodeParam.java

@@ -0,0 +1,20 @@
+package com.jzg.commons.entity.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+@Schema(description = "验证dto")
+@Data
+public class ValidateCodeParam {
+
+    @Schema(description = "手机号")
+    @NotBlank(message = "请输入手机号")
+    private String mobile;
+
+    @Schema(description = "密码")
+    private String password;
+
+    @Schema(description = "短信验证码")
+    private String smsCode;
+}

+ 41 - 0
commons/src/main/java/com/jzg/commons/entity/po/SysRelationPerson.java

@@ -0,0 +1,41 @@
+
+package com.jzg.commons.entity.po;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.jzg.commons.core.base.BaseModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 合伙人/推荐人和机构负责人关系表
+ * @TableName sys_relation_person
+ */
+@Schema(description = "合伙人/推荐人和机构负责人关系表")
+@Data
+public class SysRelationPerson extends BaseModel {
+
+
+    @Schema(description = "主键")
+    private Long id;
+
+    @Schema(description = "被推荐人id")
+    private String agencyLeaderId;
+
+    @Schema(description = "推荐人id")
+    private String suggestId;
+
+    @Schema(description = "推荐人等级")
+    private Integer suggestLevel;
+
+    @Schema(description = "推荐等级(0:直接推荐;1:间接推荐)")
+    private Integer source;
+
+    /**
+     * 推荐类型(0:合伙人  1:机构负责人 )
+     */
+    @Schema(description = "推荐类型(0:合伙人  1:机构负责人 )")
+    private Integer type;
+
+}

+ 8 - 3
commons/src/main/java/com/jzg/commons/entity/po/SysUser.java

@@ -6,6 +6,7 @@ import com.jzg.commons.entity.dto.SysSystemAddParam;
 import com.jzg.commons.entity.dto.SysSystemEditParam;
 import com.jzg.commons.entity.vo.SysSystemVo;
 import com.jzg.commons.util.PasswordUtils;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.commons.util.idgen.IdGenerate;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
@@ -87,14 +88,18 @@ public class SysUser extends BaseModel{
      * 生成新用户
      * @return
      */
-    public SysUser(String username,String mobile, String identity, String identityTimeStart, String identityTimeEnd){
+    public SysUser(String username,String mobile, String identity, String identityTimeStart, String identityTimeEnd,String password){
         this.id = IdGenerate.nextId();
         this.username = username;
         this.mobile = mobile;
-        this.password = DEFAULT_PASSWORD;
         String salt = PasswordUtils.getSalt();
         this.salt = salt;
-        this.password = PasswordUtils.encode(this.password,salt);
+        if(StringUtils.isNotBlank(password)){
+            this.password = PasswordUtils.encode(password,salt);
+        } else{
+            this.password = DEFAULT_PASSWORD;
+            this.password = PasswordUtils.encode(this.password,salt);
+        }
         this.accountStatus = 1;
         this.identity = identity;
         this.identityTimeStart = LocalDate.parse(identityTimeStart);

+ 7 - 1
commons/src/main/java/com/jzg/commons/entity/po/SysUserJzgApp.java

@@ -127,7 +127,13 @@ public class SysUserJzgApp extends BaseModel implements Serializable {
     @Schema(description = "是否删除 0未删除 1 删除")
     private Integer isDelete;
 
-
+    public SysUserJzgApp(SysUser sysUser) {
+        this.userId = sysUser.getId();
+        //默认添加管理员账户
+        this.name = sysUser.getUsername();
+        this.status = 0;
+        this.isEnable = 0;
+    }
 
     public SysUserJzgApp(String userName, SysUser user, String systemCode, String deptId){
         this.userId = user.getId();

+ 25 - 0
commons/src/main/java/com/jzg/commons/entity/vo/SystemListVo.java

@@ -0,0 +1,25 @@
+package com.jzg.commons.entity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "所在企业列表VO")
+@Data
+public class SystemListVo {
+
+    /** 租户Code */
+    @Schema(description = "租户code")
+    private String sysCode;
+
+    /** 租户名称 */
+    @Schema(description = "租户名称")
+    private String sysName;
+
+    /** 机构id */
+    @Schema(description = "机构id")
+    private String deptId;
+
+    /** 机构名称 */
+    @Schema(description = "机构名称")
+    private String deptName;
+}

+ 52 - 0
commons/src/main/java/com/jzg/commons/entity/vo/UserInfoVo.java

@@ -0,0 +1,52 @@
+package com.jzg.commons.entity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Schema(description = "个人信息VO")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserInfoVo {
+
+    @Schema(description = "用户id")
+    private String userId;
+
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "头像")
+    private String headSculpture;
+
+    @Schema(description = "手机")
+    private String mobile;
+
+    @Schema(description = "性别")
+    private String sex;
+
+    @Schema(description = "认证状态 0.未认证 1. 认证成功 2. 认证驳回")
+    private Integer authStatus;
+
+    @Schema(description = "推荐人id")
+    private String referrerId;
+
+    @Schema(description = "推荐人名字")
+    private String referrerName;
+
+    @Schema(description = "机构id")
+    private String deptId;
+
+    @Schema(description = "机构名称")
+    private String deptName;
+
+    @Schema(description = "租户名称")
+    private String sysName;
+
+    @Schema(description = "身份名称列表")
+    private List<String> typeNames;
+
+}

+ 103 - 2
tenant/organization/src/main/java/com/jzg/organization/controller/AppUserController.java

@@ -3,14 +3,23 @@ package com.jzg.organization.controller;
 
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
-import com.jzg.commons.entity.dto.AuthInfoAddParam;
-import com.jzg.commons.entity.dto.BusinessInfoAddParam;
+import com.jzg.commons.entity.dto.*;
+import com.jzg.commons.entity.po.SysUploadFiles;
 import com.jzg.commons.util.AssertionUtils;
+import com.jzg.commons.util.MinioUtils;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.organization.mapper.SysUploadFilesMapper;
 import com.jzg.organization.service.SysUserJzgAppService;
+import com.jzg.organization.service.SysUserService;
 import io.swagger.v3.oas.annotations.Operation;
+import jakarta.servlet.http.HttpServletRequest;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
 import java.time.LocalDate;
 
@@ -21,6 +30,81 @@ public class AppUserController extends BaseController {
     @Autowired
     private SysUserJzgAppService userJzgAppService;
 
+    @Autowired
+    private SysUserService userService;
+
+    @Autowired
+    private SysUploadFilesMapper sysUploadFilesMapper;
+
+    @Value("${minio.bucket-name}")
+    private String bucketName;
+
+    @Autowired
+    RedissonClient redissonClient;
+
+    /**
+     * 个人信息查询
+     * @param id 用户id
+     * @return
+     */
+    @GetMapping(value = { "/userInfoGet"})
+    @Operation(summary = "个人信息查询")
+    public HttpResult userInfoGet(String id) {
+        return HttpResult.ok(userJzgAppService.userInfoGet(id));
+    }
+
+
+    /**
+     * app个人信息修改
+     * @param param
+     * @return
+     */
+    @Operation(summary = "个人信息修改")
+    @PostMapping("/userInfoEdit")
+    public HttpResult userInfoEdit(@Validated @RequestBody UserInfoEditParam param) {
+        userJzgAppService.userInfoEdit(param);
+        if(StringUtils.isNotBlank(param.getHeadSculpture())){
+            SysUploadFiles sysUploadFiles = sysUploadFilesMapper.selectById(param.getHeadSculpture());
+            String jzgTouXiang = MinioUtils.getPresignedObjectUrl(bucketName, sysUploadFiles.getFileName());
+            return HttpResult.ok(jzgTouXiang);
+        }
+        return HttpResult.ok("保存成功");
+    }
+
+    /**
+     * (密码,短信验证码)验证
+     * @param param
+     * @return
+     */
+    @Operation(summary = "(密码,短信验证码)验证")
+    @PostMapping("/validateCode")
+    public HttpResult validateCode(@Validated @RequestBody ValidateCodeParam param) {
+        Boolean passFlag = true;
+        Boolean codeFlag = true;
+        if(StringUtils.isNotBlank(param.getPassword())){
+            // 验证密码
+            passFlag = userService.validatePassword(param.getMobile(), param.getPassword());
+        }
+        if(StringUtils.isNotBlank(param.getSmsCode())){
+            // 验证短信验证码
+            codeFlag = userService.validateSmsCode(param.getMobile(), param.getSmsCode());
+        }
+        return HttpResult.ok(passFlag && codeFlag );
+    }
+
+
+    @Operation(summary = "app更换手机号")
+    @PostMapping("/replaceMobile")
+    public HttpResult replaceMobile(@Validated @RequestBody ValidateCodeParam param) {
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = attributes.getRequest();
+        String authorizationHeader = request.getHeader("Authorization");
+        AssertionUtils.isFail(StringUtils.isNotBlank(param.getSmsCode()),"验证码不能为空");
+        userJzgAppService.replaceMobile(param);
+        redissonClient.getBucket(authorizationHeader).delete();
+        return HttpResult.ok();
+    }
+
     /**
      * 实名认证信息查询
      * @param id 用户id
@@ -61,4 +145,21 @@ public class AppUserController extends BaseController {
         return HttpResult.ok("保存成功");
     }
 
+    @Operation(summary = "邀请码注册")
+    @PostMapping("/invitationRegister")
+    public HttpResult invitationRegister(@Validated @RequestBody InvitationAddParam param) {
+        AssertionUtils.isSucceed(userService.validateSmsCode(param.getMobile(), param.getSmsCode()), "短信验证码不通过!");
+        if(!userJzgAppService.invitationRegister(param)){
+            return HttpResult.ok("该用户已被邀请注册");
+        }
+        return HttpResult.ok("保存成功");
+    }
+
+    @GetMapping(value = { "/systemListGet"})
+    @Operation(summary = "所在企业列表查询")
+    public HttpResult systemListGet(String userId) {
+        return HttpResult.ok(userJzgAppService.systemListGet(userId));
+    }
+
+
 }

+ 18 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/SysRelationPersonMapper.java

@@ -0,0 +1,18 @@
+package com.jzg.organization.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.commons.entity.po.SysRelationPerson;
+
+/**
+* @author dongxin
+* @description 针对表【sys_relation_person(合伙人/推荐人和机构负责人关系表)】的数据库操作Mapper
+* @createDate 2025-06-19 16:46:39
+* @Entity generator.domain.SysRelationPerson
+*/
+public interface SysRelationPersonMapper extends BaseMapper<SysRelationPerson> {
+
+}
+
+
+
+

+ 23 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserJzgAppMapper.java

@@ -3,11 +3,34 @@ package com.jzg.organization.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jzg.commons.entity.po.SysUserJzgApp;
 import com.jzg.commons.entity.vo.AuthInfoVo;
+import com.jzg.commons.entity.vo.SystemListVo;
+import com.jzg.commons.entity.vo.UserInfoVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 @Mapper
 public interface SysUserJzgAppMapper extends BaseMapper<SysUserJzgApp> {
 
+    /**
+     * 实名认证信息查询
+     * @param id
+     * @return
+     */
     AuthInfoVo authInfoGet(@Param("id") String id);
+
+    /**
+     * 个人信息查询
+     * @param id
+     * @return
+     */
+    UserInfoVo userInfoGet(@Param("id") String id);
+
+    /**
+     * 所在企业列表查询
+     * @param userId
+     * @return
+     */
+    List<SystemListVo> systemListGet(@Param("userId") String userId);
 }

+ 13 - 0
tenant/organization/src/main/java/com/jzg/organization/service/SysRelationPersonService.java

@@ -0,0 +1,13 @@
+package com.jzg.organization.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzg.commons.entity.po.SysRelationPerson;
+
+/**
+* @author dongxin
+* @description 针对表【sys_relation_person(合伙人/推荐人和机构负责人关系表)】的数据库操作Service
+* @createDate 2025-06-19 16:46:39
+*/
+public interface SysRelationPersonService extends IService<SysRelationPerson> {
+
+}

+ 37 - 2
tenant/organization/src/main/java/com/jzg/organization/service/SysUserJzgAppService.java

@@ -1,14 +1,24 @@
 package com.jzg.organization.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.jzg.commons.entity.dto.AuthInfoAddParam;
-import com.jzg.commons.entity.dto.BusinessInfoAddParam;
+import com.jzg.commons.entity.dto.*;
 import com.jzg.commons.entity.po.SysUser;
 import com.jzg.commons.entity.po.SysUserJzgApp;
 import com.jzg.commons.entity.vo.AuthInfoVo;
+import com.jzg.commons.entity.vo.SystemListVo;
+import com.jzg.commons.entity.vo.UserInfoVo;
+
+import java.util.List;
 
 public interface SysUserJzgAppService extends IService<SysUserJzgApp> {
 
+    /**
+     * 个人信息查询
+     * @param id
+     * @return
+     */
+    UserInfoVo userInfoGet(String id);
+
     /**
      * 用户实名信息查询
      * @param id
@@ -27,4 +37,29 @@ public interface SysUserJzgAppService extends IService<SysUserJzgApp> {
      * @param param
      */
     void businessInfoAdd(BusinessInfoAddParam param);
+
+    /**
+     * app个人信息修改
+     * @param param
+     */
+    void userInfoEdit(UserInfoEditParam param);
+
+    /**
+     * APP更换手机号
+     * @param param
+     */
+    void replaceMobile(ValidateCodeParam param);
+
+    /**
+     * 邀请码注册
+     * @param param
+     */
+    Boolean invitationRegister(InvitationAddParam param);
+
+    /**
+     * 所在企业列表
+     * @param userId
+     * @return
+     */
+    List<SystemListVo> systemListGet(String userId);
 }

+ 18 - 0
tenant/organization/src/main/java/com/jzg/organization/service/SysUserService.java

@@ -117,4 +117,22 @@ public interface SysUserService extends IService<SysUser> {
      * @return
      */
     List<SysTennatVo> getTenantList(String userId);
+
+    /**
+     * 校验短信验证码
+     * @param mobile
+     * @param smsCode
+     * @return
+     */
+    boolean validateSmsCode(String mobile,String smsCode);
+
+
+    /**
+     * 校验密码
+     * @param mobile
+     * @param password
+     * @return
+     */
+    boolean validatePassword(String mobile, String password);
+
 }

+ 22 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysRelationPersonServiceImpl.java

@@ -0,0 +1,22 @@
+package com.jzg.organization.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzg.commons.entity.po.SysRelationPerson;
+import com.jzg.organization.mapper.SysRelationPersonMapper;
+import com.jzg.organization.service.SysRelationPersonService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author dongxin
+* @description 针对表【sys_relation_person(合伙人/推荐人和机构负责人关系表)】的数据库操作Service实现
+* @createDate 2025-06-19 16:46:39
+*/
+@Service
+public class SysRelationPersonServiceImpl extends ServiceImpl<SysRelationPersonMapper, SysRelationPerson>
+    implements SysRelationPersonService {
+
+}
+
+
+
+

+ 135 - 9
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgAppServiceImpl.java

@@ -4,13 +4,14 @@ import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.jzg.commons.entity.dto.AuthInfoAddParam;
-import com.jzg.commons.entity.dto.BusinessInfoAddParam;
-import com.jzg.commons.entity.po.SysUser;
-import com.jzg.commons.entity.po.SysUserJzgApp;
-import com.jzg.commons.entity.po.SysUserJzgInfo;
-import com.jzg.commons.entity.po.SysUserJzgInfoFile;
+import com.jzg.commons.entity.dto.*;
+import com.jzg.commons.entity.po.*;
 import com.jzg.commons.entity.vo.AuthInfoVo;
+import com.jzg.commons.entity.vo.SystemListVo;
+import com.jzg.commons.entity.vo.UserInfoVo;
+import com.jzg.commons.util.AssertionUtils;
+import com.jzg.commons.util.MinioUtils;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.organization.component.UnionPayRequestApiComponent;
 import com.jzg.organization.component.request.UnionPayRequest;
 import com.jzg.organization.component.response.UnionPayResponse;
@@ -18,14 +19,15 @@ import com.jzg.organization.mapper.SysUploadFilesMapper;
 import com.jzg.organization.mapper.SysUserJzgAppMapper;
 import com.jzg.organization.mapper.SysUserJzgInfoFileMapper;
 import com.jzg.organization.mapper.SysUserMapper;
-import com.jzg.organization.service.SysUserJzgAppService;
-import com.jzg.organization.service.SysUserJzgInfoFileService;
+import com.jzg.organization.service.*;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.awt.*;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 @Service
 public class SysUserJzgAppServiceImpl extends ServiceImpl<SysUserJzgAppMapper, SysUserJzgApp> implements SysUserJzgAppService {
@@ -37,12 +39,36 @@ public class SysUserJzgAppServiceImpl extends ServiceImpl<SysUserJzgAppMapper, S
     private SysUserMapper sysUserMapper;
 
     @Autowired
-    private SysUserJzgInfoFileService userJzgInfoFileService;
+    private SysUserService sysUserService;
+
+    @Autowired
+    private SysRelationPersonService relationPersonService;
+
+    @Autowired
+    private SysUserJzgInfoService sysUserJzgInfoService;
 
+    @Autowired
+    private SysUserJzgInfoFileService userJzgInfoFileService;
 
     @Autowired
     private UnionPayRequestApiComponent unionPayRequestApiComponent;
 
+    @Override
+    public UserInfoVo userInfoGet(String id) {
+        UserInfoVo infoVo = sysUserJzgAppMapper.userInfoGet(id);
+        infoVo.setHeadSculpture(MinioUtils.getPresignedObjectUrl("jzg", infoVo.getHeadSculpture()));
+        // 获取身份信息
+        LambdaQueryWrapper<SysUserJzgInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select(SysUserJzgInfo::getTypeAttr)
+                .eq(SysUserJzgInfo::getUserId, infoVo.getUserId())
+                .eq(SysUserJzgInfo::getIsDelete, 0)
+                .eq(SysUserJzgInfo::getIsEnable, 0);
+        List<SysUserJzgInfo> infos = sysUserJzgInfoService.list(queryWrapper);
+        List<String> typeAttrs = infos.stream().map(SysUserJzgInfo::getTypeAttr).collect(Collectors.toList());
+        infoVo.setTypeNames(typeAttrs);
+        return infoVo;
+    }
+
     @Override
     public AuthInfoVo authInfoGet(String id) {
         AuthInfoVo infoVo = sysUserJzgAppMapper.authInfoGet(id);
@@ -107,4 +133,104 @@ public class SysUserJzgAppServiceImpl extends ServiceImpl<SysUserJzgAppMapper, S
         }
         userJzgInfoFileService.save(param.getFile());
     }
+
+    @Override
+    public void userInfoEdit(UserInfoEditParam param) {
+        SysUserJzgApp userJzgApp = new SysUserJzgApp();
+        BeanUtils.copyProperties(param, userJzgApp);
+        this.updateById(userJzgApp);
+    }
+
+    @Override
+    public void replaceMobile(ValidateCodeParam param) {
+        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysUser::getMobile, param.getMobile())
+                .eq(SysUser::getIsDelete, 0);
+        SysUser user = sysUserMapper.selectOne(queryWrapper);
+        AssertionUtils.isFail(Objects.isNull(user),"手机号已存在请重新输入");
+
+        AssertionUtils.isFail(!sysUserService.validateSmsCode(param.getMobile(), param.getSmsCode())
+                ,"验证码验证失败");
+
+        user.setMobile(param.getMobile());
+        sysUserService.updateById(user);
+    }
+
+    @Override
+    public Boolean invitationRegister(InvitationAddParam param) {
+        Boolean isFlag = true;
+        // 获取邀请人信息
+        SysUserJzgApp yqrAppUser = sysUserJzgAppMapper.selectById(param.getUserId());
+        AssertionUtils.isFail(Objects.isNull(yqrAppUser),"邀请人不存在");
+
+        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysUser::getMobile, param.getMobile())
+                .eq(SysUser::getIsDelete, 0);
+        SysUser user = sysUserMapper.selectOne(queryWrapper);
+        if(Objects.isNull(user)){
+            // 创建用户
+            SysUser sysUser = new SysUser(param.getMobile(), param.getMobile(),
+                    null,null,null,
+                    param.getPassword());
+            sysUserMapper.insert(sysUser);
+            // 创建app用户
+            SysUserJzgApp sysUserJzgApp = new SysUserJzgApp(sysUser);
+            sysUserJzgApp.setDeptId(yqrAppUser.getDeptId());
+            sysUserJzgApp.setSystemCode(yqrAppUser.getSystemCode());
+            sysUserJzgApp.setReferrerId(yqrAppUser.getId());
+            sysUserJzgAppMapper.insert(sysUserJzgApp);
+            // 增加推荐人关系
+            this.addRelationPerson(yqrAppUser,sysUserJzgApp);
+        }else{
+            // 判断用户是否与租户关联
+            LambdaQueryWrapper<SysUserJzgApp> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(SysUserJzgApp::getUserId, user.getId())
+                    .eq(SysUserJzgApp::getIsDelete, 0)
+                    .eq(SysUserJzgApp::getIsEnable, 0)
+                    .eq(SysUserJzgApp::getSystemCode, yqrAppUser.getSystemCode());
+            SysUserJzgApp appUser = sysUserJzgAppMapper.selectOne(wrapper);
+            if(Objects.isNull(appUser)){
+                SysUserJzgApp sysUserJzgApp = new SysUserJzgApp(user);
+                sysUserJzgApp.setDeptId(yqrAppUser.getDeptId());
+                sysUserJzgApp.setSystemCode(yqrAppUser.getSystemCode());
+                sysUserJzgApp.setReferrerId(yqrAppUser.getId());
+                sysUserJzgAppMapper.insert(sysUserJzgApp);
+                // 增加推荐人关系
+                this.addRelationPerson(yqrAppUser,sysUserJzgApp);
+            }else{
+                isFlag = false;
+            }
+        }
+        return isFlag;
+    }
+
+    @Override
+    public List<SystemListVo> systemListGet(String userId) {
+        List<SystemListVo> systemList = sysUserJzgAppMapper.systemListGet(userId);
+        return systemList;
+    }
+
+    /**
+     * 增加推荐人关系
+     * @param sourceAppUser
+     * @param appUser
+     */
+    private void addRelationPerson(SysUserJzgApp sourceAppUser, SysUserJzgApp appUser) {
+        // 查询推荐人关系
+        LambdaQueryWrapper<SysRelationPerson> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysRelationPerson::getSuggestId, sourceAppUser.getId())
+                .eq(SysRelationPerson::getIsDelete, 0);
+        SysRelationPerson person = relationPersonService.getOne(wrapper);
+        SysRelationPerson relationPerson = new SysRelationPerson();
+        relationPerson.setAgencyLeaderId(sourceAppUser.getId());
+        relationPerson.setSuggestId(appUser.getId());
+        relationPerson.setSource(0);
+        relationPerson.setType(0);
+        if(Objects.isNull(person)){
+            relationPerson.setSuggestLevel(1);
+        } else {
+            relationPerson.setSuggestLevel(person.getSuggestLevel() + 1);
+        }
+        relationPersonService.save(relationPerson);
+    }
 }

+ 39 - 1
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java

@@ -3,6 +3,7 @@ package com.jzg.organization.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzg.commons.constants.RedisKeyConstants;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.base.HistoryDataService;
@@ -19,6 +20,7 @@ import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.exception.ValidateException;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.MinioUtils;
+import com.jzg.commons.util.PasswordUtils;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.commons.util.idgen.IdGenerate;
 import com.jzg.organization.client.OrgClient;
@@ -32,6 +34,7 @@ import com.jzg.organization.state.listener.UserStateListener;
 import jakarta.annotation.Resource;
 import lombok.RequiredArgsConstructor;
 import lombok.Setter;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -98,6 +101,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Setter(onMethod_ = @Autowired)
     private UserMessageTemplate userMessageTemplate;
 
+    @Autowired
+    RedissonClient redissonClient;
+
     private String getCurrentAreaCode(String province,String city,String area){
         String userWorkNumber = "";
         if (!area.isEmpty()) {
@@ -270,6 +276,38 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return tenantList;
     }
 
+    @Override
+    public boolean validateSmsCode(String mobile, String smsCode) {
+        //校验短信验证码
+        if(Objects.isNull(redissonClient.getBucket(RedisKeyConstants.SMS_CODE + mobile).get())){
+            throw new SystemException("短信验证码已过期");
+        }
+        String systemSmsCode = redissonClient.getBucket(RedisKeyConstants.SMS_CODE + mobile).get().toString();
+        if(!smsCode.equals(systemSmsCode)){
+            throw new SystemException("短信验证码错误,请重新输入");
+        }
+        return true;
+    }
+
+    @Override
+    public boolean validatePassword(String mobile, String password) {
+        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysUser::getMobile, mobile)
+                .eq(SysUser::getIsDelete, 0);
+        SysUser user = sysUserService.getOne(queryWrapper);
+        // 加密密码和盐值
+        String encryptedPassword = PasswordUtils.encode(password,user.getSalt());
+
+        //调试时候用 万能密码
+        if(!password.equals("Aa159357")) {
+            // 对比密码
+            if (!encryptedPassword.equals(user.getPassword())) {
+                return false;
+            }
+        }
+        return true;
+    }
+
 
     @Override
     public boolean realNameAuthFailed(String userId){
@@ -304,7 +342,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 //            throw new SystemException("用户信息已存在,无法添加");
         } else {
             // 如果手机号为新号 重新生成SysUser 设置默认密码
-            SysUser sysUser1 = new SysUser(sysUserVo.getMobile(),sysUserVo.getMobile(),sysUserVo.getIdentity(),sysUserVo.getIdentityTimeStart(),sysUserVo.getIdentityTimeEnd());
+            SysUser sysUser1 = new SysUser(sysUserVo.getMobile(),sysUserVo.getMobile(),sysUserVo.getIdentity(),sysUserVo.getIdentityTimeStart(),sysUserVo.getIdentityTimeEnd(),null);
             this.save(sysUser1);
             BeanUtils.copyProperties(sysUserVo, sysUserJzgInfo);
             sysUserJzgInfo.setId(IdGenerate.nextId());

+ 13 - 0
tenant/organization/src/main/resources/mapper/SysRelationPersonMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jzg.organization.mapper.SysRelationPersonMapper">
+
+    <sql id="Base_Column_List">
+        id,agency_leader_id,suggest_id,
+        suggest_level,source,type,
+        is_delete,create_time,create_by,
+        update_time,update_by
+    </sql>
+</mapper>

+ 31 - 0
tenant/organization/src/main/resources/mapper/SysUserJzgAppMapper.xml

@@ -15,4 +15,35 @@
             </if>
         </where>
     </select>
+    <select id="userInfoGet" resultType="com.jzg.commons.entity.vo.UserInfoVo">
+        SELECT su.id as userId,sujz.name, su.auth_status as authStatus,su.mobile,
+        suf.file_name AS headSculpture, sujz.sex ,suf.
+        sujz.referrer_id as referrerId,su.username as referrerName,
+        sujz.dept_id as deptId,sd.name as deptName, ss.sys_name as sysName
+        FROM sys_user_jzg_app sujz
+        LEFT JOIN sys_user su ON sujz.user_id = su.id
+        LEFT JOIN sys_dept sd on sd.id = sujz.dept_id
+        LEFT JOIN sys_upload_files suf on suf.id = sujz.head_sculpture
+        LEFT JOIN sys_system ss on ss.sys_code = sujz.system_code
+        <where>
+            sujz.is_delete = 0 and sujz.is_enable = 0
+            <if test="id != null and id != ''">
+                and sujz.id = #{id}
+            </if>
+        </where>
+
+    </select>
+    <select id="systemListGet" resultType="com.jzg.commons.entity.vo.SystemListVo">
+        SELECT ss.sys_name AS sysName, ss.sys_code AS sysCode,
+           sujz.dept_id as deptId,sd.name as deptName
+        FROM sys_user_jzg_app sujz
+        LEFT JOIN sys_dept sd on sd.id = sujz.dept_id
+        LEFT JOIN sys_system ss on ss.sys_code = sujz.system_code
+        <where>
+            sujz.is_delete = 0 and sujz.is_enable = 0
+            <if test="userId != null and userId != ''">
+                and sujz.user_id = #{userId}
+            </if>
+        </where>
+    </select>
 </mapper>