Pu Zhibing
2025-07-23 1ee76c252f2dbba62e0ec34cccf9eaac51de9083
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java
@@ -5,8 +5,10 @@
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.dataInterchange.api.feignClient.UPWarnMsgAdptInfoClient;
import com.ruoyi.dataInterchange.api.feignClient.UPWarnMsgOperationInfoClient;
import com.ruoyi.dataInterchange.api.model.enums.WarnType;
import com.ruoyi.dataInterchange.api.vo.UPWarnMsgAdptInfoVo;
import com.ruoyi.dataInterchange.api.vo.UPWarnMsgOperationInfoVo;
import com.ruoyi.system.api.model.Car;
import com.ruoyi.system.api.model.Driver;
import com.ruoyi.system.api.model.Enterprise;
@@ -50,6 +52,9 @@
   @Resource
   private ICarService carService;
   
   @Resource
   private UPWarnMsgOperationInfoClient upWarnMsgOperationInfoClient;
   
   /**
    * 存储新的报警数据
@@ -70,6 +75,10 @@
      List<Car> carList = carService.list();
      List<Warn> warns = new ArrayList<>();
      for (UPWarnMsgAdptInfoVo vo : list) {
         long count = this.count(new LambdaQueryWrapper<Warn>().eq(Warn::getObjectId, vo.getInfoId()));
         if(0 != count){
            continue;
         }
         String warnTypeName = WarnType.getWarnTypeName(vo.getWarnType());
         warn = new Warn();
         Optional<Car> carOptional = carList.stream().filter(s -> s.getVehicleNumber().equals(vo.getVehicleNo())).findFirst();
@@ -92,17 +101,21 @@
         warn.setWarnNumber(1);
         warn.setSpeed(null == vo.getSpeed() ? BigDecimal.ZERO : new BigDecimal(vo.getSpeed()));
         if(null != vo.getLongitude() && 0 != vo.getLongitude()){
            warn.setLongitude(new BigDecimal(vo.getLongitude()).divide(new BigDecimal(1000000)).toString());
            String s = vo.getLongitude().toString();
            warn.setLongitude(s.substring(0, 3) + "." + s.substring(3));
         }
         if(null != vo.getLatitude() && 0 != vo.getLatitude()){
            warn.setLatitude(new BigDecimal(vo.getLatitude()).divide(new BigDecimal(1000000)).toString());
            String s = vo.getLatitude().toString();
            warn.setLatitude(s.substring(0, 2) + "." + s.substring(2));
            Map<String, String> geocode = null;
            try {
               geocode = GDMapGeocodingUtil.geocode(warn.getLongitude(), warn.getLatitude());
            } catch (Exception e) {
               e.printStackTrace();
            }
            warn.setAddress(geocode.get("address"));
            if(null != geocode){
               warn.setAddress(geocode.get("address"));
            }
         }
         switch (vo.getResult()) {
            case 0x00:
@@ -118,9 +131,34 @@
               warn.setTreatmentState("将来处理");
               break;
         }
         if(0x00 != vo.getResult() && null == warn.getTreatmentTime()){
            UPWarnMsgOperationInfoVo upWarnMsgOperationInfoVo = upWarnMsgOperationInfoClient.getUPWarnMsgOperationInfo(warn.getObjectId()).getData();
            if(null != upWarnMsgOperationInfoVo){
               warn.setTreatmentUser(upWarnMsgOperationInfoVo.getOperator());
               warn.setTreatmentTime(LocalDateTime.ofEpochSecond(upWarnMsgOperationInfoVo.getCreateTime(), 0, ZoneOffset.ofHours(8)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
               switch (upWarnMsgOperationInfoVo.getMethod()) {
                  case 0x01:
                     warn.setTreatmentRemark("快速拍照");
                     break;
                  case 0x02:
                     warn.setTreatmentRemark("语音下发");
                     break;
                  case 0x03:
                     warn.setTreatmentRemark("不做处理");
                     break;
                  case 0x04:
                     warn.setTreatmentRemark("其他");
                     break;
                  default:
                     warn.setTreatmentRemark("其他");
                     break;
               }
            }
         }
         warn.setCreateTime(LocalDateTime.now());
         warn.setObjectId(vo.getInfoId());
         warn.setVehicleNumber(vo.getVehicleNo());
         warn.setPicUrl(vo.getPicUrl());
         warns.add(warn);
      }
      if (warns.size() > 0) {
@@ -163,8 +201,14 @@
   public void taskUpdateWarnStatus() {
      List<Warn> warnList = this.list(new LambdaQueryWrapper<Warn>().eq(Warn::getTreatmentState, "处理中"));
      for (Warn warn : warnList) {
         if(null == warn.getObjectId()){
            continue;
         }
         UPWarnMsgAdptInfoVo vo = upWarnMsgAdptInfoClient.findByInfoId(warn.getObjectId()).getData();
         if (null != vo && null != warn && vo.getResult() != 0x00) {
         if(null == vo){
            continue;
         }
         if (null != warn && vo.getResult() != 0x00) {
            switch (vo.getResult()) {
               case 0x00:
                  warn.setTreatmentState("处理中");
@@ -179,8 +223,35 @@
                  warn.setTreatmentState("将来处理");
                  break;
            }
            this.updateById(warn);
         }
         if(null == warn.getPicUrl()){
            warn.setPicUrl(vo.getPicUrl());
         }
         if(0x00 != vo.getResult()){
            UPWarnMsgOperationInfoVo upWarnMsgOperationInfoVo = upWarnMsgOperationInfoClient.getUPWarnMsgOperationInfo(warn.getObjectId()).getData();
            if(null != upWarnMsgOperationInfoVo){
               warn.setTreatmentUser(upWarnMsgOperationInfoVo.getOperator());
               warn.setTreatmentTime(LocalDateTime.ofEpochSecond(upWarnMsgOperationInfoVo.getCreateTime(), 0, ZoneOffset.ofHours(8)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
               switch (upWarnMsgOperationInfoVo.getMethod()) {
                  case 0x01:
                     warn.setTreatmentRemark("快速拍照");
                     break;
                  case 0x02:
                     warn.setTreatmentRemark("语音下发");
                     break;
                  case 0x03:
                     warn.setTreatmentRemark("不做处理");
                     break;
                  case 0x04:
                     warn.setTreatmentRemark("其他");
                     break;
                  default:
                     warn.setTreatmentRemark("其他");
                     break;
               }
            }
         }
         this.updateById(warn);
      }
      
   }
@@ -273,7 +344,7 @@
         if(total == 0){
            map.put("rate", BigDecimal.ZERO);
         }else{
            map.put("rate", BigDecimal.valueOf(processed / total * 100).setScale(2, RoundingMode.HALF_EVEN));
            map.put("rate", new BigDecimal(processed).divide(new BigDecimal(total), 4, RoundingMode.HALF_EVEN).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN));
         }
      }
      return allWarnGroupVehicleType;