44323
2023-11-01 4ee77a0ee732b1d760b08d986ab308dc8d89f6be
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -1179,183 +1179,185 @@
    @Transactional
    public ResultUtil productRedemptionOperation(Integer userIdFormRedis, GoodsExchangeVo exchangeType) {
        System.out.println("exchangeType:--->");
        System.out.println(exchangeType);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
        PointsMerchandise merchandise = mcClient.selectPointsMerchandiseById(exchangeType.getGoodId());
        if (ToolUtil.isEmpty(merchandise)){
            return ResultUtil.error("商品不存在");
        }
        TAppUser tAppUser = this.baseMapper.selectById(userIdFormRedis);
        if(merchandise.getUserPopulation()==2){
            if(tAppUser.getIsVip()==0){
                return ResultUtil.error("该商品只能年度会员购买");
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
            PointsMerchandise merchandise = mcClient.selectPointsMerchandiseById(exchangeType.getGoodId());
            if (ToolUtil.isEmpty(merchandise)){
                return ResultUtil.error("商品不存在");
            }
        }
            TAppUser tAppUser = this.baseMapper.selectById(userIdFormRedis);
        if(merchandise.getUserPopulation()==3){
            List<TStudent> students = tsmapper.selectList(new LambdaQueryWrapper<TStudent>().eq(TStudent::getAppUserId, userIdFormRedis));
            if(students.size()==0){
                return ResultUtil.error("该商品只能已有学员用户购买");
            if(merchandise.getUserPopulation()==2){
                if(tAppUser.getIsVip()==0){
                    return ResultUtil.error("该商品只能年度会员购买");
                }
            }
        }
            if(merchandise.getUserPopulation()==3){
                List<TStudent> students = tsmapper.selectList(new LambdaQueryWrapper<TStudent>().eq(TStudent::getAppUserId, userIdFormRedis));
                if(students.size()==0){
                    return ResultUtil.error("该商品只能已有学员用户购买");
                }
            }
        if (ToolUtil.isEmpty(tAppUser)){
            return ResultUtil.error("用户不存在");
        }
        int goodsNums = 0;
        if (ToolUtil.isEmpty(exchangeType.getNums())){
            goodsNums = 1;
        }else {
            goodsNums = exchangeType.getNums();
        }
        AppUserGoodResp goodResp = new AppUserGoodResp();
        goodResp.setAppUserId(userIdFormRedis);
        goodResp.setGoodId(merchandise.getId());
        int count = mcClient.queryUserHasGoodsNums(goodResp);
        if (ToolUtil.isNotEmpty(count) && count >= merchandise.getPickUpQuantity()){
            return ResultUtil.error("超过限领数量");
        }
        int count1 = mcClient.queryUserHasGoodsNums1(goodResp);
        if (ToolUtil.isNotEmpty(count1) && count1 >= merchandise.getQuantityIssued()){
            return ResultUtil.error("超过发放数量");
        }
            if (ToolUtil.isEmpty(tAppUser)){
                return ResultUtil.error("用户不存在");
            }
            int goodsNums = 0;
            if (ToolUtil.isEmpty(exchangeType.getNums())){
                goodsNums = 1;
            }else {
                goodsNums = exchangeType.getNums();
            }
            AppUserGoodResp goodResp = new AppUserGoodResp();
            goodResp.setAppUserId(userIdFormRedis);
            goodResp.setGoodId(merchandise.getId());
            int count = mcClient.queryUserHasGoodsNums(goodResp);
            if (ToolUtil.isNotEmpty(count) && count >= merchandise.getPickUpQuantity()){
                return ResultUtil.error("超过限领数量");
            }
            int count1 = mcClient.queryUserHasGoodsNums1(goodResp);
            if (ToolUtil.isNotEmpty(count1) && count1 >= merchandise.getQuantityIssued()){
                return ResultUtil.error("超过发放数量");
            }
            for (int i = 0; i < goodsNums; i++) {
//            新增积分商品兑换记录
                UserPointsMerchandise pointsMerchandise = new UserPointsMerchandise();
                pointsMerchandise.setPointsMerchandiseId(exchangeType.getGoodId());
                pointsMerchandise.setUserId(userIdFormRedis);
                pointsMerchandise.setStatus(1);
                pointsMerchandise.setState(1);
                pointsMerchandise.setPayStatus(1);
                if (merchandise.getUseScope() == 3){
                    if (exchangeType.getGoodsType() == 2){
                        CoursePackage coursePackage = cpageClient.queryCoursePackageById(merchandise.getCoursePackageId());
                        pointsMerchandise.setStoreId(coursePackage.getStoreId());
                    }else {
                        pointsMerchandise.setStoreId(exchangeType.getStoreId());
                    }
                }
                pointsMerchandise.setCode(code);
                mcClient.saveDetailsUserPointMercase(pointsMerchandise);
            }
        switch (exchangeType.getExchangeType()){
            switch (exchangeType.getExchangeType()){
//            积分
            case 1:
                boolean b = dealAppUserIntegral(userIdFormRedis,tAppUser,merchandise.getIntegral());
                if (b){
                    switch (exchangeType.getGoodsType()){
                        case 2:
                            Integer stuNums = 0;
                            if (ToolUtil.isNotEmpty(exchangeType.getStuIds())){
                                stuNums = exchangeType.getStuIds().size();
                            }else {
                                stuNums = 1;
                            }
                            for (int i = 0; i < stuNums; i++) {
                                List<CoursePackagePaymentConfig> courseConfigList = cpconClient.getCourseConfigList(merchandise.getCoursePackageId());
                                TCoursePackagePayment packagePayment = new TCoursePackagePayment();
                                packagePayment.setAppUserId(userIdFormRedis);
                                packagePayment.setStudentId(exchangeType.getStuIds().get(i));
                                packagePayment.setCoursePackageId(merchandise.getCoursePackageId());
                                for (CoursePackagePaymentConfig coursePackagePaymentConfig : courseConfigList) {
                                    if (Objects.equals(coursePackagePaymentConfig.getId(), merchandise.getCoursePackageConfigId())) {
                                        packagePayment.setClassHours(coursePackagePaymentConfig.getClassHours());
                                        packagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours());
                                        packagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours());
                                        packagePayment.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
                                        break;
                                    }
                case 1:
                    boolean b = dealAppUserIntegral(userIdFormRedis,tAppUser,merchandise.getIntegral());
                    if (b){
                        switch (exchangeType.getGoodsType()){
                            case 2:
                                Integer stuNums = 0;
                                if (ToolUtil.isNotEmpty(exchangeType.getStuIds())){
                                    stuNums = exchangeType.getStuIds().size();
                                }else {
                                    stuNums = 1;
                                }
                                packagePayment.setPlayPaiCoin(merchandise.getIntegral());
                                packagePayment.setAbsencesNumber(0);
                                packagePayment.setPayUserType(1);
                                packagePayment.setPayStatus(2);
                                packagePayment.setPayUserId(userIdFormRedis);
                                packagePayment.setStatus(1);
                                packagePayment.setState(1);
                                packagePayment.setCode(code);
                                paymentClient.savePaymentCoursePackage(packagePayment);
                                for (int i = 0; i < stuNums; i++) {
                                    List<CoursePackagePaymentConfig> courseConfigList = cpconClient.getCourseConfigList(merchandise.getCoursePackageId());
                                    TCoursePackagePayment packagePayment = new TCoursePackagePayment();
                                    packagePayment.setAppUserId(userIdFormRedis);
                                    packagePayment.setStudentId(exchangeType.getStuIds().get(i));
                                    packagePayment.setCoursePackageId(merchandise.getCoursePackageId());
                                    for (CoursePackagePaymentConfig coursePackagePaymentConfig : courseConfigList) {
                                        if (Objects.equals(coursePackagePaymentConfig.getId(), merchandise.getCoursePackageConfigId())) {
                                            packagePayment.setClassHours(coursePackagePaymentConfig.getClassHours());
                                            packagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours());
                                            packagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours());
                                            packagePayment.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
                                            break;
                                        }
                                    }
                                    packagePayment.setPlayPaiCoin(merchandise.getIntegral());
                                    packagePayment.setAbsencesNumber(0);
                                    packagePayment.setPayUserType(1);
                                    packagePayment.setPayStatus(2);
                                    packagePayment.setPayUserId(userIdFormRedis);
                                    packagePayment.setStatus(1);
                                    packagePayment.setState(1);
                                    packagePayment.setCode(code);
                                    paymentClient.savePaymentCoursePackage(packagePayment);
                                }
                                break;
                            case 4:
                                for (int i = 0; i < goodsNums; i++) {
                                    UserCoupon coupon = new UserCoupon();
                                    coupon.setCouponId(exchangeType.getGoodId());
                                    coupon.setUserId(userIdFormRedis);
                                    coupon.setStatus(1);
                                    ucponClient.insertToAppuserCoupon(coupon);
                                }
                                break;
                            default:
                                break;
                        }
                    }else {
                        return ResultUtil.error("用户积分不足!");
                    }
                    break;
                case 2:
//                积分+现金
                    boolean dealt = dealAppUserIntegral(userIdFormRedis,tAppUser,merchandise.getIntegral());
                    switch (exchangeType.getPayType()) {
                        case 1:
                            try {
                                if (merchandise.getType() == 2) {
                                    return WechatPayment(merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code);
                                } else {
                                    return WechatPayment(merchandise.getCash().multiply(new BigDecimal(goodsNums)), code);
                                }
                            } catch (Exception e) {
                                return ResultUtil.runErr();
                            }
                            break;
                        case 4:
                            for (int i = 0; i < goodsNums; i++) {
                                UserCoupon coupon = new UserCoupon();
                                coupon.setCouponId(exchangeType.getGoodId());
                                coupon.setUserId(userIdFormRedis);
                                coupon.setStatus(1);
                                ucponClient.insertToAppuserCoupon(coupon);
                        case 2:
                            if (merchandise.getType() == 2) {
                                return AlipayPayment(merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code);
                            } else {
                                return AlipayPayment(merchandise.getCash().multiply(new BigDecimal(goodsNums)), code);
                            }
                            break;
                        default:
                            break;
                    }
                }else {
                    return ResultUtil.error("用户积分不足!");
                }
                break;
            case 2:
//                积分+现金
                boolean dealt = dealAppUserIntegral(userIdFormRedis,tAppUser,merchandise.getIntegral());
                switch (exchangeType.getPayType()) {
                    case 1:
                        try {
                            if (merchandise.getType() == 2) {
                                return WechatPayment(merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code);
                            } else {
                                return WechatPayment(merchandise.getCash().multiply(new BigDecimal(goodsNums)), code);
                    break;
                case 3:
                    switch (exchangeType.getPayType()) {
                        case 1:
                            try {
                                if (merchandise.getType() == 2) {
                                    return WechatPayment(merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code);
                                } else {
                                    return WechatPayment(merchandise.getCash().multiply(new BigDecimal(goodsNums)), code);
                                }
                            } catch (Exception e) {
                                return ResultUtil.runErr();
                            }
                        } catch (Exception e) {
                            return ResultUtil.runErr();
                        }
                    case 2:
                        if (merchandise.getType() == 2) {
                            return AlipayPayment(merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code);
                        } else {
                            return AlipayPayment(merchandise.getCash().multiply(new BigDecimal(goodsNums)), code);
                        }
                    default:
                        break;
                }
                break;
            case 3:
                switch (exchangeType.getPayType()) {
                    case 1:
                        try {
                        case 2:
                            if (merchandise.getType() == 2) {
                                return WechatPayment(merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code);
                                return AlipayPayment(merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code);
                            } else {
                                return WechatPayment(merchandise.getCash().multiply(new BigDecimal(goodsNums)), code);
                                return AlipayPayment(merchandise.getCash().multiply(new BigDecimal(goodsNums)), code);
                            }
                        } catch (Exception e) {
                            return ResultUtil.runErr();
                        }
                    case 2:
                        if (merchandise.getType() == 2) {
                            return AlipayPayment(merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code);
                        } else {
                            return AlipayPayment(merchandise.getCash().multiply(new BigDecimal(goodsNums)), code);
                        }
                    default:
                        break;
                }
                break;
            default:
                break;
        }
        for (int i = 0; i < goodsNums; i++) {
//            新增积分商品兑换记录
            UserPointsMerchandise pointsMerchandise = new UserPointsMerchandise();
            pointsMerchandise.setPointsMerchandiseId(exchangeType.getGoodId());
            pointsMerchandise.setUserId(userIdFormRedis);
            pointsMerchandise.setStatus(1);
            pointsMerchandise.setState(1);
            if (merchandise.getUseScope() == 3){
                if (exchangeType.getGoodsType() == 2){
                    CoursePackage coursePackage = cpageClient.queryCoursePackageById(merchandise.getCoursePackageId());
                    pointsMerchandise.setStoreId(coursePackage.getStoreId());
                }else {
                    pointsMerchandise.setStoreId(exchangeType.getStoreId());
                }
                        default:
                            break;
                    }
                    break;
                default:
                    break;
            }
            pointsMerchandise.setCode(code);
            mcClient.saveDetailsUserPointMercase(pointsMerchandise);
            return ResultUtil.success();
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
        return ResultUtil.success();
    }
    public boolean dealAppUserIntegral(Integer appUserId,TAppUser appUser,Integer points){
@@ -1382,7 +1384,8 @@
    }
    private ResultUtil AlipayPayment(BigDecimal cash, String code) {
        ResultUtil alipay = payMoneyUtil.alipay("课包续费", "", "", code, cash.toString(),
        System.out.println("金额:"+cash);
        ResultUtil alipay = payMoneyUtil.alipay("课包续费", "课包续费", "", code, cash.toString(),
                "/base/pointMer/exchangeGoodPaymentAliCallback");
        if(alipay.getCode() == 200){
            new Thread(new Runnable() {
@@ -1395,7 +1398,9 @@
                            int min = 5000;
                            wait += (min * num);
                            Thread.sleep(wait);
                            System.out.println("code:"+code);
                            List<UserPointsMerchandise> userPointsMerchandises = mcClient.queryUserPointMerchaseByCode(code);
                            System.out.println("list-----"+userPointsMerchandises);
                            if(userPointsMerchandises.get(0).getPayStatus() == 2){
                                break;
                            }