diff --git a/intc-api/intc-api-health/pom.xml b/intc-api/intc-api-health/pom.xml new file mode 100644 index 0000000..fd7279c --- /dev/null +++ b/intc-api/intc-api-health/pom.xml @@ -0,0 +1,28 @@ + + + + com.intc + intc-api + 3.6.3 + + 4.0.0 + + intc-api-health + + + intc-api-health 健康模块远程调用接口 + + + + + + + com.intc + intc-common-core + + + + + diff --git a/intc-api/intc-api-health/src/main/java/com/intc/api/health/RemoteHealthService.java b/intc-api/intc-api-health/src/main/java/com/intc/api/health/RemoteHealthService.java new file mode 100644 index 0000000..817b03a --- /dev/null +++ b/intc-api/intc-api-health/src/main/java/com/intc/api/health/RemoteHealthService.java @@ -0,0 +1,40 @@ +package com.intc.api.health; + +import com.intc.common.core.constant.ServiceNameConstants; +import com.intc.common.core.domain.R; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * 健康模块远程调用服务 + * + * @author intc + */ +@FeignClient(contextId = "remoteHealthService", value = ServiceNameConstants.INTC_HEALTH, fallbackFactory = com.intc.api.health.factory.RemoteHealthFallbackFactory.class) +public interface RemoteHealthService { + + /** + * 每日生成服药任务 + * + * @return 结果 + */ + @RequestMapping(value = "/job/generateDailyTasks", method = RequestMethod.POST) + R generateDailyTasks(); + + /** + * 扫描并发送服药提醒 + * + * @return 结果 + */ + @RequestMapping(value = "/job/scanAndSendReminders", method = RequestMethod.POST) + R scanAndSendReminders(); + + /** + * 扫描超时未服药任务 + * + * @return 结果 + */ + @RequestMapping(value = "/job/scanOverdueRecords", method = RequestMethod.POST) + R scanOverdueRecords(); +} diff --git a/intc-api/intc-api-health/src/main/java/com/intc/api/health/factory/RemoteHealthFallbackFactory.java b/intc-api/intc-api-health/src/main/java/com/intc/api/health/factory/RemoteHealthFallbackFactory.java new file mode 100644 index 0000000..935c7c4 --- /dev/null +++ b/intc-api/intc-api-health/src/main/java/com/intc/api/health/factory/RemoteHealthFallbackFactory.java @@ -0,0 +1,41 @@ +package com.intc.api.health.factory; + +import com.intc.api.health.RemoteHealthService; +import com.intc.common.core.domain.R; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * 健康服务降级处理 + * + * @author intc + */ +@Component +public class RemoteHealthFallbackFactory implements FallbackFactory { + + private static final Logger log = LoggerFactory.getLogger(RemoteHealthFallbackFactory.class); + + @Override + public RemoteHealthService create(Throwable throwable) { + log.error("健康服务调用失败:{}", throwable.getMessage()); + return new RemoteHealthService() { + + @Override + public R generateDailyTasks() { + return R.fail("健康服务调用每日生成服药任务失败"); + } + + @Override + public R scanAndSendReminders() { + return R.fail("健康服务调用扫描服药提醒失败"); + } + + @Override + public R scanOverdueRecords() { + return R.fail("健康服务调用扫描超时未服药记录失败"); + } + }; + } +} diff --git a/intc-api/intc-api-health/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/intc-api/intc-api-health/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..4389ae5 --- /dev/null +++ b/intc-api/intc-api-health/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.intc.api.health.factory.RemoteHealthFallbackFactory \ No newline at end of file diff --git a/intc-api/pom.xml b/intc-api/pom.xml index 3395678..db3a536 100644 --- a/intc-api/pom.xml +++ b/intc-api/pom.xml @@ -11,6 +11,7 @@ intc-api-system intc-api-invest + intc-api-health intc-api pom diff --git a/intc-common/intc-common-core/src/main/java/com/intc/common/core/constant/ServiceNameConstants.java b/intc-common/intc-common-core/src/main/java/com/intc/common/core/constant/ServiceNameConstants.java index da07691..55d79d9 100644 --- a/intc-common/intc-common-core/src/main/java/com/intc/common/core/constant/ServiceNameConstants.java +++ b/intc-common/intc-common-core/src/main/java/com/intc/common/core/constant/ServiceNameConstants.java @@ -65,4 +65,9 @@ public class ServiceNameConstants * INTC_INVEST_PROD的serviceId */ public static final String INTC_INVEST_PROD ="intc-invest-prod"; + + /** + * INTC_HEALTH的serviceId + */ + public static final String INTC_HEALTH = "intc-health"; } diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/controller/HealthJobController.java b/intc-modules/intc-health/src/main/java/com/intc/health/controller/HealthJobController.java new file mode 100644 index 0000000..b5c8270 --- /dev/null +++ b/intc-modules/intc-health/src/main/java/com/intc/health/controller/HealthJobController.java @@ -0,0 +1,59 @@ +package com.intc.health.controller; + +import com.intc.common.core.web.domain.AjaxResult; +import com.intc.health.task.MedicationRemindJob; +import com.intc.health.task.MedicationTaskJob; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +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; + +/** + * 健康模块定时任务触发接口(供 intc-job 远程调用) + * + * @author intc + */ +@RestController +@RequestMapping("/job") +@Api(tags = "健康模块定时任务接口") +public class HealthJobController { + + @Resource + private MedicationTaskJob medicationTaskJob; + + @Resource + private MedicationRemindJob medicationRemindJob; + + /** + * 每日生成服药任务 + */ + @PostMapping("/generateDailyTasks") + @ApiOperation("每日生成服药任务") + public AjaxResult generateDailyTasks() { + medicationTaskJob.generateDailyTasks(); + return AjaxResult.success(); + } + + /** + * 扫描并发送服药提醒 + */ + @PostMapping("/scanAndSendReminders") + @ApiOperation("扫描并发送服药提醒") + public AjaxResult scanAndSendReminders() { + medicationRemindJob.scanAndSendReminders(); + return AjaxResult.success(); + } + + /** + * 扫描超时未服药任务 + */ + @PostMapping("/scanOverdueRecords") + @ApiOperation("扫描超时未服药任务") + public AjaxResult scanOverdueRecords() { + medicationRemindJob.scanOverdueRecords(); + return AjaxResult.success(); + } +} diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/controller/MedicationTaskController.java b/intc-modules/intc-health/src/main/java/com/intc/health/controller/MedicationTaskController.java index 90b0fd5..15c8f8b 100644 --- a/intc-modules/intc-health/src/main/java/com/intc/health/controller/MedicationTaskController.java +++ b/intc-modules/intc-health/src/main/java/com/intc/health/controller/MedicationTaskController.java @@ -58,8 +58,10 @@ public class MedicationTaskController extends BaseController { @ApiOperation("确认服药") @RequiresPermissions("health:medicationTask:edit") @Log(title = "服药任务", businessType = BusinessType.UPDATE) - public AjaxResult confirm(@PathVariable Long id, @RequestParam(required = false) Integer confirmType) { - return toAjax(taskService.confirm(id, confirmType)); + public AjaxResult confirm(@PathVariable Long id, + @RequestParam(required = false) Integer confirmType, + @RequestParam(required = false) String confirmTime) { + return toAjax(taskService.confirm(id, confirmType, confirmTime)); } @PutMapping("/skip/{id}") diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseRecord.java b/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseRecord.java index 6591fd0..a9ec46d 100644 --- a/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseRecord.java +++ b/intc-modules/intc-health/src/main/java/com/intc/health/domain/ChronicDiseaseRecord.java @@ -23,6 +23,9 @@ public class ChronicDiseaseRecord extends BaseEntity { @ApiModelProperty("关联成员ID") private Long personId; + @ApiModelProperty("关联疾病ID") + private Long diseaseId; + @ApiModelProperty("疾病名称") private String diseaseName; diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/domain/vo/MedicationPlanVo.java b/intc-modules/intc-health/src/main/java/com/intc/health/domain/vo/MedicationPlanVo.java index 91a9533..11615f8 100644 --- a/intc-modules/intc-health/src/main/java/com/intc/health/domain/vo/MedicationPlanVo.java +++ b/intc-modules/intc-health/src/main/java/com/intc/health/domain/vo/MedicationPlanVo.java @@ -1,13 +1,13 @@ package com.intc.health.domain.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.JsonNode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; -import java.time.LocalDate; -import java.time.LocalDateTime; +import java.util.Date; /** * 用药计划VO @@ -62,10 +62,12 @@ public class MedicationPlanVo { private JsonNode timeSlots; @ApiModelProperty("开始日期") - private LocalDate startDate; + @JsonFormat(pattern = "yyyy-MM-dd") + private Date startDate; @ApiModelProperty("结束日期") - private LocalDate endDate; + @JsonFormat(pattern = "yyyy-MM-dd") + private Date endDate; @ApiModelProperty("是否开启提醒:1-是 0-否") private Integer remindEnabled; @@ -89,5 +91,6 @@ public class MedicationPlanVo { private Integer todayCompleted; @ApiModelProperty("创建时间") - private LocalDateTime createTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; } \ No newline at end of file diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/domain/vo/MedicationTaskVo.java b/intc-modules/intc-health/src/main/java/com/intc/health/domain/vo/MedicationTaskVo.java index 52d0c33..9cb2312 100644 --- a/intc-modules/intc-health/src/main/java/com/intc/health/domain/vo/MedicationTaskVo.java +++ b/intc-modules/intc-health/src/main/java/com/intc/health/domain/vo/MedicationTaskVo.java @@ -1,13 +1,12 @@ package com.intc.health.domain.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; +import java.util.Date; /** * 服药任务VO @@ -38,16 +37,19 @@ public class MedicationTaskVo { private String medicineName; @ApiModelProperty("计划服药日期") - private LocalDate plannedDate; + @JsonFormat(pattern = "yyyy-MM-dd") + private Date plannedDate; @ApiModelProperty("计划服药时间") - private LocalTime plannedTime; + @JsonFormat(pattern = "HH:mm:ss") + private Date plannedTime; @ApiModelProperty("计划剂量") private BigDecimal plannedDosage; @ApiModelProperty("实际服药时间") - private LocalDateTime actualTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date actualTime; @ApiModelProperty("实际剂量") private BigDecimal actualDosage; @@ -68,8 +70,10 @@ public class MedicationTaskVo { private Integer remindStatus; @ApiModelProperty("提醒时间") - private LocalDateTime remindTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date remindTime; @ApiModelProperty("创建时间") - private LocalDateTime createTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; } \ No newline at end of file diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/mapper/ChronicDiseaseRecordMapper.java b/intc-modules/intc-health/src/main/java/com/intc/health/mapper/ChronicDiseaseRecordMapper.java index 224f973..8680d1b 100644 --- a/intc-modules/intc-health/src/main/java/com/intc/health/mapper/ChronicDiseaseRecordMapper.java +++ b/intc-modules/intc-health/src/main/java/com/intc/health/mapper/ChronicDiseaseRecordMapper.java @@ -1,5 +1,6 @@ package com.intc.health.mapper; +import com.intc.common.datascope.annotation.DataScope; import java.util.List; import com.intc.health.domain.vo.ChronicDiseaseRecordVo; import com.intc.health.domain.dto.ChronicDiseaseRecordDto; @@ -27,6 +28,7 @@ public interface ChronicDiseaseRecordMapper * @param chronicDiseaseRecordDto 慢性疾病档案 * @return 慢性疾病档案集合 */ + @DataScope(businessAlias = "a") public List selectChronicDiseaseRecordList(ChronicDiseaseRecordDto chronicDiseaseRecordDto); /** diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/mapper/MedicationPlanMapper.java b/intc-modules/intc-health/src/main/java/com/intc/health/mapper/MedicationPlanMapper.java index 407cd7c..44c56b3 100644 --- a/intc-modules/intc-health/src/main/java/com/intc/health/mapper/MedicationPlanMapper.java +++ b/intc-modules/intc-health/src/main/java/com/intc/health/mapper/MedicationPlanMapper.java @@ -1,5 +1,6 @@ package com.intc.health.mapper; +import com.intc.common.datascope.annotation.DataScope; import com.intc.health.domain.MedicationPlan; import com.intc.health.domain.dto.MedicationPlanDto; import com.intc.health.domain.vo.MedicationPlanVo; @@ -23,6 +24,7 @@ public interface MedicationPlanMapper { /** * 查询用药计划列表 */ + @DataScope(businessAlias = "a") List selectList(MedicationPlanDto dto); /** diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/mapper/MedicationTaskMapper.java b/intc-modules/intc-health/src/main/java/com/intc/health/mapper/MedicationTaskMapper.java index cfb54a8..993cdfd 100644 --- a/intc-modules/intc-health/src/main/java/com/intc/health/mapper/MedicationTaskMapper.java +++ b/intc-modules/intc-health/src/main/java/com/intc/health/mapper/MedicationTaskMapper.java @@ -1,5 +1,6 @@ package com.intc.health.mapper; +import com.intc.common.datascope.annotation.DataScope; import com.intc.health.domain.MedicationTask; import com.intc.health.domain.dto.MedicationTaskDto; import com.intc.health.domain.vo.MedicationTaskVo; @@ -25,6 +26,7 @@ public interface MedicationTaskMapper { /** * 查询服药任务列表 */ + @DataScope(businessAlias = "a") List selectList(MedicationTaskDto dto); /** @@ -67,6 +69,11 @@ public interface MedicationTaskMapper { */ int countByPlanAndDate(@Param("planId") Long planId, @Param("date") LocalDate date); + /** + * 删除某计划某天的所有任务(用于重新生成时清理旧数据) + */ + int deleteByPlanAndDate(@Param("planId") Long planId, @Param("date") LocalDate date); + /** * 统计某计划某天的已服药数 */ @@ -87,21 +94,21 @@ public interface MedicationTaskMapper { /** * 获取总体统计 */ - java.util.Map getOverallStats(@Param("memberId") Long memberId, + java.util.Map getOverallStats(@Param("personId") Long personId, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate); /** * 获取每日统计 */ - List> getDailyStats(@Param("memberId") Long memberId, + List> getDailyStats(@Param("personId") Long personId, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate); /** * 获取时段统计 */ - List> getTimeSlotStats(@Param("memberId") Long memberId, + List> getTimeSlotStats(@Param("personId") Long personId, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate); } \ No newline at end of file diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/service/IMedicationTaskService.java b/intc-modules/intc-health/src/main/java/com/intc/health/service/IMedicationTaskService.java index 4354210..af445b9 100644 --- a/intc-modules/intc-health/src/main/java/com/intc/health/service/IMedicationTaskService.java +++ b/intc-modules/intc-health/src/main/java/com/intc/health/service/IMedicationTaskService.java @@ -42,7 +42,7 @@ public interface IMedicationTaskService { /** * 确认服药 */ - int confirm(Long id, Integer confirmType); + int confirm(Long id, Integer confirmType, String confirmTime); /** * 跳过服药 diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/MedicationPlanServiceImpl.java b/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/MedicationPlanServiceImpl.java index 9d426ab..8188bdb 100644 --- a/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/MedicationPlanServiceImpl.java +++ b/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/MedicationPlanServiceImpl.java @@ -27,19 +27,12 @@ public class MedicationPlanServiceImpl implements IMedicationPlanService { @Override public MedicationPlanVo selectById(Long id) { - MedicationPlanVo vo = planMapper.selectById(id); - if (vo != null) { - // 统计今日任务情况 - // TODO: 添加今日任务统计 - } - return vo; + return planMapper.selectById(id); } @Override public List selectList(MedicationPlanDto dto) { - List list = planMapper.selectList(dto); - // TODO: 可以添加今日任务统计 - return list; + return planMapper.selectList(dto); } @Override diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/MedicationTaskServiceImpl.java b/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/MedicationTaskServiceImpl.java index ce00e2b..db3bd6a 100644 --- a/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/MedicationTaskServiceImpl.java +++ b/intc-modules/intc-health/src/main/java/com/intc/health/service/impl/MedicationTaskServiceImpl.java @@ -10,7 +10,9 @@ import com.intc.health.service.IMedicationTaskService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.List; /** @@ -58,12 +60,27 @@ public class MedicationTaskServiceImpl implements IMedicationTaskService { } @Override - public int confirm(Long id, Integer confirmType) { + public int confirm(Long id, Integer confirmType, String confirmTime) { MedicationTask task = new MedicationTask(); task.setId(id); task.setStatus(1); // 已服药 task.setConfirmType(confirmType != null ? confirmType : 1); - task.setActualTime(LocalDateTime.now()); + // 优先使用前端传入的实际服药时间,没有则用当前时间 + if (confirmTime != null && !confirmTime.isEmpty()) { + try { + LocalTime time = LocalTime.parse(confirmTime, java.time.format.DateTimeFormatter.ofPattern("HH:mm")); + task.setActualTime(LocalDateTime.of(LocalDate.now(), time)); + } catch (Exception e1) { + try { + LocalTime time = LocalTime.parse(confirmTime, java.time.format.DateTimeFormatter.ofPattern("HH:mm:ss")); + task.setActualTime(LocalDateTime.of(LocalDate.now(), time)); + } catch (Exception e2) { + task.setActualTime(LocalDateTime.now()); + } + } + } else { + task.setActualTime(LocalDateTime.now()); + } task.setUpdateBy(SecurityUtils.getUsername()); task.setUpdateTime(DateUtils.getNowDate()); return taskMapper.update(task); diff --git a/intc-modules/intc-health/src/main/java/com/intc/health/task/MedicationTaskJob.java b/intc-modules/intc-health/src/main/java/com/intc/health/task/MedicationTaskJob.java index efdc836..2dd3168 100644 --- a/intc-modules/intc-health/src/main/java/com/intc/health/task/MedicationTaskJob.java +++ b/intc-modules/intc-health/src/main/java/com/intc/health/task/MedicationTaskJob.java @@ -16,9 +16,11 @@ import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -70,19 +72,26 @@ public class MedicationTaskJob { continue; } - // 检查是否已生成过任务 - int existCount = taskMapper.countByPlanAndDate(plan.getId(), date); - if (existCount > 0) { + // 先计算本次应生成的任务列表 + List tasks = generateTasksForPlan(plan, date); + if (tasks.isEmpty()) { continue; } - // 生成任务 - List tasks = generateTasksForPlan(plan, date); - if (!tasks.isEmpty()) { - taskMapper.batchInsert(tasks); - generatedCount += tasks.size(); - log.info("计划 {} 在 {} 生成了 {} 条任务", plan.getPlanName(), date, tasks.size()); + // 检查已生成的任务数,只补充未生成的部分(防止重复) + int existCount = taskMapper.countByPlanAndDate(plan.getId(), date); + if (existCount >= tasks.size()) { + // 已全量生成,跳过 + continue; } + + // 未全量生成时,删除旧的再重新全量插入(保证幂等) + if (existCount > 0) { + taskMapper.deleteByPlanAndDate(plan.getId(), date); + } + taskMapper.batchInsert(tasks); + generatedCount += tasks.size(); + log.info("计划 {} 在 {} 生成了 {} 条任务", plan.getPlanName(), date, tasks.size()); } catch (Exception e) { log.error("生成计划 {} 的任务失败: {}", plan.getId(), e.getMessage(), e); } @@ -96,10 +105,10 @@ public class MedicationTaskJob { */ private boolean shouldTakeMedicineOnDate(MedicationPlanVo plan, LocalDate date) { // 检查日期范围 - if (plan.getStartDate() != null && date.isBefore(plan.getStartDate())) { + if (plan.getStartDate() != null && date.isBefore(toLocalDate(plan.getStartDate()))) { return false; } - if (plan.getEndDate() != null && date.isAfter(plan.getEndDate())) { + if (plan.getEndDate() != null && date.isAfter(toLocalDate(plan.getEndDate()))) { return false; } @@ -152,7 +161,7 @@ public class MedicationTaskJob { * 隔天服药判断 */ private boolean shouldTakeOnAlternate(MedicationPlanVo plan, LocalDate date) { - LocalDate startDate = plan.getStartDate(); + LocalDate startDate = plan.getStartDate() != null ? toLocalDate(plan.getStartDate()) : null; if (startDate == null) { startDate = date; } @@ -182,23 +191,25 @@ public class MedicationTaskJob { List tasks = new ArrayList<>(); JsonNode timeSlots = plan.getTimeSlots(); + log.info("计划 {} timeSlots原始值={}, isArray={}, nodeType={}", + plan.getId(), timeSlots, timeSlots != null && timeSlots.isArray(), timeSlots != null ? timeSlots.getNodeType() : null); + // TextNode说明存储时被二次序列化,需要再解析一次 + if (timeSlots != null && timeSlots.isTextual()) { + try { + timeSlots = new com.fasterxml.jackson.databind.ObjectMapper().readTree(timeSlots.asText()); + } catch (Exception e) { + timeSlots = null; + } + } if (timeSlots == null || !timeSlots.isArray()) { // 如果没有配置时段,使用默认时段 timeSlots = createDefaultTimeSlots(plan); } for (JsonNode slot : timeSlots) { - if (!slot.has("enabled") || !slot.get("enabled").asBoolean(true)) { - continue; - } - - String timeStr = slot.has("time") ? slot.get("time").asText() : "08:00"; - LocalTime time = parseTime(timeStr); - + String timeStr = slot.asText(); BigDecimal dosage = plan.getDosagePerTime(); - if (slot.has("dosage")) { - dosage = new BigDecimal(slot.get("dosage").asText()); - } + LocalTime time = parseTime(timeStr); MedicationTask task = new MedicationTask(); task.setPlanId(plan.getId()); @@ -230,6 +241,13 @@ public class MedicationTaskJob { } } + /** + * Date 转 LocalDate + */ + private LocalDate toLocalDate(Date date) { + return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + } + /** * 解析时间字符串 */ diff --git a/intc-modules/intc-health/src/main/resources/mapper/health/ChronicDiseaseRecordMapper.xml b/intc-modules/intc-health/src/main/resources/mapper/health/ChronicDiseaseRecordMapper.xml index baadaf2..b2aac63 100644 --- a/intc-modules/intc-health/src/main/resources/mapper/health/ChronicDiseaseRecordMapper.xml +++ b/intc-modules/intc-health/src/main/resources/mapper/health/ChronicDiseaseRecordMapper.xml @@ -8,7 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -28,7 +28,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select a.id, a.person_id, a.disease_name, a.disease_code, a.diagnosis_date, + select a.id, a.person_id,a.disease_id, a.disease_name, a.disease_code, a.diagnosis_date, a.disease_status, a.main_doctor, a.hospital, a.department, a.notes, a.is_active, a.create_by, a.create_time, a.update_by, a.update_time, a.del_flag, a.remark, p.name as person_name @@ -62,6 +62,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and a.diagnosis_date <= #{diagnosisDateEnd} + + ${params.dataScope} order by a.create_time desc @@ -81,6 +83,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" id, person_id, + disease_id, disease_name, disease_code, diagnosis_date, @@ -100,6 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id}, #{personId}, + #{diseaseId}, #{diseaseName}, #{diseaseCode}, #{diagnosisDate}, @@ -122,6 +126,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update chronic_disease_record person_id = #{personId}, + disease_id = #{diseaseId}, disease_name = #{diseaseName}, disease_code = #{diseaseCode}, diagnosis_date = #{diagnosisDate}, diff --git a/intc-modules/intc-health/src/main/resources/mapper/health/MedicationPlanMapper.xml b/intc-modules/intc-health/src/main/resources/mapper/health/MedicationPlanMapper.xml index e11f3a2..29bb0e1 100644 --- a/intc-modules/intc-health/src/main/resources/mapper/health/MedicationPlanMapper.xml +++ b/intc-modules/intc-health/src/main/resources/mapper/health/MedicationPlanMapper.xml @@ -24,6 +24,8 @@ + + @@ -33,7 +35,9 @@ a.medicine_name, a.specification, a.dosage_per_time, a.dosage_unit, a.frequency_type, a.frequency_config, a.time_slots, a.start_date, a.end_date, a.remind_enabled, a.remind_advance_min, a.notify_family, a.family_member_ids, - a.status, a.create_time + a.status, a.create_time, + (select count(1) from medication_task t where t.plan_id = a.id and t.del_flag = 0 and t.planned_date = current_date) as today_total, + (select count(1) from medication_task t where t.plan_id = a.id and t.del_flag = 0 and t.planned_date = current_date and t.status = 1) as today_completed from medication_plan a left join health_person p on a.person_id = p.id left join chronic_disease_record c on a.chronic_disease_id = c.id @@ -60,6 +64,8 @@ and (a.plan_name like '%' || #{keyword} || '%' or a.medicine_name like '%' || #{keyword} || '%') + + ${params.dataScope} order by a.create_time desc diff --git a/intc-modules/intc-health/src/main/resources/mapper/health/MedicationTaskMapper.xml b/intc-modules/intc-health/src/main/resources/mapper/health/MedicationTaskMapper.xml index f143cd8..bffa40a 100644 --- a/intc-modules/intc-health/src/main/resources/mapper/health/MedicationTaskMapper.xml +++ b/intc-modules/intc-health/src/main/resources/mapper/health/MedicationTaskMapper.xml @@ -52,6 +52,8 @@ and a.medicine_name like '%' || #{keyword} || '%' + + ${params.dataScope} order by a.planned_date desc, a.planned_time desc @@ -118,6 +120,11 @@ where del_flag = 0 and plan_id = #{planId} and planned_date = #{date} + + delete from medication_task + where plan_id = #{planId} and planned_date = #{date} and status = 0 + +