xuhy
2025-01-09 712f70b2936079a131ecb1e63c6d337171618cad
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
package com.stylefeng.guns.modular.api;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.core.exception.GunsException;
import com.stylefeng.guns.core.exception.ServiceExceptionEnum;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.account.model.TEnterpriseWithdrawal;
import com.stylefeng.guns.modular.account.service.ITEnterpriseWithdrawalService;
import com.stylefeng.guns.modular.account.service.UserWithdrawalService;
import com.stylefeng.guns.modular.account.util.Base64Util;
import com.stylefeng.guns.modular.cloudPayment.example.AllocationExample;
import com.stylefeng.guns.modular.cloudPayment.example.DepositExample;
import com.stylefeng.guns.modular.cloudPayment.req.AllocationReq;
import com.stylefeng.guns.modular.cloudPayment.req.DepositReq;
import com.stylefeng.guns.modular.enums.PaymentTypeEnum;
import com.stylefeng.guns.modular.system.model.Company;
import com.stylefeng.guns.modular.system.model.Driver;
import com.stylefeng.guns.modular.system.model.Reassign;
import com.stylefeng.guns.modular.system.model.UserWithdrawal;
import com.stylefeng.guns.modular.system.service.ICompanyService;
import com.stylefeng.guns.modular.system.service.IDriverService;
import com.stylefeng.guns.modular.system.service.IReassignService;
import com.stylefeng.guns.modular.system.util.PayMoneyUtil;
import com.unionpay.upyzt.resp.AllocationResp;
import com.unionpay.upyzt.resp.DepositResp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
 
/**
 * 第三方支付回调控制器
 */
@RestController
@RequestMapping("/base")
public class CallbackController {
 
