luodangjia
2025-01-15 257d66798aa538f8737980f13d94c547bf0b51ea
Merge remote-tracking branch 'origin/master'
9个文件已修改
242 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/RefundPass.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/order/account/RuoYiAccountApplicationTests.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/RefundPassController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserClientFallbackFactory.java
@@ -111,6 +111,11 @@
            }
            
            @Override
            public void vipDemotion(Long appUserId) {
                R.fail("检查会员等级降级失败:" + cause.getMessage());
            }
            @Override
            public void demotionDetection() {
                R.fail("用户降级检测失败:" + cause.getMessage());
            }
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -101,6 +101,15 @@
    
    
    /**
     * 检查会员降级
     * @param appUserId
     */
    @PostMapping("/app-user/vipDemotion")
    void vipDemotion(@RequestParam("appUserId") Long appUserId);
    /**
     * 用户降级检测
     */
    @PostMapping("/app-user/demotionDetection")
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/RefundPass.java
@@ -100,5 +100,6 @@
    private String expressResult;
    
    @ApiModelProperty("最新快递信息")
    @TableField(exist = false)
    private String express;
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -374,7 +374,7 @@
                .eq(AppUser::getDelFlag, 0));
        ArrayList<Long> userIds = new ArrayList<>();
        userIds.add(userId);
        getUserAncestorList(userIds, appUserList);
        getUserAncestorList(user,userIds, appUserList);
//        Long count1 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 1).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
//        Long count2 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 2).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
//        Long count3 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 3).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
@@ -382,13 +382,13 @@
//        Long count5 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 5).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
//        Long count6 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 6).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
//        Long count7 = appUserService.lambdaQuery().ne(AppUser::getStatus,3).eq(AppUser::getVipId, 7).eq(AppUser::getInviteUserId, userId).or().eq(AppUser::getTopInviteId,userId).count();
        user.setCount1(count1);
        user.setCount2(count2);
        user.setCount3(count3);
        user.setCount4(count4);
        user.setCount5(count5);
        user.setCount6(count6);
        user.setCount7(count7);
//        user.setCount1(count1);
//        user.setCount2(count2);
//        user.setCount3(count3);
//        user.setCount4(count4);
//        user.setCount5(count5);
//        user.setCount6(count6);
//        user.setCount7(count7);
        List<UserSignRecord> list = userSignRecordService.lambdaQuery().eq(UserSignRecord::getSignDay, LocalDate.now())
                .eq(UserSignRecord::getAppUserId,userId).list();
