package com.supwisdom.dlpay.framework.core;
import com.supwisdom.dlpay.framework.domain.TSettleLog;
-import com.supwisdom.dlpay.framework.domain.TTaskLock;
import com.supwisdom.dlpay.framework.service.DayendSettleService;
-import com.supwisdom.dlpay.framework.service.SystemUtilService;
import com.supwisdom.dlpay.framework.util.StringUtil;
+import net.javacrumbs.shedlock.core.SchedulerLock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@Component
public class DayendSettleTask {
- @Autowired
- private SystemUtilService systemUtilService;
@Autowired
private DayendSettleService dayendSettleService;
private static final Logger logger = LoggerFactory.getLogger(DayendSettleTask.class);
- @Scheduled(cron="${dayend.settletask.cron}")
+ @Scheduled(cron = "${dayend.settletask.cron}")
+ @SchedulerLock(name = "DayendSettleTask")
public void doSettleTask() {
if (logger.isDebugEnabled()) logger.debug("进入日结算任务!");
-
- TTaskLock lock = null;
+ settleLog = dayendSettleService.doCreateSettleLog(); //记录日志
try {
- try {
- lock = systemUtilService.doLockTask("DAYENDSETTLETASK", 30, "日终结算");
- if (lock == null) {
- if (logger.isDebugEnabled()) logger.debug("日终结算正在其他服务器上执行");
- return;
- }
- } catch (Exception e) {
- return;
- }
-
- settleLog = dayendSettleService.doCreateSettleLog(); //记录日志
-
//step1: 账户校验(fixme: 清算任务?)
long t1 = System.currentTimeMillis();
if (!checkAccounts()) {
} catch (Exception e) {
logger.error("日终结算报错:" + (!StringUtil.isEmpty(e.getMessage()) ? e.getMessage() : e.getClass().getName()));
e.printStackTrace();
- } finally {
- if (null != lock) {
- lock.setTaskstatus(0);
- lock.setTasktime(systemUtilService.getSysdatetime().getHostdatetime());
- systemUtilService.updateTaskLock(lock);
- }
}
}
@Repository
public interface TaskLockDao extends JpaRepository<TTaskLock, String> {
- @Lock(LockModeType.PESSIMISTIC_WRITE)
- @Query("select a from TTaskLock a where a.taskcode=:taskcode")
- TTaskLock getTaskLockWithLock(@Param("taskcode") String taskcode);
-
//================= database=Oracle =================//
@Query(value = "select to_char(sysdate,'yyyymmdd') as hostdate,to_char(sysdate,'hh24miss') as hosttime,to_char(sysdate,'yyyymmddhh24miss') as hostdatetime, sysdate from dual", nativeQuery = true)
SystemDateTime getOracleDatetime();
@Transactional
SystemDateTime getSysdatetime();
- /**
- * 更新任务表
- */
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
- TTaskLock updateTaskLock(TTaskLock lock);
-
- /**
- * 取任务表
- */
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
- TTaskLock doLockTask(String taskcode, Integer minRecover, String remark);
-
/**
* 获取记账日期
*/
}
}
- @Override
- public TTaskLock updateTaskLock(TTaskLock lock) {
- return taskLockDao.save(lock);
- }
-
- @Override
- public TTaskLock doLockTask(String taskcode, Integer minRecover, String remark) {
- if (null == minRecover) minRecover = 10; //默认10分钟
- String hostdatetime = getSysdatetime().getHostdatetime(); //yyyyMMddHHmmss
- TTaskLock lock = taskLockDao.getTaskLockWithLock(taskcode);
- if (lock != null) {
- if (lock.getTaskstatus() == 1 && DateUtil.compareDatetime(DateUtil.getNewTime(hostdatetime, -60 * minRecover), lock.getTasktime()) < 0) {
- // 被锁,正在执行操作
- return null;
- } else {
- lock.setTaskstatus(1);
- lock.setTasktime(hostdatetime);
- taskLockDao.save(lock);
- return lock;
- }
- } else {
- lock = new TTaskLock();
- lock.setTaskcode(taskcode);
- lock.setTaskstatus(1);
- lock.setTasktime(hostdatetime);
- lock.setRemark(remark);
- taskLockDao.save(lock);
- }
- return lock;
- }
-
@Override
public String getAccdate() {
String hostdate = getSysdatetime().getHostdate();
import com.supwisdom.dlpay.api.service.ConsumePayService
import com.supwisdom.dlpay.api.service.DtlQueryResultService
import com.supwisdom.dlpay.api.service.TransactionServiceProxy
-import com.supwisdom.dlpay.framework.domain.TTaskLock
import com.supwisdom.dlpay.framework.service.SystemUtilService
import com.supwisdom.dlpay.framework.util.ApplicationUtil
import com.supwisdom.dlpay.framework.util.TradeDict