    @Autowired
    private IReassignService reassignService;
 
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private IDriverService driverService;
    @Autowired
    private ICompanyService companyService;
    @Autowired
    private ITEnterpriseWithdrawalService enterpriseWithdrawalService;
    @Autowired
    private UserWithdrawalService userWithdrawalService;
 
 
 
 
    /**
     * 订单改派微信回调
     * @param request
     */
    @ResponseBody
    @PostMapping("/wxReassign")
    public void wxReassign(HttpServletRequest request, HttpServletResponse response){
        try {
            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
            if(null != map){
                String id = map.get("out_trade_no");
                String order_id = map.get("transaction_id");
                String result = map.get("result");
                if(ToolUtil.isNotEmpty(id) && ToolUtil.isNotEmpty(order_id)){
                    // TODO 司机云闪付 改派微信回调支付充值
                    System.out.println("订单改派支付宝回调"+map);
//                    String[] s = id.split("_");
//                    if(Integer.valueOf(s[1]) == 3) {//跨城订单
//                        System.out.println("跨城订单");
//                        String[] split1 = s[0].split(",");
//                        List<Reassign> reassigns = reassignService.selectBatchIds(Arrays.asList(split1));
//                        cloudPay(reassigns.get(0).getOriginalDriverId(),map.get("total_fee"),map.get("transaction_id"),1);
//                    }else {
//                        Reassign reassign = reassignService.selectById(s[0]);
//                        cloudPay(reassign.getOriginalDriverId(),map.get("total_fee"),map.get("transaction_id"),1);
//                    }
                    PrintWriter out = response.getWriter();
                    out.write(result);
                    out.flush();
                    out.close();
                    reassignService.payReassign(id, order_id, 1);
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
 
    /**
     * 订单改派支付宝回调
     * @param request
     */
    @ResponseBody
    @PostMapping("/aliReassign")
    public void aliReassign(HttpServletRequest request, HttpServletResponse response){
        try {
            Map<String, String> map = payMoneyUtil.alipayCallback(request);
            if(null != map){
                String id = map.get("out_trade_no");
                String order_id = map.get("trade_no");
                if(ToolUtil.isNotEmpty(id) && ToolUtil.isNotEmpty(order_id)){
                    reassignService.payReassign(id, order_id, 2);
                }
                System.out.println("订单改派支付宝回调"+map);
                // TODO 司机云闪付 改派支付宝回调支付充值
//                String[] s = id.split("_");
//                if(Integer.valueOf(s[1]) == 3) {//跨城订单
//                    System.out.println("跨城订单");
//                    String[] split1 = s[0].split(",");
//                    List<Reassign> reassigns = reassignService.selectBatchIds(Arrays.asList(split1));
//                    cloudPay(reassigns.get(0).getOriginalDriverId(),map.get("total_amount"),map.get("trade_no"),0);
//                }else {
//                    Reassign reassign = reassignService.selectById(s[0]);
//                    cloudPay(reassign.getOriginalDriverId(),map.get("total_amount"),map.get("trade_no"),0);
//                }
                PrintWriter out = response.getWriter();
                out.print("success");
                out.flush();
                out.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
    private void cloudPay(Integer uid,String total_fee,String transaction_id,int type) {
        if(type==1){
            BigDecimal divide = new BigDecimal(total_fee).divide(new BigDecimal(100));
            total_fee=divide.toString();
        }
        System.out.println("回调参数:"+total_fee+"---"+transaction_id);
        Driver driver = driverService.selectById(uid);
        if(Objects.isNull(driver)){
            throw new RuntimeException("该司机不存在!"+uid);
        }
        // 查询平台账户
        Company company = companyService.selectOne(new EntityWrapper<Company>()
                .eq("type", 1)
                .last("LIMIT 1"));
        System.out.println("查询平台账户==============="+company);
        // 查询平台开户信息
        TEnterpriseWithdrawal enterpriseWithdrawal = enterpriseWithdrawalService.selectOne(new EntityWrapper<TEnterpriseWithdrawal>()
                .eq("companyId", company.getId())); //  替换为公司id
        System.out.println("查询平台开户信息==============="+enterpriseWithdrawal);
        // TODO 司机进件信息
        UserWithdrawal driverWith = userWithdrawalService.selectOne(new EntityWrapper<UserWithdrawal>()
                .eq("phone", driver.getPhone())
                .last("LIMIT 1"));
//        DepositReq depositReq = new DepositReq();
//        depositReq.setOutOrderNo(ToolUtil.getRandomString(32));
//        depositReq.setTotalAmount(new BigDecimal(total_fee).multiply(new BigDecimal(100)).intValue()); // 总金额
//        depositReq.setAmount(new BigDecimal(total_fee).multiply(new BigDecimal(100)).intValue()); // 支付金额
//        depositReq.setDiscountAmount(0); // 优惠金额
//        depositReq.setBalanceAcctId(driverWith.getBalanceAcctId());
//        depositReq.setDepositType("1");
//        depositReq.setPaymentType(PaymentTypeEnum.CUP_APP.getCode());
//        depositReq.setPaymentTradeNo(transaction_id); // 系统交易流水号
//        depositReq.setPaymentSucceededAt(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(new Date()));
//        depositReq.setOrderNo(transaction_id);
//        depositReq.setOrderAmount(new BigDecimal(total_fee).multiply(new BigDecimal(100)).longValue());
//        depositReq.setProductName("司机支付充值");
//        depositReq.setProductCount(1);
        try {
//            DepositResp depositResp = DepositExample.create(depositReq);
//            System.err.println(depositResp);
            AllocationReq allocationReq = new AllocationReq();
            allocationReq.setPayBalanceAcctId(driverWith.getBalanceAcctId()); // 发送方
            allocationReq.setRecvBalanceAcctId(enterpriseWithdrawal.getBalanceAcctId()); // 接收方
            BigDecimal multiply = new BigDecimal(100).multiply(new BigDecimal(total_fee));
            allocationReq.setAmount(multiply.intValue()); // 金额
            allocationReq.setPassword(Base64Util.decode(enterpriseWithdrawal.getTransactionAuthorizationCode())); // 密码
            allocationReq.setOrderNo(transaction_id);
            allocationReq.setOrderAmount(Long.valueOf(total_fee));
            allocationReq.setProductName("订单改派");
            allocationReq.setProductCount(1);
            AllocationResp allocationResp = AllocationExample.create(allocationReq);
            System.err.println("司机分账信息:"+allocationResp);
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
}