package com.zteits.park.job.datahub; 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.domain.HubEnterpriseInfo; import com.zteits.park.domain.HubEnterpriseInfoExample; import com.zteits.park.domain.HubParkingEntranceExit; import com.zteits.park.domain.HubParkingEntranceExitExample; import com.zteits.park.mapper.HubEnterpriseInfoMapper; import com.zteits.park.mapper.HubParkingEntranceExitMapper; import com.jtjt.upload.client.vo.ParkEntracneExitInfoVo; import com.jtjt.upload.client.vo.ParkEntranceExitInfoListVo; import com.zteits.park.util.ParkInfoUtil; 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.*; import java.util.stream.Collectors; /** * 停车场出入口数据推送JOB * @since 2025-08-17 */ @Component public class ParkingEntranceExitPushJob { private static final Logger logger = LoggerFactory.getLogger(ParkingEntranceExitPushJob.class); @Autowired private HubParkingEntranceExitMapper hubParkingEntranceExitMapper; @Autowired private HubEnterpriseInfoMapper hubEnterpriseInfoMapper; @Autowired private HubConfig hubConfig; @Autowired private TokenService tokenService; @XxlJob("ParkingEntranceExitPushJob") 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() { // 查询有效的停车场出入口数据 HubParkingEntranceExitExample example = new HubParkingEntranceExitExample(); example.createCriteria().andDataStatusEqualTo(DataStatusEnum.DATA_STATUS_VALID.value()); List entranceExitList = hubParkingEntranceExitMapper.selectByExample(example); if (CollectionUtils.isEmpty(entranceExitList)) { log("没有需要推送的停车场出入口信息"); return; } // 查询运营单位信息 HubEnterpriseInfoExample enterpriseInfoExample = new HubEnterpriseInfoExample(); enterpriseInfoExample.createCriteria().andDataStatusEqualTo(DataStatusEnum.DATA_STATUS_VALID.value()); List hubEnterpriseInfos = hubEnterpriseInfoMapper.selectByExample(enterpriseInfoExample); if (CollectionUtils.isEmpty(hubEnterpriseInfos)) { log("没有需要推送的运营单位信息"); return; } HubEnterpriseInfo hubEnterpriseInfo = hubEnterpriseInfos.get(0); // 按停车场分组 Map> groupedByPark = entranceExitList.stream() .collect(Collectors.groupingBy(HubParkingEntranceExit::getParkCode)); // 遍历每个停车场的出入口信息 for (Map.Entry> entry : groupedByPark.entrySet()) { String parkCode = entry.getKey(); List list = entry.getValue(); // 构建发送数据 ParkEntracneExitInfoVo vo = new ParkEntracneExitInfoVo(); vo.setBizId(hubEnterpriseInfo.getBizId()); vo.setParkCode(parkCode); // 统计出入口数量 int entranceNum = 0; int exitNum = 0; // 构建列表数据 List voList = new ArrayList<>(); for (HubParkingEntranceExit entranceExit : list) { // 统计出入口数量 if (entranceExit.getEntranceType() != null) { if (entranceExit.getEntranceType() == 1 || entranceExit.getEntranceType() == 3) { entranceNum++; } if (entranceExit.getEntranceType() == 2 || entranceExit.getEntranceType() == 3) { exitNum++; } } // 构建列表项 ParkEntranceExitInfoListVo item = new ParkEntranceExitInfoListVo(); item.setEntranceType(entranceExit.getEntranceType() != null ? entranceExit.getEntranceType() : 0); item.setCrName(entranceExit.getCrName() != null ? entranceExit.getCrName() : ""); item.setCrNo(entranceExit.getCrNo() != null ? entranceExit.getCrNo() : ""); item.setCrRoadName(entranceExit.getCrRoadName() != null ? entranceExit.getCrRoadName() : ""); item.setCrLongitude(entranceExit.getCrLongitude() != null ? entranceExit.getCrLongitude() : ""); item.setCrLatitude(entranceExit.getCrLatitude() != null ? entranceExit.getCrLatitude() : ""); item.setCrPicture(entranceExit.getCrPicture() != null ? entranceExit.getCrPicture() : ""); voList.add(item); } vo.setEntranceNum(entranceNum); vo.setExitNum(exitNum); vo.setList(voList); vo.setSentTime(LocalDateTime.now()); // 发送数据 int code = ParkInfoUtil.getSingleInstance().sendEntracneExitInfo(hubConfig.getUrlPrefix(), tokenService.getToken(false), vo); if (code == 401) { // 重新刷新token,再次尝试发送 ParkInfoUtil.getSingleInstance().sendEntracneExitInfo(hubConfig.getUrlPrefix(), tokenService.getToken(true), vo); } } } private void log(String msg) { XxlJobHelper.log(msg); logger.info(msg); } }