puzhibing
2023-12-04 be8545029b0dfc76a7b74c57098d74672bbdaf95
UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
@@ -11,24 +11,40 @@
import com.stylefeng.guns.modular.smallLogistics.model.OrderLogisticsSpread;
import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService;
import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsSpreadService;
import com.stylefeng.guns.modular.system.dao.RegionMapper;
import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper;
import com.stylefeng.guns.modular.system.dao.SysIntegralMapper;
import com.stylefeng.guns.modular.system.dao.SystemPriceMapper;
import com.stylefeng.guns.modular.system.dao.*;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.GoogleMap.*;
import com.stylefeng.guns.modular.system.util.Tingg.TinggPayUtil;
import com.stylefeng.guns.modular.system.util.Tingg.TinggPayoutUtil;
import com.stylefeng.guns.modular.system.util.Tingg.model.AuthStatus;
import com.stylefeng.guns.modular.system.util.Tingg.model.CheckoutRequest;
import com.stylefeng.guns.modular.system.util.Tingg.model.PayoutResponse;
import com.stylefeng.guns.modular.system.util.Tingg.model.Results;
import com.stylefeng.guns.modular.system.util.itextpdf.HtmlToPdfUtils;
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
import com.stylefeng.guns.modular.taxi.model.PaymentRecord;
import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService;
import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.FormElement;
import org.jsoup.select.Elements;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -71,9 +87,6 @@
    @Autowired
    private IPaymentRecordService paymentRecordService;
   /* @Autowired
    private ICBCPayUtil icbcPayUtil;*/
    @Autowired
    private PayMoneyUtil payMoneyUtil;
@@ -107,10 +120,25 @@
    @Autowired
    private IUserCouponRecordService userCouponRecordService;
    @Autowired
    private IBankCardService bankCardService;
    @Autowired
    private TinggPayoutUtil tinggPayoutUtil;
    @Value("${callbackPath}")
    private String callbackPath;
    @Value("${spring.mail.template-path}")
    private String templatePath;
    @Autowired
    private TEmailService emailService;
    private static List<Integer> orderIds = new ArrayList<>();
    @Autowired
    private IPhoneService phoneService;
@@ -122,18 +150,18 @@
     */
    @Override
    public ResultUtil judgingTheCity(String startLonLat, String endAddress) throws Exception {
        Map<String, String> sgeocode = gdMapGeocodingUtil.geocode(startLonLat.split(",")[0], startLonLat.split(",")[1]);
        String scityCode = sgeocode.get("cityCode");
        Map<String, Object> geocoding = gdMapGeocodingUtil.geocoding(endAddress);
        if(Integer.valueOf(geocoding.get("status").toString()) != 0){
            return ResultUtil.error("收货地址有误,无法查询具体地址信息");
        }
        List<String> list = (List<String>)geocoding.get("data");
        Map<String, String> egeocode = gdMapGeocodingUtil.geocode(list.get(0).split(",")[0], list.get(0).split(",")[1]);
        String ecityCode = egeocode.get("cityCode");
        if(!scityCode.equals(ecityCode)){
            return ResultUtil.error("已超出服务范围,请重新选择跨城小件物流");
        }
//        Map<String, String> sgeocode = gdMapGeocodingUtil.geocode(startLonLat.split(",")[0], startLonLat.split(",")[1]);
//        String scityCode = sgeocode.get("cityCode");
//        Map<String, Object> geocoding = gdMapGeocodingUtil.geocoding(endAddress);
//        if(Integer.valueOf(geocoding.get("status").toString()) != 0){
//            return ResultUtil.error("收货地址有误,无法查询具体地址信息");
//        }
//        List<String> list = (List<String>)geocoding.get("data");
//        Map<String, String> egeocode = gdMapGeocodingUtil.geocode(list.get(0).split(",")[0], list.get(0).split(",")[1]);
//        String ecityCode = egeocode.get("cityCode");
//        if(!scityCode.equals(ecityCode)){
//            return ResultUtil.error("已超出服务范围");
//        }
        return ResultUtil.success();
    }
@@ -147,47 +175,18 @@
     * @throws Exception
     */
    @Override
    public ResultUtil queryLogisticsUnitPrice(Integer type, String startLonLat, String endAddress, Integer uid) throws Exception {
        ReverseGeocodeVo reverseGeocode = GoogleMapUtil.getReverseGeocode(Double.valueOf(startLonLat.split(",")[1]), Double.valueOf(startLonLat.split(",")[0]));
        if(null == reverseGeocode){
            return ResultUtil.error("地理位置解析失败");
    public ResultUtil queryLogisticsUnitPrice(Integer type, String startLonLat, String endLonLat, String endAddress, Integer uid, Integer language) throws Exception {
        String[] split = endLonLat.split(",");
        Double lng = Double.valueOf(split[0]);
        Double lat = Double.valueOf(split[1]);
        ResultUtil<Map<String, Double>> price = this.getPrice1(type, startLonLat.split(",")[0], startLonLat.split(",")[1], lng.toString(), lat.toString(), language);
        if(price.getCode() != 200){
            return price;
        }
        AddressComponentsVo[] addressComponentsVos = reverseGeocode.getAddressComponentsVos();
        String[] city = new String[addressComponentsVos.length];
        for (int i = 0; i < addressComponentsVos.length; i++) {
            city[i] = addressComponentsVos[i].getLongName();
        }
        Company query = companyCityService.query(city);
        if(null == query){
            return ResultUtil.error("预约取货点暂无企业服务");
        }
        Double price1 = 0D;
        Double price2 = 0D;
        if(type == 4){//同城
            Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null);
            if(null == query1){
                return ResultUtil.error("请先完善价格设定");
            }
            String content = String.valueOf(query1.get("content"));
            JSONObject jsonObject = JSON.parseObject(content);
            price1 = jsonObject.getDouble("num2");
            price2 = jsonObject.getDouble("num13");
        }else{
            Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null);
            if(null == query1){
                return ResultUtil.error("请先完善价格设定");
            }
            String content = String.valueOf(query1.get("content"));
            JSONObject jsonObject = JSON.parseObject(content);
            price1 = jsonObject.getDouble("num1");
            price2 = jsonObject.getDouble("num2");
        }
        int i = this.selectCount(new EntityWrapper<OrderLogistics>().eq("userId", uid).eq("isDelete", 1));
        Map<String, Object> map = new HashMap<>();
        map.put("ordinary", price1);
        map.put("precious", price2);
        map.put("first", i);
        return ResultUtil.success(map);
        Integer i = this.selectCount(new EntityWrapper<OrderLogistics>().eq("userId", uid).eq("isDelete", 1));
        Map<String, Double> map = price.getData();
        map.put("first", i.doubleValue());
        return price;
    }
@@ -199,14 +198,11 @@
     * @return
     * @throws Exception
     */
    public ResultUtil queryPayMoney(Integer number, Integer type, String startLonLat, String endAddress) throws Exception{
        FindPlaceFromTextVo findplacefromtext = GoogleMapUtil.findplacefromtext(endAddress);
        if(null == findplacefromtext){
            return ResultUtil.error("收货地址有误,无法查询具体地址信息");
        }
        Double lng = findplacefromtext.getLng();
        Double lat = findplacefromtext.getLat();
        ResultUtil<Map<String, Double>> price = this.getPrice1(type, startLonLat.split(",")[0], startLonLat.split(",")[1], lng.toString(), lat.toString());
    public ResultUtil queryPayMoney(Integer number, Integer type, String startLonLat, String endLonLat, String endAddress, Integer language) throws Exception{
        String[] split = endLonLat.split(",");
        Double lng = Double.valueOf(split[0]);
        Double lat = Double.valueOf(split[1]);
        ResultUtil<Map<String, Double>> price = this.getPrice1(type, startLonLat.split(",")[0], startLonLat.split(",")[1], lng.toString(), lat.toString(), language);
        if(price.getCode() == 200 && type == 5){
            Map<String, Double> data = price.getData();
            data.put("ordinary", data.get("ordinary") * number);
@@ -240,7 +236,7 @@
     */
    @Override
    public ResultUtil smallLogistics(Integer type, Integer cargoType, Integer cargoNumber, String remark, String placementLon, String placementLat, String startLon, String startLat, String startAddress, String recipient,
                                     String recipientPhone, String endAddress, Integer urgent, Double tipMoney, Date travelTime, Integer orderSource, Integer uid) throws Exception {
                                     String recipientPhone, String endLonLat, String endAddress, Integer urgent, Double tipMoney, Date travelTime, Integer orderSource, Integer uid, Integer language) throws Exception {
        startAddress = startAddress.replaceAll("& #40;", "(");
        startAddress = startAddress.replaceAll("& #41;", ")");
        endAddress = endAddress.replaceAll("& #40;", "(");
@@ -248,7 +244,7 @@
        OrderLogistics orderLogistics = new OrderLogistics();
        Company query = companyCityService.query1(placementLon, placementLat);
        if(null == query){
            return ResultUtil.error("该地点暂无企业服务");
            return ResultUtil.error(language == 1 ? "该地点暂无企业服务" : language == 2 ? "No service yet at this area" : "Pas encore de service dans cette zone");
        }
        orderLogistics.setCompanyId(query.getId());
        orderLogistics.setType(type);
@@ -261,7 +257,7 @@
        orderLogistics.setPlacementLat(Double.valueOf(placementLat));
        ReverseGeocodeVo reverseGeocode = GoogleMapUtil.getReverseGeocode(Double.valueOf(placementLat), Double.valueOf(placementLon));
        if(null == reverseGeocode){
            return ResultUtil.error("解析地址出错");
            return ResultUtil.error(language == 1 ? "解析地址出错" : language == 2 ? "Address resolution error" : "Erreur de résolution d’adresse");
        }
        String address = reverseGeocode.getAddress();
@@ -269,12 +265,10 @@
        orderLogistics.setStartLon(Double.valueOf(startLon));
        orderLogistics.setStartLat(Double.valueOf(startLat));
        orderLogistics.setStartAddress(startAddress);
        FindPlaceFromTextVo findplacefromtext = GoogleMapUtil.findplacefromtext(endAddress);
        if(null == findplacefromtext){
            return ResultUtil.error("收货地址有误,无法查询具体地址信息");
        }
        Double lng = findplacefromtext.getLng();
        Double lat = findplacefromtext.getLat();
        String[] split = endLonLat.split(",");
        Double lng = Double.valueOf(split[0]);
        Double lat = Double.valueOf(split[1]);
        orderLogistics.setEndLon(lng);
        orderLogistics.setEndLat(lat);
        orderLogistics.setEndAddress(endAddress);
@@ -284,7 +278,7 @@
        orderLogistics.setMileage(0D);
        orderLogistics.setIsReassign(1);
        orderLogistics.setReassignNotice(0);
        ResultUtil<Map<String, Double>> price = this.getPrice1(type, String.valueOf(startLon), String.valueOf(startLat), lng.toString(), lat.toString());
        ResultUtil<Map<String, Double>> price = this.getPrice1(type, String.valueOf(startLon), String.valueOf(startLat), lng.toString(), lat.toString(), language);
        if(price.getCode() != 200){
            return price;
        }
@@ -298,13 +292,15 @@
        orderLogistics.setTipMoney(tipMoney);
        orderLogistics.setState(7);//待支付
        orderLogistics.setInsertTime(new Date());
        orderLogistics.setTravelTime(travelTime);
        orderLogistics.setTravelTime(null == travelTime ? new Date() : travelTime);
        orderLogistics.setOrderSource(orderSource);
        orderLogistics.setIsDelete(1);
        this.insert(orderLogistics);
        //添加消息
        systemNoticeService.addSystemNotice(1, "您的"+ (type == 4 ? "同城" : "跨城") + "小件物流订单已下单成功,我们正在为您指派司机,请稍后!", orderLogistics.getUserId(), 1);
        systemNoticeService.addSystemNotice(1, language == 1 ? "您的市内包裹订单已下单成功,我们正在为您指派司机,请稍后!" :
                                            language == 2 ? "Your parcel order has been successfully placed, we are assigning a driver for you, please wait!"
                                                    : "Votre commande de colis a bien été passée, nous vous assignons un chauffeur, veuillez patienter!", orderLogistics.getUserId(), 1);
        BaseWarpper baseWarpper = new BaseWarpper();
        baseWarpper.setId(orderLogistics.getId());
@@ -319,7 +315,7 @@
     * @throws Exception
     */
    public ResultUtil<Map<String, Double>> getPrice(Integer type, String startLon, String startLat, String endLon, String endLat) throws Exception{
        Company query = companyCityService.query(startLon, startLat);
        Company query = companyCityService.query1(startLon, startLat);
        if(null == query){
            return ResultUtil.error("预约取货点暂无企业服务");
        }
@@ -335,29 +331,17 @@
            if(dist.compareTo(0D) >= 0 && dist.compareTo(jsonObject.getDouble("num1")) < 0){
                price1 = jsonObject.getDouble("num2");
            }
            if(dist.compareTo(0D) >= 0 && dist.compareTo(jsonObject.getDouble("num12")) < 0){
                price2 = jsonObject.getDouble("num13");
            }
            if(dist.compareTo(jsonObject.getDouble("num3")) >= 0 && dist.compareTo(jsonObject.getDouble("num4")) < 0){
                price1 = jsonObject.getDouble("num5");
            }
            if(dist.compareTo(jsonObject.getDouble("num14")) >= 0 && dist.compareTo(jsonObject.getDouble("num15")) < 0){
                price2 = jsonObject.getDouble("num16");
            }
            if(dist.compareTo(jsonObject.getDouble("num6")) >= 0 && dist.compareTo(jsonObject.getDouble("num7")) < 0){
                price1 = jsonObject.getDouble("num8");
            }
            if(dist.compareTo(jsonObject.getDouble("num17")) >= 0 && dist.compareTo(jsonObject.getDouble("num18")) < 0){
                price2 = jsonObject.getDouble("num19");
            }
            if(dist.compareTo(jsonObject.getDouble("num9")) >= 0 && dist.compareTo(jsonObject.getDouble("num10")) < 0){
                price1 = jsonObject.getDouble("num11");
            }
            if(dist.compareTo(jsonObject.getDouble("num20")) >= 0 && dist.compareTo(jsonObject.getDouble("num21")) < 0){
                price2 = jsonObject.getDouble("num22");
            }
        }else{
            Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null);
@@ -374,10 +358,11 @@
    public ResultUtil<Map<String, Double>> getPrice1(Integer type, String startLon, String startLat, String endLon, String endLat) throws Exception{
    public ResultUtil<Map<String, Double>> getPrice1(Integer type, String startLon, String startLat, String endLon, String endLat, Integer language) throws Exception{
        Company query = companyCityService.query1(startLon, startLat);
        if(null == query){
            return ResultUtil.error("预约取货点暂无企业服务");
            return ResultUtil.error(language == 1 ? "预约取货点暂无企业服务" : language == 2 ?
                    "No service yet at the reserved pickup point." : "Les points de ramassage prévus ne sont pas disponibles pour le moment.");
        }
        Double price1 = 0D;
        Double price2 = 0D;
@@ -385,7 +370,10 @@
            Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null);
            DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(Double.valueOf(startLat), Double.valueOf(startLon), Double.valueOf(endLat), Double.valueOf(endLon));
            if(null == distancematrix){
                return ResultUtil.error("计算距离出错");
                return ResultUtil.error(language == 1 ? "计算距离出错" : language == 2 ? "Errors in computing distance" : "Erreurs dans le calcul de la distance");
            }
            if(distancematrix.getDistance() == 0){
                return ResultUtil.error(language == 1 ? "未获取到有效的距离" : language == 2 ? "Not obtaining available distance" : "Ne pas obtenir la distance disponible");
            }
            String content = String.valueOf(query1.get("content"));
            JSONObject jsonObject = JSON.parseObject(content);
@@ -394,29 +382,17 @@
            if(dist.compareTo(0D) >= 0 && dist.compareTo(jsonObject.getDouble("num1")) < 0){
                price1 = jsonObject.getDouble("num2");
            }
            if(dist.compareTo(0D) >= 0 && dist.compareTo(jsonObject.getDouble("num12")) < 0){
                price2 = jsonObject.getDouble("num13");
            }
            if(dist.compareTo(jsonObject.getDouble("num3")) >= 0 && dist.compareTo(jsonObject.getDouble("num4")) < 0){
                price1 = jsonObject.getDouble("num5");
            }
            if(dist.compareTo(jsonObject.getDouble("num14")) >= 0 && dist.compareTo(jsonObject.getDouble("num15")) < 0){
                price2 = jsonObject.getDouble("num16");
            }
            if(dist.compareTo(jsonObject.getDouble("num6")) >= 0 && dist.compareTo(jsonObject.getDouble("num7")) < 0){
                price1 = jsonObject.getDouble("num8");
            }
            if(dist.compareTo(jsonObject.getDouble("num17")) >= 0 && dist.compareTo(jsonObject.getDouble("num18")) < 0){
                price2 = jsonObject.getDouble("num19");
            }
            if(dist.compareTo(jsonObject.getDouble("num9")) >= 0 && dist.compareTo(jsonObject.getDouble("num10")) < 0){
                price1 = jsonObject.getDouble("num11");
            }
            if(dist.compareTo(jsonObject.getDouble("num20")) >= 0 && dist.compareTo(jsonObject.getDouble("num21")) < 0){
                price2 = jsonObject.getDouble("num22");
            if(dist.compareTo(jsonObject.getDouble("num10")) > 0){
                return ResultUtil.error(language == 1 ? "超出可服务范围" : language == 2 ? "Beyond service range" : "Au-delà de la portée de service");
            }
        }else{
            Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null);
@@ -449,7 +425,7 @@
                    if(ToolUtil.isNotEmpty(vehicle)){
                        integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
                    }
                    Company query = companyCityService.query(String.valueOf(orderLogistics.getStartLon()), String.valueOf(orderLogistics.getStartLat()));//获取起点所属分公司
                    Company query = companyCityService.query1(String.valueOf(orderLogistics.getStartLon()), String.valueOf(orderLogistics.getStartLat()));//获取起点所属分公司
                    List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//用专车的推单配置
                    for(int i = 1; i <= querys.size(); i++){
                        PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0);
@@ -502,10 +478,10 @@
     * @throws Exception
     */
    @Override
    public ResultUtil payLogisticsOrder(Integer payType, Integer orderId, Integer type) throws Exception {
    public ResultUtil payLogisticsOrder(Integer payType, Integer bankCardId, Integer orderId, Integer type, Integer language) throws Exception {
        OrderLogistics orderLogistics = this.selectById(orderId);
        if(orderLogistics.getState() != 7){
            return ResultUtil.error("订单已完成支付,不允许重复支付", "");
            return ResultUtil.error(language == 1 ? "订单已完成支付,不允许重复支付" : language == 2 ? "The order has been paid, recurring payments is not allowed." : "La commande a été payée, les paiements récurrents ne sont pas autorisés.", "");
        }
        Integer uid = orderLogistics.getUserId();
        Double orderMoney = orderLogistics.getOrderMoney();
@@ -513,33 +489,63 @@
            orderMoney += null != orderLogistics.getTipMoney() ? orderLogistics.getTipMoney() : 0;
        }
        UserInfo userInfo = userInfoService.selectById(uid);
        ResultUtil resultUtil = ResultUtil.success(new HashMap<>());
        ResultUtil resultUtil = ResultUtil.success("");
        if(payType == 1){//手机支付
           return payMoneyUtil.weixinpay("小件物流下单支付",orderId +"",orderId + "_" + orderLogistics.getType(),orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
                  /*  icbcPayUtil.placeAnOrder(orderId + "," + orderLogistics.getType(), 9, 5, uid.toString(),
                            "小件物流下单支付", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "",
                            type, userInfo.getAppletsOpenId());*/
            /*if(map.get("code").equals("200")){
                paymentRecordService.saveData(1, null, null, orderId, orderLogistics.getType(), 1, orderMoney, map.get("order_id"), 1);//添加预支付数据
                resultUtil = ResultUtil.success(map.get("data"));
        if(payType == 1) {//手机支付
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String merchantTransactionId = sdf.format(new Date()) + "4" + language + orderId;
            CheckoutRequest checkoutRequest = new CheckoutRequest();
            checkoutRequest.setMsisdn(Long.valueOf(userInfo.getPhone()));
            checkoutRequest.setCustomerEmail(userInfo.getEmail());
            checkoutRequest.setAccountNumber(userInfo.getPhone());
            checkoutRequest.setCustomerFirstName(userInfo.getFirstName());
            checkoutRequest.setCustomerLastName(userInfo.getLastName());
            checkoutRequest.setRequestAmount(orderMoney);
            checkoutRequest.setMerchantTransactionId(merchantTransactionId);
            checkoutRequest.setRequestDescription("Travel completion payment");
            checkoutRequest.setCallbackUrl(callbackPath + "/base/wxPayOrderTaxi");
            checkoutRequest.setPendingRedirectUrl("");
            checkoutRequest.setSuccessRedirectUrl("http://182.160.16.251:81/payMoney/pages/success.html");
            checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html");
            resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
            if(resultUtil.getCode()==200){
                paymentRecordService.saveData(1, null, null, orderId, 4, 1, orderMoney, null, 1);//添加预支付数据
            }else{
                resultUtil = ResultUtil.error(map.get("msg"), "");
            }*/
                resultUtil = ResultUtil.error(language == 1 ? "支付失败" : language == 2 ? "Payment failure" : "Paiement échoué", "");
            }
            return resultUtil;
        }
        if(payType == 2){//银行卡支付
            return payMoneyUtil.alipay("小件物流下单支付","小件物流下单支付",orderId + "," + orderLogistics.getType(),orderMoney+"","/base/aliPayOrderTaxi");
           /* Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + "," + orderLogistics.getType(), 10, 5, uid.toString(), "小件物流下单支付", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null);
            if(map.get("code").equals("200")){
                paymentRecordService.saveData(1, null, null, orderId, orderLogistics.getType(), 2, orderMoney, map.get("order_id"), 1);//添加预支付数据
                resultUtil = ResultUtil.success(map.get("data"));
        if(payType == 2) {//银行卡支付
            BankCard bankCard = bankCardService.selectById(bankCardId);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String merchantTransactionId = sdf.format(new Date()) + "4" + language + orderId;
            CheckoutRequest checkoutRequest = new CheckoutRequest();
            checkoutRequest.setMsisdn(Long.valueOf(bankCard.getCode()));
            checkoutRequest.setCustomerEmail(userInfo.getEmail());
            checkoutRequest.setAccountNumber(bankCard.getCode());
            checkoutRequest.setCustomerFirstName(bankCard.getFirstName());
            checkoutRequest.setCustomerLastName(bankCard.getLastName());
            checkoutRequest.setRequestAmount(orderMoney);
            checkoutRequest.setMerchantTransactionId(merchantTransactionId);
            checkoutRequest.setRequestDescription("Travel completion payment");
            checkoutRequest.setCallbackUrl(callbackPath + "/base/wxPayOrderTaxi");
            checkoutRequest.setPendingRedirectUrl("");
            checkoutRequest.setSuccessRedirectUrl("http://182.160.16.251:81/payMoney/pages/success.html");
            checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html");
            resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
            if(resultUtil.getCode()==200){
                paymentRecordService.saveData(1, null, null, orderId, 4, 2, orderMoney, null, 1);//添加预支付数据
            }else{
                resultUtil = ResultUtil.error(map.get("msg"), "");
            }*/
                resultUtil = ResultUtil.error(language == 1 ? "支付失败" : language == 2 ? "Payment failure" : "Paiement échoué", "");
            }
            return resultUtil;
        }
        if(payType == 3){//余额支付
            if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){
                return ResultUtil.error("余额不足,无法完成支付", "");
                return ResultUtil.error(language == 1 ? "账户余额不足" : language == 2 ? "Insufficient balance" : "Solde insuffisant", "");
            }
            userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
@@ -548,7 +554,7 @@
            userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
            //添加交易明细
            transactionDetailsService.saveData(uid, "小件物流下单支付", orderMoney, 2, 1, 1, 4, orderId);
            transactionDetailsService.saveData(uid, "包裹下单支付", orderMoney, 2, 1, 1, 4, orderId);
            userInfoService.updateById(userInfo);
            orderLogistics.setState(1);//小件物流先支付后司机抢单
@@ -563,8 +569,175 @@
                }
            }).start();
            systemNoticeService.addSystemNotice(1, "您已使用余额成功完成小件物流订单支付,谢谢使用!", uid, 1);
            if(ToolUtil.isNotEmpty(userInfo.getEmail())){
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            String path = templatePath + "user/receiptLogistics.html";
                            Document document = Jsoup.parse(new File(path), "UTF-8");
                            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
                            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                            Driver driver = driverService.selectById(orderLogistics.getDriverId());
                            if(1 == language){
                                document.getElementById("english").remove();
                                document.getElementById("french").remove();
                                Element title_chinese = document.getElementById("title_chinese");
                                title_chinese.text(DateUtil.conversionFormat(language, sdf2.format(orderLogistics.getTravelTime())) + ",您在I-GO1个订单消费GHS " + orderLogistics.getPayMoney());
                                Element xcf_chinese = document.getElementById("xcf_chinese");
                                xcf_chinese.text("GHS " + orderLogistics.getOrderMoney());
                                Element xj_chinese = document.getElementById("xj_chinese");
                                xj_chinese.text("GHS " + orderLogistics.getOrderMoney());
                                Element pay_type_chinese = document.getElementById("pay_type_chinese");
                                pay_type_chinese.text("现金");
                                Element pay_money_chinese = document.getElementById("pay_money_chinese");
                                pay_money_chinese.text("GHS " + orderLogistics.getPayMoney());
                                Element pdf_chinese = document.getElementById("pdf_chinese");
                                pdf_chinese.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4");
                                Element lost_item_chinese = document.getElementById("lost_item_chinese");
                                lost_item_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4");
//                    Element track_chinese = document.getElementById("track_chinese");
//                    track_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/location.html");
                                Element pay_time_chinese = document.getElementById("pay_time_chinese");
                                pay_time_chinese.text(DateUtil.conversionFormat(language, sdf1.format(orderLogistics.getTravelTime())));
                                Elements driver_chinese = document.getElementsByClass("driver_chinese");
                                for (int i = 0; i < driver_chinese.size(); i++) {
                                    Element element = driver_chinese.get(i);
                                    element.text(driver.getFirstName() + "." + driver.getLastName());
                                }
                                Element start_address_chinese = document.getElementById("start_address_chinese");
                                start_address_chinese.text(orderLogistics.getStartAddress());
                                Element end_address_chinese = document.getElementById("end_address_chinese");
                                end_address_chinese.text(orderLogistics.getEndAddress());
                                Phone phone = phoneService.selectOne(new EntityWrapper<Phone>().eq("type", 2).eq("companyId", driver.getCompanyId()));
                                Element server_tel_chinese = document.getElementById("server_tel_chinese");
                                server_tel_chinese.attr("href", "tel:" + (null != phone ? phone.getPhone() : ""));
                            }
                            if(2 == language){
                                document.getElementById("chinese").remove();
                                document.getElementById("french").remove();
                                Element title_english = document.getElementById("title_english");
                                title_english.text(DateUtil.conversionFormat(language, sdf2.format(orderLogistics.getTravelTime())) + ",You spent GHS " + orderLogistics.getPayMoney() + " on the trip ");
                                Element xcf_english = document.getElementById("xcf_english");
                                xcf_english.text("GHS " + orderLogistics.getOrderMoney());
                                Element xj_english = document.getElementById("xj_english");
                                xj_english.text("GHS " + orderLogistics.getOrderMoney());
                                Element pay_type_english = document.getElementById("pay_type_english");
                                pay_type_english.text("cash");
                                Element pay_money_english = document.getElementById("pay_money_english");
                                pay_money_english.text("GHS " + orderLogistics.getPayMoney());
                                Element pdf_english = document.getElementById("pdf_english");
                                pdf_english.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4");
                                Element lost_item_english = document.getElementById("lost_item_english");
                                lost_item_english.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4");
//                    Element track_english = document.getElementById("track_english");
//                    track_english.attr("href", "http://182.160.16.251:81/mailbox/user/location.html");
                                Element pay_time_english = document.getElementById("pay_time_english");
                                pay_time_english.text(DateUtil.conversionFormat(language, sdf1.format(orderLogistics.getTravelTime())));
                                Elements driver_english = document.getElementsByClass("driver_english");
                                for (int i = 0; i < driver_english.size(); i++) {
                                    Element element = driver_english.get(i);
                                    element.text(driver.getFirstName() + "." + driver.getLastName());
                                }
                                Element start_address_english = document.getElementById("start_address_english");
                                start_address_english.text(orderLogistics.getStartAddress());
                                Element end_address_english = document.getElementById("end_address_english");
                                end_address_english.text(orderLogistics.getEndAddress());
                                Phone phone = phoneService.selectOne(new EntityWrapper<Phone>().eq("type", 2).eq("companyId", driver.getCompanyId()));
                                Element server_tel_english = document.getElementById("server_tel_english");
                                server_tel_english.attr("href", "tel:" + (null != phone ? phone.getPhone() : ""));
                            }
                            if(3 == language){
                                document.getElementById("chinese").remove();
                                document.getElementById("english").remove();
                                Element title_french = document.getElementById("title_french");
                                title_french.text("Le " + DateUtil.conversionFormat(language, sdf2.format(orderLogistics.getTravelTime())) + ", vous avez dépensé GHS " + orderLogistics.getPayMoney() + " sur le voyage");
                                Element xcf_french = document.getElementById("xcf_french");
                                xcf_french.text("GHS " + orderLogistics.getOrderMoney());
                                Element xj_french = document.getElementById("xj_french");
                                xj_french.text("GHS " + orderLogistics.getOrderMoney());
                                Element pay_type_french = document.getElementById("pay_type_french");
                                pay_type_french.text("espèces");
                                Element pay_money_french = document.getElementById("pay_money_french");
                                pay_money_french.text("GHS " + orderLogistics.getPayMoney());
                                Element pdf_french = document.getElementById("pdf_french");
                                pdf_french.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4");
                                Element lost_item_french = document.getElementById("lost_item_french");
                                lost_item_french.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4");
//                    Element track_french = document.getElementById("track_french");
//                    track_french.attr("href", "http://182.160.16.251:81/mailbox/user/location.html");
                                Element pay_time_french = document.getElementById("pay_time_french");
                                pay_time_french.text(DateUtil.conversionFormat(language, sdf1.format(orderLogistics.getTravelTime())));
                                Elements driver_french = document.getElementsByClass("driver_french");
                                for (int i = 0; i < driver_french.size(); i++) {
                                    Element element = driver_french.get(i);
                                    element.text(driver.getFirstName() + "." + driver.getLastName());
                                }
                                Element start_address_french = document.getElementById("start_address_french");
                                start_address_french.text(orderLogistics.getStartAddress());
                                Element end_address_french = document.getElementById("end_address_french");
                                end_address_french.text(orderLogistics.getEndAddress());
                                Phone phone = phoneService.selectOne(new EntityWrapper<Phone>().eq("type", 2).eq("companyId", driver.getCompanyId()));
                                Element server_tel_french = document.getElementById("server_tel_french");
                                server_tel_french.attr("href", "tel:" + (null != phone ? phone.getPhone() : ""));
                            }
                            EmailUtil.send(userInfo.getEmail(), language == 1 ? "包裹收据" : language == 2 ? "Parcel receipt" : "Réception de colis",  document.html());
                            //开始生成pdf收据和html收据
                            File file = new File("/usr/local/nginx/html/files/html/");
                            if(!file.exists()){
                                file.mkdirs();
                            }
                            file = new File("/usr/local/nginx/html/files/html/parcel_receipt_" + orderId + ".html");
                            if(!file.exists()){
                                file.createNewFile();
                            }
                            FileWriter fileWriter = new FileWriter(file);
                            fileWriter.write(document.html());
                            fileWriter.flush();
                            fileWriter.close();
                            FileInputStream fileInputStream = new FileInputStream(file);
                            File file1 = new File("/usr/local/nginx/html/files/pdf/");
                            if(!file1.exists()){
                                file1.mkdirs();
                            }
                            file1 = new File("/usr/local/nginx/html/files/pdf/parcel_receipt_" + orderId + ".pdf");
                            if(!file1.exists()){
                                file1.createNewFile();
                            }
                            FileOutputStream fileOutputStream = new FileOutputStream(file1);
                            HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
                            String link ="http://182.160.16.251:81/files/html/parcel_receipt_" + orderId + ".html";
                            TEmail tEmail = new TEmail();
                            tEmail.setLink(link);
                            tEmail.setUserId(uid);
                            tEmail.setType(1);
                            tEmail.setName(language == 1 ? "包裹收据" : language == 2 ? "Parcel receipt" : "Réception de colis");
                            tEmail.setOrderId(orderId);
                            tEmail.setCreateTime(new Date());
                            int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
                            String week = EmailUtil.getWeek(language, i);
                            tEmail.setWeek(week);
                            boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
                            if(am){
                                tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
                            }else {
                                tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
                            }
                            emailService.insert(tEmail);
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成包裹订单支付,谢谢使用!" : language == 2
                    ? "You have successfully completed the parcel order payment, thank you for using!" :
                    "Vous avez terminé avec succès le paiement de la commande de colis, merci de l’utiliser!", uid, 1);
            this.pushOrder(orderLogistics);//推单
        }
@@ -573,7 +746,7 @@
            userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
            //添加交易明细
            transactionDetailsService.saveData(uid, "小件物流下单支付", orderMoney, 2, 1, 1, 4, orderId);
            transactionDetailsService.saveData(uid, "包裹下单支付", orderMoney, 2, 1, 1, 4, orderId);
            userInfoService.updateById(userInfo);
            orderLogistics.setState(1);//小件物流先支付后司机抢单
@@ -581,15 +754,185 @@
            orderLogistics.setPayType(4);
            orderLogistics.setPayMoney(orderMoney);
            if(ToolUtil.isNotEmpty(userInfo.getEmail())){
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            String path = templatePath + "user/receiptLogistics.html";
                            Document document = Jsoup.parse(new File(path), "UTF-8");
                            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
                            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                            Driver driver = driverService.selectById(orderLogistics.getDriverId());
                            if(1 == language){
                                document.getElementById("english").remove();
                                document.getElementById("french").remove();
                                Element title_chinese = document.getElementById("title_chinese");
                                title_chinese.text(DateUtil.conversionFormat(language, sdf2.format(orderLogistics.getTravelTime())) + ",您在I-GO1个订单消费GHS " + orderLogistics.getPayMoney());
                                Element xcf_chinese = document.getElementById("xcf_chinese");
                                xcf_chinese.text("GHS " + orderLogistics.getOrderMoney());
                                Element xj_chinese = document.getElementById("xj_chinese");
                                xj_chinese.text("GHS " + orderLogistics.getOrderMoney());
                                Element pay_type_chinese = document.getElementById("pay_type_chinese");
                                pay_type_chinese.text("现金");
                                Element pay_money_chinese = document.getElementById("pay_money_chinese");
                                pay_money_chinese.text("GHS " + orderLogistics.getPayMoney());
                                Element pdf_chinese = document.getElementById("pdf_chinese");
                                pdf_chinese.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4");
                                Element lost_item_chinese = document.getElementById("lost_item_chinese");
                                lost_item_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4");
//                    Element track_chinese = document.getElementById("track_chinese");
//                    track_chinese.attr("href", "http://182.160.16.251:81/mailbox/user/location.html");
                                Element pay_time_chinese = document.getElementById("pay_time_chinese");
                                pay_time_chinese.text(DateUtil.conversionFormat(language, sdf1.format(orderLogistics.getTravelTime())));
                                Elements driver_chinese = document.getElementsByClass("driver_chinese");
                                for (int i = 0; i < driver_chinese.size(); i++) {
                                    Element element = driver_chinese.get(i);
                                    element.text(driver.getFirstName() + "." + driver.getLastName());
                                }
                                Element start_address_chinese = document.getElementById("start_address_chinese");
                                start_address_chinese.text(orderLogistics.getStartAddress());
                                Element end_address_chinese = document.getElementById("end_address_chinese");
                                end_address_chinese.text(orderLogistics.getEndAddress());
                                Phone phone = phoneService.selectOne(new EntityWrapper<Phone>().eq("type", 2).eq("companyId", driver.getCompanyId()));
                                Element server_tel_chinese = document.getElementById("server_tel_chinese");
                                server_tel_chinese.attr("href", "tel:" + (null != phone ? phone.getPhone() : ""));
                            }
                            if(2 == language){
                                document.getElementById("chinese").remove();
                                document.getElementById("french").remove();
                                Element title_english = document.getElementById("title_english");
                                title_english.text(DateUtil.conversionFormat(language, sdf2.format(orderLogistics.getTravelTime())) + ",You spent GHS " + orderLogistics.getPayMoney() + " on the trip ");
                                Element xcf_english = document.getElementById("xcf_english");
                                xcf_english.text("GHS " + orderLogistics.getOrderMoney());
                                Element xj_english = document.getElementById("xj_english");
                                xj_english.text("GHS " + orderLogistics.getOrderMoney());
                                Element pay_type_english = document.getElementById("pay_type_english");
                                pay_type_english.text("cash");
                                Element pay_money_english = document.getElementById("pay_money_english");
                                pay_money_english.text("GHS " + orderLogistics.getPayMoney());
                                Element pdf_english = document.getElementById("pdf_english");
                                pdf_english.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4");
                                Element lost_item_english = document.getElementById("lost_item_english");
                                lost_item_english.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4");
//                    Element track_english = document.getElementById("track_english");
//                    track_english.attr("href", "http://182.160.16.251:81/mailbox/user/location.html");
                                Element pay_time_english = document.getElementById("pay_time_english");
                                pay_time_english.text(DateUtil.conversionFormat(language, sdf1.format(orderLogistics.getTravelTime())));
                                Elements driver_english = document.getElementsByClass("driver_english");
                                for (int i = 0; i < driver_english.size(); i++) {
                                    Element element = driver_english.get(i);
                                    element.text(driver.getFirstName() + "." + driver.getLastName());
                                }
                                Element start_address_english = document.getElementById("start_address_english");
                                start_address_english.text(orderLogistics.getStartAddress());
                                Element end_address_english = document.getElementById("end_address_english");
                                end_address_english.text(orderLogistics.getEndAddress());
                                Phone phone = phoneService.selectOne(new EntityWrapper<Phone>().eq("type", 2).eq("companyId", driver.getCompanyId()));
                                Element server_tel_english = document.getElementById("server_tel_english");
                                server_tel_english.attr("href", "tel:" + (null != phone ? phone.getPhone() : ""));
                            }
                            if(3 == language){
                                document.getElementById("chinese").remove();
                                document.getElementById("english").remove();
                                Element title_french = document.getElementById("title_french");
                                title_french.text("Le " + DateUtil.conversionFormat(language, sdf2.format(orderLogistics.getTravelTime())) + ", vous avez dépensé GHS " + orderLogistics.getPayMoney() + " sur le voyage" );
                                Element xcf_french = document.getElementById("xcf_french");
                                xcf_french.text("GHS " + orderLogistics.getOrderMoney());
                                Element xj_french = document.getElementById("xj_french");
                                xj_french.text("GHS " + orderLogistics.getOrderMoney());
                                Element pay_type_french = document.getElementById("pay_type_french");
                                pay_type_french.text("espèces");
                                Element pay_money_french = document.getElementById("pay_money_french");
                                pay_money_french.text("GHS " + orderLogistics.getPayMoney());
                                Element pdf_french = document.getElementById("pdf_french");
                                pdf_french.attr("href", "http://182.160.16.251:80/user/base/order/uploadReceiptPdf?orderId=" + orderId + "&orderType=4");
                                Element lost_item_french = document.getElementById("lost_item_french");
                                lost_item_french.attr("href", "http://182.160.16.251:81/mailbox/user/lossGoods.html?language=" + language + "&orderId=" + orderId + "&orderType=4");
//                    Element track_french = document.getElementById("track_french");
//                    track_french.attr("href", "http://182.160.16.251:81/mailbox/user/location.html");
                                Element pay_time_french = document.getElementById("pay_time_french");
                                pay_time_french.text(DateUtil.conversionFormat(language, sdf1.format(orderLogistics.getTravelTime())));
                                Elements driver_french = document.getElementsByClass("driver_french");
                                for (int i = 0; i < driver_french.size(); i++) {
                                    Element element = driver_french.get(i);
                                    element.text(driver.getFirstName() + "." + driver.getLastName());
                                }
                                Element start_address_french = document.getElementById("start_address_french");
                                start_address_french.text(orderLogistics.getStartAddress());
                                Element end_address_french = document.getElementById("end_address_french");
                                end_address_french.text(orderLogistics.getEndAddress());
                                Phone phone = phoneService.selectOne(new EntityWrapper<Phone>().eq("type", 2).eq("companyId", driver.getCompanyId()));
                                Element server_tel_french = document.getElementById("server_tel_french");
                                server_tel_french.attr("href", "tel:" + (null != phone ? phone.getPhone() : ""));
                            }
                            EmailUtil.send(userInfo.getEmail(), language == 1 ? "包裹收据" : language == 2 ? "Parcel receipt" : "Réception de colis",  document.html());
                            //开始生成pdf收据和html收据
                            File file = new File("/usr/local/nginx/html/files/html/");
                            if(!file.exists()){
                                file.mkdirs();
                            }
                            file = new File("/usr/local/nginx/html/files/html/parcel_receipt_" + orderId + ".html");
                            if(!file.exists()){
                                file.createNewFile();
                            }
                            FileWriter fileWriter = new FileWriter(file);
                            fileWriter.write(document.html());
                            fileWriter.flush();
                            fileWriter.close();
                            FileInputStream fileInputStream = new FileInputStream(file);
                            File file1 = new File("/usr/local/nginx/html/files/pdf/");
                            if(!file1.exists()){
                                file1.mkdirs();
                            }
                            file1 = new File("/usr/local/nginx/html/files/pdf/parcel_receipt_" + orderId + ".pdf");
                            if(!file1.exists()){
                                file1.createNewFile();
                            }
                            FileOutputStream fileOutputStream = new FileOutputStream(file1);
                            HtmlToPdfUtils.convertToPdf(fileInputStream, "IGO", fileOutputStream);
                            String link ="http://182.160.16.251:81/files/html/parcel_receipt_" + orderId + ".html";
                            TEmail tEmail = new TEmail();
                            tEmail.setLink(link);
                            tEmail.setUserId(uid);
                            tEmail.setType(1);
                            tEmail.setName(language == 1 ? "包裹收据" : language == 2 ? "Parcel receipt" : "Réception de colis");
                            tEmail.setOrderId(orderId);
                            tEmail.setCreateTime(new Date());
                            int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
                            String week = EmailUtil.getWeek(language, i);
                            tEmail.setWeek(week);
                            boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
                            if(am){
                                tEmail.setAmOrPm(language==1?"上午":language==2?"AM":"Dans la matinée");
                            }else {
                                tEmail.setAmOrPm(language==1?"下午":language==2?"PM":"après-midi");
                            }
                            emailService.insert(tEmail);
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
            // TODO: 2020/5/24 这里需要给司机和用户推送订单状态
            new Thread(new Runnable() {
                @Override
                public void run() {
                    pushUtil.pushOrderState(1, orderLogistics.getUserId(), orderLogistics.getId(), orderLogistics.getType(), orderLogistics.getState(), 0);
                    pushUtil.pushOfflinePayment(2, orderLogistics.getDriverId(), orderLogistics.getId(), 4);
                }
            }).start();
            systemNoticeService.addSystemNotice(1, "您已使用现金成功完成小件物流订单支付,谢谢使用!", uid, 1);
            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成包裹订单支付,谢谢使用!" : language == 2
                    ? "You have successfully completed the parcel order payment, thank you for using!" :
                    "Vous avez terminé avec succès le paiement de la commande de colis, merci de l’utiliser!", uid, 1);
            this.pushOrder(orderLogistics);//推单
        }
