40 changed files with 358 additions and 564 deletions
@ -1,211 +0,0 @@ |
|||||
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(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
Loading…
Reference in new issue