Pu Zhibing
3 天以前 e0201ae86d66acd7127a9c01080731ee22e4b974
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java
@@ -1,6 +1,5 @@
package com.stylefeng.guns.modular.system.controller.specialTrain;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.stylefeng.guns.core.base.controller.BaseController;
@@ -10,14 +9,17 @@
import com.stylefeng.guns.core.util.DateUtil;
import com.stylefeng.guns.core.util.SinataUtil;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.controller.general.TDriverController;
import com.stylefeng.guns.modular.system.controller.util.GetOpenBodySig;
import com.stylefeng.guns.modular.system.dao.LineShiftDriverMapper;
import com.stylefeng.guns.modular.system.dao.OrderCancelMapper;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import org.apache.commons.lang.time.DateFormatUtils;
import com.stylefeng.guns.modular.system.util.HttpRequestUtil;
import com.stylefeng.guns.modular.system.util.PayMoneyUtil;
import com.stylefeng.guns.modular.system.util.PushURL;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
@@ -67,8 +69,12 @@
    private MongoTemplate mongoTemplate;
    @Autowired
    private ShiroExtUtil shiroExtUtil;
    @Autowired
    private IUserService sysUserService;
    @Autowired
    private ITCompanyService iTCompanyService;
    /**
     * 跳转到跨城出行订单首页
     */
@@ -446,9 +452,6 @@
    @Autowired
    private IIncomeService incomeService;
@Autowired
private TDriverController tDriverController;
    /**
     * 取消跨城出行订单
@@ -495,6 +498,26 @@
            }
        }
        //中台修改订单状态
        ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest();
        request1.setOrderId(orderCrossCity.getTravelId());
        request1.setStatus(orderCrossCity.getState());
        if (null != orderCrossCity.getDriverId()) {
            TDriver driver2 = tDriverService.selectById(orderCrossCity.getDriverId());
            TCompany company = iTCompanyService.selectById(driver2.getCompanyId());
            request1.setDriverId(driver2.getEmpId().toString());
            request1.setSupplierShopId(company.getEnterCode());
        }
        if (2 == orderCrossCity.getPromotion() && null != orderCrossCity.getPromotionDriverId()) {
            TDriver driver2 = tDriverService.selectById(orderCrossCity.getPromotionDriverId());
            request1.setPromoterId(driver2.getEmpId().toString());
        }
        OrderUtil.modifyTravelItinerary(request1);
        //未支付,调取消订单
        if(null == orderCrossCity.getPayType() && ToolUtil.isNotEmpty(orderCrossCity.getTravelId())){
            OrderUtil.tradeOrderCancel(orderCrossCity.getTravelId());
        }
        //已支付的情况下进行退款操作
        if(null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()){
@@ -528,9 +551,36 @@
                }
                if(query.getPayType() == 1){//微信
                    Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), tOrderCrossCityId + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay");
                    if(!"SUCCESS".equals(map.get("return_code"))){
                        return ResultUtil.error(map.get("return_msg"));
                    //中台订单退款操作
                    if(ToolUtil.isNotEmpty(orderCrossCity.getTravelId())){
                        User user1 = sysUserService.selectById(user.getId());
                        TradeOrderRefundRequest request = new TradeOrderRefundRequest();
                        request.setPartnerPayId(orderCrossCity.getTravelId());
                        request.setPayId(query.getCode());
                        request.setRefundTotalFee(orderCrossCity.getPayMoney().multiply(new BigDecimal(100)).intValue() + "");
                        request.setRemark("服务商取消订单退款");
                        request.setRefundType("RF");
                        RefundInfoRequest refundInfo = new RefundInfoRequest();
                        refundInfo.setPayItemId(orderCrossCity.getTravelId());
                        refundInfo.setPayId(query.getCode());
                        refundInfo.setTradeFee(orderCrossCity.getPayMoney().multiply(new BigDecimal(100)).intValue() + "");
                        request.setRefundInfos(new ArrayList<RefundInfoRequest>(){{
                            add(refundInfo);
                        }});
                        TradeOrderRefund tradeOrderRefund = OrderUtil.tradeOrderRefund(request);
                        //退款通知
                        OrderRefundNoticeRequest request2 = new OrderRefundNoticeRequest();
                        request2.setOrderId(orderCrossCity.getTravelId());
                        request2.setRefundPayNum(tradeOrderRefund.getRefundId());
                        request2.setRefundType("5");
                        request2.setApplyRefundCharge(orderCrossCity.getPayMoney());
                        request2.setActualRefundCharge(orderCrossCity.getPayMoney());
                        request2.setRefundAccount(user1.getEnterId().toString());
                        request2.setRemark("服务商取消订单退款");
                        OrderUtil.orderRefundNotice(request2);
                        //添加交易明细
                        transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, tOrderCrossCityId);
                    }
                }else if(query.getPayType()==4){
                    // TODO 退款
@@ -551,24 +601,6 @@
                    //添加交易明细
                    transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, tOrderCrossCityId);
                }
            }
            //添加负的收入明细
            List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", tOrderCrossCityId).eq("orderType", 3));
            for(Income income : incomes){
                if(income.getUserType() == 2){//处理司机的收入
                    TDriver driver = tDriverService.selectById(income.getObjectId());
                    driver.setBalance(driver.getBalance().subtract(new BigDecimal(income.getMoney())));
                    driver.setBusinessMoney(driver.getBusinessMoney() - income.getMoney());
                    driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - income.getMoney());
                    tDriverService.updateById(driver);
                }
                Income income1 = new Income();
                BeanUtils.copyProperties(income, income1);
                income1.setMoney(income.getMoney() * -1);
                income1.setId(null);
                income1.setInsertTime(new Date());
                incomeService.insert(income1);
            }
        }
        //添加取消记录
@@ -606,34 +638,4 @@
        return SUCCESS_TIP;
    }
    
    public static ResultUtil cancleMoney(BigDecimal amount,String no) throws Exception {
        JSONObject json = new JSONObject();
        json.put("requestTimestamp", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));    // 报文请求时间
//        json.put("merOrderId", Util.getMerOrderId("34U0")); // 商户订单号
        json.put("merOrderId", no); // 商户订单号
        json.put("mid", "898150841210108"); // 商户号
        json.put("tid", "84UJWSE8");    // 终端号
        json.put("instMid", "QRPAYDEFAULT"); // 业务类型
        BigDecimal multiply = amount.multiply(new BigDecimal(100));
        int money = multiply.intValue();
        json.put("refundAmount",money);      // 支付总金额
        System.err.println("请求报文json:\n" + json);
        String  url = "https://test-api-open.chinaums.com/v1/netpay/refund";
//        String  url = "https://api-mop.chinaums.com/v1/netpay/refund";
        //OPEN-BODY-SIG 方式
        String result = GetOpenBodySig.sendOpenBodySig(url, json.toString());
        System.err.println("响应报文json:\n" + result);
        JSONObject jsonObject = JSONObject.parseObject(result);
        Object appPayRequest = jsonObject.get("appPayRequest");
        System.out.println(appPayRequest);
        return ResultUtil.success(appPayRequest);
    }
    @Autowired
    private ITEnterpriseWithdrawalService tEnterpriseWithdrawalService;
    @Autowired
    private IUserWithdrawalService userWithdrawalService;
}