puzhibing
2024-02-05 640ff18d2d7f4be02ddb7f8f75e899f05545eb98
cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
@@ -1,5 +1,8 @@
package com.dsh.competition.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.UuidUtils;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
@@ -226,7 +229,7 @@
    @Override
    public ResultUtil paymentCompetition(Integer uid, PaymentCompetitionVo paymentCompetitionVo) throws Exception {
        AppUser appUser = appUserClient.queryAppUser(uid);
        String[] split = paymentCompetitionVo.getIds().split(";");
        JSONArray jsonArray = JSON.parseArray(paymentCompetitionVo.getIds());
        Competition competition = this.getById(paymentCompetitionVo.getId());
        List<PaymentCompetition> list = paymentCompetitionService.list(new QueryWrapper<PaymentCompetition>().eq("competitionId", paymentCompetitionVo.getId()).ne("payStatus", 3));
@@ -241,34 +244,24 @@
        }
//        int competitionId = userCompetitionService.count(new QueryWrapper<UserCompetition>().eq("competitionId", paymentCompetitionVo.getId()));
        if ((competitionId + split.length) > competition.getApplicantsNumber()) {
        if ((competitionId + jsonArray.size()) > competition.getApplicantsNumber()) {
            return ResultUtil.error("报名人数超过最大限制");
        }
        BigDecimal money = null;
        if (paymentCompetitionVo.getPayType() == 1 || paymentCompetitionVo.getPayType() == 2) {
            money = new BigDecimal(competition.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN);
            money = new BigDecimal(competition.getCashPrice()).multiply(new BigDecimal(jsonArray.size())).setScale(2, RoundingMode.HALF_EVEN);
        }
        if (paymentCompetitionVo.getPayType() == 3) {//玩湃币
            money = new BigDecimal(competition.getPlayPaiCoin()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN);
            money = new BigDecimal(competition.getPlayPaiCoin()).multiply(new BigDecimal(jsonArray.size())).setScale(2, RoundingMode.HALF_EVEN);
            if (money.compareTo(new BigDecimal(appUser.getPlayPaiCoins())) > 0) {
                return new ResultUtil(2, "报名失败,玩湃币不足,请充值");
            }
        }
        if (paymentCompetitionVo.getPayType() == 4) {//课程
            money = new BigDecimal(competition.getClassPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN);
            for (String s : split) {
//                Participant participant = participantService.getById(s);
//                Student student = studentClient.queryStudentByPhone(participant.getPhone());
//                if(null == student){
//                    return ResultUtil.error(participant.getName() + "不是学员,无法使用课时支付。");
//                }
                // 2.0
                Integer integer = coursePackagePaymentClient.queryResidueClassHourById(paymentCompetitionVo.getCoursePaymentId());
                if (new BigDecimal(integer).compareTo(new BigDecimal(competition.getClassPrice())) < 0) {
                    return new ResultUtil(3, "剩余课时不足,无法完成支付。");
                }
            money = new BigDecimal(competition.getClassPrice()).multiply(new BigDecimal(jsonArray.size())).setScale(2, RoundingMode.HALF_EVEN);
            Integer integer = coursePackagePaymentClient.queryResidueClassHourById(paymentCompetitionVo.getCoursePaymentId());
            if (new BigDecimal(integer).compareTo(money) < 0) {
                return new ResultUtil(3, "剩余课时不足,无法完成支付。");
            }
        }
@@ -285,11 +278,15 @@
        paymentCompetition.setInsertTime(new Date());
        paymentCompetitionService.save(paymentCompetition);
        for (String s : split) {
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            Integer id = jsonObject.getInteger("id");
            Integer isStudent = jsonObject.getInteger("isStudent");
            UserCompetition userCompetition = new UserCompetition();
            userCompetition.setAppUserId(uid);
            userCompetition.setCompetitionId(paymentCompetitionVo.getId());
            userCompetition.setParticipantId(Integer.valueOf(s));
            userCompetition.setParticipantId(id);
            userCompetition.setParticipantType(isStudent == 0 ? 2 : 1);
            userCompetition.setPaymentCompetitionId(paymentCompetition.getId());
            userCompetition.setInsertTime(new Date());
            userCompetitionService.save(userCompetition);
@@ -321,21 +318,26 @@
            paymentCompetition.setPayOrderNo("");
            paymentCompetitionService.updateById(paymentCompetition);
//            competition.setApplicantsNumber(competition.getApplicantsNumber() + 1);
            this.updateById(competition);
        }
        if (paymentCompetitionVo.getPayType() == 4) {//课程
            for (String s : split) {
//                Participant participant = participantService.getById(s);
//                Student student = studentClient.queryStudentByPhone(participant.getPhone());
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                Integer id = jsonObject.getInteger("id");
                Integer isStudent = jsonObject.getInteger("isStudent");
                if(isStudent == 0){
                    continue;
                }
                //扣减课时
                PaymentDeductionClassHour paymentDeductionClassHour = new PaymentDeductionClassHour();
                paymentDeductionClassHour.setId(Integer.valueOf(s));
                paymentDeductionClassHour.setId(id);
                paymentDeductionClassHour.setClassHour(competition.getClassPrice());
                paymentDeductionClassHour.setCode(code);
                paymentDeductionClassHour.setCourseId(paymentCompetitionVo.getCoursePaymentId());
                paymentDeductionClassHour.setUid(uid);
                coursePackagePaymentClient.paymentDeductionClassHour(paymentDeductionClassHour);
            }
            paymentCompetition = paymentCompetitionService.getById(paymentCompetition.getId());
            paymentCompetition.setAppUserId(null);
            paymentCompetition.setPayStatus(2);