Pu Zhibing
2025-04-04 3d4eeb82dd61f8951616dece2425e870116bc23d
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CarServiceImpl.java
@@ -5,22 +5,29 @@
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgRegisterClient;
import com.ruoyi.dataInterchange.api.model.enums.VehicleColorEnum;
import com.ruoyi.dataInterchange.api.vo.GnssDataVo;
import com.ruoyi.dataInterchange.api.vo.UPExgMsgRegisterVo;
import com.ruoyi.system.api.model.Car;
import com.ruoyi.system.api.model.CarType;
import com.ruoyi.system.api.model.Driver;
import com.ruoyi.system.api.model.Enterprise;
import com.ruoyi.system.mapper.CarMapper;
import com.ruoyi.system.query.CarListReq;
import com.ruoyi.system.query.CarListResp;
import com.ruoyi.system.service.ICarService;
import com.ruoyi.system.service.ICarTypeService;
import com.ruoyi.system.service.IDriverService;
import com.ruoyi.system.service.IEnterpriseService;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
 * @author zhibing.pu
@@ -38,6 +45,12 @@
   @Resource
   private IDriverService driverService;
   
   @Resource
   private ICarTypeService carTypeService;
   @Resource
   private RedisTemplate redisTemplate;
   
   /**
    * 定时任务存储最新的车辆数据
@@ -54,6 +67,7 @@
         return;
      }
      List<Enterprise> list1 = enterpriseService.list();
      List<Driver> driverList = driverService.list(new LambdaQueryWrapper<Driver>().eq(Driver::getStatus, 1));
      List<Car> carList = new ArrayList<>();
      for (UPExgMsgRegisterVo vo : list) {
         car = new Car();
@@ -61,15 +75,29 @@
         car.setLicensePlateColor(VehicleColorEnum.getName(vo.getVehicleColor()));
         Enterprise enterprise = list1.stream().filter(s -> s.getCode().equals(vo.getInferiorPlatformId().toString())).findFirst().get();
         car.setEnterpriseId(enterprise.getId());
         Driver driver = driverService.getOne(new LambdaQueryWrapper<Driver>().eq(Driver::getVehicleNumber, vo.getVehicleNo()).eq(Driver::getStatus, 1));
         if (null != driver) {
            car.setDriverId(driver.getId());
         car.setOperateType(enterprise.getOperationType());
         Optional<Driver> optional = driverList.stream().filter(s -> s.getVehicleNumber().equals(vo.getVehicleNo())).findFirst();
         if (optional.isPresent()) {
            car.setDriverId(optional.get().getId());
         }
         car.setGpsModel(vo.getTerminalModelType());
         car.setGpsImei(vo.getTerminalSIMCode());
         car.setLongitude(vo.getLongitude());
         car.setLatitude(vo.getLatitude());
         car.setCreateTime(LocalDateTime.now());
         carList.add(car);
      }
      this.saveBatch(carList);
      if (carList.size() > 0) {
         this.saveBatch(carList);
         //更新车辆类型统计数据
         List<CarType> carTypeList = carTypeService.list();
         List<Car> cars = this.list();
         for (CarType carType : carTypeList) {
            long count = cars.stream().filter(s -> s.getOperateType().equals(carType.getName())).count();
            carType.setCarNum(count);
         }
         carTypeService.updateBatchById(carTypeList);
      }
   }
   
   
@@ -84,4 +112,31 @@
      PageInfo<CarListResp> pageInfo = new PageInfo<>(carListReq.getPageCurr(), carListReq.getPageSize());
      return this.baseMapper.getCarList(pageInfo, carListReq);
   }
   /**
    * 定时任务修改车辆状态
    */
   @Override
   public void taskUpdateCarStatus() {
      List<Car> list = this.list();
      for (Car car : list) {
         GnssDataVo gnssDataVo = (GnssDataVo) redisTemplate.opsForValue().get("location:" + car.getVehicleNumber());
         if (null == gnssDataVo) {
            car.setStatus(1);
         } else {
            String dateTime = gnssDataVo.getDate() + " " + gnssDataVo.getTime();
            LocalDateTime localDateTime = LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));
            if (System.currentTimeMillis() / 1000 > second + 60) {
               car.setStatus(4);
            } else {
               car.setStatus(1);
            }
         }
      }
      if (list.size() > 0) {
         this.updateBatchById(list);
      }
   }
}