puzhibing
2023-07-20 8692f6f0807a1e70f3a1988834b0e5d6a8080753
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -15,17 +15,17 @@
import com.stylefeng.guns.modular.system.dao.PhoneMapper;
import com.stylefeng.guns.modular.system.dao.RegionMapper;
import com.stylefeng.guns.modular.system.dao.SysReformistMapper;
import com.stylefeng.guns.modular.system.model.BankCard;
import com.stylefeng.guns.modular.system.model.Driver;
import com.stylefeng.guns.modular.system.model.OrderPosition;
import com.stylefeng.guns.modular.system.model.Region;
import com.stylefeng.guns.modular.system.service.IDriverService;
import com.stylefeng.guns.modular.system.service.IOrderService;
import com.stylefeng.guns.modular.system.service.ISystemNoticeService;
import com.stylefeng.guns.modular.system.service.ITransactionDetailsService;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.GoogleMap.DistancematrixVo;
import com.stylefeng.guns.modular.system.util.GoogleMap.GoogleMapUtil;
import com.stylefeng.guns.modular.system.util.GoogleMap.ReverseGeocodeVo;
import com.stylefeng.guns.modular.system.util.Tingg.TinggPayUtil;
import com.stylefeng.guns.modular.system.util.Tingg.model.CheckoutRequest;
import com.stylefeng.guns.modular.system.warpper.OrderListWarpper;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
@@ -34,6 +34,7 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -83,6 +84,16 @@
    @Autowired
    private ITransactionDetailsService transactionDetailsService;
    @Value("${callbackPath}")
    private String callbackPath;
    @Autowired
    private IPaymentRecordService paymentRecordService;
    @Autowired
    private IBankCardService bankCardService;
