Commit 377f02ed by zhaoyang

删除QUARTZJOB

parent a1ec79b6
...@@ -32,9 +32,6 @@ public class QuartzScheduler { ...@@ -32,9 +32,6 @@ public class QuartzScheduler {
@Qualifier("quartzDataSource") @Qualifier("quartzDataSource")
private DataSource dataSource; private DataSource dataSource;
@Autowired
private AbssqrJobCollector jobScheduler;
@Bean @Bean
public SchedulerFactoryBean schedulerFactoryBean() throws IOException { public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean(); SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
......
/**
* abssqr.com Inc.
* Copyright (c) 2017-2019 All Rights Reserved.
*/
package com.abssqr.plat.biz.shared.scheduler.job.acct;
import com.abssqr.plat.biz.shared.scheduler.BaseQuartzJob;
import com.abssqr.plat.core.service.accounting.OrgAcctDayComponent;
import com.general.system.common.util.LogUtil;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.PersistJobDataAfterExecution;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* 会计日切换定时任务调度
* @author bangis.wangdf
* @version com.abssqr.plat.biz.shared.scheduler.job.acctday: AcctDaySwitchJob.java, v 0.1 2019-12-11 11:07 bangis
* .wangdf Exp $
*/
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
@Component
public class AcctDaySwitchJob extends BaseQuartzJob {
/**
* 每天 0 1/5 * * * ?
*/
@Value("${sync.quartz.acctday.switch:0 1/5 * * * ?}")
private String cron;
@Autowired
private OrgAcctDayComponent orgAcctDayComponent;
@Override
protected String getCronExpr() {
return cron;
}
@Override
protected void doExecute() {
LogUtil.info(LOGGER, "会计日切换任务执行");
orgAcctDayComponent.acctDaySwitch();
}
}
/**
* abssqr.com Inc.
* Copyright (c) 2017-2019 All Rights Reserved.
*/
package com.abssqr.plat.biz.shared.scheduler.job.keeper;
import com.abssqr.plat.biz.shared.scheduler.BaseQuartzJob;
import com.general.system.common.util.LogUtil;
import com.general.system.common.util.SystemDateUtil;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.PersistJobDataAfterExecution;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* 任务监控 异常通知
* @author hanfei
* @version $Id: AbssqrJobKeeper.java, v 0.1 2019-07-26 1:06 PM hanfei Exp $
*/
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
@Component
public class AbssqrKeeperJob extends BaseQuartzJob {
@Autowired
private JobKeeperHandler jobKeeperHandler;
/**
* 间隔5分钟监控 执行情况
*/
@Value("${sync.quartz.plan.keeper}")
private String cron;
@Override
protected String getCronExpr() {
return cron;
}
@Override
protected boolean isRequestRecovery() {
return true;
}
@Override
protected void doExecute() {
LogUtil.info(LOGGER, "任务监控 总执行器" );
// 执行任务监控执行器
jobKeeperHandler.execute(SystemDateUtil.getSystemDate());
}
}
/**
* abssqr.com Inc.
* Copyright (c) 2017-2019 All Rights Reserved.
*/
package com.abssqr.plat.biz.shared.scheduler.job.keeper;
import com.abssqr.plat.biz.shared.scheduler.job.keeper.node.AbstractKeeperNode;
import com.general.system.common.util.LogUtil;
import com.general.system.util.adapter.pipeline.AbstractMultiplePipeline;
import com.google.common.collect.Lists;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* 任务监控器执行链
*
* @author hanfei
* @version $Id: JobKeeperExecute.java, v 0.1 2019-07-26 2:32 PM hanfei Exp $
*/
@Component
public class JobKeeperHandler extends AbstractMultiplePipeline<Date> {
protected final Logger LOGGER = LoggerFactory.getLogger(getClass());
@Autowired(required = false)
private AbstractKeeperNode[] abstractKeeperNodes;
@Override
public void initHandlers() {
LogUtil.info(LOGGER, "任务监控 总执行器" );
super.setHandlers(Lists.newArrayList(abstractKeeperNodes));
}
}
/**
* abssqr.com Inc.
* Copyright (c) 2017-2019 All Rights Reserved.
*/
package com.abssqr.plat.biz.shared.scheduler.job.keeper.node;
import com.abssqr.plat.common.facade.model.plan.PlanBase;
import com.abssqr.plat.common.model.domain.job.JobControl;
import com.abssqr.plat.common.model.exception.AbssqrBizException;
import com.abssqr.plat.common.model.repo.job.JobControlRepository;
import com.abssqr.plat.core.service.accounting.OrgAcctDayComponent;
import com.abssqr.plat.core.service.notice.AbssqrNoticeManager;
import com.general.system.common.model.IEnum;
import com.general.system.util.adapter.pipeline.AbstractMultiplePipelineNode;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import java.util.Set;
/**
* 任务监控执行器节点 基类
*
* @author hanfei
* @version $Id: AbstractKeeperNode.java, v 0.1 2019-07-26 2:55 PM hanfei Exp $
*/
public abstract class AbstractKeeperNode extends AbstractMultiplePipelineNode<Date> {
protected final Logger LOGGER = LoggerFactory.getLogger(getClass());
@Autowired
private JobControlRepository jobControlRepository;
@Autowired
protected AbssqrNoticeManager abssqrNoticeManager;
@Autowired
protected OrgAcctDayComponent orgAcctDayComponent;
/**
* 执行次数
*/
protected Long execTimes = 1L;
@Override
protected Void handle(Date systemDate) {
if (this.judge(getWatchJob())){
doHandle(systemDate);
}
return null;
}
/**
* 判断监控job是否启用
* @param watchJob
* @return
*/
private boolean judge(String watchJob) {
if (StringUtils.isNotBlank(watchJob)){
JobControl jobControl = jobControlRepository.selectByJobName(watchJob);
if (jobControl.getIsEff().isYes()){
return true;
}
return false;
}
return true;
}
public void sendBussinessNotice(PlanBase planEntity,
String bizCode, String content, Set<String> receivers) {
abssqrNoticeManager.sendBusinessNotice(planEntity, bizCode, getBizType(), content, receivers);
}
public void sendSystemNotice(String bizTitle,
String bizCode, String content, Set<String> receivers) {
abssqrNoticeManager.sendSystemNotice(bizTitle, bizCode, getBizType(), content, receivers);
}
public Set<String> getAdminReceivers() {
return abssqrNoticeManager.getAdminReceivers();
}
/**
* 获取指定时间
* @param currentTime
* @param deadline y M d h m s/h m s
* @return
*/
protected Date getDeadLineTime(Date currentTime, String deadline) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(currentTime);
String[] times = deadline.split(" ");
if (times.length == 6) {
calendar.set(Calendar.YEAR, Integer.valueOf(times[0]));
calendar.set(Calendar.MONTH, Integer.valueOf(times[1]) - 1);
calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(times[2]));
calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(times[3]));
calendar.set(Calendar.MINUTE, Integer.valueOf(times[4]));
calendar.set(Calendar.SECOND, Integer.valueOf(times[5]));
} else if (times.length == 3) {
calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(times[0]));
calendar.set(Calendar.MINUTE, Integer.valueOf(times[1]));
calendar.set(Calendar.SECOND, Integer.valueOf(times[2]));
} else {
throw new AbssqrBizException("deadline格式不正确");
}
return calendar.getTime();
}
/**
* 获取当前的标准日期
* @return
*/
public Date getCurrentStanderDate(){
return Date.from(LocalDate.now()
.atStartOfDay(ZoneId.systemDefault())
.toInstant());
}
protected abstract IEnum getBizType();
protected abstract String getWatchJob();
protected abstract Void doHandle(Date date);
}
package com.abssqr.plat.biz.shared.scheduler.job.keeper.node;
import com.abssqr.plat.common.facade.enums.AbssqrNoticeTypeEnum;
import com.abssqr.plat.common.facade.enums.PlanTaskTypeEnum;
import com.abssqr.plat.common.facade.enums.SyncTaskTypeEnum;
import com.abssqr.plat.common.facade.enums.TaskStatusEnum;
import com.abssqr.plat.common.facade.model.plan.PlanBase;
import com.abssqr.plat.common.model.domain.plan.PlanTaskLog;
import com.abssqr.plat.common.model.domain.task.ctr.AstSyncTaskCtrLog;
import com.abssqr.plat.common.model.enums.OrgCodeEnum;
import com.abssqr.plat.common.model.enums.OrgTypeEnum;
import com.abssqr.plat.common.model.repo.plan.PlanTaskLogRepo;
import com.abssqr.plat.common.model.repo.task.AstSyncTaskCtrRepo;
import com.general.system.common.model.IEnum;
import com.general.system.common.util.LogUtil;
import com.general.system.common.util.SystemDateUtil;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 模型转换完成通知
*/
@Component
public class AstModCompleteCheckKeeper extends AbstractKeeperNode {
@Autowired
PlanTaskLogRepo planTaskLogRepo;
@Autowired
AstSyncTaskCtrRepo astSyncTaskCtrRepo;
@Override
protected Void doHandle(Date date) {
for (OrgCodeEnum orgCodeEnum : OrgCodeEnum.values()) {
if (orgCodeEnum.getType() == OrgTypeEnum.ABS) {
continue;
}
LogUtil.info(LOGGER, "模型转换完成监控-start");
Date execDate = orgAcctDayComponent.getTrfAcctDay().getStandardDate();
List<PlanTaskLog> tasks = planTaskLogRepo.getTasks(execDate, PlanTaskTypeEnum.AST_MOD_COMPLETE_CHECK);
List<String> orgCodes = tasks.stream().map(PlanTaskLog::getPlanNo).collect(Collectors.toList());
if (CollectionUtils.isEmpty(orgCodes) || !orgCodes.contains(orgCodeEnum.getCode())) {
AstSyncTaskCtrLog lastTaskLog = astSyncTaskCtrRepo.getTaskLogByExecDate(execDate, SyncTaskTypeEnum.AST_MOD, orgCodeEnum
.getCode());
if (lastTaskLog != null) {
//如果同步完成
if (TaskStatusEnum.SUCCESS.getCode().equals(lastTaskLog.getStatus().getCode())) {
PlanTaskLog planTaskLog = new PlanTaskLog();
planTaskLog.setExecDate(execDate);
planTaskLog.setPlanNo(orgCodeEnum.getCode());
planTaskLog.setTaskType(PlanTaskTypeEnum.AST_MOD_COMPLETE_CHECK);
planTaskLogRepo.createTask(planTaskLog);
Set<String> receivers = super.getAdminReceivers();
Date compelteDate = SystemDateUtil.getSystemDate();
PlanBase planBase = new PlanBase();
sendBussinessNotice(planBase, orgCodeEnum.getCode(), buildNoticeMessage(execDate, compelteDate, orgCodeEnum), receivers);
}
}
}
}
LogUtil.info(LOGGER, "模型转换完成监控-end");
return null;
}
private String buildNoticeMessage(Date currDate, Date completeDate, OrgCodeEnum orgCodeEnum) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currAccDateStr = sdf.format(currDate);
String completeDateStr = sdf2.format(completeDate);
StringBuilder sb = new StringBuilder();
sb.append("机构[");
sb.append(orgCodeEnum.getCode());
sb.append("]");
sb.append(currAccDateStr);
sb.append("模型转换任务已完成 完成时间为:");
sb.append(completeDateStr);
return sb.toString();
}
@Override
protected IEnum getBizType() {
return AbssqrNoticeTypeEnum.AstModCompleteCheck;
}
@Override
protected String getWatchJob() {
return "Wk1009AstSyncDispatcher";
}
}
/**
* abssqr.com Inc.
* Copyright (c) 2017-2019 All Rights Reserved.
*/
package com.abssqr.plat.biz.shared.scheduler.job.keeper.node;
import com.abssqr.plat.common.dal.sync.auto.resultmap.MfsFailSyncBill;
import com.abssqr.plat.common.facade.enums.AbssqrNoticeTypeEnum;
import com.abssqr.plat.common.facade.enums.TaskStatusEnum;
import com.abssqr.plat.common.model.wk.repo.WkMfsSyncCtrRepo;
import com.general.system.common.model.IEnum;
import com.general.system.common.util.LogUtil;
import com.general.system.common.util.MessageUtil;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Set;
/**
* 资产同步模型转换 异常监控
*
* @author hanfei
* @version $Id: AstSyncDispatcherKeeper.java, v 0.1 2019-07-26 2:31 PM hanfei Exp $
*/
@Component
public class AstModTransformKeeper extends AbstractKeeperNode {
@Autowired
private WkMfsSyncCtrRepo wkMfsSyncCtrRepo;
@Value("${wkabs.org.zhaolian:1009}")
private String zhaolianOrgCode;
@Override
protected Void doHandle(Date accountDate) {
LogUtil.info(LOGGER, "资产模型转换任务监控-start");
MfsFailSyncBill bill = wkMfsSyncCtrRepo.countFailSyncBill(null, execTimes, Lists.newArrayList(
TaskStatusEnum.INIT.getCode(), TaskStatusEnum.EXECUTING.getCode(),TaskStatusEnum.FAILURE.getCode()));
if (bill != null && bill.getCnt() > 0) {
// 获取用户
String msg = MessageUtil.formatMsg("模型转换异常,异常数量[{0}],最大重试次数[{1}]", bill.getCnt(), bill.getMaxExecTimes());
LogUtil.info(LOGGER, msg);
// 获取用户
Set<String> receivers = super.getAdminReceivers();
sendSystemNotice("资产同步模型转换告警", zhaolianOrgCode, msg, receivers);
}
LogUtil.info(LOGGER, "资产模型转换任务监控-end");
return null;
}
@Override
protected IEnum getBizType() {
return AbssqrNoticeTypeEnum.WkMfsModTransform;
}
@Override
protected String getWatchJob() {
return "Wk1009AstSyncDispatcher";
}
}
/**
* abssqr.com Inc.
* Copyright (c) 2017-2019 All Rights Reserved.
*//*
package com.abssqr.plat.biz.shared.scheduler.job.keeper.node;
import com.abssqr.plat.common.facade.enums.AbssqrNoticeTypeEnum;
import com.abssqr.plat.common.facade.system.HostInfo;
import com.abssqr.plat.core.service.host.HostManager;
import com.general.system.common.model.IEnum;
import com.general.system.common.util.LogUtil;
import com.general.system.common.util.MessageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Set;
*/
/**
* 心跳任务 异常监控
* <p>
* 心跳30分钟执行一次 超过30分钟没有心跳的默认系统挂掉了
*
* @author xiachenxiang
* @version com.abssqr.plat.biz.shared.scheduler.job.keeper.node: HostHeartKeeper.java, v 0.1 2019-09-17 1:59 PM xiachenxiang Exp $
*//*
@Component
public class HostHeartJobKeeper extends AbstractKeeperNode {
@Autowired
private HostManager hostManager;
private static final Integer OVER_TIME = 31;
@Override
protected Void doHandle(Date date) {
LogUtil.info(LOGGER, "心跳任务监控-start");
List<HostInfo> hostInfoList = hostManager.listOvertimeHost(date, OVER_TIME);
if (hostInfoList != null && hostInfoList.size() > 0) {
String msg = MessageUtil.formatMsg("检测到超时主机有[{0}]台,请排查具体原因!", hostInfoList.size());
// 获取用户
Set<String> receivers = super.getAdminReceivers();
super.sendNotice("主机连接超时告警", AbssqrNoticeTypeEnum.HostHeart.getCode(), msg, receivers);
}
LogUtil.info(LOGGER, "心跳任务监控-end");
return null;
}
@Override
protected IEnum getBizType() {
return AbssqrNoticeTypeEnum.HostHeart;
}
@Override
protected String getWatchJob() {
return null;
}
}
*/
/**
* abssqr.com Inc.
* Copyright (c) 2017-2019 All Rights Reserved.
*/
package com.abssqr.plat.biz.shared.scheduler.job.keeper.node;
import cn.hutool.core.date.DateUtil;
import com.abssqr.plat.common.facade.enums.AbssqrNoticeTypeEnum;
import com.abssqr.plat.common.facade.enums.OrgAstStatStatusEnum;
import com.abssqr.plat.common.model.repo.ast.PlanAstStatTaskRepo;
import com.general.system.common.model.IEnum;
import com.general.system.common.util.LogUtil;
import com.general.system.common.util.MessageUtil;
import com.general.system.common.util.SystemDateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Set;
/**
* 放款计划统计任务监控
*
* @author hanfei
* @version $Id: PlanAstStatJobKeeper.java, v 0.1 2019-07-26 2:28 PM hanfei Exp $
*/
@Component
public class PlanAstStatJobKeeper extends AbstractKeeperNode {
@Autowired
private PlanAstStatTaskRepo planAstStatTaskRepo;
@Override
protected Void doHandle(Date date) {
LogUtil.info(LOGGER, "放款计划统计任务监控-start");
Date currentTime = getCurrentStanderDate();
Date deadLine = DateUtil.offsetMinute(currentTime, -20).toJdkDate();
Long count = planAstStatTaskRepo.countByStatusAndTime(deadLine, OrgAstStatStatusEnum.PROCESS.getCode());
if (count != null && count > 0) {
String msg = MessageUtil.formatMsg("放款计划统计任务告警,有[{0}]个任务超过10分钟未完成,请排查具体原因", count);
// 获取用户
Set<String> receivers = super.getAdminReceivers();
sendSystemNotice("放款计划统计任务告警", "ALL", msg, receivers);
}
LogUtil.info(LOGGER, "放款计划统计任务监控-end");
return null;
}
@Override
public IEnum getBizType() {
return AbssqrNoticeTypeEnum.PlanAstStat;
}
@Override
protected String getWatchJob() {
return "PlanAstStatTaskDispatcher";
}
}
/**
* abssqr.com Inc.
* Copyright (c) 2017-2019 All Rights Reserved.
*//*
package com.abssqr.plat.biz.shared.scheduler.job.keeper.node;
import com.abssqr.plat.biz.shared.scheduler.job.plan.PlanDailyJob;
import com.abssqr.plat.common.facade.enums.AbssqrNoticeTypeEnum;
import com.abssqr.plat.common.model.repo.plan.PlanRepo;
import com.general.system.common.model.IEnum;
import com.general.system.common.util.LogUtil;
import com.general.system.common.util.MessageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Set;
*/
/**
* 每日计划任务监控
*
* @author xiachenxiang
* @version com.abssqr.plat.biz.shared.scheduler.job.keeper.node: PlanDailyKeeper.java, v 0.1 2019-09-27 2:04 PM xiachenxiang Exp $
*//*
//@Component
public class PlanDailyKeeper extends AbstractKeeperNode {
@Autowired
private PlanRepo planRepo;
@Value("${wkabs.planDaily.zhaolian.deadline:8 0 0}")
private String deadline;
@Value("${wkabs.org.zhaolian:1009}")
private String zhaolianOrgCode;
@Override
protected IEnum getBizType() {
return AbssqrNoticeTypeEnum.PlanDailyKeeper;
}
@Override
protected String getWatchJob() {
return PlanDailyJob.class.getName();
}
@Override
protected Void doHandle(Date date) {
LogUtil.info(LOGGER, "每日计划任务监控-start");
// 判断是否大于指定时间
Date currentTime = date;
Date deadlineTime = super.getDeadLineTime(currentTime, deadline);
if (currentTime.compareTo(deadlineTime) > 0) {
Date curDate = SystemDayUtil.getDay().getStandardDate();
Long count = planRepo.getFailDailyCount(curDate);
if (count != null && count > 0) {
String msg = MessageUtil.formatMsg("每日计划任务监控到有[{0}]条失败任务,请排查具体原因!", count);
LogUtil.info(LOGGER, msg);
// 获取用户
Set<String> receivers = super.getAdminReceivers();
super.sendSystemNotice("每日计划任务告警", zhaolianOrgCode, msg, receivers);
}
}
LogUtil.info(LOGGER, "每日计划任务监控-end");
return null;
}
}
*/
/**
* abssqr.com Inc.
* Copyright (c) 2017-2019 All Rights Reserved.
*//*
package com.abssqr.plat.biz.shared.scheduler.job.keeper.node;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.abssqr.plat.common.dal.mysql.auto.dao.TrTaskDAO;
import com.abssqr.plat.common.dal.mysql.auto.resultmap.TransferFailTaskStat;
import com.abssqr.plat.common.facade.enums.AbssqrNoticeTypeEnum;
import com.abssqr.plat.common.facade.enums.TaskStatusEnum;
import com.abssqr.plat.common.facade.model.CommonPlanEntity;
import com.abssqr.plat.common.facade.model.plan.PlanBase;
import com.general.system.common.model.IEnum;
import com.general.system.common.util.DateTimeUtil;
import com.general.system.common.util.LogUtil;
import com.general.system.common.util.MessageUtil;
import com.general.system.tool.util.ToolUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Set;
*/
/**
* 资产转让任务监控
*
* @author hanfei
* @version $Id: TransferDispatcherKeeper.java, v 0.1 2019-07-26 2:30 PM hanfei Exp $
*//*
//@Component
public class TransferDispatcherKeeper extends AbstractKeeperNode {
@Autowired
private TrTaskDAO trTaskDAO;
@Value("${wkabs.org.zhaolian:1009}")
private String zhaolianOrgCode;
@Override
protected Void doHandle(Date accountDate) {
LogUtil.info(LOGGER, "资产转让任务监控-start");
Long cnt = trTaskDAO.countFailTrTask(DateUtil.beginOfDay(accountDate), execTimes);
if (cnt != null && cnt > 0) {
String msg = MessageUtil.formatMsg("资产转让任务监控到有[{0}]条失败任务,请排查具体原因!", cnt);
LogUtil.info(LOGGER, msg);
// 获取用户
Set<String> receivers = super.getAdminReceivers();
super.sendSystemNotice("资产转让任务告警", zhaolianOrgCode, msg, receivers);
LogUtil.info(LOGGER, "资产转让任务监控-end");
}
return null;
}
@Override
public IEnum getBizType() {
return AbssqrNoticeTypeEnum.TransferAst;
}
@Override
protected String getWatchJob() {
return "trTaskDispatcher";
}
}
*/
/**
* abssqr.com Inc.
* Copyright (c) 2017-2019 All Rights Reserved.
*/
package com.abssqr.plat.biz.shared.scheduler.job.plan;
import java.util.Date;
import java.util.List;
import com.abssqr.plat.biz.shared.handler.PlanSettleHandler;
import com.abssqr.plat.biz.shared.scheduler.BaseQuartzJob;
import com.abssqr.plat.common.facade.enums.PlanStatusEnum;
import com.abssqr.plat.common.facade.model.plan.PlanBase;
import com.abssqr.plat.common.model.repo.plan.PlanRepo;
import com.abssqr.plat.core.service.accounting.OrgAcctDayComponent;
import com.general.system.bpm.enums.ApproveStatusEnum;
import com.general.system.common.util.DateTimeUtil;
import com.general.system.common.util.LogUtil;
import com.general.system.common.util.VarChecker;
import com.general.system.tool.util.ToolUtil;
import com.google.common.collect.Lists;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.PersistJobDataAfterExecution;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
/**
* 计划资产需求统计任务
*
* @author zhenxuan.luo
* @version com.abssqr.plat.biz.shared.scheduler.job.plan: PlanPackGenJob.java, v 0.1 2019-06-18 21:19 zhenxuan.luo
* Exp $
*/
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
@Component
public class PlanDailyJob extends BaseQuartzJob {
private final static Logger LOGGER = LoggerFactory.getLogger(PlanDailyJob.class);
@Autowired
private PlanSettleHandler planSettleHandler;
@Autowired
private TransactionTemplate transactionTemplate;
@Autowired
private PlanRepo planRepo;
@Autowired
private OrgAcctDayComponent orgAcctDayComponent;
/**
* 每天 45 7/20 * * * ?
*/
@Value("${sync.quartz.plan.daily}")
private String cron;
@Override
protected String getCronExpr() {
return cron;
}
@Override
protected boolean isRequestRecovery() {
return true;
}
@Override
public void doExecute() {
Date curDate = orgAcctDayComponent.getTrfAcctDay().getStandardDate();
LogUtil.info(LOGGER, "[DailyJob]-[{0}]计划每日处理任务start", curDate);
// 查询计划
List<PlanBase> planBaseList = planRepo.getPlansByStatusList(null,
Lists.newArrayList(PlanStatusEnum.ONGOING, PlanStatusEnum.PREPARING));
if (ToolUtil.isEmpty(planBaseList)) {
return;
}
for (PlanBase planEntity : planBaseList) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
try {
//执行计划每日任务
lockEntityAndExecute(curDate, planEntity);
} catch (Exception e) {
LogUtil.error(LOGGER, e, "{0}[{1}]日切获取锁失败", planEntity.getPlanType().getDesc(), planEntity);
}
}
});
}
}
/**
* 计划状态变更
*
* @param curDate
* @param planEntity
* @return
*/
public void lockEntityAndExecute(Date curDate, PlanBase planEntity) {
//顺序不可逆。如果先执行存续期任务可能会漏掉当日变更为存续期的计划
LogUtil.info(LOGGER, "{0}[{1}]日初计划状态变更任务执行", planEntity.getPlanType().getDesc(), planEntity.getPlanNo());
// 承接池计划 加锁
PlanBase planBase = planRepo.lockPlanByNo(planEntity.getPlanNo());
VarChecker.checkNotNull(planBase, "计划查询加锁为空[{0}]", planBase.getPlanNo());
if (PlanStatusEnum.PREPARING == planBase.getStatus()
&& DateTimeUtil.calcDayDiff(curDate, planBase.getBeginDate()) >= 0L
&& planBase.getApproveStatus() == ApproveStatusEnum.PASSED) {
// 变更状态
planBase.setStatus(PlanStatusEnum.ONGOING);
}
// 执行 计划每日业务
this.onGoingPlansTask(curDate, planBase);
// 承接池状态与时间变更
planBase.setLastUpdateDate(curDate);
planRepo.updatePlan(planBase);
}
/**
* 存续期任务
*
* @param curDate
* @param planEntity
*/
private void onGoingPlansTask(Date curDate, PlanBase planEntity) {
if (PlanStatusEnum.ONGOING == planEntity.getStatus()) {
//存续期任务执行
if (planEntity.getLastUpdateDate() != null
&& DateTimeUtil.calcDayDiff(curDate, planEntity.getLastUpdateDate()) <= 0) {
LogUtil.info(LOGGER, "{0}[{1}]最近更新日期为[{2}],跳过执行",
planEntity.getPlanType().getDesc(), planEntity.getPlanNo(),
planEntity.getLastUpdateDate());
return;
}
LogUtil.info(LOGGER, "{0}[{1}]日初任务执行", planEntity.getPlanType().getDesc(), planEntity.getPlanNo());
/**
* 以下执行顺序不能调换
*/
// 结息
planSettleHandler.execute(planEntity, curDate);
}
}
}
\ No newline at end of file
/**
* abssqr.com Inc.
* Copyright (c) 2017-2018 All Rights Reserved.
*/
package com.abssqr.plat.web.controller.job;
//import com.abssqr.plat.biz.shared.scheduler.job.plan.LenderOrgAstClearingOrderJob;
//import com.abssqr.plat.biz.shared.scheduler.job.plan.LenderOrgAstStatJob;
import java.util.List;
import com.abssqr.plat.biz.shared.scheduler.job.plan.PlanDailyJob;
import com.abssqr.plat.common.facade.model.account.Account;
import com.abssqr.plat.common.facade.model.plan.PlanBase;
import com.abssqr.plat.common.facade.service.AccountService;
import com.abssqr.plat.common.model.repo.plan.PlanRepo;
import com.abssqr.plat.common.model.repo.report.PlanReportRepo;
import com.abssqr.plat.common.model.repo.task.AstSyncTaskCtrRepo;
import com.abssqr.plat.core.service.accounting.OrgAcctDayComponent;
import com.abssqr.plat.core.service.plan.PlanManager;
import cn.hutool.core.date.DateUtil;
import com.general.enhanced.controller.annotation.RestJsonController;
import com.general.system.common.model.BaseResult;
import com.general.system.common.util.VarChecker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
* job 手工出发
*
* @author yaphet
* @version com.abssqr.admin.web.controller.product: ProductController.java, v 0.1 2018-03-02 下午3:32 yaphet Exp $
*/
@RestJsonController
public class JobController {
@Autowired
private AstSyncTaskCtrRepo astSyncTaskCtrRepo;
@Autowired
private PlanManager planManager;
@Autowired
private PlanRepo planRepo;
@Autowired
private PlanDailyJob planDailyJob;
@Autowired
private PlanReportRepo planReportRepo;
@Autowired
private AccountService accountService;
@Autowired
private OrgAcctDayComponent orgAcctDayComponent;
/**
* 每日处理
*
* @return
* @description
*/
@RequestMapping(path = "/job/planDailyJob.json", method = RequestMethod.GET)
public BaseResult<Boolean> planDailyJob() {
planDailyJob.doExecute();
return BaseResult.success(null);
}
/**
* 查询账户余额
*
* @return
* @description
*/
@RequestMapping(path = "/acct/balance/all.json", method = RequestMethod.GET)
public List<Account> allBalance() {
return accountService.queryBalance();
}
/**
* 初始化计划 日报基础数据
*
* @param planNo
* @param date
* @return
*/
@RequestMapping(path = "/report/default.json", method = RequestMethod.GET)
public BaseResult<Boolean> initDefaultReport001(@RequestParam String planNo, @RequestParam String date) {
// 校验计划
PlanBase planBase = planManager.getPlanFullByNo(planNo);
VarChecker.checkNotNull(planBase, "错误的计划编号");
// 初始化上一日空值报表基础数据
int cnt = planReportRepo.defaultRPT001Init(planNo, DateUtil.parseDate(date));
return BaseResult.success(cnt);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment