无关风月
2024-11-11 41b9950b03bafeb5fa90770794faf9baeacade6b
代码提交
15个文件已修改
780 ■■■■■ 已修改文件
xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/domain/AppUser.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppCaptchaBody.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppWXLoginBody.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/domain/dto/AppUserDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/factory/RemoteAppUserFallbackFactory.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/feign/RemoteAppUserService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-auth/src/main/java/com/xinquan/auth/controller/TokenController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-auth/src/main/java/com/xinquan/auth/form/AppLoginBody.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-modules/xinquan-course/src/main/java/com/xinquan/course/controller/client/ClientCourseController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/controller/client/ClientOrderController.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/inner/InnerAppUserController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java 554 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/domain/AppUser.java
@@ -109,6 +109,9 @@
    @ApiModelProperty(value = "微信名称")
    @TableField("wxName")
    private String wxName;
    @ApiModelProperty(value = "设备码")
    @TableField("device")
    private String device;
    @ApiModelProperty(value = "会员到期时间")
    @TableField(value = "vip_expire_time",updateStrategy = FieldStrategy.IGNORED)
xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppCaptchaBody.java
@@ -27,4 +27,6 @@
    private String email;
    @ApiModelProperty(value = "姓名", required = false)
    private String name;
    @ApiModelProperty(value = "设备码", required = false)
    private String device;
}
xinquan-api/xinquan-api-system/src/main/java/com/xinquan/system/api/model/AppWXLoginBody.java
@@ -41,5 +41,7 @@
     */
    @ApiModelProperty(value = "用户性别 1男2女3保密")
    private Integer sex;
    @ApiModelProperty(value = "设备码")
    private String device;
}
xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/domain/dto/AppUserDTO.java
@@ -82,6 +82,8 @@
    @ApiModelProperty(value = "冻结原因")
    private String freezingReason;
    @ApiModelProperty(value = "设备码")
    private String device;
    @ApiModelProperty(value = "冻结操作人")
    private String freezingOperator;
xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/factory/RemoteAppUserFallbackFactory.java
@@ -181,7 +181,7 @@
            }
            @Override
            public R<AppLoginUser> appleLogin(String appleId, String source) {
            public R<AppLoginUser> appleLogin(String appleId, String device, String source) {
                return R.fail("APP用户苹果登录失败。");
            }
xinquan-api/xinquan-api-user/src/main/java/com/xinquan/user/api/feign/RemoteAppUserService.java
@@ -147,7 +147,7 @@
     * @return
     */
    @PostMapping("/inner/app-user/appleLogin")
    R<AppLoginUser> appleLogin(@RequestParam("appleId") String appleId,
    R<AppLoginUser> appleLogin(@RequestParam("appleId") String appleId,@RequestParam("appleId") String device,
            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
    /**
xinquan-auth/src/main/java/com/xinquan/auth/controller/TokenController.java
@@ -191,11 +191,14 @@
    @PostMapping("/app/appleLogin")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "appleId", value = "苹果ID", required = true, dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "device", value = "设备码", required = true, dataType = "String", paramType = "query"),
    }
    )
    public R<AppLoginUser> appleLogin(
            @RequestParam(value = "appleId", required = true) String appleId) {
        AppLoginUser appLoginUser = sysLoginService.appleLogin(appleId);
            @RequestParam(value = "appleId", required = true) String appleId,
            @RequestParam(value = "device", required = true) String device
    ) {
        AppLoginUser appLoginUser = sysLoginService.appleLogin(appleId,device);
        return R.ok(tokenService.createToken4AppLoginUser(appLoginUser));
    }
xinquan-auth/src/main/java/com/xinquan/auth/form/AppLoginBody.java
@@ -30,5 +30,7 @@
    @ApiModelProperty(value = "用户密码", required = true)
    @NotBlank(message = "密码不能为空")
    private String password;
    @ApiModelProperty(value = "设备码", required = false)
    private String device;
}
xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java
@@ -322,7 +322,7 @@
        }
        // 查询用户信息
        AppUser appUser = remoteAppUserService.getUserByCondition(
                AppUserDTO.builder().cellPhone(body.getCellPhone()).build(),
                AppUserDTO.builder().cellPhone(body.getCellPhone()).device(body.getDevice()).build(),
                SecurityConstants.INNER).getData();
        if (StringUtils.isNull(appUser)) {
            recordLogService.recordLogininfor(body.getCellPhone(), Constants.LOGIN_FAIL,
@@ -403,8 +403,8 @@
     * @param appleId 苹果id
     * @return
     */
    public AppLoginUser appleLogin(String appleId) {
        R<AppLoginUser> userResult = remoteAppUserService.appleLogin(appleId,
    public AppLoginUser appleLogin(String appleId,String device) {
        R<AppLoginUser> userResult = remoteAppUserService.appleLogin(appleId,device,
                SecurityConstants.INNER);
        if (R.FAIL == userResult.getCode()) {
            throw new ServiceException(userResult.getMsg());
xinquan-modules/xinquan-course/src/main/java/com/xinquan/course/controller/client/ClientCourseController.java
@@ -45,6 +45,7 @@
import io.swagger.annotations.ApiOperation;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -737,8 +738,11 @@
            List<AppUser> data3 = remoteAppUserService.getUserByCourseId(id).getData();
            cours.setCount(data3.size());
        }
        clientCourseVO.setList2(courses);
        clientCourseVO.setList2(courses);
        if (byId.getChargeType() == 1){
            byId.setGeneralPrice(new BigDecimal("0"));
        }
        return R.ok(clientCourseVO);
    }
    /**
@@ -802,6 +806,9 @@
            cours.setCount(data1.size());
        }
        clientCourseVO.setList2(courses);
        if (byId.getChargeType() == 1){
            byId.setGeneralPrice(new BigDecimal("0"));
        }
        return R.ok(clientCourseVO);
    }
@@ -1043,20 +1050,24 @@
            for (Long l : data1) {
                CourseChapter byId1 = courseChapterService.getById(l);
                Course byId = courseService.getById(byId1.getCourseId());
                CourseVO courseVO = new CourseVO();
                BeanUtils.copyProperties(byId, courseVO);
                List<CourseChapter> list1 = courseChapterService.lambdaQuery().eq(CourseChapter::getCourseId, byId1.getCourseId()).list();
                int a = 0;
                int b = 0;
                for (CourseChapter courseChapter : list1) {
                    a+= courseChapter.getVirtualLearnedNum();
                    Long data2 = remoteAppUserService.getCourseChapterHistoryCount(courseChapter.getId()).getData();
                    b+=data2;
                if (byId!=null){
                    CourseVO courseVO = new CourseVO();
                    BeanUtils.copyProperties(byId, courseVO);
                    List<CourseChapter> list1 = courseChapterService.lambdaQuery().eq(CourseChapter::getCourseId, byId1.getCourseId()).list();
                    int a = 0;
                    int b = 0;
                    for (CourseChapter courseChapter : list1) {
                        a+= courseChapter.getVirtualLearnedNum();
                        Long data2 = remoteAppUserService.getCourseChapterHistoryCount(courseChapter.getId()).getData();
                        b+=data2;
                    }
                    courseVO.setCount(a+b);
                    courseVO.setRealLearnedNum(a+b);
                    courseVO.setVirtualLearnedNum(0);
                    courseVO.setId(byId.getId());
                    courseVO.setCoverUrl(byId.getCoverUrl());
                    courseVOS.add(courseVO);
                }
                courseVO.setCount(a+b);
                courseVO.setRealLearnedNum(a+b);
                courseVO.setVirtualLearnedNum(0);
                courseVOS.add(courseVO);
            }
            studyPageVO.setCourseList(courseVOS);
            return R.ok(studyPageVO);
@@ -1082,7 +1093,6 @@
                studyPageVO.setFreeCourseList(courses);
            }
            studyPageVO.setCourseList(courseVOS);
            return R.ok(studyPageVO);
        }
xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/controller/client/ClientOrderController.java
@@ -179,11 +179,13 @@
            if (order.getAppUserId().equals(userId) && order.getGiveUserId() == null){
                OrderCourseVO orderCourseVO = new OrderCourseVO();
                BeanUtils.copyProperties(order, orderCourseVO);
                orderCourseVO.setBusinessId(order.getBusinessId());
                res.add(orderCourseVO);
            }
            if (order.getGiveUserId()!=null&&order.getGiveUserId().equals(userId)){
                OrderCourseVO orderCourseVO = new OrderCourseVO();
                BeanUtils.copyProperties(order, orderCourseVO);
                orderCourseVO.setBusinessId(order.getBusinessId());
                res.add(orderCourseVO);
            }
        }
@@ -203,6 +205,7 @@
                    break;
                case 2:
                    OrderCourseVO data = remoteCourseService.getCourseByIdAny(orderCourseVO).getData();
                    Course data4 = remoteCourseService.getCourseById(data.getBusinessId()).getData();
                    if (data==null)continue;
                    BeanUtils.copyProperties(data, orderCourseVO);
                    List<CourseChapter> data2 = remoteCourseService.getChapterByCourseId(orderCourseVO.getBusinessId() + "").getData();
@@ -212,6 +215,11 @@
                    }
                    Integer data3 = remoteCourseService.getCountByCourseId(orderCourseVO.getBusinessId() + "").getData();
                    orderCourseVO.setCount(data3+temp);
                    if (data4!=null){
                        orderCourseVO.setCourseTitle(data4.getCourseTitle());
                        orderCourseVO.setCoverUrl(data4.getCoverUrl());
                        orderCourseVO.setBusinessId(data4.getId());
                    }
                    break;
            }
        }
@@ -726,6 +734,9 @@
                    .eq(OrderPaymentRecord::getPayOrderNo, string).ne(OrderPaymentRecord::getPaymentStatus, 2).one();
            if (two!=null){
                Order one = orderService.getById(two.getOrderId());
                if (one.getPaymentStatus()==2){
                    return;
                }
                one.setPaymentStatus(2);
                one.setPaymentTime(LocalDateTime.now());
                OrderPaymentRecord one2 = orderPaymentRecordService.lambdaQuery().eq(OrderPaymentRecord::getOrderId, one.getId())
@@ -737,33 +748,45 @@
                // 实际支付金额
                BigDecimal realPayAmount = one.getRealPayAmount();
                // 判断订单所属用户是否有上级 是否需要做分佣处理
                AppUser data3 = remoteAppUserService.getAppUserById(one.getAppUserId() + "").getData();
                if (data3.getInviteUserId()!=null){
                    // 分佣给上级 先远程查询分佣比例
                    CommissionRule data1 = sysUserClient.getCommission().getData();
                    if (data1!=null){
                        if (data1.getProportion()!=null){
                            BigDecimal bigDecimal = realPayAmount.multiply(data1.getProportion())
                                    .setScale(2, BigDecimal.ROUND_HALF_DOWN);
                            // 上级获取的分佣金额
                            AppUser appUserById = remoteAppUserService.getAppUserById(data3.getInviteUserId() + "").getData();
                            // 更新用户余额
                            remoteAppUserService.updateAppUser(
                                    AppUserDTO.builder().balance(
                                                    appUserById.getBalance().add(bigDecimal))
                                            .build(), SecurityConstants.INNER);
                            // 新增分佣流水明细
                            AppUserWalletRecord appUserWalletRecord = new AppUserWalletRecord();
                            appUserWalletRecord.setAppUserId(data3.getInviteUserId());
                            appUserWalletRecord.setChangeType(1);
                            appUserWalletRecord.setReason("分佣收益");
                            appUserWalletRecord.setAmount(bigDecimal);
                            appUserWalletRecord.setChildAppUserId(one.getAppUserId());
                            appUserWalletRecord.setOrderId(one.getId());
                            remoteAppUserService.addBalanceRecord(appUserWalletRecord);
                            one.setCommissionAmount(bigDecimal);
                            one.setCommissionId(data3.getInviteUserId());
                            orderService.updateById(one);
                AppUser data9 = remoteAppUserService.getAppUserById(one.getAppUserId() + "").getData();
                if (one.getGiveUserId()!=null){
                    remoteAppUserService.addNotice(one.getGiveUserId() + "", one.getBusinessId() + "",
                            one.getAppUserId() + "", one.getTotalAmount() + "");
                }
                if (data9.getInviteUserId()!=null) {
                    if (one.getOrderFrom() == 1 || one.getOrderFrom() == 2 || one.getOrderFrom() == 3) {
                        // 查询实际支付价格 不包含余额抵扣价格
                        OrderPaymentRecord one1 = orderPaymentRecordService.lambdaQuery().eq(OrderPaymentRecord::getOrderId, one.getId())
                                .ne(OrderPaymentRecord::getPaymentType, 4).one();
                        // 分佣给上级 先远程查询分佣比例
                        CommissionRule data1 = sysUserClient.getCommission().getData();
                        if (data1 != null) {
                            if (data1.getProportion() != null) {
                                BigDecimal bigDecimal = one1.getPayAmount().multiply(data1.getProportion()).divide(new BigDecimal("100"))
                                        .setScale(2, BigDecimal.ROUND_HALF_DOWN);
                                // 上级获取的分佣金额
                                AppUser appUserById = remoteAppUserService.getAppUserById(data9.getInviteUserId() + "").getData();
                                // 更新用户余额
//                            remoteAppUserService.updateAppUser(
//                                    AppUserDTO.builder().balance(
//                                                    appUserById.getBalance().add(bigDecimal))
//                                            .build(), SecurityConstants.INNER);
                                // 新增分佣流水明细
                                AppUserWalletRecord appUserWalletRecord = new AppUserWalletRecord();
                                appUserWalletRecord.setAppUserId(data9.getInviteUserId());
                                appUserWalletRecord.setChangeType(1);
                                appUserWalletRecord.setReason("分佣收益");
                                appUserWalletRecord.setAmount(bigDecimal);
                                appUserWalletRecord.setChildAppUserId(one.getAppUserId());
                                appUserWalletRecord.setOrderId(one.getId());
                                remoteAppUserService.addBalanceRecord(appUserWalletRecord);
                                one.setCommissionAmount(bigDecimal);
                                one.setCommissionId(data9.getInviteUserId());
                                orderService.updateById(one);
                            }
                        }
                    }
                }
@@ -772,7 +795,7 @@
                    OrderPaymentRecord one1 = orderPaymentRecordService.lambdaQuery().eq(OrderPaymentRecord::getOrderId, one.getId())
                            .eq(OrderPaymentRecord::getPaymentType, 4).one();
                    AppUserWalletRecord appUserWalletRecord = new AppUserWalletRecord();
                    appUserWalletRecord.setAppUserId(data3.getInviteUserId());
                    appUserWalletRecord.setAppUserId(data9.getInviteUserId());
                    String reason=null;
                    switch (one.getOrderFrom()){
                        case 1:
@@ -797,35 +820,6 @@
                            // 会员
                            reason = "购买【"+one.getBuyContent()+"】";
                            appUserWalletRecord.setChangeType(2);
                            if (data3.getInviteUserId()!=null){
                                // 分佣给上级 先远程查询分佣比例
                                CommissionRule data4 = sysUserClient.getCommission().getData();
                                if (data4!=null){
                                    if (data4.getProportion()!=null){
                                        BigDecimal bigDecimal = realPayAmount.multiply(data4.getProportion())
                                                .divide(new BigDecimal(100),2, BigDecimal.ROUND_DOWN);
                                        // 上级获取的分佣金额
                                        AppUser appUserById = remoteAppUserService.getAppUserById(data3.getInviteUserId() + "").getData();
                                        // 更新用户余额
                                        remoteAppUserService.updateAppUser(
                                                AppUserDTO.builder().balance(
                                                                appUserById.getBalance().add(bigDecimal))
                                                        .build(), SecurityConstants.INNER);
                                        // 新增分佣流水明细
                                        AppUserWalletRecord appUserWalletRecord1 = new AppUserWalletRecord();
                                        appUserWalletRecord1.setAppUserId(data3.getInviteUserId());
                                        appUserWalletRecord1.setChangeType(1);
                                        appUserWalletRecord1.setReason("分佣收益");
                                        appUserWalletRecord1.setAmount(bigDecimal);
                                        appUserWalletRecord1.setChildAppUserId(one.getAppUserId());
                                        appUserWalletRecord1.setOrderId(one.getId());
                                        remoteAppUserService.addBalanceRecord(appUserWalletRecord1);
                                        one.setCommissionAmount(bigDecimal);
                                        one.setCommissionId(data3.getInviteUserId());
                                        orderService.updateById(one);
                                    }
                                }
                            }
                            break;
                        case 4:
                            // 充值
@@ -838,6 +832,41 @@
                    appUserWalletRecord.setChildAppUserId(one.getAppUserId());
                    appUserWalletRecord.setOrderId(one.getId());
                    remoteAppUserService.addBalanceRecord(appUserWalletRecord);
                }else{
                    switch (one.getOrderFrom()){
                        case 2:
                            Course data2 = remoteCourseService.getCourseById(one.getBusinessId()).getData();
                            // 增加用户与课程的关系表
                            if (one.getGiveUserId()!=null){
                                remoteAppUserService.addAppUserCourse(one.getBusinessId(),one.getGiveUserId(),one.getId(),1);
                            }else{
                                // 自己购买
                                remoteAppUserService.addAppUserCourse(one.getBusinessId(),one.getAppUserId(),one.getId(),2);
                            }
                            break;
                        case 3:
                            // 会员
                            if (one.getBuyContent().contains("月")){
                                remoteAppUserService.addVipExpireTime(one.getAppUserId(),1);
                            }else if (one.getBuyContent().contains("季")){
                                remoteAppUserService.addVipExpireTime(one.getAppUserId(),2);
                            }else if (one.getBuyContent().contains("年")){
                                remoteAppUserService.addVipExpireTime(one.getAppUserId(),3);
                            }
                            break;
                        case 4:
                            remoteAppUserService.addBalance(one.getAppUserId(),one.getRealPayAmount());
                            AppUserWalletRecord appUserWalletRecord = new AppUserWalletRecord();
                            appUserWalletRecord.setAppUserId(one.getAppUserId());
                            appUserWalletRecord.setChangeType(1);
                            appUserWalletRecord.setReason("充值");
                            appUserWalletRecord.setAmount(one.getRealPayAmount());
                            appUserWalletRecord.setChildAppUserId(one.getAppUserId());
                            appUserWalletRecord.setOrderId(one.getId());
                            remoteAppUserService.addBalanceRecord(appUserWalletRecord);
                            break;
                    }
                }
                PrintWriter out = response.getWriter();
                out.write("succeeded");
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserController.java
@@ -1330,7 +1330,7 @@
            consecutiveDays++;
            currentDate = currentDate.minusDays(1);
        }
        appUserInfoVO.setToday(consecutiveDays);
        appUserInfoVO.setContinuity(consecutiveDays);
        AppUserTree list1 = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, userId)
                .eq(AppUserTree::getSowAgain,2)
                .one();
@@ -1408,7 +1408,6 @@
            currentDate = currentDate.minusDays(1);
        }
        appUser.setContinuity(consecutiveDays);
        appUser.setToday(consecutiveDays);
        // 根据等级查询疗愈名称和图标
        UserLevelSetting data = remoteBannerService.getIconNameByLevel(level).getData();
        appUser.setLevelName(data.getLevelName());
@@ -1610,11 +1609,7 @@
    @PostMapping("/saveUserAnswers")
    @ApiOperation(value = "保存计划引导页用户的答案", tags = {"用户端-计划引导相关接口"})
    public R<?> saveUserAnswers(@Validated @RequestBody UserAnswerDTO dto) {
        LoginUser loginUser = tokenService.getLoginUser();
        if (loginUser==null){
            return R.tokenError("登录失效");
        }
        Long userId = loginUser.getUserid();
        appUserService.saveUserAnswers(dto);
        return R.ok();
    }
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/inner/InnerAppUserController.java
@@ -75,8 +75,8 @@
     */
    @InnerAuth
    @PostMapping("/appleLogin")
    R<AppLoginUser> appleLogin(@RequestParam("appleId") String appleId) {
        return R.ok(appUserService.appleLogin(appleId));
    R<AppLoginUser> appleLogin(@RequestParam("appleId") String appleId,@RequestParam("device") String device) {
        return R.ok(appUserService.appleLogin(appleId,device));
    }
    /**
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/AppUserService.java
@@ -56,7 +56,7 @@
     * @param source
     * @return
     */
    AppLoginUser appleLogin(String appleId);
    AppLoginUser appleLogin(String appleId,String device);
    /**
     * 验证码登录
xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/service/impl/AppUserServiceImpl.java
@@ -2,8 +2,8 @@
import cn.hutool.core.util.IdUtil;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xinquan.common.core.constant.Constants;
@@ -44,6 +44,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
/**
 * <p>
@@ -70,20 +71,37 @@
     */
    @Override
    public Optional<AppUser> getUserByCondition(AppUserDTO dto) {
        String device = dto.getDevice();
        if (StringUtils.hasLength(dto.getDevice())) {
            Optional<AppUser> one = this.lambdaQuery()
                    .eq(AppUser::getDevice, device)
                    .isNull(AppUser::getCellPhone).oneOpt();
            if (one.isPresent()) {
                initUserTree(one.get().getId());
                this.updateById(one.get());
                return one;
            } else {
               return this.lambdaQuery()
                        .eq(Objects.nonNull(dto.getId()), AppUser::getId, dto.getId())
                        .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getAppleId()), AppUser::getAppleId, dto.getAppleId())
                        .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getCellPhone()), AppUser::getCellPhone,
                                dto.getCellPhone())
                        .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getWxOpenId()), AppUser::getWxOpenId,
                                dto.getWxOpenId())
                        .ne(AppUser::getUserStatus, AppUserStatusEnum.LOGOUT.getCode()).oneOpt();
            }
        }
        return this.lambdaQuery()
                .eq(Objects.nonNull(dto.getId()), AppUser::getId, dto.getId())
                .eq(StringUtils.isNotBlank(dto.getAppleId()), AppUser::getAppleId, dto.getAppleId())
                .eq(StringUtils.isNotBlank(dto.getCellPhone()), AppUser::getCellPhone,
                .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getAppleId()), AppUser::getAppleId, dto.getAppleId())
                .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getCellPhone()), AppUser::getCellPhone,
                        dto.getCellPhone())
                .eq(StringUtils.isNotBlank(dto.getWxOpenId()), AppUser::getWxOpenId,
                .eq(com.alibaba.nacos.common.utils.StringUtils.isNotBlank(dto.getWxOpenId()), AppUser::getWxOpenId,
                        dto.getWxOpenId())
                .ne(AppUser::getUserStatus, AppUserStatusEnum.LOGOUT.getCode()).oneOpt();
    }
    public static void main(String[] args) {
        String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
        System.err.println(randomCode);
    }
    /**
     * app用户注册
     * @param appUserDTO
@@ -113,8 +131,8 @@
        AppLoginUser appLoginUser = new AppLoginUser();
        Optional<AppUser> optionalAppUser = this.getUserByCondition(
                AppUserDTO.builder().wxOpenId(body.getWxOpenId()).build());
        AppUser appUser;
        SysUser sysUser;
        AppUser appUser = new AppUser();
        SysUser sysUser = new SysUser();
        // 存在账户,查询关联系统用户
        if (optionalAppUser.isPresent()) {
            appUser = optionalAppUser.get();
@@ -129,44 +147,93 @@
                appLoginUser.setCellPhone(appUser.getCellPhone());
            }
        } else {
            // 不存在账户,创建账户
            // 注册用户信息
            sysUser = new SysUser();
            sysUser.setNickName(body.getNickname());
            sysUser.setAvatar(body.getHeadImgUrl());
            sysUser.setUserName(body.getNickname());
            sysUser.setUserType("01"); // app用户
            R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                    SecurityConstants.INNER);
            if (registerResult.getCode() == Constants.FAIL) {
                throw new ServiceException(registerResult.getMsg());
            if (org.springframework.util.StringUtils.hasLength(body.getDevice())){
                AppUser one = this.getOne(new LambdaQueryWrapper<>(AppUser.class)
                        .eq(AppUser::getDevice, body.getDevice())
                        .isNull(AppUser::getCellPhone));
                if (one!=null){
                    initUserTree(appUser.getId());
                    appUser = one;
                }else{
                    // 不存在账户,创建账户
                    // 注册用户信息
                    sysUser = new SysUser();
                    sysUser.setNickName(body.getNickname());
                    sysUser.setAvatar(body.getHeadImgUrl());
                    sysUser.setUserName(body.getNickname());
                    sysUser.setUserType("01"); // app用户
                    R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                            SecurityConstants.INNER);
                    if (registerResult.getCode() == Constants.FAIL) {
                        throw new ServiceException(registerResult.getMsg());
                    }
                    SysUser sysUserRes = registerResult.getData();
                    appUser = new AppUser();
                    appUser.setUserId(sysUserRes.getUserId());
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                    String format = simpleDateFormat.format(new Date());
                    // 生成四位随机数字
                    String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                    appUser.setCode("YH"+format+randomCode);
                    appUser.setWxOpenId(body.getWxOpenId());
                    String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                    sysUser.setNickName(nickname);
                    appUser.setNickname(nickname);
                    appUser.setWxName(body.getNickname());
                    appUser.setAvatar(body.getHeadImgUrl());
                    appUser.setGender(3);
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setIncome(BigDecimal.ZERO);
                    appUser.setTotalEnergyValue(0);
                    appUser.setRegisterTime(LocalDateTime.now());
                    appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                    appLoginUser.setBindStatus(DisabledEnum.YES.getCode());
                    this.save(appUser);
                    // 初始化用户树苗
                    initUserTree(appUser.getId());
                }
            }else{
                // 不存在账户,创建账户
                // 注册用户信息
                sysUser = new SysUser();
                sysUser.setNickName(body.getNickname());
                sysUser.setAvatar(body.getHeadImgUrl());
                sysUser.setUserName(body.getNickname());
                sysUser.setUserType("01"); // app用户
                R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                        SecurityConstants.INNER);
                if (registerResult.getCode() == Constants.FAIL) {
                    throw new ServiceException(registerResult.getMsg());
                }
                SysUser sysUserRes = registerResult.getData();
                appUser = new AppUser();
                appUser.setUserId(sysUserRes.getUserId());
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                String format = simpleDateFormat.format(new Date());
                // 生成四位随机数字
                String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                appUser.setCode("YH"+format+randomCode);
                appUser.setWxOpenId(body.getWxOpenId());
                String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                sysUser.setNickName(nickname);
                appUser.setNickname(nickname);
                appUser.setWxName(body.getNickname());
                appUser.setAvatar(body.getHeadImgUrl());
                appUser.setGender(3);
                appUser.setBalance(BigDecimal.ZERO);
                appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                appUser.setBalance(BigDecimal.ZERO);
                appUser.setIncome(BigDecimal.ZERO);
                appUser.setTotalEnergyValue(0);
                appUser.setRegisterTime(LocalDateTime.now());
                appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                appLoginUser.setBindStatus(DisabledEnum.YES.getCode());
                this.save(appUser);
                // 初始化用户树苗
                initUserTree(appUser.getId());
            }
            SysUser sysUserRes = registerResult.getData();
            appUser = new AppUser();
            appUser.setUserId(sysUserRes.getUserId());
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            String format = simpleDateFormat.format(new Date());
            // 生成四位随机数字
            String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
            appUser.setCode("YH"+format+randomCode);
            appUser.setWxOpenId(body.getWxOpenId());
            String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
            sysUser.setNickName(nickname);
            appUser.setNickname(nickname);
            appUser.setWxName(body.getNickname());
            appUser.setAvatar(body.getHeadImgUrl());
            appUser.setGender(3);
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setSanskritFlag(DisabledEnum.NO.getCode());
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setIncome(BigDecimal.ZERO);
            appUser.setTotalEnergyValue(0);
            appUser.setRegisterTime(LocalDateTime.now());
            appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
            appLoginUser.setBindStatus(DisabledEnum.YES.getCode());
            this.save(appUser);
            // 初始化用户树苗
            initUserTree(appUser.getId());
        }
        appLoginUser.setUserid(sysUser.getUserId());
        appLoginUser.setUsername(appUser.getNickname());
@@ -180,12 +247,12 @@
    }
    @Override
    public AppLoginUser appleLogin(String appleId) {
    public AppLoginUser appleLogin(String appleId,String device) {
        AppLoginUser appLoginUser = new AppLoginUser();
        Optional<AppUser> optionalAppUser = this.getUserByCondition(
                AppUserDTO.builder().appleId(appleId).build());
        SysUser sysUser;
        AppUser appUser;
        SysUser sysUser = new SysUser();
        AppUser appUser = new AppUser();
        // 存在账户,查询关联系统用户
        if (optionalAppUser.isPresent()) {
            appUser = optionalAppUser.get();
@@ -193,120 +260,174 @@
                throw new ServiceException("账号已被冻结");
            }
            sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData();
            if (appUser.getCellPhone()!=null){
            if (appUser.getCellPhone() != null) {
                appLoginUser.setBindStatus(DisabledEnum.NO.getCode());
                appLoginUser.setCellPhone(appUser.getCellPhone());
            }
        } else {
            // 不存在账户,创建账户
            // 注册用户信息
            sysUser = new SysUser();
            String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
            sysUser.setNickName(nickname);
            sysUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg");
            sysUser.setUserName(nickname);
            sysUser.setUserType("01"); // app用户
            R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                    SecurityConstants.INNER);
            if (registerResult.getCode() == Constants.FAIL) {
                throw new ServiceException(registerResult.getMsg());
            if (org.springframework.util.StringUtils.hasLength(device)) {
                AppUser one = this.getOne(new LambdaQueryWrapper<>(AppUser.class)
                        .eq(AppUser::getDevice, device)
                        .isNull(AppUser::getCellPhone));
                if (one != null) {
                    initUserTree(one.getId());
                    appUser.setAppleId(appleId);
                    appUser = one;
                    this.updateById(appUser);
                } else {
                    // 不存在账户,创建账户
                    // 注册用户信息
                    sysUser = new SysUser();
                    String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                    sysUser.setNickName(nickname);
                    sysUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg");
                    sysUser.setUserName(nickname);
                    sysUser.setUserType("01"); // app用户
                    R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                            SecurityConstants.INNER);
                    if (registerResult.getCode() == Constants.FAIL) {
                        throw new ServiceException(registerResult.getMsg());
                    }
                    SysUser sysUserRes = registerResult.getData();
                    appUser = new AppUser();
                    appUser.setAppleId(appleId);
                    appUser.setUserId(sysUserRes.getUserId());
                    appUser.setNickname(nickname);
                    appUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg"); // TODO 待完善默认头像
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setIncome(BigDecimal.ZERO);
                    appUser.setTotalEnergyValue(0);
                    appUser.setRegisterTime(LocalDateTime.now());
                    appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                    String format = simpleDateFormat.format(new Date());
                    // 生成四位随机数字
                    String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                    appUser.setCode("YH" + format + randomCode);
                    this.save(appUser);
                    // 初始化用户树苗
                    initUserTree(appUser.getId());
                }
            }
            SysUser sysUserRes = registerResult.getData();
            appUser = new AppUser();
            appUser.setAppleId(appleId);
            appUser.setUserId(sysUserRes.getUserId());
            appUser.setNickname(nickname);
            appUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg"); // TODO 待完善默认头像
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setSanskritFlag(DisabledEnum.NO.getCode());
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setIncome(BigDecimal.ZERO);
            appUser.setTotalEnergyValue(0);
            appUser.setRegisterTime(LocalDateTime.now());
            appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            String format = simpleDateFormat.format(new Date());
            // 生成四位随机数字
            String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
            appUser.setCode("YH"+format+randomCode);
            this.save(appUser);
            // 初始化用户树苗
            initUserTree(appUser.getId());
        }
        appLoginUser.setUserid(sysUser.getUserId());
        appLoginUser.setUsername(appUser.getNickname());
        appLoginUser.setAppUserId(appUser.getId());
        appLoginUser.setSysUser(sysUser);
//        if (Objects.nonNull(sysUser.getUserName())) {
//            appLoginUser.setBindStatus(DisabledEnum.YES.getCode());
//            appLoginUser.setCellPhone(appUser.getCellPhone());
//        }
        return appLoginUser;
    }
            appLoginUser.setUserid(sysUser.getUserId());
            appLoginUser.setUsername(appUser.getNickname());
            appLoginUser.setAppUserId(appUser.getId());
            appLoginUser.setSysUser(sysUser);
            return appLoginUser;
        }
    /**
     * 验证码登录
     *
     * @param body
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public AppLoginUser appCaptchaLogin(AppCaptchaBody body) {
        AppLoginUser appLoginUser = new AppLoginUser();
        Optional<AppUser> optionalAppUser = this.getUserByCondition(
                AppUserDTO.builder().cellPhone(body.getCellPhone()).build());
        AppUser appUser;
        SysUser sysUser;
        if (optionalAppUser.isPresent()) {
            appUser = optionalAppUser.get();
            sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData();
        } else {
            // 注册用户信息
            sysUser = new SysUser();
            String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
            sysUser.setNickName(nickname);
            sysUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg");
            sysUser.setUserName(body.getCellPhone());
            sysUser.setUserType("01"); // app用户
            // 设置默认密码123456
            sysUser.setPassword(SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD));
        /**
         * 验证码登录
         *
         * @param body
         * @return
         */
        @Override
        @Transactional(rollbackFor = Exception.class)
        public AppLoginUser appCaptchaLogin (AppCaptchaBody body){
            AppLoginUser appLoginUser = new AppLoginUser();
            Optional<AppUser> optionalAppUser = this.getUserByCondition(
                    AppUserDTO.builder().cellPhone(body.getCellPhone()).build());
            AppUser appUser = new AppUser();
            SysUser sysUser = new SysUser();
            if (optionalAppUser.isPresent()) {
                appUser = optionalAppUser.get();
                sysUser = sysUserClient.getSysUser(appUser.getUserId()).getData();
            } else {
                if (org.springframework.util.StringUtils.hasLength(body.getDevice())) {
                    AppUser one = this.getOne(new LambdaQueryWrapper<>(AppUser.class)
                            .eq(AppUser::getDevice, body.getDevice())
                            .isNull(AppUser::getCellPhone));
                    if (one != null) {
                        initUserTree(appUser.getId());
                        appUser = one;
                    } else {
                        // 注册用户信息
                        sysUser = new SysUser();
                        String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                        sysUser.setNickName(nickname);
                        sysUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg");
                        sysUser.setUserName(body.getCellPhone());
                        sysUser.setUserType("01"); // app用户
                        // 设置默认密码123456
                        sysUser.setPassword(SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD));
            R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                    SecurityConstants.INNER);
            if (registerResult.getCode() == Constants.FAIL) {
                throw new ServiceException(registerResult.getMsg());
                        R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                                SecurityConstants.INNER);
                        if (registerResult.getCode() == Constants.FAIL) {
                            throw new ServiceException(registerResult.getMsg());
                        }
                        SysUser sysUserRes = registerResult.getData();
                        appUser = new AppUser();
                        appUser.setUserId(sysUserRes.getUserId());
                        appUser.setNickname(nickname);
                        appUser.setCellPhone(body.getCellPhone());
                        appUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg"); // TODO 待完善默认头像
                        appUser.setBalance(BigDecimal.ZERO);
                        appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                        appUser.setBalance(BigDecimal.ZERO);
                        appUser.setIncome(BigDecimal.ZERO);
                        appUser.setTotalEnergyValue(0);
                        appUser.setRegisterTime(LocalDateTime.now());
                        appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                        String format = simpleDateFormat.format(new Date());
                        // 生成四位随机数字
                        String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                        appUser.setCode("YH" + format + randomCode);
                        this.save(appUser);
                        // 初始化用户树苗
                        initUserTree(appUser.getId());
                    }
                } else {
                    // 注册用户信息
                    sysUser = new SysUser();
                    String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                    sysUser.setNickName(nickname);
                    sysUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg");
                    sysUser.setUserName(body.getCellPhone());
                    sysUser.setUserType("01"); // app用户
                    // 设置默认密码123456
                    sysUser.setPassword(SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD));
                    R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                            SecurityConstants.INNER);
                    if (registerResult.getCode() == Constants.FAIL) {
                        throw new ServiceException(registerResult.getMsg());
                    }
                    SysUser sysUserRes = registerResult.getData();
                    appUser = new AppUser();
                    appUser.setUserId(sysUserRes.getUserId());
                    appUser.setNickname(nickname);
                    appUser.setCellPhone(body.getCellPhone());
                    appUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg"); // TODO 待完善默认头像
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                    appUser.setBalance(BigDecimal.ZERO);
                    appUser.setIncome(BigDecimal.ZERO);
                    appUser.setTotalEnergyValue(0);
                    appUser.setRegisterTime(LocalDateTime.now());
                    appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                    String format = simpleDateFormat.format(new Date());
                    // 生成四位随机数字
                    String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                    appUser.setCode("YH" + format + randomCode);
                    this.save(appUser);
                    // 初始化用户树苗
                    initUserTree(appUser.getId());
                }
            }
            SysUser sysUserRes = registerResult.getData();
            appUser = new AppUser();
            appUser.setUserId(sysUserRes.getUserId());
            appUser.setNickname(nickname);
            appUser.setCellPhone(body.getCellPhone());
            appUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg"); // TODO 待完善默认头像
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setSanskritFlag(DisabledEnum.NO.getCode());
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setIncome(BigDecimal.ZERO);
            appUser.setTotalEnergyValue(0);
            appUser.setRegisterTime(LocalDateTime.now());
            appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            String format = simpleDateFormat.format(new Date());
            // 生成四位随机数字
            String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
            appUser.setCode("YH"+format+randomCode);
            this.save(appUser);
            // 初始化用户树苗
            initUserTree(appUser.getId());
            appLoginUser.setUserid(sysUser.getUserId());
            appLoginUser.setUsername(appUser.getNickname());
            appLoginUser.setAppUserId(appUser.getId());
            appLoginUser.setSysUser(sysUser);
            appLoginUser.setCellPhone(appUser.getCellPhone());
            return appLoginUser;
        }
        appLoginUser.setUserid(sysUser.getUserId());
        appLoginUser.setUsername(appUser.getNickname());
        appLoginUser.setAppUserId(appUser.getId());
        appLoginUser.setSysUser(sysUser);
        appLoginUser.setCellPhone(appUser.getCellPhone());
        return appLoginUser;
    }
    /**
     * 初始化用户树苗
@@ -434,37 +555,108 @@
     */
    @Override
    public void saveUserAnswers(UserAnswerDTO dto) {
        // 获取当前登录用户
        Long userId = tokenService.getLoginUser().getUserid();
        AppUser appUser = this.getById(userId);
        List<AppUserQuestion> appUserQuestionList = BeanUtils.copyList(
                dto.getUserAnswerOneDTOList(), AppUserQuestion.class);
        // 查询用户已填写的答案
        List<AppUserQuestion> baseAppUserQuestionList = appUserQuestionService.lambdaQuery()
                .eq(AppUserQuestion::getAppUserId, appUser.getUserId())
                .list();
        if (CollUtils.isNotEmpty(baseAppUserQuestionList)) {
            // 根据类型更新答案
            for (AppUserQuestion appUserQuestion : appUserQuestionList) {
        if (tokenService.getLoginUser()==null){
            // 获取当前登录用户
            if (org.springframework.util.StringUtils.hasLength(dto.getDevice())){
                SysUser sysUser = new SysUser();
                AppUser appUser = new AppUser();
                // 注册用户信息
                sysUser = new SysUser();
                String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6);
                sysUser.setNickName(nickname);
                sysUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg");
                sysUser.setUserName(dto.getDevice());
                sysUser.setUserType("01"); // app用户
                // 设置默认密码123456
                sysUser.setPassword(SecurityUtils.encryptPassword(Constants.DEFAULT_PASSWORD));
                Optional<AppUserQuestion> baseAppUserQuestionOptional = baseAppUserQuestionList.stream()
                        .filter(baseAppUserQuestion -> baseAppUserQuestion.getType()
                                .equals(appUserQuestion.getType())).findFirst();
                baseAppUserQuestionOptional.ifPresent(
                        userQuestion -> appUserQuestion.setId(userQuestion.getId()));
                R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser,
                        SecurityConstants.INNER);
                if (registerResult.getCode() == Constants.FAIL) {
                    throw new ServiceException(registerResult.getMsg());
                }
                SysUser sysUserRes = registerResult.getData();
                appUser = new AppUser();
                appUser.setUserId(sysUserRes.getUserId());
                appUser.setNickname(nickname);
                appUser.setAvatar("https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/Logo%E7%A1%AE%E8%AE%A4%E7%89%88%281%29.jpg"); // TODO 待完善默认头像
                appUser.setBalance(BigDecimal.ZERO);
                appUser.setSanskritFlag(DisabledEnum.NO.getCode());
                appUser.setBalance(BigDecimal.ZERO);
                appUser.setIncome(BigDecimal.ZERO);
                appUser.setTotalEnergyValue(0);
                appUser.setRegisterTime(LocalDateTime.now());
                appUser.setLevelSettingId(TreeLevelEnum.SEED.getCode());
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
                String format = simpleDateFormat.format(new Date());
                // 生成四位随机数字
                String randomCode = String.valueOf((int) ((Math.random() * 9 + 1) * 1000));
                appUser.setCode("YH"+format+randomCode);
                this.save(appUser);
                    Long userId = appUser.getId();
                    List<AppUserQuestion> appUserQuestionList = BeanUtils.copyList(
                            dto.getUserAnswerOneDTOList(), AppUserQuestion.class);
                    // 查询用户已填写的答案
                    List<AppUserQuestion> baseAppUserQuestionList = appUserQuestionService.lambdaQuery()
                            .eq(AppUserQuestion::getAppUserId, appUser.getUserId())
                            .list();
                    if (CollUtils.isNotEmpty(baseAppUserQuestionList)) {
                        // 根据类型更新答案
                        for (AppUserQuestion appUserQuestion : appUserQuestionList) {
                            Optional<AppUserQuestion> baseAppUserQuestionOptional = baseAppUserQuestionList.stream()
                                    .filter(baseAppUserQuestion -> baseAppUserQuestion.getType()
                                            .equals(appUserQuestion.getType())).findFirst();
                            baseAppUserQuestionOptional.ifPresent(
                                    userQuestion -> appUserQuestion.setId(userQuestion.getId()));
                            appUserQuestion.setAppUserId(userId);
                        }
                    }
                    for (AppUserQuestion appUserQuestion : appUserQuestionList) {
                        appUserQuestion.setAppUserId(userId);
                    }
                    appUserQuestionService.saveOrUpdateBatch(appUserQuestionList);
                    // 筛选答案为是和偶尔有的问题,为用户设置对应的标签
                    List<AppUserQuestion> appUserQuestionYesList = appUserQuestionList.stream()
                            .filter(appUserQuestion -> appUserQuestion.getAnswer().equals("1")
                                    || appUserQuestion.getAnswer().equals("3")).collect(Collectors.toList());
                    appUser.setTagId(dto.getTagIds());
                    this.updateById(appUser);
                }
        }else{
            Long userId = tokenService.getLoginUser().getUserid();
            AppUser appUser = this.getById(userId);
            List<AppUserQuestion> appUserQuestionList = BeanUtils.copyList(
                    dto.getUserAnswerOneDTOList(), AppUserQuestion.class);
            // 查询用户已填写的答案
            List<AppUserQuestion> baseAppUserQuestionList = appUserQuestionService.lambdaQuery()
                    .eq(AppUserQuestion::getAppUserId, appUser.getUserId())
                    .list();
            if (CollUtils.isNotEmpty(baseAppUserQuestionList)) {
                // 根据类型更新答案
                for (AppUserQuestion appUserQuestion : appUserQuestionList) {
                    Optional<AppUserQuestion> baseAppUserQuestionOptional = baseAppUserQuestionList.stream()
                            .filter(baseAppUserQuestion -> baseAppUserQuestion.getType()
                                    .equals(appUserQuestion.getType())).findFirst();
                    baseAppUserQuestionOptional.ifPresent(
                            userQuestion -> appUserQuestion.setId(userQuestion.getId()));
                    appUserQuestion.setAppUserId(userId);
                }
            }
            for (AppUserQuestion appUserQuestion : appUserQuestionList) {
                appUserQuestion.setAppUserId(userId);
            }
            appUserQuestionService.saveOrUpdateBatch(appUserQuestionList);
            // 筛选答案为是和偶尔有的问题,为用户设置对应的标签
            List<AppUserQuestion> appUserQuestionYesList = appUserQuestionList.stream()
                    .filter(appUserQuestion -> appUserQuestion.getAnswer().equals("1")
                            || appUserQuestion.getAnswer().equals("3")).collect(Collectors.toList());
            appUser.setTagId(dto.getTagIds());
            this.updateById(appUser);
        }
        for (AppUserQuestion appUserQuestion : appUserQuestionList) {
            appUserQuestion.setAppUserId(userId);
        }
        appUserQuestionService.saveOrUpdateBatch(appUserQuestionList);
        // 筛选答案为是和偶尔有的问题,为用户设置对应的标签
        List<AppUserQuestion> appUserQuestionYesList = appUserQuestionList.stream()
                .filter(appUserQuestion -> appUserQuestion.getAnswer().equals("1")
                        || appUserQuestion.getAnswer().equals("3")).collect(Collectors.toList());
        appUser.setTagId(dto.getTagIds());
        this.updateById(appUser);
    }
    /**