Pu Zhibing
2024-10-03 6c741ac9e80353ca42906c1c6c7109324ae9f9f9
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java
@@ -6,22 +6,25 @@
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 javax.annotation.Resource;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
@@ -55,6 +58,24 @@
    
    @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;
@@ -69,9 +90,8 @@
        SettlementAllocation settlementAllocation = settlementAllocationService.selectOne(null);
        if(null != settlementAllocation) {
            JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent());
            Double maxPrice = jsonObject.getDouble("maxPrice");
            Integer type = jsonObject.getInteger("type");
            querySettlementAmount.setType(null != maxPrice ? 1 : 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"));
@@ -79,11 +99,11 @@
            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>().eq("driverId", driverId);
            Wrapper<SettlementDetail> wrapper = new EntityWrapper<SettlementDetail>();
            if(collect.size() > 0){
                wrapper.in("settlementRecordId", collect).or().isNull("settlementRecordId");
                wrapper.eq("driverId", driverId).in("settlementRecordId", collect).or().eq("driverId", driverId).isNull("settlementRecordId");
            }else{
                wrapper.isNull("settlementRecordId");
                wrapper.eq("driverId", driverId).isNull("settlementRecordId");
            }
            settlementDetailList = settlementDetailService.selectList(wrapper.orderBy("createTime desc"));
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
@@ -124,7 +144,6 @@
        SettlementAllocation settlementAllocation = settlementAllocationService.selectOne(null);
        if(null == settlementAllocation){
            JSONObject jsonObject = JSON.parseObject(settlementAllocation.getContent());
            Double maxPrice = jsonObject.getDouble("maxPrice");
            Integer type = jsonObject.getInteger("type");
    
            List<SettlementDetail> settlementDetails = settlementDetailService.selectList(new EntityWrapper<SettlementDetail>().eq("driverId", driverId).isNull("settlementRecordId"));
@@ -133,7 +152,7 @@
                SettlementRecord settlementRecord = new SettlementRecord();
                settlementRecord.setDay(new Date());
                settlementRecord.setDriverId(driverId);
                settlementRecord.setType(null != maxPrice ? 1 : type);
                settlementRecord.setType(type);
                settlementRecord.setPaymentStatus(1);
                settlementRecord.setPayMoney(new BigDecimal(sum).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                settlementRecord.setInsertTime(new Date());
@@ -165,8 +184,8 @@
            checkoutRequest.setRequestDescription("Settlement cost");
            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){
@@ -189,8 +208,8 @@
            checkoutRequest.setRequestDescription("Settlement cost");
            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){
@@ -351,6 +370,64 @@
            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)){
                                    fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                }else{
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                }
                            }catch (Exception e){
                                e.printStackTrace();
                            }
                        }).start();
                    }
                }
            }
            if(type == 2 && w == day){//周结算
                List<Map<String, Object>> list = settlementDetailService.queryGroupDriver();
                for (Map<String, Object> map : list) {
@@ -372,6 +449,39 @@
                    });
                    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)){
                                    fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                }else{
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                }
                            }catch (Exception e){
                                e.printStackTrace();
                            }
                        }).start();
                    }
                }
            }
@@ -397,6 +507,39 @@
                    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)){
                                    fleetEngineUtil.createVehicles(carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                }else{
                                    fleetEngineUtil.updateVehicles("OFFLINE", carModel.getSeat() - 1, car.getCarLicensePlate(), car.getVehicleId());
                                }
                            }catch (Exception e){
                                e.printStackTrace();
                            }
                        }).start();
                    }
                }
            }
        }