| | |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.LocalTime; |
| | | import java.util.*; |
| | |
| | | Locale locale = LocaleContextHolder.getLocale(); |
| | | |
| | | if (dto.getAnnualInspectionDate() != null && dto.getAnnualInspectionDate().isBefore(now)) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | expiredItems.add("年检到期时间"); |
| | | } else { |
| | | expiredItems.add("Annual inspection expiration date"); |
| | | } |
| | | } |
| | | if (dto.getInsuranceEndTime() != null && dto.getInsuranceEndTime().isBefore(now)) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | expiredItems.add("保险到期时间"); |
| | | } else { |
| | | expiredItems.add("Insurance expiration date"); |
| | | } |
| | | } |
| | | if (dto.getQualificationExpireTime() != null && dto.getQualificationExpireTime().isBefore(now)) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | expiredItems.add("运营资质到期时间"); |
| | | } else { |
| | | expiredItems.add("Operation qualification expiration date"); |
| | |
| | | |
| | | if (!expiredItems.isEmpty()) { |
| | | String detail; |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | detail = String.join("、", expiredItems); |
| | | } else { |
| | | detail = String.join("; ", expiredItems); |
| | |
| | | || StringUtils.isBlank(vehicle.getInsurancePhone()) |
| | | || vehicle.getInsuranceEndTime() == null |
| | | || StringUtils.isBlank(vehicle.getPolicyInformation())) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | missingItems.add("保险信息"); |
| | | } else { |
| | | missingItems.add("Insurance information"); |
| | |
| | | // 校验年检信息 |
| | | if (vehicle.getAnnualInspectionDate() == null |
| | | || StringUtils.isBlank(vehicle.getInspectionAttachments())) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | missingItems.add("年检信息"); |
| | | } else { |
| | | missingItems.add("Annual inspection information"); |
| | |
| | | |
| | | // 校验运营区域 |
| | | if (vehicle.getElectronicId() == null) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | missingItems.add("运营区域"); |
| | | } else { |
| | | missingItems.add("Operation area"); |
| | |
| | | // 校验运营资质 |
| | | if (StringUtils.isBlank(vehicle.getOperationQualification()) |
| | | || vehicle.getQualificationExpireTime() == null) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | missingItems.add("运营资质"); |
| | | } else { |
| | | missingItems.add("Operation qualification"); |
| | |
| | | |
| | | if (!missingItems.isEmpty()) { |
| | | String detail; |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | detail = String.join("、", missingItems); |
| | | } else { |
| | | detail = String.join("; ", missingItems); |
| | |
| | | && vehicle.getQualificationExpireTime() != null; |
| | | } |
| | | |
| | | /** |
| | | * 检查车辆是否有任意一项证件过期(精确到日期) |
| | | * - 精确度:yyyy-MM-dd(只比较日期部分) |
| | | * - 到期日期等于今天不算过期(使用 isBefore) |
| | | * @param vehicle 车辆信息 |
| | | * @param today 今天日期 |
| | | */ |
| | | private boolean isAnyDateExpired(XpVehicle vehicle, LocalDate today) { |
| | | // 年检到期时间检查:已过期 |
| | | if (vehicle.getAnnualInspectionDate() != null |
| | | && vehicle.getAnnualInspectionDate().toLocalDate().isBefore(today)) { |
| | | return true; |
| | | } |
| | | // 保险到期时间检查:已过期 |
| | | if (vehicle.getInsuranceEndTime() != null |
| | | && vehicle.getInsuranceEndTime().toLocalDate().isBefore(today)) { |
| | | return true; |
| | | } |
| | | // 运营资质到期时间检查:已过期 |
| | | if (vehicle.getQualificationExpireTime() != null |
| | | && vehicle.getQualificationExpireTime().toLocalDate().isBefore(today)) { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void batchOperation(String idStr) { |
| | |
| | | List<String> ids = Arrays.asList(idStr.split(",")); |
| | | // 查询车辆完整信息 |
| | | List<XpVehicle> vehicles = this.listByIds(ids); |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | LocalDate now = LocalDate.now(); |
| | | List<String> errorMessages = new ArrayList<>(); |
| | | |
| | | for (XpVehicle vehicle : vehicles) { |
| | |
| | | |
| | | // 校验状态为待运营 |
| | | if (!Integer.valueOf(2).equals(vehicle.getStatus())) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | reasons.add("状态非待运营"); |
| | | } else { |
| | | reasons.add("Status is not 'Pending Operation'"); |
| | | } |
| | | } |
| | | // 校验年检到期时间 |
| | | if (vehicle.getAnnualInspectionDate() == null || vehicle.getAnnualInspectionDate().isBefore(now)) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if (vehicle.getAnnualInspectionDate() == null || vehicle.getAnnualInspectionDate().toLocalDate().isBefore(now)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | reasons.add("年检已过期"); |
| | | } else { |
| | | reasons.add("Annual inspection has expired"); |
| | | } |
| | | } |
| | | // 校验保险到期时间 |
| | | if (vehicle.getInsuranceEndTime() == null || vehicle.getInsuranceEndTime().isBefore(now)) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if (vehicle.getInsuranceEndTime() == null || vehicle.getInsuranceEndTime().toLocalDate().isBefore(now)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | reasons.add("保险已过期"); |
| | | } else { |
| | | reasons.add("Insurance has expired"); |
| | | } |
| | | } |
| | | // 校验运营资质到期时间 |
| | | if (vehicle.getQualificationExpireTime() == null || vehicle.getQualificationExpireTime().isBefore(now)) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if (vehicle.getQualificationExpireTime() == null || vehicle.getQualificationExpireTime().toLocalDate().isBefore(now)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | reasons.add("运营资质已过期"); |
| | | } else { |
| | | reasons.add("Operation qualification has expired"); |
| | | } |
| | | } |
| | | if (!reasons.isEmpty()) { |
| | | if (locale.equals(Locale.CHINESE)) { |
| | | if ("zh".equals(locale.getLanguage())) { |
| | | errorMessages.add("车辆[" + vehicle.getPlateNumber() + "]:" + String.join("、", reasons)); |
| | | } else { |
| | | errorMessages.add("Vehicles [" + vehicle.getPlateNumber() + "]: " + String.join("; ", reasons)); |
| | |
| | | public PageInfo<XpVehicle> vehiclePageList(VehiclePageQuery query) { |
| | | PageInfo<XpVehicle> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); |
| | | List<XpVehicle> list = this.baseMapper.vehiclePageList(pageInfo, query); |
| | | |
| | | if (CollUtil.isNotEmpty(list)) { |
| | | LocalDate today = LocalDate.now(); |
| | | List<Long> expiredVehicleIds = new ArrayList<>(); |
| | | |
| | | for (XpVehicle vehicle : list) { |
| | | // 检查是否有任意一项过期(精确到 yyyy-MM-dd) |
| | | boolean isExpired = isAnyDateExpired(vehicle, today); |
| | | |
| | | if (isExpired && !Integer.valueOf(3).equals(vehicle.getStatus())) { |
| | | // 记录需要更新状态的车辆ID |
| | | expiredVehicleIds.add(vehicle.getId()); |
| | | // 同时更新返回结果中的状态 |
| | | vehicle.setStatus(3); |
| | | } |
| | | } |
| | | |
| | | // 批量更新过期车辆状态到数据库 |
| | | if (CollUtil.isNotEmpty(expiredVehicleIds)) { |
| | | LambdaUpdateWrapper<XpVehicle> updateWrapper = new LambdaUpdateWrapper<>(); |
| | | updateWrapper.in(XpVehicle::getId, expiredVehicleIds) |
| | | .set(XpVehicle::getStatus, 3); |
| | | this.update(updateWrapper); |
| | | } |
| | | } |
| | | |
| | | pageInfo.setRecords(list); |
| | | return pageInfo; |
| | | } |