package com.ltkj.web.config.timer;
|
|
import com.ltkj.framework.datasource.DynamicDataSourceContextHolder;
|
import com.ltkj.hosp.domain.TjOrder;
|
import com.ltkj.hosp.mapper.TestMapper;
|
import com.ltkj.hosp.mapper.TjOrderMapper;
|
import com.ltkj.hosp.service.*;
|
import com.ltkj.hosp.sqlDomain.LtkjExamJcbgd;
|
import com.ltkj.hosp.sqlDomain.LtkjExamJcsqd;
|
import com.ltkj.hosp.sqlDomain.LtkjHybgd;
|
import com.ltkj.hosp.sqlDomain.LtkjHysqd;
|
import com.ltkj.system.service.ISysConfigService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.PostConstruct;
|
import javax.annotation.Resource;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.Executors;
|
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.locks.ReentrantLock;
|
|
/**
|
* @Company: 西安路泰科技有限公司
|
* @Author: zjh
|
* @Date: 2024/7/25 15:05
|
*/
|
@Slf4j
|
@Component
|
public class DefaultScheduled {
|
|
|
@Resource
|
private ITjOrderService orderService;
|
@Autowired
|
private ISysConfigService configService;
|
@Resource
|
private LtkjExamJcbgdService jcbgdService;
|
@Resource
|
private LtkjExamJcsqdService jcsqdService;
|
@Resource
|
private LtkjHybgdService ltkjHybgdService;
|
@Resource
|
private LtkjHysqdService ltkjHysqdService;
|
@Resource
|
private TestMapper testMapper;
|
@Resource
|
private TjAsyncService asyncService;
|
|
|
private final ReentrantLock reentrantLock = new ReentrantLock();
|
|
private ScheduledExecutorService scheduledExecutorService;
|
private ScheduledFuture<?> scheduledFuture;
|
private static final SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
@PostConstruct
|
private void init() {
|
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
|
scheduleNextTask(0); // 初次启动立即执行
|
}
|
|
|
private void scheduleNextTask(long delayInMinutes) {
|
if (scheduledFuture != null) {
|
scheduledFuture.cancel(false);
|
}
|
|
Date nextExecutionTime = new Date(System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(delayInMinutes));
|
log.info("下次执行任务时间 -> {}", dateTimeFormat.format(nextExecutionTime));
|
|
scheduledFuture = scheduledExecutorService.schedule(this::exec, delayInMinutes, TimeUnit.MINUTES);
|
}
|
|
private void exec() {
|
log.info("任务开始执行时间 -> {}", dateTimeFormat.format(new Date()));
|
|
String dsrwsjjg = configService.selectConfigByKey("dsrwsjjg");
|
|
boolean lock = reentrantLock.tryLock();
|
try {
|
if (lock) {
|
long start = System.currentTimeMillis();
|
// 查询任务数据
|
log.info("开始执行同步 执行数量->{}", 0);
|
List<String> jy= orderService.getDingShiTongBuJianYanTjNum();
|
|
List<String> jc = orderService.getDingShiTongBuJianChaTjNum();
|
|
if(null !=jy && !jy.isEmpty()){
|
for (String s : jy) {
|
TjOrder order = orderService.getOrderByTjNum(s);
|
extractedjianyan(s,order);
|
}
|
}
|
|
if(null !=jc && !jc.isEmpty()){
|
for (String s : jc) {
|
TjOrder order = orderService.getOrderByTjNum(s);
|
extractedjiancha(s,order);
|
}
|
}
|
Map<String,Object> map=new HashMap<>();
|
testMapper.tjplUpdateDetatilByVi(map);
|
Integer object = (Integer) map.get("total");
|
if(null !=object && object.equals(1)){
|
long end = System.currentTimeMillis();
|
log.info("同步结束 耗时:{}秒", (end - start) / 1000);
|
// 动态获取下次任务的间隔
|
int minute = Integer.parseInt(dsrwsjjg);
|
if (minute < 5) minute = 5;
|
if (minute > 59) minute = 59;
|
scheduleNextTask(minute);
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
scheduleNextTask(Long.parseLong(dsrwsjjg));
|
reentrantLock.unlock();
|
}
|
}
|
|
private void extractedjianyan(String s,TjOrder order) {
|
List<LtkjHysqd> hysqdList = testMapper.getCcXZxYyLtkjHysqdByLisVi(order.getTjNumber());
|
if(null != hysqdList && !hysqdList.isEmpty()){
|
for (LtkjHysqd hysqd : hysqdList) {
|
LtkjHysqd jybgid = ltkjHysqdService.getLtkjHysqdByTjhAndTmh(hysqd.getTjh(),hysqd.getTmh());
|
if (null != jybgid) {
|
ltkjHysqdService.deletedLtkjHysqdByTjhAndTmh(hysqd.getTjh(),hysqd.getTmh());
|
ltkjHybgdService.deletedLtkjHybgdByTjhAndTmh(hysqd.getTmh());
|
}
|
if (ltkjHysqdService.save(hysqd)) {
|
List<LtkjHybgd> hybgdList = testMapper.getCcXZxYyLtkjHybgdByLisVi(hysqd.getTmh());
|
ltkjHybgdService.saveBatch(hybgdList);
|
}
|
}
|
DynamicDataSourceContextHolder.clearDataSourceType();
|
}
|
// String tjNumber1 = order.getTjNumber();
|
// log.info("查询出来的体检号是: " + tjNumber1);
|
// log.info("传过来的的体检号是: "+ s);
|
// Map<String,Object> map=new HashMap<>();
|
// map.put("tjnum", s);
|
// testMapper.tjUpdateDetatilByVi(map);
|
// asyncService.tjUpdateDetatilByVi(s);
|
// log.info("定时任务存储过程已执行!!!");
|
}
|
|
|
private void extractedjiancha(String s,TjOrder order) {
|
|
List<LtkjExamJcsqd> jcsqdList = testMapper.getCcXZxYyPacsLtkjExamJcsqd(order.getTjNumber());
|
if(null !=jcsqdList && !jcsqdList.isEmpty()){
|
jcsqdService.deletedLtkjJcsqdByTjhAndTmh(order.getCardId());
|
jcbgdService.deletedLtkjJcbgdByTjhAndTmh(order.getCardId());
|
jcsqdService.saveBatch(jcsqdList);
|
List<LtkjExamJcbgd> jcbgdList = testMapper.getCcXZxYyPacsLtkjExamJcbgd(order.getCardId());
|
if(null != jcbgdList && !jcbgdList.isEmpty())jcbgdService.saveBatch(jcbgdList);
|
DynamicDataSourceContextHolder.clearDataSourceType();
|
}
|
// String tjNumber1 = order.getTjNumber();
|
// log.info("查询出来的体检号是: " + tjNumber1);
|
// log.info("传过来的的体检号是: "+ s);
|
// Map<String,Object> map=new HashMap<>();
|
// map.put("tjnum", s);
|
// testMapper.tjUpdateDetatilByVi(map);
|
// log.info("定时任务存储过程已执行!!!");
|
}
|
}
|