diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java index fb595fc0..6c27a92b 100644 --- a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/FmsFollowupController.java @@ -1,17 +1,29 @@ package com.acupuncture.web.controller.web; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.IdUtil; import com.acupuncture.common.annotation.Anonymous; import com.acupuncture.common.core.domain.BaseDto; import com.acupuncture.common.core.domain.JsonResponse; +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.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 com.acupuncture.system.service.TaskService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; 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.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -19,6 +31,9 @@ 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; /** @@ -36,6 +51,10 @@ public class FmsFollowupController { private FmsFollowupQueueService fmsFollowupQueueService; @Resource private FmsFollowupService fmsFollowupService; + @Resource + private TaskService taskService; + @Resource + private UmsDataSourceDao umsDataSourceDao; @ApiOperation("查询公共队列") @PostMapping("/commonQueue") @@ -49,7 +68,7 @@ public class FmsFollowupController { @ApiOperation("查询随访队列") @PostMapping("/query") - public JsonResponse> queryQueue(@RequestBody @Validated BaseDto dto){ + public JsonResponse> queryQueue(@RequestBody @Validated BaseDto dto) { if (dto.getPageNum() > 0) { PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); } @@ -58,7 +77,7 @@ public class FmsFollowupController { @ApiOperation("查询随访患者") @PostMapping("/queryPatient") - public JsonResponse> queryPatient(@RequestBody @Validated BaseDto dto){ + public JsonResponse> queryPatient(@RequestBody @Validated BaseDto dto) { if (dto.getPageNum() > 0) { PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); } @@ -67,20 +86,20 @@ public class FmsFollowupController { @ApiOperation("查询随访任务") @PostMapping("/queryTask") - public JsonResponse> queryTask(@RequestBody @Validated BaseDto dto){ + public JsonResponse> queryTask(@RequestBody @Validated BaseDto dto) { return JsonResponse.ok(new PageInfo<>(fmsFollowupService.queryTask(dto.getParam()))); } @ApiOperation("标记为失访") @PostMapping("/updStatus") - public JsonResponse markAsLost(@RequestBody @Validated FmsFollowupDto.FollowupLostDTO dto){ + public JsonResponse markAsLost(@RequestBody @Validated FmsFollowupDto.FollowupLostDTO dto) { fmsFollowupService.markAsLost(dto); return JsonResponse.ok(); } @ApiOperation("完成随访") @PostMapping("/followPatient") - public JsonResponse completeFollowup(@RequestBody @Validated FmsFollowupDto.FollowupCompleteDTO dto){ + public JsonResponse completeFollowup(@RequestBody @Validated FmsFollowupDto.FollowupCompleteDTO dto) { fmsFollowupService.completeFollowup(dto); return JsonResponse.ok(); } diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/StatisticsController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/StatisticsController.java new file mode 100644 index 00000000..3450af1b --- /dev/null +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/StatisticsController.java @@ -0,0 +1,13 @@ +package com.acupuncture.web.controller.web; + +/** + * @Author zzc + * @Package com.acupuncture.web.controller.web + * @Date 2025/2/13 8:58 + * @description: + */ +public class StatisticsController { + + + +} diff --git a/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/TaskController.java b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/TaskController.java new file mode 100644 index 00000000..bef53580 --- /dev/null +++ b/acupuncture-admin/src/main/java/com/acupuncture/web/controller/web/TaskController.java @@ -0,0 +1,150 @@ +package com.acupuncture.web.controller.web; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.IdUtil; +import com.acupuncture.framework.datasource.DynamicDataSourceContextHolder; +import com.acupuncture.system.domain.po.FmsFollowupTask; +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 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.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") +public class TaskController { + + @Resource + private FmsFollowupDao fmsFollowupDao; + @Resource + private FmsFollowupTaskMapper fmsFollowupTaskMapper; + @Resource + private UmsDataSourceDao umsDataSourceDao; + + + @ApiOperation("定时任务添加随访工单") + @PostMapping("/task") + public void task() { + //查询租户,根据租户循环切换数据源,定时处理所有医院的随访工单 + List query = umsDataSourceDao.query(); + if (CollectionUtil.isEmpty(query)) { + return; + } + //切换数据源 + for (UmsDataSourceVo.Result result : query) { + changeDataSource(result); + { + //获取随访患者列表,根据患者出院日时间和队列添加工单 + //1. 查询队列 + List queueList = fmsFollowupDao.selectQueueList(null); + //查询公共队列 + changeDataSource(result); + List queueResults = fmsFollowupDao.queryCommonQueue(null); + if (CollectionUtil.isEmpty(queueList)) { + queueList = queueResults; + } else { + queueList.addAll(queueResults); + } + for (FmsFollowupVo.FollowupQueueVO followupQueueVO : queueList) { + //2. 查询队列随访患者列表 + changeDataSource(result); + List patientList = fmsFollowupDao.queryPatient(followupQueueVO.getId()); + if (CollectionUtil.isEmpty(patientList)) { + continue; + } + //随访总月数 + Integer followupMethod = followupQueueVO.getFollowupMethod(); + for (FmsFollowupVo.FollowupPatient followupPatient : patientList) { + //获取随访到期时间 出院时间+随访总月数 = 到期时间 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(followupPatient.getDischargeTime()); + calendar.set(Calendar.MONTH, followupMethod); + Date time = calendar.getTime(); + + //获取队列信息 + String frequency = followupQueueVO.getFrequency(); + List 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.setQueueId(followupQueueVO.getId()); + fmsFollowupTask.setPatientId(followupPatient.getId()); + 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. 根据频次和总月数添加 + for (Date date : dateList) { + //单次 + FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); + BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); + fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); + fmsFollowupTask.setQueueId(followupQueueVO.getId()); + fmsFollowupTask.setDelFlag((byte) 0); + fmsFollowupTask.setCreateTime(new Date()); + 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); + } + } + } + } + + } + } + } + + private static void changeDataSource(UmsDataSourceVo.Result result) { + DynamicDataSourceContextHolder.setDataSourceType(result.getDataSourceKey()); + } +} diff --git a/acupuncture-generator/src/main/resources/mbg.xml b/acupuncture-generator/src/main/resources/mbg.xml index 0680f822..3050a369 100644 --- a/acupuncture-generator/src/main/resources/mbg.xml +++ b/acupuncture-generator/src/main/resources/mbg.xml @@ -20,9 +20,9 @@ + password="po3OynBO[M3579p6L7)o"> diff --git a/acupuncture-system/pom.xml b/acupuncture-system/pom.xml index 8c194b0a..fde24e93 100644 --- a/acupuncture-system/pom.xml +++ b/acupuncture-system/pom.xml @@ -43,6 +43,10 @@ 1.6.2 compile + + org.quartz-scheduler + quartz + \ No newline at end of file diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/FmsFollowupVo.java b/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/FmsFollowupVo.java index 93483e80..f74d8b2f 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/FmsFollowupVo.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/FmsFollowupVo.java @@ -105,6 +105,8 @@ public class FmsFollowupVo { private Long tenantId; + private Date dischargeTime; + private String createBy; private Date createTime; diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/StatisticsVo.java b/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/StatisticsVo.java new file mode 100644 index 00000000..4d91a04f --- /dev/null +++ b/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/StatisticsVo.java @@ -0,0 +1,121 @@ +package com.acupuncture.system.domain.vo; + +import com.acupuncture.common.annotation.DataSource; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @Author zzc + * @Package com.acupuncture.system.domain.vo + * @Date 2025/2/13 8:59 + * @description: + */ +public class StatisticsVo { + + @Data + @ApiModel("患者统计") + public static class PatientVo { + private Integer totalPatients; + @JsonFormat(pattern = "yyyy-MM-dd") + private Date date; + + private GenderVo gender; + + private AgeVo age; + + private JwbzVo jwbz; + + @Data + public static class GenderVo { + @ApiModelProperty("男患者人数") + private Integer male; + @ApiModelProperty("女患者人数") + private Integer female; + @ApiModelProperty("未知患者人数") + private Integer other; + } + + @Data + public static class AgeVo { + private Integer num1; + private Integer num2; + private Integer num3; + private Integer num4; + private Integer num5; + private Integer num6; + } + + @Data + public static class JwbzVo { + private Integer gxy; + private Integer nxgb; + private Integer exzl; + private Integer gxb; + private Integer jsjb; + private Integer whsezcky; + private Integer fpz; + private Integer gzssz; + private Integer ycxXtxjb; + private Integer tnb; + private Integer mxfxjb; + private Integer gzxz; + private Integer gzjb; + private Integer gmxjb; + private Integer gjy; + private Integer tf; + private Integer sySb; + private Integer other; + + } + } + + + @Data + @ApiModel("诊疗信息") + public static class TreamentVo { + + private List sort; + + private TxfbVo txfb; + + @Data + @ApiModel("排名信息") + public static class SortVo { + private Integer total; + private Integer sort; + private Integer type; + } + + @Data + @ApiModel("体型分布") + public static class TxfbVo { + @ApiModelProperty("") + private Integer total; + @ApiModelProperty("") + private Integer date; + @ApiModelProperty("隐形肥胖型") + private Integer yxfpz; + @ApiModelProperty("脂肪过多型") + private Integer zfgdx; + @ApiModelProperty("肥胖型") + private Integer fpx; + @ApiModelProperty("肌肉不足型") + private Integer jrbzx; + @ApiModelProperty("健康匀称型") + private Integer jkjcx; + @ApiModelProperty("超重肌肉型") + private Integer czjrx; + @ApiModelProperty("消瘦型") + private Integer xsx; + @ApiModelProperty("低脂肪型") + private Integer dzfx; + @ApiModelProperty("运动员型") + private Integer ydyx; + } + } +} diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/UmsDataSourceVo.java b/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/UmsDataSourceVo.java new file mode 100644 index 00000000..bfbcc09b --- /dev/null +++ b/acupuncture-system/src/main/java/com/acupuncture/system/domain/vo/UmsDataSourceVo.java @@ -0,0 +1,33 @@ +package com.acupuncture.system.domain.vo; + +import com.acupuncture.system.domain.po.UmsDataSource; +import lombok.Data; + +/** + * @Author zzc + * @Package com.acupuncture.system.domain.vo + * @Date 2025/2/12 18:02 + * @description: + */ +public class UmsDataSourceVo { + + @Data + public static class Result { + private Long id; + + private String dataSourceKey; + + private Long hospitalId; + + private String url; + + private String username; + + private String password; + + private Long tenantId; + + private String tenantName; + } + +} diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/persist/dao/UmsDataSourceDao.java b/acupuncture-system/src/main/java/com/acupuncture/system/persist/dao/UmsDataSourceDao.java new file mode 100644 index 00000000..a755779e --- /dev/null +++ b/acupuncture-system/src/main/java/com/acupuncture/system/persist/dao/UmsDataSourceDao.java @@ -0,0 +1,20 @@ +package com.acupuncture.system.persist.dao; + +import com.acupuncture.common.annotation.DataSource; +import com.acupuncture.common.enums.DataSourceType; +import com.acupuncture.system.domain.vo.UmsDataSourceVo; + +import java.util.List; + +/** + * @Author zzc + * @Package com.acupuncture.system.persist.dao + * @Date 2025/2/12 18:02 + * @description: + */ +public interface UmsDataSourceDao { + + @DataSource(DataSourceType.MASTER) + List query(); + +} diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupService.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupService.java index 52314790..14fb17c3 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupService.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/FmsFollowupService.java @@ -45,9 +45,6 @@ public interface FmsFollowupService { */ void completeFollowup(FmsFollowupDto.FollowupCompleteDTO dto); - /** - * 定时任务添加随访工单 - */ - void task(); + } diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/StatisticsService.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/StatisticsService.java new file mode 100644 index 00000000..0cc0fad3 --- /dev/null +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/StatisticsService.java @@ -0,0 +1,13 @@ +package com.acupuncture.system.service; + +/** + * @Author zzc + * @Package com.acupuncture.system.service + * @Date 2025/2/13 8:58 + * @description: + */ +public interface StatisticsService { + + + +} diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/TaskService.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/TaskService.java new file mode 100644 index 00000000..75c25d60 --- /dev/null +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/TaskService.java @@ -0,0 +1,15 @@ +package com.acupuncture.system.service; + +/** + * @Author zzc + * @Package com.acupuncture.system.service + * @Date 2025/2/12 17:58 + * @description: + */ +public interface TaskService { + + /** + * 定时任务添加随访工单 + */ + void task(); +} diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/DmsLoginServiceImpl.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/DmsLoginServiceImpl.java index 3d5ce1ec..cdadd426 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/DmsLoginServiceImpl.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/DmsLoginServiceImpl.java @@ -30,6 +30,8 @@ public class DmsLoginServiceImpl implements DmsLoginService { @Resource private UmsDataSourceMapper umsDataSourceMapper; + + @Override public DmsLoginUserVo.DataScoreVo selectUserByUserName(String userName) { return dmsUserDao.queryLoginUserDataScore(userName); diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/FmsFollowupServiceImpl.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/FmsFollowupServiceImpl.java index feeaef2b..cc6e784b 100644 --- a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/FmsFollowupServiceImpl.java +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/FmsFollowupServiceImpl.java @@ -1,13 +1,24 @@ package com.acupuncture.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.IdUtil; import com.acupuncture.system.domain.dto.FmsFollowupDto; +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.persist.dao.FmsFollowupDao; +import com.acupuncture.system.persist.mapper.FmsFollowupTaskMapper; import com.acupuncture.system.service.FmsFollowupService; +import org.quartz.TriggerUtils; +import org.quartz.impl.triggers.CronTriggerImpl; +import org.springframework.scheduling.support.CronExpression; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; /** @@ -22,7 +33,6 @@ public class FmsFollowupServiceImpl implements FmsFollowupService { @Resource private FmsFollowupDao fmsFollowupDao; - @Override public List queryQueue(FmsFollowupDto.FollowupQueueQueryDTO dto) { return fmsFollowupDao.selectQueueList(dto.getId()); @@ -47,22 +57,4 @@ public class FmsFollowupServiceImpl implements FmsFollowupService { public void completeFollowup(FmsFollowupDto.FollowupCompleteDTO dto) { fmsFollowupDao.completeFollowup(dto); } - - @Override - public void task() { - //获取随访患者列表,根据患者出院日时间和队列添加工单 - //1. 查询队列 - List queueList = fmsFollowupDao.selectQueueList(null); - if (CollectionUtil.isEmpty(queueList)) { - //查询公共队列 - List queueResults = fmsFollowupDao.queryCommonQueue(null); - } - //2. 查询队列随访患者列表 - List patientList = fmsFollowupDao.queryPatient(null); - //3. 判断随访类型 - //4. 根据频次和总月数添加 - - } - - } diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/StatisticsServiceImpl.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/StatisticsServiceImpl.java new file mode 100644 index 00000000..da82f9f2 --- /dev/null +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/StatisticsServiceImpl.java @@ -0,0 +1,12 @@ +package com.acupuncture.system.service.impl; + +import com.acupuncture.system.service.StatisticsService; + +/** + * @Author zzc + * @Package com.acupuncture.system.service + * @Date 2025/2/13 8:58 + * @description: + */ +public class StatisticsServiceImpl implements StatisticsService { +} diff --git a/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/TaskServiceImpl.java b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/TaskServiceImpl.java new file mode 100644 index 00000000..9354b703 --- /dev/null +++ b/acupuncture-system/src/main/java/com/acupuncture/system/service/impl/TaskServiceImpl.java @@ -0,0 +1,120 @@ +package com.acupuncture.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.IdUtil; +import com.acupuncture.system.domain.po.FmsFollowupTask; +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.TaskService; +import org.quartz.TriggerUtils; +import org.quartz.impl.triggers.CronTriggerImpl; +import org.springframework.stereotype.Service; + +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.system.service.impl + * @Date 2025/2/12 17:58 + * @description: + */ +@Service +public class TaskServiceImpl implements TaskService { + + @Resource + private FmsFollowupDao fmsFollowupDao; + @Resource + private FmsFollowupTaskMapper fmsFollowupTaskMapper; + @Resource + private UmsDataSourceDao umsDataSourceDao; + + @Override + public void task() { + + //获取随访患者列表,根据患者出院日时间和队列添加工单 + //1. 查询队列 + List queueList = fmsFollowupDao.selectQueueList(null); + //查询公共队列 + List queueResults = fmsFollowupDao.queryCommonQueue(null); + if (CollectionUtil.isEmpty(queueList)) { + queueList = queueResults; + } else { + queueList.addAll(queueResults); + } + for (FmsFollowupVo.FollowupQueueVO followupQueueVO : queueList) { + //2. 查询队列随访患者列表 + List patientList = fmsFollowupDao.queryPatient(followupQueueVO.getId()); + if (CollectionUtil.isEmpty(patientList)) { + continue; + } + //随访总月数 + Integer followupMethod = followupQueueVO.getFollowupMethod(); + for (FmsFollowupVo.FollowupPatient followupPatient : patientList) { + //获取随访到期时间 出院时间+随访总月数 = 到期时间 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(followupPatient.getDischargeTime()); + calendar.set(Calendar.MONTH, followupMethod); + Date time = calendar.getTime(); + + //获取队列信息 + String frequency = followupQueueVO.getFrequency(); + List 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.setQueueId(followupQueueVO.getId()); + 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)); + fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); + + } else { + //周期 + //4. 根据频次和总月数添加 + for (Date date : dateList) { + //单次 + FmsFollowupTask fmsFollowupTask = new FmsFollowupTask(); + BeanUtil.copyProperties(followupQueueVO, fmsFollowupTask); + fmsFollowupTask.setId(IdUtil.getSnowflakeNextId()); + fmsFollowupTask.setQueueId(followupQueueVO.getId()); + fmsFollowupTask.setDelFlag((byte) 0); + fmsFollowupTask.setCreateTime(new Date()); + fmsFollowupTask.setStatus((byte) 0); + fmsFollowupTask.setStartTime(date); + fmsFollowupTask.setEndTime(date); + fmsFollowupTask.setFollowuper(followupQueueVO.getPersonInCharge()); + fmsFollowupTask.setFollowupTime(date); + fmsFollowupTaskMapper.insertSelective(fmsFollowupTask); + } + } + } + } + + } +} diff --git a/acupuncture-system/src/main/resources/mapper/dao/FmsFollowupDao.xml b/acupuncture-system/src/main/resources/mapper/dao/FmsFollowupDao.xml index a03d84eb..33e772e7 100644 --- a/acupuncture-system/src/main/resources/mapper/dao/FmsFollowupDao.xml +++ b/acupuncture-system/src/main/resources/mapper/dao/FmsFollowupDao.xml @@ -43,6 +43,7 @@ + select + t.id as tenantId, + t.name, + s.id, + s.data_source_key as dataSourceKey, + s.hospital_id as hospitalId, + s.url, + s.username, + s.password + from + dms_tenant t + left join + ums_data_source s + on t.data_source_id = s.id + where + t.del_flag = 0 + and + s.del_flag = 0 + group by + t.id + + +