| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.smartor.common; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.smartor.domain.*; |
| | | import com.smartor.mapper.ServiceSubtaskMapper; |
| | | import com.smartor.mapper.ServiceSubtaskPreachformMapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | | import org.apache.commons.lang3.ObjectUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * ä»»å¡ç»ï¼appltype=5ï¼subtask çæå¨ |
| | | * <p> |
| | | * åä¸èè´£ï¼æ ¹æ® schedule + detailList 为æ¯ä¸ªæ£è
æ´¾ç subtaskã |
| | | * åæ¶æå¡ä¸¤æ¡è·¯å¾ï¼ |
| | | * (a) å端æå¨å¾éæ£è
ï¼insertOrUpdateTaskï¼ ââ æ§ 6 åå
¥å£ï¼ |
| | | * (b) HIS èªå¨çº³å
¥æ°åºé¢æ£è
ï¼PatMedInhospServiceImpl.writeInSubTaskï¼ ââ æ° 5 åå
¥å£ã |
| | | * 两æ¡è·¯å¾ç»ä¸ä» baseSubtask ä¸ååºåæ¥å段ï¼é¿å
çæå¨ä¸ PatTaskRelevance/ServiceTaskVO è¦åã |
| | | * |
| | | * @author smartor |
| | | * @date 2026-06-30 |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class ScheduleSubtaskBuilder { |
| | | |
| | | @Autowired |
| | | private ServiceSubtaskMapper serviceSubtaskMapper; |
| | | |
| | | @Autowired |
| | | private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper; |
| | | |
| | | /** |
| | | * 为å个æ£è
æ´¾ç subtaskï¼appltype=5ï¼ââ è§£è¦å
¥å£ï¼èªå¨çº³å
¥ & æå¨å¾éç»ä¸èµ°è¿éï¼ã |
| | | * <p> |
| | | * é循ç¯ï¼æ detailList 䏿¬¡æ§éºå¹³ N æ¡ï¼ |
| | | * å¾ªç¯ ï¼æ schedule.currentLoopCount çæå½åè½® N æ¡ï¼åç»è½®æ¬¡ç±è°åº¦å¨æ»å¨å»ºã |
| | | * |
| | | * @param serviceTask 主任å¡ï¼å·²è½åºï¼ |
| | | * @param schedule å·²è½åºç主计å |
| | | * @param detailList æç»åè¡¨ï¼æ seq ååºï¼ |
| | | * @param baseSubtask æ¨¡æ¿ subtaskï¼å·²å¡«å
æ£è
åºç¡ä¿¡æ¯ + åºåæ¥å段ï¼ï¼æ¹æ³å
伿·±æ·è´ |
| | | * @param preachformList åéæ¹å¼ï¼è°ç¨æ¹å·²è§£æå¥½ï¼å¯ä¸ºç©ºï¼ |
| | | */ |
| | | public void buildSubtasksForPatient(ServiceTask serviceTask, |
| | | ServiceTaskSchedule schedule, |
| | | List<ServiceTaskScheduleDetail> detailList, |
| | | ServiceSubtask baseSubtask, |
| | | List<Map<String, Object>> preachformList) { |
| | | if (CollectionUtils.isEmpty(detailList)) { |
| | | throw new BaseException("ä»»å¡ç»æç»ä¸ºç©ºï¼æ æ³çæ subtask, taskid=" + serviceTask.getTaskid()); |
| | | } |
| | | |
| | | Date benchmark = resolveBenchmark(schedule, baseSubtask); |
| | | long currentLoop = schedule.getCurrentLoopCount() == null ? 0L : schedule.getCurrentLoopCount(); |
| | | |
| | | for (ServiceTaskScheduleDetail detail : detailList) { |
| | | ServiceSubtask subtask = copyFromBase(baseSubtask); |
| | | |
| | | // åæº¯å段 |
| | | subtask.setScheduleId(schedule.getId()); |
| | | subtask.setScheduleDetailId(detail.getId()); |
| | | subtask.setScheduleSeq(detail.getSeq()); |
| | | subtask.setLoopCount(currentLoop); |
| | | |
| | | // 模æ¿ï¼detail ä¼å
äº task |
| | | if (detail.getTemplateid() != null) { |
| | | subtask.setTemplateid(detail.getTemplateid()); |
| | | subtask.setTemplatename(detail.getTemplatename()); |
| | | } |
| | | if (detail.getLibtemplateid() != null) { |
| | | subtask.setLibtemplateid(detail.getLibtemplateid()); |
| | | } |
| | | |
| | | // æ¶é´ï¼åºåæ¥ + dayOffset |
| | | Date visitTime = addDays(benchmark, detail.getDayOffset()); |
| | | subtask.setVisitTime(visitTime); |
| | | subtask.setSenddate(visitTime); |
| | | subtask.setLongSendTime(visitTime); |
| | | |
| | | // ç¶æï¼ä¸åæµç¨ä¸è´ï¼æ°å»ºå置为å¾
åé |
| | | subtask.setSendstate(2L); |
| | | subtask.setCreateTime(DateUtils.getNowDate()); |
| | | subtask.setUpdateTime(DateUtils.getNowDate()); |
| | | |
| | | serviceSubtaskMapper.insertServiceSubtask(subtask); |
| | | |
| | | insertPreachform(serviceTask, preachformList, subtask); |
| | | |
| | | log.info("[ä»»å¡ç»] taskid={} patid={} çæ subtask id={} seq={} dayOffset={} visitTime={}", |
| | | serviceTask.getTaskid(), baseSubtask.getPatid(), |
| | | subtask.getId(), detail.getSeq(), detail.getDayOffset(), visitTime); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å
¼å®¹å
¥å£ï¼å端æå¨å¾éæ£è
ï¼insertOrUpdateTaskï¼ã |
| | | * æ patTaskRelevance çåºåæ¥å段åå¡«å° baseSubtask åï¼å§æç»è§£è¦å
¥å£ã |
| | | */ |
| | | public void buildSubtasksForPatient(ServiceTask serviceTask, |
| | | List<Map<String, Object>> preachformList, |
| | | ServiceTaskSchedule schedule, |
| | | List<ServiceTaskScheduleDetail> scheduleDetailList, |
| | | PatTaskRelevance patTaskRelevance, |
| | | ServiceSubtask baseSubtask) { |
| | | // åå¡«åºåæ¥åæ®µï¼æå¨è·¯å¾ç baseSubtask ç± VO æ¼è£
ï¼åºåæ¥å段å¯è½æªå¡«å
¨ï¼ |
| | | if (baseSubtask.getStarttime() == null) { |
| | | baseSubtask.setStarttime(patTaskRelevance.getInhosptime() != null |
| | | ? patTaskRelevance.getInhosptime() : patTaskRelevance.getStarttime()); |
| | | } |
| | | if (baseSubtask.getEndtime() == null) { |
| | | baseSubtask.setEndtime(patTaskRelevance.getEndtime()); |
| | | } |
| | | if (baseSubtask.getAdmindate() == null) { |
| | | baseSubtask.setAdmindate(patTaskRelevance.getVisittime()); |
| | | } |
| | | buildSubtasksForPatient(serviceTask, schedule, scheduleDetailList, baseSubtask, preachformList); |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ® scheduleBenchmark è§£æåºåæ¶é´ï¼ |
| | | * 0-èªå®ä¹æ¶é´ 1-å
¥é¢æ¶é´ 2-åºé¢æ¶é´ 3-å°±è¯æ¶é´ 4-å
¥ç»æ¶é´ |
| | | * å
¨é¨ä» baseSubtask åï¼åä¸å°å
åºå½åæ¶é´ã |
| | | */ |
| | | private Date resolveBenchmark(ServiceTaskSchedule schedule, ServiceSubtask base) { |
| | | Integer benchmark = schedule.getScheduleBenchmark() == null ? 0 : schedule.getScheduleBenchmark(); |
| | | Date now = DateUtils.getNowDate(); |
| | | switch (benchmark) { |
| | | case 1: |
| | | return base.getStarttime() != null ? base.getStarttime() : now; |
| | | case 2: |
| | | return base.getEndtime() != null ? base.getEndtime() : now; |
| | | case 3: |
| | | return base.getAdmindate() != null ? base.getAdmindate() : now; |
| | | case 4: |
| | | return base.getCreateTime() != null ? base.getCreateTime() : now; |
| | | case 0: |
| | | default: |
| | | return schedule.getScheduleBenchmarkCustomTime() != null |
| | | ? schedule.getScheduleBenchmarkCustomTime() : now; |
| | | } |
| | | } |
| | | |
| | | private Date addDays(Date base, int dayOffset) { |
| | | Calendar c = Calendar.getInstance(); |
| | | c.setTime(base); |
| | | c.add(Calendar.DAY_OF_MONTH, dayOffset); |
| | | return c.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * å service_subtask_preachformï¼åéæ¹å¼ç±è°ç¨æ¹å¤å¥½ã |
| | | */ |
| | | private void insertPreachform(ServiceTask serviceTask, List<Map<String, Object>> pfList, ServiceSubtask subtask) { |
| | | if (CollectionUtils.isEmpty(pfList)) { |
| | | return; |
| | | } |
| | | for (Map<String, Object> map : pfList) { |
| | | ServiceSubtaskPreachform pf = new ServiceSubtaskPreachform(); |
| | | pf.setSort(ObjectUtils.isEmpty(map.get("sort")) ? 0 : Long.valueOf(map.get("sort").toString())); |
| | | pf.setPreachform(ObjectUtils.isEmpty(map.get("preachform")) ? "" : map.get("preachform").toString()); |
| | | pf.setCompensateTime(ObjectUtils.isEmpty(map.get("compensateTime")) ? "" : map.get("compensateTime").toString()); |
| | | pf.setTaskid(serviceTask.getTaskid()); |
| | | pf.setSubid(subtask.getId()); |
| | | pf.setSendstate("1"); |
| | | pf.setOrgid(serviceTask.getOrgid()); |
| | | pf.setCreateTime(new Date()); |
| | | serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(pf); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ·±æ·è´ baseSubtask å°ä¸ä¸ªæ°å¯¹è±¡ï¼æ¯æ¬¡ insert å id ä¼ååï¼å¿
é¡»ç¬ç«å®ä¾ï¼ã |
| | | * ç¨ fastjson åæ·±æ·è´ï¼çä¸å setã |
| | | */ |
| | | private ServiceSubtask copyFromBase(ServiceSubtask base) { |
| | | String json = JSON.toJSONString(base); |
| | | ServiceSubtask copy = JSON.parseObject(json, ServiceSubtask.class); |
| | | // 主é®ãid å¿
é¡»æ¸
æï¼å¦å useGeneratedKeys ä»ä¼ç¨ä¸è½®ç id 触å主é®å²çª |
| | | copy.setId(null); |
| | | return copy; |
| | | } |
| | | } |