Pu Zhibing
6 天以前 4c99ee7028c3fe58a2cd4b8273b22c75c45574fc
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.core.common.constant.state.Order;
import com.stylefeng.guns.core.util.DateUtil;
@@ -15,15 +16,15 @@
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.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.model.*;
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.FleetEngineUtil;
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;
@@ -32,6 +33,9 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -79,11 +83,39 @@
    @Autowired
    private IOrderLogisticsService orderLogisticsService;
    @Value("${pushMinistryOfTransport}")
    private boolean pushMinistryOfTransport;
    @Autowired
    private ITransactionDetailsService transactionDetailsService;
    @Value("${callbackPath}")
    private String callbackPath;
    @Autowired
    private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
    private IPaymentRecordService paymentRecordService;
    @Autowired
    private IBankCardService bankCardService;
    @Autowired
    private ICancleOrderService cancleOrderService;
    @Autowired
    private ISettlementDetailService settlementDetailService;
    @Autowired
    private ISettlementRecordService settlementRecordService;
    @Resource
    private IBalanceUsageRecordService balanceUsageRecordService;
    @Resource
    private FleetEngineUtil fleetEngineUtil;
    @Autowired
    private IOrderPositionService orderPositionService;
    @Autowired
    private ICarService carService;
@@ -100,20 +132,20 @@
     * @throws Exception
     */
    @Override
    public List<Map<String, Object>> queryOrderList(Integer state, Integer pageNum, Integer size, Integer uid) throws Exception {
    public List<Map<String, Object>> queryOrderList(Integer state, Integer pageNum, Integer size, Integer uid, Integer language) throws Exception {
        pageNum = (pageNum - 1) * size;
        List<Map<String, Object>> datas = new ArrayList<>();
        //出租车
//        List<Map<String, Object>> list = orderTaxiService.queryOrderList(state, uid);
//        datas.addAll(list);
        //专车
        List<Map<String, Object>> list1 = orderPrivateCarService.queryOrderList(state, uid);
        List<Map<String, Object>> list1 = orderPrivateCarService.queryOrderList(state, uid, language);
        datas.addAll(list1);
        //跨城
//        List<Map<String, Object>> list2 = orderCrossCityService.queryOrderList(state, uid);
//        datas.addAll(list2);
        //小件物流
        List<Map<String, Object>> list3 = orderLogisticsService.queryOrderList(uid);
        List<Map<String, Object>> list3 = orderLogisticsService.queryOrderList(state, uid, language);
        datas.addAll(list3);
        //分页
@@ -139,21 +171,21 @@
     * @throws Exception
     */
    @Override
    public List<Map<String, Object>> queryOrderList1(Integer state, Integer type, Integer pageNum, Integer size, Integer uid) throws Exception {
    public List<Map<String, Object>> queryOrderList1(Integer state, Integer type, Integer pageNum, Integer size, Integer uid, Integer language) throws Exception {
        pageNum = (pageNum - 1) * size;
        List<Map<String, Object>> datas = new ArrayList<>();
        if(type == 1){
            //出租车
            List<Map<String, Object>> list = orderTaxiService.queryOrderList(state, uid);
            List<Map<String, Object>> list = orderTaxiService.queryOrderList(language, state, uid);
            datas.addAll(list);
            //专车
            List<Map<String, Object>> list1 = orderPrivateCarService.queryOrderList(state, uid);
            List<Map<String, Object>> list1 = orderPrivateCarService.queryOrderList(state, uid, language);
            datas.addAll(list1);
            //跨城
            List<Map<String, Object>> list2 = orderCrossCityService.queryOrderList(state, uid);
            List<Map<String, Object>> list2 = orderCrossCityService.queryOrderList(language, state, uid);
            datas.addAll(list2);
        }else{//小件物流
            List<Map<String, Object>> list3 = orderLogisticsService.queryOrderList(uid);
            List<Map<String, Object>> list3 = orderLogisticsService.queryOrderList(state, uid, language);
            datas.addAll(list3);
        }
@@ -181,20 +213,38 @@
     * @throws Exception
     */
    @Override
    public List<OrderListWarpper> queryMyAllOrder(Integer state, Integer pageNum, Integer size, Integer uid) throws Exception {
    public List<OrderListWarpper> queryMyAllOrder(Integer state, Integer pageNum, Integer size, Integer uid, Integer language) throws Exception {
        pageNum = (pageNum - 1) * size;
        List<Map<String, Object>> datas = new ArrayList<>();
        //出租车
//        List<Map<String, Object>> list = orderTaxiService.queryMyAllOrder(state, uid);
//        datas.addAll(list);
        //专车
        List<Map<String, Object>> list1 = orderPrivateCarService.queryMyAllOrder(state, uid);
        List<Map<String, Object>> list1 = orderPrivateCarService.queryMyAllOrder(state, uid, language);
        for (Map<String, Object> map : list1) {
            Integer id = Integer.valueOf(map.get("id").toString());
            map.put("settleAccounts", 0);
            SettlementDetail settlementDetail = settlementDetailService.selectOne(new EntityWrapper<SettlementDetail>().eq("orderId", id).eq("orderType", 1));
            if(null != settlementDetail){
                SettlementRecord settlementRecord = settlementRecordService.selectById(settlementDetail.getSettlementRecordId());
                map.put("settleAccounts", null == settlementRecord || settlementRecord.getPaymentStatus() == 1 ? 0 : 1);
            }
        }
        datas.addAll(list1);
        //跨城
//        List<Map<String, Object>> list2 = orderCrossCityService.queryMyAllOrder(state, uid);
//        datas.addAll(list2);
        //小件物流
        List<Map<String, Object>> list3 = orderLogisticsService.queryMyAllOrder(state, uid);
        List<Map<String, Object>> list3 = orderLogisticsService.queryMyAllOrder(state, uid, language);
        for (Map<String, Object> map : list3) {
            Integer id = Integer.valueOf(map.get("id").toString());
            map.put("settleAccounts", 0);
            SettlementDetail settlementDetail = settlementDetailService.selectOne(new EntityWrapper<SettlementDetail>().eq("orderId", id).eq("orderType", 4));
            if(null != settlementDetail){
                SettlementRecord settlementRecord = settlementRecordService.selectById(settlementDetail.getSettlementRecordId());
                map.put("settleAccounts", null == settlementRecord || settlementRecord.getPaymentStatus() == 1 ? 0 : 1);
            }
        }
        datas.addAll(list3);
        List<OrderListWarpper> orderListWarpper = OrderListWarpper.getOrderListWarpper(datas);
@@ -219,45 +269,47 @@
     * @return
     */
    @Override
    public Map<String, Object> queryPushOrder(Integer orderId, Integer orderType, String lon, String lat) throws Exception{
    public Map<String, Object> queryPushOrder(Integer orderId, Integer orderType, String lon, String lat, Integer language) throws Exception{
        Map<String, Object> map = null;
        switch (orderType){
            case 1://专车
                map = orderPrivateCarService.queryPushOrder(orderId);
                DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(lat), Double.valueOf(lon));
                map.put("startDistance", null != distancematrix ? distancematrix.getDistance() / 1000 : 0);
                map = orderPrivateCarService.queryPushOrder(orderId, language);
                OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
                String tripId = redisUtil.getValue("trip" + orderPrivateCar.getUserId());
                DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(lat), Double.valueOf(lon), tripId);
                map.put("startDistance", null != distancematrix ? new BigDecimal(distancematrix.getDistance()).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue() : 0);
                //总距离
                distancematrix = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(map.get("endLat").toString()), Double.valueOf(map.get("endLon").toString()));
                map.put("totalDistance", null != distancematrix ? distancematrix.getDistance() / 1000 : 0);
                distancematrix = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(map.get("endLat").toString()), Double.valueOf(map.get("endLon").toString()), tripId);
                map.put("totalDistance", null != distancematrix ? new BigDecimal(distancematrix.getDistance()).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue() : 0);
                Integer orderSource = Integer.valueOf(String.valueOf(map.get("orderSource")));
                if(orderSource == 1 || orderSource == 2 || orderSource == 3){
                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){
                        map.put("type", "乘客下单");
                        map.put("type", language == 1 ? "乘客创建" : language == 2 ? "Passenger creation" : "Créé par passager");
                    }
                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){
                        map.put("type", "改派");
                        map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté");
                    }
                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){
                        map.put("type", "预约");
                        map.put("type", language == 1 ? "预约" : language == 2 ? "Make an appointment" : "rendez-vous");
                    }
                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){
                        map.put("type", "改派");
                        map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté");
                    }
                }
                if(orderSource == 5){
                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){
                        map.put("type", "调度下单");
                        map.put("type", language == 1 ? "调度创建" : language == 2 ? "Scheduling creation" : "Création de planning");
                    }
                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){
                        map.put("type", "改派");
                        map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté");
                    }
                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){
                        map.put("type", "预约");
                        map.put("type", language == 1 ? "预约" : language == 2 ? "Make an appointment" : "rendez-vous");
                    }
                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){
                        map.put("type", "改派");
                        map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté");
                    }
                }
                break;
