27 changed files with 1167 additions and 371 deletions
@ -0,0 +1,211 @@ |
|||||
|
package com.acupuncture.web.controller.web; |
||||
|
|
||||
|
import cn.hutool.core.bean.BeanUtil; |
||||
|
import cn.hutool.core.collection.CollectionUtil; |
||||
|
import cn.hutool.core.date.DateUtil; |
||||
|
import cn.hutool.core.util.IdUtil; |
||||
|
import com.acupuncture.common.annotation.Anonymous; |
||||
|
import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder; |
||||
|
import com.acupuncture.system.domain.po.FmsFollowupTask; |
||||
|
import com.acupuncture.system.domain.po.FmsPatientQueueRelation; |
||||
|
import com.acupuncture.system.domain.vo.FmsFollowupVo; |
||||
|
import com.acupuncture.system.domain.vo.UmsDataSourceVo; |
||||
|
import com.acupuncture.system.persist.dao.FmsFollowupDao; |
||||
|
import com.acupuncture.system.persist.dao.UmsDataSourceDao; |
||||
|
import com.acupuncture.system.persist.mapper.FmsFollowupTaskMapper; |
||||
|
import com.acupuncture.system.persist.mapper.FmsPatientQueueRelationMapper; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.quartz.TriggerUtils; |
||||
|
import org.quartz.impl.triggers.CronTriggerImpl; |
||||
|
import org.springframework.scheduling.annotation.Scheduled; |
||||
|
import org.springframework.transaction.annotation.Propagation; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Calendar; |
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* @Author zzc |
||||
|
* @Package com.acupuncture.web.controller.web |
||||
|
* @Date 2025/2/13 8:50 |
||||
|
* @description: |
||||
|
*/ |
||||
|
@Slf4j |
||||
|
@Api(tags = "定时任务相关") |
||||
|
@RestController |
||||
|
@RequestMapping("/task") |
||||
|
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) |
||||
|
public class TaskController { |
||||
|
|
||||
|
@Resource |
||||
|
private FmsFollowupDao fmsFollowupDao; |
||||
|
@Resource |
||||
|
private FmsFollowupTaskMapper fmsFollowupTaskMapper; |
||||
|
@Resource |
||||
|
private UmsDataSourceDao umsDataSourceDao; |
||||
|
@Resource |
||||
|
private FmsPatientQueueRelationMapper fmsPatientQueueRelationMapper; |
||||
|
|
||||
|
@ApiOperation("定时任务添加随访工单") |
||||
|
@PostMapping("/task") |
||||
|
// @Scheduled(fixedRate = 10000)
|
||||
|
@Anonymous |
||||
|
public void task() { |
||||
|
// TODO 生成工单第一次生成之后2周的,往后只生成之后一周。第一次随访时间: ( 患者的出院时间 - 7 + 轮次时间) 到 (患者的出院时间 + 7 + 轮次时间 )
|
||||
|
|
||||
|
//查询租户,根据租户循环切换数据源,定时处理所有医院的随访工单
|
||||
|
// UmsDataSourceVo.Result result1 = new UmsDataSourceVo.Result();
|
||||
|
// result1.setDataSourceKey("MASTER");
|
||||
|
// changeDataSource(result1);
|
||||
|
List<UmsDataSourceVo.Result> query = umsDataSourceDao.query(null); |
||||
|
if (CollectionUtil.isEmpty(query)) { |
||||
|
return; |
||||
|
} |
||||
|
//查询公共队列
|
||||
|
List<FmsFollowupVo.FollowupQueueVO> queueResults = fmsFollowupDao.queryCommonQueue(null); |
||||
|
//切换数据源
|
||||
|
for (UmsDataSourceVo.Result result : query) { |
||||
|
if ("MASTER".equals(result.getDataSourceKey())) { |
||||
|
continue; |
||||
|
} |
||||
|
changeDataSource(result); |
||||
|
{ |
||||
|
//获取随访患者列表,根据患者出院日时间和队列添加工单
|
||||
|
//1. 查询队列
|
||||
|
List<FmsFollowupVo.FollowupQueueVO> queueList = fmsFollowupDao.selectQueueList(null, null, null, result.getTenantId()); |
||||
|
|
||||
|
if (CollectionUtil.isEmpty(queueList)) { |
||||
|
queueList = queueResults; |
||||
|
} else { |
||||
|
queueList.addAll(queueResults); |
||||
|
} |
||||
|
for (FmsFollowupVo.FollowupQueueVO followupQueueVO : queueList) { |
||||
|
//2. 查询队列随访患者列表
|
||||
|
List<FmsFollowupVo.FollowupPatient> patientList = fmsFollowupDao.queryPatient(followupQueueVO.getId(), (byte) 0, null, followupQueueVO.getTenantId()); |
||||
|
if (CollectionUtil.isEmpty(patientList)) { |
||||
|
continue; |
||||
|
} |
||||
|
//随访总月数
|
||||
|
Integer followupMonth = followupQueueVO.getFollowupMonth(); |
||||
|
for (FmsFollowupVo.FollowupPatient followupPatient : patientList) { |
||||
|
//获取随访到期时间 出院时间+随访总月数 = 到期时间
|
||||
|
Calendar calendar = Calendar.getInstance(); |
||||
|
calendar.setTime(followupPatient.getDischargeTime()); |
||||
|
calendar.set(Calendar.MONTH, followupMonth); |
||||
|
Date time = calendar.getTime(); |
||||
|
|
||||
|
//获取队列信息
|
||||
|
String frequency = followupQueueVO.getFrequency(); |
||||
|
List<Date> dateList = new ArrayList<>(); |
||||
|
try { |
||||
|
CronTriggerImpl cronTrigger = new CronTriggerImpl(); |
||||
|
cronTrigger.setCronExpression(frequency); |
||||
|
//TriggerUtils.computeFireTimesBetween(要计算触发时间的触发器对象, 用于计算触发时间的日历对象, 计算触发时间的起始时间点, 计算触发时间的结束时间点);
|
||||
|
dateList = TriggerUtils.computeFireTimesBetween(cronTrigger, null, followupPatient.getDischargeTime(), time); |
||||
|
if (CollectionUtil.isEmpty(dateList)) { |
||||
|
continue; |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
//3. 判断随访类型
|
||||
|
if (followupQueueVO.getFollowupType() == 0) { |
||||
|
//单次
|
||||
|
FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); |
||||
|
BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); |
||||
|
fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); |
||||
|
fmsFollowupTask.setName(followupPatient.getName()); |
||||
|
fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); |
||||
|
fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); |
||||
|
fmsFollowupTask.setGender(followupPatient.getGender()); |
||||
|
if (followupPatient.getBirthDate() != null) { |
||||
|
fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); |
||||
|
} |
||||
|
fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); |
||||
|
fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); |
||||
|
fmsFollowupTask.setPhone(followupPatient.getPhone()); |
||||
|
fmsFollowupTask.setTenantId(followupPatient.getTenantId()); |
||||
|
fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); |
||||
|
fmsFollowupTask.setIdCard(followupPatient.getIdCard()); |
||||
|
fmsFollowupTask.setTimes(1); |
||||
|
fmsFollowupTask.setQueueId(followupQueueVO.getId()); |
||||
|
fmsFollowupTask.setPatientId(followupPatient.getId()); |
||||
|
fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); |
||||
|
fmsFollowupTask.setDelFlag((byte) 0); |
||||
|
fmsFollowupTask.setCreateTime(new Date()); |
||||
|
fmsFollowupTask.setStatus((byte) 0); |
||||
|
fmsFollowupTask.setStartTime(dateList.get(0)); |
||||
|
fmsFollowupTask.setEndTime(dateList.get(0)); |
||||
|
fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge()); |
||||
|
fmsFollowupTask.setFollowupTime(dateList.get(0)); |
||||
|
changeDataSource(result); |
||||
|
fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); |
||||
|
|
||||
|
} else { |
||||
|
//周期
|
||||
|
//4. 根据频次和总月数添加
|
||||
|
int i = 0; |
||||
|
for (Date date : dateList) { |
||||
|
i+=1; |
||||
|
//单次
|
||||
|
FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); |
||||
|
BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); |
||||
|
fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); |
||||
|
fmsFollowupTask.setName(followupPatient.getName()); |
||||
|
fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); |
||||
|
fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); |
||||
|
fmsFollowupTask.setGender(followupPatient.getGender()); |
||||
|
if (followupPatient.getBirthDate() != null) { |
||||
|
fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); |
||||
|
} |
||||
|
fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); |
||||
|
fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); |
||||
|
fmsFollowupTask.setTimes(i); |
||||
|
fmsFollowupTask.setPhone(followupPatient.getPhone()); |
||||
|
fmsFollowupTask.setTenantId(followupPatient.getTenantId()); |
||||
|
fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); |
||||
|
fmsFollowupTask.setIdCard(followupPatient.getIdCard()); |
||||
|
fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); |
||||
|
fmsFollowupTask.setQueueId(followupQueueVO.getId()); |
||||
|
fmsFollowupTask.setDelFlag((byte) 0); |
||||
|
fmsFollowupTask.setCreateTime(new Date()); |
||||
|
fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); |
||||
|
fmsFollowupTask.setStatus((byte) 0); |
||||
|
fmsFollowupTask.setStartTime(date); |
||||
|
fmsFollowupTask.setEndTime(date); |
||||
|
fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge()); |
||||
|
fmsFollowupTask.setFollowupTime(date); |
||||
|
changeDataSource(result); |
||||
|
fmsFollowupTask.setPatientId(followupPatient.getId()); |
||||
|
fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); |
||||
|
} |
||||
|
} |
||||
|
changeDataSource(result); |
||||
|
//将患者设置为已生成工单
|
||||
|
FmsPatientQueueRelation fmsPatientQueueRelation = BeanUtil.copyProperties(followupPatient, FmsPatientQueueRelation.class); |
||||
|
fmsPatientQueueRelation.setTaskFlag((byte) 1); |
||||
|
fmsPatientQueueRelation.setPatientId(followupPatient.getId()); |
||||
|
fmsPatientQueueRelationMapper.updateByPrimaryKeySelective(fmsPatientQueueRelation); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private static void changeDataSource(UmsDataSourceVo.Result result) { |
||||
|
try { |
||||
|
DynamicDataSourceContextHolder.setDataSourceType(result.getDataSourceKey()); |
||||
|
}finally { |
||||
|
DynamicDataSourceContextHolder.clearDataSourceType(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -1,329 +1,343 @@ |
|||||
package com.acupuncture.web.task; |
//package com.acupuncture.web.controller.web;
|
||||
|
//
|
||||
import cn.hutool.core.bean.BeanUtil; |
//import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil; |
//import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil; |
//import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil; |
//import cn.hutool.core.util.IdUtil;
|
||||
import com.acupuncture.common.annotation.Anonymous; |
//import com.acupuncture.common.annotation.Anonymous;
|
||||
import com.acupuncture.common.core.redis.RedisCache; |
//import com.acupuncture.common.core.redis.RedisCache;
|
||||
import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder; |
//import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder;
|
||||
import com.acupuncture.system.domain.dto.FmsFollowupDto; |
//import com.acupuncture.system.domain.dto.FmsFollowupDto;
|
||||
import com.acupuncture.system.domain.po.FmsFollowupTask; |
//import com.acupuncture.system.domain.po.FmsFollowupTask;
|
||||
import com.acupuncture.system.domain.po.FmsFollowupTaskExample; |
//import com.acupuncture.system.domain.po.FmsFollowupTaskExample;
|
||||
import com.acupuncture.system.domain.po.FmsPatientQueueRelation; |
//import com.acupuncture.system.domain.po.FmsPatientQueueRelation;
|
||||
import com.acupuncture.system.domain.vo.FmsFollowupVo; |
//import com.acupuncture.system.domain.vo.FmsFollowupVo;
|
||||
import com.acupuncture.system.domain.vo.UmsDataSourceVo; |
//import com.acupuncture.system.domain.vo.UmsDataSourceVo;
|
||||
import com.acupuncture.system.persist.dao.FmsFollowupDao; |
//import com.acupuncture.system.persist.dao.FmsFollowupDao;
|
||||
import com.acupuncture.system.persist.dao.UmsDataSourceDao; |
//import com.acupuncture.system.persist.dao.UmsDataSourceDao;
|
||||
import com.acupuncture.system.persist.mapper.FmsFollowupTaskMapper; |
//import com.acupuncture.system.persist.mapper.FmsFollowupTaskMapper;
|
||||
import com.acupuncture.system.persist.mapper.FmsPatientQueueRelationMapper; |
//import com.acupuncture.system.persist.mapper.FmsPatientQueueRelationMapper;
|
||||
import com.acupuncture.system.service.FmsFollowupQueueService; |
//import com.acupuncture.system.service.FmsFollowupQueueService;
|
||||
import com.acupuncture.system.service.FmsFollowupService; |
//import com.acupuncture.system.service.FmsFollowupService;
|
||||
import io.swagger.annotations.Api; |
//import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation; |
//import io.swagger.annotations.ApiOperation;
|
||||
import lombok.Data; |
//import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j; |
//import lombok.extern.slf4j.Slf4j;
|
||||
import org.quartz.TriggerUtils; |
//import org.apache.catalina.connector.Response;
|
||||
import org.quartz.impl.triggers.CronTriggerImpl; |
//import org.quartz.TriggerUtils;
|
||||
import org.quartz.spi.OperableTrigger; |
//import org.quartz.impl.triggers.CronTriggerImpl;
|
||||
import org.springframework.scheduling.annotation.Scheduled; |
//import org.quartz.spi.OperableTrigger;
|
||||
import org.springframework.transaction.annotation.Propagation; |
//import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.transaction.annotation.Transactional; |
//import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.web.bind.annotation.PostMapping; |
//import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.RequestMapping; |
//import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RestController; |
//import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
//import org.springframework.web.bind.annotation.RestController;
|
||||
import javax.annotation.Resource; |
//
|
||||
import java.util.*; |
//import javax.annotation.Resource;
|
||||
|
//import javax.servlet.http.HttpServletRequest;
|
||||
/** |
//import javax.servlet.http.HttpServletResponse;
|
||||
* @Author zzc |
//import java.util.*;
|
||||
* @Package com.acupuncture.web.controller.web |
//import java.util.regex.Matcher;
|
||||
* @Date 2025/2/13 8:50 |
//import java.util.regex.Pattern;
|
||||
* @description: |
//
|
||||
*/ |
///**
|
||||
@Slf4j |
// * @Author zzc
|
||||
@Api(tags = "定时任务相关") |
// * @Package com.acupuncture.web.controller.web
|
||||
@RestController |
// * @Date 2025/2/13 8:50
|
||||
@RequestMapping("/task") |
// * @description:
|
||||
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) |
// */
|
||||
public class TaskController { |
//@Slf4j
|
||||
|
//@Api(tags = "定时任务相关")
|
||||
@Resource |
//@RestController
|
||||
private FmsFollowupDao fmsFollowupDao; |
//@RequestMapping("/task")
|
||||
@Resource |
//@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
|
||||
private FmsFollowupService fmsFollowupService; |
//public class TaskController {
|
||||
@Resource |
//
|
||||
private FmsFollowupTaskMapper fmsFollowupTaskMapper; |
// @Resource
|
||||
@Resource |
// private FmsFollowupDao fmsFollowupDao;
|
||||
private UmsDataSourceDao umsDataSourceDao; |
// @Resource
|
||||
@Resource |
// private FmsFollowupService fmsFollowupService;
|
||||
private FmsPatientQueueRelationMapper fmsPatientQueueRelationMapper; |
// @Resource
|
||||
@Resource |
// private FmsFollowupTaskMapper fmsFollowupTaskMapper;
|
||||
private RedisCache redisCache; |
// @Resource
|
||||
@Resource |
// private UmsDataSourceDao umsDataSourceDao;
|
||||
private FmsFollowupQueueService fmsFollowupQueueService; |
// @Resource
|
||||
|
// private RedisCache redisCache;
|
||||
@ApiOperation("定时任务添加随访工单") |
// @Resource
|
||||
@PostMapping("/task") |
// private FmsFollowupQueueService fmsFollowupQueueService;
|
||||
@Scheduled(cron = "0 0 0 * * ?") |
//
|
||||
@Anonymous |
// @ApiOperation("定时任务添加随访工单")
|
||||
public void task() { |
// @PostMapping("/task")
|
||||
// TODO 生成工单第一次生成之后2周的,往后只生成之后一周。第一次随访时间: ( 患者的出院时间 - 7 + 轮次时间) 到 (患者的出院时间 + 7 + 轮次时间 )
|
// @Scheduled(fixedDelay = 10000)
|
||||
|
// @Anonymous
|
||||
//查询租户,根据租户循环切换数据源,定时处理所有医院的随访工单
|
// public void task() {
|
||||
// UmsDataSourceVo.Result result1 = new UmsDataSourceVo.Result();
|
// // TODO 生成工单第一次生成之后2周的,往后只生成之后一周。第一次随访时间: ( 患者的出院时间 - 7 + 轮次时间) 到 (患者的出院时间 + 7 + 轮次时间 )
|
||||
// result1.setDataSourceKey("MASTER");
|
// //查询租户,根据租户循环切换数据源,定时处理所有医院的随访工单
|
||||
// changeDataSource(result1);
|
//// UmsDataSourceVo.Result result1 = new UmsDataSourceVo.Result();
|
||||
List<UmsDataSourceVo.Result> query = umsDataSourceDao.query(null); |
//// result1.setDataSourceKey("MASTER");
|
||||
if (CollectionUtil.isEmpty(query)) { |
//// changeDataSource(result1);
|
||||
return; |
//// List<UmsDataSourceVo.Result> query = umsDataSourceDao.query(null);
|
||||
} |
//// if (CollectionUtil.isEmpty(query)) {
|
||||
//查询公共队列
|
//// return;
|
||||
List<Object> queueResults = redisCache.getCacheList("common_followup_queue"); |
//// }
|
||||
List<FmsFollowupVo.FollowupQueueVO> followupQueueVOS = new ArrayList<>(); |
// //查询公共队列
|
||||
if (CollectionUtil.isEmpty(queueResults)) { |
// List<Object> queueResults = redisCache.getCacheList("common_followup_queue");
|
||||
followupQueueVOS = fmsFollowupQueueService.queryCommonQueue(null); |
// List<FmsFollowupVo.FollowupQueueVO> followupQueueVOS = new ArrayList<>();
|
||||
} |
// if (CollectionUtil.isEmpty(queueResults)) {
|
||||
// List<FmsFollowupVo.FollowupQueueVO> queueResults = fmsFollowupDao.queryCommonQueue(null);
|
//
|
||||
//切换数据源
|
// followupQueueVOS = fmsFollowupQueueService.queryCommonQueue(null);
|
||||
for (UmsDataSourceVo.Result result : query) { |
// }
|
||||
if ("MASTER".equals(result.getDataSourceKey()) || "SXYFYY".equals(result.getDataSourceKey())) { |
//// List<FmsFollowupVo.FollowupQueueVO> queueResults = fmsFollowupDao.queryCommonQueue(null);
|
||||
continue; |
// //切换数据源
|
||||
} |
//// for (UmsDataSourceVo.Result result : query) {
|
||||
changeDataSource(result); |
//// if ("MASTER".equals(result.getDataSourceKey()) || "PROD_YY".equals(result.getDataSourceKey())) {
|
||||
{ |
//// continue;
|
||||
//获取随访患者列表,根据患者出院日时间和队列添加工单
|
//// }
|
||||
//1. 查询队列
|
//// changeDataSource(result);
|
||||
List<FmsFollowupVo.FollowupQueueVO> queueList = fmsFollowupDao.selectQueueList(null, null, null, null); |
// {
|
||||
|
// //获取随访患者列表,根据患者出院日时间和队列添加工单
|
||||
if (CollectionUtil.isEmpty(queueList)) { |
// //1. 查询队列
|
||||
if (CollectionUtil.isEmpty(queueResults)) { |
// List<FmsFollowupVo.FollowupQueueVO> queueList = fmsFollowupDao.selectQueueList(null, null, null, null);
|
||||
queueList = followupQueueVOS; |
//
|
||||
} |
// if (CollectionUtil.isEmpty(queueList)) {
|
||||
} else { |
// if (CollectionUtil.isEmpty(queueResults)) {
|
||||
if (CollectionUtil.isEmpty(queueResults)) { |
// queueList = followupQueueVOS;
|
||||
queueList.addAll(followupQueueVOS); |
// }
|
||||
} |
// } else {
|
||||
} |
// if (CollectionUtil.isEmpty(queueResults)) {
|
||||
for (FmsFollowupVo.FollowupQueueVO followupQueueVO : queueList) { |
// queueList.addAll(followupQueueVOS);
|
||||
Integer followWindowAdys = followupQueueVO.getFollowWindowAdys(); |
// }
|
||||
|
// }
|
||||
//2. 查询队列随访患者列表
|
// for (FmsFollowupVo.FollowupQueueVO followupQueueVO : queueList) {
|
||||
// changeDataSource(result);
|
// Integer followWindowAdys = followupQueueVO.getFollowWindowAdys();
|
||||
FmsFollowupDto.FollowupPatientQueryDTO followupPatientQueryDTO = new FmsFollowupDto.FollowupPatientQueryDTO(); |
//
|
||||
followupPatientQueryDTO.setQueueId(followupQueueVO.getId()); |
// //2. 查询队列随访患者列表
|
||||
followupPatientQueryDTO.setTenantId(followupQueueVO.getTenantId()); |
//// changeDataSource(result);
|
||||
changeDataSource(result); |
// FmsFollowupDto.FollowupPatientQueryDTO followupPatientQueryDTO = new FmsFollowupDto.FollowupPatientQueryDTO();
|
||||
|
// followupPatientQueryDTO.setQueueId(followupQueueVO.getId());
|
||||
List<FmsFollowupVo.FollowupPatient> patientList = fmsFollowupService.queryPatient(followupPatientQueryDTO); |
// followupPatientQueryDTO.setTenantId(followupQueueVO.getTenantId());
|
||||
// List<FmsFollowupVo.FollowupPatient> patientList = fmsFollowupDao.queryPatient(followupQueueVO.getId(), null, null);
|
//// changeDataSource(result);
|
||||
if (CollectionUtil.isEmpty(patientList)) { |
// List<FmsFollowupVo.FollowupPatient> patientList = fmsFollowupService.queryTaskPatient(followupPatientQueryDTO);
|
||||
continue; |
//// List<FmsFollowupVo.FollowupPatient> patientList = fmsFollowupDao.queryPatient(followupQueueVO.getId(), null, null);
|
||||
} |
// if (CollectionUtil.isEmpty(patientList)) {
|
||||
//随访总月数
|
// continue;
|
||||
Integer followupMonth = followupQueueVO.getFollowupMonth(); |
// }
|
||||
for (FmsFollowupVo.FollowupPatient followupPatient : patientList) { |
// //随访总月数
|
||||
//获取随访到期时间 出院时间+随访总月数 = 到期时间
|
// Integer followupMonth = followupQueueVO.getFollowupMonth();
|
||||
Calendar calendar = Calendar.getInstance(); |
// for (FmsFollowupVo.FollowupPatient followupPatient : patientList) {
|
||||
calendar.setTime(followupPatient.getDischargeTime()); |
// //获取随访到期时间 出院时间+随访总月数 = 到期时间
|
||||
calendar.set(Calendar.MONTH, followupMonth); |
// Calendar calendar = Calendar.getInstance();
|
||||
Date time = calendar.getTime(); |
// calendar.setTime(followupPatient.getDischargeTime());
|
||||
|
// calendar.set(Calendar.MONTH, followupMonth);
|
||||
//获取队列信息
|
// Date time = calendar.getTime();
|
||||
String frequency = followupQueueVO.getFrequency(); |
//
|
||||
List<Date> dateList = new ArrayList<>(); |
// //获取队列信息
|
||||
try { |
// String frequency = followupQueueVO.getFrequency();
|
||||
CronTriggerImpl cronTrigger = new CronTriggerImpl(); |
// List<Date> dateList = new ArrayList<>();
|
||||
cronTrigger.setCronExpression(frequency); |
// try {
|
||||
//TriggerUtils.computeFireTimesBetween(要计算触发时间的触发器对象, 用于计算触发时间的日历对象, 计算触发时间的起始时间点, 计算触发时间的结束时间点);
|
// CronTriggerImpl cronTrigger = new CronTriggerImpl();
|
||||
dateList = TriggerUtils.computeFireTimesBetween(cronTrigger, null, followupPatient.getDischargeTime(), time); |
// cronTrigger.setCronExpression(frequency);
|
||||
if (CollectionUtil.isEmpty(dateList)) { |
// //TriggerUtils.computeFireTimesBetween(要计算触发时间的触发器对象, 用于计算触发时间的日历对象, 计算触发时间的起始时间点, 计算触发时间的结束时间点);
|
||||
continue; |
// dateList = TriggerUtils.computeFireTimesBetween(cronTrigger, null, followupPatient.getDischargeTime(), time);
|
||||
} |
// if (CollectionUtil.isEmpty(dateList)) {
|
||||
} catch (Exception e) { |
// continue;
|
||||
e.printStackTrace(); |
// }
|
||||
} |
// } catch (Exception e) {
|
||||
//3. 判断随访类型
|
// e.printStackTrace();
|
||||
if (followupQueueVO.getFollowupType() == 0) { |
// }
|
||||
//单次
|
// //3. 判断随访类型
|
||||
|
// if (followupQueueVO.getFollowupType() == 0) {
|
||||
//判断是否已有该次随访
|
// //单次
|
||||
FmsFollowupTaskExample fmsFollowupTaskExample = new FmsFollowupTaskExample(); |
// //判断是否已有该次随访
|
||||
fmsFollowupTaskExample.createCriteria().andTimesEqualTo(1).andPatientIdEqualTo(followupPatient.getPatientId()).andQueueIdEqualTo(followupQueueVO.getId()); |
// FmsFollowupTaskExample fmsFollowupTaskExample = new FmsFollowupTaskExample();
|
||||
List<FmsFollowupTask> fmsFollowupTasks = fmsFollowupTaskMapper.selectByExample(fmsFollowupTaskExample); |
// fmsFollowupTaskExample.createCriteria().andTimesEqualTo(1).andPatientIdEqualTo(followupPatient.getPatientId()).andQueueIdEqualTo(followupQueueVO.getId());
|
||||
if (CollectionUtil.isNotEmpty(fmsFollowupTasks)) { |
// List<FmsFollowupTask> fmsFollowupTasks = fmsFollowupTaskMapper.selectByExample(fmsFollowupTaskExample);
|
||||
continue; |
// if (CollectionUtil.isNotEmpty(fmsFollowupTasks)) {
|
||||
} |
// continue;
|
||||
FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); |
// }
|
||||
BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); |
// FmsFollowupTask fmsFollowupTask = new FmsFollowupTask();
|
||||
fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); |
// BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask);
|
||||
fmsFollowupTask.setName(followupPatient.getName()); |
// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId());
|
||||
fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); |
// fmsFollowupTask.setName(followupPatient.getName());
|
||||
fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); |
// fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull());
|
||||
fmsFollowupTask.setGender(followupPatient.getGender()); |
// fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple());
|
||||
if (followupPatient.getBirthDate() != null) { |
// fmsFollowupTask.setGender(followupPatient.getGender());
|
||||
fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); |
// if (followupPatient.getBirthDate() != null) {
|
||||
} |
// fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date()));
|
||||
fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); |
// }
|
||||
fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); |
// fmsFollowupTask.setEthnicity(followupPatient.getEthnicity());
|
||||
fmsFollowupTask.setPhone(followupPatient.getPhone()); |
// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears());
|
||||
fmsFollowupTask.setTenantId(followupPatient.getTenantId()); |
// fmsFollowupTask.setPhone(followupPatient.getPhone());
|
||||
fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); |
// fmsFollowupTask.setTenantId(followupPatient.getTenantId());
|
||||
fmsFollowupTask.setIdCard(followupPatient.getIdCard()); |
// fmsFollowupTask.setIdCardType(followupPatient.getIdCardType());
|
||||
fmsFollowupTask.setTimes(1); |
// fmsFollowupTask.setIdCard(followupPatient.getIdCard());
|
||||
fmsFollowupTask.setQueueId(followupQueueVO.getId()); |
// fmsFollowupTask.setTimes(1);
|
||||
fmsFollowupTask.setPatientId(followupPatient.getId()); |
// fmsFollowupTask.setQueueId(followupQueueVO.getId());
|
||||
fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); |
// fmsFollowupTask.setPatientId(followupPatient.getId());
|
||||
fmsFollowupTask.setDelFlag((byte) 0); |
// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears());
|
||||
fmsFollowupTask.setCreateTime(new Date()); |
// fmsFollowupTask.setDelFlag((byte) 0);
|
||||
fmsFollowupTask.setStatus((byte) 0); |
// fmsFollowupTask.setCreateTime(new Date());
|
||||
|
// fmsFollowupTask.setStatus((byte) 0);
|
||||
//计算第一次随访的时间
|
//
|
||||
DateComparator dateComparator = getDate(dateList); |
// //计算第一次随访的时间
|
||||
if (dateComparator.getDate() != null) { |
// DateComparator dateComparator = getDate(dateList);
|
||||
fmsFollowupTask.setStartTime(dateComparator.getDate()); |
// if (dateComparator.getDate() != null) {
|
||||
}else { |
// fmsFollowupTask.setStartTime(dateComparator.getDate());
|
||||
Calendar instance = Calendar.getInstance(); |
// } else {
|
||||
instance.setTime(dateList.get(0)); |
// Calendar instance = Calendar.getInstance();
|
||||
instance.add(Calendar.DATE, -followWindowAdys / 2); |
// instance.setTime(dateList.get(0));
|
||||
fmsFollowupTask.setStartTime(instance.getTime()); |
// instance.add(Calendar.DATE, -followWindowAdys / 2);
|
||||
} |
// fmsFollowupTask.setStartTime(instance.getTime());
|
||||
Calendar instance1 = Calendar.getInstance(); |
// }
|
||||
instance1.setTime(dateList.get(0)); |
// Calendar instance1 = Calendar.getInstance();
|
||||
instance1.add(Calendar.DATE, followWindowAdys / 2); |
// instance1.setTime(dateList.get(0));
|
||||
fmsFollowupTask.setEndTime(instance1.getTime()); |
// instance1.add(Calendar.DATE, followWindowAdys / 2);
|
||||
fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge()); |
// fmsFollowupTask.setEndTime(instance1.getTime());
|
||||
fmsFollowupTask.setFollowupTime(dateList.get(0)); |
// fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge());
|
||||
changeDataSource(result); |
// fmsFollowupTask.setFollowupTime(dateList.get(0));
|
||||
fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); |
//// changeDataSource(result);
|
||||
|
// fmsFollowupTaskMapper.insertSelective(fmsFollowupTask);
|
||||
} else { |
//
|
||||
//周期
|
// } else {
|
||||
//4. 根据频次和总月数添加
|
// //周期
|
||||
DateComparator dateComparator = getDate(dateList); |
// //4. 根据频次和总月数添加
|
||||
if (dateComparator.getDate() == null || dateComparator.getIndex() == null) { |
// DateComparator dateComparator = getDate(dateList);
|
||||
continue; |
// if (dateComparator.getDate() == null || dateComparator.getIndex() == null) {
|
||||
} |
// continue;
|
||||
Date date = dateComparator.getDate(); |
// }
|
||||
Integer index = dateComparator.getIndex(); |
// Date date = dateComparator.getDate();
|
||||
|
// Integer index = dateComparator.getIndex();
|
||||
//判断是否已有该次随访
|
//
|
||||
FmsFollowupTaskExample fmsFollowupTaskExample = new FmsFollowupTaskExample(); |
// //判断是否已有该次随访
|
||||
fmsFollowupTaskExample.createCriteria().andTimesEqualTo(index).andPatientIdEqualTo(followupPatient.getPatientId()).andQueueIdEqualTo(followupQueueVO.getId()); |
// FmsFollowupTaskExample fmsFollowupTaskExample = new FmsFollowupTaskExample();
|
||||
List<FmsFollowupTask> fmsFollowupTasks = fmsFollowupTaskMapper.selectByExample(fmsFollowupTaskExample); |
// fmsFollowupTaskExample.createCriteria().andTimesEqualTo(index).andPatientIdEqualTo(followupPatient.getPatientId()).andQueueIdEqualTo(followupQueueVO.getId());
|
||||
if (CollectionUtil.isNotEmpty(fmsFollowupTasks)) { |
// List<FmsFollowupTask> fmsFollowupTasks = fmsFollowupTaskMapper.selectByExample(fmsFollowupTaskExample);
|
||||
continue; |
// if (CollectionUtil.isNotEmpty(fmsFollowupTasks)) {
|
||||
} |
// continue;
|
||||
|
// }
|
||||
FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); |
//
|
||||
BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); |
// FmsFollowupTask fmsFollowupTask = new FmsFollowupTask();
|
||||
fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); |
// BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask);
|
||||
fmsFollowupTask.setName(followupPatient.getName()); |
// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId());
|
||||
fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull()); |
// fmsFollowupTask.setName(followupPatient.getName());
|
||||
fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple()); |
// fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull());
|
||||
fmsFollowupTask.setGender(followupPatient.getGender()); |
// fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple());
|
||||
if (followupPatient.getBirthDate() != null) { |
// fmsFollowupTask.setGender(followupPatient.getGender());
|
||||
fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date())); |
// if (followupPatient.getBirthDate() != null) {
|
||||
} |
// fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date()));
|
||||
fmsFollowupTask.setEthnicity(followupPatient.getEthnicity()); |
// }
|
||||
fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); |
// fmsFollowupTask.setEthnicity(followupPatient.getEthnicity());
|
||||
fmsFollowupTask.setTimes(index); |
// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears());
|
||||
fmsFollowupTask.setPhone(followupPatient.getPhone()); |
// fmsFollowupTask.setTimes(index);
|
||||
fmsFollowupTask.setTenantId(followupPatient.getTenantId()); |
// fmsFollowupTask.setPhone(followupPatient.getPhone());
|
||||
fmsFollowupTask.setIdCardType(followupPatient.getIdCardType()); |
// fmsFollowupTask.setTenantId(followupPatient.getTenantId());
|
||||
fmsFollowupTask.setIdCard(followupPatient.getIdCard()); |
// fmsFollowupTask.setIdCardType(followupPatient.getIdCardType());
|
||||
fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); |
// fmsFollowupTask.setIdCard(followupPatient.getIdCard());
|
||||
fmsFollowupTask.setQueueId(followupQueueVO.getId()); |
// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId());
|
||||
fmsFollowupTask.setDelFlag((byte) 0); |
// fmsFollowupTask.setQueueId(followupQueueVO.getId());
|
||||
fmsFollowupTask.setCreateTime(new Date()); |
// fmsFollowupTask.setDelFlag((byte) 0);
|
||||
fmsFollowupTask.setEducationYears(followupPatient.getEducationYears()); |
// fmsFollowupTask.setCreateTime(new Date());
|
||||
fmsFollowupTask.setStatus((byte) 0); |
// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears());
|
||||
|
// fmsFollowupTask.setStatus((byte) 0);
|
||||
fmsFollowupTask.setStartTime(date); |
//
|
||||
Calendar instance = Calendar.getInstance(); |
// fmsFollowupTask.setStartTime(date);
|
||||
instance.setTime(date); |
// Calendar instance = Calendar.getInstance();
|
||||
instance.add(Calendar.DATE, followWindowAdys / 2); |
// instance.setTime(date);
|
||||
|
// instance.add(Calendar.DATE, followWindowAdys / 2);
|
||||
fmsFollowupTask.setEndTime(instance.getTime()); |
//
|
||||
changeDataSource(result); |
// fmsFollowupTask.setEndTime(instance.getTime());
|
||||
fmsFollowupTask.setPatientId(followupPatient.getId()); |
//// changeDataSource(result);
|
||||
fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); |
// fmsFollowupTask.setPatientId(followupPatient.getId());
|
||||
} |
// fmsFollowupTaskMapper.insertSelective(fmsFollowupTask);
|
||||
} |
// }
|
||||
} |
// }
|
||||
|
// }
|
||||
} |
// }
|
||||
} |
// }
|
||||
} |
//
|
||||
|
// private static void changeDataSource(UmsDataSourceVo.Result result) {
|
||||
private static void changeDataSource(UmsDataSourceVo.Result result) { |
// try {
|
||||
DynamicDataSourceContextHolder.setDataSourceType(result.getDataSourceKey()); |
// DynamicDataSourceContextHolder.setDataSourceType(result.getDataSourceKey());
|
||||
} |
// } finally {
|
||||
|
// DynamicDataSourceContextHolder.clearDataSourceType();
|
||||
/** |
// }
|
||||
* 法用于计算在指定时间范围内触发器的触发时间点。具体步骤如下: |
// }
|
||||
* 初始化一个空列表 lst 存储触发时间点。 |
//
|
||||
* 克隆传入的触发器 trigg,并检查其下一个触发时间是否为空。如果为空,则设置开始时间和结束时间,并计算首次触发时间。 |
// public String getName(String url) {
|
||||
* 使用 while 循环遍历触发器的触发时间点,直到没有更多触发时间或超出指定范围。 |
// Pattern pattern = Pattern.compile("jdbc:mysql://[^/]+/([^?]+)");
|
||||
* 如果触发时间在指定范围内,则将其添加到列表中,并更新触发器状态。 |
// Matcher matcher = pattern.matcher(url);
|
||||
* |
// if (matcher.find()) {
|
||||
* @param trigg cron表达式 |
// String dbName = matcher.group(1); // 输出 acupuncture_yfyy
|
||||
* @param from 患者出院时间 |
// System.out.println("数据库名称: " + dbName);
|
||||
* @param to 患者出院时间 + 随访总月数 |
// return dbName;
|
||||
* @return |
// }
|
||||
*/ |
// return "";
|
||||
public static List<Date> computeFireTimesBetween(OperableTrigger trigg, org.quartz.Calendar cal, Date from, Date to) { |
// }
|
||||
LinkedList<Date> lst = new LinkedList(); |
//
|
||||
OperableTrigger t = (OperableTrigger) trigg.clone(); |
// /**
|
||||
if (t.getNextFireTime() == null) { |
// * 法用于计算在指定时间范围内触发器的触发时间点。具体步骤如下:
|
||||
t.setStartTime(from); |
// * 初始化一个空列表 lst 存储触发时间点。
|
||||
t.setEndTime(to); |
// * 克隆传入的触发器 trigg,并检查其下一个触发时间是否为空。如果为空,则设置开始时间和结束时间,并计算首次触发时间。
|
||||
t.computeFirstFireTime(cal); |
// * 使用 while 循环遍历触发器的触发时间点,直到没有更多触发时间或超出指定范围。
|
||||
} |
// * 如果触发时间在指定范围内,则将其添加到列表中,并更新触发器状态。
|
||||
|
// *
|
||||
while (true) { |
// * @param trigg cron表达式
|
||||
Date d = t.getNextFireTime(); |
// * @param from 患者出院时间
|
||||
if (d == null) { |
// * @param to 患者出院时间 + 随访总月数
|
||||
break; |
// * @return
|
||||
} |
// */
|
||||
|
// public static List<Date> computeFireTimesBetween(OperableTrigger trigg, org.quartz.Calendar cal, Date from, Date to) {
|
||||
if (d.before(from)) { |
// LinkedList<Date> lst = new LinkedList();
|
||||
t.triggered(cal); |
// OperableTrigger t = (OperableTrigger) trigg.clone();
|
||||
} else { |
// if (t.getNextFireTime() == null) {
|
||||
if (d.after(to)) { |
// t.setStartTime(from);
|
||||
break; |
// t.setEndTime(to);
|
||||
} |
// t.computeFirstFireTime(cal);
|
||||
lst.add(d); |
// }
|
||||
t.triggered(cal); |
//
|
||||
} |
// while (true) {
|
||||
} |
// Date d = t.getNextFireTime();
|
||||
return Collections.unmodifiableList(lst); |
// if (d == null) {
|
||||
} |
// break;
|
||||
|
// }
|
||||
/** |
//
|
||||
* 返回当前时间之后的第一个date及对应顺序 |
// if (d.before(from)) {
|
||||
* |
// t.triggered(cal);
|
||||
* @param dateList key 为顺序,value 为时间 |
// } else {
|
||||
* @return |
// if (d.after(to)) {
|
||||
*/ |
// break;
|
||||
public static DateComparator getDate(List<Date> dateList) { |
// }
|
||||
Date today = new Date(); |
// lst.add(d);
|
||||
DateComparator dateComparator = new DateComparator(); |
// t.triggered(cal);
|
||||
for (int i = 0; i < dateList.size(); i++) { |
// }
|
||||
Date date = dateList.get(i); |
// }
|
||||
if (date.after(today)) { |
// return Collections.unmodifiableList(lst);
|
||||
dateComparator.setDate(date); |
// }
|
||||
dateComparator.setIndex(i + 1); |
//
|
||||
return dateComparator; |
// /**
|
||||
} |
// * 返回当前时间之后的第一个date及对应顺序
|
||||
} |
// *
|
||||
return dateComparator; |
// * @param dateList key 为顺序,value 为时间
|
||||
} |
// * @return
|
||||
|
// */
|
||||
@Data |
// public static DateComparator getDate(List<Date> dateList) {
|
||||
public static class DateComparator { |
// Date today = new Date();
|
||||
private Date date; |
// DateComparator dateComparator = new DateComparator();
|
||||
private Integer index; |
// for (int i = 0; i < dateList.size(); i++) {
|
||||
} |
// Date date = dateList.get(i);
|
||||
} |
// if (date.after(today)) {
|
||||
|
// dateComparator.setDate(date);
|
||||
|
// dateComparator.setIndex(i + 1);
|
||||
|
// return dateComparator;
|
||||
|
// }
|
||||
|
// }
|
||||
|
// return dateComparator;
|
||||
|
// }
|
||||
|
//
|
||||
|
// @Data
|
||||
|
// public static class DateComparator {
|
||||
|
// private Date date;
|
||||
|
// private Integer index;
|
||||
|
// }
|
||||
|
//}
|
||||
|
@ -0,0 +1,340 @@ |
|||||
|
//package com.acupuncture.web.task;
|
||||
|
//
|
||||
|
//import cn.hutool.core.bean.BeanUtil;
|
||||
|
//import cn.hutool.core.collection.CollectionUtil;
|
||||
|
//import cn.hutool.core.date.DateUtil;
|
||||
|
//import cn.hutool.core.util.IdUtil;
|
||||
|
//import com.acupuncture.common.annotation.Anonymous;
|
||||
|
//import com.acupuncture.common.core.redis.RedisCache;
|
||||
|
//import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder;
|
||||
|
//import com.acupuncture.system.domain.dto.FmsFollowupDto;
|
||||
|
//import com.acupuncture.system.domain.po.FmsFollowupTask;
|
||||
|
//import com.acupuncture.system.domain.po.FmsFollowupTaskExample;
|
||||
|
//import com.acupuncture.system.domain.vo.FmsFollowupVo;
|
||||
|
//import com.acupuncture.system.domain.vo.UmsDataSourceVo;
|
||||
|
//import com.acupuncture.system.persist.dao.FmsFollowupDao;
|
||||
|
//import com.acupuncture.system.persist.dao.UmsDataSourceDao;
|
||||
|
//import com.acupuncture.system.persist.mapper.FmsFollowupTaskMapper;
|
||||
|
//import com.acupuncture.system.service.FmsFollowupQueueService;
|
||||
|
//import com.acupuncture.system.service.FmsFollowupService;
|
||||
|
//import io.swagger.annotations.Api;
|
||||
|
//import io.swagger.annotations.ApiOperation;
|
||||
|
//import lombok.Data;
|
||||
|
//import lombok.extern.slf4j.Slf4j;
|
||||
|
//import org.quartz.TriggerUtils;
|
||||
|
//import org.quartz.impl.triggers.CronTriggerImpl;
|
||||
|
//import org.quartz.spi.OperableTrigger;
|
||||
|
//import org.springframework.scheduling.annotation.Scheduled;
|
||||
|
//import org.springframework.transaction.annotation.Propagation;
|
||||
|
//import org.springframework.transaction.annotation.Transactional;
|
||||
|
//import org.springframework.web.bind.annotation.PostMapping;
|
||||
|
//import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
//import org.springframework.web.bind.annotation.RestController;
|
||||
|
//
|
||||
|
//import javax.annotation.Resource;
|
||||
|
//import java.util.*;
|
||||
|
//import java.util.regex.Matcher;
|
||||
|
//import java.util.regex.Pattern;
|
||||
|
//
|
||||
|
///**
|
||||
|
// * @Author zzc
|
||||
|
// * @Package com.acupuncture.web.controller.web
|
||||
|
// * @Date 2025/2/13 8:50
|
||||
|
// * @description:
|
||||
|
// */
|
||||
|
//@Slf4j
|
||||
|
//@Api(tags = "定时任务相关")
|
||||
|
//@RestController
|
||||
|
//@RequestMapping("/task")
|
||||
|
//@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
|
||||
|
//public class TaskController {
|
||||
|
//
|
||||
|
// @Resource
|
||||
|
// private FmsFollowupDao fmsFollowupDao;
|
||||
|
// @Resource
|
||||
|
// private FmsFollowupService fmsFollowupService;
|
||||
|
// @Resource
|
||||
|
// private FmsFollowupTaskMapper fmsFollowupTaskMapper;
|
||||
|
// @Resource
|
||||
|
// private UmsDataSourceDao umsDataSourceDao;
|
||||
|
// @Resource
|
||||
|
// private RedisCache redisCache;
|
||||
|
// @Resource
|
||||
|
// private FmsFollowupQueueService fmsFollowupQueueService;
|
||||
|
//
|
||||
|
// @ApiOperation("定时任务添加随访工单")
|
||||
|
// @PostMapping("/task")
|
||||
|
// @Scheduled(fixedDelay = 10000)
|
||||
|
// @Anonymous
|
||||
|
// public void task() {
|
||||
|
// // TODO 生成工单第一次生成之后2周的,往后只生成之后一周。第一次随访时间: ( 患者的出院时间 - 7 + 轮次时间) 到 (患者的出院时间 + 7 + 轮次时间 )
|
||||
|
// //查询租户,根据租户循环切换数据源,定时处理所有医院的随访工单
|
||||
|
//// UmsDataSourceVo.Result result1 = new UmsDataSourceVo.Result();
|
||||
|
//// result1.setDataSourceKey("MASTER");
|
||||
|
//// changeDataSource(result1);
|
||||
|
// List<UmsDataSourceVo.Result> query = umsDataSourceDao.query(null);
|
||||
|
// if (CollectionUtil.isEmpty(query)) {
|
||||
|
// return;
|
||||
|
// }
|
||||
|
// //查询公共队列
|
||||
|
// List<Object> queueResults = redisCache.getCacheList("common_followup_queue");
|
||||
|
// List<FmsFollowupVo.FollowupQueueVO> followupQueueVOS = new ArrayList<>();
|
||||
|
// if (CollectionUtil.isEmpty(queueResults)) {
|
||||
|
//
|
||||
|
// followupQueueVOS = fmsFollowupQueueService.queryCommonQueue(null);
|
||||
|
// }
|
||||
|
//// List<FmsFollowupVo.FollowupQueueVO> queueResults = fmsFollowupDao.queryCommonQueue(null);
|
||||
|
// //切换数据源
|
||||
|
// for (UmsDataSourceVo.Result result : query) {
|
||||
|
// if ("MASTER".equals(result.getDataSourceKey()) || "PROD_YY".equals(result.getDataSourceKey())) {
|
||||
|
// continue;
|
||||
|
// }
|
||||
|
// changeDataSource(result);
|
||||
|
// {
|
||||
|
// //获取随访患者列表,根据患者出院日时间和队列添加工单
|
||||
|
// //1. 查询队列
|
||||
|
// List<FmsFollowupVo.FollowupQueueVO> queueList = fmsFollowupDao.selectQueueList(null, null, null, null);
|
||||
|
//
|
||||
|
// if (CollectionUtil.isEmpty(queueList)) {
|
||||
|
// if (CollectionUtil.isEmpty(queueResults)) {
|
||||
|
// queueList = followupQueueVOS;
|
||||
|
// }
|
||||
|
// } else {
|
||||
|
// if (CollectionUtil.isEmpty(queueResults)) {
|
||||
|
// queueList.addAll(followupQueueVOS);
|
||||
|
// }
|
||||
|
// }
|
||||
|
// for (FmsFollowupVo.FollowupQueueVO followupQueueVO : queueList) {
|
||||
|
// Integer followWindowAdys = followupQueueVO.getFollowWindowAdys();
|
||||
|
//
|
||||
|
// //2. 查询队列随访患者列表
|
||||
|
//// changeDataSource(result);
|
||||
|
// FmsFollowupDto.FollowupPatientQueryDTO followupPatientQueryDTO = new FmsFollowupDto.FollowupPatientQueryDTO();
|
||||
|
// followupPatientQueryDTO.setQueueId(followupQueueVO.getId());
|
||||
|
// followupPatientQueryDTO.setTenantId(followupQueueVO.getTenantId());
|
||||
|
// changeDataSource(result);
|
||||
|
// List<FmsFollowupVo.FollowupPatient> patientList = fmsFollowupService.queryTaskPatient(followupPatientQueryDTO);
|
||||
|
//// List<FmsFollowupVo.FollowupPatient> patientList = fmsFollowupDao.queryPatient(followupQueueVO.getId(), null, null);
|
||||
|
// if (CollectionUtil.isEmpty(patientList)) {
|
||||
|
// continue;
|
||||
|
// }
|
||||
|
// //随访总月数
|
||||
|
// Integer followupMonth = followupQueueVO.getFollowupMonth();
|
||||
|
// for (FmsFollowupVo.FollowupPatient followupPatient : patientList) {
|
||||
|
// //获取随访到期时间 出院时间+随访总月数 = 到期时间
|
||||
|
// Calendar calendar = Calendar.getInstance();
|
||||
|
// calendar.setTime(followupPatient.getDischargeTime());
|
||||
|
// calendar.set(Calendar.MONTH, followupMonth);
|
||||
|
// Date time = calendar.getTime();
|
||||
|
//
|
||||
|
// //获取队列信息
|
||||
|
// String frequency = followupQueueVO.getFrequency();
|
||||
|
// List<Date> dateList = new ArrayList<>();
|
||||
|
// try {
|
||||
|
// CronTriggerImpl cronTrigger = new CronTriggerImpl();
|
||||
|
// cronTrigger.setCronExpression(frequency);
|
||||
|
// //TriggerUtils.computeFireTimesBetween(要计算触发时间的触发器对象, 用于计算触发时间的日历对象, 计算触发时间的起始时间点, 计算触发时间的结束时间点);
|
||||
|
// dateList = TriggerUtils.computeFireTimesBetween(cronTrigger, null, followupPatient.getDischargeTime(), time);
|
||||
|
// if (CollectionUtil.isEmpty(dateList)) {
|
||||
|
// continue;
|
||||
|
// }
|
||||
|
// } catch (Exception e) {
|
||||
|
// e.printStackTrace();
|
||||
|
// }
|
||||
|
// //3. 判断随访类型
|
||||
|
// if (followupQueueVO.getFollowupType() == 0) {
|
||||
|
// //单次
|
||||
|
// //判断是否已有该次随访
|
||||
|
// FmsFollowupTaskExample fmsFollowupTaskExample = new FmsFollowupTaskExample();
|
||||
|
// fmsFollowupTaskExample.createCriteria().andTimesEqualTo(1).andPatientIdEqualTo(followupPatient.getPatientId()).andQueueIdEqualTo(followupQueueVO.getId());
|
||||
|
// List<FmsFollowupTask> fmsFollowupTasks = fmsFollowupTaskMapper.selectByExample(fmsFollowupTaskExample);
|
||||
|
// if (CollectionUtil.isNotEmpty(fmsFollowupTasks)) {
|
||||
|
// continue;
|
||||
|
// }
|
||||
|
// FmsFollowupTask fmsFollowupTask = new FmsFollowupTask();
|
||||
|
// BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask);
|
||||
|
// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId());
|
||||
|
// fmsFollowupTask.setName(followupPatient.getName());
|
||||
|
// fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull());
|
||||
|
// fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple());
|
||||
|
// fmsFollowupTask.setGender(followupPatient.getGender());
|
||||
|
// if (followupPatient.getBirthDate() != null) {
|
||||
|
// fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date()));
|
||||
|
// }
|
||||
|
// fmsFollowupTask.setEthnicity(followupPatient.getEthnicity());
|
||||
|
// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears());
|
||||
|
// fmsFollowupTask.setPhone(followupPatient.getPhone());
|
||||
|
// fmsFollowupTask.setTenantId(followupPatient.getTenantId());
|
||||
|
// fmsFollowupTask.setIdCardType(followupPatient.getIdCardType());
|
||||
|
// fmsFollowupTask.setIdCard(followupPatient.getIdCard());
|
||||
|
// fmsFollowupTask.setTimes(1);
|
||||
|
// fmsFollowupTask.setQueueId(followupQueueVO.getId());
|
||||
|
// fmsFollowupTask.setPatientId(followupPatient.getId());
|
||||
|
// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears());
|
||||
|
// fmsFollowupTask.setDelFlag((byte) 0);
|
||||
|
// fmsFollowupTask.setCreateTime(new Date());
|
||||
|
// fmsFollowupTask.setStatus((byte) 0);
|
||||
|
//
|
||||
|
// //计算第一次随访的时间
|
||||
|
// DateComparator dateComparator = getDate(dateList);
|
||||
|
// if (dateComparator.getDate() != null) {
|
||||
|
// fmsFollowupTask.setStartTime(dateComparator.getDate());
|
||||
|
// }else {
|
||||
|
// Calendar instance = Calendar.getInstance();
|
||||
|
// instance.setTime(dateList.get(0));
|
||||
|
// instance.add(Calendar.DATE, -followWindowAdys / 2);
|
||||
|
// fmsFollowupTask.setStartTime(instance.getTime());
|
||||
|
// }
|
||||
|
// Calendar instance1 = Calendar.getInstance();
|
||||
|
// instance1.setTime(dateList.get(0));
|
||||
|
// instance1.add(Calendar.DATE, followWindowAdys / 2);
|
||||
|
// fmsFollowupTask.setEndTime(instance1.getTime());
|
||||
|
// fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge());
|
||||
|
// fmsFollowupTask.setFollowupTime(dateList.get(0));
|
||||
|
//// changeDataSource(result);
|
||||
|
// fmsFollowupTaskMapper.insertSelective(fmsFollowupTask);
|
||||
|
//
|
||||
|
// } else {
|
||||
|
// //周期
|
||||
|
// //4. 根据频次和总月数添加
|
||||
|
// DateComparator dateComparator = getDate(dateList);
|
||||
|
// if (dateComparator.getDate() == null || dateComparator.getIndex() == null) {
|
||||
|
// continue;
|
||||
|
// }
|
||||
|
// Date date = dateComparator.getDate();
|
||||
|
// Integer index = dateComparator.getIndex();
|
||||
|
//
|
||||
|
// //判断是否已有该次随访
|
||||
|
// FmsFollowupTaskExample fmsFollowupTaskExample = new FmsFollowupTaskExample();
|
||||
|
// fmsFollowupTaskExample.createCriteria().andTimesEqualTo(index).andPatientIdEqualTo(followupPatient.getPatientId()).andQueueIdEqualTo(followupQueueVO.getId());
|
||||
|
// List<FmsFollowupTask> fmsFollowupTasks = fmsFollowupTaskMapper.selectByExample(fmsFollowupTaskExample);
|
||||
|
// if (CollectionUtil.isNotEmpty(fmsFollowupTasks)) {
|
||||
|
// continue;
|
||||
|
// }
|
||||
|
//
|
||||
|
// FmsFollowupTask fmsFollowupTask = new FmsFollowupTask();
|
||||
|
// BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask);
|
||||
|
// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId());
|
||||
|
// fmsFollowupTask.setName(followupPatient.getName());
|
||||
|
// fmsFollowupTask.setPinyinFull(followupPatient.getPinyinFull());
|
||||
|
// fmsFollowupTask.setPinyinSimple(followupPatient.getPinyinSimple());
|
||||
|
// fmsFollowupTask.setGender(followupPatient.getGender());
|
||||
|
// if (followupPatient.getBirthDate() != null) {
|
||||
|
// fmsFollowupTask.setAge(DateUtil.age(followupPatient.getBirthDate(), new Date()));
|
||||
|
// }
|
||||
|
// fmsFollowupTask.setEthnicity(followupPatient.getEthnicity());
|
||||
|
// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears());
|
||||
|
// fmsFollowupTask.setTimes(index);
|
||||
|
// fmsFollowupTask.setPhone(followupPatient.getPhone());
|
||||
|
// fmsFollowupTask.setTenantId(followupPatient.getTenantId());
|
||||
|
// fmsFollowupTask.setIdCardType(followupPatient.getIdCardType());
|
||||
|
// fmsFollowupTask.setIdCard(followupPatient.getIdCard());
|
||||
|
// fmsFollowupTask.setId(IdUtil.getSnowflakeNextId());
|
||||
|
// fmsFollowupTask.setQueueId(followupQueueVO.getId());
|
||||
|
// fmsFollowupTask.setDelFlag((byte) 0);
|
||||
|
// fmsFollowupTask.setCreateTime(new Date());
|
||||
|
// fmsFollowupTask.setEducationYears(followupPatient.getEducationYears());
|
||||
|
// fmsFollowupTask.setStatus((byte) 0);
|
||||
|
//
|
||||
|
// fmsFollowupTask.setStartTime(date);
|
||||
|
// Calendar instance = Calendar.getInstance();
|
||||
|
// instance.setTime(date);
|
||||
|
// instance.add(Calendar.DATE, followWindowAdys / 2);
|
||||
|
//
|
||||
|
// fmsFollowupTask.setEndTime(instance.getTime());
|
||||
|
//// changeDataSource(result);
|
||||
|
// fmsFollowupTask.setPatientId(followupPatient.getId());
|
||||
|
// fmsFollowupTaskMapper.insertSelective(fmsFollowupTask);
|
||||
|
// }
|
||||
|
// }
|
||||
|
// }
|
||||
|
//
|
||||
|
// }
|
||||
|
// }
|
||||
|
// }
|
||||
|
//
|
||||
|
// private static void changeDataSource(UmsDataSourceVo.Result result) {
|
||||
|
// try {
|
||||
|
// DynamicDataSourceContextHolder.setDataSourceType(result.getDataSourceKey());
|
||||
|
// }finally {
|
||||
|
// DynamicDataSourceContextHolder.clearDataSourceType();
|
||||
|
// }
|
||||
|
// }
|
||||
|
//
|
||||
|
// public String getName(String url){
|
||||
|
// Pattern pattern = Pattern.compile("jdbc:mysql://[^/]+/([^?]+)");
|
||||
|
// Matcher matcher = pattern.matcher(url);
|
||||
|
// if (matcher.find()) {
|
||||
|
// String dbName = matcher.group(1); // 输出 acupuncture_yfyy
|
||||
|
// System.out.println("数据库名称: " + dbName);
|
||||
|
// return dbName;
|
||||
|
// }
|
||||
|
// return "";
|
||||
|
// }
|
||||
|
//
|
||||
|
// /**
|
||||
|
// * 法用于计算在指定时间范围内触发器的触发时间点。具体步骤如下:
|
||||
|
// * 初始化一个空列表 lst 存储触发时间点。
|
||||
|
// * 克隆传入的触发器 trigg,并检查其下一个触发时间是否为空。如果为空,则设置开始时间和结束时间,并计算首次触发时间。
|
||||
|
// * 使用 while 循环遍历触发器的触发时间点,直到没有更多触发时间或超出指定范围。
|
||||
|
// * 如果触发时间在指定范围内,则将其添加到列表中,并更新触发器状态。
|
||||
|
// *
|
||||
|
// * @param trigg cron表达式
|
||||
|
// * @param from 患者出院时间
|
||||
|
// * @param to 患者出院时间 + 随访总月数
|
||||
|
// * @return
|
||||
|
// */
|
||||
|
// public static List<Date> computeFireTimesBetween(OperableTrigger trigg, org.quartz.Calendar cal, Date from, Date to) {
|
||||
|
// LinkedList<Date> lst = new LinkedList();
|
||||
|
// OperableTrigger t = (OperableTrigger) trigg.clone();
|
||||
|
// if (t.getNextFireTime() == null) {
|
||||
|
// t.setStartTime(from);
|
||||
|
// t.setEndTime(to);
|
||||
|
// t.computeFirstFireTime(cal);
|
||||
|
// }
|
||||
|
//
|
||||
|
// while (true) {
|
||||
|
// Date d = t.getNextFireTime();
|
||||
|
// if (d == null) {
|
||||
|
// break;
|
||||
|
// }
|
||||
|
//
|
||||
|
// if (d.before(from)) {
|
||||
|
// t.triggered(cal);
|
||||
|
// } else {
|
||||
|
// if (d.after(to)) {
|
||||
|
// break;
|
||||
|
// }
|
||||
|
// lst.add(d);
|
||||
|
// t.triggered(cal);
|
||||
|
// }
|
||||
|
// }
|
||||
|
// return Collections.unmodifiableList(lst);
|
||||
|
// }
|
||||
|
//
|
||||
|
// /**
|
||||
|
// * 返回当前时间之后的第一个date及对应顺序
|
||||
|
// *
|
||||
|
// * @param dateList key 为顺序,value 为时间
|
||||
|
// * @return
|
||||
|
// */
|
||||
|
// public static DateComparator getDate(List<Date> dateList) {
|
||||
|
// Date today = new Date();
|
||||
|
// DateComparator dateComparator = new DateComparator();
|
||||
|
// for (int i = 0; i < dateList.size(); i++) {
|
||||
|
// Date date = dateList.get(i);
|
||||
|
// if (date.after(today)) {
|
||||
|
// dateComparator.setDate(date);
|
||||
|
// dateComparator.setIndex(i + 1);
|
||||
|
// return dateComparator;
|
||||
|
// }
|
||||
|
// }
|
||||
|
// return dateComparator;
|
||||
|
// }
|
||||
|
//
|
||||
|
// @Data
|
||||
|
// public static class DateComparator {
|
||||
|
// private Date date;
|
||||
|
// private Integer index;
|
||||
|
// }
|
||||
|
//}
|
Loading…
Reference in new issue