@@ -610,7 +953,7 @@
     * @throws Exception
     */
    @Override
    public ResultUtil payLogisticsOrder_(Integer payType, Integer orderId, Integer type) throws Exception {
    public ResultUtil payLogisticsOrder_(Integer payType, Integer bankCardId, Integer orderId, Integer type, Integer language) throws Exception {
        OrderLogistics orderLogistics = this.selectById(orderId);
        Integer uid = orderLogistics.getUserId();
        OrderLogisticsSpread orderLogisticsSpread = orderLogisticsSpreadService.selectOne(new EntityWrapper<OrderLogisticsSpread>().eq("orderLogisticsId", orderId));
@@ -618,14 +961,46 @@
        UserInfo userInfo = userInfoService.selectById(uid);
        ResultUtil resultUtil = ResultUtil.success("");
        if(payType == 1){//手机支付
            return payMoneyUtil.weixinpay("小件物流下单支付",orderId +"",orderId + "_" + orderLogistics.getType(),orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String merchantTransactionId = sdf.format(new Date()) + "4" + language + orderId;
            CheckoutRequest checkoutRequest = new CheckoutRequest();
            checkoutRequest.setMsisdn(Long.valueOf(userInfo.getPhone()));
            checkoutRequest.setCustomerEmail(userInfo.getEmail());
            checkoutRequest.setAccountNumber(userInfo.getPhone());
            checkoutRequest.setCustomerFirstName(userInfo.getFirstName());
            checkoutRequest.setCustomerLastName(userInfo.getLastName());
            checkoutRequest.setRequestAmount(orderMoney);
            checkoutRequest.setMerchantTransactionId(merchantTransactionId);
            checkoutRequest.setRequestDescription("Travel completion payment");
            checkoutRequest.setCallbackUrl(callbackPath + "/base/wxPayOrderLogisticsSpread");
            checkoutRequest.setPendingRedirectUrl("");
            checkoutRequest.setSuccessRedirectUrl("http://182.160.16.251:81/payMoney/pages/success.html");
            checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html");
            return TinggPayUtil.checkoutRequest(checkoutRequest);
        }
        if(payType == 2){//银行卡支付
            return payMoneyUtil.alipay("小件物流下单支付","小件物流下单支付",orderId + "," + orderLogistics.getType(),orderMoney+"","/base/aliPayOrderTaxi");
            BankCard bankCard = bankCardService.selectById(bankCardId);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String merchantTransactionId = sdf.format(new Date()) + "4" + language + orderId;
            CheckoutRequest checkoutRequest = new CheckoutRequest();
            checkoutRequest.setMsisdn(Long.valueOf(bankCard.getCode()));
            checkoutRequest.setCustomerEmail(userInfo.getEmail());
            checkoutRequest.setAccountNumber(bankCard.getCode());
            checkoutRequest.setCustomerFirstName(bankCard.getFirstName());
            checkoutRequest.setCustomerLastName(bankCard.getLastName());
            checkoutRequest.setRequestAmount(orderMoney);
            checkoutRequest.setMerchantTransactionId(merchantTransactionId);
            checkoutRequest.setRequestDescription("Travel completion payment");
            checkoutRequest.setCallbackUrl(callbackPath + "/base/wxPayOrderLogisticsSpread");
            checkoutRequest.setPendingRedirectUrl("");
            checkoutRequest.setSuccessRedirectUrl("http://182.160.16.251:81/payMoney/pages/success.html");
            checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html");
            return TinggPayUtil.checkoutRequest(checkoutRequest);
        }
        if(payType == 3){//余额支付
            if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){
                return ResultUtil.error("余额不足,无法完成支付", "");
                return ResultUtil.error(language == 1 ? "账户余额不足" : language == 2 ? "Insufficient balance" : "Solde insuffisant");
            }
            userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
@@ -634,7 +1009,7 @@
            userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
            //添加交易明细
            transactionDetailsService.saveData(uid, "小件物流补差价", orderMoney, 2, 1, 1, 4, orderId);
            transactionDetailsService.saveData(uid, "包裹补差价", orderMoney, 2, 1, 1, 4, orderId);
            userInfoService.updateById(userInfo);
            orderLogistics.setState(12);//已支付差价
@@ -655,14 +1030,14 @@
                c = new BigDecimal(orderMoney).subtract(d);
            }
            if(company.getIsSpeFixedOrProportional() == 1){//比例
                d = new BigDecimal(orderMoney).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
                d = new BigDecimal(orderMoney).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN)));
                c = new BigDecimal(orderMoney).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
            }
            Income income = incomeService.selectOne(new EntityWrapper<Income>().eq("userType", 1).eq("objectId", orderLogistics.getCompanyId()).eq("type", 2).eq("incomeId", orderLogistics.getId()).eq("orderType", orderLogistics.getType()));
            income.setMoney(income.getMoney() + d.doubleValue());
            incomeService.updateById(income);
            income = incomeService.selectOne(new EntityWrapper<Income>().eq("userType", 2).eq("objectId", orderLogistics.getCompanyId()).eq("type", 2).eq("incomeId", orderLogistics.getId()).eq("orderType", orderLogistics.getType()));
            income = incomeService.selectOne(new EntityWrapper<Income>().eq("userType", 2).eq("objectId", orderLogistics.getDriverId()).eq("type", 2).eq("incomeId", orderLogistics.getId()).eq("orderType", orderLogistics.getType()));
            income.setMoney(income.getMoney() + c.doubleValue());
            incomeService.updateById(income);
            Driver driver = driverService.selectById(orderLogistics.getDriverId());
