Pu Zhibing
8 天以前 6e0bccef16f74b5aa80eb51d7792a36ed7e20c38
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -47,6 +47,7 @@
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
@@ -55,137 +56,93 @@
@Service
public class OrderPrivateCarServiceImpl extends ServiceImpl<OrderPrivateCarMapper, OrderPrivateCar> implements IOrderPrivateCarService {
   public static List<Integer> orderIds = new ArrayList<>();
    @Resource
    private OrderPrivateCarMapper orderPrivateCarMapper;
    @Resource
    private CarServiceMapper carServiceMapper;
    @Resource
    private OrderTaxiMapper orderTaxiMapper;
    @Resource
    private SensitiveWordsMapper sensitiveWordsMapper;
    @Resource
    private UserActivityDiscount1Mapper userActivityDiscount1Mapper;
    @Resource
    private SysIntegralMapper sysIntegralMapper;
    @Resource
    private OrderCrossCityMapper orderCrossCityMapper;
    @Resource
    private RegionMapper regionMapper;
    @Autowired
    private DateUtil dateUtil;
    @Autowired
    private IUserInfoService userInfoService;
    @Autowired
    private IDriverService driverService;
    @Autowired
    private IDriverServiceService driverServiceService;
    @Autowired
    private PushUtil pushUtil;
    @Autowired
    private ICompanyCityService companyCityService;
    @Autowired
    private IPushOrderService pushOrderService;
    @Autowired
    private ISystemNoticeService systemNoticeService;
    @Autowired
    private ICancleOrderService cancleOrderService;
    @Autowired
    private IOrderCancelService orderCancelService;
    @Autowired
    private RestTemplate internalRestTemplate;
    @Autowired
    private IPaymentRecordService paymentRecordService;
    @Autowired
    private ITransactionDetailsService transactionDetailsService;
    @Autowired
    private ChinaMobileUtil chinaMobileUtil;
    @Autowired
    private IIncomeService incomeService;
    @Autowired
    private IUserCouponRecordService userCouponRecordService;
    @Autowired
    private IUserRedPacketRecordService userRedPacketRecordService;
    @Autowired
    private ICompanyService companyService;
    @Autowired
    private IUserActivityRedenvelopeService userActivityRedenvelopeService;
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    @Autowired
    private GDFalconUtil gdFalconUtil;
    @Autowired
    private GDMapGeocodingUtil gdMapGeocodingUtil;
    @Autowired
    private GDMapElectricFenceUtil gdMapElectricFenceUtil;
    @Autowired
    private IOrderPositionService orderPositionService;
    @Autowired
    private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
    @Autowired
    private IOrderCrossCityService orderCrossCityService;
    @Autowired
    private IOrderTaxiService orderTaxiService;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private IOrderLogisticsService orderLogisticsService;
    @Autowired
    private ITaxiCardPaymentService taxiCardPaymentService;
    @Autowired
    private ITaxiCardService taxiCardService;
    @Autowired
    private IOpenCityService openCityService;
    @Autowired
    private IUserUserService userUserService;
    @Autowired
    private IUserTaxiCardService userTaxiCardService;
    @Autowired
    private IRegionService regionService;
    public static List<Integer> orderIds = new ArrayList<>();
    @Value("${callbackPath}")
    private String callbackPath;
@@ -199,9 +156,12 @@
    private GeodesyUtil geodesyUtil;
    private Lock lock = new ReentrantLock();
   @Autowired
   private AppOrderController appOrderController;
    /**
     * 专车下单操作
    *
     * @param serverCarModelId  服务车型id
     * @param travelTime        出行时间
     * @param reservation       是否预约(1=否,2=是)
@@ -277,8 +237,6 @@
                        return ResultUtil.error("有未完成的订单");
                    }
                }
                startAddress = startAddress.replaceAll("& #40;", "(");
@@ -368,11 +326,11 @@
    //            orderPrivateCar.setTrackId(track);
    //
                    //调用移动的小号接口
                    Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
                    if(String.valueOf(map.get("code")).equals("200")){
                        orderPrivateCar.setTelX(map.get("telX"));
                        orderPrivateCar.setBindId(map.get("bindId"));
                    }
//               Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
//               if (String.valueOf(map.get("code")).equals("200")) {
//                  orderPrivateCar.setTelX(map.get("telX"));
//                  orderPrivateCar.setBindId(map.get("bindId"));
//               }
                    driver.setState(3);
                    driverService.updateById(driver);
@@ -401,10 +359,12 @@
                    }
                }else{
                    OrderPrivateCar orderPrivateCar1 = null;
               OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
                    //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单
                    List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).in("state","2,3,4").le("totalPeopleNum",4-peopleNum));
                    for(OrderPrivateCar order:orderList){
                        TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId()));
                  TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId()));
                        if(spellOrderRule!=null){
                            JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
                            //判断时间
@@ -426,7 +386,7 @@
                    if(orderPrivateCar1==null){
                        orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).eq("state",5).le("totalPeopleNum",4-peopleNum));
                        for(OrderPrivateCar order:orderList){
                            TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId()));
                     TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId()));
                            if(spellOrderRule!=null){
                                JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
                                //判断时间
@@ -477,11 +437,11 @@
                        this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("id",orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()).lt("state",6));
    //
                        //调用移动的小号接口
                        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
                        if(String.valueOf(map.get("code")).equals("200")){
                            orderPrivateCar.setTelX(map.get("telX"));
                            orderPrivateCar.setBindId(map.get("bindId"));
                        }
//                  Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
//                  if (String.valueOf(map.get("code")).equals("200")) {
//                     orderPrivateCar.setTelX(map.get("telX"));
//                     orderPrivateCar.setBindId(map.get("bindId"));
//                  }
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
@@ -516,7 +476,6 @@
        return ResultUtil.success(baseWarpper);
    }
    /**
     * 批量订单
     *
@@ -526,7 +485,10 @@
    public ResultUtil<BaseWarpper> saveOrderPrivateCars(String serverCarModel, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat, String startAddress, String endLon,
                                                        String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer uid, Integer peopleNum) throws Exception {
        BaseWarpper baseWarpper = new BaseWarpper();
        if (lock.tryLock()) {
      String key = "saveOrderPrivateCar:" + uid;
      Boolean hasKey = redisTemplate.hasKey(key);
      if (!hasKey) {
         redisTemplate.opsForValue().set(key, uid, 30, TimeUnit.SECONDS);
            try {
                //如果出行时间大于当前10分钟则默认为预约单
                if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) {
@@ -655,10 +617,11 @@
                    this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat());
                }else{
                    OrderPrivateCar orderPrivateCar1 = null;
                  OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
                    //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单
                    List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).in("state","2,3,4").le("totalPeopleNum",4-peopleNum));
                    for(OrderPrivateCar order:orderList){
                        TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId()));
                     TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId()));
                        if(spellOrderRule!=null){
                            JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
                            //判断时间
@@ -680,7 +643,7 @@
                    if(orderPrivateCar1==null){
                        orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).eq("state",5).le("totalPeopleNum",4-peopleNum));
                        for(OrderPrivateCar order:orderList){
                            TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId()));
                        TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId()));
                            if(spellOrderRule!=null){
                                JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
                                //判断时间
@@ -728,11 +691,11 @@
                        this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("id",orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()).lt("state",6));
    //
                        //调用移动的小号接口
                        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
                        if(String.valueOf(map.get("code")).equals("200")){
                            orderPrivateCar.setTelX(map.get("telX"));
                            orderPrivateCar.setBindId(map.get("bindId"));
                        }
//                     Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
//                     if (String.valueOf(map.get("code")).equals("200")) {
//                        orderPrivateCar.setTelX(map.get("telX"));
//                        orderPrivateCar.setBindId(map.get("bindId"));
//                     }
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
@@ -759,7 +722,7 @@
            }catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            redisTemplate.delete(key);
            }
        }else {
            return ResultUtil.error("系统繁忙,请稍后再试!");
@@ -769,6 +732,7 @@
    /**
     * 下单后继续等待
    *
     * @param id
     * @return
     * @throws Exception
@@ -815,10 +779,11 @@
                this.pushOrder(orderPrivateCar);
            }else{
                OrderPrivateCar orderPrivateCar1 = null;
            OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
                //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单
                List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).in("state","2,3,4").le("totalPeopleNum",4-orderPrivateCar.getPeopleNum()));
                for(OrderPrivateCar order:orderList){
                    TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId()));
               TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId()));
                    if(spellOrderRule!=null){
                        JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
                        //判断时间
@@ -839,7 +804,7 @@
                if(orderPrivateCar1==null){
                    orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).eq("state",5).le("totalPeopleNum",4-orderPrivateCar.getPeopleNum()));
                    for(OrderPrivateCar order:orderList){
                        TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId()));
                  TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId()));
                        if(spellOrderRule!=null){
                            JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
                            //判断时间
@@ -884,11 +849,11 @@
                    this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()).lt("state",6));
                    this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("id",orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()).lt("state",6));
                    //调用移动的小号接口
                    Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
                    if(String.valueOf(map.get("code")).equals("200")){
                        orderPrivateCar.setTelX(map.get("telX"));
                        orderPrivateCar.setBindId(map.get("bindId"));
                    }
//               Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
//               if (String.valueOf(map.get("code")).equals("200")) {
//                  orderPrivateCar.setTelX(map.get("telX"));
//                  orderPrivateCar.setBindId(map.get("bindId"));
//               }
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
@@ -916,8 +881,9 @@
        if(null == orderPrivateCar){
            return ResultUtil.error("获取数据失败,订单信息有误");
        }
      OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
        double amount = 0;
        CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
      CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, openCity.getId());
        if(null != orderPrivateCar.getDriverId() &&
                (orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < new Date().getTime()){//收费的情况
            if(null != query){
@@ -987,7 +953,8 @@
                this.updateById(orderPrivateCar);
            }
        }else {
            CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
         OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
         CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, openCity.getId());
            if (null != query) {
                if ((orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < System.currentTimeMillis() && query.getMoney().compareTo(0D) > 0) {//收费的情况
                    orderPrivateCar.setState(12);
@@ -1043,9 +1010,9 @@
        return ResultUtil.success(map);
    }
    /**
     * 取消订单操作
    *
     * @param id
     * @return
     * @throws Exception
@@ -1070,8 +1037,8 @@
        }else{
            orderCancel = orderCancelService.selectById(cancleId);
        }
        CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
      OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
      CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, openCity.getId());
        if(null != query){
            if(payType == 1){//微信支付
                String value = (String) redisTemplate.opsForValue().get("appletOpenId");
@@ -1141,113 +1108,6 @@
    }
    @Override
    public Map<String, Object> queryOrderInfo(Integer uid, Integer orderId) throws Exception {
        Map<String, Object> map = orderPrivateCarMapper.queryOrderInfo(orderId);
        if(null == map){
            OrderTaxi orderTaxi = orderTaxiService.selectOne(new EntityWrapper<OrderTaxi>()
                    .eq("userId", uid)
                    .eq("isDelete", 1)
                    .in("state", Arrays.asList(2, 3, 4, 5, 6, 7))
            );
            return orderTaxiService.queryOrderInfo(orderTaxi.getId());
        }
        if(null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2){//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用
            OrderPrivateCar orderPrivateCar = this.selectById(orderId);
            orderPrivateCar.setReassignNotice(0);
            this.updateById(orderPrivateCar);
        }
        if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){
            map.put("state", map.get("oldState"));
        }
        if(Integer.valueOf(String.valueOf(map.get("state"))) != 8 && Integer.valueOf(String.valueOf(map.get("state"))) != 9){
            map.put("redPacketMoney", null);
            map.put("couponMoney", null);
        }
        String driverId = (String) redisTemplate.opsForValue().get("DEVICE_" + map.get("driverId"));
        map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1);
        map.put("orderType", 1);
        return map;
    }
    /**
     * 获取服务中的订单数据
     * @param uid
     * @return
     * @throws Exception
     */
    @Override
    public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception {
        OrderPrivateCar orderPrivateCar = this.selectById(orderId);
        if(null == orderPrivateCar){
            return orderTaxiService.queryOrderServer(orderId, uid);
        }
        //计算预计距离和剩余时间
        String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
        if(null == value || "".equals(value)){
            System.err.println("司机没有上传位置信息");
            //调用获取轨迹中的数据
            List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2);
            if(list.size() > 0){
                Map<String, Object> map = list.get(list.size() - 1);
                value = map.get("lon") + "," + map.get("lat");
            }
        }
        OrderServerWarpper orderServerWarpper = new OrderServerWarpper();
        orderServerWarpper.setOrderId(orderPrivateCar.getId());
        orderServerWarpper.setOrderType(1);
        orderServerWarpper.setState(orderPrivateCar.getState());
        orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0");
        orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0");
        orderServerWarpper.setReassignNotice(orderPrivateCar.getReassignNotice());
        if(orderPrivateCar.getState() == 2 || orderPrivateCar.getState() == 3){//前往预约地
            // TODO: 2023/11/4 无法修改
            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1);
            String d = "0";
            String t = "0";
            if(null == distance){
                System.err.println("查询距离出错了");
            }else{
                d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
                t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
            }
            orderServerWarpper.setReservationMileage(d);
            orderServerWarpper.setReservationTime(t);
            orderServerWarpper.setServedMileage("0");
            orderServerWarpper.setServedTime("0");
            orderServerWarpper.setLaveMileage("0");
            orderServerWarpper.setLaveTime("0");
        }
        if(orderPrivateCar.getState() == 5 || orderPrivateCar.getState() == 6){//服务中
            // TODO: 2023/11/4 无法修改
            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
            String d = "0";
            String t = "0";
            if(null == distance){
                System.err.println("查询距离出错了");
            }else{
                d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
                t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
            }
            orderServerWarpper.setReservationMileage("0");
            orderServerWarpper.setReservationTime("0");
            orderServerWarpper.setServedMileage(String.valueOf((null == orderPrivateCar.getMileage() ? 0 : orderPrivateCar.getMileage()) / 1000));
            orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderPrivateCar.getStartServiceTime().getTime()) / 60000).intValue() + "");
            orderServerWarpper.setLaveMileage(d);
            orderServerWarpper.setLaveTime(t);
        }
        return orderServerWarpper;
    }
    @Override
    public synchronized String getOrderNum() throws Exception{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        return "PR" + sdf.format(new Date()) + UUIDUtil.getRandomCode(5);
@@ -1255,6 +1115,7 @@
    /**
     * 删除定时任务
    *
     * @param orderId
     */
    @Override
@@ -1395,9 +1256,9 @@
        return preferentialDataVo;
    }
    /**
     * 获取最优打车卡数据
    *
     * @param orderPrivateCar
     * @param price
     * @param id
@@ -1516,9 +1377,6 @@
        map.put("type", type);
        return map;
    }
    @Override
    public List<Map<String, Object>> queryCoupon(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception {
@@ -1852,7 +1710,8 @@
            userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId());
         OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
         SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
            userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
            //添加交易明细
@@ -1902,7 +1761,6 @@
        this.updateAllColumnById(orderPrivateCar);
        return resultUtil;
    }
    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
@@ -2106,7 +1964,8 @@
//            }
            userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId());
         OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
         SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
            if(null != query1){
                userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
            }
@@ -2170,8 +2029,6 @@
        this.updateAllColumnById(orderPrivateCar);
        return resultUtil;
    }
    @Autowired
    private AppOrderController appOrderController;
    @Override
    public synchronized ResultUtil<BaseWarpper> queryRedMoney(Integer orderId) throws Exception {
@@ -2224,7 +2081,6 @@
        return ResultUtil.success(baseWarpper);
    }
    @Override
    public synchronized ResultUtil shareRedEnvelope(Integer orderId) throws Exception {
        OrderPrivateCar orderPrivateCar = this.selectById(orderId);
@@ -2254,9 +2110,9 @@
        return ResultUtil.success();
    }
    /**
     * 取消订单支付后的处理
    *
     * @param id            订单=id
     * @param order_id      工行支付单号
     * @param type          1=微信,2=支付宝
@@ -2320,7 +2176,8 @@
            orderPrivateCar.setPayMoney(query.getAmount());
            UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
            SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId());
         OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
         SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
            userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
            userInfoService.updateById(userInfo);
@@ -2406,6 +2263,283 @@
        return orderPrivateCarMapper.queryInvoiceOrder(type, startTime, endTime, startMoney, endMoney, uid);
    }
   @Override
   public Map<String, Object> queryOrderInfo(Integer uid, Integer orderId) throws Exception {
      Map<String, Object> map = orderPrivateCarMapper.queryOrderInfo(orderId);
      if (null == map) {
         OrderTaxi orderTaxi = orderTaxiService.selectOne(new EntityWrapper<OrderTaxi>()
               .eq("userId", uid)
               .eq("isDelete", 1)
               .in("state", Arrays.asList(2, 3, 4, 5, 6, 7))
         );
         return orderTaxiService.queryOrderInfo(orderTaxi.getId());
      }
      if (null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2) {//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用
         OrderPrivateCar orderPrivateCar = this.selectById(orderId);
         orderPrivateCar.setReassignNotice(0);
         this.updateById(orderPrivateCar);
      }
      if (Integer.valueOf(String.valueOf(map.get("state"))) == 11) {
         map.put("state", map.get("oldState"));
      }
      if (Integer.valueOf(String.valueOf(map.get("state"))) != 8 && Integer.valueOf(String.valueOf(map.get("state"))) != 9) {
         map.put("redPacketMoney", null);
         map.put("couponMoney", null);
      }
      String driverId = (String) redisTemplate.opsForValue().get("DEVICE_" + map.get("driverId"));
      map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1);
      map.put("orderType", 1);
      return map;
   }
   @Override
   public List<Map<String, Object>> queryMyTravelRecord(Integer uid) throws Exception {
      return orderPrivateCarMapper.queryMyTravelRecord(uid);
   }
   /**
    * 获取服务中的订单数据
    *
    * @param uid
    * @return
    * @throws Exception
    */
   @Override
   public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception {
      OrderPrivateCar orderPrivateCar = this.selectById(orderId);
      if (null == orderPrivateCar) {
         return orderTaxiService.queryOrderServer(orderId, uid);
      }
      //计算预计距离和剩余时间
      String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
      if (null == value || "".equals(value)) {
         System.err.println("司机没有上传位置信息");
         //调用获取轨迹中的数据
         List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2);
         if (list.size() > 0) {
            Map<String, Object> map = list.get(list.size() - 1);
            value = map.get("lon") + "," + map.get("lat");
         }
      }
      OrderServerWarpper orderServerWarpper = new OrderServerWarpper();
      orderServerWarpper.setOrderId(orderPrivateCar.getId());
      orderServerWarpper.setOrderType(1);
      orderServerWarpper.setState(orderPrivateCar.getState());
      orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0");
      orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0");
      orderServerWarpper.setReassignNotice(orderPrivateCar.getReassignNotice());
      if (orderPrivateCar.getState() == 2 || orderPrivateCar.getState() == 3) {//前往预约地
         // TODO: 2023/11/4 无法修改
         Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1);
         String d = "0";
         String t = "0";
         if (null == distance) {
            System.err.println("查询距离出错了");
         } else {
            d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
            t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
         }
         orderServerWarpper.setReservationMileage(d);
         orderServerWarpper.setReservationTime(t);
         orderServerWarpper.setServedMileage("0");
         orderServerWarpper.setServedTime("0");
         orderServerWarpper.setLaveMileage("0");
         orderServerWarpper.setLaveTime("0");
      }
      if (orderPrivateCar.getState() == 5 || orderPrivateCar.getState() == 6) {//服务中
         // TODO: 2023/11/4 无法修改
         Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
         String d = "0";
         String t = "0";
         if (null == distance) {
            System.err.println("查询距离出错了");
         } else {
            d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
            t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
         }
         orderServerWarpper.setReservationMileage("0");
         orderServerWarpper.setReservationTime("0");
         orderServerWarpper.setServedMileage(String.valueOf((null == orderPrivateCar.getMileage() ? 0 : orderPrivateCar.getMileage()) / 1000));
         orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderPrivateCar.getStartServiceTime().getTime()) / 60000).intValue() + "");
         orderServerWarpper.setLaveMileage(d);
         orderServerWarpper.setLaveTime(t);
      }
      return orderServerWarpper;
   }
   /**
    * 获取下单推送完后没有司机接单的提醒
    *
    * @return
    * @throws Exception
    */
   @Override
   public EndPushWarpper queryEndPush(Integer uid) throws Exception {
      List<OrderPrivateCar> list = orderPrivateCarMapper.queryByState(uid, null, null, 1);
      EndPushWarpper endPushWarpper = new EndPushWarpper();
      if (list.size() > 0) {
         OrderPrivateCar orderPrivateCar = list.get(0);
         if (!orderIds.contains(orderPrivateCar.getId())) {
            endPushWarpper.setOrderId(orderPrivateCar.getId());
            endPushWarpper.setOrderType(1);
            endPushWarpper.setState(1);
            OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
            List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//获取需要推送的次数
            int time = 0;
            for (int i = 1; i <= querys.size() + 5; i++) {
               int finalI = i;
               PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
               time += pushOrder.getPushTime() * 1000;
            }
            //当前时间减去推单总时间大于下单时间
            if ((System.currentTimeMillis() - time) > orderPrivateCar.getInsertTime().getTime()) {
               endPushWarpper.setState(2);
            }
         }
      }
      return endPushWarpper;
   }
   /**
    * 获取红包使用记录
    *
    * @param uid
    * @return
    * @throws Exception
    */
   @Override
   public List<Map<String, Object>> queryRedEnvelope(Integer uid) throws Exception {
      return orderPrivateCarMapper.queryRedEnvelope(uid);
   }
   @Override
   @Transactional(propagation = Propagation.REQUIRES_NEW)
   public ResultUtil payThankYouFee(Integer uid, Integer orderId, Double money, Integer payType, Integer type) throws Exception {
      UserInfo userInfo = userInfoService.selectById(uid);
      OrderPrivateCar orderPrivateCar = this.selectById(orderId);
      ResultUtil resultUtil = ResultUtil.success();
      if (payType == 1) {//微信支付
         String app = type == 1 ? "APP" : "JSAPI";
         resultUtil = payMoneyUtil.weixinpay("感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/wxPayThankYouFee", app, userInfo.getAppletsOpenId());
         paymentRecordService.saveData(3, uid, 1, orderId, 1, 1, money, "", 1);//添加预支付数据
      }
      if (payType == 2) {//支付宝支付
         resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee");
         paymentRecordService.saveData(3, uid, 1, orderId, 1, 2, money, "", 1);//添加预支付数据
      }
      if (payType == 3) {//余额支付
         if (userInfo.getBalance() == null || userInfo.getBalance() < money) {
            return ResultUtil.error("余额不足,无法完成支付");
         }
//            resultUtil= appOrderController.moneyPay(orderId,userInfo.getId(),money);
//            if(resultUtil.getCode()==500){
//                return ResultUtil.error("电子余额不足,无法完成支付");
//            }
         userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
         OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
         SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
         userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分
         //添加交易明细
         transactionDetailsService.saveData(uid, "快车订单-感谢费", money, 2, 1, 1, 1, orderId);
         userInfoService.updateById(userInfo);
         orderPrivateCar.setThankYouFee(money);
         this.updateById(orderPrivateCar);
         //添加已收入明细
         incomeService.saveData(2, orderPrivateCar.getDriverId(), 6, orderPrivateCar.getId(), 1, money);
         Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
         driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
         driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
         driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
         driverService.updateById(driver);
         systemNoticeService.addSystemNotice(1, "您已使用余额成功完成感谢费支付,谢谢使用!", uid, 1);
      }
      if (payType == 4) {
         Double payMoney = orderPrivateCar.getThankYouFee();
         Integer integer = paymentRecordService.saveData(3, uid, 1, orderId, 1, 4, money, "", 1);
         resultUtil = appOrderController.placeAnOrder(new BigDecimal(money), 4, orderId, 11, integer);
      }
      return resultUtil;
   }
   @Override
   public void payThankYouFeeCallback(Integer orderId, String order_id, Integer payType) throws Exception {
      System.out.println(orderId + "_" + order_id + "_" + payType);
      OrderPrivateCar orderPrivateCar = this.selectById(orderId);
      UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
      System.out.println("用户" + userInfo);
      PaymentRecord query = paymentRecordService.query(3, userInfo.getId(), 1, orderId, 1, payType, 1);
      System.out.println("query:" + query);
      query.setState(2);
      query.setCode(order_id);
      paymentRecordService.updateById(query);
      OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
      SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
      System.out.println("query1:" + query1);
      userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
      //添加交易明细
      transactionDetailsService.saveData(userInfo.getId(), "快车订单-感谢费", query.getAmount(), 2, 1, 1, 1, orderId);
      userInfoService.updateById(userInfo);
      orderPrivateCar.setThankYouFee(query.getAmount());
      this.updateById(orderPrivateCar);
      //添加已收入明细
      incomeService.saveData(2, orderPrivateCar.getDriverId(), 6, orderPrivateCar.getId(), 1, query.getAmount());
      Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
      driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
      driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
      driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
      driverService.updateById(driver);
      systemNoticeService.addSystemNotice(1, "您已使用" + (payType == 1 ? "微信" : (payType == 2 ? "支付宝" : "云闪付")) + "成功完成感谢费支付,谢谢使用!", userInfo.getId(), 1);
      System.out.println("出租车感谢费ok");
   }
   @Override
   public List<Map<String, Object>> queryOrderInfo2(Integer orderId, Integer state, String lon, String lat) {
      return this.baseMapper.queryOrderInfo2(orderId, state, lon, lat);
   }
   /**
    * 获取专车未支付订单
    *
    * @param uid
    * @return
    */
   @Override
   public List<UnPayOrderVO> getUnpayPrivateOrders(Integer uid) {
      EntityWrapper<OrderPrivateCar> wrapper = new EntityWrapper<>();
      wrapper.eq("userId", uid);
      wrapper.eq("state", 7);
      //查出未支付订单
      List<OrderPrivateCar> orderPrivateCars = this.selectList(wrapper);
      List<UnPayOrderVO> unPayOrderVOList = new ArrayList<>();
      for (OrderPrivateCar order : orderPrivateCars) {
         UnPayOrderVO vo = new UnPayOrderVO();
         // 复制属性
         //添加司机信息
         DriverInfoWarpper driverInfoWarpper = new DriverInfoWarpper();
         Driver driver = driverService.selectById(order.getDriverId());
         BeanUtils.copyProperties(driver, driverInfoWarpper);
         vo.setDriverInfoWarpper(driverInfoWarpper);
         //其余信息
         BeanUtils.copyProperties(order, vo);
         unPayOrderVOList.add(vo);
      }
      return unPayOrderVOList;
   }
    public void pushOrder(Integer id, Integer rideType, Integer serverCarModelId, Double startLon, Double startLat) throws Exception{
        new Thread(new Runnable() {
            @Override
@@ -2418,14 +2552,16 @@
                    if(ToolUtil.isNotEmpty(vehicle)){
                        integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
                    }
                    Company query = companyCityService.query(startLon.toString(), startLat.toString());//获取起点所属分公司
                    List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数
                    for(int i = 1; i <= querys.size(); i++){
               OpenCity openCity = openCityService.openCity1(startLon.toString(), startLat.toString());
               List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数
               //整轮派单结束,若无司机接单,系统自动增加派单5轮,若增加5轮后任无司机接单,则系统结束派单,乘客端显示无司机接单、是否再次打车
               for (int i = 1; i <= querys.size() + 5; i++) {
                        OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
                        if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
                            break;
                        }
                        PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0);
                  int finalI = i;
                  PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
                        System.out.println("pushOrder:"+pushOrder);
                        int i2 = pushOrder.getPushTime() / 10;
                        if(i2==0){
@@ -2462,7 +2598,7 @@
                                orderIds.remove(orderPrivateCar.getId());
                                break;
                            }
                            if (i == querys.size()) {
                     if (i == querys.size() + 5) {
                                pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
                                orderIds.remove(orderPrivateCar.getId());
                            }
@@ -2475,13 +2611,9 @@
        }).start();
    }
    @Override
    public List<Map<String, Object>> queryMyTravelRecord(Integer uid) throws Exception {
        return orderPrivateCarMapper.queryMyTravelRecord(uid);
    }
    /**
     * 推送抢单数据
    *
     * @param orderPrivateCar
     * @throws Exception
     */
@@ -2498,14 +2630,15 @@
                    if(ToolUtil.isNotEmpty(vehicle)){
                        integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
                    }
                    Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司
                    List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数
               OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
               List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数
                    for(int i = 1; i <= querys.size()+5; i++){
                        OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
                        if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
                            break;
                        }
                        PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0);
                  int finalI = i;
                  PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
                        System.out.println("pushOrder:"+pushOrder);
                        int i2 = pushOrder.getPushTime() / 10;
                        if(i2==0){
@@ -2553,168 +2686,5 @@
                }
            }
        }).start();
    }
    /**
     * 获取红包使用记录
     * @param uid
     * @return
     * @throws Exception
     */
    @Override
    public List<Map<String, Object>> queryRedEnvelope(Integer uid) throws Exception {
        return orderPrivateCarMapper.queryRedEnvelope(uid);
    }
    /**
     * 获取下单推送完后没有司机接单的提醒
     * @return
     * @throws Exception
     */
    @Override
    public EndPushWarpper queryEndPush(Integer uid) throws Exception {
        List<OrderPrivateCar> list = orderPrivateCarMapper.queryByState(uid, null, null, 1);
        EndPushWarpper endPushWarpper = new EndPushWarpper();
        if(list.size() > 0){
            OrderPrivateCar orderPrivateCar = list.get(0);
            if(!orderIds.contains(orderPrivateCar.getId())){
                endPushWarpper.setOrderId(orderPrivateCar.getId());
                endPushWarpper.setOrderType(1);
                endPushWarpper.setState(1);
                List<PushOrder> querys = pushOrderService.querys(null, 2, orderPrivateCar.getCompanyId());//获取需要推送的次数
                int time = 0;
                for(int i = 1; i <= querys.size()+5; i++){
                    PushOrder pushOrder = pushOrderService.querys(i, 2, orderPrivateCar.getCompanyId()).get(0);
                    time += pushOrder.getPushTime() * 1000;
                }
                //当前时间减去推单总时间大于下单时间
                if((System.currentTimeMillis() - time) > orderPrivateCar.getInsertTime().getTime()){
                    endPushWarpper.setState(2);
                }
            }
        }
        return endPushWarpper;
    }
    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public ResultUtil payThankYouFee(Integer uid, Integer orderId, Double money, Integer payType, Integer type) throws Exception {
        UserInfo userInfo = userInfoService.selectById(uid);
        OrderPrivateCar orderPrivateCar = this.selectById(orderId);
        ResultUtil resultUtil = ResultUtil.success();
        if(payType == 1){//微信支付
            String app = type == 1 ? "APP" : "JSAPI";
            resultUtil = payMoneyUtil.weixinpay("感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/wxPayThankYouFee", app, userInfo.getAppletsOpenId());
            paymentRecordService.saveData(3, uid, 1, orderId, 1, 1, money, "", 1);//添加预支付数据
        }
        if(payType == 2){//支付宝支付
            resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee");
            paymentRecordService.saveData(3, uid, 1, orderId, 1, 2, money, "", 1);//添加预支付数据
        }
        if(payType == 3) {//余额支付
            if (userInfo.getBalance() == null || userInfo.getBalance() < money) {
                return ResultUtil.error("余额不足,无法完成支付");
            }
//            resultUtil= appOrderController.moneyPay(orderId,userInfo.getId(),money);
//            if(resultUtil.getCode()==500){
//                return ResultUtil.error("电子余额不足,无法完成支付");
//            }
            userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId());
            userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分
            //添加交易明细
            transactionDetailsService.saveData(uid, "快车订单-感谢费", money, 2, 1, 1, 1, orderId);
            userInfoService.updateById(userInfo);
            orderPrivateCar.setThankYouFee(money);
            this.updateById(orderPrivateCar);
            //添加已收入明细
            incomeService.saveData(2, orderPrivateCar.getDriverId(), 6, orderPrivateCar.getId(), 1, money);
            Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
            driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            driverService.updateById(driver);
            systemNoticeService.addSystemNotice(1, "您已使用余额成功完成感谢费支付,谢谢使用!", uid, 1);
        }
        if(payType==4){
            Double payMoney = orderPrivateCar.getThankYouFee();
            Integer integer = paymentRecordService.saveData(3, uid, 1, orderId, 1, 4, money, "", 1);
            resultUtil = appOrderController.placeAnOrder(new BigDecimal(money), 4,orderId,11,integer);
        }
        return resultUtil;
    }
    @Override
    public void payThankYouFeeCallback(Integer orderId, String order_id, Integer payType) throws Exception {
        System.out.println(orderId+"_"+order_id+"_"+payType);
        OrderPrivateCar orderPrivateCar = this.selectById(orderId);
        UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
        System.out.println("用户"+userInfo);
        PaymentRecord query = paymentRecordService.query(3, userInfo.getId(), 1, orderId, 1, payType, 1);
        System.out.println("query:"+query);
        query.setState(2);
        query.setCode(order_id);
        paymentRecordService.updateById(query);
        System.out.println(orderPrivateCar.getCompanyId());
        SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId());
        System.out.println("query1:"+query1);
        userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
        //添加交易明细
        transactionDetailsService.saveData(userInfo.getId(), "快车订单-感谢费", query.getAmount(), 2, 1, 1, 1, orderId);
        userInfoService.updateById(userInfo);
        orderPrivateCar.setThankYouFee(query.getAmount());
        this.updateById(orderPrivateCar);
        //添加已收入明细
        incomeService.saveData(2, orderPrivateCar.getDriverId(), 6, orderPrivateCar.getId(), 1, query.getAmount());
        Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
        driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
        driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
        driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
        driverService.updateById(driver);
        systemNoticeService.addSystemNotice(1, "您已使用" + (payType == 1 ? "微信" : (payType==2?"支付宝":"云闪付")) + "成功完成感谢费支付,谢谢使用!", userInfo.getId(), 1);
        System.out.println("出租车感谢费ok");
    }
    @Override
    public List<Map<String, Object>> queryOrderInfo2(Integer orderId, Integer state, String lon, String lat) {
        return this.baseMapper.queryOrderInfo2(orderId,state,lon,lat);
    }
    /**
     * 获取专车未支付订单
     * @param uid
     * @return
     */
    @Override
    public List<UnPayOrderVO> getUnpayPrivateOrders(Integer uid) {
        EntityWrapper<OrderPrivateCar> wrapper = new EntityWrapper<>();
        wrapper.eq("userId", uid);
        wrapper.eq("state", 7);
        //查出未支付订单
        List<OrderPrivateCar> orderPrivateCars = this.selectList(wrapper);
        List<UnPayOrderVO> unPayOrderVOList = new ArrayList<>();
        for (OrderPrivateCar order : orderPrivateCars) {
            UnPayOrderVO vo = new UnPayOrderVO();
            // 复制属性
            //添加司机信息
            DriverInfoWarpper driverInfoWarpper = new DriverInfoWarpper();
            Driver driver = driverService.selectById(order.getDriverId());
            BeanUtils.copyProperties(driver, driverInfoWarpper);            vo.setDriverInfoWarpper(driverInfoWarpper);
            //其余信息
            BeanUtils.copyProperties(order, vo);
            unPayOrderVOList.add(vo);
        }
        return unPayOrderVOList;
    }
}