@@ -399,25 +399,18 @@
        }
        return R.ok(user);
    }
    private Long count1 = 0L;
    private Long count2 = 0L;
    private Long count3 = 0L;
    private Long count4 = 0L;
    private Long count5 = 0L;
    private Long count6 = 0L;
    private Long count7 = 0L;
    public void getUserAncestorList(List<Long> userIds, List<AppUser> list) {
    public void getUserAncestorList(AppUser user,List<Long> userIds, List<AppUser> list) {
        List<AppUser> children = list.stream().filter(u -> userIds.contains(u.getInviteUserId()) || userIds.contains(u.getTopInviteId())).collect(Collectors.toList());
        if(!CollectionUtils.isEmpty(children)){
            count1 = count1 + children.stream().filter(e->e.getVipId() == 1).count();
            count2 = count2 + children.stream().filter(e->e.getVipId() == 2).count();
            count3 = count3 + children.stream().filter(e->e.getVipId() == 3).count();
            count4 = count4 + children.stream().filter(e->e.getVipId() == 4).count();
            count5 = count5 + children.stream().filter(e->e.getVipId() == 5).count();
            count6 = count6 + children.stream().filter(e->e.getVipId() == 6).count();
            count7 = count7 + children.stream().filter(e->e.getVipId() == 7).count();
            user.setCount1((user.getCount1() == null ? 0L : user.getCount1()) + children.stream().filter(e->e.getVipId() == 1).count());
            user.setCount2((user.getCount2() == null ? 0L : user.getCount2()) + children.stream().filter(e->e.getVipId() == 2).count());
            user.setCount3((user.getCount3() == null ? 0L : user.getCount3()) + children.stream().filter(e->e.getVipId() == 3).count());
            user.setCount4((user.getCount4() == null ? 0L : user.getCount4()) + children.stream().filter(e->e.getVipId() == 4).count());
            user.setCount5((user.getCount5() == null ? 0L : user.getCount5()) + children.stream().filter(e->e.getVipId() == 5).count());
            user.setCount6((user.getCount6() == null ? 0L : user.getCount6()) + children.stream().filter(e->e.getVipId() == 6).count());
            user.setCount7((user.getCount7() == null ? 0L : user.getCount7()) + children.stream().filter(e->e.getVipId() == 7).count());
            List<Long> userIdList = children.stream().map(AppUser::getId).collect(Collectors.toList());
            getUserAncestorList(userIdList, children);
            getUserAncestorList(user,userIdList, children);
        }
    }
@@ -1002,6 +995,17 @@
    
    
    /**
     * 检查会员降级
     * @param appUserId
     */
    @PostMapping("/app-user/vipDemotion")
    public void vipDemotion(@RequestParam("appUserId") Long appUserId){
        appUserService.vipDemotion(appUserId);
    }
    /**
     * 用户降级检测
     */
    @PostMapping("/demotionDetection")
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/AppUserService.java
@@ -94,6 +94,12 @@
     */
    void vipUpgrade(Long appUserId);
    
    /**
     * 处理用户会员降级
     * @param appUserId
     */
    void vipDemotion(Long appUserId);
    
    /**
     * 降级检测
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
@@ -179,7 +179,8 @@
        }
        
        //查询用户是否注册,没有注册则跳转到注册页面
        AppUser appUser = this.getOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getPhone, mobileLogin.getPhone()).ne(AppUser::getStatus, 3).eq(AppUser::getDelFlag, 0));
        AppUser appUser = this.getOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getPhone, mobileLogin.getPhone())
                .ne(AppUser::getStatus, 3).eq(AppUser::getDelFlag, 0));
        if(null == appUser){
            LoginVo loginVo = new LoginVo();
            loginVo.setSkipPage(2);
@@ -200,8 +201,7 @@
        loginUser.setUsername(appUser.getName());
        Map<String, Object> tokenApplet = tokenService.createTokenApplet(loginUser);
        loginVo.setToken(tokenApplet.get("access_token").toString());
            loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString()));
        loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString()));
        appUser.setLastLoginTime(LocalDateTime.now());
        this.updateById(appUser);
        return R.ok(loginVo);
@@ -608,7 +608,85 @@
        }
    }
    
    /**
     * 处理会员降级
     * @param appUserId
     */
    @Override
    public void vipDemotion(Long appUserId) {
        AppUser appUser = this.getById(appUserId);
        Integer vipId = appUser.getVipId();
        //黄金会员
        VipSetting vipSetting2 = vipSettingClient.getVipSetting(2).getData();
        //消费积分满足升级
        if(1 == vipSetting2.getVipLevelUpShopRole() && appUser.getShopPoint() >= vipSetting2.getVipLevelUpShop() && appUser.getVipId() > 2){
            appUser.setVipId(2);
            this.updateById(appUser);
            //添加等级变化记录
            UserChangeLog userChangeLog = new UserChangeLog();
            userChangeLog.setDelFlag(0);
            userChangeLog.setCreateTime(LocalDateTime.now());
            userChangeLog.setAppUserId(appUser.getId());
            userChangeLog.setBeforeVipId(vipId);
            userChangeLog.setAfterVipId(appUser.getVipId());
            userChangeLog.setChangeType(0);
            userChangeLogService.save(userChangeLog);
            return;
        }
        //返佣积分满足升级
        if(1 == vipSetting2.getVipLevelUpShareRole() && appUser.getSharePoint() >= vipSetting2.getVipLevelUpShare() && appUser.getVipId() > 2){
            appUser.setVipId(2);
            this.updateById(appUser);
            //添加等级变化记录
            UserChangeLog userChangeLog = new UserChangeLog();
            userChangeLog.setDelFlag(0);
            userChangeLog.setCreateTime(LocalDateTime.now());
            userChangeLog.setAppUserId(appUser.getId());
            userChangeLog.setBeforeVipId(vipId);
            userChangeLog.setAfterVipId(appUser.getVipId());
            userChangeLog.setChangeType(0);
            userChangeLogService.save(userChangeLog);
            return;
        }
        //下级人数满足升级
        Integer vipLevelUpNumRole = vipSetting2.getVipLevelUpNumRole();
        Integer vipDirectNum = vipSetting2.getVipDirectNum();
        Integer vipTeamNum = vipSetting2.getVipTeamNum();
        if(1 == vipLevelUpNumRole && appUser.getVipId() > 2){
            //查询直推用户达到X人或者团队人数达到X人后,可升级
            //直推用户数
            long count = this.count(new LambdaQueryWrapper<AppUser>().eq(AppUser::getDelFlag, 0).eq(AppUser::getStatus, 1).eq(AppUser::getInviteUserId, appUserId));
            //团队用户数
            List<AppUser> subordinate = getSubordinate(appUserId);
            if(vipDirectNum <= count || vipTeamNum <= subordinate.size()){
                appUser.setVipId(2);
                this.updateById(appUser);
                //添加等级变化记录
                UserChangeLog userChangeLog = new UserChangeLog();
                userChangeLog.setDelFlag(0);
                userChangeLog.setCreateTime(LocalDateTime.now());
                userChangeLog.setAppUserId(appUser.getId());
                userChangeLog.setBeforeVipId(vipId);
                userChangeLog.setAfterVipId(appUser.getVipId());
                userChangeLog.setChangeType(0);
                userChangeLogService.save(userChangeLog);
                return;
            }
        }
        if(appUser.getVipId() > 2){
            appUser.setVipId(1);
            this.updateById(appUser);
            //添加等级变化记录
            UserChangeLog userChangeLog = new UserChangeLog();
            userChangeLog.setDelFlag(0);
            userChangeLog.setCreateTime(LocalDateTime.now());
            userChangeLog.setAppUserId(appUser.getId());
            userChangeLog.setBeforeVipId(vipId);
            userChangeLog.setAfterVipId(appUser.getVipId());
            userChangeLog.setChangeType(0);
            userChangeLogService.save(userChangeLog);
        }
    }
    
    /**
     * 递归查询顶级推广人
ruoyi-service/ruoyi-account/src/test/java/com/ruoyi/order/account/RuoYiAccountApplicationTests.java
@@ -22,38 +22,32 @@
    @Test
    public void contextLoads() {
        List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>()
                .ne(AppUser::getStatus, 3));
                .ne(AppUser::getStatus, 3)
                .eq(AppUser::getDelFlag, 0));
        AppUser user = appUserService.getById(1879046499735789569L);
        ArrayList<Long> userIds = new ArrayList<>();
        userIds.add(1879046499735789569L);
        getUserAncestorList(userIds, appUserList);
        System.err.println(count1);
        System.err.println(count2);
        System.err.println(count3);
        System.err.println(count4);
        System.err.println(count5);
        System.err.println(count6);
        System.err.println(count7);
        getUserAncestorList(user,userIds, appUserList);
        System.err.println(user.getCount1());
        System.err.println(user.getCount2());
        System.err.println(user.getCount3());
        System.err.println(user.getCount4());
        System.err.println(user.getCount5());
        System.err.println(user.getCount6());
        System.err.println(user.getCount7());
    }
    private Long count1 = 0L;
    private Long count2 = 0L;
    private Long count3 = 0L;
    private Long count4 = 0L;
    private Long count5 = 0L;
    private Long count6 = 0L;
    private Long count7 = 0L;
    public void getUserAncestorList(List<Long> userIds, List<AppUser> list) {
    public void getUserAncestorList(AppUser user,List<Long> userIds, List<AppUser> list) {
        List<AppUser> children = list.stream().filter(u -> userIds.contains(u.getInviteUserId()) || userIds.contains(u.getTopInviteId())).collect(Collectors.toList());
        if(!CollectionUtils.isEmpty(children)){
            count1 = count1 + children.stream().filter(e->e.getVipId() == 1).count();
            count2 = count2 + children.stream().filter(e->e.getVipId() == 2).count();
            count3 = count3 + children.stream().filter(e->e.getVipId() == 3).count();
            count4 = count4 + children.stream().filter(e->e.getVipId() == 4).count();
            count5 = count5 + children.stream().filter(e->e.getVipId() == 5).count();
            count6 = count6 + children.stream().filter(e->e.getVipId() == 6).count();
            count7 = count7 + children.stream().filter(e->e.getVipId() == 7).count();
            user.setCount1((user.getCount1() == null ? 0L : user.getCount1()) + children.stream().filter(e->e.getVipId() == 1).count());
            user.setCount2((user.getCount2() == null ? 0L : user.getCount2()) + children.stream().filter(e->e.getVipId() == 2).count());
            user.setCount3((user.getCount3() == null ? 0L : user.getCount3()) + children.stream().filter(e->e.getVipId() == 3).count());
            user.setCount4((user.getCount4() == null ? 0L : user.getCount4()) + children.stream().filter(e->e.getVipId() == 4).count());
            user.setCount5((user.getCount5() == null ? 0L : user.getCount5()) + children.stream().filter(e->e.getVipId() == 5).count());
            user.setCount6((user.getCount6() == null ? 0L : user.getCount6()) + children.stream().filter(e->e.getVipId() == 6).count());
            user.setCount7((user.getCount7() == null ? 0L : user.getCount7()) + children.stream().filter(e->e.getVipId() == 7).count());
            List<Long> userIdList = children.stream().map(AppUser::getId).collect(Collectors.toList());
            getUserAncestorList(userIdList, children);
            getUserAncestorList(user,userIdList, children);
        }
    }
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/RefundPassController.java
@@ -92,7 +92,7 @@
        if(StringUtils.isNotEmpty(one.getExpressResult())){
            MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(one.getExpressResult(), MapTrackKD100Vo.class);
            List<QueryKD100ListVo> data = mapTrackKD100Vo.getData();
            one.setExpress(data.size() > 0 ? data.get(0).getContext() : "");
            one.setExpress(null != data && data.size() > 0 ? data.get(0).getContext() : "");
        }
        return R.ok(one);
    }
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -6,10 +6,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.feignClient.BalanceChangeRecordClient;
import com.ruoyi.account.api.feignClient.UserCouponClient;
import com.ruoyi.account.api.feignClient.UserPointClient;
import com.ruoyi.account.api.feignClient.*;
import com.ruoyi.account.api.model.*;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
@@ -89,9 +86,6 @@
    private UserPointClient userPointClient;
    
    @Resource
    private PointSettingClient pointSettingClient;
    @Resource
    private OrderBalancePaymentService orderBalancePaymentService;
    
    @Resource
@@ -115,6 +109,9 @@
    @Resource
    private UserCouponClient userCouponClient;
    @Resource
    private UserChangeLogClient userChangeLogClient;
    
    
@@ -205,7 +202,7 @@
        if(StringUtils.isNotEmpty(order.getExpressResult())){
            MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(order.getExpressResult(), MapTrackKD100Vo.class);
            List<QueryKD100ListVo> data = mapTrackKD100Vo.getData();
            orderDetailVO.setExpress(data.size() > 0 ? data.get(0).getContext() : "");
            orderDetailVO.setExpress(null != data && data.size() > 0 ? data.get(0).getContext() : "");
        }
        
        if(order.getOrderType() == 1){
@@ -518,11 +515,6 @@
            }
            appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint);
            boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
            if(vipDemotion){
                appUser.setVipId(appUser.getVipId() - 1);
            }
            //构建积分流水明细
            UserPoint userPoint = new UserPoint();
            userPoint.setType(1);
@@ -534,6 +526,12 @@
            userPoint.setObjectId(order.getId());
            userPointClient.saveUserPoint(userPoint);
            appUserClient.editAppUserById(appUser);
            //降级检测
            boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
            if(vipDemotion){
                appUserClient.vipDemotion(appUser.getId());
            }
            //回退优惠券状态
            if(null != order.getUserCouponId()){
                UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData();
@@ -650,11 +648,6 @@
        }
        appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint);
        boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
        if(vipDemotion){
            appUser.setVipId(appUser.getVipId() - 1);
        }
        //构建积分流水明细
        UserPoint userPoint = new UserPoint();
        userPoint.setType(1);
@@ -666,6 +659,12 @@
        userPoint.setObjectId(order.getId());
        userPointClient.saveUserPoint(userPoint);
        appUserClient.editAppUserById(appUser);
        //降级检测
        boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
        if(vipDemotion){
            appUserClient.vipDemotion(appUser.getId());
        }
        //回退优惠券状态
        if(null != order.getUserCouponId()){