feige
2025-06-23 8d0db2a5b91a38960855ab3f5ee3e92fe363e8e2
Merge remote-tracking branch 'origin/master'
8个文件已修改
640 ■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java 595 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/MarrySelfController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/domain/sysUserAndUserInfo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/MarrySelfService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/impl/MarrySelfServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/impl/MarryUserServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -13,7 +13,6 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.entity.sysUserInfo;
import com.ruoyi.common.utils.uuid.UUID;
import com.ruoyi.domain.*;
import com.ruoyi.domain.dto.MarryInfoDto;
import com.ruoyi.service.*;
@@ -51,7 +50,7 @@
/**
 * 用户信息
 *
 *
 * @author ruoyi
 */
@RestController
@@ -170,358 +169,352 @@
    }
    /**
     * 修改用户
     * 更新用户信息及关联的家庭/婚姻数据
     *
     * 核心流程:
     * 1. 更新基础用户信息
     * 2. 家庭成员专属处理(角色ID=102)
     *   2.1 构建家庭成员扩展信息
     *   2.2 处理家族继承关系(父母/配偶)
     *   2.3 更新配偶数据
     *   2.4 同步婚姻状态(含离婚特殊逻辑)
     *
     * @param user 前端传入的用户数据对象(含基础信息+家庭关系)
     * @return AjaxResult 统一响应格式(成功/错误信息)
     * @throws IllegalArgumentException 关键数据校验失败时抛出
     * @apiNote 仅角色ID=102(家庭成员)执行完整更新流程
     */
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
    @PostMapping("/updateUserInfo")
    public AjaxResult editUser(@Validated @RequestBody sysUserAndUserInfo user)
    {
    public AjaxResult editUser(@Validated @RequestBody sysUserAndUserInfo user) {
        // ===================== 1. 更新基础用户信息 =====================
        SysUser us = new SysUser();
        us.setUserId(user.getSysId());
        us.setUserName(user.getUserName());
        us.setNickName(user.getNickName());
        us.setRoleId(user.getRoleId());
        us.setSex(user.getSex());
        us.setStatus(user.getStatus());
        us.setRemark(user.getRemark());
        userService.updateUser(us);
        us.setUserId(user.getSysId());       // 系统唯一ID(必填)
        us.setUserName(user.getUserName());  // 登录名(账号标识)
        us.setNickName(user.getNickName());  // 显示昵称
        us.setRoleId(user.getRoleId());      // 角色ID(102=家庭成员)
        us.setSex(user.getSex());            // 性别(0男/1女)
        us.setStatus(user.getStatus());      // 账户状态(启用/禁用)
        us.setRemark(user.getRemark());      // 备注信息
        userService.updateUser(us);          // 执行SysUser表更新
  //      System.out.println(user.getFamilyId());
     //   System.out.println("[[[[]]]]]]");
        Long userId = user.getSysId();
      //  SysUserRole sysUserRole=sysUserRoleMapper.selectUserById(userId);
        //System.out.println(sysUserRole.getRoleId());
        System.out.println("你好呀");
        System.out.println(user.getRoleId());
        if (user.getRoleId() != null && user.getRoleId().equals(102L)){
        ZInfoUser infoUser = new ZInfoUser();
        infoUser.setUserId(user.getUserId());
        infoUser.setOldName(user.getUserName());
        infoUser.setNickName(user.getNickName());
        infoUser.setIsMyFamily(user.getIsMyFamily());
        infoUser.setMomId(user.getMid());
        infoUser.setFatherId(user.getFid());
        if (user.getSex() != null)infoUser.setSex(Integer.valueOf(user.getSex()));
//        infoUser.setFamilyId(user.getFamilyId());
        infoUser.setSysId(user.getSysId());
        // ===== 2. 家庭成员专属处理(仅角色ID=102时执行)=====
        if (user.getRoleId() != null && user.getRoleId().equals(102L)) {
            // ----- 2.1 构建家庭成员扩展信息对象 -----
            ZInfoUser infoUser = new ZInfoUser();
            infoUser.setUserId(user.getUserId());         // 用户业务ID
            infoUser.setOldName(user.getUserName());      // 历史名称(保留记录)
            infoUser.setNickName(user.getNickName());      // 当前昵称
            infoUser.setIsMyFamily(user.getIsMyFamily()); // 家庭成员标记(0/1)
            infoUser.setMomId(user.getMid());             // 母亲ID(可为空)
            infoUser.setFatherId(user.getFid());           // 父亲ID(可为空)
            // 婚姻状态空值保护(0未婚/1已婚/2离婚)
            infoUser.setMaritalStatus(user.getMaritalStatus() == null ? null : user.getMaritalStatus());
            // 性别格式转换(String → Integer)
            if (user.getSex() != null) infoUser.setSex(Integer.valueOf(user.getSex()));
            infoUser.setSysId(user.getSysId());           // 关联系统ID(外键)
            // 配偶ID设置(非必填)
            if(user.getSpouseId() != null) {
                infoUser.setSpouseId(user.getSpouseId());
            }
        if(user.getSpouseId()!=null) {
            infoUser.setSpouseId(user.getSpouseId());
        }
//        ZfFamily zfFamily = zfFamilyService.getByFamId(user.getFamilyId());
//        if(zfFamily!=null&&zfFamily.getFid()!=null)
//            infoUser.setFatherId(zfFamily.getFid());
//        if(zfFamily!=null&&zfFamily.getMid()!=null)
//            infoUser.setMomId(zfFamily.getMid());
            // ----- 2.2 家族关系继承逻辑 -----
            // 优先获取当前数据库记录
            ZInfoUser byId = zInfoUserService.getById(user);
            Long myFamily = byId.getFamilyId();
        if (myFamily != null) infoUser.setFamilyId(myFamily);
            if (user.getFid() != null){
            //跟随父亲的家族和家庭信息
          //   if (!zInfoUserService.getById(user.getUserId()).getFatherId().equals(user.getFid())){
                    ZInfoUser father = zInfoUserService.getById(user.getFid());
                        System.out.println("11111111111111111111111111111111/");
                    //    infoUser.setFamilyId(father.getFamilyId());
                        infoUser.setClanId(father.getClanId());
            // 保留原家庭ID(确保数据连续性)
            if (myFamily != null) infoUser.setFamilyId(myFamily);
          //  }
        }
            if(user.getMid()!=null)
            {
                //跟随母亲的家族和家庭信息
                //   if (!zInfoUserService.getById(user.getUserId()).getFatherId().equals(user.getFid())){
                ZInfoUser mother = zInfoUserService.getById(user.getMid());
                System.out.println("11111111111111111111111111111111/");
           //     infoUser.setFamilyId(mother.getFamilyId());
                infoUser.setClanId(mother.getClanId());
            /* 家族继承优先级:父亲 > 母亲 > 配偶 */
            // 2.2.1 继承父亲家族
            if (user.getFid() != null) {
                ZInfoUser father = zInfoUserService.getById(user.getFid());
                if (father != null) {
                    infoUser.setClanId(father.getClanId()); // 父系家族ID
                }
            }
//            else if(user.getMid() != null){
//                ZInfoUser mother = zInfoUserService.getById(user.getMid());
//                if (mother.getIsMyFamily() == 1)
//                    System.out.println("2222222222222222222222222222222222/");
//                infoUser.setFamilyId(mother.getFamilyId());
//            }
            System.out.println("{{{{{{{{{{{{{{{"+user);
        if (user.getSpouseId() != null ){
            //跟随配偶的家族和家庭信息
//            if ( !zInfoUserService.getById(user.getUserId()).getSpouseId().equals(user.getSpouseId())){
                //是本家,一种是普通用户更新为家庭用户,
                if (zInfoUserService.getById(user.getUserId())==null||zInfoUserService.getById(user.getUserId()).getIsMyFamily() == 0) {
            // 2.2.2 继承母亲家族(覆盖父亲ID)
            if(user.getMid() != null) {
                ZInfoUser mother = zInfoUserService.getById(user.getMid());
                if (mother != null) {
                    infoUser.setClanId(mother.getClanId()); // 母系家族ID
                }
            }
            // 2.2.3 配偶家族继承(最高优先级)
            if (user.getSpouseId() != null ){
                // 仅当用户首次成为家庭成员时继承配偶家族
                if (zInfoUserService.getById(user.getUserId()) == null ||
                        zInfoUserService.getById(user.getUserId()).getIsMyFamily() == 0) {
                    ZInfoUser spouse = zInfoUserService.getById(user.getSpouseId());
                    System.out.println("33333333333333333333333333333333333333333/");
                    infoUser.setFamilyId(spouse.getFamilyId());
                    if(spouse.getFatherId() !=null || spouse.getMomId() !=null) {
                    infoUser.setFamilyId(spouse.getFamilyId()); // 配偶家庭ID
                    // 继承配偶父母信息(建立姻亲关系)
                    if(spouse.getFatherId() != null || spouse.getMomId() != null) {
                        infoUser.setFatherId(spouse.getFatherId());
                        infoUser.setMomId(spouse.getMomId());
                    }
                    infoUser.setClanId(spouse.getClanId());
//                }
                    infoUser.setClanId(spouse.getClanId()); // 配偶家族ID
                }
            }
            // ----- 2.3 保存家庭信息 -----
            // 关键校验:家庭ID为空说明不满足家庭成员条件
            if(infoUser.getFamilyId() != null ) {
                zInfoUserService.saveOrUpdate(infoUser); // 持久化到ZInfoUser表
            } else {
                // ⚠️ 家庭ID缺失阻断操作
                return AjaxResult.error("家庭成员不能修改为普通用户");
            }
        }
        if(infoUser.getFamilyId() != null )
            zInfoUserService.saveOrUpdate(infoUser);
        else {
            System.out.println("家庭成员不能修改为普通用户");
            return AjaxResult.error("家庭成员不能修改为普通用户");
        }
        //更新配偶信息
        if(user.getSpouseId() != null) {
            // ----- 2.4 更新配偶信息 -----
            ZInfoUser byId2 = zInfoUserService.getById(user.getUserId()); // 刷新数据
            ZInfoUser zu = new ZInfoUser();
            zu.setUserId(user.getSpouseId());
            zu.setSpouseId(infoUser.getUserId());
            zu.setFatherId(infoUser.getFatherId());
            zu.setMomId(infoUser.getMomId());
//            Long spouseMoM = zInfoUserService.getById(user.getSpouseId()).getMomId();
//            Long spouseDad = zInfoUserService.getById(user.getSpouseId()).getFatherId();
//            zu.setMomId(spouseMoM);
//            zu.setFatherId(spouseDad);
//
            zInfoUserService.updateById(zu);
            // 仅当原记录存在配偶时更新
            if(byId2.getSpouseId() != null) {
                zu.setUserId(byId2.getSpouseId()); // 配偶ID
                // 同步婚姻状态(空值保护)
                zu.setMaritalStatus(user.getMaritalStatus() == null ? null : user.getMaritalStatus());
                // 建立双向关联
                if(user.getSpouseId() != null) {
                    zu.setSpouseId(infoUser.getUserId()); // 绑定当前用户
                    zu.setFatherId(infoUser.getFatherId()); // 同步父亲
                    Long spouseMoM = zInfoUserService.getById(user.getSpouseId()).getMomId();
                    Long spouseDad = zInfoUserService.getById(user.getSpouseId()).getFatherId();
                    zu.setMomId(spouseMoM);
                    zu.setFatherId(spouseDad);
                    zu.setMomId(infoUser.getMomId());      // 同步母亲
                }
                zInfoUserService.updateById(zu); // 更新配偶记录
            }
            //更新MarrySelf和MarryUser
            ZInfoUser zfi = zInfoUserService.getById(user.getUserId());
            MarryInfoDto marrySelf = new MarryInfoDto();
            marrySelf.setUid(user.getSpouseId());
            marrySelf.setName(zfi.getOldName());
            marrySelf.setSpouseSex(zfi.getSex()==1?"男":"女");
            //这个可能还要修改 一下
            marrySelf.setMarryStatus(0);
            marrySelf.setSpouseName(infoUser.getOldName());
            marrySelf.setSpouseSex(infoUser.getSex()==1?"男":"女");
            marrySelf.setSpouseMarryStatus(0);
            marrySelfService.updateData(marrySelf);
            //增加MarryUser
            //增加marryUser
            MarryUser marryUser = new MarryUser();
            marryUser.setUid(user.getSpouseId());
            marryUser.setName(infoUser.getOldName());
            marryUser.setSex(infoUser.getSex()==1?"男":"女");
            marryUser.setMarryStatus(0);
            marryUserService.addData(marryUser);
            // ===== 3. 婚姻状态专项处理 =====
                // 3.1 构建本人婚姻信息
                MarryInfoDto marrySelf = new MarryInfoDto();
                marrySelf.setUid(user.getSysId()); // 系统ID
                marrySelf.setName(user.getUserName()); // 当前用户名
                marrySelf.setSex(us.getSex().equals("0") ? "男" : "女"); // 性别转换
        }
                // 3.2 配偶婚姻信息同步
                if(byId2.getSpouseId() != null) {
                    // 自动设置已婚状态(默认值逻辑)
                    infoUser.setMaritalStatus(infoUser.getMaritalStatus() == null ? 1 : infoUser.getMaritalStatus());
            return AjaxResult.success();
        }
        else {
            System.out.println("daniuni");
                    // 获取配偶最新数据
                    ZInfoUser byId1 = zInfoUserService.getById(byId2.getSpouseId());
                    // 更新本人婚姻档案
                    marrySelf.setSpouseName(byId1.getOldName()); // 配偶原名
                    marrySelf.setMarryStatus(infoUser.getMaritalStatus()); // 婚姻状态
                    marrySelf.setSpouseSex(byId1.getSex().equals(0) ? "男" : "女"); // 配偶性别
                    marrySelfService.updateData(marrySelf); // 持久化
                    // 3.3 反向更新配偶婚姻档案
                    MarryInfoDto spouse = new MarryInfoDto();
                    spouse.setUid(byId1.getSysId()); // 配偶系统ID
                    spouse.setSpouseName(byId2.getOldName()); // 本人历史名
                    spouse.setMarryStatus(infoUser.getMaritalStatus()); // 同步状态
                    spouse.setSpouseSex(marrySelf.getSex()); // 本人性别
                    marrySelfService.updateData(spouse); // 持久化
                }
                // 3.4 离婚特殊处理(状态码=2)
                if(user.getMaritalStatus() != null && user.getMaritalStatus() == 2) {
                    // 3.4.1 获取配偶信息
                    Long spouseId = zInfoUserService.getById(user.getUserId()).getSpouseId();
                    String spouseName = null;
                    Long spouseSysId = 0L;
                    if (spouseId != null) {
                        ZInfoUser spouseInfo = zInfoUserService.getById(spouseId);
                        spouseName = spouseInfo.getOldName();
                        spouseSysId = spouseInfo.getSysId();
                        // 3.4.2 生成本人离婚记录
                        MarryUser marryUser = new MarryUser();
                        marryUser.setUid(user.getSysId()); // 本人ID
                        marryUser.setName(spouseName);     // 配偶名称
                        marryUser.setSex(user.getSex().equals("0") ? "男" : "女"); // 本人性别
                        marryUser.setMarryStatus(2);       // 离婚状态
                        marryUserService.save(marryUser);  // 写入历史表
                    }
                    // 3.4.3 生成配偶离婚记录
                    MarryUser exSpouseRecord = new MarryUser();
                    exSpouseRecord.setUid(spouseSysId);        // 配偶ID
                    exSpouseRecord.setName(infoUser.getOldName()); // 本人历史名
                    exSpouseRecord.setSex(us.getSex().equals("0") ? "男" : "女"); // 本人性别
                    exSpouseRecord.setMarryStatus(2);          // 离婚状态
                    marryUserService.save(exSpouseRecord);     // 写入历史表
                }
            return AjaxResult.success(); // 操作成功
        } else {
            // ⚠️ 非家庭成员直接阻断
            return AjaxResult.error("家庭成员不能修改为普通用户");
        }
      //  zInfoUserService.update(infoUser);
             //   .saveOrUpdate(infoUser);
    }
    /**
     * 新增用户
     */
    @PreAuthorize("@ss.hasPermi('system:user:add')")
    @Log(title = "用户管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@Validated @RequestBody sysUserAndUserInfo userAll)
    {
        SysUser user = new SysUser();
      //  user.setUserId(userAll.getUserId());
        user.setAvatar(userAll.getAvatar());
        user.setPassword("123456");
        user.setNickName(userAll.getNickName());
        user.setUserName(userAll.getUserName());
        user.setPhonenumber(userAll.getPhonenumber());
        user.setRoleId(userAll.getRoleId());
        user.setRoleIds(userAll.getRoleIds());
        user.setStatus(userAll.getStatus());
        user.setSex(userAll.getSex());
        user.setRemark(userAll.getRemark());
        user.setUpdateBy(userAll.getUpdateBy());
        user.setClanId(userAll.getClanId());
//        user.setSex(userAll.getSex()=="男"?"1":"0");
    //    user.setPostIds(userAll.getPostIds());
      //  user.set
        if (!userService.checkNickNameUnique(user))
        {
    /**
     * 新增用户接口
     *
     * 核心功能:
     * 1. 创建基础用户信息
     * 2. 校验用户唯一性(登录名/手机号/邮箱)
     * 3. 分配用户角色
     * 4. 家庭成员特殊处理(角色ID=102)
     *   4.1 创建家庭扩展信息
     *   4.2 建立家族关系(父母/配偶)
     *   4.3 初始化婚姻信息
     *
     * @param userAll 前端传入的用户数据对象(包含基础信息+家庭关系)
     * @return AjaxResult 统一响应格式(成功/错误信息)
     * @apiNote 需具备'system:user:add'权限才能访问[1,4](@ref)
     */
    @PreAuthorize("@ss.hasPermi('system:user:add')") // 权限校验注解
    @Log(title = "用户管理", businessType = BusinessType.INSERT) // 操作日志记录
    @PostMapping
    public AjaxResult add(@Validated @RequestBody sysUserAndUserInfo userAll) {
        // ===================== 1. 初始化用户基础信息 =====================
        SysUser user = new SysUser();
        user.setAvatar(userAll.getAvatar());        // 用户头像
        user.setPassword("123456");                // 默认密码(需加密)
        user.setNickName(userAll.getNickName());    // 用户昵称
        user.setUserName(userAll.getUserName());    // 登录用户名
        user.setPhonenumber(userAll.getPhonenumber()); // 手机号
        user.setRoleId(userAll.getRoleId());        // 主角色ID
        user.setRoleIds(userAll.getRoleIds());      // 多角色ID集合
        user.setStatus(userAll.getStatus());        // 账户状态(0正常/1停用)
        user.setSex(userAll.getSex());              // 性别(0男/1女)
        user.setRemark(userAll.getRemark());        // 备注信息
        user.setUpdateBy(userAll.getUpdateBy());    // 更新人
        user.setClanId(userAll.getClanId());        // 家族ID
        // ===================== 2. 唯一性校验(登录名/手机号/邮箱) =====================
        // 2.1 登录名校验
        if (!userService.checkNickNameUnique(user)) {
            return error("新增用户'" + user.getNickName() + "'失败,登录账号已存在");
        }
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
        {
        // 2.2 手机号校验(非空时验证)
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
            return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
        }
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
        {
        // 2.3 邮箱校验(非空时验证)
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
            return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
        }
        user.setCreateBy(getUsername());
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
        userService.insertUser(user);
        //写到用户与角色对应的表
        // ===================== 3. 保存核心用户数据 =====================
        user.setCreateBy(getUsername()); // 设置创建人
        // 密码加密处理(使用系统安全工具)[5](@ref)
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
        userService.insertUser(user); // 写入sys_user主表
        // ===================== 4. 用户角色关联处理 =====================
        SysUserRole sysUserRole = new SysUserRole();
        sysUserRole.setUserId(user.getUserId());
        sysUserRole.setRoleId(user.getRoleId());
        sysUserRole.setUserId(user.getUserId()); // 新用户ID
        sysUserRole.setRoleId(user.getRoleId()); // 主角色ID
        List<SysUserRole> sysUserRoles = new ArrayList<>();
        sysUserRoles.add(sysUserRole);
        // 批量写入用户-角色关系表
        sysUserRoleMapper.batchUserRole(sysUserRoles);
        //写入到 新建立的信息表里面
//        ZfFamily zfFamily = zfFamilyService.getByFamId(userAll.getFamilyId());
        if (userAll.getRoleId() == 102){
        ZInfoUser infoUser = new ZInfoUser();
        infoUser.setSysId(user.getUserId());
     //   infoUser.setUserId(user.getUserId());
        infoUser.setNickName(userAll.getNickName());
        infoUser.setOldName(userAll.getUserName());
        infoUser.setPhoneNumber(userAll.getPhonenumber());
        // ===================== 5. 家庭成员特殊处理(角色ID=102) =====================
        if (userAll.getRoleId() == 102) {
            // ----- 5.1 初始化家庭成员扩展信息 -----
            ZInfoUser infoUser = new ZInfoUser();
            infoUser.setSysId(user.getUserId());        // 关联系统用户ID
            infoUser.setNickName(userAll.getNickName()); // 当前昵称
            infoUser.setOldName(userAll.getUserName());  // 历史名称(保留记录)
            infoUser.setPhoneNumber(userAll.getPhonenumber()); // 联系方式
            // 性别格式转换(String → Integer)
            infoUser.setSex(userAll.getSex().equals("0") ? 0 : 1);
            infoUser.setSpouseId(userAll.getSpouseId()); // 配偶ID
            infoUser.setFatherId(userAll.getFid());      // 父亲ID
            infoUser.setMomId(userAll.getMid());          // 母亲ID
            infoUser.setIsMyFamily(userAll.getIsMyFamily()); // 家庭成员标记(0/1)
        //设置新的usid
//        UUID uuid=        UUID.fromString(userAll.getUserName()+userAll.getPhonenumber());
//        String usid  = uuid.toString();
            String originalString=userAll.getUserName()+"-"+userAll.getPhonenumber();
            String uniqueId = UUID.nameUUIDFromBytes(originalString.getBytes()).toString();
        infoUser.setUaid(uniqueId);
        System.out.println(userAll.getSex());
        System.out.println("性别的原因");
        infoUser.setSex(userAll.getSex().equals("0")?0:1);
        System.out.println(infoUser.getSex());
//        infoUser.setFamilyId(userAll.getFid());
        infoUser.setSpouseId(userAll.getSpouseId());
        infoUser.setFatherId(userAll.getFid());
        infoUser.setMomId(userAll.getMid());
     //   infoUser.setFamilyId(userAll.getFamilyId());
//        if(zfFamily!=null&&zfFamily.getFid()!=null) {
//            infoUser.setFatherId(zfFamily.getFid());
//         //   infoUser.setMomId(zfFamily.getMid());
//        }
//        if(zfFamily!=null&&zfFamily.getMid()!=null) {
//            infoUser.setFatherId(zfFamily.getMid());
//            //   infoUser.setMomId(zfFamily.getMid());
//        }
//        System.out.println("-----");
//        System.out.println(userAll.getIsMyFamily());
        infoUser.setIsMyFamily(userAll.getIsMyFamily());
        if(userAll.getIsMyFamily()==1)
        {
            ZfFamily zfFamily = new ZfFamily();
            zfFamily.setName(userAll.getNickName()+"的家庭");
            zfFamilyService.addFamily(zfFamily);
            infoUser.setFamilyId(zfFamily.getId());
        }
//        if(userAll.getSpouseId()==0)
//            infoUser.setSpouseId(null);
//        else {
//            infoUser.setSpouseId(userAll.getSpouseId());
//
//        }
        if (userAll.getFid() != null && userAll.getMid() != null){
            //证明是本家的一个,增加进来的
            ZInfoUser father = zInfoUserService.getById(userAll.getFid());
            ZInfoUser mother = zInfoUserService.getById(userAll.getMid());
            //如果是本家,就简历一个家庭号
            if (father.getIsMyFamily() == 1){
           //     infoUser.setFamilyId(father.getFamilyId());
                infoUser.setClanId(father.getClanId());
            // ----- 5.2 创建新家庭(当用户标记为本家时) -----
            if (userAll.getIsMyFamily() == 1) {
                ZfFamily zfFamily = new ZfFamily();
                zfFamily.setName(userAll.getNickName() + "的家庭"); // 家庭名称
                zfFamilyService.addFamily(zfFamily);     // 创建家庭记录
                infoUser.setFamilyId(zfFamily.getId());  // 绑定家庭ID
            }
            else if (mother.getIsMyFamily() == 1){
             //   infoUser.setFamilyId(mother.getFamilyId());
                infoUser.setClanId(mother.getClanId());
            // ----- 5.3 家族关系继承逻辑 -----
            /* 继承优先级:父亲家族 → 母亲家族 → 配偶家族 */
            if (userAll.getFid() != null && userAll.getMid() != null) {
                // 5.3.1 获取父母信息
                ZInfoUser father = zInfoUserService.getById(userAll.getFid());
                ZInfoUser mother = zInfoUserService.getById(userAll.getMid());
                // 5.3.2 优先继承父亲家族(当父亲是本家)
                if (father.getIsMyFamily() == 1) {
                    infoUser.setClanId(father.getClanId());
                }
                // 5.3.3 其次继承母亲家族(当母亲是本家)
                else if (mother.getIsMyFamily() == 1) {
                    infoUser.setClanId(mother.getClanId());
                }
            } else {
                // 5.3.4 无父母信息时继承配偶家族
                ZInfoUser spouse = zInfoUserService.getById(userAll.getSpouseId());
                infoUser.setFamilyId(spouse.getFamilyId());
                infoUser.setClanId(spouse.getClanId());
            }
            // ----- 5.4 婚姻信息处理 -----
            // 5.4.1 初始化婚姻档案
            MarrySelf marrySelf = new MarrySelf();
            marrySelf.setUid(user.getUserId());
            marrySelf.setName(infoUser.getOldName());
            marrySelf.setSex(infoUser.getSex()==1?"男":"女");
            marrySelf.setMarryStatus(0);
            marrySelfService.save(marrySelf);
        }
        else {
            ZInfoUser spouse = zInfoUserService.getById(userAll.getSpouseId());
            infoUser.setFamilyId(spouse.getFamilyId());
            infoUser.setClanId(spouse.getClanId());
            //通过配偶的信息,更新marrySelf和增加marryUser表
            MarrySelf marrySelf = new MarrySelf();
 //           marrySelf.setUid(userAll.getSpouseId());
            marrySelf.setSpouseName(infoUser.getOldName());
            marrySelf.setSpouseSex(infoUser.getSex()==1?"男":"女");
            marrySelf.setMarryStatus(1);
            //修改条件
            QueryWrapper<MarrySelf> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("uid", userAll.getSpouseId());
            marrySelf.setUid(user.getUserId()); // 用户ID
            marrySelf.setName(userAll.getUserName()); // 姓名
            marrySelf.setSex(userAll.getSex().equals("0") ? "男" : "女"); // 性别转换
            // 婚姻状态(空值保护:0未婚)
            marrySelf.setMarryStatus(userAll.getMaritalStatus() == null ? 0 : userAll.getMaritalStatus());
            // 5.4.2 配偶存在时的特殊处理
            if (userAll.getSpouseId() != null) {
                // 自动设置已婚状态(默认值逻辑)
                infoUser.setMaritalStatus(userAll.getMaritalStatus() == null ? 1 : userAll.getMaritalStatus());
            marrySelfService.update(marrySelf, queryWrapper);
            //增加marryUser
            MarryUser marryUser = new MarryUser();
            marryUser.setUid(userAll.getSpouseId());
            marryUser.setName(infoUser.getOldName());
            marryUser.setSex(infoUser.getSex()==1?"男":"女");
            marryUser.setMarryStatus(0);
            marryUserService.addData(marryUser);
                // 获取配偶信息
                ZInfoUser byId = zInfoUserService.getById(userAll.getSpouseId());
        }
                // 更新本人婚姻档案
                marrySelf.setSpouseName(byId.getOldName()); // 配偶原名
                marrySelf.setMarryStatus(userAll.getMaritalStatus() == null ? 1 : userAll.getMaritalStatus());
                marrySelf.setSpouseSex(byId.getSex().equals(0) ? "男" : "女"); // 配偶性别
        //前端保证了角色不为空
     //   if(user.getRoleIds()[0]==102)
                // 5.4.3 更新配偶婚姻档案
                MarryInfoDto spouseDto = new MarryInfoDto();
                spouseDto.setUid(byId.getSysId()); // 配偶系统ID
                spouseDto.setSpouseName(userAll.getUserName()); // 当前用户名称
                spouseDto.setMarryStatus(userAll.getMaritalStatus() == null ? 1 : userAll.getMaritalStatus());
                spouseDto.setSpouseSex(marrySelf.getSex()); // 当前用户性别
                marrySelfService.updateData(spouseDto); // 持久化
            }
            marrySelfService.save(marrySelf); // 保存本人婚姻记录
        // infoUser.setRoleName(user.g);
            // ----- 5.5 家庭成员信息保存 -----
            if (userAll.getRoleId().equals(102L)) {
                infoUser.setRoleId(3L); // 设置家庭角色ID
                zInfoUserService.save(infoUser); // 保存家庭扩展信息
      //  if(userAll.getFamilyId()!=-1) {
        if(userAll.getRoleId().equals(102L)) {
            infoUser.setRoleId(3L);
            zInfoUserService.save(infoUser);
            if(userAll.getSpouseId()!=null)
            {
                //更新配偶信息
                ZInfoUser zu = new ZInfoUser();
                zu.setUserId(userAll.getSpouseId());
                zu.setSpouseId(infoUser.getUserId());
                Long spouseMoM = zInfoUserService.getById(userAll.getSpouseId()).getMomId();
                Long spouseDad = zInfoUserService.getById(userAll.getSpouseId()).getFatherId();
                zu.setMomId(spouseMoM);
                zu.setFatherId(spouseDad);
                zInfoUserService.updateById(zu);
                // 5.5.1 更新配偶关联信息
                if (userAll.getSpouseId() != null) {
                    ZInfoUser zu = new ZInfoUser();
                    zu.setUserId(userAll.getSpouseId()); // 配偶ID
                    zu.setSpouseId(infoUser.getUserId()); // 绑定当前用户
                    Long spouseMoM = zInfoUserService.getById(userAll.getSpouseId()).getMomId();
                    Long spouseDad = zInfoUserService.getById(userAll.getSpouseId()).getFatherId();
                    zu.setMomId(spouseMoM);
                    zu.setFatherId(spouseDad);
                    // 同步婚姻状态(空值保护:1已婚)
                    zu.setMaritalStatus(userAll.getMaritalStatus() == null ? 1 : userAll.getMaritalStatus());
                    zInfoUserService.updateById(zu); // 更新配偶记录
                }
            }
        }
        }
        //    zInfoUserService.saveOrUpdate(infoUser);
//            LambdaQueryWrapper<ZInfoUser> lqw = new LambdaQueryWrapper<>();
//            lqw.eq(ZInfoUser::getSpouseId, userAll.getSpouseId());
//            List<ZInfoUser> lis = zInfoUserService.list(lqw);
//            if(lis.size()>0) {
////                ZInfoUser zi = new ZInfoUser();
////                zi.setUserId(userAll.getSpouseId());
////              //  UpdateWrapper wrapper = new UpdateWrapper();
////                zi.setSpouseId(lis.get(0).getUserId());
////                System.out.println(userAll.getSpouseId());
////                System.out.println(lis.get(0).getUserId());
//                zInfoUserService.lambdaUpdate().eq(ZInfoUser::getUserId, userAll.getSpouseId())
//                        .set(ZInfoUser::getSpouseId, lis.get(0).getUserId())
//                        .update();
//            }
      //  }
        return AjaxResult.success();
        return AjaxResult.success(); // 操作成功响应
    }
    /**
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/MarrySelfController.java
@@ -81,7 +81,7 @@
            System.out.println("报错"+e.getMessage());
            return AjaxResult.error("更新失败");
        }
        return marrySelfService.updateData(marryInfoDto);
        return AjaxResult.success( marrySelfService.updateData(marryInfoDto));
    }
    //导出
ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java
@@ -7,7 +7,7 @@
 */
public enum UserStatus
{
    OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");
    OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"), ABNORMAL("3","异常");
    private final String code;
    private final String info;
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
@@ -52,6 +52,11 @@
            log.info("登录用户:{} 已被停用.", username);
            throw new ServiceException("对不起,您的账号:" + username + " 已停用");
        }
        else if (UserStatus.ABNORMAL.getCode().equals(user.getStatus()))
        {
            log.info("登录用户:{} 异常.", username);
            throw new ServiceException("对不起,您的账号:" + username + " 出现异常,请联系管理员");
        }
        passwordService.validate(user);
zhang-content/src/main/java/com/ruoyi/domain/sysUserAndUserInfo.java
@@ -75,4 +75,7 @@
    private Integer clanId;
    /** 婚姻状况(0:未婚,1:已婚,2:离婚) */
    private Integer maritalStatus;
}
zhang-content/src/main/java/com/ruoyi/service/MarrySelfService.java
@@ -14,5 +14,5 @@
public interface MarrySelfService extends IService<MarrySelf> {
    AjaxResult getInfo();
    AjaxResult updateData(MarryInfoDto marryInfoDto);
    Boolean updateData(MarryInfoDto marryInfoDto);
}
zhang-content/src/main/java/com/ruoyi/service/impl/MarrySelfServiceImpl.java
@@ -76,25 +76,27 @@
    }
    @Override
    public AjaxResult updateData(MarryInfoDto marryInfoDto) {
    public Boolean updateData(MarryInfoDto marryInfoDto) {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        Long userId = user.getUserId();
//        SysUser user = SecurityUtils.getLoginUser().getUser();
//        Long userId = user.getUserId();
        MarrySelf marrySelf = new MarrySelf();
        BeanUtils.copyProperties(marryInfoDto,marrySelf);
        marrySelf.setUid(userId);
        marrySelf.setUid(marryInfoDto.getUid());
        //先查询数据库中有没有本用户的数据
        LambdaQueryWrapper<MarrySelf> lqw = new LambdaQueryWrapper<>();
        lqw.eq(MarrySelf::getUid,userId);
        lqw.eq(MarrySelf::getUid,marryInfoDto.getUid());
        List<MarrySelf> list = list(lqw);
        if(list.isEmpty()){
            //如果是空的,那就是新增
            save(marrySelf);
        }else {
            //否则就是修改
            marrySelf.setId(list.get(0).getId());
            updateById(marrySelf);
@@ -103,6 +105,6 @@
        return AjaxResult.success();
        return true;
    }
}
zhang-content/src/main/java/com/ruoyi/service/impl/MarryUserServiceImpl.java
@@ -5,6 +5,7 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.domain.MarrySelf;
import com.ruoyi.domain.MarryUser;
import com.ruoyi.mapper.MarryUserMapper;
import com.ruoyi.service.MarryUserService;
@@ -44,11 +45,19 @@
    @Override
    public AjaxResult updateData(MarryUser marryUser) {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        Long userId = user.getUserId();
//        SysUser user = SecurityUtils.getLoginUser().getUser();
//        Long userId = user.getUserId();
//
//        marryUser.setUid(userId);
        marryUser.setUid(userId);
        updateById(marryUser);
        LambdaQueryWrapper<MarryUser> lqw = new LambdaQueryWrapper<>();
        lqw.eq(MarryUser::getUid,marryUser.getUid());
        List<MarryUser> list = list(lqw);
        if(list.size()>0) {
            marryUser.setId(list.get(0).getId());
            updateById(marryUser);
        }else save(marryUser);
        return AjaxResult.success();