@@ -680,21 +1055,17 @@
                }
            }).start();
            systemNoticeService.addSystemNotice(1, "您已使用余额成功完成小件物流订单差价支付,谢谢使用!", uid, 1);
            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成包裹订单差价支付,谢谢使用!" : language == 2
                    ? "You have successfully completed the difference payment of parcel order, thank you for using!"
                    : "Vous avez complété avec succès le paiement de la différence de commande de colis, merci de l’utiliser!", uid, 1);
        }
        if(payType == 4){//现金支付
            if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){
                return ResultUtil.error("余额不足,无法完成支付", "");
            }
            userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            SysIntegral query1 = sysIntegralMapper.query(orderLogistics.getCompanyId());
            userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
            //添加交易明细
            transactionDetailsService.saveData(uid, "小件物流补差价", orderMoney, 2, 1, 1, 4, orderId);
            transactionDetailsService.saveData(uid, "包裹补差价", orderMoney, 2, 1, 1, 4, orderId);
            userInfoService.updateById(userInfo);
            orderLogistics.setState(12);//已支付差价
@@ -716,7 +1087,7 @@
                c = new BigDecimal(orderMoney).subtract(d);
            }
            if(company.getIsSpeFixedOrProportional() == 1){//比例
                d = new BigDecimal(orderMoney).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
                d = new BigDecimal(orderMoney).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN)));
                c = new BigDecimal(orderMoney).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
            }