@@ -331,30 +383,32 @@
//                    }
//                }
                break;
            case 4://同城小件物流
                map = orderLogisticsService.queryPushOrder(orderId);
                DistancematrixVo distancematrix1 = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(lat), Double.valueOf(lon));
                map.put("startDistance", null != distancematrix1 ? distancematrix1.getDistance() / 1000 : 0);
            case 4://市内小件物流
                map = orderLogisticsService.queryPushOrder(orderId, language);
                OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId);
                String tripId1 = redisUtil.getValue("trip" + orderLogistics.getUserId());
                DistancematrixVo distancematrix1 = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(lat), Double.valueOf(lon), tripId1);
                map.put("startDistance", null != distancematrix1 ? new BigDecimal(distancematrix1.getDistance()).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue() : 0);
                //总距离
                distancematrix1 = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(map.get("endLat").toString()), Double.valueOf(map.get("endLon").toString()));
                map.put("totalDistance", null != distancematrix1 ? distancematrix1.getDistance() / 1000 : 0);
                distancematrix1 = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(map.get("endLat").toString()), Double.valueOf(map.get("endLon").toString()), tripId1);
                map.put("totalDistance", null != distancematrix1 ? new BigDecimal(distancematrix1.getDistance()).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue() : 0);
                Integer orderSource3 = Integer.valueOf(String.valueOf(map.get("orderSource")));
                if(orderSource3 == 1 || orderSource3 == 2 || orderSource3 == 3){
                    if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){
                        map.put("type", "乘客下单");
                        map.put("type", language == 1 ? "乘客创建" : language == 2 ? "Passenger creation" : "Créé par passager");
                    }
                    if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){
                        map.put("type", "改派");
                        map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté");
                    }
                }
                if(orderSource3 == 5){
                    if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){
                        map.put("type", "调度下单");
                        map.put("type", language == 1 ? "调度创建" : language == 2 ? "Scheduling creation" : "Création de planning");
                    }
                    if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){
                        map.put("type", "改派");
                        map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté");
                    }
                }
                break;
