Pu Zhibing
2025-05-16 4c99ee7028c3fe58a2cd4b8273b22c75c45574fc
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java
@@ -22,6 +22,7 @@
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;
@@ -76,6 +77,9 @@
    
    @Resource
    private CarModelMapper carModelMapper;
    @Resource
    private IIncomeService incomeService;
@@ -92,10 +96,16 @@
            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));
            //所有未支付的主表数据
            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"));
            //所有未生成主表数据的明细
            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());
@@ -132,6 +142,7 @@
     * @return
     */
    @Override
    @Transactional
    public ResultUtil paymentSettlementAmount(Integer driverId, Integer payType, Integer bankCardId, Integer language) throws Exception {
        Driver driver1 = driverService.selectById(driverId);
        QuerySettlementAmount querySettlementAmount = querySettlementAmount(language, driverId);
@@ -146,7 +157,9 @@
            JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent());
            Integer type = jsonObject.getInteger("type");
    
            List<SettlementDetail> settlementDetails = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driverId).isNull("settlementRecordId"));
            //所以未生成主表的明细数据
            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();
@@ -172,7 +185,7 @@
        ResultUtil resultUtil = ResultUtil.success("");
        if(payType == 1){//手机支付
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String merchantTransactionId = sdf.format(new Date()) + language + payType + driver1;
            String merchantTransactionId = sdf.format(new Date()) + language + payType + driver1.getId();
            CheckoutRequest checkoutRequest = new CheckoutRequest();
            checkoutRequest.setMsisdn(Long.valueOf(driver1.getPhone()));
            checkoutRequest.setCustomerEmail(driver1.getEmail());
@@ -196,7 +209,7 @@
        if(payType == 2){//银行卡支付
            BankCard bankCard = bankCardService.selectById(bankCardId);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String merchantTransactionId = sdf.format(new Date()) + language + payType + driver1;
            String merchantTransactionId = sdf.format(new Date()) + language + payType + driver1.getId();
            CheckoutRequest checkoutRequest = new CheckoutRequest();
            checkoutRequest.setMsisdn(Long.valueOf(bankCard.getCode()));
            checkoutRequest.setCustomerEmail(driver1.getEmail());
@@ -224,76 +237,63 @@
            Double laveActivityMoney = driver1.getLaveActivityMoney();
            Double laveBusinessMoney = driver1.getLaveBusinessMoney();
            //活动余额小于结算金额
            if(null != laveActivityMoney && 0 < laveActivityMoney && laveActivityMoney.compareTo(payMoney) < 0){
                driver1.setLaveActivityMoney(0D);
                for (SettlementRecord settlementRecord : settlementRecords) {
                    Double payMoney1 = settlementRecord.getPayMoney();
                    if(laveActivityMoney >= payMoney1){
                        settlementRecord.setPayMoney(payMoney1);
            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, payMoney1, settlementRecord.getType() + 2);
                        laveActivityMoney = new BigDecimal(laveActivityMoney).subtract(new BigDecimal(payMoney1)).doubleValue();
                    }else{
                        Double m = payMoney1;
                        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;
                            m = new BigDecimal(payMoney1).subtract(new BigDecimal(laveActivityMoney)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                        }
                        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(m.doubleValue());
                        settlementRecord1.setBalanceType(2);
                        settlementRecord1.setPayMoney(payMoney1);
                        settlementRecord1.setPaymentStatus(2);
                        settlementRecord1.setPayType(payType);
                        settlementRecord1.setBalanceType(1);
                        settlementRecord1.setPayTime(new Date());
                        this.insert(settlementRecord1);
                        balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 2, m.doubleValue(), settlementRecord.getType() + 2);
                        laveBusinessMoney = new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(m)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
                        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.setLaveBusinessMoney(laveBusinessMoney);
            }
            //活动余额大于结算金额
            if(null != laveActivityMoney && 0 < laveActivityMoney && laveActivityMoney.compareTo(payMoney) >= 0){
                driver1.setLaveActivityMoney(new BigDecimal(laveActivityMoney).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                for (SettlementRecord settlementRecord : settlementRecords) {
                    settlementRecord.setPaymentStatus(2);
                    settlementRecord.setPayType(payType);
                    settlementRecord.setBalanceType(1);
                    settlementRecord.setPayTime(new Date());
                    this.updateById(settlementRecord);
                    balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 1, payMoney, settlementRecord.getType() + 2);
                }
            }
            if(null == laveActivityMoney || 0 == laveActivityMoney){
                driver1.setLaveActivityMoney(0D);
                driver1.setLaveBusinessMoney(new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                for (SettlementRecord settlementRecord : settlementRecords) {
                    settlementRecord.setPaymentStatus(2);
                    settlementRecord.setPayType(payType);
                    settlementRecord.setBalanceType(1);
                    settlementRecord.setPayTime(new Date());
                    this.updateById(settlementRecord);
                    balanceUsageRecordService.saveBalanceUsageRecord(settlementRecord.getDriverId(), 2, payMoney, settlementRecord.getType() + 2);
                }
            }
            driver1.setBalance(new BigDecimal(driver1.getBalance()).subtract(new BigDecimal(payMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            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);
            //添加司机结算的平台收入记录
            incomeService.saveData(1, 1, 8, driver1.getId(), null, payMoney);
            //添加交易明细
            transactionDetailsService.saveData(driverId, "支付结算费用", payMoney, 2, 1, 2, null, null);
            driverService.updateById(driver1);
            return ResultUtil.success("");
        }
        return resultUtil;
@@ -415,10 +415,50 @@
                                CarModel carModel = carModelMapper.selectById(car.getCarModelId());
                                String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId());
                                if(ToolUtil.isEmpty(vehicles)){
                                    fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    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{
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    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();
@@ -473,10 +513,50 @@
                                CarModel carModel = carModelMapper.selectById(car.getCarModelId());
                                String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId());
                                if(ToolUtil.isEmpty(vehicles)){
                                    fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    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{
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    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();
@@ -530,10 +610,50 @@
                                CarModel carModel = carModelMapper.selectById(car.getCarModelId());
                                String vehicles = fleetEngineUtil.getVehicles(car.getVehicleId());
                                if(ToolUtil.isEmpty(vehicles)){
                                    fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    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{
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    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();