无关风月
2025-05-08 9486766c806fe1d9e082b2fd02ea1cc558f1b443
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
package com.dsh.communityWorldCup.service.impl;
 
import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.communityWorldCup.entity.WorldCup;
import com.dsh.communityWorldCup.entity.WorldCupPayment;
import com.dsh.communityWorldCup.entity.WorldCupPaymentParticipant;
import com.dsh.communityWorldCup.feignclient.account.AppUserClient;
import com.dsh.communityWorldCup.feignclient.account.model.AppUser;
import com.dsh.communityWorldCup.feignclient.course.CoursePackageOrderStudentClient;
import com.dsh.communityWorldCup.feignclient.course.model.CoursePackageOrderStudent;
import com.dsh.communityWorldCup.mapper.WorldCupPaymentMapper;
import com.dsh.communityWorldCup.model.DeductionClassHourList;
import com.dsh.communityWorldCup.service.IWorldCupPaymentParticipantService;
import com.dsh.communityWorldCup.service.IWorldCupPaymentService;
import com.dsh.communityWorldCup.service.IWorldCupService;
import com.dsh.communityWorldCup.util.PayMoneyUtil;
import com.dsh.communityWorldCup.util.ResultUtil;
import net.bytebuddy.asm.Advice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
 
/**
 * @author zhibing.pu
 * @Date 2024/2/22 14:23
 */
@Service
public class WorldCupPaymentServiceImpl extends ServiceImpl<WorldCupPaymentMapper, WorldCupPayment> implements IWorldCupPaymentService {
 
    @Autowired
    private IWorldCupPaymentParticipantService worldCupPaymentParticipantService;
 
    @Autowired
    private IWorldCupService worldCupService;
 
    @Autowired
    private PayMoneyUtil payMoneyUtil;
 
    @Resource
    private AppUserClient appUserClient;
 
    @Resource
    private CoursePackageOrderStudentClient coursePackageOrderStudentClient;
 
 
 
 
    /**
     * 取消已报名的世界杯
     * @param id
     * @return
     */
    @Override
    public ResultUtil cancelMyWorldCup(Long id) {
        WorldCupPaymentParticipant worldCupPaymentParticipant = worldCupPaymentParticipantService.getById(id);
        WorldCupPayment worldCupPayment = this.getById(worldCupPaymentParticipant.getWorldCupPaymentId());
        WorldCup worldCup = worldCupService.getById(worldCupPayment.getWorldCupId());
        //开始前一天不能取消
        if(worldCup.getStartTime().getTime() < System.currentTimeMillis() + 86400000L){
            return ResultUtil.error("世界杯快开始了,不能取消");
        }
        //开始处理退款
        //免费
        if(worldCupPayment.getPayType() == 0){
            worldCupPayment.setWorldCupId(null);
            worldCupPayment.setRefundOrderNo("");
            worldCupPayment.setRefundTime(new Date());
            worldCupPayment.setPayStatus(3);
            this.updateById(worldCupPayment);
            return ResultUtil.success();
        }
        List<WorldCupPaymentParticipant> list1 = worldCupPaymentParticipantService.list(new QueryWrapper<WorldCupPaymentParticipant>()
                .eq("worldCupPaymentId", worldCupPayment.getId()).eq("alreadyEntered", 0));
        //总排款金额(排除已经参加比赛的数据)
        BigDecimal multiply = worldCupPayment.getUnitPrice().multiply(new BigDecimal(list1.size()));
        //微信支付
        if(worldCupPayment.getPayType() == 1){
            Map<String, String> map = payMoneyUtil.wxRefund(worldCupPayment.getPayOrderNo(), worldCupPayment.getCode(),
                    worldCupPayment.getAmount().toString(), multiply.toString(), "/base/worldCup/wxRefundWorldCupCallback");
            if(!"SUCCESS".equals(map.get("return_code"))){
                System.err.println("-------------微信退款失败---------");
                System.err.println(map.get("return_msg"));
                return ResultUtil.error("微信退款失败");
            }else{
                worldCupPayment.setRefundAmount(multiply);
                worldCupPayment.setWorldCupId(null);
                this.updateById(worldCupPayment);
            }
        }
        //支付宝支付
        if(worldCupPayment.getPayType() == 2){
            Map<String, String> map = null;
            try {
                map = payMoneyUtil.aliRefund(worldCupPayment.getPayOrderNo(), multiply.toString());
            } catch (AlipayApiException e) {
                throw new RuntimeException(e);
            }
            if("10000".equals(map.get("code"))){
                String trade_no = map.get("trade_no");
                worldCupPayment.setWorldCupId(null);
                worldCupPayment.setRefundTime(new Date());
                worldCupPayment.setRefundOrderNo(trade_no);
                worldCupPayment.setPayStatus(3);
                worldCupPayment.setRefundAmount(multiply);
                this.updateById(worldCupPayment);
            }
        }
        //玩湃币支付
        if(worldCupPayment.getPayType() == 3){
            Integer appUserId = worldCupPayment.getAppUserId();
            AppUser appUser = appUserClient.getAppUser(appUserId);
            appUser.setPlayPaiCoins(appUser.getPlayPaiCoins() + multiply.intValue());
            appUserClient.updateAppUser(appUser);
            worldCupPayment.setWorldCupId(null);
            worldCupPayment.setRefundTime(new Date());
            worldCupPayment.setRefundOrderNo("");
            worldCupPayment.setPayStatus(3);
            worldCupPayment.setRefundAmount(multiply);
            this.updateById(worldCupPayment);
        }
        //课时支付
        if(worldCupPayment.getPayType() == 4){
            for (WorldCupPaymentParticipant worldCupPaymentParticipant1 : list1) {
                String content = worldCupPaymentParticipant1.getContent();
                DeductionClassHourList deductionClassHourList = JSON.parseObject(content, DeductionClassHourList.class);
                coursePackageOrderStudentClient.backspaceClassHour(deductionClassHourList);
            }
            worldCupPayment.setWorldCupId(null);
            worldCupPayment.setRefundTime(new Date());
            worldCupPayment.setRefundOrderNo("");
            worldCupPayment.setPayStatus(3);
            worldCupPayment.setRefundAmount(multiply);
            this.updateById(worldCupPayment);
        }
        return ResultUtil.success();
    }
}