package com.fzzy.api.timer;
import com.fzzy.api.data.ApiParam;
import com.fzzy.api.entity.ApiConfs;
import com.fzzy.api.service.*;
import com.fzzy.api.utils.ContextUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/**
* @author: andy.jia
* @description: 推送省平台数据定时任务
* @version:
*/
@Slf4j
@Component(PushDataScheduled.BEAN_ID)
public class PushDataScheduled {
public static final String BEAN_ID = "api.pushDataScheduled";
@Autowired
private ApiPushManager apiPushManager;
@Autowired
private ApiCommonService apiCommonService;
/**
* cron = "0 0,30 * * * ? "
*
* 固定時間:0分鐘,30分鐘執行
*/
@Scheduled(cron = "0 0,30 * * * ? ")
public void scheduled() {
log.info("------->>>>>>>>>>系统执行定时推送省平台接口");
List list = apiCommonService.listCacheConf();
if (null == list || list.isEmpty()) return;
Date exeDate = new Date();
for (ApiConfs conf : list) {
exeByConf11(conf, exeDate);
exeByConf99(conf, exeDate);
}
}
/**
* 同步义务数据
*
* @param conf
* @param exeDate
*/
private void exeByConf99(ApiConfs conf, Date exeDate) {
if (null == conf.getPushType99() || conf.getPushType99().equals(ApiConfs.SYNC_PUSH_HAND)) {
log.info("------->>>>>>>>>> 业务接口数据,系统配置为手动模式,取消自动执行");
return;
}
Date start = exeDate;
//是否执行
boolean isExecute = false;
boolean isUpdateStart = false;
//核对天是否匹配
if (conf.getPushDay99().equals(ApiConfs.TIME_ALL)) {
isExecute = true;
} else {
int dayOfWeek = ContextUtil.getDayOfWeek(exeDate);
if (String.valueOf(dayOfWeek).equals(conf.getPushDay99())) {
isExecute = true;
//开始时间提前7天
start = DateUtils.addDays(start, -7);
isUpdateStart = true;
} else {
isExecute = false;
}
}
if (!isExecute) {
log.debug("------->>>>>>>>>> 业务数据推送---时间配置天不匹配");
return;
}
//核对时间是否匹配
if (conf.getPushHour99().equals(ApiConfs.TIME_ALL)) {
isExecute = true;
} else {
int hourOfDay = ContextUtil.getHourOfDay(exeDate);
if (String.valueOf(hourOfDay).equals(conf.getPushHour99())) {
isExecute = true;
if (!isUpdateStart) {
start = DateUtils.addDays(start, -1);
isUpdateStart = true;
}
} else {
isExecute = false;
}
}
if (!isExecute) {
log.debug("------->>>>>>>>>> 基础数据推送---时间配置小时不匹配");
return;
}
//核对时间分钟是否匹配
int minute = ContextUtil.getMinuteOfHour(exeDate);
if (String.valueOf(minute).equals(conf.getPushMinute99())) {
isExecute = true;
if (!isUpdateStart) {
start = DateUtils.addHours(start, -2);
}
} else {
isExecute = false;
}
if (!isExecute) {
log.debug("------->>>>>>>>>> 基础数据推送---时间配置分钟不匹配");
return;
}
log.info("------->>>>>>>>>> 业务数据推送---开始查询相关业务数据进行推送");
ApiParam param = new ApiParam();
param.setPushProtocol(conf.getPushProtocol());
param.setKqdm(conf.getKqdm());
param.setStart(start);
param.setEnd(exeDate);
param.setDeptId(conf.getDeptId());
PushService12 pushService12 = apiPushManager.getPushService12(conf.getPushProtocol());
pushService12.pushData(param);
PushService13 pushService13 = apiPushManager.getPushService13(conf.getPushProtocol());
pushService13.pushData(param);
PushService14 pushService14 = apiPushManager.getPushService14(conf.getPushProtocol());
pushService14.pushData(param);
}
/**
* 推送基础信息
*
* @param conf
* @param exeDate
*/
private void exeByConf11(ApiConfs conf, Date exeDate) {
if (null == conf.getPushType11() || conf.getPushType11().equals(ApiConfs.SYNC_PUSH_HAND)) {
log.info("------->>>>>>>>>> 基础数据推送,系统配置为手动模式,取消自动执行");
return;
}
Date start = exeDate;
//是否执行
boolean isExecute;
boolean isUpdateStart = false;
//核对天是否匹配
if (conf.getPushDay11().equals(ApiConfs.TIME_ALL)) {
isExecute = true;
} else {
int dayOfWeek = ContextUtil.getDayOfWeek(exeDate);
if (String.valueOf(dayOfWeek).equals(conf.getPushDay11())) {
isExecute = true;
//开始时间提前7天
start = DateUtils.addDays(start, -7);
isUpdateStart = true;
} else {
isExecute = false;
}
}
if (!isExecute) {
log.debug("------->>>>>>>>>> 基础数据推送---时间配置天不匹配");
return;
}
//核对时间是否匹配
if (conf.getPushHour11().equals(ApiConfs.TIME_ALL)) {
isExecute = true;
} else {
int hourOfDay = ContextUtil.getHourOfDay(exeDate);
if (String.valueOf(hourOfDay).equals(conf.getPushHour11())) {
isExecute = true;
if (!isUpdateStart) {
start = DateUtils.addDays(start, -1);
isUpdateStart = true;
}
} else {
isExecute = false;
}
}
if (!isExecute) {
log.debug("------->>>>>>>>>> 基础数据推送---时间配置小时不匹配");
return;
}
//核对时间分钟是否匹配
int minute = ContextUtil.getMinuteOfHour(exeDate);
if (String.valueOf(minute).equals(conf.getPushMinute11())) {
isExecute = true;
if (!isUpdateStart) {
start = DateUtils.addHours(start, -1);
}
} else {
isExecute = false;
}
if (!isExecute) {
log.debug("------->>>>>>>>>> 基础数据推送---时间配置分钟不匹配");
return;
}
log.info("------->>>>>>>>>> 基础数据推送---开始查询相关基础数据进行推送");
ApiParam param = new ApiParam();
param.setPushProtocol(conf.getPushProtocol());
param.setKqdm(conf.getKqdm());
param.setStart(start);
param.setEnd(exeDate);
param.setDeptId(conf.getDeptId());
PushService11 pushService11 = apiPushManager.getPushService11(conf.getPushProtocol());
pushService11.pushData(param);
}
}