puzhibing
2023-06-02 e0faebd41278c2e9389a26f39b2bfff63d68103d
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java
@@ -5,10 +5,7 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.supersavedriving.user.core.common.annotion.ServiceLog;
import com.supersavedriving.user.core.util.ToolUtil;
import com.supersavedriving.user.modular.system.model.AppUser;
import com.supersavedriving.user.modular.system.model.Driver;
import com.supersavedriving.user.modular.system.model.Order;
import com.supersavedriving.user.modular.system.model.Revenue;
import com.supersavedriving.user.modular.system.model.*;
import com.supersavedriving.user.modular.system.service.*;
import com.supersavedriving.user.modular.system.util.MallBook.model.InterfaceResponse;
import com.supersavedriving.user.modular.system.util.MallBook.model.Receive;
@@ -22,10 +19,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
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 org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -59,6 +53,9 @@
    @Autowired
    private IDriverService driverService;
    @Autowired
    private IRechargeRecordService rechargeRecordService;
@@ -386,22 +383,6 @@
            } else {//验签失败业务处理逻辑
                System.err.println("支付回调验签失败");
            }
//            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
//            if(null != map){
//                String out_trade_no = map.get("out_trade_no");
//                String transaction_id = map.get("transaction_id");
//                String result = map.get("result");
//                String orderId = out_trade_no.substring(17);
//                ResultUtil resultUtil = orderService.orderPayCallback(orderId, transaction_id);
//                if(resultUtil.getCode() == 10000){
//                    PrintWriter out = response.getWriter();
//                    out.print(result);
//                    out.flush();
//                    out.close();
//                }
//            }
        }catch (Exception e){
            e.printStackTrace();
        }