@@ -402,16 +413,16 @@
     * @throws Exception
     */
    @Override
    public synchronized ResultUtil grabOrder(Integer orderId, Integer orderType, Integer uid) throws Exception {
    public synchronized ResultUtil grabOrder(Integer orderId, Integer orderType, Integer uid, Integer language) throws Exception {
        switch (orderType){
            case 1://专车
                return orderPrivateCarService.grabOrder(orderId, uid);
                return orderPrivateCarService.grabOrder(orderId, uid, language);
            case 2://出租
//                return orderTaxiService.grabOrder(orderId, uid);
            case 3://城际
                return ResultUtil.success();//不作任何操作,跨城默认选择的司机
            case 4://同城小件
                return orderLogisticsService.grabOrder(orderId, uid);
                return orderLogisticsService.grabOrder(orderId, uid, language);
            case 5://跨城小件
//                return orderLogisticsService.grabOrder(orderId, uid);
            case 6:
@@ -439,9 +450,9 @@
            case 3://城际
                break;
            case 4://同城小件
                return orderLogisticsService.grabOrder_(orderId, uid);
//                return orderLogisticsService.grabOrder_(orderId, uid);
            case 5://跨城小件
                return orderLogisticsService.grabOrder_(orderId, uid);
//                return orderLogisticsService.grabOrder_(orderId, uid);
            case 6:
                break;
        }
@@ -528,21 +539,21 @@
     * @throws Exception
     */
    @Override
    public ResultUtil process(Integer orderId, Integer orderType, Integer state, Integer uid, Double lon, Double lat,String phone) throws Exception {
    public ResultUtil process(Integer orderId, Integer orderType, Integer state, Integer uid, Double lon, Double lat,String phone, Integer language) throws Exception {
        ReverseGeocodeVo reverseGeocode = GoogleMapUtil.getReverseGeocode(lat, lon);
        if(null == reverseGeocode){
            return ResultUtil.error("无效的经纬度");
            return ResultUtil.error(language == 1 ? "无效的经纬度" : language == 2 ? "Invalid latitude and longitude" : "Latitude et longitude invalides");
        }
        String address = reverseGeocode.getAddress();
        switch (orderType){
            case 1://专车
                return orderPrivateCarService.process(orderId, state, lon, lat, address,phone);
                return orderPrivateCarService.process(orderId, state, lon, lat, address, phone, language);
            case 2://出租
//                return orderTaxiService.process(orderId, state, lon, lat, address);
            case 3://城际
//                return orderCrossCityService.process(orderId, state, lon, lat, address);
            case 4://同城小件
                return orderLogisticsService.process(orderId, state, lon, lat, address);
                return orderLogisticsService.process(orderId, state, lon, lat, address, language);
            case 5://跨城小件
//                return orderLogisticsService.process(orderId, state, lon, lat, address);
            case 6:
@@ -910,7 +921,7 @@
     * @throws Exception
     */
    @Override
    public ResultUtil completeOrder(Integer orderId, Integer orderType) throws Exception {
    public ResultUtil completeOrder(Integer orderId, Integer orderType, Integer language) throws Exception {
        Integer userId = 0;
        Integer driverId = 0;
        Integer state = 0;
@@ -918,10 +929,10 @@
            case 1:
                OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
                if(orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9){
                    return ResultUtil.error("订单已完成支付,不允许重复支付");
                    return ResultUtil.error(language == 1 ? "订单已完成支付,不允许重复支付" : language == 2 ? "The order has been paid, no double payment is allowed" : "La commande a été payée, aucun paiement en double n’est autorisé");
                }
                if(orderPrivateCar.getState() != 7){
                    return ResultUtil.error("订单不在待支付,无法完成订单");
                    return ResultUtil.error(language == 1 ? "订单不在待支付,无法完成订单" : language == 2 ? "Order is not pending payment, order cannot be completed" : "La commande n’est pas en attente de paiement, la commande ne peut pas être complétée");
                }
                orderPrivateCar.setPayManner(2);//其他方式支付
                orderPrivateCar.setRedPacketMoney(0D);
@@ -939,10 +950,10 @@
            case 2:
                OrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
                if(orderTaxi.getState() == 8 || orderTaxi.getState() == 9){
                    return ResultUtil.error("订单已完成支付,不允许重复支付");
                    return ResultUtil.error(language == 1 ? "订单已完成支付,不允许重复支付" : language == 2 ? "The order has been paid, no double payment is allowed" : "La commande a été payée, aucun paiement en double n’est autorisé");
                }
                if(orderTaxi.getState() != 7){
                    return ResultUtil.error("订单不在待支付,无法完成订单");
                    return ResultUtil.error(language == 1 ? "订单不在待支付,无法完成订单" : language == 2 ? "Order is not pending payment, order cannot be completed" : "La commande n’est pas en attente de paiement, la commande ne peut pas être complétée");
                }
                orderTaxi.setPayManner(2);//其他方式支付
                orderTaxi.setRedPacketMoney(0D);
@@ -1053,8 +1064,9 @@
    @Override
    public ResultUtil payOrder(Integer uid, Integer orderId, Integer orderType, Integer payType, Integer language) throws Exception {
    public ResultUtil payOrder(Integer uid, Integer orderId, Integer orderType, Integer payType, Integer bankCardId, Integer language) throws Exception {
        Double money = 0D;
        Driver driver = driverService.selectById(uid);
        if(orderType == 1){//专车
            OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
            money = orderPrivateCar.getPayMoney();
@@ -1065,13 +1077,10 @@
                return ResultUtil.error(language == 1 ? "不能重复支付" : language == 2 ? "Non-repeatable payment" : "Aucun paiement en double");
            }
            if(payType == 2){//余额支付
                Driver driver = driverService.selectById(uid);
                if(driver.getBalance().compareTo(money) < 0){
                    return ResultUtil.error(language == 1 ? "账户余额不足" : language == 2 ? "Insufficient account balance" : "Solde insuffisant du compte");
                }
            }
            orderPrivateCar.setDriverPay(2);
            orderPrivateCarService.updateById(orderPrivateCar);
        }
        if(orderType == 4){//小件
            OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId);
@@ -1083,21 +1092,65 @@
                return ResultUtil.error(language == 1 ? "不能重复支付" : language == 2 ? "Non-repeatable payment" : "Aucun paiement en double");
            }
            if(payType == 2){//余额支付
                Driver driver = driverService.selectById(uid);
                if(driver.getBalance().compareTo(money) < 0){
                    return ResultUtil.error(language == 1 ? "账户余额不足" : language == 2 ? "Insufficient account balance" : "Solde insuffisant du compte");
                }
            }
            orderLogistics.setDriverPay(2);
            orderLogisticsService.updateById(orderLogistics);
        }
        if(0 < money){
            if(payType == 1){//线上支付
            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(driver.getPhone()));
                checkoutRequest.setCustomerEmail(driver.getEmail());
                checkoutRequest.setAccountNumber(driver.getPhone());
                checkoutRequest.setCustomerFirstName(driver.getFirstName());
                checkoutRequest.setCustomerLastName(driver.getLastName());
                checkoutRequest.setRequestAmount(money);
                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 resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
                if(resultUtil.getCode()==200){
                    paymentRecordService.saveData(1, uid, 2, orderId, orderType, 1, money, null, 1);//添加预支付数据
                }else{
                    resultUtil = ResultUtil.error(language == 1 ? "支付失败" : language == 2 ? "Payment failure" : "Paiement échoué", "");
                }
                return resultUtil;
            }
            if(payType == 2){//余额支付
                Driver driver = driverService.selectById(uid);
            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(driver.getEmail());
                checkoutRequest.setAccountNumber(bankCard.getCode());
                checkoutRequest.setCustomerFirstName(bankCard.getFirstName());
                checkoutRequest.setCustomerLastName(bankCard.getLastName());
                checkoutRequest.setRequestAmount(money);
                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 resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest);
                if(resultUtil.getCode()==200){
                    paymentRecordService.saveData(1, uid, 2, orderId, orderType, 2, money, null, 1);//添加预支付数据
                }else{
                    resultUtil = ResultUtil.error(language == 1 ? "支付失败" : language == 2 ? "Payment failure" : "Paiement échoué", "");
                }
                return resultUtil;
            }
            if(payType == 3){//余额支付
                driver.setBalance(driver.getBalance() - money);
                if(driver.getLaveBusinessMoney().compareTo(money) < 0){
                    double b = money - driver.getLaveBusinessMoney();
@@ -1108,9 +1161,19 @@
                    driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - money);
                    driverService.updateById(driver);
                }
            }
            transactionDetailsService.saveData(uid, "现金收款代付", money, 2, 1, 2, orderType, orderId);
                if(orderType == 1){//专车
                    OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
                    orderPrivateCar.setDriverPay(2);
                    orderPrivateCarService.updateById(orderPrivateCar);
                }
                if(orderType == 4){//小件
                    OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId);
                    orderLogistics.setDriverPay(2);
                    orderLogisticsService.updateById(orderLogistics);
                }
                transactionDetailsService.saveData(uid, "现金收款代付", money, 2, 1, 2, orderType, orderId);
            }
        }
        return ResultUtil.success();
    }