@@ -741,7 +1112,9 @@
                }
            }).start();
            systemNoticeService.addSystemNotice(1, "您已使用现金成功完成小件物流订单差价支付,谢谢使用!", uid, 1);
            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成包裹订单差价支付,谢谢使用!" : language == 2
                    ? "You have successfully completed the difference payment of parcel order, thank you for using!"
                    : "Vous avez complété avec succès le paiement de la différence de commande de colis, merci de l’utiliser!", uid, 1);
        }
@@ -752,14 +1125,14 @@
    @Override
    public void payOrderLogisticsCallback(Integer id, String order_id, Integer type) throws Exception {
    public void payOrderLogisticsCallback(Integer id, String order_id, Integer language) throws Exception {
        OrderLogistics orderLogistics = this.selectById(id);
        PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), orderLogistics.getType(), type, 1);
        PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), orderLogistics.getType(), null, 1);
        if(null != query){
            //添加交易明细
            transactionDetailsService.saveData(orderLogistics.getUserId(), "完成订单", query.getAmount(), 2, 1, 1, orderLogistics.getType(), query.getOrderId());
            orderLogistics.setState(1);//先支付后抢单
            orderLogistics.setPayType(type);
            orderLogistics.setPayType(query.getPayType());
            orderLogistics.setPayMoney(query.getAmount());
            this.updateById(orderLogistics);
@@ -781,7 +1154,9 @@
            }).start();
            systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功完成小件物流订单支付,谢谢使用!", orderLogistics.getUserId(), 1);
            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成包裹订单支付,谢谢使用!" : language == 2
                    ? "You have successfully completed the parcel order payment, thank you for using!" :
                    "Vous avez terminé avec succès le paiement de la commande de colis, merci de l’utiliser!", orderLogistics.getUserId(), 1);
            this.pushOrder(orderLogistics);//推单
        }else{
@@ -792,29 +1167,32 @@
    @Override
    public void payOrderLogisticsSpreadCallback(Integer id, String order_id, Integer type) throws Exception {
    public void payOrderLogisticsSpreadCallback(Integer id, String order_id, Integer language) throws Exception {
        OrderLogistics orderLogistics = this.selectById(id);
        OrderLogisticsSpread orderLogisticsSpread = orderLogisticsSpreadService.selectOne(new EntityWrapper<OrderLogisticsSpread>().eq("orderLogisticsId", id));
        PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), orderLogistics.getType(), type, 1);
        PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), orderLogistics.getType(), null, 1);
        if(null != query){
            //添加交易明细
            transactionDetailsService.saveData(orderLogistics.getUserId(), "小件物流补差价", query.getAmount(), 2, 1, 1, 4, query.getOrderId());
            orderLogistics.setState(4);//待取货
            this.updateById(orderLogistics);
            Double orderMoney = query.getAmount();
            query.setState(2);
            query.setCode(order_id);
            paymentRecordService.updateById(query);
            orderLogisticsSpread.setPayMoney(query.getAmount());
            orderLogisticsSpread.setPayTime(new Date());
            orderLogisticsSpread.setPayType(3);
            orderLogisticsSpread.setPayType(query.getPayType());
            orderLogisticsSpread.setDriverPay(1);
            orderLogisticsSpreadService.updateById(orderLogisticsSpread);
            UserInfo userInfo = userInfoService.selectById(orderLogistics.getUserId());
            SysIntegral query1 = sysIntegralMapper.query(orderLogistics.getCompanyId());
            userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
            userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
            //添加交易明细
            transactionDetailsService.saveData(orderLogistics.getUserId(), "包裹补差价", orderMoney, 2, 1, 1, 4, id);
            userInfoService.updateById(userInfo);
            query.setState(2);
            query.setCode(order_id);
            paymentRecordService.updateById(query);
            orderLogistics.setState(12);//已支付差价
            this.updateById(orderLogistics);
            //添加已收入明细
            Company company = companyService.selectById(orderLogistics.getCompanyId());
@@ -823,12 +1201,13 @@
            BigDecimal c = null;
            if(company.getIsSpeFixedOrProportional() == 2){//固定
                d = new BigDecimal(speMoney);
                c = new BigDecimal(query.getAmount()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
                c = new BigDecimal(orderMoney).subtract(d);
            }
            if(company.getIsSpeFixedOrProportional() == 1){//比例
                d = new BigDecimal(query.getAmount()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
                c = new BigDecimal(query.getAmount()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
                d = new BigDecimal(orderMoney).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN)));
                c = new BigDecimal(orderMoney).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
            }
            Income income = incomeService.selectOne(new EntityWrapper<Income>().eq("userType", 1).eq("objectId", orderLogistics.getCompanyId()).eq("type", 2).eq("incomeId", orderLogistics.getId()).eq("orderType", orderLogistics.getType()));
            income.setMoney(income.getMoney() + d.doubleValue());
            incomeService.updateById(income);
@@ -850,8 +1229,9 @@
                }
            }).start();
            systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功完成小件物流订单差价支付,谢谢使用!", orderLogistics.getUserId(), 1);
            systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功完成包裹订单差价支付,谢谢使用!" : language == 2
                    ? "You have successfully completed the difference payment of parcel order, thank you for using!"
                    : "Vous avez complété avec succès le paiement de la différence de commande de colis, merci de l’utiliser!", orderLogistics.getUserId(), 1);
        }else{
            System.err.println("预支付数据异常(orderId = "  + id + ")");
        }