@@ -409,69 +390,99 @@
    /**
     * 异步分账回调
     * 转账回调
     * @param execute
     * @param response
     */
    @ResponseBody
    @PostMapping("/base/order/ledgerCallback")
    public void ledgerCallback(HttpServletRequest request, HttpServletResponse response){
        try{
            String code = request.getParameter("code");
            String version = request.getParameter("version");
            String msg = request.getParameter("msg");
            String date = request.getParameter("date");
            String result = request.getParameter("result");
            String sign = request.getParameter("sign");
            InterfaceResponse interfaceResponse = new InterfaceResponse();
            interfaceResponse.setCode(code);
            interfaceResponse.setVersion(version);
            interfaceResponse.setMsg(msg);
            interfaceResponse.setDate(date);
            interfaceResponse.setResult(result);
            interfaceResponse.setSign(sign);
            // 验签
            boolean verify = RSASignature.validate(interfaceResponse.content(), interfaceResponse.getSign());
            if (verify) {//验签成功业务处理逻辑
                JSONObject jsonObject = JSON.parseObject(result);
                String merOrderId = jsonObject.getString("merOrderId");
                String orderId = jsonObject.getString("parameter1");
                //确认收货
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        Order order = orderService.selectById(orderId);
                        List<Revenue> revenues = revenueService.selectList(new EntityWrapper<Revenue>().eq("userType", 2).eq("orderId", order.getId()));
                        Receive receive = new Receive();//确认收货
                        receive.setOriginalMerOrderId(merOrderId);
                        receive.setRcvAmount(String.valueOf(order.getPayMoney() * 100));
                        List<ReceiveUser> splitList = new ArrayList<>();
                        for (Revenue revenue : revenues) {
                            Driver driver = driverService.selectById(revenue.getUserId());
                            ReceiveUser receiveUser = new ReceiveUser();
                            receiveUser.setSplitUserId(driver.getMerchantNumber());
                            receiveUser.setRcvSplitAmount(revenue.getAmount().toString());
                            splitList.add(receiveUser);
                        }
                        receive.setSplitList(splitList);
                        TrhRequest<Receive> request1 = new TrhRequest();
                        InterfaceResponse execute = request1.execute(receive, Receive.SERVICE_CODE);
                        if(!"0000".equals(execute.getCode())){
                            System.err.println("确认收货" + execute.getMsg());
                        }
                        JSONObject jsonObject = JSON.parseObject(execute.getResult());
                        String status = jsonObject.getString("status");
                        if("2".equals(status)){
                            System.err.println("确认收货失败");
                        }
                        if("0".equals(status)){
                            System.err.println("确认收货处理中");
                        }
                    }
                }, 30000);
    @PostMapping("/base/order/zhaunzhangCallback")
    public void zhaunzhangCallback(@RequestBody InterfaceResponse execute, HttpServletResponse response){
        try {
            if("0000".equals(execute.getCode())){
                JSONObject jsonObject = JSON.parseObject(execute.getResult());
                Integer status = jsonObject.getInteger("status");//0:待处理;1:成功;2:失败
                if(2 == status){
                    System.err.println("转账失败");
                    return;
                }
                String parameter1 = jsonObject.getString("parameter1");
                RechargeRecord rechargeRecord = rechargeRecordService.selectById(parameter1);
                response.setStatus(200);
                PrintWriter out = response.getWriter();
                out.print("OK");
                out.flush();
                out.close();
            }else{
                System.err.println("转账失败:" + execute.getMsg());
                return;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 异步分账回调
     */
    @ResponseBody
    @PostMapping("/base/order/ledgerCallback")
    public void ledgerCallback(@RequestBody InterfaceResponse execute, HttpServletResponse response){
        try{
            // 验签
            boolean verify = RSASignature.validate(execute.content(), execute.getSign());
            if (verify) {//验签成功业务处理逻辑
                if("0000".equals(execute.getCode())){
                    JSONObject jsonObject = JSON.parseObject(execute.getResult());
                    Integer status = jsonObject.getInteger("status");
                    if(2 == status){
                        System.err.println("异步分账回调异常");
                        return;
                    }
                    String merOrderId = jsonObject.getString("merOrderId");
                    String orderId = jsonObject.getString("parameter1");
                    //确认收货
                    new Timer().schedule(new TimerTask() {
                        @Override
                        public void run() {
                            Order order = orderService.selectById(orderId);
                            List<Revenue> revenues = revenueService.selectList(new EntityWrapper<Revenue>().eq("userType", 2).eq("orderId", order.getId()));
                            Receive receive = new Receive();//确认收货
                            receive.setOriginalMerOrderId(merOrderId);
                            receive.setRcvAmount(String.valueOf(order.getPayMoney() * 100));
                            List<ReceiveUser> splitList = new ArrayList<>();
                            for (Revenue revenue : revenues) {
                                Driver driver = driverService.selectById(revenue.getUserId());
                                ReceiveUser receiveUser = new ReceiveUser();
                                receiveUser.setSplitUserId(driver.getMerchantNumber());
                                receiveUser.setRcvSplitAmount(revenue.getAmount().toString());
                                splitList.add(receiveUser);
                            }
                            receive.setSplitList(splitList);
                            TrhRequest<Receive> request1 = new TrhRequest();
                            InterfaceResponse execute = request1.execute(receive, Receive.SERVICE_CODE);
                            if(!"0000".equals(execute.getCode())){
                                System.err.println("确认收货" + execute.getMsg());
                            }
                            JSONObject jsonObject = JSON.parseObject(execute.getResult());
                            String status = jsonObject.getString("status");
                            if("2".equals(status)){
                                System.err.println("确认收货失败");
                            }
                            if("0".equals(status)){
                                System.err.println("确认收货处理中");
                            }
                        }
                    }, 15000);
                    response.setStatus(200);
                    PrintWriter out = response.getWriter();
                    out.print("OK");
                    out.flush();
                    out.close();
                }
            } else {//验签失败业务处理逻辑
                System.err.println("支付回调验签失败");
            }