@@ -403,16 +457,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:
@@ -440,9 +494,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;
        }
@@ -459,11 +513,11 @@
     * @throws Exception
     */
    @Override
    public Map<String, Object> queryOrderInfo(Integer orderId, Integer orderType) throws Exception {
    public Map<String, Object> queryOrderInfo(Integer language, Integer orderId, Integer orderType) throws Exception {
        Map<String, Object> map = null;
        switch (orderType){
            case 1://专车
                map = orderPrivateCarService.queryOrderInfo(orderId);
                map = orderPrivateCarService.queryOrderInfo(language, orderId);
                break;
            case 2://出租
//                map = orderTaxiService.queryOrderInfo(orderId);
@@ -472,7 +526,7 @@
//                map = orderCrossCityService.queryOrderCrossCityInfo(orderId);
                break;
            case 4://同城小件
                map = orderLogisticsService.queryOrderInfo(orderId);
                map = orderLogisticsService.queryOrderInfo(language, orderId);
                break;
            case 5://跨城小件
//                map = orderLogisticsService.queryOrderInfo(orderId);
@@ -529,18 +583,16 @@
     * @throws Exception
     */
    @Override
    public ResultUtil process(Integer orderId, Integer orderType, Integer state, Integer uid, Double lon, Double lat,String phone) throws Exception {
        Map<String, String> geocode = gdMapGeocodingUtil.geocode(String.valueOf(lon), String.valueOf(lat));
        String address = geocode.get("address");
    public ResultUtil process(Integer orderId, Integer orderType, Integer state, Integer uid, Double lon, Double lat,String phone, String pickUpCode, Integer language) throws Exception {
        switch (orderType){
            case 1://专车
                return orderPrivateCarService.process(orderId, state, lon, lat, address,phone);
                return orderPrivateCarService.process(orderId, state, lon, lat, phone, language, uid);
            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, pickUpCode, language, uid);
            case 5://跨城小件
//                return orderLogisticsService.process(orderId, state, lon, lat, address);
            case 6:
@@ -562,16 +614,17 @@
     * @throws Exception
     */
    @Override
    public ResultUtil confirmFees(Integer orderId, Integer orderType, Integer type, Double travelFee, Double parkingFee, Double crossingFee) throws Exception {
    public ResultUtil confirmFees(Integer language, Integer orderId, Integer orderType, Integer type, Double travelFee,
                                  Double parkingFee, Double crossingFee, Integer uid) throws Exception {
        switch (orderType){
            case 1://专车
                return orderPrivateCarService.confirmFees(orderId, type, parkingFee, crossingFee);
                return orderPrivateCarService.confirmFees(language, orderId, type, parkingFee, crossingFee, uid);
            case 2://出租
                return orderTaxiService.confirmFees(orderId, type, travelFee, parkingFee, crossingFee);
            case 3://城际(没有此流程)
                break;
            case 4://
                break;
                return orderLogisticsService.confirmFees(language, orderId, type, parkingFee, crossingFee, uid);
            case 5:
                break;
            case 6:
@@ -653,16 +706,16 @@
     * @return
     */
    @Override
    public Map<String, Object> queryToBePaidPage(Integer orderId, Integer orderType) throws Exception{
    public Map<String, Object> queryToBePaidPage(Integer language, Integer orderId, Integer orderType) throws Exception{
        switch (orderType){
            case 1://专车
                return orderPrivateCarService.queryOrderInfo(orderId);
                return orderPrivateCarService.queryOrderInfo(language, orderId);
            case 2://出租
                return orderTaxiService.queryOrderInfo(orderId);
                return orderTaxiService.queryOrderInfo(language, orderId);
            case 3://城际(没有此流程)
                return null;
            case 4://
                break;
                return orderLogisticsService.queryOrderInfo(language, orderId);
            case 5:
                break;
            case 6:
@@ -687,7 +740,7 @@
            case 3://城际
                return orderCrossCityService.calculateMileage(orderPosition);
            case 4://
                break;
                return orderLogisticsService.calculateMileage(orderPosition.getOrderId(), orderPosition.getLon(), orderPosition.getLat());
            case 5:
                break;
            case 6:
@@ -707,10 +760,11 @@
     */
    @Override
    public Integer queryOrderNum(Integer driverId, Date start, Date end) throws Exception {
        //出租车
        Integer[] state = new Integer[]{6, 7, 8, 9};
        int i = orderPrivateCarService.selectCount(new EntityWrapper<OrderPrivateCar>().eq("driverId", driverId).between("insertTime", start, end).in("", state));
        return i;
        int i = orderPrivateCarService.selectCount(new EntityWrapper<OrderPrivateCar>().eq("driverId", driverId)
                .between("insertTime", start, end).in("state", Arrays.asList(6, 7, 8, 9)));
        int i1 = orderLogisticsService.selectCount(new EntityWrapper<OrderLogistics>().eq("driverId", driverId)
                .between("insertTime", start, end).in("state", Arrays.asList(6, 7, 8, 9)));
        return i + i1;
    }
@@ -908,7 +962,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;
@@ -916,10 +970,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, recurring payments is not allowed." : "La commande a été payée, les paiements récurrents ne sont pas autorisés.");
                }
                if(orderPrivateCar.getState() != 7){
                    return ResultUtil.error("订单不在待支付,无法完成订单");
                    return ResultUtil.error(language == 1 ? "订单不在待支付,无法完成订单" : language == 2 ? "The order is no longer with Pending Payment, unable to complete the order." : "La commande n’est plus en attente de paiement, il est impossible de terminer la commande.");
                }
                orderPrivateCar.setPayManner(2);//其他方式支付
                orderPrivateCar.setRedPacketMoney(0D);
@@ -933,22 +987,14 @@
                driverId = orderPrivateCar.getDriverId();
                state = orderPrivateCar.getState();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        if(pushMinistryOfTransport){//上传数据
                            pushMinistryOfTransportUtil.operatePay(orderId);
                        }
                    }
                }).start();
                break;
            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, recurring payments is not allowed." : "La commande a été payée, les paiements récurrents ne sont pas autorisés.");
                }
                if(orderTaxi.getState() != 7){
                    return ResultUtil.error("订单不在待支付,无法完成订单");
                    return ResultUtil.error(language == 1 ? "订单不在待支付,无法完成订单" : language == 2 ? "The order is no longer with Pending Payment, unable to complete the order." : "La commande n’est plus en attente de paiement, il est impossible de terminer la commande.");
                }
                orderTaxi.setPayManner(2);//其他方式支付
                orderTaxi.setRedPacketMoney(0D);
@@ -975,6 +1021,26 @@
                    redisUtil.setStrValue("VEHICLE", jsonArray.toJSONString());
                }
                break;
            case 4:
                OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId);
                if(orderLogistics.getState() == 8 || orderLogistics.getState() == 9){
                    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.");
                }
                if(orderLogistics.getState() != 7){
                    return ResultUtil.error(language == 1 ? "订单不在待支付,无法完成订单" : language == 2 ? "The order is no longer with Pending Payment, unable to complete the order." : "La commande n’est plus en attente de paiement, il est impossible de terminer la commande.");
                }
                orderLogistics.setPayManner(2);//其他方式支付
                orderLogistics.setRedPacketMoney(0D);
                orderLogistics.setCouponMoney(0D);
                orderLogistics.setDiscount(0D);
                orderLogistics.setDiscountMoney(0D);
                orderLogistics.setPayMoney(orderLogistics.getOrderMoney());
                orderLogistics.setState(8);
                orderLogisticsService.updateById(orderLogistics);
                userId = orderLogistics.getUserId();
                driverId = orderLogistics.getDriverId();
                state = orderLogistics.getState();
                break;
        }
@@ -984,8 +1050,8 @@
        new Thread(new Runnable() {
            @Override
            public void run() {
                pushUtil.pushOrderState(1, finalUserId, orderId, orderType, finalState);
                pushUtil.pushOrderState(2, finalDriverId, orderId, orderType, finalState);
                pushUtil.pushOrderState(1, finalUserId, orderId, orderType, finalState, 0, "", "driver");
                pushUtil.pushOrderState(2, finalDriverId, orderId, orderType, finalState, 0, "", "driver");
            }
        }).start();
        return ResultUtil.success();
@@ -1006,6 +1072,8 @@
                return orderPrivateCarService.queryMoneyInfo(orderId);
            case 2:
                break;
            case 4:
                return orderLogisticsService.queryMoneyInfo(orderId);
        }
        return null;
    }
@@ -1022,13 +1090,14 @@
     */
    @Override
    public void taskSmsSend() throws Exception {
        Integer language = 2;
        //获取未支付订单
        Date day = new Date();
        List<OrderPrivateCar> orderList = orderPrivateCarService.getSmsOrderList();
        for(OrderPrivateCar order : orderList){
            if(order.getSmsTime()==null ){
                if(order.getGetoffTime().getTime()+24*60*60*1000L<day.getTime()){
                if(null != order.getGetoffTime() && order.getGetoffTime().getTime()+24*60*60*1000L<day.getTime()){
                    order.setSmsNumber(order.getSmsNumber()+1);
                    order.setSmsTime(day);
                    //发送短信
@@ -1036,7 +1105,7 @@
                        String sData = aLiSendSms.sendSms1(order.getPassengersPhone(), "SMS_215342869", "{\"time\":\"" + DateUtil.format(order.getGetoffTime(),"yyyy-MM-dd HH:mm:ss") + "\",\"money\":\"" + order.getOrderMoney() + "\"}");
                    }
                    //添加消息记录
                    systemNoticeService.addSystemNotice(1, "有一笔订单未付款,请前往支付!", order.getUserId());
                    systemNoticeService.addSystemNotice(1, language == 1 ? "有一笔订单未付款,请前往支付!" : language == 2 ? "There is an order pending payment, please pay." : "Il y a une commande en attente de paiement, veuillez payer.", order.getUserId());
                }
            }else{
                if(order.getSmsTime().getTime()+24*60*60*1000L<day.getTime()){
@@ -1048,7 +1117,7 @@
                    }
                    //添加消息记录
                    systemNoticeService.addSystemNotice(1, "有一笔订单未付款,请前往支付!", order.getUserId());
                    systemNoticeService.addSystemNotice(1, language == 1 ? "有一笔订单未付款,请前往支付!" : language == 2 ? "There is an order pending payment, please pay." : "Il y a une commande en attente de paiement, veuillez payer.", order.getUserId());
                }
            }
        }
@@ -1056,6 +1125,307 @@
            orderPrivateCarService.updateBatchById(orderList);
        }
    }
    @Override
    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();
            if(orderPrivateCar.getPayType() != 4){
                return ResultUtil.error(language == 1 ? "无法进行支付" : language == 2 ? "Unable to make payments" : "Impossible d’effectuer des paiements");
            }
            if(orderPrivateCar.getDriverPay() == 2){
                return ResultUtil.error(language == 1 ? "不能重复支付" : language == 2 ? "Unable to recur payments" : "Impossible de récurrence des paiements");
            }
            if(payType == 3){//余额支付
                if(driver.getBalance().compareTo(money) < 0){
                    return ResultUtil.error(language == 1 ? "账户余额不足" : language == 2 ? "Insufficient balance" : "Solde insuffisant");
                }
            }
        }
        if(orderType == 4){//小件
            OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId);
            money = orderLogistics.getPayMoney();
            if(orderLogistics.getPayType() != 4){
                return ResultUtil.error(language == 1 ? "无法进行支付" : language == 2 ? "Unable to make payments" : "Impossible d’effectuer des paiements");
            }
            if(orderLogistics.getDriverPay() == 2){
                return ResultUtil.error(language == 1 ? "不能重复支付" : language == 2 ? "Unable to recur payments" : "Impossible de récurrence des paiements");
            }
            if(payType == 3){//余额支付
                if(driver.getBalance().compareTo(money) < 0){
                    return ResultUtil.error(language == 1 ? "账户余额不足" : language == 2 ? "Insufficient balance" : "Solde insuffisant");
                }
            }
        }
        if(0 < money){
            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("https://igo.i-go.group/payMoney/pages/success.html");
                checkoutRequest.setFailRedirectUrl("https://igo.i-go.group/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" : "Échec de paiement", "");
                }
                return resultUtil;
            }
            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("https://igo.i-go.group/payMoney/pages/success.html");
                checkoutRequest.setFailRedirectUrl("https://igo.i-go.group/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" : "Échec de paiement", "");
                }
                return resultUtil;
            }
            if(payType == 3){//余额支付
                driver.setBalance(driver.getBalance() - money);
                Double laveBusinessMoney = driver.getLaveBusinessMoney();
                if(laveBusinessMoney.compareTo(money) < 0){
                    double b = money - laveBusinessMoney;
                    driver.setLaveBusinessMoney(0D);
                    driver.setLaveActivityMoney(driver.getLaveActivityMoney() - b);
                    driverService.updateById(driver);
                    balanceUsageRecordService.saveBalanceUsageRecord(driver.getId(), 1, b, orderType == 1 ? 1 : 2);
                    balanceUsageRecordService.saveBalanceUsageRecord(driver.getId(), 2, laveBusinessMoney, orderType == 1 ? 1 : 2);
                }else{
                    driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - money);
                    driverService.updateById(driver);
                    balanceUsageRecordService.saveBalanceUsageRecord(driver.getId(), 2, money, orderType == 1 ? 1 : 2);
                }
                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();
    }
    @Override
    public void getDriverNowPosition() {
        for (OrderPrivateCar orderPrivateCar : orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("state", 5))) {
            String trackId = orderPrivateCar.getTrackId();
            if(ToolUtil.isNotEmpty(trackId)){
                String trip = fleetEngineUtil.getTrip(trackId);
                JSONObject lastLocation = JSON.parseObject(trip).getJSONObject("lastLocation");
                JSONObject location = lastLocation.getJSONObject("location");
                Double latitude = location.getDouble("latitude");
                Double longitude = location.getDouble("longitude");
                OrderPosition orderPosition = new OrderPosition();
                orderPosition.setOrderId(orderPrivateCar.getId());
                orderPosition.setOrderType(1);
                orderPosition.setDriverId(orderPrivateCar.getDriverId());
                orderPosition.setLat(latitude.toString());
                orderPosition.setLon(longitude.toString());
                orderPosition.setInsertTime(new Date());
                try {
                    orderPositionService.saveData(orderPosition);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        }
        List<OrderLogistics> orderLogisticsList = orderLogisticsService.selectList(new EntityWrapper<OrderLogistics>().eq("state", 5));
        for (OrderLogistics orderLogistics : orderLogisticsList) {
            String trackId = orderLogistics.getTrackId();
            if(ToolUtil.isNotEmpty(trackId)){
                String trip = fleetEngineUtil.getTrip(trackId);
                JSONObject lastLocation = JSON.parseObject(trip).getJSONObject("lastLocation");
                JSONObject location = lastLocation.getJSONObject("location");
                Double latitude = location.getDouble("latitude");
                Double longitude = location.getDouble("longitude");
                OrderPosition orderPosition = new OrderPosition();
                orderPosition.setOrderId(orderLogistics.getId());
                orderPosition.setOrderType(1);
                orderPosition.setDriverId(orderLogistics.getDriverId());
                orderPosition.setLat(latitude.toString());
                orderPosition.setLon(longitude.toString());
                orderPosition.setInsertTime(new Date());
                try {
                    orderPositionService.saveData(orderPosition);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
    /**
     * 结束google订单状态
     */
    @Override
    public void overGoogleOrder() {
        List<OrderPrivateCar> privateCars = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().isNotNull("tripId")
                .eq("isover", 0).in("state", Arrays.asList(6, 7, 8, 9, 10, 12)).eq("isDelete", 1));
        for (OrderPrivateCar privateCar : privateCars) {
            Integer state = privateCar.getState();
            String tripId = privateCar.getTripId();
            String trip = fleetEngineUtil.getTrip(tripId);
            if(null != trip && "" == trip){
                privateCar.setIsover(1);
                orderPrivateCarService.updateById(privateCar);
                continue;
            }
            if(ToolUtil.isNotEmpty(trip)){
                JSONObject jsonObject = JSON.parseObject(trip);
                String tripStatus = jsonObject.getString("tripStatus");
                Car car = carService.selectById(privateCar.getCarId());
                if(Arrays.asList(10, 12).contains(state) && !"CANCELED".equals(tripStatus)){
                    //修改行程信息
                    boolean updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1);
                    if(!updateTrip){
                        for (int i = 0; i < 5; i++) {
                            updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1);
                            if(updateTrip){
                                privateCar.setIsover(1);
                                orderPrivateCarService.updateById(privateCar);
                                break;
                            }
                            try {
                                Thread.sleep(3000L);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }else{
                        privateCar.setIsover(1);
                        orderPrivateCarService.updateById(privateCar);
                    }
                }
                if(Arrays.asList(6, 7, 8, 9).contains(state) && !"COMPLETE".equals(tripStatus)){
                    //修改行程信息
                    boolean updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1);
                    if(!updateTrip){
                        for (int i = 0; i < 5; i++) {
                            updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1);
                            if(updateTrip){
                                privateCar.setIsover(1);
                                orderPrivateCarService.updateById(privateCar);
                                break;
                            }
                            try {
                                Thread.sleep(3000L);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }else{
                        privateCar.setIsover(1);
                        orderPrivateCarService.updateById(privateCar);
                    }
                }
            }
        }
        List<OrderLogistics> orderLogisticsList = orderLogisticsService.selectList(new EntityWrapper<OrderLogistics>().isNotNull("tripId")
                .eq("isover", 0).in("state", Arrays.asList(6, 7, 8, 9, 10, 12)).eq("isDelete", 1));
        for (OrderLogistics orderLogistics : orderLogisticsList) {
            Integer state = orderLogistics.getState();
            String tripId = orderLogistics.getTripId();
            String trip = fleetEngineUtil.getTrip(tripId);
            if(null != trip && "" == trip){
                orderLogistics.setIsover(1);
                orderLogisticsService.updateById(orderLogistics);
                continue;
            }
            if(ToolUtil.isNotEmpty(trip)){
                JSONObject jsonObject = JSON.parseObject(trip);
                String tripStatus = jsonObject.getString("tripStatus");
                Car car = carService.selectById(orderLogistics.getCarId());
                if(Arrays.asList(10, 12).contains(state) && !"CANCELED".equals(tripStatus)){
                    //修改行程信息
                    boolean updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4);
                    if(!updateTrip){
                        for (int i = 0; i < 5; i++) {
                            updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4);
                            if(updateTrip){
                                orderLogistics.setIsover(1);
                                orderLogisticsService.updateById(orderLogistics);
                                break;
                            }
                            try {
                                Thread.sleep(3000L);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }else{
                        orderLogistics.setIsover(1);
                        orderLogisticsService.updateById(orderLogistics);
                    }
                }
                if(Arrays.asList(6, 7, 8, 9).contains(state) && !"COMPLETE".equals(tripStatus)){
                    //修改行程信息
                    boolean updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4);
                    if(!updateTrip){
                        for (int i = 0; i < 5; i++) {
                            updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4);
                            if(updateTrip){
                                orderLogistics.setIsover(1);
                                orderLogisticsService.updateById(orderLogistics);
                                break;
                            }
                            try {
                                Thread.sleep(3000L);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }else{
                        orderLogistics.setIsover(1);
                        orderLogisticsService.updateById(orderLogistics);
                    }
                }
            }
        }
    }
}