package com.zy.acs.manager.core.scheduler; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.acs.charge.ChargeCoreService; import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.common.config.UplinkProperties; import com.zy.acs.manager.core.integrate.wms.FaultReportService; import com.zy.acs.manager.core.integrate.wms.TaskReportService; import com.zy.acs.manager.core.service.ChargeService; import com.zy.acs.manager.core.service.MainLockWrapService; import com.zy.acs.manager.manager.entity.VehFaultRec; import com.zy.acs.manager.manager.enums.VehFaultRecStateType; import com.zy.acs.manager.manager.service.*; import com.zy.acs.manager.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.Instant; import java.time.ZoneId; import java.util.List; @Slf4j @Component public class ReportUpScheduler { private final RedisSupport redis = RedisSupport.defaultRedisSupport; @Autowired private ConfigService configService; @Autowired private VehFaultRecService vehFaultRecService; @Autowired private FaultReportService faultReportService; @Scheduled(cron = "0/3 * * * * ? ") private synchronized void reportFault() { String reportFaultUrl = configService.getVal("reportFaultUrl", String.class); if (Cools.isEmpty(reportFaultUrl)) { return; } List vehFaultRecList = vehFaultRecService.list((new LambdaQueryWrapper().eq(VehFaultRec::getState, VehFaultRecStateType.PENDING).ge(VehFaultRec::getHappenTime, Instant.now().minusSeconds(180).atZone(ZoneId.systemDefault()).toLocalDateTime()))); if (Cools.isEmpty(vehFaultRecList)) { return; } for (VehFaultRec vehFaultRec : vehFaultRecList) { boolean finished = faultReportService.reportFinished(vehFaultRec, reportFaultUrl); if (finished) { vehFaultRec.setState(VehFaultRecStateType.REPORT_SUCCESS.name()); } else { log.error("failed to report vehFaultRec to uplink"); vehFaultRec.setState(VehFaultRecStateType.REPORT_FAILED.name()); } vehFaultRecService.updateById(vehFaultRec); } } }