@@ -882,9 +1262,26 @@
     * @throws Exception
     */
    @Override
    public List<Map<String, Object>> queryMyOrderList(Integer uid, Integer pageNum, Integer size) throws Exception {
    public List<Map<String, Object>> queryMyOrderList(Integer uid, Integer pageNum, Integer size, Integer language) throws Exception {
        pageNum = (pageNum - 1) * size;
        List<Map<String, Object>> maps = orderLogisticsMapper.queryMyOrderList(uid, pageNum, size);
        List<Map<String, Object>> maps = orderLogisticsMapper.queryMyOrderList(uid, pageNum, size, language);
        for (Map<String, Object> map : maps) {
            if(null != map.get("orderTime")){
                String orderTime = map.get("orderTime").toString();
                map.put("orderTime", DateUtil.conversionFormat(language, orderTime));
            }
            if(null != map.get("time")){
                String time = map.get("time").toString();
                map.put("time", DateUtil.conversionFormat(language, time));
            }
            Integer orderId = Integer.valueOf(String.valueOf(map.get("orderId")));
            Integer state = Integer.valueOf(String.valueOf(map.get("state")));
            if(state == 6){
                map.put("receipt", "http://182.160.16.251:81/files/html/parcel_receipt_" + orderId + ".html");
            }else{
                map.put("receipt", "");
            }
        }
        return maps;
    }
@@ -895,16 +1292,30 @@
     * @return
     */
    @Override
    public List<Map<String, Object>> queryMyTravelRecord(Integer uid) {
        return orderLogisticsMapper.queryMyTravelRecord(uid);
    public List<Map<String, Object>> queryMyTravelRecord(Integer language, Integer uid) {
        List<Map<String, Object>> list = orderLogisticsMapper.queryMyTravelRecord(uid);
        for (Map<String, Object> map : list) {
            if(null != map.get("time")){
                String time = map.get("time").toString();
                map.put("time", DateUtil.conversionFormat(language, time));
            }
        }
        return list;
    }
    @Override
    public List<Map<String, Object>> queryInvoiceOrder(Integer type, Date startTime, Date endTime, Double startMoney, Double endMoney, Integer uid, Integer orderType) throws Exception {
    public List<Map<String, Object>> queryInvoiceOrder(Integer language, Integer type, Date startTime, Date endTime, Double startMoney, Double endMoney, Integer uid, Integer orderType) throws Exception {
        startTime = dateUtil.getStartOrEndDate(startTime, "start");
        endTime = dateUtil.getStartOrEndDate(endTime, "end");
        return orderLogisticsMapper.queryInvoiceOrder(type, startTime, endTime, startMoney, endMoney, uid, orderType);
        List<Map<String, Object>> list = orderLogisticsMapper.queryInvoiceOrder(type, startTime, endTime, startMoney, endMoney, uid, orderType);
        for (Map<String, Object> map : list) {
            if(null != map.get("time")){
                String time = map.get("time").toString();
                map.put("time", DateUtil.conversionFormat(language, time));
            }
        }
        return list;
    }
@@ -924,10 +1335,10 @@
        OrderLogistics orderLogistics = this.selectById(id);
        Integer integer = null;
        if(null == orderLogistics){
            return ResultUtil.error(language == 1 ? "取消订单失败,订单信息有误" : language == 2 ? "Failed to cancel the order, the order information is incorrect" : "Échec de l'annulation de la commande, les informations de la commande sont incorrectes");
            return ResultUtil.error(language == 1 ? "取消订单失败,订单信息有误" : language == 2 ? "Failed to cancel order, order-information error." : "Échec de l’annulation de la commande, erreur d’information de commande.");
        }
        if(orderLogistics.getState() > 5 && orderLogistics.getState() != 7 && orderLogistics.getState() != 11){
            return ResultUtil.error(language == 1 ? "取消订单失败,不合法的操作" : language == 2 ? "Cancel order failed, illegal operation" : "Échec de l'annulation de la commande, opération illégale");
            return ResultUtil.error(language == 1 ? "取消订单失败,不合法的操作" : language == 2 ? "Failed to cancel order, illegal operation." : "Échec de l’annulation de la commande, opération illégale.");
        }
        if(orderLogistics.getState() == 7){
@@ -959,24 +1370,21 @@
            orderCancelService.insert(orderCancel);
            orderLogistics.setState(10);
            this.updateById(orderLogistics);
            integer = orderCancel.getId();
            //调用回退接口
            PaymentRecord query = paymentRecordService.query(1, orderLogistics.getUserId(), 1, orderLogistics.getId(), orderLogistics.getType(), 1, 2);
            Map<String, String>  merrefund = payMoneyUtil.wxRefund(query.getCode(),orderLogistics.getId() + "," + orderLogistics.getType(),query.getAmount()+"",query.getAmount()+"","");
            //Map<String, Object> merrefund = icbcPayUtil.merrefund(query.getCode(), "", query.getAmount(), orderLogistics.getId() + "_" + orderLogistics.getType(), orderLogistics.getOrderNum());
            if ("SUCCESS".equals(merrefund.get("return_code"))) {//成功
                //添加交易明细
                transactionDetailsService.saveData(orderLogistics.getUserId(), "小件物流取消退款", query.getAmount(), 1, 1, 1, 4, orderLogistics.getId());
            }else{
                return ResultUtil.error("退款返回未知异常");
            UserInfo userInfo = userInfoService.selectById(orderLogistics.getUserId());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String payerTransactionID = sdf.format(new Date()) + orderCancel.getId();
            PayoutResponse payoutResponse = tinggPayoutUtil.sendPayout(userInfo.getPhoneOperator(), "+" + userInfo.getPhone(), payerTransactionID, query.getAmount().doubleValue(), callbackPath + "/base/orderCancelRefundCallback", "取消订单退款");
            AuthStatus authStatus = payoutResponse.getAuthStatus();
            Results results = payoutResponse.getResults().get(0);
            String statusCode = results.getStatusCode();
            if(!"131".equals(authStatus.getAuthStatusCode())){
                return ResultUtil.error(authStatus.getAuthStatusDescription());
            }
            /*if (Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 1) {//失败
                return ResultUtil.error("订单取消失败(退款不成功)");
            if(!"139".equals(statusCode)){
                return ResultUtil.error(results.getStatusDescription());
            }
            if (Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 2) {//未知
            }*/
        }
        if(null != orderLogistics.getPayType() && orderLogistics.getPayType() == 2){//支付宝
            OrderCancel orderCancel = new OrderCancel();
@@ -992,29 +1400,19 @@
            this.updateById(orderLogistics);
            integer = orderCancel.getId();
            //调用回退接口
            PaymentRecord query = paymentRecordService.query(1, orderLogistics.getUserId(), 1, orderLogistics.getId(), orderLogistics.getType(), 2, 2);
            /*Map<String, Object> merrefund = icbcPayUtil.merrefund(query.getCode(), "", query.getAmount(), orderLogistics.getId() + "_" + orderLogistics.getType(), orderLogistics.getOrderNum());
            if (Integer.valueOf(merrefund.get("code").toString()) == 0) {
                Map<String, Object> refundqry = icbcPayUtil.refundqry("", query.getCode(), orderLogistics.getOrderNum());
                if (Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 0) {//成功
                    //添加交易明细
                    transactionDetailsService.saveData(orderLogistics.getUserId(), "小件物流取消退款", query.getAmount(), 1, 1, 1, 4, orderLogistics.getId());
                }
                if (Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 1) {//失败
                    return ResultUtil.error("订单取消失败(退款不成功)");
                }
                if (Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 2) {//未知
                    return ResultUtil.error("退款返回未知异常");
                }
            }*/
            Map<String, String>  merrefund = payMoneyUtil.aliRefund(query.getCode(),query.getAmount()+"");
            //Map<String, Object> merrefund = icbcPayUtil.merrefund(query.getCode(), "", query.getAmount(), orderLogistics.getId() + "_" + orderLogistics.getType(), orderLogistics.getOrderNum());
            if ("SUCCESS".equals(merrefund.get("return_code"))) {//成功
                //添加交易明细
                transactionDetailsService.saveData(orderLogistics.getUserId(), "小件物流取消退款", query.getAmount(), 1, 1, 1, 4, orderLogistics.getId());
            }else{
                return ResultUtil.error("退款返回未知异常");
            PaymentRecord query = paymentRecordService.query(1, orderLogistics.getUserId(), 1, orderLogistics.getId(), orderLogistics.getType(), 1, 2);
            UserInfo userInfo = userInfoService.selectById(orderLogistics.getUserId());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String payerTransactionID = sdf.format(new Date()) + orderCancel.getId();
            PayoutResponse payoutResponse = tinggPayoutUtil.sendPayout(userInfo.getPhoneOperator(), "+" + userInfo.getPhone(), payerTransactionID, query.getAmount().doubleValue(), callbackPath + "/base/orderCancelRefundCallback", "取消订单退款");
            AuthStatus authStatus = payoutResponse.getAuthStatus();
            Results results = payoutResponse.getResults().get(0);
            String statusCode = results.getStatusCode();
            if(!"131".equals(authStatus.getAuthStatusCode())){
                return ResultUtil.error(authStatus.getAuthStatusDescription());
            }
            if(!"139".equals(statusCode)){
                return ResultUtil.error(results.getStatusDescription());
            }
        }
        if(null != orderLogistics.getPayType() && orderLogistics.getPayType() == 3){//余额
@@ -1036,7 +1434,7 @@
            integer = orderCancel.getId();
            //添加交易明细
            transactionDetailsService.saveData(orderLogistics.getUserId(), "小件物流取消退款", orderLogistics.getPayMoney(), 1, 1, 1, 4, orderLogistics.getId());
            transactionDetailsService.saveData(orderLogistics.getUserId(), "包裹取消退款", orderLogistics.getPayMoney(), 1, 1, 1, 4, orderLogistics.getId());
        }
        if(null != orderLogistics.getDriverId()){
@@ -1049,7 +1447,8 @@
        }
        //添加消息
        systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功取消小件物流订单,谢谢使用!" : language == 2 ? "You have successfully cancelled the small logistics order, thank you for using" : "Vous avez annulé avec succès la petite commande logistique, merci d'utiliser", orderLogistics.getUserId(), 1);
        systemNoticeService.addSystemNotice(1, language == 1 ? "您已成功取消包裹订单,谢谢使用!" : language == 2 ? "You have successfully cancelled your parcel order, thank you for using!"
                : "Vous avez annulé avec succès votre commande de colis, merci de l’utiliser!", orderLogistics.getUserId(), 1);
        Map<String, Object> map = new HashMap<>();
        map.put("id", integer);
        return ResultUtil.success(map);
@@ -1109,14 +1508,19 @@
    }
    @Override
    public Map<String, Object> queryOrderInfo(Integer orderId) throws Exception {
    public Map<String, Object> queryOrderInfo(Integer language, Integer orderId) throws Exception {
        Map<String, Object> map = orderLogisticsMapper.queryOrderInfo(orderId);
        if(null != map.get("travelTime")){
            String travelTime = map.get("travelTime").toString();
            map.put("travelTime", DateUtil.conversionFormat1(language, travelTime));
        }
        Integer state = Integer.valueOf(String.valueOf(map.get("state")));
        OrderLogistics orderLogistics = this.selectById(orderId);
        if(null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2){//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用
            orderLogistics.setReassignNotice(0);
            this.updateById(orderLogistics);
        }
        if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){
        if(state == 11){
            map.put("state", map.get("oldState"));
        }
        Map<String, String> geocode = gdMapGeocodingUtil.geocode(map.get("startLon").toString(), map.get("startLat").toString());
@@ -1127,6 +1531,11 @@
        String driverId = redisUtil.getValue("DEVICE_" + map.get("driverId"));
        map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1);
        map.put("orderType", orderLogistics.getType());
        if(state == 6){
            map.put("receipt", "http://182.160.16.251:81/files/html/parcel_receipt_" + orderId + ".html");
        }else{
            map.put("receipt", "");
        }
        return map;
    }
@@ -1137,10 +1546,10 @@
    @Override
    public List<Map<String, Object>> queryCoupon(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception {
    public List<Map<String, Object>> queryCoupon(Integer language, Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception {
        OrderLogistics orderLogistics = this.selectById(orderId);
        List<Map<String, Object>> list = userCouponRecordService.queryCoupon(uid, orderLogistics.getCompanyId(), 1, 4, orderLogistics.getOrderMoney(), pageNum, size);
        List<Map<String, Object>> list1 = userCouponRecordService.queryCoupon(uid, orderLogistics.getCompanyId(), 1, 0, orderLogistics.getOrderMoney(), pageNum, size);
        List<Map<String, Object>> list = userCouponRecordService.queryCoupon(language, uid, orderLogistics.getCompanyId(), 1, 4, orderLogistics.getOrderMoney(), pageNum, size);
        List<Map<String, Object>> list1 = userCouponRecordService.queryCoupon(language, uid, orderLogistics.getCompanyId(), 1, 0, orderLogistics.getOrderMoney(), pageNum, size);
        list.addAll(list1);
        return list;
    }