From 8b09fbc19a96b57bf1d0e4d7c79b51a76aeca554 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期五, 28 三月 2025 19:57:56 +0800 Subject: [PATCH] 修改bug --- DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java | 477 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 436 insertions(+), 41 deletions(-) diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java index 662c4eb..15f6f87 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java @@ -3,25 +3,34 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.stylefeng.guns.core.util.ToolUtil; +import com.stylefeng.guns.modular.system.dao.CarModelMapper; import com.stylefeng.guns.modular.system.dao.SettlementRecordMapper; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; -import com.stylefeng.guns.modular.system.util.DateUtil; -import com.stylefeng.guns.modular.system.util.ResultUtil; +import com.stylefeng.guns.modular.system.util.*; +import com.stylefeng.guns.modular.system.util.GoogleMap.FleetEngineUtil; 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.QueryHistoricalSettlement; import com.stylefeng.guns.modular.system.warpper.QuerySettlementAmount; import com.stylefeng.guns.modular.system.warpper.QuerySettlementAmountDetails; +import org.apache.shiro.util.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; /** * @author zhibing.pu @@ -47,6 +56,30 @@ @Value("${callbackPath}") private String callbackPath;//支付回调网关地址 + + @Resource + private IBalanceUsageRecordService balanceUsageRecordService; + + @Resource + private IDriverWorkService driverWorkService; + + @Autowired + private PushUtil pushUtil; + + @Autowired + private RedisUtil redisUtil; + + @Autowired + private ICarService carService; + + @Autowired + private FleetEngineUtil fleetEngineUtil; + + @Resource + private CarModelMapper carModelMapper; + + @Resource + private IIncomeService incomeService; @@ -58,11 +91,31 @@ @Override public QuerySettlementAmount querySettlementAmount(Integer language, Integer driverId) { QuerySettlementAmount querySettlementAmount = new QuerySettlementAmount(); - SettlementRecord settlementRecord = this.selectOne(new EntityWrapper<SettlementRecord>().eq("driverId", driverId).eq("paymentStatus", 1)); - if(null != settlementRecord){ - querySettlementAmount.setType(settlementRecord.getType()); - querySettlementAmount.setAmount(settlementRecord.getPayMoney()); - List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("settlementRecordId", settlementRecord.getId()).orderBy("createTime desc")); + SettlementAllocation settlementAllocation = settlementAllocationService.selectOne(null); + if(null != settlementAllocation) { + JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent()); + Integer type = jsonObject.getInteger("type"); + querySettlementAmount.setType(type); + //所有未支付的主表数据 + List<SettlementRecord> settlementRecords = this.selectList(new EntityWrapper<SettlementRecord>().eq("driverId", driverId) + .eq("paymentStatus", 1)); + double sum = settlementRecords.stream().mapToDouble(SettlementRecord::getPayMoney).sum(); + + //所有未生成主表数据的明细 + List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driverId) + .isNull("settlementRecordId")); + double sum1 = settlementDetailList.stream().mapToDouble(SettlementDetail::getPrice).sum(); + //显示的金额 + querySettlementAmount.setAmount(new BigDecimal(sum).add(new BigDecimal(sum1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + + List<Integer> collect = settlementRecords.stream().map(SettlementRecord::getId).collect(Collectors.toList()); + Wrapper<SettlementDetail> wrapper = new EntityWrapper<SettlementDetail>(); + if(collect.size() > 0){ + wrapper.eq("driverId", driverId).in("settlementRecordId", collect).or().eq("driverId", driverId).isNull("settlementRecordId"); + }else{ + wrapper.eq("driverId", driverId).isNull("settlementRecordId"); + } + settlementDetailList = settlementDetailService.selectList(wrapper.orderBy("createTime desc")); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); List<QuerySettlementAmountDetails> list = new ArrayList<>(); settlementDetailList.forEach(s -> { @@ -89,17 +142,50 @@ * @return */ @Override + @Transactional public ResultUtil paymentSettlementAmount(Integer driverId, Integer payType, Integer bankCardId, Integer language) throws Exception { Driver driver1 = driverService.selectById(driverId); - SettlementRecord settlementRecord = this.selectOne(new EntityWrapper<SettlementRecord>().eq("driverId", driverId).eq("paymentStatus", 1)); - if(null == settlementRecord){ - return ResultUtil.error(language == 1 ? "暂无需支付" : language == 2 ? "No need to make payments for the time being" : "Pas besoin d’effectuer de paiements pour le moment"); + QuerySettlementAmount querySettlementAmount = querySettlementAmount(language, driverId); + if(querySettlementAmount.getAmount() == 0){ + return ResultUtil.error(language == 1 ? "暂无需支付" : language == 2 ? "No payment is required" : "Aucun paiement n’est requis"); } - Double payMoney = settlementRecord.getPayMoney(); + + Double payMoney = 0D; + //主动生成结算主数据 + SettlementAllocation settlementAllocation = settlementAllocationService.selectOne(null); + if(null == settlementAllocation){ + JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent()); + Integer type = jsonObject.getInteger("type"); + + //所以未生成主表的明细数据 + List<SettlementDetail> settlementDetails = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driverId) + .isNull("settlementRecordId")); + double sum = settlementDetails.stream().mapToDouble(SettlementDetail::getPrice).sum(); + if(sum > 0){ + SettlementRecord settlementRecord = new SettlementRecord(); + settlementRecord.setDay(new Date()); + settlementRecord.setDriverId(driverId); + settlementRecord.setType(type); + settlementRecord.setPaymentStatus(1); + settlementRecord.setPayMoney(new BigDecimal(sum).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + settlementRecord.setInsertTime(new Date()); + this.insert(settlementRecord); + + settlementDetails.forEach(s -> { + s.setSettlementRecordId(settlementRecord.getId()); + }); + settlementDetailService.updateBatchById(settlementDetails); + } + } + List<SettlementRecord> settlementRecords = this.selectList(new EntityWrapper<SettlementRecord>().eq("driverId", driverId).eq("paymentStatus", 1)); + payMoney = settlementRecords.stream().mapToDouble(SettlementRecord::getPayMoney).sum(); + if(payMoney == 0){ + return ResultUtil.error(language == 1 ? "暂无需支付" : language == 2 ? "No payment is required" : "Aucun paiement n’est requis"); + } ResultUtil resultUtil = ResultUtil.success(""); if(payType == 1){//手机支付 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); - String merchantTransactionId = sdf.format(new Date()) + language + settlementRecord.getId(); + String merchantTransactionId = sdf.format(new Date()) + language + payType + driver1.getId(); CheckoutRequest checkoutRequest = new CheckoutRequest(); checkoutRequest.setMsisdn(Long.valueOf(driver1.getPhone())); checkoutRequest.setCustomerEmail(driver1.getEmail()); @@ -109,10 +195,10 @@ checkoutRequest.setRequestAmount(payMoney); checkoutRequest.setMerchantTransactionId(merchantTransactionId); checkoutRequest.setRequestDescription("Settlement cost"); - checkoutRequest.setCallbackUrl(callbackPath + "/base/settlementRecord/querySettlementAmount"); + checkoutRequest.setCallbackUrl(callbackPath + "/base/settlementRecord/paymentSettlementAmountCallback"); checkoutRequest.setPendingRedirectUrl(""); - checkoutRequest.setSuccessRedirectUrl("http://182.160.16.251:81/payMoney/pages/success.html"); - checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html"); + checkoutRequest.setSuccessRedirectUrl("https://igo.i-go.group/payMoney/pages/success.html"); + checkoutRequest.setFailRedirectUrl("https://igo.i-go.group/payMoney/pages/fail.html"); resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest); if(resultUtil.getCode()!=200){ @@ -123,7 +209,7 @@ if(payType == 2){//银行卡支付 BankCard bankCard = bankCardService.selectById(bankCardId); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); - String merchantTransactionId = sdf.format(new Date()) + language + settlementRecord.getId(); + String merchantTransactionId = sdf.format(new Date()) + language + payType + driver1.getId(); CheckoutRequest checkoutRequest = new CheckoutRequest(); checkoutRequest.setMsisdn(Long.valueOf(bankCard.getCode())); checkoutRequest.setCustomerEmail(driver1.getEmail()); @@ -133,10 +219,10 @@ checkoutRequest.setRequestAmount(payMoney); checkoutRequest.setMerchantTransactionId(merchantTransactionId); checkoutRequest.setRequestDescription("Settlement cost"); - checkoutRequest.setCallbackUrl(callbackPath + "/base/settlementRecord/querySettlementAmount"); + checkoutRequest.setCallbackUrl(callbackPath + "/base/settlementRecord/paymentSettlementAmountCallback"); checkoutRequest.setPendingRedirectUrl(""); - checkoutRequest.setSuccessRedirectUrl("http://182.160.16.251:81/payMoney/pages/success.html"); - checkoutRequest.setFailRedirectUrl("http://182.160.16.251:81/payMoney/pages/fail.html"); + checkoutRequest.setSuccessRedirectUrl("https://igo.i-go.group/payMoney/pages/success.html"); + checkoutRequest.setFailRedirectUrl("https://igo.i-go.group/payMoney/pages/fail.html"); resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest); if(resultUtil.getCode()!=200){ @@ -151,23 +237,63 @@ Double laveActivityMoney = driver1.getLaveActivityMoney(); Double laveBusinessMoney = driver1.getLaveBusinessMoney(); - if(laveBusinessMoney.compareTo(payMoney) < 0){ - driver1.setLaveBusinessMoney(0D); - BigDecimal m = new BigDecimal(payMoney).subtract(new BigDecimal(laveBusinessMoney)); - driver1.setLaveActivityMoney(new BigDecimal(laveActivityMoney).subtract(m).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - }else{ - driver1.setLaveBusinessMoney(new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + + for (SettlementRecord settlementRecord : settlementRecords) { + Double payMoney1 = settlementRecord.getPayMoney(); + if(laveActivityMoney >= payMoney1){ + settlementRecord.setPayMoney(payMoney1); + settlementRecord.setPaymentStatus(2); + settlementRecord.setPayType(payType); + settlementRecord.setBalanceType(1); + settlementRecord.setPayTime(new Date()); + this.updateById(settlementRecord); + balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 1, payMoney1, settlementRecord.getType() + 2); + laveActivityMoney = new BigDecimal(laveActivityMoney).subtract(new BigDecimal(payMoney1)).doubleValue(); + }else{ + if(laveActivityMoney > 0){ + settlementRecord.setPayMoney(laveActivityMoney); + settlementRecord.setPaymentStatus(2); + settlementRecord.setPayType(payType); + settlementRecord.setBalanceType(1); + settlementRecord.setPayTime(new Date()); + this.updateById(settlementRecord); + balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 1, laveActivityMoney, settlementRecord.getType() + 2); + laveActivityMoney = 0D; + payMoney1 = new BigDecimal(payMoney1).subtract(new BigDecimal(laveActivityMoney)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + + SettlementRecord settlementRecord1 = new SettlementRecord(); + BeanUtils.copyProperties(settlementRecord, settlementRecord1); + settlementRecord1.setId(null); + settlementRecord1.setPayMoney(payMoney1); + settlementRecord1.setPaymentStatus(2); + settlementRecord1.setPayType(payType); + settlementRecord1.setBalanceType(1); + settlementRecord1.setPayTime(new Date()); + this.insert(settlementRecord1); + + balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 2, payMoney1, settlementRecord.getType() + 2); + laveBusinessMoney = new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(payMoney1)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + }else{ + settlementRecord.setPaymentStatus(2); + settlementRecord.setPayType(payType); + settlementRecord.setPayMoney(payMoney1); + settlementRecord.setBalanceType(2); + settlementRecord.setPayTime(new Date()); + this.updateById(settlementRecord); + balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 2, payMoney1, settlementRecord.getType() + 2); + laveBusinessMoney = new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(payMoney1)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + } + } } - driver1.setBalance(new BigDecimal(driver1.getBalance()).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - //添加交易明细 - transactionDetailsService.saveData(driverId, "线下结算", payMoney, 2, 1, 2, null, null); + driver1.setLaveBusinessMoney(laveBusinessMoney); + driver1.setLaveActivityMoney(laveActivityMoney); + driver1.setBalance(new BigDecimal(laveBusinessMoney).add(new BigDecimal(laveActivityMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driverService.updateById(driver1); - - settlementRecord.setPaymentStatus(2); - settlementRecord.setPayType(payType); - settlementRecord.setPayTime(new Date()); - this.updateById(settlementRecord); + //添加司机结算的平台收入记录 + incomeService.saveData(1, 1, 8, driver1.getId(), null, payMoney); + //添加交易明细 + transactionDetailsService.saveData(driverId, "支付结算费用", payMoney, 2, 1, 2, null, null); + return ResultUtil.success(""); } return resultUtil; @@ -182,14 +308,38 @@ @Override public List<QueryHistoricalSettlement> queryHistoricalSettlement(Integer language, Integer driverId, Integer pageNum, Integer size) { pageNum = (pageNum - 1) * size; - List<QueryHistoricalSettlement> list = this.baseMapper.queryHistoricalSettlement(driverId, pageNum, size); - for (QueryHistoricalSettlement queryHistoricalSettlement : list) { - if(ToolUtil.isNotEmpty(queryHistoricalSettlement.getCreateTime())){ - String createTime = queryHistoricalSettlement.getCreateTime(); - queryHistoricalSettlement.setCreateTime(DateUtil.conversionFormat(language, createTime)); + List<Map<String, Object>> list = this.baseMapper.queryHistoricalSettlement(driverId, pageNum, size); + Double aDouble = this.baseMapper.queryHistoricalSettlementTotal(driverId); + List<QueryHistoricalSettlement> datas = new ArrayList<>(); + for (Map<String, Object> map : list) { + QueryHistoricalSettlement queryHistoricalSettlement = new QueryHistoricalSettlement(); + if(null != map.get("createTime")){ + queryHistoricalSettlement.setCreateTime(DateUtil.conversionFormat(language, map.get("createTime").toString())); } + if(null != map.get("price")){ + queryHistoricalSettlement.setPrice(Double.valueOf(map.get("price").toString())); + } + if(null != map.get("type")){ + queryHistoricalSettlement.setType(Integer.valueOf(map.get("type").toString())); + } + if(null != map.get("payType")){ + switch (map.get("payType").toString()){ + case "1": + queryHistoricalSettlement.setPayType(language == 1 ? "手机支付" : language == 2 ? "Mobile Money" : "Paiement mobile"); + break; + case "2": + queryHistoricalSettlement.setPayType(language == 1 ? "线上支付" : language == 2 ? "Bank Card" : "Carte bancaire"); + break; + default: + Integer balanceType = Integer.valueOf(map.get("balanceType").toString()); + queryHistoricalSettlement.setPayType(language == 1 ? "余额支付(" + (balanceType == 1 ? "奖励" : "收入") + ")" : language == 2 ? "Wallet (" + (balanceType == 1 ? "Reward" : "Income") + ")" : "Portefeuille (" + (balanceType == 1 ? "Récompense" : "Revenu") + ")"); + break; + } + } + queryHistoricalSettlement.setTotalPrice(aDouble); + datas.add(queryHistoricalSettlement); } - return list; + return datas; } @@ -217,11 +367,109 @@ w = w == 1 ? 7 : w - 1; int d = today.get(Calendar.DAY_OF_MONTH); if(null != settlementAllocation){ - List<Map<String, Object>> list = settlementDetailService.queryGroupDriver(); JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent()); Integer type = jsonObject.getInteger("type"); Integer day = jsonObject.getInteger("day"); + if(type == 1){//日结算 + List<Map<String, Object>> list = settlementDetailService.queryGroupDriver(); + for (Map<String, Object> map : list) { + Integer driverId = Integer.valueOf(map.get("driverId").toString()); + Double price = Double.valueOf(map.get("price").toString()); + + SettlementRecord settlementRecord = new SettlementRecord(); + settlementRecord.setDay(new Date()); + settlementRecord.setDriverId(driverId); + settlementRecord.setType(1); + settlementRecord.setPaymentStatus(1); + settlementRecord.setPayMoney(price); + settlementRecord.setInsertTime(new Date()); + this.insert(settlementRecord); + + List<SettlementDetail> settlementDetailList = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driverId).isNull("settlementRecordId")); + settlementDetailList.forEach(s -> { + s.setSettlementRecordId(settlementRecord.getId()); + }); + if(settlementDetailList.size() > 0){ + settlementDetailService.updateBatchById(settlementDetailList); + } + + //强制司机下班 + DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>() + .eq("driverId", driverId).eq("state", 1)); + if(null != driverWork){ + driverWork.setEndTime(new Date()); + driverWork.setState(2); + driverWorkService.updateById(driverWork); + Driver driver = driverService.selectById(driverId); + driver.setState(1); + driverService.updateById(driver); + Car car = carService.selectById(driver.getCarId()); + if(!StringUtils.hasLength(car.getVehicleId())){ + car.setVehicleId(UUIDUtil.getRandomCode()); + carService.updateById(car); + } + + //司机下班,修改谷歌上的车辆信息 + new Thread(()->{ + try { + CarModel carModel = carModelMapper.selectById(car.getCarModelId()); + String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); + if(ToolUtil.isEmpty(vehicles)){ + boolean createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(!createVehicles){ + for (int i = 0; i < 5; i++) { + createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(createVehicles){ + break; + } + try { + Thread.sleep(5000L); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + + boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(!updateVehicles){ + for (int i = 0; i < 5; i++) { + updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(updateVehicles){ + break; + } + try { + Thread.sleep(5000L); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + }else{ + boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(!updateVehicles){ + for (int i = 0; i < 5; i++) { + updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(updateVehicles){ + break; + } + try { + Thread.sleep(5000L); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + }).start(); + + } + } + } if(type == 2 && w == day){//周结算 + List<Map<String, Object>> list = settlementDetailService.queryGroupDriver(); for (Map<String, Object> map : list) { Integer driverId = Integer.valueOf(map.get("driverId").toString()); Double price = Double.valueOf(map.get("price").toString()); @@ -242,9 +490,83 @@ if(settlementDetailList.size() > 0){ settlementDetailService.updateBatchById(settlementDetailList); } + + //强制司机下班 + DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>() + .eq("driverId", driverId).eq("state", 1)); + if(null != driverWork){ + driverWork.setEndTime(new Date()); + driverWork.setState(2); + driverWorkService.updateById(driverWork); + Driver driver = driverService.selectById(driverId); + driver.setState(1); + driverService.updateById(driver); + Car car = carService.selectById(driver.getCarId()); + if(!StringUtils.hasLength(car.getVehicleId())){ + car.setVehicleId(UUIDUtil.getRandomCode()); + carService.updateById(car); + } + + //司机下班,修改谷歌上的车辆信息 + new Thread(()->{ + try { + CarModel carModel = carModelMapper.selectById(car.getCarModelId()); + String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); + if(ToolUtil.isEmpty(vehicles)){ + boolean createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(!createVehicles){ + for (int i = 0; i < 5; i++) { + createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(createVehicles){ + break; + } + try { + Thread.sleep(5000L); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + + boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(!updateVehicles){ + for (int i = 0; i < 5; i++) { + updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(updateVehicles){ + break; + } + try { + Thread.sleep(5000L); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + }else{ + boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(!updateVehicles){ + for (int i = 0; i < 5; i++) { + updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(updateVehicles){ + break; + } + try { + Thread.sleep(5000L); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + }).start(); + } } } if(type == 3 && d == day){//月结算 + List<Map<String, Object>> list = settlementDetailService.queryGroupDriver(); for (Map<String, Object> map : list) { Integer driverId = Integer.valueOf(map.get("driverId").toString()); Double price = Double.valueOf(map.get("price").toString()); @@ -265,6 +587,79 @@ if(settlementDetailList.size() > 0){ settlementDetailService.updateBatchById(settlementDetailList); } + + //强制司机下班 + DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>() + .eq("driverId", driverId).eq("state", 1)); + if(null != driverWork){ + driverWork.setEndTime(new Date()); + driverWork.setState(2); + driverWorkService.updateById(driverWork); + Driver driver = driverService.selectById(driverId); + driver.setState(1); + driverService.updateById(driver); + Car car = carService.selectById(driver.getCarId()); + if(!StringUtils.hasLength(car.getVehicleId())){ + car.setVehicleId(UUIDUtil.getRandomCode()); + carService.updateById(car); + } + + //司机下班,修改谷歌上的车辆信息 + new Thread(()->{ + try { + CarModel carModel = carModelMapper.selectById(car.getCarModelId()); + String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId()); + if(ToolUtil.isEmpty(vehicles)){ + boolean createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(!createVehicles){ + for (int i = 0; i < 5; i++) { + createVehicles = fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(createVehicles){ + break; + } + try { + Thread.sleep(5000L); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + + boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(!updateVehicles){ + for (int i = 0; i < 5; i++) { + updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(updateVehicles){ + break; + } + try { + Thread.sleep(5000L); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + }else{ + boolean updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(!updateVehicles){ + for (int i = 0; i < 5; i++) { + updateVehicles = fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId()); + if(updateVehicles){ + break; + } + try { + Thread.sleep(5000L); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + }).start(); + } } } } -- Gitblit v1.7.1