package com.zteits.park.job.datahub; import com.jtjt.upload.client.vo.ParkFreeVO; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import com.zteits.clouds.api.apibase.constants.DataStatusEnum; import com.zteits.park.dao.ParkFreeBerthDao; import com.zteits.park.domain.HubEnterpriseInfo; import com.zteits.park.domain.HubEnterpriseInfoExample; import com.zteits.park.domain.HubParkingInfoBO; import com.zteits.park.domain.ParkFreeBerth; import com.zteits.park.mapper.HubEnterpriseInfoMapper; import com.zteits.park.mapper.smapper.HubParkingInfoSMapper; import com.zteits.park.util.ParkInfoUtil; import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 空闲车位空闲车位数据推送JOB * @since 2025-08-17 */ @Component public class FreeBerthsPushJob { private static final Logger logger = LoggerFactory.getLogger(FreeBerthsPushJob.class); @Autowired private HubParkingInfoSMapper hubParkingInfoSMapper; @Autowired private HubConfig hubConfig; @Autowired private ParkFreeBerthDao parkFreeBerthDao; @Autowired private TokenService tokenService; @XxlJob("FreeBerthsPushJob") public ReturnT execute() { log("开始推送空闲车位信息JOB"); try{ this.pushData(); } catch (Exception e){ logger.error("推送空闲车位信息JOB异常:"+e.getMessage(),e); log("推送空闲车位信息JOB异常:"+e.getMessage()); } return ReturnT.SUCCESS; } private void pushData() { List hubParkingInfoList = hubParkingInfoSMapper.selectList(null); if (CollectionUtils.isEmpty(hubParkingInfoList)) { log("没有需要推送的空闲车位信息"); } // 获取到停车场编码集合 List parkCodeList = hubParkingInfoList.stream().map(HubParkingInfoBO::getParkCode).collect(Collectors.toList()); // 查询空闲车位 List parkFreeBerths = parkFreeBerthDao.queryFreeBerthByPlno(parkCodeList); // 转换为map,key为停车场编码,value为停车场空闲车位数 Map freeBerthMap = parkFreeBerths.stream().collect(Collectors.toMap(ParkFreeBerth::getPlNo, ParkFreeBerth::getFreeBerth)); for (HubParkingInfoBO hubParkingInfo : hubParkingInfoList) { // 发送空闲车位信息 ParkFreeVO parkFree = new ParkFreeVO(); parkFree.setParkCode(hubParkingInfo.getParkCode()); parkFree.setParkName(hubParkingInfo.getParkName()); parkFree.setBerths(hubParkingInfo.getBerths()); Integer freeBerthNum = freeBerthMap.get(hubParkingInfo.getParkCode()); freeBerthNum = freeBerthNum == null ? 0 : (freeBerthNum < 0 ? 0 : freeBerthNum); parkFree.setFreeBerths(Math.min(parkFree.getBerths(), freeBerthNum)); parkFree.setSentDateTime(LocalDateTime.now()); Pair sendParkFree = ParkInfoUtil.getSingleInstance().sendParkFree(hubConfig.getUrlPrefix(), tokenService.getToken(false), parkFree); int code = sendParkFree.getLeft(); if (code == 401) { // 重新刷新token,再次尝试发送 sendParkFree = ParkInfoUtil.getSingleInstance().sendParkFree(hubConfig.getUrlPrefix(), tokenService.getToken(true), parkFree); } if (sendParkFree.getLeft() != 200) { log("ParkingChargingPilePushJob.pushParkFreeData error:" + sendParkFree.getRight()); } else { log("ParkingChargingPilePushJob.pushParkFreeData success:" + sendParkFree.getRight()); } } } private void log(String msg){ XxlJobHelper.log(msg); logger.info(msg); } }