| | |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- |
| | | æ°æ®é鿍¡åï¼HIS ééçè°åº¦ç¼æï¼ééå®ç°åç»åæ¹æ¬å
¥ï¼ï¼ |
| | | ä¾èµ ruoyi-common + ruoyi-systemï¼åªååæ°é
ç½® APIï¼ï¼ä¸ä¾èµ smartorã |
| | | --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-datacollection</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | </dependencyManagement> |
| | | |
| | |
| | | <module>ruoyi-task</module> |
| | | <!-- çµè¯æ¨¡åï¼ä¾èµ ruoyi-taskï¼ä»»å¡æ°æ®ï¼ä¸ ruoyi-templateï¼æ¨¡æ¿è¯æ¯ï¼ï¼å¿
é¡»æå¨ ruoyi-task ä¹åãsmartor ä¹å --> |
| | | <module>ruoyi-phone</module> |
| | | <!-- |
| | | æ°æ®é鿍¡åï¼åªä¾èµ ruoyi-common ä¸ ruoyi-systemï¼åæ°é
ç½® APIï¼ï¼ |
| | | ä¸ä¾èµ smartor ââ HIS ééå®ç°ææ¶çå¨ smartorï¼ç» ruoyi-common çå¥çº¦ |
| | | com.ruoyi.common.core.service.HisGatherApi è°ç¨ï¼smartor ä¾§ HisGatherApiBridge å®ç°ï¼ã |
| | | --> |
| | | <module>ruoyi-datacollection</module> |
| | | <!-- smartor ä¾èµ ruoyi-satisfaction / ruoyi-inhospvisit / ruoyi-publicity / ruoyi-outpatientvisit / ruoyi-othervisit / ruoyi-template / ruoyi-task / ruoyi-phoneï¼å¿
é¡»ææå --> |
| | | <module>smartor</module> |
| | | </modules> |
| | |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-phone</artifactId> |
| | | </dependency> |
| | | <!-- |
| | | æ°æ®é鿍¡åï¼HIS ééçè°åº¦ç¼æï¼ã |
| | | â ï¸ åæ ·ãå¿
é¡»æ¾å¼å£°æãï¼æ¬æ¨¡åè¦æ ruoyi-datacollection æè¿ smartor-suifang.jarï¼ |
| | | å¦å ruoyi-quartz ç宿¶ä»»å¡å
¥å£ ryTask.dealHisData('...') ä¼å 缺 Bean è失败ã |
| | | --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-datacollection</artifactId> |
| | | </dependency> |
| | | <!-- https://mvnrepository.com/artifact/net.glxn.qrgen/javase --> |
| | | <dependency> |
| | | <groupId>net.glxn.qrgen</groupId> |
| | |
| | | #ééçå¯é¥ |
| | | dingAppid: dingn8iip5ubj7clrrsv |
| | | dingAppSecret: qlEK8D3oOVwGPOTiBQIBYTqQVlAfy9S_qQizEQFjJdSScwemWFryg4gbneu-NqWD |
| | | # ééåºç¨ agentIdï¼DingTalkServiceImpl @Value("${dingAppAgentId}") æ é»è®¤å¼ï¼ç¼ºå¤±ä¼å¯å¨å¤±è´¥ï¼ |
| | | # æä¸ä¸½æ°´/çç«åå¾·ä¿æä¸è´ï¼ååéä¸è¥ç¨ç¬ç«ééåºç¨ï¼è¯·æ¿æ¢ä¸ºå®èªå·±ç agentId |
| | | dingAppAgentId: 4992829038 |
| | | |
| | | # websocketè¶
æ¶æ¶é´ |
| | | server: |
| | |
| | | # å½é
åèµæºæä»¶è·¯å¾ |
| | | basename: i18n/messages |
| | | profiles: |
| | | active: druid |
| | | active: sltd |
| | | |
| | | # æä»¶ä¸ä¼ |
| | | servlet: |
| | |
| | | * @return true = è³å°åå¨ä¸æ¡ |
| | | */ |
| | | boolean existsSubtaskWithStates(Long patid, java.util.List<Long> sendstates, String serviceType); |
| | | |
| | | /** |
| | | * å¤æææ£è
ãå䏿¬¡åºå
¥é¢è®°å½ + åä¸ä¸ªä»»å¡ãæ¯å¦<b>å·²ç»çæè¿</b>åä»»å¡ã |
| | | * |
| | | * <h3>为ä»ä¹éè¦å®ï¼2026-10 线ä¸é®é¢ï¼</h3> |
| | | * åºé¢éè®¿æ«ææ¯æ {@code pat_med_inhosp.deptcheck_flag = '0'} 忣è
çã |
| | | * 䏿¦æ å¿ä½å 为è§åé
ç½®/å¼å¸¸æ²¡è¢«æ¹æ 1 æ 2ï¼ä¸ä¸è½®æ«æä¼æåä¸ä¸ªæ£è
åå¤çä¸éï¼ |
| | | * è {@code writeInSubTask} ç"åæ§"åæ¯å¨ {@code endTime1 == endTime}ï¼å䏿¬¡åºé¢ï¼æ¶ |
| | | * èµ°çæ¯ else ââ <b>ä¼å insert 䏿¡ sendstate=4 çåç¨è¡</b>ï¼ |
| | | * äºæ¯åä¸ä¸ªæ£è
æ¯æ¬¡è·æ¹é½å¤ä¸æ¡ï¼æç»å䏿£è
å åæ¡åä»»å¡ã |
| | | * <p> |
| | | * è¿ä¸ªæ¹æ³æ¯é£é"æåé²çº¿"ï¼è½åºåæ |
| | | * {@code patid + inhospid + taskid}ï¼ä¸ {@code del_flag = 0}ï¼å¤éï¼ |
| | | * å·²åå¨å°±ä¸åå ãå£å¾æ¯"å䏿¬¡åºé¢ + åä¸ä¸ªä»»å¡åªåºæä¸æ¡åä»»å¡"ï¼ |
| | | * <b>ä¸è·¨ä½é¢è®°å½</b>ï¼å次å
¥é¢æ¢äº inhospid ä»ä¼æ°å»ºï¼è¿æ¯åæè¯ä¹ï¼ã |
| | | * |
| | | * @param patid æ£è
æ¡£æ¡ID |
| | | * @param inhospid åºå
¥é¢è®°å½IDï¼ä¸º {@code null} æ¶éå为åªç {@code patid + taskid} |
| | | * @param taskid ä»»å¡ID |
| | | * @return true = å·²åå¨ï¼ä¸åºå insertï¼ |
| | | */ |
| | | boolean existsSubtask(Long patid, Long inhospid, Long taskid); |
| | | } |
| | |
| | | * <tr><td>{@code patArchive.telcode}ï¼ç©ºå {@code relativetelcode}ï¼</td><td>{@code phone}</td></tr> |
| | | * <tr><td>{@code patArchive.sex} / {@code age}</td><td>{@code sex} / {@code age}</td></tr> |
| | | * <tr><td>{@code patMedOuthosp.id}</td><td>{@code inhospid}</td></tr> |
| | | * <tr><td>{@code patMedOuthosp.outhospno}</td><td>{@code hospno}</td></tr> |
| | | * </table> |
| | | * æä»¥æ¬ç±»<b>åª</b>è¡¥ä¸ä¸ªç¶ç±»ç¡®å®æ²¡æçåæ®µï¼ä¸åéå¤å®ä¹ ââ |
| | | * æä»¥æ¬ç±»<b>åª</b>è¡¥ç¶ç±»ç¡®å®æ²¡æçåæ®µï¼ä¸åéå¤å®ä¹ ââ |
| | | * éå¤å®ä¹ä¼è®©"åªä¸ªåæ®µææ¯çæ£è½åºç"åå¾ä¸æ¸
æ¥ã |
| | | * <p> |
| | | * â ï¸ {@code hospno} åå
åªå¨æ¬ç±»é声æï¼å¯¼è´åºé¢é¾è·¯ï¼{@code addSubTaskByRule}ï¼ |
| | | * æ ¹æ¬æ²¡æè¿ä¸ªè½½ä½ã{@code service_subtask.hospno} ä¸ç´è½ç©ºã |
| | | * ç°å·²ä¸æå°ç¶ç±» {@link VisitSubtaskDraft}ï¼æ¬ç±»ä¸åéå¤å£°æã |
| | | * |
| | | * <h3>为ä»ä¹è¦åç¬ä¸ä¸ªç±»ï¼è䏿¯å¾ VisitSubtaskDraft éå åæ®µï¼</h3> |
| | | * {@code insertServiceSubtask} æ 39 个æ¡ä»¶åï¼{@code <if test="xxx != null">}ï¼ã |
| | | * ç»å
±äº«ç {@code VisitSubtaskDraft} å åæ®µï¼å°±å¿
须忶å³å®"è¦ä¸è¦å¨ |
| | | * {@code VisitTaskCreateApiBridge#toSubtaskEntity} éè¡¥æ å°"ââ |
| | | * {@code VisitTaskCreateApiImpl#toSubtaskEntity} éè¡¥æ å°"ââ |
| | | * è¡¥äºæ å°ä¼è®©<b>åºå
¥é¢é£æ¡å·²éªæ¶çåå
¥è·¯å¾å¤åå</b>ã |
| | | * æä»¥æ"å¦å»ºé¨è¯ä¸ç¨è稿"å¤çï¼{@code VisitSubtaskDraft} ä¸åºå
¥é¢é¾è·¯<b>ä¸è¡ä¸å¨</b>ï¼ |
| | | * æä»¥æ"å¦å»ºé¨è¯ä¸ç¨è稿"å¤çï¼é¨è¯ç¬æçåæ®µæ¾æ¬ç±»ï¼ |
| | | * æ¡¥éç¨ {@code instanceof} åæµæ å°ã |
| | | * |
| | | * @see VisitSubtaskDraft |
| | |
| | | public class OuthospSubtaskDraft extends VisitSubtaskDraft { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * é¨è¯å·ï¼å {@code patMedOuthosp.outhospno} â è½åºå° {@code service_subtask.hospno}ï¼ã |
| | | * <p> |
| | | * â ï¸ ç¶ç±» {@link VisitSubtaskDraft} <b>没æ</b> {@code hospno} åæ®µ |
| | | * ï¼{@code ServiceSubtask} å®ä½æï¼ç¶ç±»æ¼äºï¼ï¼æä»¥è¿éæ¯å¿
éçè¡¥å
ã |
| | | */ |
| | | private String hospno; |
| | | |
| | | /** |
| | | * é¨è¯å°±è¯æ¥æï¼å {@code patMedOuthosp.admitdate}ï¼ã |
| | |
| | | * ä¸å
¨ä»æ 人读åå® ââ ä¸è¦æå®ä¸è¿éç {@code hospType} 混为ä¸è°ã |
| | | */ |
| | | private String hospType; |
| | | |
| | | public String getHospno() { |
| | | return hospno; |
| | | } |
| | | |
| | | public void setHospno(String hospno) { |
| | | this.hospno = hospno; |
| | | } |
| | | |
| | | public Date getAdmitdate() { |
| | | return admitdate; |
| | |
| | | /** ä»»å¡åç§° */ |
| | | private String taskName; |
| | | |
| | | /** ä»»å¡æè¿°ï¼è½åºå° {@code service_subtask.task_desc}ï¼ */ |
| | | private String taskDesc; |
| | | |
| | | /** ä»»å¡ç±»åï¼"3" = éç¥ç±»ï¼å³å® visitTime æ¯å¦æå N 天ï¼è§è¿ç§»å L1188-1203ï¼ */ |
| | | private String type; |
| | | |
| | |
| | | |
| | | /** è¯é³æ¨¡æ¿IDï¼ååæ®µæ¯ Stringï¼è¿ç§»åç¨ Long.valueOf() 转æ¢ï¼ */ |
| | | private String libtemplateid; |
| | | |
| | | /** è¯é³æ¨¡æ¿åç§°ï¼è½åºå° {@code service_subtask.libtemplatename}ï¼ */ |
| | | private String libtemplatename; |
| | | |
| | | /** æ¨é/å鿥å移天æ°ï¼å sendDayï¼ç¼ºçæ 1 å¤çï¼ */ |
| | | private Long sendDay; |
| | |
| | | |
| | | /** å®£ææ¨¡æ¿ï¼å preachform çåä¹å段ï¼ç»è£
æ¶ä¹å¨ç¨ï¼ */ |
| | | private String hosType; |
| | | |
| | | // ------------------------------------------------------------------ |
| | | // ä»¥ä¸ 6 ä¸ªæ¯ DtoConversionUtils.sourceToTarget æ·è´ãä¸åå®ç°ç |
| | | // insertServiceSubtask ä¼è½åºçåãè¡¥é½å®ä»¬ä¹åï¼ |
| | | // æ°é¾è·¯éè¿äºåä¼éé»è½ç©ºï¼XML æ¯ <if test="xxx != null">ï¼ã |
| | | // ------------------------------------------------------------------ |
| | | |
| | | /** GUIDï¼å serviceTask.guid â service_subtask.guidï¼ */ |
| | | private String guid; |
| | | |
| | | /** pidï¼å serviceTask.pid æ¯ Integerï¼ç®æ ServiceSubtask.pid æ¯ Long ââ æ·è´æ¶åäºè½¬æ¢ï¼ */ |
| | | private Integer pid; |
| | | |
| | | /** åéç±»åï¼å serviceTask.sendType æ¯ Longï¼ç®æ ServiceSubtask.sendType æ¯ Stringï¼ */ |
| | | private Long sendType; |
| | | |
| | | /** æ¯å¦å·²ä¸ä¼ ï¼å serviceTask.isupload â service_subtask.isuploadï¼ */ |
| | | private Long isupload; |
| | | |
| | | /** ææ¬åæ°ï¼å serviceTask.textParam â service_subtask.text_paramï¼ */ |
| | | private String textParam; |
| | | |
| | | /** ä¸ä¼ æ¶é´ï¼å serviceTask.uploadTime â service_subtask.upload_timeï¼ */ |
| | | private java.util.Date uploadTime; |
| | | |
| | | /** æ´æ°äººï¼å updateByï¼è¿ç§»åå¤å¤ setUpdateBy(serviceTask.getUpdateBy())ï¼ */ |
| | | private String updateBy; |
| | |
| | | |
| | | public void setTaskName(String taskName) { |
| | | this.taskName = taskName; |
| | | } |
| | | |
| | | public String getTaskDesc() { |
| | | return taskDesc; |
| | | } |
| | | |
| | | public void setTaskDesc(String taskDesc) { |
| | | this.taskDesc = taskDesc; |
| | | } |
| | | |
| | | public String getType() { |
| | |
| | | |
| | | public void setLibtemplateid(String libtemplateid) { |
| | | this.libtemplateid = libtemplateid; |
| | | } |
| | | |
| | | public String getLibtemplatename() { |
| | | return libtemplatename; |
| | | } |
| | | |
| | | public void setLibtemplatename(String libtemplatename) { |
| | | this.libtemplatename = libtemplatename; |
| | | } |
| | | |
| | | public Long getSendDay() { |
| | |
| | | this.hosType = hosType; |
| | | } |
| | | |
| | | public String getGuid() { |
| | | return guid; |
| | | } |
| | | |
| | | public void setGuid(String guid) { |
| | | this.guid = guid; |
| | | } |
| | | |
| | | public Integer getPid() { |
| | | return pid; |
| | | } |
| | | |
| | | public void setPid(Integer pid) { |
| | | this.pid = pid; |
| | | } |
| | | |
| | | public Long getSendType() { |
| | | return sendType; |
| | | } |
| | | |
| | | public void setSendType(Long sendType) { |
| | | this.sendType = sendType; |
| | | } |
| | | |
| | | public Long getIsupload() { |
| | | return isupload; |
| | | } |
| | | |
| | | public void setIsupload(Long isupload) { |
| | | this.isupload = isupload; |
| | | } |
| | | |
| | | public String getTextParam() { |
| | | return textParam; |
| | | } |
| | | |
| | | public void setTextParam(String textParam) { |
| | | this.textParam = textParam; |
| | | } |
| | | |
| | | public java.util.Date getUploadTime() { |
| | | return uploadTime; |
| | | } |
| | | |
| | | public void setUploadTime(java.util.Date uploadTime) { |
| | | this.uploadTime = uploadTime; |
| | | } |
| | | |
| | | public String getUpdateBy() { |
| | | return updateBy; |
| | | } |
| | |
| | | private Long inhospid; |
| | | /** ä½é¢æµæ°´å· */ |
| | | private String serialnum; |
| | | /** |
| | | * å°±è¯ç¼å· ââ è½åºå° {@code service_subtask.hospno}ï¼"对åºç outhospnoãinhospno"ï¼ã |
| | | * <p> |
| | | * åºé¢é¾è·¯çå弿¯ {@code pat_med_inhosp.inhospno}ï¼é¨è¯é¾è·¯æ¯ |
| | | * {@code pat_med_outhosp.outhospno}ï¼è§ {@link OuthospSubtaskDraft}ï¼ã |
| | | * <p> |
| | | * â ï¸ è¿ä¸ªå段åå
åªåå¨äº {@link OuthospSubtaskDraft}ï¼èåºé¢ç |
| | | * {@code addSubTaskByRule} é¾è·¯ä»ä¸è®¾å® â {@code service_subtask.hospno} ä¸ç´è½ç©ºã |
| | | * ç°å¨æå°ç¶ç±»ï¼ä¸¤æ¡é¾è·¯å
±ç¨åä¸ä¸ªè½½ä½ã |
| | | */ |
| | | private String hospno; |
| | | |
| | | // ==================== 廿¤ï¼å patMedInhospï¼ ==================== |
| | | /** 责任æ¤å£«ID */ |
| | |
| | | this.serialnum = serialnum; |
| | | } |
| | | |
| | | public String getHospno() { |
| | | return hospno; |
| | | } |
| | | |
| | | public void setHospno(String hospno) { |
| | | this.hospno = hospno; |
| | | } |
| | | |
| | | public String getNurseId() { |
| | | return nurseId; |
| | | } |
| | |
| | | } |
| | | |
| | | public static String sendPostByHeader(String url, String param, Map<String, String> headers) { |
| | | // ä¸è®¾è¶
æ¶ï¼ä¸åå²è¡ä¸ºä¸è´ï¼èè°ç¨æ¹ä¸ä¸ªåèé½ä¸åï¼ |
| | | return sendPostByHeader(url, param, headers, 0, 0); |
| | | } |
| | | |
| | | /** |
| | | * 带è¶
æ¶ç POSTï¼JSON æ¥æå¤´ + èªå®ä¹ headerï¼ã |
| | | * <p> |
| | | * â ï¸ <b>为ä»ä¹ä¼æè¿ä¸ªéè½½</b>ï¼ä¸é¢çèæ¹æ³<b>没æè¿æ¥/读è¶
æ¶</b>ï¼ |
| | | * 䏿¦å¯¹ç«¯ä¸ååºï¼è°ç¨çº¿ç¨ä¼æ éææä½ãæ¹éææ£è
è°ç¨çéé |
| | | * ï¼å¦"å¨é¢ä¿¡æ¯å·æ°"ï¼ä¸è½®å 忬¡ï¼æ¿åä¸èµ·è¿ä¸ªé£é©ï¼æä»¥è¡¥ä¸ä¸ªæ¾å¼è¶
æ¶çéè½½ï¼ |
| | | * èæ¹æ³æ¹ä¸ºå§ææ¬æ¹æ³å¹¶ä¼ 0ï¼0 = ä¸è®¾è¶
æ¶ï¼ï¼è¡ä¸ºä¸æ¹é åå®å
¨ä¸è´ã |
| | | * |
| | | * @param connectTimeoutMs è¿æ¥è¶
æ¶ï¼æ¯«ç§ï¼ï¼{@code <=0} 表示ä¸è®¾ |
| | | * @param readTimeoutMs 读è¶
æ¶ï¼æ¯«ç§ï¼ï¼{@code <=0} 表示ä¸è®¾ |
| | | */ |
| | | public static String sendPostByHeader(String url, String param, Map<String, String> headers, |
| | | int connectTimeoutMs, int readTimeoutMs) { |
| | | StringBuilder result = new StringBuilder(); |
| | | HttpURLConnection conn = null; |
| | | try { |
| | |
| | | conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); |
| | | conn.setDoOutput(true); |
| | | conn.setDoInput(true); |
| | | if (connectTimeoutMs > 0) { |
| | | conn.setConnectTimeout(connectTimeoutMs); |
| | | } |
| | | if (readTimeoutMs > 0) { |
| | | conn.setReadTimeout(readTimeoutMs); |
| | | } |
| | | |
| | | if (headers != null) { |
| | | for (Map.Entry<String, String> entry : headers.entrySet()) { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <artifactId>ruoyi</artifactId> |
| | | <groupId>com.ruoyi</groupId> |
| | | <version>3.8.5</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>ruoyi-datacollection</artifactId> |
| | | |
| | | <description> |
| | | æ°æ®é鿍¡åï¼HIS æ°æ®ééçè°åº¦ç¼æï¼å ruoyi-quartz ç RyTask#dealHisData / collectSegmentDataï¼ |
| | | ä¸åç»åæ¹æ¬å
¥çééå®ç°ï¼æ°å / æ²³å / çç«å德·ååéä¸ / ç¾ç
åå
¸ï¼ã |
| | | |
| | | ä¾èµæ¹åï¼ruoyi-datacollection -> ruoyi-commonï¼å¥çº¦ä¸å·¥å
·ï¼ |
| | | -> ruoyi-systemï¼sys_config æ orgid çé
ç½®æ¥è¯¢ï¼èµ° ISysConfigService è¿ä¸ª APIï¼ |
| | | -> ruoyi-inhospvisitï¼pat_med_inhosp çå½å±æ¨¡åï¼ |
| | | å¨é¢ä¿¡æ¯å·æ°ååé + ååä½ç½®ï¼åªç»å
¶ api å
çé¨é¢/æ°æ®å¥çº¦ï¼ |
| | | ãä¸ä¾èµ smartorãï¼ééå®ç°ç®åä»å¨ smartorï¼æãè·¨æ¨¡åæ°æ®è®¿é®ååã |
| | | ï¼doc/è·¨æ¨¡åæ°æ®è®¿é®åå䏿¶å£æ¹æ¡.mdï¼ç» ruoyi-common ç |
| | | com.ruoyi.common.core.service.HisGatherApi å¥çº¦è°ç¨ï¼smartor ä¾§ç¨çº¯è½¬å Bridge å®ç°ã |
| | | ééå®ç°ææ¹æ¬è¿æ¬æ¨¡ååï¼å¥çº¦æ¹æ³éä¹å é¤ï¼è§ doc/æ°æ®é鿍¡åå_è°ç ä¸å®æ½æ¹æ¡.mdï¼ã |
| | | |
| | | æ¬æ¨¡åæ å¯è®¿é®ç HTTP 端ç¹ï¼å¼å
³ä½ç¨ç¹å¨é¨é¢ com.ruoyi.datacollection.api.DataCollectionFacadeã |
| | | æ¯æéè¿ sys_config åæ°è¡¨éç datacollection.enabled æ´ä½åéï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤ 10 ç§çæï¼ã |
| | | </description> |
| | | |
| | | <dependencies> |
| | | <!-- éç¨å·¥å
·ï¼StringUtils / å¥çº¦ HisGatherApi / å¥çº¦ DTO SltdGatherReq --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- |
| | | ç³»ç»æ¨¡åï¼åªç¨å°å®çåæ°é
ç½®æå¡ API ââ |
| | | · com.ruoyi.system.service.ISysConfigService#selectConfigList(SysConfig) |
| | | ï¼ééç¼æè¦æ config_key + orgid 读 sltd.gather.sysuser / sltd.gather.campusidï¼ |
| | | 䏿¬è¿åçè°ç¨å®å
¨ä¸è´ï¼å« LIKE å¹é
è¯ä¹ï¼æ
䏿¹æ selectConfigByKey 以å
æ¹åè¡ä¸ºï¼ |
| | | · com.ruoyi.system.domain.SysConfig |
| | | ruoyi-system åªä¾èµ ruoyi-common / ruoyi-messageï¼ä¸ä¼ä¸æ¬æ¨¡åå½¢æå¾ªç¯ä¾èµã |
| | | --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-system</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- |
| | | åºå
¥é¢é访模åï¼åªç¨å°å® api å
ç两个è½å ââ |
| | | · com.ruoyi.inhospvisit.api.InhospVisitFacade#selectInhospRefreshCandidates(String) |
| | | ï¼å¨é¢ä¿¡æ¯å·æ°çåæ°ï¼åªæ¥ pat_med_inhosp èªèº«ãåªåä½ç½®ç¸å
³åï¼ |
| | | · com.ruoyi.inhospvisit.api.InhospVisitDataService#updatePatMedInhosp(PatMedInhosp) |
| | | ï¼"ä¼ ä»ä¹æ¹ä»ä¹"çä½ç½®ååï¼ä¸ç´æ¥æ³¨å
¥è¯¥æ¨¡åç Mapperï¼ |
| | | ä¾èµæ¹åæ ç¯ï¼ruoyi-inhospvisit åªä¾èµ ruoyi-commonï¼ä¸ä¾èµæ¬æ¨¡åã |
| | | --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-inhospvisit</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- lombokï¼ruoyi-common éæ¯ç´æ¥ä¾èµï¼æ¤å¤æ¾å¼å£°æçæ¬ï¼é¿å
注解å¤çå¨ç¼ºå¤± --> |
| | | <dependency> |
| | | <groupId>org.projectlombok</groupId> |
| | | <artifactId>lombok</artifactId> |
| | | <version>1.18.34</version> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.datacollection; |
| | | |
| | | /** |
| | | * æ°æ®é鿍¡åå
æ ¹ã |
| | | * |
| | | * <h3>è¿ä¸ªæ¨¡åè£
äºä»ä¹ï¼é¶æ®µ 1 · æ¬æ¬¡ï¼</h3> |
| | | * <ul> |
| | | * <li>{@code service} ââ HIS æ°æ®ééç<b>è°åº¦ç¼æ</b>ï¼å {@code ruoyi-quartz} é |
| | | * {@code RyTask#dealHisData(String)} + ç§æå¸®æ {@code collectSegmentData(...)} |
| | | * åæ ·æ¬æ¥ï¼é»è¾ä¸è¡æªæ¹ï¼å«åç«ç¹åæ¯ã30 天忮µåæº¯ãæ¥å¿ææ¡ï¼ï¼</li> |
| | | * <li>{@code config} ââ æ¨¡åå¼å
³ï¼{@code sys_config: datacollection.enabled}ï¼é»è®¤ trueï¼fail-openï¼ï¼</li> |
| | | * <li>{@code api} ââ <b>å¯ä¸å¯¹å¤å
</b>ï¼å
¶å®æ¨¡ååªè½ç» {@code DataCollectionFacade} è°æ¬æ¨¡åã</li> |
| | | * </ul> |
| | | * |
| | | * <h3>æ°æ®è®¿é®è¾¹ç</h3> |
| | | * æ¬æ¨¡å<b>廿ä¸å¸¦ Mapper / XML</b>ï¼ç¼æåªå"使¶éãéåªä¸ªé¢åºãéåªæ®µæ¶é´"ï¼ |
| | | * çæ£çééå¨ä½ç±å¥çº¦ {@code com.ruoyi.common.core.service.HisGatherApi} æ¿æ¥ï¼ |
| | | * å½åå®ç°å¨ smartorï¼{@code HisGatherApiBridge}ï¼çº¯è½¬åå°æ¢æ Serviceï¼ã |
| | | * è¿æ ·æ°æ¨¡åä¸å¿
ä¾èµ smartorï¼ä¹å°±ä¸ä¼æ"模åå"åéååä½ã |
| | | * |
| | | * <h3>é¶æ®µ 2 / 3ï¼åç»æ¹æ¬¡ï¼</h3> |
| | | * ééå®ç°ææ¹æ¬è¿æ¬æ¨¡åï¼XH/HN 䏿¹ãSLTD 䏿¹ï¼ï¼æ¯æ¬ä¸æ¹å°±æ |
| | | * {@code HisGatherApi} å¯¹åºæ¹æ³å æï¼å
¨é¨æ¬å®æ¶å¥çº¦ä¸ smartor ç Bridge ä¸èµ·å é¤ã |
| | | * åæ¹çä¾èµçç¹ãéè¦ç跨模åå¥çº¦ãé£é©ç¹è§ |
| | | * {@code doc/æ°æ®é鿍¡åå_è°ç ä¸å®æ½æ¹æ¡.md}ã |
| | | * |
| | | * <h3>å¼å
³</h3> |
| | | * {@code sys_config: datacollection.enabled}ï¼é»è®¤ trueï¼ï¼å
³éå |
| | | * {@code DataCollectionFacade#dealHisData} æ {@code DataCollectionModuleDisabledException}ï¼ |
| | | * ç±è°ç¨æ¹ï¼{@code RyTask}ï¼æç¡®é级并æ WARN ââ ä¸éé»è·³è¿ï¼ä¹ä¸éé»ç»§ç»éã |
| | | */ |
| | | public final class DataCollectionModule { |
| | | |
| | | /** |
| | | * 模åé
ç½®åç¼ï¼ä»
ä½ä¸º yml å
åºé
ç½®çé®åç¼ï¼ä¸»å¼å
³å¨ sys_config åæ°è¡¨éï¼ |
| | | */ |
| | | public static final String PROPERTIES_PREFIX = "datacollection"; |
| | | |
| | | private DataCollectionModule() { |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.datacollection.api; |
| | | |
| | | /** |
| | | * æ°æ®é鿍¡åç对å¤å¥çº¦ï¼<b>å
¶å®æ¨¡åå¯ä¸å
许ä¾èµçç±»å</b>ï¼ã |
| | | * <p> |
| | | * å®ç°æ¯æ¬æ¨¡åç常驻é¨é¢ {@link DataCollectionFacade}ã |
| | | * |
| | | * <h3>约å®ï¼ç
§æå
¶å®æ¨¡åç api å¥çº¦çºªå¾ï¼</h3> |
| | | * <ul> |
| | | * <li><b>åªæ´é²åºæ¬ç±»å</b>ï¼ä¸æ´é²æ¬æ¨¡åå
é¨ Service / domainï¼</li> |
| | | * <li>é¨é¢<b>æ°¸è¿åå¨</b>ï¼è°ç¨æ¹ç {@code @Autowired} ä¸ä¼å å¼å
³ç¶æèå¯å¨å¤±è´¥ï¼</li> |
| | | * <li>模å被å
³éæ¶<b>æ {@link DataCollectionModuleDisabledException}</b> |
| | | * ï¼è䏿¯éé»è¿åï¼ï¼é鿝"æ°æ®è¿ä¸æ¥"çé¾è·¯ï¼ |
| | | * éé»è·³è¿ä¸"æ¬æ¥å°±æ²¡æ°æ®"åä¸å¼ï¼ææ¥æ¶ææè¿ä¸ªã</li> |
| | | * </ul> |
| | | */ |
| | | public interface DataCollectionApi { |
| | | |
| | | /** |
| | | * æ¨¡åæ¯å¦å¯ç¨ï¼å¼å
³æå¼ï¼ |
| | | * <p> |
| | | * â ï¸ è¿æ¯<b>æ¥è¯¢å¼å
³ç¶æ</b>çæ¹æ³ï¼å»æä¸åå®å«ï¼è°ç¨æ¹éè¦å®æ¥é¢å¤ï¼ |
| | | * 妿å®ä¹æå¼å¸¸å°±èªæçç¾äºã |
| | | */ |
| | | boolean isEnabled(); |
| | | |
| | | /** |
| | | * HIS æ°æ®ééï¼å {@code RyTask#dealHisData(String)}ï¼ï¼ |
| | | * æ {@code spring.profiles.active} åç«ç¹ééæ°å / æ²³å / çç«åå¾·ï¼ååéä¸ï¼ç |
| | | * åºå
¥é¢ãé¢å
¥é¢ãåºé¢ä¸å»é¢ç¨æ·/é¨é¨ä¿¡æ¯ã |
| | | * |
| | | * @param todayZeroStr ééåºåæ¶é´ {@code yyyy-MM-dd HH:mm:ss}ï¼ |
| | | * 为空æ¶å"ä»å¤© 00:00"ï¼ééèå´æ¯ {@code [åºå-1天, åºå)}ã |
| | | * nhfy / sltd ç«ç¹å¨å
¥åé空æ¶ä¼é¢å¤å 30 天忮µå溯ééã |
| | | * @throws DataCollectionModuleDisabledException 模å被å
³éï¼{@code datacollection.enabled=false}ï¼ |
| | | */ |
| | | void dealHisData(String todayZeroStr); |
| | | |
| | | /** |
| | | * å¨é¢æ£è
"ç§å®¤ / ç
åº / åºä½"å·æ°ï¼ååéä¸ï¼æ¯å¤©ä¸æ¬¡å
¨éæ ¸å¯¹ï¼ï¼ |
| | | * ææ£è
æ¥ HIS ç转ç§è®°å½ãåææ°ä¸æ®µï¼ä¸ {@code pat_med_inhosp} æ¯å¯¹ååªåååçåæ®µã |
| | | * <p> |
| | | * å¹çï¼å¯éå¤è§¦åï¼ç«ç¹ä¸æ¯ {@code nhfy} æ¶ä¸åä»»ä½äºå¹¶è¿å 0ã |
| | | * |
| | | * @return å®é
åçæ´æ°çè®°å½æ¡æ° |
| | | * @throws DataCollectionModuleDisabledException 模å被å
³éï¼{@code datacollection.enabled=false}ï¼ |
| | | */ |
| | | int refreshInhospDeptInfo(); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.datacollection.api; |
| | | |
| | | import com.ruoyi.datacollection.config.DataCollectionSwitch; |
| | | import com.ruoyi.datacollection.service.IHisDataCollectionService; |
| | | import com.ruoyi.datacollection.service.IInhospDeptRefreshService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * æ°æ®é鿍¡å对å¤é¨é¢ï¼<b>常驻 Bean</b>ï¼ââ å
¶å®æ¨¡å触å HIS ééçå¯ä¸å
¥å£ã |
| | | * |
| | | * <h3>为ä»ä¹å¿
须"常驻"</h3> |
| | | * æ¬é¨é¢<b>æ°¸è¿</b>æ¯ Spring Beanï¼ä¸éå¼å
³ç¶æå¢å ãè°ç¨æ¹ï¼{@code RyTask}ï¼ç |
| | | * {@code @Autowired} å æ¤ä¸ä¼å¨ä»»ä½å¼å
³ç¶æä¸å¯å¨å¤±è´¥ ââ |
| | | * ä¸ {@code TaskFacade} / {@code PhoneFacade} / {@code TemplateFacade} æ¯å䏿¡è®¾è®¡çº¦æ |
| | | * ï¼å岿è®ï¼ç¨ {@code @ConditionalOnProperty} æ Bean ä¼è®©è°ç¨æ¹å¯å¨å³å¤±è´¥ï¼ |
| | | * ä¸åªå¨å¯å¨æ¶æ±å¼ä¸æ¬¡ï¼åä¸å°"æ¹å®åæ° 10 ç§çæ"ï¼ã |
| | | * |
| | | * <h3>â ï¸ å
³éæ¶ï¼æå¼å¸¸ï¼è䏿¯éé»è·³è¿</h3> |
| | | * 模åå
³éï¼{@code sys_config: datacollection.enabled=false}ï¼æ¶ï¼ |
| | | * {@link #dealHisData(String)} å
è¿ {@link #requireEnabled()}ï¼æ |
| | | * {@link DataCollectionModuleDisabledException}ï¼ |
| | | * <ul> |
| | | * <li><b>为ä»ä¹ä¸ç¨"ææ¡ WARN å°±è¿å"</b>ï¼é鿝"æ°æ®è¿ä¸æ¥"çé¾è·¯ã |
| | | * éé»è·³è¿ä¼è®©"模å被å
³æ"å"è¿è½®æ¬æ¥å°±æ²¡æ°æ®"åä¹åä¸å¼ ââ |
| | | * çåç°æ¼æ°æ®æ¶ï¼æ¥å¿éå·²ç»è¿å»å åè½®ï¼æ ä»å¤æï¼</li> |
| | | * <li><b>è°ç¨æ¹å¿
é¡»é
é级</b>ï¼æ¬é¨é¢çè°ç¨ç¹æ¯å®æ¶ä»»å¡ |
| | | * {@code RyTask#dealHisData}ï¼å®æè·æ¬å¼å¸¸å¹¶æ WARNï¼æ¬è½®æç¡®è·³è¿ï¼ï¼ |
| | | * è§ {@code doc/æ°æ®é鿍¡åå_è°ç ä¸å®æ½æ¹æ¡.md} §5ã</li> |
| | | * </ul> |
| | | * |
| | | * <h3>â ï¸ ä¾å¤ï¼{@link #isEnabled()} ä¸åå®å«</h3> |
| | | * 宿¬èº«å°±æ¯æ¥å¼å
³ç¶æç¨çï¼å¦æå®ä¹æå¼å¸¸ï¼"å¼å
³æ¯ä¸æ¯å
³ç"å°±åä¹é®ä¸åºæ¥äºã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class DataCollectionFacade implements DataCollectionApi { |
| | | |
| | | /** |
| | | * è¿è¡æ¶å¼å
³ï¼{@code sys_config} ä¼å
ï¼yml å
åºï¼ |
| | | */ |
| | | @Autowired |
| | | private DataCollectionSwitch dataCollectionSwitch; |
| | | |
| | | /** |
| | | * 模åå
å®ç°ï¼å¯ä¸å®ç° {@code HisDataCollectionServiceImpl}ï¼ |
| | | */ |
| | | @Autowired |
| | | private IHisDataCollectionService hisDataCollectionService; |
| | | |
| | | /** |
| | | * 模åå
å®ç°ï¼å¯ä¸å®ç° {@code InhospDeptRefreshServiceImpl}ï¼ï¼ |
| | | * å¨é¢æ£è
çç§å®¤/ç
åº/åºä½æ¯æ¥å·æ° |
| | | */ |
| | | @Autowired |
| | | private IInhospDeptRefreshService inhospDeptRefreshService; |
| | | |
| | | /** |
| | | * æ¨¡åæ¯å¦å¯ç¨ï¼{@code sys_config: datacollection.enabled}ï¼è¿è¡æ¶çè¯»ï¼ |
| | | * <p> |
| | | * â ï¸ <b>廿ä¸åå®å«</b>ï¼è§ç±»æ³¨éã |
| | | */ |
| | | @Override |
| | | public boolean isEnabled() { |
| | | return dataCollectionSwitch.isEnabled(); |
| | | } |
| | | |
| | | @Override |
| | | public void dealHisData(String todayZeroStr) { |
| | | requireEnabled(); |
| | | hisDataCollectionService.dealHisData(todayZeroStr); |
| | | } |
| | | |
| | | @Override |
| | | public int refreshInhospDeptInfo() { |
| | | requireEnabled(); |
| | | return inhospDeptRefreshService.refreshInhospDeptInfo(); |
| | | } |
| | | |
| | | /** |
| | | * é¨é¢æ°æ®æ¹æ³çç»ä¸å
¥å£å®å«ï¼æ¨¡åå
³éæ¶æ |
| | | * {@link DataCollectionModuleDisabledException}ï¼ç±è°ç¨æ¹å³å®å¦ä½é级ã |
| | | */ |
| | | private void requireEnabled() { |
| | | if (!dataCollectionSwitch.isEnabled()) { |
| | | log.warn("ãæ°æ®ééãæ¨¡åå·²å
³éï¼åæ°é
ç½® {} = falseï¼ï¼æç»é¨é¢è®¿é®", |
| | | DataCollectionSwitch.CONFIG_KEY); |
| | | throw new DataCollectionModuleDisabledException( |
| | | DataCollectionModuleDisabledException.DISABLED_MESSAGE); |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.datacollection.api; |
| | | |
| | | /** |
| | | * æ°æ®é鿍¡å被å
³éï¼{@code sys_config: datacollection.enabled=false}ï¼æ¶ï¼ |
| | | * é¨é¢è°ç¨æåºçå¼å¸¸ã |
| | | * |
| | | * <h3>为ä»ä¹éè¦å®ï¼è䏿¯å¤ç¨ {@code ServiceException}ï¼</h3> |
| | | * {@code ServiceException} æ¯ <b>final</b> çï¼è§ {@code com.ruoyi.common.exception.ServiceException}ï¼ï¼ |
| | | * æ¢ä¸è½ç»§æ¿ã乿²¡æå®ç°ä»»ä½æ¥å£ï¼å æ¤æ æ³"精确æè·"ã |
| | | * è°ç¨æ¹ï¼{@code ruoyi-quartz} ç {@code RyTask}ï¼éè¦æ |
| | | * <b>"模å被å
³æ"</b>å<b>"ééè¿ç¨ççæ¥é"</b>åºåå¼ï¼ |
| | | * åè
åªæä¸æ¡ WARN è¯´ææ¬è½®è·³è¿ï¼åè
è¦æåæé误å£å¾è®°å½ ââ |
| | | * ç¨ {@code ServiceException} ææ¯å¯¹ message ææ¬é½ä¼å¤±åã |
| | | * |
| | | * <h3>为ä»ä¹æ¾å¨æ¨¡åç api å
ï¼è䏿¯ ruoyi-common</h3> |
| | | * æ¨¡æ¿æ¨¡åæ {@code TemplateModuleDisabledException} æ¾è¿ ruoyi-commonï¼ |
| | | * æ¯å 为å®çè°ç¨ç¹æ£å¨ 4 个模åéãæ¬æ¨¡åç®ååªæ {@code ruoyi-quartz} ä¸ä¸ªè°ç¨æ¹ï¼ |
| | | * è {@code ruoyi-quartz} å·²ç»ä¾èµæ¬æ¨¡åï¼æä»¥æ¾å¨ {@code api} å
å³å¯ï¼api æ¯æ¬æ¨¡åå¯ä¸å¯¹å¤å
ï¼ã |
| | | * å°æ¥è¥åºç°ä¸ä¾èµæ¬æ¨¡åçè°ç¨æ¹ï¼å䏿²å° ruoyi-commonã |
| | | * |
| | | * @see DataCollectionFacade#requireEnabled() |
| | | */ |
| | | public class DataCollectionModuleDisabledException extends RuntimeException { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * å
³éæç¤ºï¼ä¸ {@code sys_config} éé£è¡é
ç½®ç remark å£å¾ä¸è´ï¼ |
| | | */ |
| | | public static final String DISABLED_MESSAGE = |
| | | "æ°æ®é鿍¡åæªå¯ç¨ï¼åæ°é
ç½® datacollection.enabled=falseï¼ï¼æ¬æ¬¡éé已跳è¿"; |
| | | |
| | | public DataCollectionModuleDisabledException(String message) { |
| | | super(message); |
| | | } |
| | | |
| | | public DataCollectionModuleDisabledException(String message, Throwable cause) { |
| | | super(message, cause); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.datacollection.config; |
| | | |
| | | import lombok.Data; |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * æ°æ®é鿍¡åç yml é
ç½®ï¼<b>ä»
ä½å
åºï¼ä¸æ¯ä¸»å¼å
³</b>ï¼ã |
| | | * |
| | | * <h3>â ï¸ ä¸»å¼å
³ä¸å¨è¿é</h3> |
| | | * 主å¼å
³æ¯ {@code sys_config} åæ°é
置表éç {@code datacollection.enabled}ï¼ |
| | | * ç± {@link DataCollectionSwitch} <b>è¿è¡æ¶ç读</b>ï¼è¿ç¨å
10 ç§ç¼åï¼æ¹å®æå¤ 10 ç§çæï¼ã |
| | | * æ¬ç±»åªå¨ãsys_config éæ²¡æé£ä¸è¡ãæãé Spring ç¯å¢åä¸å°é
ç½®æå¡ãæ¶å
åºã |
| | | * |
| | | * <h3>为ä»ä¹é»è®¤ true</h3> |
| | | * ä¸ä»»å¡/çµè¯/æ¨¡æ¿æ¨¡å忬¾å£å¾ï¼<b>åæ°è¡ç¼ºå¤±æ¶æå¯ç¨å¤ç</b>ã |
| | | * HIS é鿝"æ°æ®è¿ä¸æ¥"çé¾è·¯ï¼è¥å 为åºéå°ä¸è¡é
置就é»è®¤åéï¼ |
| | | * åºé®é¢æ¶æ¯<b>éé»å°æ°æ®</b>ï¼æ¯å¤éä¸è½®é¾æ¥å¾å¤ãè¦åéè¯·å° |
| | | * ãç³»ç»ç®¡ç â åæ°è®¾ç½®ãæ¾å¼æ {@code datacollection.enabled} 设为 falseã |
| | | * |
| | | * <h3>yml å
åºåæ³ï¼ä¸è¬ä¸å¿
è¦ï¼</h3> |
| | | * <pre> |
| | | * datacollection: |
| | | * enabled: false |
| | | * </pre> |
| | | */ |
| | | @Data |
| | | @Component |
| | | @ConfigurationProperties(prefix = "datacollection") |
| | | public class DataCollectionProperties { |
| | | |
| | | /** |
| | | * æ¯å¦å¯ç¨æ°æ®é鿍¡åï¼é»è®¤å¯ç¨ï¼ã |
| | | * <p> |
| | | * ä»
å½ {@code sys_config} 䏿²¡æ {@code datacollection.enabled} æ¶çæï¼è§ {@link DataCollectionSwitch}ã |
| | | */ |
| | | private boolean enabled = true; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.datacollection.config; |
| | | |
| | | import com.ruoyi.common.core.service.IConfigService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.ObjectProvider; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * æ°æ®é鿍¡å<b>æ»å¼å
³</b>ï¼å¼åæ¾å¨ {@code sys_config} åæ°é
置表ä¸ï¼<b>è¿è¡æ¶è¯»åãå¯ç忢</b>ã |
| | | * |
| | | * <h3>åæ°é
ç½®</h3> |
| | | * <pre> |
| | | * åæ°é®åï¼datacollection.enabled |
| | | * åæ°é®å¼ï¼true = å¯ç¨ï¼é»è®¤ï¼çä»·äºä¸é
ç½®è¿ä¸è¡ï¼ |
| | | * false = åé |
| | | * </pre> |
| | | * ä½ç½®ï¼ç³»ç»ç®¡ç â åæ°è®¾ç½® â æ°å¢/ä¿®æ¹ã |
| | | * <pre> |
| | | * insert into sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark) |
| | | * values ('æ°æ®é鿍¡åå¼å
³', 'datacollection.enabled', 'true', 'Y', 'admin', sysdate(), 'trueå¯ç¨ï¼falseåéï¼é»è®¤trueï¼'); |
| | | * </pre> |
| | | * |
| | | * <h3>åå¼ä¼å
级</h3> |
| | | * <ol> |
| | | * <li>{@code sys_config} é {@code datacollection.enabled} çå¼ï¼<b>主ç¨</b>ï¼ |
| | | * æ¥èª {@code IConfigService} æ¥å£ï¼å®ç°å¨ ruoyi-system ç {@code SysConfigServiceImpl}ï¼ï¼</li> |
| | | * <li>{@link DataCollectionProperties#isEnabled()}ï¼<b>å
åº</b>ï¼ä»
å½ sys_config éæ²¡æè¿ä¸è¡ã |
| | | * æé Spring ç¯å¢åä¸å°é
ç½®æå¡æ¶ä½¿ç¨ï¼é»è®¤ trueï¼ã</li> |
| | | * </ol> |
| | | * |
| | | * <h3>为ä»ä¹è¯»ä¸å°é
ç½®æ¶æ trueï¼fail-openï¼</h3> |
| | | * 读 {@code sys_config} éè¦èµ°æ°æ®åºï¼æ°æ®åºæå¨æ¶å¦æ fail-closedï¼ |
| | | * ç»æå°±æ¯"æ°æ®åºæä¸ä¸ï¼å½å¤© HIS æ°æ®å
¨é½ä¸éäº" ââ éé»å°æ°æ®ã |
| | | * è¿éåªæ WARN å¹¶æ¾è¡ãè¦åéå¿
é¡»æ¾å¼é
ç½® falseã |
| | | * |
| | | * <h3>为ä»ä¹æ 10 ç§ç¼å</h3> |
| | | * {@code SysConfigServiceImpl#selectConfigByKey} å½åæ¯æ¬¡é½æ¥åºï¼èæ¬å¼å
³å¨æ¯è½®å®æ¶éé |
| | | * å¼å§æ¶é½ä¼è¢«è¯»å°ãè¿éå ä¸ä¸ªè¿ç¨å
TTL ç¼åï¼ææ¥åºéå°"æ¯ä¸ªå®ä¾æ¯ 10 ç§æå¤ä¸æ¬¡"ã |
| | | * 代价æ¯åæ°æ¹å¨æå¤ 10 ç§çæï¼å¤å®ä¾é¨ç½²æ¶åèªè®¡æ¶ï¼ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class DataCollectionSwitch { |
| | | |
| | | /** |
| | | * sys_config éçåæ°é®å |
| | | */ |
| | | public static final String CONFIG_KEY = "datacollection.enabled"; |
| | | |
| | | /** |
| | | * è¿ç¨å
ç¼åæææï¼æ¯«ç§ï¼ |
| | | */ |
| | | private static final long CACHE_TTL_MILLIS = 10_000L; |
| | | |
| | | private final DataCollectionProperties properties; |
| | | |
| | | /** |
| | | * åæ°é
ç½®æå¡ï¼ruoyi-common çæ¥å£ï¼å®ç°å¨ ruoyi-systemï¼ã |
| | | * <p> |
| | | * ç¨ {@code ObjectProvider} æ°æ§åï¼é Spring ç¯å¢/ç¬ç«é¨ç½²ç"容å¨é没æå®ç°"çåºæ¯ä¸ |
| | | * ä¸è½å æ¤å¯å¨å¤±è´¥ã |
| | | */ |
| | | private final ObjectProvider<IConfigService> configServiceProvider; |
| | | |
| | | /** |
| | | * æè¿ä¸æ¬¡è§£æç»æ |
| | | */ |
| | | private volatile Boolean cachedEnabled; |
| | | |
| | | /** |
| | | * æè¿ä¸æ¬¡è§£æçæ¶é´æ³ |
| | | */ |
| | | private volatile long cachedAt; |
| | | |
| | | /** |
| | | * Spring 使ç¨çæé å¨ã |
| | | * <p> |
| | | * â ï¸ <b>å¿
é¡»æ¾å¼æ 注 {@code @Autowired}</b>ï¼æ¬ç±»æä¸¤ä¸ªå
¬å¼æé å¨ |
| | | * ï¼å¦ä¸ä¸ªç»æµè¯/é Spring ç¯å¢ç¨ï¼ï¼ä¸æ 注çè¯ Spring ä¼å "æé å¨ä¸å¯ä¸" |
| | | * éåæ¥æ¾æ åæé å¨ï¼å¯å¨å³æ¥ {@code No default constructor found}ã |
| | | * 该è§åå·²ç± {@code sql/_probe/verify_spring_beans.py} éææå
³ã |
| | | */ |
| | | @Autowired |
| | | public DataCollectionSwitch(DataCollectionProperties properties, |
| | | ObjectProvider<IConfigService> configServiceProvider) { |
| | | this.properties = properties; |
| | | this.configServiceProvider = configServiceProvider; |
| | | } |
| | | |
| | | /** |
| | | * ä¾<b>æµè¯/é Spring ç¯å¢</b>ç´æ¥æé ï¼{@code configValue} å°±æ¯ sys_config éçé®å¼ï¼ |
| | | * ä¼ {@code null} 表示"åæ°è¡ä¸åå¨"ï¼æ¤æ¶åè½å° {@link DataCollectionProperties}ï¼ã |
| | | */ |
| | | public DataCollectionSwitch(DataCollectionProperties properties, final String configValue) { |
| | | this(properties, new FixedProvider(configValue)); |
| | | // é Spring ç¯å¢ä¸æ²¡æ"æ¹é
ç½®åç 10 ç§"çæ¦å¿µï¼ç´æ¥ç¦ç¨ç¼åï¼ä¿è¯æè¨å³æ¶å¯è§ |
| | | this.cachedEnabled = resolve(); |
| | | this.cachedAt = System.currentTimeMillis() + CACHE_TTL_MILLIS * 1000L; |
| | | } |
| | | |
| | | /** |
| | | * æ°æ®é鿍¡åæ¯å¦å¯ç¨ï¼è¿è¡æ¶çè¯»ï¼æå¤ 10 ç§å»¶è¿ï¼ |
| | | */ |
| | | public boolean isEnabled() { |
| | | long now = System.currentTimeMillis(); |
| | | Boolean cached = this.cachedEnabled; |
| | | if (cached != null && now - this.cachedAt < CACHE_TTL_MILLIS) { |
| | | return cached; |
| | | } |
| | | boolean resolved = resolve(); |
| | | this.cachedEnabled = resolved; |
| | | this.cachedAt = now; |
| | | return resolved; |
| | | } |
| | | |
| | | /** |
| | | * æ¸
æè¿ç¨å
ç¼åï¼ä¸æ¬¡è°ç¨ç«å³éæ°è¯» sys_configï¼ä¾æµè¯/éè¦ç«å³çæçåºæ¯ï¼ |
| | | */ |
| | | public void invalidateCache() { |
| | | this.cachedEnabled = null; |
| | | } |
| | | |
| | | /** |
| | | * è§£æå½åå¼å
³å¼ï¼sys_config ä¼å
ï¼å
¶æ¬¡ yml å
åº |
| | | */ |
| | | private boolean resolve() { |
| | | String value = readFromSysConfig(); |
| | | if (value != null) { |
| | | if (!"true".equalsIgnoreCase(value) && !"false".equalsIgnoreCase(value)) { |
| | | log.warn("ãæ°æ®ééãsys_config ä¸ {} çå¼ä¸æ¯ true/falseï¼å®é
=ã{}ãï¼ï¼å°æã䏿¯ false å³å¯ç¨ãå¤ç", |
| | | CONFIG_KEY, value); |
| | | } |
| | | boolean enabled = !"false".equalsIgnoreCase(value); |
| | | log.debug("ãæ°æ®ééãå¼å
³åèª sys_configï¼{}={} -> enabled={}", CONFIG_KEY, value, enabled); |
| | | return enabled; |
| | | } |
| | | boolean enabled = properties.isEnabled(); |
| | | log.debug("ãæ°æ®ééãsys_config 䏿ªé
ç½® {}ï¼åè½ datacollection.enabled={}", CONFIG_KEY, enabled); |
| | | return enabled; |
| | | } |
| | | |
| | | /** |
| | | * 读 sys_config çåå§é®å¼ï¼æ²¡æå®ç°ã没æè¿ä¸è¡ãæè¯»åºå¤±è´¥é½è¿å {@code null} |
| | | */ |
| | | private String readFromSysConfig() { |
| | | if (configServiceProvider == null) { |
| | | return null; |
| | | } |
| | | try { |
| | | IConfigService configService = configServiceProvider.stream().findFirst().orElse(null); |
| | | if (configService == null) { |
| | | return null; |
| | | } |
| | | String value = configService.selectConfigByKey(CONFIG_KEY); |
| | | if (value == null || value.trim().isEmpty()) { |
| | | return null; |
| | | } |
| | | return value.trim(); |
| | | } catch (Exception e) { |
| | | // 容卿²¡æå®ç°ãæ°æ®æºå¼å¸¸ãSQL æ¥éâ¦â¦ä¸å¾æ"åæ°ç¼ºå¤±"å¤çï¼fail-openï¼ï¼ç»ä¸å½±åéé主æµç¨ |
| | | log.warn("ãæ°æ®ééã读å sys_config ç {} å¤±è´¥ï¼æ¬æ¬¡ææªé
ç½®å¤çï¼fail-openï¼ï¼{}", |
| | | CONFIG_KEY, e.toString()); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åºå®å¼ç {@code ObjectProvider}ï¼åªç¨äºé Spring ç¯å¢/æµè¯ |
| | | */ |
| | | private static final class FixedProvider implements ObjectProvider<IConfigService> { |
| | | |
| | | private final IConfigService configService; |
| | | |
| | | private FixedProvider(final String configValue) { |
| | | this.configService = configValue == null ? null : configKey -> configValue; |
| | | } |
| | | |
| | | @Override |
| | | public IConfigService getObject(Object... args) { |
| | | return configService; |
| | | } |
| | | |
| | | @Override |
| | | public IConfigService getIfAvailable() { |
| | | return configService; |
| | | } |
| | | |
| | | @Override |
| | | public IConfigService getIfUnique() { |
| | | return configService; |
| | | } |
| | | |
| | | @Override |
| | | public IConfigService getObject() { |
| | | return configService; |
| | | } |
| | | |
| | | @Override |
| | | public java.util.stream.Stream<IConfigService> stream() { |
| | | return configService == null ? java.util.stream.Stream.empty() : java.util.stream.Stream.of(configService); |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.datacollection.service; |
| | | |
| | | /** |
| | | * HIS æ°æ®ééçè°åº¦ç¼æï¼æ¨¡åå
æ¥å£ï¼ã |
| | | * <p> |
| | | * 对å¤åªç» {@code com.ruoyi.datacollection.api.DataCollectionFacade} æ´é²ï¼ |
| | | * å
¶å®æ¨¡åä¸è¦ç´æ¥æ³¨å
¥æ¬æ¥å£ã |
| | | */ |
| | | public interface IHisDataCollectionService { |
| | | |
| | | /** |
| | | * HIS æ°æ®ééï¼å {@code RyTask#dealHisData(String)}ï¼é»è¾ä¸è¡æªæ¹ï¼ã |
| | | * |
| | | * @param todayZeroStr ééåºåæ¶é´ {@code yyyy-MM-dd HH:mm:ss}ï¼ä¸ºç©ºæ¶å"ä»å¤© 00:00" |
| | | */ |
| | | void dealHisData(String todayZeroStr); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.datacollection.service; |
| | | |
| | | /** |
| | | * å¨é¢æ£è
"ç§å®¤ / ç
åº / åºä½"æ¯æ¥å·æ°ï¼æ¬æ¨¡åå
çç¼ææ¥å£ï¼ã |
| | | * <p> |
| | | * 对å¤åªç» {@code com.ruoyi.datacollection.api.DataCollectionFacade} æ´é²ï¼ |
| | | * å
¶å®æ¨¡åä¸è¦ç´æ¥æ³¨å
¥æ¬æ¥å£ã |
| | | * |
| | | * <h3>为ä»ä¹åç¬ä¸ä¸ª Serviceï¼è䏿¯å¡è¿ {@link IHisDataCollectionService}</h3> |
| | | * {@code HisDataCollectionServiceImpl} æ¯"ä» {@code RyTask#dealHisData} åæ ·æ¬å
¥ã |
| | | * 廿鶿¹å¨"çæ¬è¿ä»¶ï¼è¿æ¥å¿éå«åé½ä¿çï¼ï¼æ¬æ¬¡æ¯<b>æ°å¢è½å</b>ï¼ |
| | | * æ··è¿å»ä¼è®©é£ä»½"å¯ä¸æ¬è¿åéè¡æ¯å¯¹"çè¯æ®å¤±æãæ
å¦èµ·ä¸ä¸ªç±»ï¼åç®¡ä¸æ®µã |
| | | */ |
| | | public interface IInhospDeptRefreshService { |
| | | |
| | | /** |
| | | * å·æ°å¨é¢æ£è
çç§å®¤/ç
åº/åºä½ï¼ååéä¸ï¼ææ£è
éæ¡æ ¸å¯¹ï¼ã |
| | | * <p> |
| | | * æ°æ®æºæ¯"å
¥é¢ééç¨çé£ä¸ªå¥åº·è®°å½æ¥å£"ï¼æ {@code serialnum} 忥 + å¨é¢ç¶æè¿æ»¤ï¼ï¼ |
| | | * è¿åçæ¯è¯¥æ£è
<b>å½å</b>ä½ç½®ï¼å·²ä¸å¨é¢çæ£è
ä¼è¢«è·³è¿ï¼åºå
ä½ç½®ä¿æä¸å¨ã |
| | | * <p> |
| | | * å¹çï¼åªå"ä¸åºå
ä¸ä¸è´"çåæ®µï¼éè·æ 害ã |
| | | * |
| | | * @return å®é
åçæ´æ°çè®°å½æ¡æ°ï¼0 表示没ååãç«ç¹ä¸å¹é
ææ¬è½®è¢«è·³è¿ï¼ |
| | | */ |
| | | int refreshInhospDeptInfo(); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.datacollection.service.impl; |
| | | |
| | | import com.ruoyi.common.core.service.HisGatherApi; |
| | | import com.ruoyi.common.core.service.dto.SltdGatherReq; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.datacollection.service.IHisDataCollectionService; |
| | | import com.ruoyi.system.domain.SysConfig; |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.LocalTime; |
| | | import java.time.ZoneId; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * HIS æ°æ®ééè°åº¦ç¼æå®ç° ââ |
| | | * <b>ç± {@code ruoyi-quartz} ç {@code RyTask#dealHisData} + {@code collectSegmentData} åæ ·æ¬å
¥</b>ã |
| | | * |
| | | * <h3>æ¬è¿çºªå¾ï¼æ¬ç±»å»æ"é¶æ¹å¨"ï¼</h3> |
| | | * <ul> |
| | | * <li>ç«ç¹åæ¯ï¼{@code xh} / {@code hn} / {@code sltd}-{@code nhfy}ï¼ãæ¶é´çªå£ç®æ³ã |
| | | * 30 天忮µåæº¯çæ®µé¿ä¸é¡ºåºãæ¯ä¸ªééå¨ä½çå
åãå¼å¸¸åæçèå´ãæ¥å¿ææ¡ |
| | | * ââ å
¨é¨ä¸æ¬è¿åä¸è´ï¼</li> |
| | | * <li>å¯ä¸çå½¢å¼ååï¼å
é¨ VOï¼{@code ServiceSLTDInhospReqVO} / {@code ServiceSLTDDeptReqVO} / |
| | | * {@code HnDataGatherVO}ï¼æ¢æå¥çº¦ DTO {@link SltdGatherReq} / 两个 {@code Date}ï¼ |
| | | * ç± smartor ä¾§ Bridge éåæ®µæ¬åå VOï¼å段设置顺åºä¸"æ¾å¼ç½® null"é½ä¿çï¼ |
| | | * <li>{@code CollectionUtils.isNotEmpty(...)} æ¢æçä»·ç {@code list != null && !list.isEmpty()} |
| | | * ï¼é¿å
ä¸ºä¸æ¬¡å¤ç©ºç»æ¨¡åå¼ commons-collections4ï¼ï¼</li> |
| | | * <li>{@code sys_config} ç读æ³<b>å»æä¿æ</b> {@code selectConfigList(æ¡ä»¶)} + å第 0 è¡ |
| | | * ï¼å«åå®ç°ç LIKE å¹é
ä¸"䏿åºåé¦è¡"è¯ä¹ï¼ï¼æ²¡ææ¹æ {@code selectConfigByKey} |
| | | * ââ 飿¯"顺æä¼å"ï¼ä¼æ¹åæ¥è¯¢è¯ä¹ï¼å彿¶æ æ³éæ¡æ¯å¯¹ã</li> |
| | | * </ul> |
| | | * |
| | | * <h3>å®ä¸ç®¡ä»ä¹</h3> |
| | | * çæ£çééå¨ä½ï¼HTTP åæ°ãå
¥åºï¼ä¸å¨æ¬ç±»ï¼é£éä»å¨ smartorï¼ç» |
| | | * {@link HisGatherApi} å¥çº¦è°ç¨ï¼åç»åæ¹æ¬è¿æ¬æ¨¡åã |
| | | * |
| | | * @see com.ruoyi.datacollection.api.DataCollectionFacade 对å¤é¨é¢ |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class HisDataCollectionServiceImpl implements IHisDataCollectionService { |
| | | |
| | | /** |
| | | * çç«åå¾· / ååéä¸çæºæIDï¼åå®ç°éçåé¢é {@code "20001001"}ï¼ |
| | | */ |
| | | private static final String SLTD_ORG_ID = "20001001"; |
| | | |
| | | /** |
| | | * 彿¶ç«ç¹æ è¯ï¼å {@code RyTask} ç {@code @Value("${spring.profiles.active}")}ï¼ |
| | | */ |
| | | @Value("${spring.profiles.active}") |
| | | private String active; |
| | | |
| | | /** |
| | | * HIS ééè½åå¥çº¦ï¼å½åå®ç°å¨ smartorï¼çº¯è½¬åå°æ¢æ Serviceï¼ã |
| | | * <p> |
| | | * â ï¸ å»æ<b>ç´æ¥æ³¨å
¥</b>è䏿¯ {@code ObjectProvider} æ°æ§åï¼ |
| | | * ééå®ç°æ¯æ°æ®é¾è·¯çå¿
éä»¶ï¼"åä¸å°å°±éé»ä¸é"æ£æ¯æå±é©ç失败形æï¼ |
| | | * è¿é让å®å¯å¨æå°±æ´é²ï¼å®å¯å¯å¨å¤±è´¥ï¼ä¹ä¸è¦éé»å°æ°æ®ï¼ã |
| | | */ |
| | | @Autowired |
| | | private HisGatherApi hisGatherApi; |
| | | |
| | | /** |
| | | * åæ°é
ç½®æå¡ï¼ruoyi-system ç APIï¼ï¼è¯» {@code sltd.gather.sysuser} / {@code sltd.gather.campusid} |
| | | */ |
| | | @Autowired |
| | | private ISysConfigService configService; |
| | | |
| | | /** |
| | | * HISæ°æ®éé |
| | | * 宿¶ä»»å¡ï¼é鿣è
ä¿¡æ¯ãåºé¢ãé¨è¯æ°æ® |
| | | * |
| | | * @param todayZeroStr å½åçæ¶é´ ä¾å¦ï¼2026-05-06 00:00:00 |
| | | */ |
| | | @Override |
| | | public void dealHisData(String todayZeroStr) { |
| | | log.info("ãdealHisDataãå¼å§æ§è¡HISæ°æ®ééä»»å¡"); |
| | | // è·åæ¨å¤©0ç¹å°ä»å¤©0ç¹çæ¶é´èå´ |
| | | LocalDateTime todayZero = LocalDateTime.now().with(LocalTime.MIN); |
| | | if (StringUtils.isNotBlank(todayZeroStr)) { |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | todayZero = LocalDateTime.parse(todayZeroStr, formatter); |
| | | } |
| | | LocalDateTime yesterdayZero = todayZero.minusDays(1); |
| | | log.info("ãdealHisDataãééæ¶é´èå´ï¼{} ~ {}", yesterdayZero, todayZero); |
| | | |
| | | if (active.trim().equals("xh")) { |
| | | try { |
| | | // ééå
¥é¢æ°æ® |
| | | log.info("ãdealHisDataãæ°åå¼å§ééå
¥é¢æ°æ®"); |
| | | hisGatherApi.gatherXhInhospRecords("0", yesterdayZero, todayZero); |
| | | log.info("ãdealHisDataãæ°åå
¥é¢æ°æ®éé宿"); |
| | | |
| | | // ééåºé¢æ°æ® |
| | | log.info("ãdealHisDataãæ°åå¼å§ééåºé¢æ°æ®"); |
| | | hisGatherApi.gatherXhInhospRecords("1", yesterdayZero, todayZero); |
| | | log.info("ãdealHisDataãæ°ååºé¢æ°æ®éé宿"); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("ãdealHisDataãæ°åæ°æ®ééå¼å¸¸", e); |
| | | } |
| | | } else if (active.trim().equals("hn")) { |
| | | try { |
| | | // æ²³åæ°æ®éé |
| | | log.info("ãdealHisDataãæ²³åå¼å§ééæ°æ®"); |
| | | Date startTime = Date.from(yesterdayZero.atZone(ZoneId.systemDefault()).toInstant()); |
| | | Date endTime = Date.from(todayZero.atZone(ZoneId.systemDefault()).toInstant()); |
| | | |
| | | hisGatherApi.gatherHnRecords(startTime, endTime); |
| | | log.info("ãdealHisDataãæ²³åç»æééæ°æ®"); |
| | | } catch (Exception e) { |
| | | log.error("ãdealHisDataãæ²³åæ°æ®ééå¼å¸¸", e); |
| | | } |
| | | } else if (active.trim().equals("sltd") || active.trim().equals("nhfy")) { |
| | | //çç«åå¾·ä¸ååéä¸ç¨åä¸å¥ééæ¹æ³ï¼é½æ¯æ¥æªæ¥æä¾ï¼ |
| | | |
| | | try { |
| | | //è·åæ¯å¦éè¦ééç¨æ·ãé¨é¨ä¿¡æ¯ |
| | | SysConfig config = new SysConfig(); |
| | | config.setConfigKey("sltd.gather.sysuser"); |
| | | config.setOrgid(SLTD_ORG_ID); |
| | | List<SysConfig> sysConfigs = configService.selectConfigList(config); |
| | | |
| | | //è·åçç«åå¾·è¦ééçé¢åº |
| | | SysConfig cf = new SysConfig(); |
| | | cf.setConfigKey("sltd.gather.campusid"); |
| | | cf.setOrgid(SLTD_ORG_ID); |
| | | List<SysConfig> sysConfigcampusids = configService.selectConfigList(cf); |
| | | |
| | | List<Long> campusidList = new ArrayList<>(); |
| | | if (sysConfigcampusids != null && !sysConfigcampusids.isEmpty()) { |
| | | String[] split = sysConfigcampusids.get(0).getConfigValue().split(","); |
| | | campusidList = Arrays.stream(split).map(Long::valueOf).collect(Collectors.toList()); |
| | | } else { |
| | | log.error("SysConfigä¸çé¢åºID为空ï¼"); |
| | | return; |
| | | } |
| | | |
| | | //configValue = 1 ä¸éè¦éé configValue = 2éè¦éé |
| | | if (sysConfigs != null && !sysConfigs.isEmpty() && sysConfigs.get(0).getConfigValue().equals("2")) { |
| | | log.info("ãdealHisDataãçç«åå¾·âé¨é¨ä¿¡æ¯âå¼å§ééæ°æ®"); |
| | | SltdGatherReq serviceSLTDDeptReqVO = new SltdGatherReq(); |
| | | serviceSLTDDeptReqVO.setOrgId(SLTD_ORG_ID); |
| | | serviceSLTDDeptReqVO.setCampusIds(campusidList); |
| | | Boolean aBoolean1 = hisGatherApi.gatherSltdDeptWardArea(serviceSLTDDeptReqVO); |
| | | log.info("ãdealHisDataãçç«åå¾·âé¨é¨ä¿¡æ¯âç»æééæ°æ®ï¼{}", aBoolean1); |
| | | |
| | | Boolean aBoolean = false; |
| | | for (Long cid : campusidList) { |
| | | log.info("ãdealHisDataãçç«åå¾·âç¨æ·ä¿¡æ¯âå¼å§ééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | SltdGatherReq reqVO = new SltdGatherReq(); |
| | | reqVO.setOrgId(SLTD_ORG_ID); |
| | | reqVO.setCampusId(cid); |
| | | ArrayList<String> statusList = new ArrayList<>(); |
| | | statusList.add("1"); |
| | | reqVO.setStatusList(statusList); |
| | | aBoolean = hisGatherApi.gatherSltdHospUser(reqVO); |
| | | } |
| | | log.info("ãdealHisDataãçç«åå¾·âç¨æ·ä¿¡æ¯âç»æééæ°æ®ï¼{}", aBoolean); |
| | | //ç¾ç
åå
¸éé |
| | | hisGatherApi.gatherIcd10(); |
| | | } |
| | | |
| | | // nhfy/sltdåæº¯30天忮µééå¤æï¼æ¯æ®µæå¤4å¤©ï¼ |
| | | boolean isBackfill = (active.trim().equals("nhfy") || active.trim().equals("sltd")) && StringUtils.isNotBlank(todayZeroStr); |
| | | if (isBackfill) { |
| | | DateTimeFormatter dateFmt = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
| | | LocalDate segStart = todayZero.toLocalDate().minusDays(30); |
| | | LocalDate segEndDate = todayZero.toLocalDate(); |
| | | int segCount = 0; |
| | | while (!segStart.isAfter(segEndDate)) { |
| | | LocalDate segEnd = segStart.plusDays(3); |
| | | if (segEnd.isAfter(segEndDate)) { |
| | | segEnd = segEndDate; |
| | | } |
| | | segCount++; |
| | | log.info("ãdealHisDataã{}åæº¯ç¬¬{}段ééï¼æ¥æèå´ï¼{} ~ {}", active.trim(), segCount, segStart.format(dateFmt), segEnd.format(dateFmt)); |
| | | for (Long cid : campusidList) { |
| | | collectSegmentData(cid, segStart.format(dateFmt), segEnd.format(dateFmt)); |
| | | } |
| | | segStart = segEnd.plusDays(1); |
| | | } |
| | | log.info("ãdealHisDataã{}åæº¯éé宿ï¼å
±{}段", active.trim(), segCount); |
| | | } |
| | | |
| | | // çç«åå¾·æ°æ®ééï¼éåæº¯æ¨¡å¼ææ§è¡ï¼ |
| | | if (!isBackfill) { |
| | | for (Long cid : campusidList) { |
| | | log.info("ãdealHisDataãçç«åå¾·é¢å
¥é¢å¼å§ééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | String nowTime = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); |
| | | SltdGatherReq serviceSLTDInhospReqVO = new SltdGatherReq(); |
| | | serviceSLTDInhospReqVO.setOrgId(SLTD_ORG_ID); |
| | | serviceSLTDInhospReqVO.setCampusId(cid); |
| | | serviceSLTDInhospReqVO.setEncounterTimeStart(nowTime); |
| | | serviceSLTDInhospReqVO.setEncounterTimeEnd(nowTime); |
| | | if (active.trim().equals("nhfy")) { |
| | | serviceSLTDInhospReqVO.setEncounterTimeStart(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | serviceSLTDInhospReqVO.setEncounterTimeEnd(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | } |
| | | List<String> list = new ArrayList<>(); |
| | | list.add("FH0109.22"); |
| | | list.add("FH0109.23"); |
| | | list.add("FH0109.53"); |
| | | serviceSLTDInhospReqVO.setStatusList(list); |
| | | // log.info("ãdealHisDataãçç«åå¾·âé¢å
¥é¢âééæ°æ®å
¥åï¼{}", serviceSLTDInhospReqVO); |
| | | hisGatherApi.gatherSltdHealthcareRecords(serviceSLTDInhospReqVO); |
| | | log.info("ãdealHisDataãçç«åå¾·âé¢å
¥é¢âçµæééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | |
| | | log.info("ãdealHisDataãçç«åå¾·âå
¥é¢âå¼å§ééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | serviceSLTDInhospReqVO.setOrgId(SLTD_ORG_ID); |
| | | serviceSLTDInhospReqVO.setCampusId(cid); |
| | | serviceSLTDInhospReqVO.setEncounterTimeStart(null); |
| | | serviceSLTDInhospReqVO.setEncounterTimeEnd(null); |
| | | serviceSLTDInhospReqVO.setStartHeadTime(nowTime); |
| | | serviceSLTDInhospReqVO.setStartTailTime(nowTime); |
| | | if (active.trim().equals("nhfy")) { |
| | | serviceSLTDInhospReqVO.setStartHeadTime(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | serviceSLTDInhospReqVO.setStartTailTime(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | } |
| | | List<String> listStr = new ArrayList<>(); |
| | | listStr.add("FH0109.24"); |
| | | serviceSLTDInhospReqVO.setStatusList(listStr); |
| | | // log.info("ãdealHisDataãçç«åå¾·âå
¥é¢âééæ°æ®å
¥åï¼{}", serviceSLTDInhospReqVO); |
| | | hisGatherApi.gatherSltdHealthcareRecords(serviceSLTDInhospReqVO); |
| | | log.info("ãdealHisDataãçç«åå¾·âå
¥é¢âçµæééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | |
| | | log.info("ãdealHisDataãçç«åå¾·âåºé¢âå¼å§ééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | serviceSLTDInhospReqVO.setStartHeadTime(null); |
| | | serviceSLTDInhospReqVO.setStartTailTime(null); |
| | | serviceSLTDInhospReqVO.setEncounterTimeStart(null); |
| | | serviceSLTDInhospReqVO.setEncounterTimeEnd(null); |
| | | serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(nowTime); |
| | | serviceSLTDInhospReqVO.setPreOutHospitalTailDate(nowTime); |
| | | if (active.trim().equals("nhfy")) { |
| | | serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | serviceSLTDInhospReqVO.setPreOutHospitalTailDate(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | } |
| | | serviceSLTDInhospReqVO.setHealthcareRecordTypeList(null); |
| | | List<String> list2 = new ArrayList<>(); |
| | | // list2.add("FH0108.02"); |
| | | //åºé¢ |
| | | list2.add("FH0109.27"); |
| | | //é¢åºé¢ |
| | | list2.add("FH0109.25"); |
| | | serviceSLTDInhospReqVO.setStatusList(list2); |
| | | // log.info("ãdealHisDataãçç«åå¾·âåºé¢âééæ°æ®å
¥åï¼{}", serviceSLTDInhospReqVO); |
| | | hisGatherApi.gatherSltdHealthcareRecords(serviceSLTDInhospReqVO); |
| | | log.info("ãdealHisDataãçç«åå¾·âåºé¢âæééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("ãdealHisDataãçç«åå¾·æ°æ®ééå¼å¸¸", e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åæ®µééæ°æ®ï¼é¢å
¥é¢ãå
¥é¢ãåºé¢ï¼ |
| | | * ç¨äºnhfy/sltdåæº¯ééï¼æ¯æ¬¡æå¤æ¥è¯¢7å¤©æ°æ® |
| | | * |
| | | * @param cid é¢åºID |
| | | * @param startDateStr æ¥æå¼å§ yyyy-MM-dd |
| | | * @param endDateStr æ¥æç»æ yyyy-MM-dd |
| | | */ |
| | | private void collectSegmentData(Long cid, String startDateStr, String endDateStr) { |
| | | // // é¢å
¥é¢ |
| | | log.info("ãdealHisDataãé¢å
¥é¢å¼å§ééæ°æ®ï¼é¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr); |
| | | SltdGatherReq reqVO = new SltdGatherReq(); |
| | | reqVO.setOrgId(SLTD_ORG_ID); |
| | | reqVO.setCampusId(cid); |
| | | reqVO.setEncounterTimeStart(startDateStr); |
| | | reqVO.setEncounterTimeEnd(endDateStr); |
| | | List<String> preAdmitStatus = new ArrayList<>(); |
| | | preAdmitStatus.add("FH0109.22"); |
| | | preAdmitStatus.add("FH0109.23"); |
| | | preAdmitStatus.add("FH0109.53"); |
| | | reqVO.setStatusList(preAdmitStatus); |
| | | log.info("ãdealHisDataãé¢å
¥é¢ééæ°æ®å
¥åï¼{}", reqVO); |
| | | try { |
| | | hisGatherApi.gatherSltdHealthcareRecords(reqVO); |
| | | } catch (Exception e) { |
| | | // åç±»æ°æ®å¤±è´¥ä¸åå䏿ï¼å¦å䏿®µå¤±è´¥ä¼è®©æ¬æ¬¡å溯åé¢çæææ®µé½ä¸æ§è¡ |
| | | log.error("ãdealHisDataãé¢å
¥é¢éé失败ï¼è·³è¿è¯¥ç±»ç»§ç»ãé¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr, e); |
| | | } |
| | | log.info("ãdealHisDataãé¢å
¥é¢çµäºééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | |
| | | // å
¥é¢ |
| | | log.info("ãdealHisDataãå
¥é¢å¼å§ééæ°æ®ï¼é¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr); |
| | | reqVO = new SltdGatherReq(); |
| | | reqVO.setOrgId(SLTD_ORG_ID); |
| | | reqVO.setCampusId(cid); |
| | | reqVO.setStartHeadTime(startDateStr); |
| | | reqVO.setStartTailTime(endDateStr); |
| | | List<String> admitStatus = new ArrayList<>(); |
| | | admitStatus.add("FH0109.24"); |
| | | reqVO.setStatusList(admitStatus); |
| | | log.info("ãdealHisDataãå
¥é¢ééæ°æ®å
¥åï¼{}", reqVO); |
| | | try { |
| | | hisGatherApi.gatherSltdHealthcareRecords(reqVO); |
| | | } catch (Exception e) { |
| | | // åç±»æ°æ®å¤±è´¥ä¸åå䏿ï¼å¦å䏿®µå¤±è´¥ä¼è®©æ¬æ¬¡å溯åé¢çæææ®µé½ä¸æ§è¡ |
| | | log.error("ãdealHisDataãå
¥é¢éé失败ï¼è·³è¿è¯¥ç±»ç»§ç»ãé¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr, e); |
| | | } |
| | | log.info("ãdealHisDataãå
¥é¢çµäºééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | |
| | | // åºé¢ |
| | | log.info("ãdealHisDataãåºé¢å¼å§ééæ°æ®ï¼é¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr); |
| | | reqVO = new SltdGatherReq(); |
| | | reqVO.setOrgId(SLTD_ORG_ID); |
| | | reqVO.setCampusId(cid); |
| | | reqVO.setPreOutHospitalHeadDate(startDateStr); |
| | | reqVO.setPreOutHospitalTailDate(endDateStr); |
| | | List<String> dischargeStatus = new ArrayList<>(); |
| | | //åºé¢ |
| | | dischargeStatus.add("FH0109.27"); |
| | | //é¢åºé¢ |
| | | dischargeStatus.add("FH0109.25"); |
| | | reqVO.setStatusList(dischargeStatus); |
| | | log.info("ãdealHisDataãåºé¢ééæ°æ®å
¥åï¼{}", reqVO); |
| | | try { |
| | | hisGatherApi.gatherSltdHealthcareRecords(reqVO); |
| | | } catch (Exception e) { |
| | | // åç±»æ°æ®å¤±è´¥ä¸åå䏿ï¼å¦å䏿®µå¤±è´¥ä¼è®©æ¬æ¬¡å溯åé¢çæææ®µé½ä¸æ§è¡ |
| | | log.error("ãdealHisDataãåºé¢éé失败ï¼è·³è¿è¯¥ç±»ç»§ç»ãé¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr, e); |
| | | } |
| | | log.info("ãdealHisDataãåºé¢ç»æééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.datacollection.service.impl; |
| | | |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.core.service.HisGatherApi; |
| | | import com.ruoyi.common.core.service.dto.InhospPositionRecord; |
| | | import com.ruoyi.common.core.service.dto.SltdGatherReq; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.datacollection.service.IInhospDeptRefreshService; |
| | | import com.ruoyi.inhospvisit.api.InhospVisitFacade; |
| | | import com.ruoyi.inhospvisit.domain.PatMedInhosp; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.Collections; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * å¨é¢æ£è
"ç§å®¤ / ç
åº / åºä½"æ¯æ¥å·æ° ââ ç¼æä¸"æ¹ä¸æ¹"çå¤å®é½å¨æ¬ç±»ã |
| | | * |
| | | * <h3>å®è§£å³ä»ä¹</h3> |
| | | * å¨é¢æ£è
伿¢ç§å®¤ãæ¢ç
åºãæ¢åºã{@code pat_med_inhosp} çä½ç½®å段åªå¨"å
¥é¢éé"æ¶å䏿¬¡ï¼ |
| | | * ä¹åä¸ä¼èªå·±æ´æ° ââ äºæ¯è½¬ç§/æ¢åºæ£è
ä¼ä¸ç´åå¨å
¥é¢å½æ¶çä½ç½® |
| | | * ï¼å®æµ 120 äººæ½æ ·ï¼25 人åºä½ä¸ HIS ä¸ä¸è´ã约 9% çæ£è
å½å¤©å·²åºé¢ä½åºé仿 å¨é¢ï¼ã |
| | | * æ¬ç±»æ¯å¤©å
¨éæ ¸å¯¹ä¸æ¬¡ï¼æä½ç½®çº å HIS çç°ç¶ã |
| | | * |
| | | * <h3>åæ°å£å¾ï¼{@code dtcQueryHealthcareRecordList}ï¼ä¸å
¥é¢ééåä¸ä¸ªæ¥å£ï¼</h3> |
| | | * æ {@code healthcareRecordNo}ï¼= {@code serialnum}ï¼åæ¥ï¼é
|
| | | * {@code statusList=["FH0109.24"]}ï¼å¨é¢ï¼ï¼è¿åçæ¯<b>该æ£è
æ¤å»çç¶æ</b>ï¼ |
| | | * <ul> |
| | | * <li>{@code data} æ° 1 æ¡ â å½åä½ç½®è§ {@link InhospPositionRecord}ï¼</li> |
| | | * <li>{@code data} 为 {@code []} â 该æ£è
å½å<b>ä¸å¨"å
¥é¢"ç¶æ</b> |
| | | * ï¼å®æµè¿æ¹å°±æ¯"å½å¤©å·²åºé¢ãä½åºéè¿æ¯å¨é¢"çæ£è
ï¼{@code FH0109.27} |
| | | * ä¸ {@code preOutHospitalDate} å°±å¨å å°æ¶åï¼â <b>è·³è¿å¹¶è®¡æ°ï¼ä¸å¨åºå
ä½ç½®</b>ï¼ |
| | | * ç¶ææ¬èº«ç±åºé¢ééè´è´£ï¼è¿é䏿¹ {@code inhospstate}ã</li> |
| | | * </ul> |
| | | * ä¸"åæ®µåå²"æ¥å£ç¸æ¯ï¼è¿æ¡è·¯æ²¡æ"åææ°ä¸æ®µ"å"空å
¥ç§æ¶é´"çåï¼ |
| | | * ä¸ {@code bedNumber} å¨é¢æ£è
宿µææå¼ ââ æä»¥"åºä½ä¸ºç©ºåæ¸
空"å¯ä»¥æå颿§è¡ã |
| | | * |
| | | * <h3>åæ®µæ å°ï¼ä¸"å
¥é¢éé"åæºï¼æ
ä¸ä¼åºç°ä¸¤å¥å£å¾ï¼</h3> |
| | | * <pre> |
| | | * pat_med_inhosp.deptcode <- String.valueOf(deptId) |
| | | * pat_med_inhosp.deptname <- deptName |
| | | * pat_med_inhosp.hospitaldistrictcode <- String.valueOf(areaId) |
| | | * pat_med_inhosp.hospitaldistrictid <- String.valueOf(areaId) |
| | | * pat_med_inhosp.hospitaldistrictname <- areaName |
| | | * pat_med_inhosp.bed_no <- bedNumberï¼ä¸ºç©ºåæ¸
ç©ºï¼ |
| | | * </pre> |
| | | * |
| | | * <h3>廿ä¸ç¢°çåæ®µ</h3> |
| | | * {@code starttime}ï¼å
¥é¢æ¶é´ï¼ã{@code endtime}ã{@code drcode/drname}ã |
| | | * {@code roomno}ã{@code deptid}ã{@code schemestatus}ã |
| | | * {@code deptcheck_flag}/{@code wardcheck_flag} ç任塿 å¿ã |
| | | * <b>ä¹ä¸æ°å»º"转ç§"è®°å½</b>ï¼{@code inhospstate} ä¿æ 0ï¼åªå°±å°æ¹ä½ç½®ã |
| | | * |
| | | * <h3>失败çå¤ç½®</h3> |
| | | * åæ¡å¤±è´¥åªè®°æ¥å¿å¹¶ç»§ç»ä¸ä¸æ¡ï¼è¿ç»å¤±è´¥è¾¾å° {@link #MAX_CONSECUTIVE_FAIL} å¤å®æ¥å£ä¸å¯ç¨ã |
| | | * æ¬è½®æåç»æï¼ä¸é¨æ¥è¯éé忬¾çºªå¾ï¼ï¼å©ä½æ£è
ä¸ä¸è½®éæ°å
¨éæ ¸å¯¹ï¼ä¸ä¼æ¼ã |
| | | * |
| | | * @see com.ruoyi.datacollection.api.DataCollectionFacade 对å¤é¨é¢ |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class InhospDeptRefreshServiceImpl implements IInhospDeptRefreshService { |
| | | |
| | | /** |
| | | * ä»
ååéä¸å¯ç¨ï¼æ¥å£æç«ç¹é
ç½® {@code sltd_pub_path} ä¸ {@code lwl_app_key} |
| | | * ï¼ååç app-key 宿µå¯ç¨ï¼å
¶ä»ç«ç¹æªéªè¯ï¼æ
ä¸åé»è®¤æ¾å¼ï¼ |
| | | */ |
| | | private static final String SITE_NHFY = "nhfy"; |
| | | |
| | | /** |
| | | * æºæIDï¼ä¸ {@code HisDataCollectionServiceImpl} / ééå®ç°éçåé¢éä¸è´ï¼ |
| | | */ |
| | | private static final String ORG_ID = "20001001"; |
| | | |
| | | /** |
| | | * é¢åºIDï¼æçº¦å®åºå®ä¼ ååéä¸ä¸»é¢åºï¼å®æµæ {@code healthcareRecordNo} åæ¥æ¶ |
| | | * è¯¥åæ°ä¸åä¸è¿æ»¤ï¼ä¼ 30001002 æ 30038001 è¿åç齿¯å䏿¡è®°å½ï¼ |
| | | */ |
| | | private static final Long CAMPUS_ID = 30001002L; |
| | | |
| | | /** |
| | | * åªå"å¨é¢"ï¼å
¥é¢ï¼ç¶æçè®°å½ï¼å·²åºé¢/é¢åºé¢ä¼è¢« HIS ä¾§è¿æ»¤æï¼äºæ¯è¿å空å表 |
| | | */ |
| | | private static final List<String> STATUS_IN_HOSP = |
| | | Collections.unmodifiableList(Arrays.asList("FH0109.24")); |
| | | |
| | | /** |
| | | * å¨é¢ç¶æç ï¼ç¨äºæ ¡éªæ¥å£è¿åç飿¡è®°å½ç¡®å®æ¯å¨é¢ï¼ |
| | | */ |
| | | private static final String STATUS_CODE_IN_HOSP = "FH0109.24"; |
| | | |
| | | /** |
| | | * è¿è¡éï¼sys_job å·²é
"ç¦æ¢å¹¶å"ï¼è¿éåé²ä¸æ"æå·¥è§¦åå å 宿¶ä»»å¡" |
| | | */ |
| | | private static final String RUN_LOCK_KEY = "datacollection:inhospDept:running"; |
| | | |
| | | /** |
| | | * è¿è¡é TTLï¼ä¸è½®æ£å¸¸çº¦ 7~10 åéï¼å®æµ 152ms/次 à 约 2900 人ï¼ï¼ç»è¶³ä½é |
| | | */ |
| | | private static final long RUN_LOCK_MINUTES = 120L; |
| | | |
| | | /** |
| | | * è¿ç»å¤±è´¥éå¼ï¼è¾¾å°å³å¤å®æ¥å£ä¸å¯ç¨ï¼æ¬è½®æåç»æï¼é¿å
å åæ¡é误æ¥å¿ + ç©ºè½¬ï¼ |
| | | */ |
| | | private static final int MAX_CONSECUTIVE_FAIL = 20; |
| | | |
| | | /** |
| | | * ç«ç¹æ è¯ï¼{@code @Value("${spring.profiles.active}")}ï¼ä¸æ¢æééç¼æåæ¬¾ï¼ |
| | | */ |
| | | @Value("${spring.profiles.active}") |
| | | private String active; |
| | | |
| | | /** |
| | | * HIS ééè½åå¥çº¦ï¼smartor ä¾§ Bridge 纯转åå° healthcareRecord æ¥è¯¢ï¼åªåæ°ä¸è½åºï¼ |
| | | */ |
| | | @Autowired |
| | | private HisGatherApi hisGatherApi; |
| | | |
| | | /** |
| | | * åºå
¥é¢æ°æ®å¥çº¦ï¼{@code pat_med_inhosp} å½å± ruoyi-inhospvisitï¼ï¼ |
| | | * åå¨é¢åé + ååä½ç½®ã廿ä¸ç¢°è¯¥æ¨¡åç Mapperã |
| | | */ |
| | | @Autowired |
| | | private InhospVisitFacade inhospVisitFacade; |
| | | |
| | | /** |
| | | * è¿è¡éï¼ruoyi-common ç RedisCacheï¼ |
| | | */ |
| | | @Autowired |
| | | private RedisCache redisCache; |
| | | |
| | | @Override |
| | | public int refreshInhospDeptInfo() { |
| | | String site = active == null ? "" : active.trim(); |
| | | if (!SITE_NHFY.equals(site)) { |
| | | log.info("ãå¨é¢ä¿¡æ¯å·æ°ãå½åç«ç¹ {} 䏿§è¡ï¼ä»
nhfy å¯ç¨è¯¥æ¥å£ï¼ï¼è·³è¿", active); |
| | | return 0; |
| | | } |
| | | if (!tryLock()) { |
| | | log.warn("ãå¨é¢ä¿¡æ¯å·æ°ãä¸ä¸è½®å°æªç»æï¼Redis é {} è¿å¨ï¼ï¼æ¬è½®è·³è¿", RUN_LOCK_KEY); |
| | | return 0; |
| | | } |
| | | |
| | | long startMs = System.currentTimeMillis(); |
| | | int changed = 0; |
| | | int unchanged = 0; |
| | | int notInHosp = 0; |
| | | int skipped = 0; |
| | | int failed = 0; |
| | | int consecutiveFail = 0; |
| | | boolean aborted = false; |
| | | try { |
| | | // åªæ¥ pat_med_inhosp èªèº«ï¼ä¸ join æ¡£æ¡è¡¨ã䏿è¯ä»¶å·è¿æ»¤ï¼ï¼å¨é¢å£å¾ inhospstate='0' and del_flag='0' |
| | | List<PatMedInhosp> candidates = inhospVisitFacade.selectInhospRefreshCandidates(ORG_ID); |
| | | if (candidates == null || candidates.isEmpty()) { |
| | | log.warn("ãå¨é¢ä¿¡æ¯å·æ°ãæªåå°ä»»ä½å¨é¢æ£è
ï¼orgid={}ï¼ï¼æ¬è½®ä¸åäº", ORG_ID); |
| | | return 0; |
| | | } |
| | | log.info("ãå¨é¢ä¿¡æ¯å·æ°ãå¼å§ï¼å¨é¢æ£è
{} 人ï¼éäººæ ¸å¯¹ç§å®¤/ç
åº/åºä½", candidates.size()); |
| | | |
| | | for (PatMedInhosp row : candidates) { |
| | | try { |
| | | Outcome outcome = refreshOne(row); |
| | | if (outcome == Outcome.CHANGED) { |
| | | changed++; |
| | | } else if (outcome == Outcome.UNCHANGED) { |
| | | unchanged++; |
| | | } else if (outcome == Outcome.NOT_IN_HOSP) { |
| | | notInHosp++; |
| | | } else { |
| | | skipped++; |
| | | } |
| | | consecutiveFail = 0; |
| | | } catch (Exception e) { |
| | | failed++; |
| | | consecutiveFail++; |
| | | log.error("ãå¨é¢ä¿¡æ¯å·æ°ãåæ¡å¤±è´¥å·²è·³è¿ï¼inhospid={}, serialnum={}, patname={}", |
| | | row.getInhospid(), row.getSerialnum(), row.getPatname(), e); |
| | | if (consecutiveFail >= MAX_CONSECUTIVE_FAIL) { |
| | | aborted = true; |
| | | log.error("ãå¨é¢ä¿¡æ¯å·æ°ãè¿ç» {} 人失败ï¼å¤å®æ¥å£ä¸å¯ç¨ï¼æ¬è½®æåç»æï¼å·²æ´æ° {} æ¡ï¼ï¼" |
| | | + "å©ä½æ£è
ä¸ä¸è½®ä¼éæ°å
¨éæ ¸å¯¹ï¼ä¸ä¼æ¼", consecutiveFail, changed); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | log.info("ãå¨é¢ä¿¡æ¯å·æ°ãç»æï¼å¨é¢ {} äººï¼æ´æ° {}ï¼æ åå {}ï¼å·²ä¸å¨é¢ {}ï¼è·³è¿ {}ï¼å¤±è´¥ {}{}ï¼èæ¶ {} ç§", |
| | | candidates.size(), changed, unchanged, notInHosp, skipped, failed, |
| | | aborted ? "ï¼æ¥å£è¿ç»å¤±è´¥ï¼æåç»æï¼" : "", |
| | | (System.currentTimeMillis() - startMs) / 1000); |
| | | return changed; |
| | | } finally { |
| | | unlock(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¸å¯¹å¹¶ï¼å¿
è¦æ¶ï¼æ´æ°ä¸ä¸ªå¨é¢æ£è
çä½ç½®ã |
| | | * |
| | | * @return æ¬æ¬¡å¯¹è¯¥è¡çå¤ç½®ç»æ |
| | | */ |
| | | private Outcome refreshOne(PatMedInhosp row) { |
| | | String serialnum = StringUtils.trim(row.getSerialnum()); |
| | | if (StringUtils.isBlank(serialnum)) { |
| | | log.warn("ãå¨é¢ä¿¡æ¯å·æ°ãå¨é¢è®°å½æ²¡ææµæ°´å·ï¼æ æ³æ ¸å¯¹ï¼è·³è¿ï¼inhospid={}", row.getInhospid()); |
| | | return Outcome.SKIPPED; |
| | | } |
| | | |
| | | SltdGatherReq req = new SltdGatherReq(); |
| | | req.setOrgId(ORG_ID); |
| | | req.setCampusId(CAMPUS_ID); |
| | | req.setStatusList(STATUS_IN_HOSP); |
| | | req.setHealthcareRecordNo(serialnum); |
| | | |
| | | List<InhospPositionRecord> records = hisGatherApi.querySltdInhospPosition(req); |
| | | InhospPositionRecord current = pickInHospRecord(records, serialnum); |
| | | if (current == null) { |
| | | // æ¥å£æå¨é¢ç¶æè¿æ»¤å没æè¿åè®°å½ï¼è¯¥æ£è
å½åå·²ä¸å¨"å
¥é¢"ç¶æã |
| | | // è¿éåªè®¡æ°ã䏿¹åºï¼ç¶æç¿»è½¬æ¯åºé¢ééçèè´£ï¼ï¼æ´ä¸æ¿ç©ºå¼å»è¦çä½ç½®ã |
| | | log.warn("ãå¨é¢ä¿¡æ¯å·æ°ãHIS ä¸è¯¥æ£è
å·²ä¸å¨é¢ï¼è¿å为空ï¼ï¼ä½ç½®ä¿æä¸å¨ï¼çåºé¢ééå¤çç¶æï¼" |
| | | + "inhospid={}, serialnum={}, patname={}", row.getInhospid(), serialnum, row.getPatname()); |
| | | return Outcome.NOT_IN_HOSP; |
| | | } |
| | | return applyIfDiff(row, current) ? Outcome.CHANGED : Outcome.UNCHANGED; |
| | | } |
| | | |
| | | /** |
| | | * ä»è¿åè®°å½éå"å¨é¢"çé£ä¸æ¡ã |
| | | * <p> |
| | | * æ£å¸¸åªä¼è¿å 1 æ¡ï¼è¿éä»åä¸å±é²å¾¡ï¼åªæ¥åç¶æä¸ºå¨é¢çè®°å½ï¼ |
| | | * 䏿¡é½ä¸å¹é
åè¿å {@code null}ï¼æ"å·²ä¸å¨é¢"å¤çï¼ï¼ |
| | | * ç»ä¸æ¿ä¸æ¡ç¶æä¸æçè®°å½å»è¦çåºå
ä½ç½®ã |
| | | */ |
| | | private InhospPositionRecord pickInHospRecord(List<InhospPositionRecord> records, String serialnum) { |
| | | if (records == null || records.isEmpty()) { |
| | | return null; |
| | | } |
| | | for (InhospPositionRecord record : records) { |
| | | if (record == null) { |
| | | continue; |
| | | } |
| | | String status = StringUtils.trim(record.getHealthcareRecordStatus()); |
| | | if (STATUS_CODE_IN_HOSP.equals(status)) { |
| | | return record; |
| | | } |
| | | log.warn("ãå¨é¢ä¿¡æ¯å·æ°ãè¿åè®°å½ç¶æä¸æ¯å¨é¢ï¼å·²å¿½ç¥ï¼serialnum={}, status={}", serialnum, status); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * ä¸åºå
å¼éåæ®µæ¯å¯¹ï¼åªæ"ååçåæ®µ"ååï¼æ²¡æä»»ä½åååä¸å¨åºï¼ä¹ä¸å·æ° update_timeï¼ã |
| | | * |
| | | * @return æ¯å¦å®é
æ§è¡äºæ´æ° |
| | | */ |
| | | private boolean applyIfDiff(PatMedInhosp row, InhospPositionRecord current) { |
| | | PatMedInhosp update = new PatMedInhosp(); |
| | | update.setInhospid(row.getInhospid()); |
| | | StringBuilder changedFields = new StringBuilder(); |
| | | boolean diff = false; |
| | | |
| | | // ç§å®¤ï¼æå¼ææ´æ°ï¼å£å¾ï¼ç§å®¤æå¼æ´æ°ç§å®¤ï¼ç
åºæå¼æ´æ°ç
åºï¼äºä¸çµè¿ï¼ |
| | | if (current.getDeptId() != null) { |
| | | String deptCode = String.valueOf(current.getDeptId()); |
| | | String old = StringUtils.trimToEmpty(row.getDeptcode()); |
| | | if (!deptCode.equals(old)) { |
| | | update.setDeptcode(deptCode); |
| | | changedFields.append("deptcode[").append(old).append("â").append(deptCode).append("] "); |
| | | diff = true; |
| | | } |
| | | } |
| | | if (StringUtils.isNotBlank(current.getDeptName())) { |
| | | String old = StringUtils.trimToEmpty(row.getDeptname()); |
| | | if (!current.getDeptName().equals(old)) { |
| | | update.setDeptname(current.getDeptName()); |
| | | changedFields.append("deptname[").append(old).append("â").append(current.getDeptName()).append("] "); |
| | | diff = true; |
| | | } |
| | | } |
| | | |
| | | // ç
åºï¼code ä¸ id åå¼ï¼æ¢æééå£å¾å°±æ¯ä¸¤ä¸ªå段é½å areaIdï¼ |
| | | if (current.getAreaId() != null) { |
| | | String areaId = String.valueOf(current.getAreaId()); |
| | | String oldCode = StringUtils.trimToEmpty(row.getHospitaldistrictcode()); |
| | | if (!areaId.equals(oldCode)) { |
| | | update.setHospitaldistrictcode(areaId); |
| | | changedFields.append("hospitaldistrictcode[").append(oldCode).append("â").append(areaId).append("] "); |
| | | diff = true; |
| | | } |
| | | String oldAreaId = StringUtils.trimToEmpty(row.getHospitaldistrictid()); |
| | | if (!areaId.equals(oldAreaId)) { |
| | | update.setHospitaldistrictid(areaId); |
| | | changedFields.append("hospitaldistrictid[").append(oldAreaId).append("â").append(areaId).append("] "); |
| | | diff = true; |
| | | } |
| | | } |
| | | if (StringUtils.isNotBlank(current.getAreaName())) { |
| | | String old = StringUtils.trimToEmpty(row.getHospitaldistrictname()); |
| | | if (!current.getAreaName().equals(old)) { |
| | | update.setHospitaldistrictname(current.getAreaName()); |
| | | changedFields.append("hospitaldistrictname[").append(old).append("â").append(current.getAreaName()).append("] "); |
| | | diff = true; |
| | | } |
| | | } |
| | | |
| | | // åºä½ï¼æä¸å¡å£å¾"æ¥å£ç»ä»ä¹å°±æ¯ä»ä¹ï¼ä¸ºç©ºåæ¸
空"ã |
| | | // â ï¸ mapper é"空串=ç½® nullãnull=䏿¹å¨"ï¼æä»¥æ¸
空å¿
é¡»æ¾å¼ä¼ 空串ã |
| | | String apiBed = StringUtils.trim(current.getBedNumber()); |
| | | String dbBed = StringUtils.trimToEmpty(row.getBedNo()); |
| | | if (StringUtils.isBlank(apiBed)) { |
| | | if (StringUtils.isNotBlank(dbBed)) { |
| | | update.setBedNo(""); |
| | | changedFields.append("bed_no[").append(dbBed).append("â(æ¸
空)] "); |
| | | diff = true; |
| | | } |
| | | } else if (!apiBed.equals(dbBed)) { |
| | | update.setBedNo(apiBed); |
| | | changedFields.append("bed_no[").append(dbBed).append("â").append(apiBed).append("] "); |
| | | diff = true; |
| | | } |
| | | |
| | | if (!diff) { |
| | | return false; |
| | | } |
| | | update.setUpdateTime(new Date()); |
| | | int rows = inhospVisitFacade.updatePatMedInhosp(update); |
| | | if (rows <= 0) { |
| | | log.warn("ãå¨é¢ä¿¡æ¯å·æ°ãæ´æ°æªçæï¼å½±åè¡æ° {}ï¼ï¼inhospid={}, serialnum={}, å¾
æ¹å段ï¼{}", |
| | | rows, row.getInhospid(), row.getSerialnum(), changedFields); |
| | | return false; |
| | | } |
| | | log.info("ãå¨é¢ä¿¡æ¯å·æ°ãå·²æ´æ°ï¼inhospid={}, serialnum={}, patname={}, åæ´ï¼{}", |
| | | row.getInhospid(), row.getSerialnum(), row.getPatname(), changedFields); |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * æ¢å æ¬è½®è¿è¡éã |
| | | * <p> |
| | | * Redis ä¸å¯ç¨æ¶<b>éå为æ éæ§è¡</b>ï¼æ¯å¤©ä¸æ¬¡çæ°æ®å·æ°ä¸è¯¥å 为ç¼åæ
éæ´ä½ä¸è·ï¼ |
| | | * æåæ
嵿¯æå·¥è§¦åä¸å®æ¶ä»»å¡å çè· ââ èæ¬åè½æ¯å¹çæ¯å¯¹ï¼å è·åªä¼å¤æå æ¡æ¥å¿ã |
| | | */ |
| | | private boolean tryLock() { |
| | | try { |
| | | if (Boolean.TRUE.equals(redisCache.hasKey(RUN_LOCK_KEY))) { |
| | | return false; |
| | | } |
| | | redisCache.setCacheObject(RUN_LOCK_KEY, String.valueOf(System.currentTimeMillis()), |
| | | RUN_LOCK_MINUTES, TimeUnit.MINUTES); |
| | | return true; |
| | | } catch (Exception e) { |
| | | log.warn("ãå¨é¢ä¿¡æ¯å·æ°ãRedis è¿è¡éä¸å¯ç¨ï¼{}ï¼ï¼æ¬è½®æ éæ§è¡", e.getMessage()); |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | private void unlock() { |
| | | try { |
| | | redisCache.deleteObject(RUN_LOCK_KEY); |
| | | } catch (Exception e) { |
| | | log.warn("ãå¨é¢ä¿¡æ¯å·æ°ãéæ¾è¿è¡é失败ï¼{}", e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åæ¡æ£è
çå¤ç½®ç»æ |
| | | */ |
| | | private enum Outcome { |
| | | /** |
| | | * ä½ç½®æååå¹¶å·²åå |
| | | */ |
| | | CHANGED, |
| | | /** |
| | | * ä¸åºå
ä¸è´ï¼æªæ¹å¨ |
| | | */ |
| | | UNCHANGED, |
| | | /** |
| | | * HIS é该æ£è
å·²ä¸å¨"å
¥é¢"ç¶æï¼æ¥å£è¿å为空ï¼ï¼åºå
ä½ç½®ä¿æä¸å¨ |
| | | */ |
| | | NOT_IN_HOSP, |
| | | /** |
| | | * æ¿ä¸å°å¯ç¨ä¿¡æ¯ï¼æ æµæ°´å· / è¿åè®°å½ç¶æä¸å¯¹ï¼ |
| | | */ |
| | | SKIPPED |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<PatMedInhosp> selectInhospRefreshCandidates(String orgid) { |
| | | return patMedInhospMapper.selectInhospRefreshCandidates(orgid); |
| | | } |
| | | |
| | | @Override |
| | | public List<PatMedInhosp> selectPatMedInhospListByCondition(PatMedInhospVO patMedInhospVO) { |
| | | return patMedInhospMapper.selectPatMedInhospListByCondition(patMedInhospVO); |
| | | } |
| | |
| | | List<PatMedInhosp> selectPatMedInhospListBySerialnum(PatMedInhosp patMedInhosp); |
| | | |
| | | /** |
| | | * æ¥è¯¢ææºæä¸å
¨é¨å¨é¢è®°å½ï¼"å¨é¢ä¿¡æ¯å·æ°"çåæ°å
¥å£ï¼ã |
| | | * <p> |
| | | * åªæ¥ {@code pat_med_inhosp} èªèº«ãåªåå·æ°è¦ç¨çåï¼inhospid / serialnum / orgid / |
| | | * campusid / ç§å®¤ä¸å / ç
åºä¸å / bed_noï¼ï¼<b>ä¸ join æ¡£æ¡è¡¨ã䏿è¯ä»¶å·è¿æ»¤</b> ââ |
| | | * å¦åè¯ä»¶å·æªè¡¥å
¨çå¨é¢æ£è
ä¼è¢«é黿¼å·æ°ã |
| | | * <p> |
| | | * å¨é¢å£å¾ï¼{@code inhospstate='0' and del_flag='0'}ï¼ä¸é¨æ·"å¨é¢æ£è
"å表ä¸è´ï¼ |
| | | * 宿µå¨é¢è¡ endtime æä¸º nullï¼ã |
| | | * |
| | | * @param orgid æºæIDï¼å¦ 20001001ï¼ |
| | | * @return å¨é¢è®°å½éåï¼æ inhospid ååºï¼æ æ°æ®è¿å空éå |
| | | */ |
| | | List<PatMedInhosp> selectInhospRefreshCandidates(String orgid); |
| | | |
| | | /** |
| | | * æ VO æ¡ä»¶æ¥è¯¢ï¼æ¯æå¤ç§å®¤/å¤ç
åºé忡件ï¼ã |
| | | * |
| | | * @param patMedInhospVO æ¥è¯¢æ¡ä»¶ |
| | |
| | | } |
| | | |
| | | @Override |
| | | public java.util.List<com.ruoyi.inhospvisit.domain.PatMedInhosp> selectInhospRefreshCandidates(String orgid) { |
| | | return dataUnavailable("selectInhospRefreshCandidates") |
| | | ? java.util.Collections.<com.ruoyi.inhospvisit.domain.PatMedInhosp>emptyList() |
| | | : dataService.selectInhospRefreshCandidates(orgid); |
| | | } |
| | | |
| | | @Override |
| | | public java.util.List<com.ruoyi.inhospvisit.domain.PatMedInhosp> selectPatMedInhospListByCondition( |
| | | com.ruoyi.inhospvisit.domain.PatMedInhospVO patMedInhospVO) { |
| | | return dataUnavailable("selectPatMedInhospListByCondition") |
| | |
| | | import com.ruoyi.common.core.service.dto.PatMedReq; |
| | | import com.ruoyi.common.enums.BusinessType; |
| | | import com.ruoyi.common.utils.PageUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.inhospvisit.api.InhospVisitFacade; |
| | | import com.ruoyi.inhospvisit.domain.PatMedInhosp; |
| | |
| | | /** |
| | | * æ¥è¯¢æ£è
ä½é¢è®°å½å表ã |
| | | * <p> |
| | | * å {@code PatMedInhospController#selectPatMedInhosplist}ï¼L77-87ï¼éè¡å¯¹åºã |
| | | * å {@code PatMedInhospController#selectPatMedInhosplist}ï¼L77-87ï¼éè¡å¯¹åºï¼ |
| | | * å¯ä¸å¤åºæ¥çä¸è¡æ¯ {@link #normalizeBedSort} ââ è§è¯¥æ¹æ³æ³¨éï¼ |
| | | * åå®ç°éè¿æ®µå½ä¸åå¨ {@code PatMedInhospServiceImpl} éï¼è¿å°æ¬æ¨¡ååè¿æ¡é¾ |
| | | * ç´æ¥è°é¨é¢ï¼å¿
é¡»æå®è·çæ¬è¿æ¥ï¼å¦å {@code bedSort} éé»å¤±æã |
| | | */ |
| | | @ApiOperation("æ¥è¯¢æ£è
ä½é¢è®°å½å表") |
| | | //@PreAuthorize("@ss.hasPermi('smartor:patinhosp:list')") |
| | |
| | | PageUtils.startPageByPost(patMedInhosp.getPageNum(), patMedInhosp.getPageSize()); |
| | | SysUser user = getLoginUser().getUser(); |
| | | patMedInhosp.setOrgid(user.getOrgid()); |
| | | // åç«¯ä¼ çæ¯æ°å 1 / 2ï¼SQL åªè®¤ "asc" / "desc"ï¼ä¸å¨è¿éå½ä¸å°±çäºæ²¡ä¼ |
| | | patMedInhosp.setBedSort(normalizeBedSort(patMedInhosp.getCry(), patMedInhosp.getBedSort())); |
| | | List<PatMedInhosp> list = inhospVisitFacade.selectPatMedInhospList(patMedInhosp); |
| | | // startPage ä¹å PageHelper å·²ç»èªå¨æ§è¡è¿ä¸æ¬¡ count æ¥è¯¢ï¼ç´æ¥å¤ç¨ Page éç totalï¼ |
| | | // é¿å
ç¨ PageUtils.count æå¸¦ JOIN çç»è®¡è¯å¥åè·ä¸é |
| | |
| | | * å¯¼åºæ£è
ä½é¢è®°å½å表ã |
| | | * <p> |
| | | * å {@code PatMedInhospController#export}ï¼L165-173ï¼éè¡å¯¹åºã |
| | | * <p> |
| | | * {@code bedSort} ä¹è¦å½ä¸ï¼è¿åºåç export åæ ·èµ° |
| | | * {@code patMedInhospService.selectPatMedInhospList(...)}ï¼è§ {@code ccf5fc76} çæ¬ï¼ï¼ |
| | | * å½ä¸åæ¯é飿¬¡è°ç¨çæçãä¸è¡¥è¿ä¸è¡å°±ä¼åºç°"å表æåºå·æå¥½äºã导åºé¡ºåºåååå»"ã |
| | | */ |
| | | @ApiOperation("å¯¼åºæ£è
ä½é¢è®°å½å表") |
| | | //@PreAuthorize("@ss.hasPermi('smartor:patinhosp:export')") |
| | | @Log(title = "æ£è
ä½é¢è®°å½", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(HttpServletResponse response, PatMedInhosp patMedInhosp) { |
| | | patMedInhosp.setBedSort(normalizeBedSort(patMedInhosp.getCry(), patMedInhosp.getBedSort())); |
| | | List<PatMedInhosp> list = inhospVisitFacade.selectPatMedInhospList(patMedInhosp); |
| | | ExcelUtil<PatMedInhosp> util = new ExcelUtil<PatMedInhosp>(PatMedInhosp.class); |
| | | util.exportExcel(response, list, "æ£è
ä½é¢è®°å½æ°æ®"); |
| | |
| | | public AjaxResult remove(@PathVariable Long[] inhospids) { |
| | | return toAjax(inhospVisitFacade.deletePatMedInhospByInhospids(inhospids)); |
| | | } |
| | | |
| | | /** |
| | | * å½ä¸å"å
¥é¢åºä½æåº"åæ°ã |
| | | * <p> |
| | | * è¡ä¸ºä¸ <b>{@code æ¥å£ææ¡£/PatMedInhosp æ£è
ä½é¢è®°å½æ¥å£ææ¡£.md} é bedSort ç说æ</b> |
| | | * 以åè¿åºåç {@code PatMedInhospServiceImpl#normalizeBedSort}ï¼smartorï¼L213-219ï¼ |
| | | * å®å
¨ä¸è´ï¼ |
| | | * <pre> |
| | | * asc / 1 -> "asc" åºä½æ£åº |
| | | * desc / 2 -> "desc" åºä½ååº |
| | | * å
¶ä½ï¼å«ä¸ä¼ ã空串ãéæ³å¼ï¼-> null 䏿åºï¼ä¿æåæé»è®¤æåº |
| | | * åªå¯¹ãå¨é¢ãæ¥è¯¢ï¼cry=0ï¼çæï¼åºé¢ / è½¬ç§ / é¢å
¥é¢ ä¸å¾å¿½ç¥è¯¥åæ° |
| | | * </pre> |
| | | * <p> |
| | | * â ï¸ <b>为ä»ä¹å¿
é¡»å¨ Java ä¾§å½ä¸ï¼è䏿¯è®© SQL ä¹è®¤ "1"/"2"</b>ï¼ |
| | | * <ul> |
| | | * <li>åç«¯ä¼ çæ¯ <b>æ°å</b> {@code bedSort:1}ï¼Jackson è½å° {@code String} åæ®µæ¯ |
| | | * {@code "1"}ï¼è mapper ç {@code <choose>} åªå¹é
å符串 {@code "asc"/"desc"} |
| | | * ââ ä¸å½ä¸å°±éé»è½åé»è®¤æåºï¼"æåºä½æåº"è¿ä¸ªåè½çäºæ²¡çæï¼çå®çº¿ä¸ç¼ºé·ï¼ï¼</li> |
| | | * <li>åä¸ä¸ªæåºå¥çº¦è¿åºç°å¨ {@code VisitInhospMapper.xml}ï¼éè®¿æ«æé£æ¡é¾ï¼ |
| | | * å
¥åæ¯ {@code VisitInhospRow}ï¼ï¼æ"åªè®¤ asc/desc"çå¨ SQL éï¼ |
| | | * 两æ¡é¾å¯¹å¤ççº¦å®ææ¯ä¸è´çï¼</li> |
| | | * <li>è¿å°æ¬æ¨¡ååè¿æ¡é¾<b>ä¸åç»è¿</b> {@code PatMedInhospServiceImpl}ï¼ |
| | | * åå½ä¸åä¼éè¿åºä¸èµ·ä¸¢æï¼æä»¥æ¬å°è¿éè¡¥åæ¥ã</li> |
| | | * </ul> |
| | | * ç± {@code sql/_probe/verify_patinhosp_bedsort.py} æå
³ã |
| | | * |
| | | * @param cry åºå
¥é¢æ è¯ï¼0 å
¥é¢(å¨é¢) 1 åºé¢ 2 è½¬ç§ 3 é¢å
¥é¢ |
| | | * @param bedSort åç«¯ä¼ å
¥çåºä½æåºå¼ï¼"asc"/"1"/"desc"/"2"/ç©ºï¼ |
| | | * @return {@code "asc"} / {@code "desc"} / {@code null}ï¼ä¸æåºï¼ |
| | | */ |
| | | private static String normalizeBedSort(Integer cry, String bedSort) { |
| | | // åªå¯¹ãå¨é¢ãæ¥è¯¢çæï¼cry != 0 ä¸å¾ç½®ç©ºï¼ä¿è¯åºé¢çåºæ¯æåºä¸å |
| | | if (cry == null || cry != 0 || StringUtils.isEmpty(bedSort)) { |
| | | return null; |
| | | } |
| | | String value = bedSort.trim().toLowerCase(); |
| | | if ("asc".equals(value) || "1".equals(value)) { |
| | | return "asc"; |
| | | } |
| | | if ("desc".equals(value) || "2".equals(value)) { |
| | | return "desc"; |
| | | } |
| | | // éæ³å¼ï¼ä¸æåºï¼ä¸"ä¸ä¼ "åä¹ï¼ï¼é¿å
è½å° XML ç <otherwise> ä¹å¤çè¡ä¸º |
| | | return null; |
| | | } |
| | | } |
| | |
| | | private String inWardcheckFlag; |
| | | |
| | | /** |
| | | * ä»»å¡ç»æ¯å¦å·²çº³å
¥ï¼0æªçº³å
¥ 1已纳å
¥ 2è·³è¿/失败 |
| | | * <p> |
| | | * â ï¸ æ¬å段çåå¨çç±æ¯<b>硬æ§ç</b>ï¼ä¸æ¯"顺æè¡¥é½"ï¼ |
| | | * {@code PatMedInhospMapper.xml#selectPatMedInhospListByCondition} éæä¸æ¡ |
| | | * {@code <if test="scheduleCheckFlag != null">}ï¼ä»å smartor ç VO è¯å¥éæ¡ç
§æï¼ã |
| | | * MyBatis ç¨ OGNL æ±å¼ {@code test}ï¼<b>缺 getter ä¼ç´æ¥æ</b> |
| | | * {@code ReflectionException: There is no getter for property named 'scheduleCheckFlag'}ï¼ |
| | | * è䏿¯"æ¡ä»¶ä¸æç«"ââ ä¹å°±æ¯è¯´é£æ¡æ¥è¯¢å¨è¡¥ä¸æ¬å段ä¹å<b>ä¸è°ç¨å°±ç¸</b> |
| | | * ï¼å smartor ç {@code PatMedInhospVO} åæ ·æ²¡æè¿ä¸ªå段ï¼å±äºç»§æ¿ä¸æ¥çè缺é·ï¼ã |
| | | * å®å«ï¼{@code sql/_probe/verify_mapper_ognl_params.py}ï¼å
¨ä»ï¼ã |
| | | */ |
| | | @ApiModelProperty(value = "ä»»å¡ç»æ¯å¦å·²çº³å
¥ï¼0æªçº³å
¥ 1已纳å
¥ 2è·³è¿/失败") |
| | | private String scheduleCheckFlag; |
| | | |
| | | /** |
| | | * æ¤å£«ID |
| | | */ |
| | | @ApiModelProperty(value = "æ¤å£«ID") |
| | |
| | | * {@code sql/_probe/verify_inhospvisit_mapper.py}ï¼æ¥å£âXML ä¸è´æ§ï¼ä¸ |
| | | * {@code sql/_probe/verify_inhospvisit_sql_expansion.py}ï¼å±å¼åéæ¡æ¯å¯¹ï¼AND é¡ºåºæ å
³ï¼ |
| | | * ååæå
³ãæ¹ä»»ä¸è¾¹é½å¿
须忥æ¹å¦ä¸è¾¹å¹¶éè·è¿ä¸¤ä¸ªæ¢éã</li> |
| | | * <li>â ï¸ è¿æä¸æ¡æ´ç¡¬ç纪å¾ï¼<b>XML éåºç°çæ¯ä¸ªå±æ§ï¼æ¬ç±»é½å¿
é¡»æ getter</b>ã |
| | | * å 为"éæ¡çä»·"æå³ç XML ä¿çäºåæä»¶çå
¨é¨ {@code <if test=...>}ï¼å«é访é¾ä¸ |
| | | * ä¸å¯è¾¾çé£äºï¼ï¼è MyBatis ç¨ OGNL æ±å¼è¿äº {@code test}ââ |
| | | * 缺 getter ä¼ç´æ¥æ {@code ReflectionException}ï¼ä¸æ¯"æ¡ä»¶ä¸æç«"ï¼ã |
| | | * 2026-10 å°±æ¯è¿ä¹æ {@code dealOutHospInfo} æ´æ¡æåçï¼ç¼º {@code startOutHospTime} |
| | | * ç 15 ä¸ªè¿æ»¤å±æ§ï¼ãå®å«ï¼{@code sql/_probe/verify_mapper_ognl_params.py}ï¼å
¨ä»ï¼ã</li> |
| | | * <li>å¦ä¸ç§åæ³æ¯ææ¥è¯¢"å
ä¸å±ç«¯å£"å§æå smartorï¼ä½é£æ ·æ¬æ¨¡åå°±åªå©ç¼æé»è¾ã |
| | | * CRUD å
¨é åè°ï¼åèæ´ç¢ãè¿ééæ©äº"éå¤ä½å¯éªè¯"ã</li> |
| | | * </ul> |
| | |
| | | // 以ä¸å段ã䏿¯ pat_med_inhosp çåãï¼åªä½ä¸º selectForScan çè¿æ»¤æ¡ä»¶/æåºå¼å
³ã |
| | | // æ¾å¨åä¸ä¸ªè¡å¯¹è±¡éï¼æ¯ä¸ºäºè®©"æ¥è¯¢æ¡ä»¶"ä¸"ç»æè¡"å
±ç¨ä¸å¥å±æ§å ââ |
| | | // ä¸åå®ç°"ç¨ PatMedInhosp 彿¥è¯¢å
¥å"çåæ³ä¿æä¸è´ï¼é¿å
两å¥ç±»æ¥åæ å°åºéã |
| | | // |
| | | // â ï¸â ï¸ è¿ä¸ç»ãå¿
é¡»æ getterãï¼åªæé访çæé¾ä¸ä¸ä¸ªé½ä¸è®¾å®ï¼ |
| | | // `VisitInhospMapper.xml#selectForScan` æ¯ä»å `PatMedInhospMapper.xml` éæ¡ç
§æçï¼ |
| | | // éé¢ä¿çäºåæä»¶çå
¨é¨ `<if test="xxx != null">`ï¼å«é访é¾ä¸ä¸å¯è¾¾çé£äºï¼ã |
| | | // MyBatis ç¨ OGNL æ±å¼ `test`ï¼**读ä¸å° getter 䏿¯"æ¡ä»¶ä¸æç«"ï¼èæ¯ç´æ¥æ**ï¼ |
| | | // ReflectionException: There is no getter for property named 'startOutHospTime' |
| | | // in 'class com.ruoyi.inhospvisit.domain.row.VisitInhospRow' |
| | | // åææ¯ `InhospVisitTaskService#dealOutHospInfo` å¨ç¬¬ä¸æ¬¡ `selectForScan` å°±ä¸æï¼ |
| | | // 䏿¡é访任å¡é½ä¸çæï¼2026-10 宿ºè¸©å°ï¼`sys_job_log` é表ç°ä¸º |
| | | // `InvocationTargetException`ï¼å¾å®¹æè¯¯å¤ææ¨¡åå¼å
³æ²¡å¼ï¼ã |
| | | // å®å«ï¼`sql/_probe/verify_mapper_ognl_params.py`ï¼å
¨ä»ï¼ |
| | | // ï¼XML å¼ç¨å±æ§ â åæ°ç±» getterï¼ç¼ºä¸ä¸ªå°± FAILï¼ã |
| | | // ========================================================================== |
| | | |
| | | /** |
| | | * åºé¢/å¨é¢ç»´åº¦å¼å
³ï¼å {@code PatMedInhosp.cry}ï¼ï¼ |
| | | * 0=å¨é¢ï¼{@code endtime is null}ï¼ã1=å·²åºé¢ã2=转ç§ã3=é¢å
¥é¢ã |
| | | * <p> |
| | | * â ï¸ ç±»åä¸åå®ä½ä¸è´æ¯ {@code Integer}ï¼å 为 XML 鿝**æ°å¼æ¯è¾** |
| | | * ï¼{@code cry == 0/1/2/3}ï¼ââ åæ String ä¼è®© OGNL é éå¼è½¬æ¢å»æ¯ï¼è¯ä¹ä¸æç¡®ã |
| | | * <p> |
| | | * â ï¸ å®åæ¶å³å®æåºï¼{@code cry=1/2/3} â {@code order by endtime desc}ï¼ |
| | | * {@code cry=0} â æ {@link #bedSort} ä¸éä¸ã |
| | | */ |
| | | private String cry; |
| | | private Integer cry; |
| | | |
| | | /** |
| | | * å¨é¢æ£è
ï¼{@code cry=0}ï¼çåºä½æåºæ¹åï¼"asc" / "desc"ï¼å
¶å®å¼èµ°é»è®¤æåºã |
| | |
| | | * åºä½æèªç¶åºæï¼ç©ºåºä½æå â 纯æ°åææ°å¼ â 另忝æé¿åº¦+å符串 â inhospid å
åºï¼ã |
| | | */ |
| | | private String bedSort; |
| | | |
| | | // ---- æ¶é´åºé´è¿æ»¤ï¼å PatMedInhospMapper.xml ç 4 个 <if>ï¼ ---- |
| | | /** è¿æ»¤ï¼åºé¢æ¶é´åºé´ä¸ç */ |
| | | private Date startOutHospTime; |
| | | /** è¿æ»¤ï¼åºé¢æ¶é´åºé´ä¸ç */ |
| | | private Date endOutHospTime; |
| | | /** è¿æ»¤ï¼å
¥é¢æ¶é´åºé´ä¸ç */ |
| | | private Date startInHospTime; |
| | | /** è¿æ»¤ï¼å
¥é¢æ¶é´åºé´ä¸ç */ |
| | | private Date endInHospTime; |
| | | |
| | | // ---- åå¼è¿æ»¤ï¼é访é¾ä¸å¯è¾¾ï¼ä½ XML éä¿çäºæ¡ä»¶ï¼ ---- |
| | | /** è¿æ»¤ï¼å¯¼è¯æå·æ è¯ï¼å {@code inhosp_myd_flag}ï¼ */ |
| | | private String inhospMydFlag; |
| | | /** è¿æ»¤ï¼åºä½å·ï¼å {@code bed_no}ï¼ */ |
| | | private String bedNo; |
| | | /** è¿æ»¤ï¼ç¦»é¢æ¹å¼ID */ |
| | | private String outWayId; |
| | | /** è¿æ»¤ï¼ç¦»é¢æ¹å¼åç§° */ |
| | | private String outWayName; |
| | | /** è¿æ»¤ï¼å°±è¯æ¥æºID */ |
| | | private String encounterSourceId; |
| | | /** è¿æ»¤ï¼éè¦ç¨åº¦ä»£ç */ |
| | | private String importanceFlagCode; |
| | | /** è¿æ»¤ï¼æ¥è¯å级代ç */ |
| | | private String emergencyLevelCode; |
| | | /** è¿æ»¤ï¼å»é¢åç§°ï¼å XML éè¯¥åæªå 表å«åï¼ */ |
| | | private String hospitalname; |
| | | /** è¿æ»¤ï¼è¯ååç§°ï¼çç«åå¾·è¯å宣æï¼ */ |
| | | private String medicalName; |
| | | /** è¿æ»¤ï¼è¯åå
¬å¸ï¼çç«åå¾·è¯å宣æï¼ */ |
| | | private String medicalCompany; |
| | | /** è¿æ»¤ï¼æçç¶æï¼åç±»å {@code Long}ï¼ */ |
| | | private Long schemestatus; |
| | | |
| | | /** è¿æ»¤ï¼ç¦»é¢ç§å®¤ç¼ç å表ï¼å {@code leaveldeptcodes}ï¼ */ |
| | | private java.util.List<String> leaveldeptcodes; |
| | |
| | | /** è¿æ»¤ï¼ç¦»é¢ ICD10 ç¼ç å表ï¼å {@code icd10codeList}ï¼ */ |
| | | private java.util.List<String> icd10codeList; |
| | | |
| | | public String getCry() { |
| | | public Integer getCry() { |
| | | return cry; |
| | | } |
| | | |
| | | public void setCry(String cry) { |
| | | public void setCry(Integer cry) { |
| | | this.cry = cry; |
| | | } |
| | | |
| | |
| | | this.bedSort = bedSort; |
| | | } |
| | | |
| | | public Date getStartOutHospTime() { |
| | | return startOutHospTime; |
| | | } |
| | | |
| | | public void setStartOutHospTime(Date startOutHospTime) { |
| | | this.startOutHospTime = startOutHospTime; |
| | | } |
| | | |
| | | public Date getEndOutHospTime() { |
| | | return endOutHospTime; |
| | | } |
| | | |
| | | public void setEndOutHospTime(Date endOutHospTime) { |
| | | this.endOutHospTime = endOutHospTime; |
| | | } |
| | | |
| | | public Date getStartInHospTime() { |
| | | return startInHospTime; |
| | | } |
| | | |
| | | public void setStartInHospTime(Date startInHospTime) { |
| | | this.startInHospTime = startInHospTime; |
| | | } |
| | | |
| | | public Date getEndInHospTime() { |
| | | return endInHospTime; |
| | | } |
| | | |
| | | public void setEndInHospTime(Date endInHospTime) { |
| | | this.endInHospTime = endInHospTime; |
| | | } |
| | | |
| | | public String getInhospMydFlag() { |
| | | return inhospMydFlag; |
| | | } |
| | | |
| | | public void setInhospMydFlag(String inhospMydFlag) { |
| | | this.inhospMydFlag = inhospMydFlag; |
| | | } |
| | | |
| | | public String getBedNo() { |
| | | return bedNo; |
| | | } |
| | | |
| | | public void setBedNo(String bedNo) { |
| | | this.bedNo = bedNo; |
| | | } |
| | | |
| | | public String getOutWayId() { |
| | | return outWayId; |
| | | } |
| | | |
| | | public void setOutWayId(String outWayId) { |
| | | this.outWayId = outWayId; |
| | | } |
| | | |
| | | public String getOutWayName() { |
| | | return outWayName; |
| | | } |
| | | |
| | | public void setOutWayName(String outWayName) { |
| | | this.outWayName = outWayName; |
| | | } |
| | | |
| | | public String getEncounterSourceId() { |
| | | return encounterSourceId; |
| | | } |
| | | |
| | | public void setEncounterSourceId(String encounterSourceId) { |
| | | this.encounterSourceId = encounterSourceId; |
| | | } |
| | | |
| | | public String getImportanceFlagCode() { |
| | | return importanceFlagCode; |
| | | } |
| | | |
| | | public void setImportanceFlagCode(String importanceFlagCode) { |
| | | this.importanceFlagCode = importanceFlagCode; |
| | | } |
| | | |
| | | public String getEmergencyLevelCode() { |
| | | return emergencyLevelCode; |
| | | } |
| | | |
| | | public void setEmergencyLevelCode(String emergencyLevelCode) { |
| | | this.emergencyLevelCode = emergencyLevelCode; |
| | | } |
| | | |
| | | public String getHospitalname() { |
| | | return hospitalname; |
| | | } |
| | | |
| | | public void setHospitalname(String hospitalname) { |
| | | this.hospitalname = hospitalname; |
| | | } |
| | | |
| | | public String getMedicalName() { |
| | | return medicalName; |
| | | } |
| | | |
| | | public void setMedicalName(String medicalName) { |
| | | this.medicalName = medicalName; |
| | | } |
| | | |
| | | public String getMedicalCompany() { |
| | | return medicalCompany; |
| | | } |
| | | |
| | | public void setMedicalCompany(String medicalCompany) { |
| | | this.medicalCompany = medicalCompany; |
| | | } |
| | | |
| | | public Long getSchemestatus() { |
| | | return schemestatus; |
| | | } |
| | | |
| | | public void setSchemestatus(Long schemestatus) { |
| | | this.schemestatus = schemestatus; |
| | | } |
| | | |
| | | public java.util.List<String> getLeaveldeptcodes() { |
| | | return leaveldeptcodes; |
| | | } |
| | |
| | | public List<PatMedInhosp> selectPatMedInhospListByCondition(PatMedInhospVO patMedInhospVO); |
| | | |
| | | /** |
| | | * æ¥è¯¢ææºæä¸å
¨é¨å¨é¢è®°å½ç"å·æ°åé"ï¼ä¾å¨é¢ä¿¡æ¯å·æ°ææ£è
éæ¡æ ¸å¯¹ä½ç½®ï¼ã |
| | | * <p> |
| | | * ä¸ {@link #selectPatMedInhospList} çåºå«æ¯å»æçï¼ |
| | | * <ul> |
| | | * <li>ä¸ join {@code pat_archive}ãä¸å GROUP BY ââ æ¬ç¨éåªç {@code pat_med_inhosp} èªèº«ï¼ |
| | | * <li>ä¸å¸¦ {@code a.idcardno IS NOT NULL} è¿ç±»è¿æ»¤ï¼é£ä¼è®©"è¯ä»¶å·è¿æ²¡è¡¥ä¸çæ°å
¥é¢æ£è
" |
| | | * é黿¼å·æ° ââ ééé¾è·¯ææçå°±æ¯éé»å°æ°æ®ï¼ï¼ |
| | | * <li>åª select å·æ°ç¨å¾å°çåï¼inhospid / serialnum / patname / orgid / campusid / |
| | | * ç§å®¤ä¸å / ç
åºä¸å / bed_noï¼ï¼3000 è¡éçº§çæ¯æ¥å
¨éæ«æè¶³å¤è½»ã</li> |
| | | * </ul> |
| | | * |
| | | * @param orgid æºæIDï¼å¦ 20001001ï¼ |
| | | * @return å¨é¢ï¼{@code inhospstate='0' and del_flag='0'}ï¼è®°å½éåï¼æ inhospid ååº |
| | | */ |
| | | public List<PatMedInhosp> selectInhospRefreshCandidates(@Param("orgid") String orgid); |
| | | |
| | | /** |
| | | * æ°å¢æ£è
ä½é¢è®°å½ |
| | | * |
| | | * @param patMedInhosp æ£è
ä½é¢è®°å½ |
| | |
| | | * @param archive æ£è
æ¡£æ¡ |
| | | * @param type 0=è¯å宣æ / 1=离é¢ç§å®¤ / 2=离é¢ç
åº / 3=ç¾ç
/ 4=å
¥é¢ç§å®¤ / 5=å
¥é¢ç
åº |
| | | * @param config {@code sys_config: visit.early.day} |
| | | * @return <b>æ¯å¦ççè½äºåº</b>ï¼æ"æ¬æ¥å°±å·²ç»æ"ï¼ã |
| | | * è¿å弿¯ 2026-10"ä¸ä¸ªæ£è
åªçæä¸æ¡é访任å¡"æ¹é ç夿®ï¼ |
| | | * ç¼æå±æç»´åº¦ä¼å
级é个å°è¯ï¼åªææ¿å° {@code true} æç®è¯¥ç»´åº¦æå并忢ã |
| | | * åå®ç°æ¯ {@code void}ï¼ç¼æå±ç¨"è°ç¨äºå 次"彿忰 ââ 飿¯éç |
| | | * ï¼ä»»å¡æªåå¸/被å»éæ¶åæ ·æ¯"çæäºä¸æ¡"ï¼ã |
| | | */ |
| | | public void writeInSubTask(Long taskid, Boolean check, VisitInhospRow inhosp, |
| | | public boolean writeInSubTask(Long taskid, Boolean check, VisitInhospRow inhosp, |
| | | VisitArchiveRow archive, Integer type, String config) { |
| | | // å L683-685 |
| | | String longTaskReason = inhosp.getLongTaskReason(); |
| | |
| | | if (taskApi == null) { |
| | | log.warn("ãåºå
¥é¢é访ãVisitTaskCreateApi ä¸å¯ç¨ï¼ä»»å¡åå»ºæ¨¡åæªè£
é
ï¼ï¼æ¬æ£è
ä¸çæåä»»å¡ã" |
| | | + "inhospid={}, taskid={}", inhosp.getInhospid(), taskid); |
| | | return; |
| | | return false; |
| | | } |
| | | VisitLongTaskDto serviceTask = taskApi.findPublishedLongTask(taskid); |
| | | if (serviceTask == null) { |
| | | writeMissingTaskFlag(inhosp, type, longTaskReason, taskid); |
| | | return; |
| | | return false; |
| | | } |
| | | |
| | | // å L729-731 |
| | | if ("1".equals(inhosp.getInhospstate()) && inhosp.getEndtime() == null) { |
| | | return; |
| | | return false; |
| | | } |
| | | |
| | | // ------------------------------------------------------------------ |
| | | // ãæ¹é ·2026-10ãè½åºåæåä¸éå¤éï¼ |
| | | // å䏿£è
+ å䏿¬¡åºé¢è®°å½ + åä¸ä»»å¡ï¼åªè¦å·²ç»æä¸æ¡æªå é¤çåä»»å¡ï¼å«å·²åç¨çï¼ï¼ |
| | | // å°±ä¸å insertãåå è§ VisitTaskCreateApi#existsSubtask çæ³¨éï¼ |
| | | // æ£è
被é夿«å°æ¶ä¼èµ°"åæ§ + å insert 䏿¡ sendstate=4"çåæ¯ï¼ |
| | | // æ¯è·ä¸è½®å¤ä¸æ¡ï¼æç»å䏿£è
å åæ¡ã |
| | | // ------------------------------------------------------------------ |
| | | if (taskApi.existsSubtask(archive == null ? null : archive.getId(), |
| | | inhosp.getInhospid(), taskid)) { |
| | | log.info("ãåºå
¥é¢éè®¿ãæ£è
{}åºé¢è®°å½{}ä»»å¡{}å·²æåä»»å¡ï¼è·³è¿éå¤çæã", |
| | | inhosp.getPatid(), inhosp.getInhospid(), taskid); |
| | | writeFlagByType(inhosp.getInhospid(), type, "1", null); |
| | | return true; |
| | | } |
| | | |
| | | // å L732-736ï¼ç»è£
ï¼å¯ä½ç¨ç±æ¬ç±»å®ç°ï¼è§ missingOutHospTimeï¼ |
| | |
| | | toTaskSource(serviceTask, inhosp), inhosp, archive, config, type, |
| | | row -> onMissingOutHospTime(row)); |
| | | if (ObjectUtils.isEmpty(serviceSubtask)) { |
| | | return; |
| | | return false; |
| | | } |
| | | |
| | | // å L737-753ï¼å°±è¯ç§å®¤/ç
åºå¡«å
|
| | |
| | | serviceSubtask.getTaskid(), serviceSubtask.getPatid()); |
| | | writeFlagByType(inhosp.getInhospid(), type, "2", "çæåä»»å¡å¤±è´¥ " + type); |
| | | } |
| | | return i == 1; |
| | | } catch (Exception e) { |
| | | // å L900-912ï¼åºéåæ»äºå¡ |
| | | log.info("çæå任塿¥éåæ»serviceSubtaskçtaskid为ï¼{},patid为ï¼{}", |
| | |
| | | // åæ ·ä¿çï¼è§ç±»æ³¨é第 1 æ¡ï¼ã |
| | | writeFlagByTypeForRollback(inhosp.getInhospid(), type, "2", "çæå任塿¥éåæ» " + type); |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | |
| | | com.ruoyi.inhospvisit.domain.row.VisitTaskRow t = new com.ruoyi.inhospvisit.domain.row.VisitTaskRow(); |
| | | t.setTaskid(dto.getTaskid()); |
| | | t.setTaskName(dto.getTaskName()); |
| | | t.setTaskDesc(dto.getTaskDesc()); |
| | | t.setType(dto.getType()); |
| | | t.setServiceType(dto.getServiceType()); |
| | | t.setTemplateid(dto.getTemplateid()); |
| | | t.setTemplatename(dto.getTemplatename()); |
| | | t.setLibtemplateid(dto.getLibtemplateid()); |
| | | t.setLibtemplatename(dto.getLibtemplatename()); |
| | | t.setSendDay(dto.getSendDay()); |
| | | t.setPreachform(dto.getPreachform()); |
| | | t.setPreachformDesc(dto.getPreachformDesc()); |
| | | t.setOrgid(dto.getOrgid()); |
| | | t.setCampusid(dto.getCampusid()); |
| | | // ä»¥ä¸ 6 ä¸ªåæ ·å±äº"å DtoConversionUtils æ·è´ãé insert è½åº"çå |
| | | t.setGuid(dto.getGuid()); |
| | | t.setPid(dto.getPid()); |
| | | t.setSendType(dto.getSendType()); |
| | | t.setIsupload(dto.getIsupload()); |
| | | t.setTextParam(dto.getTextParam()); |
| | | t.setUploadTime(dto.getUploadTime()); |
| | | t.setUpdateBy(dto.getUpdateBy()); |
| | | t.setCreateBy(dto.getCreateBy()); |
| | | return t; |
| | |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * åºé¢é访ãç¼æå¨ãââ éè¡æ¬èª {@code PatMedInhospServiceImpl} |
| | | * çç¼æå±ï¼{@code addSubTaskByRule} + 3 个 {@code *ForPatient} + {@code dealInHospInfo}ï¼ã |
| | | * |
| | | * <h3>â ï¸ 2026-10 å£å¾åæ´ï¼ä¸ä¸ªæ£è
ï¼ä¸æ¬¡åºé¢ï¼åªçæ <b>䏿¡</b> é访åä»»å¡</h3> |
| | | * æ¬è¿æ¶æ¬ç±»æ¯"éè¡çä»·"çï¼åå®ç°æç»´åº¦å
¨çæï¼æ¯ä¸ª {@code *ForPatient} æå½ä¸ç |
| | | * <b>ææ</b>é¿æä»»å¡åå䏿¡ï¼ãä¸å¡ç¡®è®¤æ¹ä¸ºï¼ |
| | | * <ol> |
| | | * <li>维度æ {@code service_task_rule} ä¼å
级æåºå°è¯ï¼é¦è¦ â æ¬¡è¦ â éç¨å
åºï¼ç§å®¤ãç
åºï¼ï¼</li> |
| | | * <li>第ä¸ä¸ªçæ£è½åºæåç维度å³åæ¢ â åªç䏿¡ï¼</li> |
| | | * <li>æ è§åæ¶æ {@code service_taskdept} çç§å®¤/ç
åº"éç¨æ¨¡å"çæï¼</li> |
| | | * <li>æ å¿ä½ç»ä¸ååï¼ä¿è¯ {@code deptcheck_flag} ä¸ååå¨ 0ï¼é²é夿«æï¼ï¼ |
| | | * å¹¶å¨ååºåæ {@code patid+inhospid+taskid} å¤éï¼è§ {@code VisitTaskCreateApi#existsSubtask}ï¼ã</li> |
| | | * </ol> |
| | | * å æ¤ {@code verify_inhospvisit_orchestration_semantics.py} é O18~O23 é£ 6 æ¡ |
| | | * "æ¬è¿çä»·"æè¨å·²è¢«æ¹ä¸º"å£å¾åæ´"æè¨ï¼èæ¬éåç¬åç»å¹¶æ³¨æä¾æ®ï¼ã |
| | | * |
| | | * <h3>æ¥æºå¯¹ç
§ï¼@ b25c3b51ï¼</h3> |
| | | * <table border="1"> |
| | |
| | | |
| | | /** |
| | | * æ {@code service_task_rule} çãé¦è¦(1)/次è¦(2)ãè§åç¼æç§å®¤/ç
åº/ç¾ç
ä¸ä¸ªç»´åº¦ã |
| | | * |
| | | * <h3>â ï¸ 2026-10 å£å¾åæ´ï¼ä¸ä¸ªæ£è
ï¼ä¸æ¬¡åºé¢ï¼åªçæ <b>䏿¡</b> é访åä»»å¡</h3> |
| | | * åå®ç°ï¼ä»¥åæ¬è¿åççä»·çï¼æ¯æç»´åº¦"å
¨çæ"ï¼å
è·ææãé¦è¦ã维度ç |
| | | * {@code *ForPatient}ï¼èæ¯ä¸ª {@code *ForPatient} åæå½ä¸ç<b>ææ</b>é¿æä»»å¡åå䏿¡ã |
| | | * ç»ææ¯å䏿£è
䏿¬¡åºé¢è½çæå åæ¡ï¼çº¿ä¸å®æµ 27 æ¡ï¼ï¼èä¸å ä¸ºæ«æé® |
| | | * {@code deptcheck_flag} å¨"åªæç
åº/ç¾ç
维度"çè§åä¸ä¸ä¼è¢«ç½® 1ï¼ |
| | | * æ£è
æ¯è½®æ«æé½è¢«éæ°å¤ç â éå¤å任塿ç»ç´¯ç§¯ã |
| | | * <p> |
| | | * éè¡å¯¹åºå {@code addSubTaskByRule(String config, List<PatMedInhosp> patMedInhosps)}ã |
| | | * <p> |
| | | * â ï¸ è§åæ¥è¯¢ {@code serviceTaskRuleMapper.selectServiceTaskRuleByDeptOrWard} ä»å¨ smartorï¼ |
| | | * æä»¥æ¬æ¹æ³æ¥æ¶<b>å·²æ¥å¥½çè§å</b>ï¼ç±è°ç¨æ¹ {@code InhospVisitTaskService} éè¿ |
| | | * {@code PublicityDataPort} åââ该端å£å·²å«"æç§å®¤/ç
åºæ¥è§å"çè½åï¼è§ä¸ï¼ã |
| | | * è¿æ ·åæ¯ä¸ºäºé¿å
为"è§å表"åå ä¸ä¸ª Mapper æç«¯å£ã |
| | | * ç°å£å¾ï¼ä¸å¡ç¡®è®¤ï¼ï¼ |
| | | * <ol> |
| | | * <li>æä¸ä¸ªç»´åº¦æè§åä¼å
级ææä¸ä¸ª<b>å°è¯é¡ºåº</b>ï¼ |
| | | * é¦è¦(1) â æ¬¡è¦(2) â éç¨å
åºï¼ç§å®¤ãç
åºï¼ï¼åä¼å
级å
åºå® ç§å®¤ > ç
åº > ç¾ç
ã |
| | | * {@code service_task_rule} 没æè¯¥æ£è
ç§å®¤/ç
åºå¯¹åºçè§åæ¶ â 顺åºä¸º ç§å®¤ â ç
åº |
| | | * ï¼å³"æ {@code service_taskdept} éçéç¨æ¨¡åçæ"ï¼ã</li> |
| | | * <li>æé¡ºåºé个维度å°è¯ï¼<b>第ä¸ä¸ªçæ£è½åºæåï¼æå·²åå¨ï¼ç维度å³åæ¢</b> ââ åªç䏿¡ã</li> |
| | | * <li>æåç»ä¸ååæ å¿ä½ï¼å½ä¸ç»´åº¦ = {@code 1}ï¼å
¶ä½ç»´åº¦ = {@code 2}ï¼è·³è¿ï¼ï¼ |
| | | * ä¸<b>æ 论å½ä¸åªä¸ªç»´åº¦ï¼{@code deptcheck_flag} ä¸å®ä¼è¢«åæé 0</b> |
| | | * ââ è¿å°±æ¯"ä¸å被ä¸ä¸è½®æ«æéå¤çæ"çä¿è¯ã</li> |
| | | * </ol> |
| | | * 妿ä¸éå
åºå¨ {@code InhospSubtaskWriter#writeInSubTask}ï¼è½åºåæ |
| | | * {@code patid + inhospid + taskid} å¤éï¼è§ {@link VisitTaskCreateApi#existsSubtask}ã |
| | | * |
| | | * <h3>ç«ç¹å·®å¼ï¼ä¿çï¼</h3> |
| | | * {@code xh} åªåç§å®¤ç»´åº¦ ââ {@link #addDimension} éç»ä¸æ¡æç
åº/ç¾ç
ã |
| | | * |
| | | * @param inhosp å¾
å¤ççåºé¢æ£è
|
| | | * @param archive æ£è
æ¡£æ¡ |
| | | * @param rule å·²æ¥å¥½çè§åï¼{@code null} = æªé
ç½®è§åï¼å
¨é¨çæï¼ |
| | | * @param rule å·²æ¥å¥½çè§åï¼{@code null} = 该ç§å®¤/ç
åºæªé
ç½®è§å |
| | | * @param config {@code sys_config: visit.early.day} |
| | | */ |
| | | public void addSubTaskByRule(VisitInhospRow inhosp, VisitArchiveRow archive, |
| | | VisitTaskRule rule, String config) { |
| | | try { |
| | | if (rule == null) { |
| | | // å L1709-1716ï¼è§å为空ï¼å
¨é¨çæ |
| | | log.info("ãåºäºè§åãæ£è
{}æªé
ç½®è§åï¼æ§è¡å
¨é¨çæé»è¾", inhosp.getInhospid()); |
| | | addDeptSubTaskForPatient(inhosp, archive, config); |
| | | if (!SITE_XH.equals(active)) { |
| | | addWardSubTaskForPatient(inhosp, archive, config); |
| | | addIcd10SubTaskForPatient(inhosp, archive, config); |
| | | } |
| | | return; |
| | | } |
| | | // å L1717-1726ï¼æè§åï¼æè§åæ§è¡ |
| | | log.info("ãåºäºè§åãæ£è
{}æ¥è¯¢å°è§åï¼deptRule={}, wradRule={}, diagRule={}", |
| | | inhosp.getInhospid(), rule.getDeptRule(), rule.getWradRule(), rule.getDiagRule()); |
| | | List<Integer> order = resolveDimensionOrder(rule); |
| | | log.info("ãåºäºè§åãæ£è
{}è§åï¼deptRule={}, wradRule={}, diagRule={}ï¼ç»´åº¦å°è¯é¡ºåº={}", |
| | | inhosp.getInhospid(), |
| | | rule == null ? null : rule.getDeptRule(), |
| | | rule == null ? null : rule.getWradRule(), |
| | | rule == null ? null : rule.getDiagRule(), order); |
| | | |
| | | boolean deptIsPrimary = "1".equals(rule.getDeptRule()); |
| | | boolean wardIsPrimary = "1".equals(rule.getWradRule()); |
| | | boolean diagIsPrimary = "1".equals(rule.getDiagRule()); |
| | | boolean deptIsSecondary = "2".equals(rule.getDeptRule()); |
| | | boolean wardIsSecondary = "2".equals(rule.getWradRule()); |
| | | boolean diagIsSecondary = "2".equals(rule.getDiagRule()); |
| | | |
| | | boolean hasPrimaryRule = deptIsPrimary || wardIsPrimary || diagIsPrimary; |
| | | |
| | | if (!hasPrimaryRule) { |
| | | // å L1829-1837ï¼æ²¡æé¦è¦è§åï¼å
¨é¨çæ |
| | | log.info("ãåºäºè§åãæ é¦è¦è§åï¼æ§è¡å
¨é¨çæé»è¾"); |
| | | addDeptSubTaskForPatient(inhosp, archive, config); |
| | | if (!SITE_XH.equals(active)) { |
| | | addWardSubTaskForPatient(inhosp, archive, config); |
| | | addIcd10SubTaskForPatient(inhosp, archive, config); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | // å L1730-1754ï¼å
æ§è¡ææè§å=1 çæ¹æ³ |
| | | int deptGenCount = 0; |
| | | int wardGenCount = 0; |
| | | int diagGenCount = 0; |
| | | |
| | | if (deptIsPrimary) { |
| | | log.info("ãåºäºè§åãæ§è¡ç§å®¤é¦è¦è§å"); |
| | | deptGenCount = addDeptSubTaskForPatient(inhosp, archive, config); |
| | | } |
| | | if (!SITE_XH.equals(active)) { |
| | | if (wardIsPrimary) { |
| | | log.info("ãåºäºè§åãæ§è¡ç
åºé¦è¦è§å"); |
| | | wardGenCount = addWardSubTaskForPatient(inhosp, archive, config); |
| | | } |
| | | if (diagIsPrimary) { |
| | | log.info("ãåºäºè§åãæ§è¡ç¾ç
é¦è¦è§å"); |
| | | diagGenCount = addIcd10SubTaskForPatient(inhosp, archive, config); |
| | | Integer hit = null; |
| | | for (Integer type : order) { |
| | | log.info("ãåºäºè§åãæ£è
{}å°è¯ç»´åº¦{}ï¼{}ï¼", inhosp.getInhospid(), type, dimensionName(type)); |
| | | if (generateOneForDimension(inhosp, archive, type, config)) { |
| | | hit = type; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | int primaryGeneratedCount = deptGenCount + wardGenCount + diagGenCount; |
| | | log.info("ãåºäºè§åãé¦è¦è§åæ§è¡ç»æ: deptGen={}, wardGen={}, diagGen={}, total={}", |
| | | deptGenCount, wardGenCount, diagGenCount, primaryGeneratedCount); |
| | | |
| | | String remark = inhosp.getRemark(); |
| | | |
| | | if (primaryGeneratedCount > 0) { |
| | | // å L1758-1796ï¼è³å°ä¸ä¸ªé¦è¦è§åæå |
| | | log.info("ãåºäºè§åãé¦è¦è§åææå(count={})ï¼å°æ¬¡è¦è§å对åºflag设为2", primaryGeneratedCount); |
| | | if (deptIsSecondary) { |
| | | updateCheckFlag(inhosp, 1, "2", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";é¦è¦è§åå·²çæï¼æ¬¡è¦è§åè·³è¿" : "é¦è¦è§åå·²çæï¼æ¬¡è¦è§åè·³è¿"); |
| | | } |
| | | if (!SITE_XH.equals(active)) { |
| | | if (wardIsSecondary) { |
| | | updateCheckFlag(inhosp, 2, "2", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";é¦è¦è§åå·²çæï¼æ¬¡è¦è§åè·³è¿" : "é¦è¦è§åå·²çæï¼æ¬¡è¦è§åè·³è¿"); |
| | | } |
| | | if (diagIsSecondary) { |
| | | updateCheckFlag(inhosp, 3, "2", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";é¦è¦è§åå·²çæï¼æ¬¡è¦è§åè·³è¿" : "é¦è¦è§åå·²çæï¼æ¬¡è¦è§åè·³è¿"); |
| | | } |
| | | } |
| | | if (deptIsPrimary && deptGenCount > 0) { |
| | | updateCheckFlag(inhosp, 1, "1", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";ç§å®¤é¦è¦è§åçææå" : "ç§å®¤é¦è¦è§åçææå"); |
| | | } |
| | | if (!SITE_XH.equals(active)) { |
| | | if (wardIsPrimary && wardGenCount > 0) { |
| | | updateCheckFlag(inhosp, 2, "1", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";ç
åºé¦è¦è§åçææå" : "ç
åºé¦è¦è§åçææå"); |
| | | } |
| | | if (diagIsPrimary && diagGenCount > 0) { |
| | | updateCheckFlag(inhosp, 3, "1", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";ç¾ç
é¦è¦è§åçææå" : "ç¾ç
é¦è¦è§åçææå"); |
| | | } |
| | | } |
| | | if (deptIsPrimary && deptGenCount == 0) { |
| | | updateCheckFlag(inhosp, 1, "2", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";ç§å®¤é¦è¦è§åçæå¤±è´¥" : "ç§å®¤é¦è¦è§åçæå¤±è´¥"); |
| | | } |
| | | if (!SITE_XH.equals(active)) { |
| | | if (wardIsPrimary && wardGenCount == 0) { |
| | | updateCheckFlag(inhosp, 2, "2", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";ç
åºé¦è¦è§åçæå¤±è´¥" : "ç
åºé¦è¦è§åçæå¤±è´¥"); |
| | | } |
| | | if (diagIsPrimary && diagGenCount == 0) { |
| | | updateCheckFlag(inhosp, 3, "2", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";ç¾ç
é¦è¦è§åçæå¤±è´¥" : "ç¾ç
é¦è¦è§åçæå¤±è´¥"); |
| | | } |
| | | } |
| | | } else { |
| | | // å L1797-1828ï¼ææé¦è¦è§åå
¨é¨å¤±è´¥ â æ =1 çç½® 2ï¼ç¶åæ§è¡æ¬¡è¦è§å |
| | | log.info("ãåºäºè§åãé¦è¦è§åå
¨é¨å¤±è´¥ï¼å°=1çflag设为2ï¼å¼å§æ§è¡æ¬¡è¦è§å"); |
| | | if (deptIsPrimary) { |
| | | updateCheckFlag(inhosp, 1, "2", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";ç§å®¤é¦è¦è§åå
¨é¨å¤±è´¥" : "ç§å®¤é¦è¦è§åå
¨é¨å¤±è´¥"); |
| | | } |
| | | if (!SITE_XH.equals(active)) { |
| | | if (wardIsPrimary) { |
| | | updateCheckFlag(inhosp, 2, "2", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";ç
åºé¦è¦è§åå
¨é¨å¤±è´¥" : "ç
åºé¦è¦è§åå
¨é¨å¤±è´¥"); |
| | | } |
| | | if (diagIsPrimary) { |
| | | updateCheckFlag(inhosp, 3, "2", StringUtils.isNotEmpty(remark) |
| | | ? remark + ";ç¾ç
é¦è¦è§åå
¨é¨å¤±è´¥" : "ç¾ç
é¦è¦è§åå
¨é¨å¤±è´¥"); |
| | | } |
| | | } |
| | | if (deptIsSecondary) { |
| | | log.info("ãåºäºè§åãæ§è¡ç§å®¤æ¬¡è¦è§å"); |
| | | addDeptSubTaskForPatient(inhosp, archive, config); |
| | | } |
| | | if (!SITE_XH.equals(active)) { |
| | | if (wardIsSecondary) { |
| | | log.info("ãåºäºè§åãæ§è¡ç
åºæ¬¡è¦è§å"); |
| | | addWardSubTaskForPatient(inhosp, archive, config); |
| | | } |
| | | if (diagIsSecondary) { |
| | | log.info("ãåºäºè§åãæ§è¡ç¾ç
次è¦è§å"); |
| | | addIcd10SubTaskForPatient(inhosp, archive, config); |
| | | } |
| | | } |
| | | } |
| | | writeFlagsAfterRun(inhosp, hit); |
| | | } catch (Exception e) { |
| | | // å L1839-1845 |
| | | e.printStackTrace(); |
| | | log.error("ãåºäºè§åãæ£è
{}å¤çå¼å¸¸ï¼{}", inhosp.getInhospid(), e.getMessage()); |
| | | updateCheckFlag(inhosp, 1, "2", "åºäºè§åå¤çå¼å¸¸"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 维度å°è¯é¡ºåºï¼2026-10 å£å¾ï¼ã |
| | | * <p> |
| | | * è§å为 {@code null} â {@code [ç§å®¤, ç
åº]}ï¼æ {@code service_taskdept} é该æ£è
ç |
| | | * ç§å®¤/ç
åº"éç¨æ¨¡å"çæï¼è¿æ¯ä¸å¡æç¡®è¦æ±çå
åºå£å¾ï¼æ¤æ¶<b>ä¸è¿å
¥ç¾ç
维度</b>ï¼ã |
| | | * <p> |
| | | * æè§å â {@code [é¦è¦ç»´åº¦â¦, 次è¦ç»´åº¦â¦, ç§å®¤, ç
åº]}ï¼ |
| | | * é¦è¦ä¼å
ãæ¬¡è¦å
¶åï¼æåç¨éç¨å
åºä¿è¯"è½çæä¸æ¡å°±çæä¸æ¡"ã |
| | | */ |
| | | private List<Integer> resolveDimensionOrder(VisitTaskRule rule) { |
| | | boolean xhSite = SITE_XH.equals(active); |
| | | List<Integer> order = new ArrayList<>(4); |
| | | if (rule == null) { |
| | | addDimension(order, 1, xhSite); |
| | | addDimension(order, 2, xhSite); |
| | | return order; |
| | | } |
| | | boolean deptIsPrimary = "1".equals(rule.getDeptRule()); |
| | | boolean wardIsPrimary = "1".equals(rule.getWradRule()); |
| | | boolean diagIsPrimary = "1".equals(rule.getDiagRule()); |
| | | boolean deptIsSecondary = "2".equals(rule.getDeptRule()); |
| | | boolean wardIsSecondary = "2".equals(rule.getWradRule()); |
| | | boolean diagIsSecondary = "2".equals(rule.getDiagRule()); |
| | | // åä¼å
级å
åºå®é¡ºåºï¼ç§å®¤ â ç
åº â ç¾ç
|
| | | if (deptIsPrimary) { |
| | | addDimension(order, 1, xhSite); |
| | | } |
| | | if (wardIsPrimary) { |
| | | addDimension(order, 2, xhSite); |
| | | } |
| | | if (diagIsPrimary) { |
| | | addDimension(order, 3, xhSite); |
| | | } |
| | | if (deptIsSecondary) { |
| | | addDimension(order, 1, xhSite); |
| | | } |
| | | if (wardIsSecondary) { |
| | | addDimension(order, 2, xhSite); |
| | | } |
| | | if (diagIsSecondary) { |
| | | addDimension(order, 3, xhSite); |
| | | } |
| | | // éç¨å
åºï¼è§åéé
ç维度å
¨é½åä¸å°ä»»å¡æ¶ï¼ä»æ service_taskdept ç ç§å®¤/ç
åº çæä¸æ¡ |
| | | addDimension(order, 1, xhSite); |
| | | addDimension(order, 2, xhSite); |
| | | return order; |
| | | } |
| | | |
| | | /** 追å ä¸ä¸ªåé维度ï¼{@code xh} ç«ç¹åªå
许ç§å®¤ç»´åº¦ï¼å {@code !active.equals("xh")} ççä»·åæ³ï¼ */ |
| | | private void addDimension(List<Integer> order, int type, boolean xhSite) { |
| | | if (xhSite && type != 1) { |
| | | return; |
| | | } |
| | | if (!order.contains(type)) { |
| | | order.add(type); |
| | | } |
| | | } |
| | | |
| | | private String dimensionName(int type) { |
| | | switch (type) { |
| | | case 1: |
| | | return "ç§å®¤"; |
| | | case 2: |
| | | return "ç
åº"; |
| | | case 3: |
| | | return "ç¾ç
"; |
| | | default: |
| | | return "æªç¥(" + type + ")"; |
| | | } |
| | | } |
| | | |
| | | /** å°è¯ä¸ä¸ªç»´åº¦ï¼è¿å"æ¯å¦çççæäºï¼ææ¬æ¥å°±å·²ç»æï¼ä¸æ¡åä»»å¡" */ |
| | | private boolean generateOneForDimension(VisitInhospRow inhosp, VisitArchiveRow archive, |
| | | int type, String config) { |
| | | switch (type) { |
| | | case 1: |
| | | return addDeptSubTaskForPatient(inhosp, archive, config) > 0; |
| | | case 2: |
| | | return addWardSubTaskForPatient(inhosp, archive, config) > 0; |
| | | case 3: |
| | | return addIcd10SubTaskForPatient(inhosp, archive, config) > 0; |
| | | default: |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ä¸è½®çæç»æåçæ å¿ä½ååã |
| | | * <p> |
| | | * â ï¸ å
³é®ç¹ï¼æ«æé®æ¯ {@code pat_med_inhosp.deptcheck_flag = '0'}ï¼ |
| | | * æä»¥<b>ä¸è®ºå½ä¸åªä¸ªç»´åº¦ï¼deptcheck_flag é½å¿
é¡»è¢«åæ 1 æ 2</b>ï¼ |
| | | * å¦åä¸ä¸è½®æ«æä¼æè¿ä¸ªæ£è
åå¤çä¸éï¼2026-10 éå¤çæçç´æ¥åå ï¼ã |
| | | * <p> |
| | | * æ²¡çææ¶ï¼{@code hit == null}ï¼å»æ<b>åªè¡¥æ«æé®</b>ï¼åç»´åº¦æ¹æ³å·²ç»ææ´å
·ä½çåå |
| | | * ï¼"该æ£è
æå¨ç§å®¤æªé
置离é¢é¿æä»»å¡;" / "çæåä»»å¡å¤±è´¥ 1" â¦ï¼åè¿ |
| | | * {@code long_task_reason} äºï¼è¿éå
ç¨ä¸æ¬¡éè¯»å¤æ deptcheck æ¯å¦å·²ç»é 0ï¼ |
| | | * é¿å
æå®è¦çææ³æ³ç"æªçæé访任å¡"ã |
| | | * |
| | | * @param hit å½ä¸ç维度ï¼{@code null} = ä¸ä¸ªç»´åº¦é½æ²¡è½çæ |
| | | */ |
| | | private void writeFlagsAfterRun(VisitInhospRow inhosp, Integer hit) { |
| | | boolean xhSite = SITE_XH.equals(active); |
| | | if (hit == null) { |
| | | VisitInhospRow fresh = inhospMapper.selectByInhospid(inhosp.getInhospid()); |
| | | String current = fresh == null ? null : fresh.getDeptcheckFlag(); |
| | | if (current == null || "0".equals(current)) { |
| | | updateCheckFlag(inhosp, 1, "2", composeRemark(inhosp, "æªçæé访任å¡ï¼æ å¯ç¨é¿æä»»å¡ï¼")); |
| | | } |
| | | return; |
| | | } |
| | | for (int type = 1; type <= 3; type++) { |
| | | if (xhSite && type != 1) { |
| | | continue; |
| | | } |
| | | if (hit == type) { |
| | | updateCheckFlag(inhosp, type, "1", composeRemark(inhosp, |
| | | "æä¼å
级çæä¸æ¡é访任å¡ï¼ç»´åº¦=" + dimensionName(type) + "ï¼")); |
| | | } else { |
| | | updateCheckFlag(inhosp, type, "2", composeRemark(inhosp, |
| | | "å·²çæä¸æ¡é访任å¡ï¼ç»´åº¦=" + dimensionName(hit) + "ï¼ï¼æ¬ç»´åº¦è·³è¿")); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** æ¼ reasonï¼æ²¿ç¨åå®ç°ç {@code remark + ";xxx"} å½¢å¼ */ |
| | | private String composeRemark(VisitInhospRow inhosp, String text) { |
| | | String remark = inhosp.getRemark(); |
| | | return StringUtils.isNotEmpty(remark) ? remark + ";" + text : text; |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | /** |
| | | * 为å个æ£è
çæç§å®¤ç»´åº¦çåä»»å¡ã |
| | | * <p> |
| | | * â ï¸ 2026-10 å£å¾åæ´ï¼å½ä¸å¤ä¸ªé¿æä»»å¡æ¶<b>åªçæç¬¬ä¸æ¡çæ£è½åºçä»»å¡</b> |
| | | * ï¼åå®ç°æ¯ {@code for (t : taskdepts) writeInSubTask(...); generatedCount++;}ï¼ |
| | | * ä¸ä¸ªç§å®¤é
N ä¸ªé¿æä»»å¡å°±ä¼çæ N æ¡ ââ æ¯"å䏿£è
å åæ¡"ç主å ï¼ã |
| | | * |
| | | * @return çæçå任塿°é |
| | | * @return çæçå任塿°éï¼0 æ 1ï¼ |
| | | */ |
| | | public int addDeptSubTaskForPatient(VisitInhospRow inhosp, VisitArchiveRow archive, String config) { |
| | | int generatedCount = 0; |
| | | try { |
| | | // å L1857-1864ï¼ææ£è
æå¨ç§å®¤æ¥è¯¥ç§å®¤çé¿æä»»å¡ï¼dept_type=1 + service_type=2ï¼ |
| | | VisitTaskdeptRow query = new VisitTaskdeptRow(); |
| | |
| | | updateInhosp(u); |
| | | } else { |
| | | for (VisitTaskdeptRow t : taskdepts) { |
| | | subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 1, config); |
| | | generatedCount++; |
| | | // ä¸ä¸ªæ£è
åªç䏿¡ï¼ç¬¬ä¸æ¡çæ£è½åºçå³è¿å |
| | | if (subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 1, config)) { |
| | | return 1; |
| | | } |
| | | log.info("ãç§å®¤ä»»å¡ãæ£è
{}ä»»å¡{}æªçæåä»»å¡ï¼å°è¯ä¸ä¸ä¸ªåé", |
| | | inhosp.getInhospid(), t.getTaskId()); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | u.setLongTaskReason("ç§å®¤ä»»å¡å¤çå¼å¸¸"); |
| | | updateInhosp(u); |
| | | } |
| | | return generatedCount; |
| | | return 0; |
| | | } |
| | | |
| | | // ========================================================================== |
| | |
| | | |
| | | /** |
| | | * 为å个æ£è
çæç
åºç»´åº¦çåä»»å¡ã |
| | | * <p> |
| | | * â ï¸ åä¸ï¼å½ä¸å¤ä¸ªé¿æä»»å¡æ¶åªçæç¬¬ä¸æ¡çæ£è½åºçï¼åå®ç°æ¯å
¨çæï¼ã |
| | | * |
| | | * @return çæçå任塿°é |
| | | * @return çæçå任塿°éï¼0 æ 1ï¼ |
| | | */ |
| | | public int addWardSubTaskForPatient(VisitInhospRow inhosp, VisitArchiveRow archive, String config) { |
| | | int generatedCount = 0; |
| | | try { |
| | | String errorreason = null; |
| | | List<VisitTaskdeptRow> taskdeptList = null; |
| | |
| | | updateInhosp(u); |
| | | } else { |
| | | for (VisitTaskdeptRow t : taskdeptList) { |
| | | subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 2, config); |
| | | generatedCount++; |
| | | // ä¸ä¸ªæ£è
åªç䏿¡ï¼ç¬¬ä¸æ¡çæ£è½åºçå³è¿å |
| | | if (subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 2, config)) { |
| | | return 1; |
| | | } |
| | | log.info("ãç
åºä»»å¡ãæ£è
{}ä»»å¡{}æªçæåä»»å¡ï¼å°è¯ä¸ä¸ä¸ªåé", |
| | | inhosp.getInhospid(), t.getTaskId()); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | u.setLongTaskReason("ç
åºä»»å¡å¤çå¼å¸¸"); |
| | | updateInhosp(u); |
| | | } |
| | | return generatedCount; |
| | | return 0; |
| | | } |
| | | |
| | | // ========================================================================== |
| | |
| | | |
| | | /** |
| | | * 为å个æ£è
çæç¾ç
维度çåä»»å¡ã |
| | | * <p> |
| | | * â ï¸ åä¸ï¼å½ä¸å¤ä¸ªé¿æä»»å¡æ¶åªçæç¬¬ä¸æ¡çæ£è½åºçï¼åå®ç°æ¯å
¨çæï¼ã |
| | | * |
| | | * @return çæçå任塿°é |
| | | * @return çæçå任塿°éï¼0 æ 1ï¼ |
| | | */ |
| | | public int addIcd10SubTaskForPatient(VisitInhospRow inhosp, VisitArchiveRow archive, String config) { |
| | | int generatedCount = 0; |
| | | try { |
| | | // å L1945-1947 |
| | | if (StringUtils.isEmpty(inhosp.getLeaveicd10code())) { |
| | |
| | | // å L1975-1983ï¼å¿
é¡»ç§å®¤æç
åºè½å¹é
ä¸æå»º |
| | | if (StringUtils.isNotEmpty(t.getDeptCode()) |
| | | && t.getDeptCode().equals(inhosp.getLeaveldeptcode())) { |
| | | subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 3, config); |
| | | generatedCount++; |
| | | flag = 1; |
| | | // ä¸ä¸ªæ£è
åªç䏿¡ï¼ç¬¬ä¸æ¡çæ£è½åºçå³è¿å |
| | | if (subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 3, config)) { |
| | | return 1; |
| | | } |
| | | log.info("ãç¾ç
ä»»å¡ãæ£è
{}ä»»å¡{}æªçæåä»»å¡ï¼å°è¯ä¸ä¸ä¸ªåé", |
| | | inhosp.getInhospid(), t.getTaskId()); |
| | | } else if (StringUtils.isNotEmpty(t.getWardCode()) |
| | | && t.getWardCode().equals(inhosp.getLeavehospitaldistrictcode())) { |
| | | subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 3, config); |
| | | generatedCount++; |
| | | flag = 1; |
| | | if (subtaskWriter.writeInSubTask(t.getTaskId(), true, inhosp, archive, 3, config)) { |
| | | return 1; |
| | | } |
| | | log.info("ãç¾ç
ä»»å¡ãæ£è
{}ä»»å¡{}æªçæåä»»å¡ï¼å°è¯ä¸ä¸ä¸ªåé", |
| | | inhosp.getInhospid(), t.getTaskId()); |
| | | } |
| | | } |
| | | if (flag == 0) { |
| | |
| | | u.setLongTaskReason("ç¾ç
ä»»å¡å¤çå¼å¸¸"); |
| | | updateInhosp(u); |
| | | } |
| | | return generatedCount; |
| | | return 0; |
| | | } |
| | | |
| | | // ========================================================================== |
| | |
| | | |
| | | // å L331-409 + L411-444ï¼ä¸¤æ®µå®£ææ¹ä¸ºåè°å®£ææ¨¡å |
| | | // â ï¸ è¿éä¸åå
èå®ç° ââ å¦åä¼ä¸ ruoyi-publicity éçå®ç°"å两é" |
| | | dealInHospPublicityAndMedical(config); |
| | | // dealInHospPublicityAndMedical(config); |
| | | |
| | | // å L445-451ï¼åºäºè§åçåºé¢é访 + ææ¯é访 |
| | | addSubTaskByRule(config, patMedInhosps); |
| | |
| | | * æ¹æ¡å计åå« {@code VisitSubtaskFactory} å¹¶åæ¶æ¿è½½ {@code writeInSubTask}ã |
| | | * å®é
å®ç°æ¶æå®æ¶çªä¸º"纯ç»è£
+ 纯工å
·"ï¼å 为 {@code writeInSubTask}ï¼232 è¡ï¼éæå¤§é |
| | | * ååºä¸å»éç¼æï¼æ··å¨ä¸èµ·ä¼è®©æ¬ç±»ç A æ¡£éè¡çä»·æ¢é失廿ä¹ã |
| | | * |
| | | * <h3>â ï¸ å¯ä¸ç"鿬è¿"è¡ï¼{@code hospno}</h3> |
| | | * {@link #boxedServiceSubtask} éå¤äºä¸å¥ {@code d.setHospno(inhosp.getInhospno())}ã |
| | | * åå®ç°ç¡®å®<b>没æ</b>è¿ä¸å¥ï¼æä»¥åºé¢é¾è·¯ç {@code service_subtask.hospno} ä¸ç´è½ç©ºï¼ |
| | | * è {@code ServiceSubtask.hospno} çè¯ä¹å°±æ¯"å°±è¯ç¼å·ï¼å¯¹åºç outhospnoãinhospnoï¼"ã |
| | | * è¿æ¯<b>ææè¡¥é½</b>ï¼ä¸æ¯ææ¼ ââ å忢éï¼{@code verify_inhospvisit_boxed_fields.py}ï¼ |
| | | * åªæ ¡éª"å setter æ¯å¦é½æå¯¹åºè°ç¨"ï¼ä¸ä¼å æ¤æ¥éã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | |
| | | d.setNurseId(inhosp.getNurseId()); |
| | | d.setNurseName(inhosp.getNurseName()); |
| | | d.setInhospid(inhosp.getInhospid()); |
| | | // â ï¸ è¿ä¸è¡æ¯ãè¡¥çãï¼ä¸æ¯æ¬è¿ï¼ |
| | | // å boxedServiceSubtask 仿ªè®¾ hospnoï¼è ServiceSubtask.hospno çè¯ä¹æ¯ |
| | | // "å°±è¯ç¼å·ï¼å¯¹åºç outhospnoãinhospnoï¼"ï¼è§ ServiceSubtask åæ®µæ³¨éï¼ã |
| | | // ç»æå°±æ¯åºé¢é¾è·¯ç service_subtask.hospno ä¸ç´æ¯ NULLï¼ä¸é¨è¯é¾è·¯ä¸ä¸è´ã |
| | | // åå¼ï¼pat_med_inhosp.inhospnoï¼é¨è¯ä¾§å pat_med_outhosp.outhospnoï¼è§ OuthospSubtaskDraftï¼ã |
| | | d.setHospno(inhosp.getInhospno()); |
| | | d.setDrcode(inhosp.getDrcode()); |
| | | d.setDrname(inhosp.getDrname()); |
| | | d.setDeptcode(inhosp.getLeaveldeptcode()); |
| | |
| | | from pat_med_inhosp |
| | | </sql> |
| | | |
| | | <sql id="selectPatMedInhospListFromWhere"> |
| | | pat_med_inhosp b |
| | | JOIN |
| | | pat_archive a ON a.id = b.patid |
| | | where 1=1 |
| | | <!-- |
| | | del_flag å¿
é¡»ç¨åç¬¦ä¸²å¸¸éæ¯è¾ï¼å®å弿¯ '0'/'1'ï¼char åï¼ã |
| | | åæ del_flag = 0 æ¶ MySQL 伿ãåãæ DOUBLE éå¼è½¬æ¢ï¼è¯¥æ¡ä»¶å°±åªæ¯è¿æ»¤ã |
| | | ä¸è½ç¨æ¥å®ä½ç´¢å¼ï¼è b.del_flag æ£æ¯ idx_inhosp_optimize / idx_pmi_del_org_end |
| | | çé¦å ââ æ°ååæ³çäºæç´¢å¼é¦åç½ç»ã |
| | | åä¸ç»è®ºè§ sql/sltdMydTotalByDimension_index_20260924.sql 第 117-134 è¡ã |
| | | ï¼åæ¯ int æ¶å '0' ä¹å®å
¨ï¼è½¬æ¢åçå¨å¸¸éä¾§ï¼ç´¢å¼ç
§æ ·å¯ç¨ãï¼ |
| | | --> |
| | | AND a.del_flag = '0' |
| | | AND b.del_flag = '0' |
| | | AND a.idcardno IS NOT NULL |
| | | <if test="inhospid != null">and b.inhospid = #{inhospid}</if> |
| | | <if test="startOutHospTime != null ">and date_format(b.endtime,'%y%m%d') >= |
| | | date_format(#{startOutHospTime},'%y%m%d') |
| | | </if> |
| | | <if test="endOutHospTime != null ">and date_format(b.endtime,'%y%m%d') <= |
| | | date_format(#{endOutHospTime},'%y%m%d') |
| | | </if> |
| | | <if test="startInHospTime != null ">and date_format(b.starttime,'%y%m%d') >= |
| | | date_format(#{startInHospTime},'%y%m%d') |
| | | </if> |
| | | <if test="endInHospTime != null ">and date_format(b.starttime,'%y%m%d') <= |
| | | date_format(#{endInHospTime},'%y%m%d') |
| | | </if> |
| | | <if test="hospitalname != null and hospitalname != ''">and hospitalname like concat('%', #{hospitalname}, |
| | | '%') |
| | | </if> |
| | | <if test="patname != null and patname != ''">and patname like concat('%', #{patname}, '%')</if> |
| | | <if test="hospitaldistrictname != null and hospitaldistrictname != ''">and hospitaldistrictname like |
| | | concat('%', #{hospitaldistrictname}, '%') |
| | | </if> |
| | | <if test="endtime != null ">and b.endtime = #{endtime}</if> |
| | | <if test="bedNo != null ">and b.bed_no = #{bedNo}</if> |
| | | <if test="inhospMydFlag != null ">and b.inhosp_myd_flag = #{inhospMydFlag}</if> |
| | | <if test="managementDoctor != null ">and b.management_doctor = #{managementDoctor}</if> |
| | | <if test="managementDoctorCode != null ">and b.management_doctor_code = #{managementDoctorCode}</if> |
| | | <if test="inhospno != null ">and b.inhospno = #{inhospno}</if> |
| | | <if test="fuflag != null ">and b.fuflag = #{fuflag}</if> |
| | | <if test="orgid != null ">and b.orgid = #{orgid}</if> |
| | | <if test="campusid != null ">and b.campusid = #{campusid}</if> |
| | | <if test="serialnum != null ">and b.serialnum = #{serialnum}</if> |
| | | <if test="endtime != null ">and b.endtime = #{endtime}</if> |
| | | <if test="patno != null ">and b.patno = #{patno}</if> |
| | | <if test="nurseId != null ">and b.nurse_id = #{nurseId}</if> |
| | | <if test="nurseName != null and nurseName != ''">and b.nurse_name = #{nurseName}</if> |
| | | <if test="deptcheckFlag != null ">and b.deptcheck_flag = #{deptcheckFlag}</if> |
| | | <if test="scheduleCheckFlag != null ">and b.schedulecheck_flag = #{scheduleCheckFlag}</if> |
| | | <if test="wardcheckFlag != null ">and b.wardcheck_flag = #{wardcheckFlag}</if> |
| | | <if test="inDeptcheckFlag != null ">and b.in_deptcheck_flag = #{inDeptcheckFlag}</if> |
| | | <if test="inWardcheckFlag != null ">and b.in_wardcheck_flag = #{inWardcheckFlag}</if> |
| | | <if test="diagcheckFlag != null ">and b.diagcheck_flag = #{diagcheckFlag}</if> |
| | | <if test="encounterSourceId != null ">and b.encounter_source_id = #{encounterSourceId}</if> |
| | | <if test="importanceFlagCode != null ">and b.importance_flag_code = #{importanceFlagCode}</if> |
| | | <if test="emergencyLevelCode != null ">and b.emergency_level_code = #{emergencyLevelCode}</if> |
| | | <!-- |
| | | å¨é¢ï¼cry=0ï¼ï¼ä¸¤ä¸ªæ¡ä»¶é½è¦ã |
| | | â b.endtime is null ââ å XML å°±æï¼ä¿æä¸å¨ï¼ |
| | | â¡ b.inhospstate = '0' ââ è¿åºåç± PatMedInhospServiceImpl è¡¥ï¼cry=0 æ¶ |
| | | setInhospstate("0")ï¼ï¼è¿å°æ¬æ¨¡ååè¿æ¡é¾ç´è¿ Mapperï¼è¿å¥å°±ä¸¢äºã |
| | | 为ä»ä¹å¿
é¡»è¡¥åæ¥ï¼ä¸åªæ¯"æ¢å¤åè¡ä¸º"ï¼ä¹æ¯æ§è½é®é¢ï¼ï¼ |
| | | · ç´¢å¼ idx_inhosp_optimize / idx_pmi_del_org_state_end çåä¸åæ¯ |
| | | (del_flag, orgid, inhospstate)ï¼åªæä¸ä¸ªç弿¡ä»¶é½äºæè½ç²¾ç¡®å®ä½"å¨é¢"é£å åè¡ï¼ |
| | | å°äº inhospstateï¼å°±åªè½ç¨å° (del_flag, orgid) åç¼ = è¯¥æºæãå
¨é¨åå²ä½é¢è®°å½ãï¼ |
| | | åå ä¸åé¢ç ORDER BY/GROUP BYï¼å®æµå°±æ¯ 4~5 ç§çæ¥æºã |
| | | · cry=1/2/3 æ¬æ¥å°±æ¯æ inhospstate å¤çï¼åªæ cry=0 ç¨ endtime å¤ ââ è¡¥é½åæå¯¹ç§°ã |
| | | 为ä»ä¹å inhospstate == null è¿ä¸ªåæï¼è°ç¨æ¹è¥å·²æ¾å¼æå® inhospstateï¼å°±å«åå®ææ¶ |
| | | ï¼å¦å cry=0 + inhospstate='2' ä¼åæ"åèªèº«çç¾"çç©ºç»æï¼ã |
| | | --> |
| | | <if test="cry != null and cry == 0 ">and b.endtime is null</if> |
| | | <if test="cry != null and cry == 0 and inhospstate == null ">and b.inhospstate = '0'</if> |
| | | <!-- å del_flagï¼inhospstate æ¯åå¼èå´ '0'~'3' çå符åï¼å¿
é¡»ç¨å符串常éï¼ |
| | | å¦åç´¢å¼ä¸ç¨ä¸å°è¿ä¸ªç弿¡ä»¶ï¼åºé¢/转ç§/é¢å
¥é¢ ä¸ä¸ªè§å¾èµ°çå°±æ¯è¿ä¸è¡ï¼ --> |
| | | <if test="cry != null and cry == 1 ">and b.inhospstate='1'</if> |
| | | <if test="cry != null and cry == 2 ">and b.inhospstate='2'</if> |
| | | <if test="cry != null and cry == 3 ">and b.inhospstate='3'</if> |
| | | <if test="inhospstate != null ">and b.inhospstate = #{inhospstate}</if> |
| | | <if test="schemestatus != null ">and b.schemestatus = #{schemestatus}</if> |
| | | <if test="outWayId != null ">and b.out_way_id = #{outWayId}</if> |
| | | <if test="outWayName != null ">and b.out_way_name = #{outWayName}</if> |
| | | <if test="leaveldeptcode != null ">and b.leaveldeptcode = #{leaveldeptcode}</if> |
| | | <if test="leavediagname != null and leavediagname != ''">and b.leavediagname like concat('%', |
| | | #{leavediagname}, '%') |
| | | </if> |
| | | <if test="drname != null and drname != ''">and b.drname like concat('%', #{drname}, '%')</if> |
| | | <if test="leaveldeptname != null and leaveldeptname != ''">and b.leaveldeptname like concat('%', |
| | | #{leaveldeptname}, '%') |
| | | </if> |
| | | <if test="deptname != null and deptname != ''">and b.deptname like concat('%', |
| | | #{deptname}, '%') |
| | | </if> |
| | | <if test="patid != null and patid != ''">and a.id =#{patid} |
| | | </if> |
| | | <if test="leavehospitaldistrictname != null and leavehospitaldistrictname != ''">and |
| | | b.leavehospitaldistrictname like concat('%', #{leavehospitaldistrictname}, '%') |
| | | </if> |
| | | |
| | | <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size()>0"> |
| | | AND b.leavehospitaldistrictcode IN |
| | | <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator="," |
| | | close=")"> |
| | | #{leavehospitaldistrictcode} |
| | | </foreach> |
| | | </if> |
| | | |
| | | <if test="hospitaldistrictcodeList != null and hospitaldistrictcodeList.size()>0"> |
| | | AND b.hospitaldistrictcode IN |
| | | <foreach collection="hospitaldistrictcodeList" item="hospitaldistrictcode" open="(" separator="," |
| | | close=")"> |
| | | #{hospitaldistrictcode} |
| | | </foreach> |
| | | </if> |
| | | <if test="leaveldeptcodes != null and leaveldeptcodes.size()>0"> |
| | | AND b.leaveldeptcode IN |
| | | <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator="," |
| | | close=")"> |
| | | #{leaveldeptcode} |
| | | </foreach> |
| | | </if> |
| | | <if test="deptcodeList != null and deptcodeList.size()>0"> |
| | | AND b.deptcode IN |
| | | <foreach collection="deptcodeList" item="deptcode" open="(" separator="," |
| | | close=")"> |
| | | #{deptcode} |
| | | </foreach> |
| | | </if> |
| | | <if test="icd10codeList != null and icd10codeList.size()>0"> |
| | | AND b.leaveicd10code IN |
| | | <foreach collection="icd10codeList" item="icd10code" open="(" separator="," |
| | | close=")"> |
| | | #{icd10code} |
| | | </foreach> |
| | | </if> |
| | | <if test="medicalCode != null and medicalCode != ''">and b.medical_code = #{medicalCode}</if> |
| | | <if test="medicalName != null and medicalName != ''">and b.medical_name = #{medicalName}</if> |
| | | <if test="medicalCompany != null and medicalCompany != ''">and b.medical_company = #{medicalCompany}</if> |
| | | </sql> |
| | | |
| | | <select id="selectPatMedInhospList" parameterType="com.ruoyi.inhospvisit.domain.PatMedInhosp" resultMap="PatMedInhospResult"> |
| | | select a.age AS age, |
| | | a.telcode as telcode, |
| | |
| | | b.medical_company, |
| | | a.idcardno |
| | | FROM |
| | | pat_med_inhosp b |
| | | JOIN |
| | | pat_archive a ON a.id = b.patid |
| | | where 1=1 |
| | | AND a.del_flag = 0 |
| | | AND b.del_flag = 0 |
| | | AND a.idcardno IS NOT NULL |
| | | <if test="inhospid != null">and b.inhospid = #{inhospid}</if> |
| | | <if test="startOutHospTime != null ">and date_format(b.endtime,'%y%m%d') >= |
| | | date_format(#{startOutHospTime},'%y%m%d') |
| | | </if> |
| | | <if test="endOutHospTime != null ">and date_format(b.endtime,'%y%m%d') <= |
| | | date_format(#{endOutHospTime},'%y%m%d') |
| | | </if> |
| | | <if test="startInHospTime != null ">and date_format(b.starttime,'%y%m%d') >= |
| | | date_format(#{startInHospTime},'%y%m%d') |
| | | </if> |
| | | <if test="endInHospTime != null ">and date_format(b.starttime,'%y%m%d') <= |
| | | date_format(#{endInHospTime},'%y%m%d') |
| | | </if> |
| | | <if test="hospitalname != null and hospitalname != ''">and hospitalname like concat('%', #{hospitalname}, |
| | | '%') |
| | | </if> |
| | | <if test="patname != null and patname != ''">and patname like concat('%', #{patname}, '%')</if> |
| | | <if test="hospitaldistrictname != null and hospitaldistrictname != ''">and hospitaldistrictname like |
| | | concat('%', #{hospitaldistrictname}, '%') |
| | | </if> |
| | | <if test="endtime != null ">and b.endtime = #{endtime}</if> |
| | | <if test="bedNo != null ">and b.bed_no = #{bedNo}</if> |
| | | <if test="inhospMydFlag != null ">and b.inhosp_myd_flag = #{inhospMydFlag}</if> |
| | | <if test="managementDoctor != null ">and b.management_doctor = #{managementDoctor}</if> |
| | | <if test="managementDoctorCode != null ">and b.management_doctor_code = #{managementDoctorCode}</if> |
| | | <if test="inhospno != null ">and b.inhospno = #{inhospno}</if> |
| | | <if test="fuflag != null ">and b.fuflag = #{fuflag}</if> |
| | | <if test="orgid != null ">and b.orgid = #{orgid}</if> |
| | | <if test="campusid != null ">and b.campusid = #{campusid}</if> |
| | | <if test="serialnum != null ">and b.serialnum = #{serialnum}</if> |
| | | <if test="endtime != null ">and b.endtime = #{endtime}</if> |
| | | <if test="patno != null ">and b.patno = #{patno}</if> |
| | | <if test="nurseId != null ">and b.nurse_id = #{nurseId}</if> |
| | | <if test="nurseName != null and nurseName != ''">and b.nurse_name = #{nurseName}</if> |
| | | <if test="deptcheckFlag != null ">and b.deptcheck_flag = #{deptcheckFlag}</if> |
| | | <if test="scheduleCheckFlag != null ">and b.schedulecheck_flag = #{scheduleCheckFlag}</if> |
| | | <if test="wardcheckFlag != null ">and b.wardcheck_flag = #{wardcheckFlag}</if> |
| | | <if test="inDeptcheckFlag != null ">and b.in_deptcheck_flag = #{inDeptcheckFlag}</if> |
| | | <if test="inWardcheckFlag != null ">and b.in_wardcheck_flag = #{inWardcheckFlag}</if> |
| | | <if test="diagcheckFlag != null ">and b.diagcheck_flag = #{diagcheckFlag}</if> |
| | | <if test="encounterSourceId != null ">and b.encounter_source_id = #{encounterSourceId}</if> |
| | | <if test="importanceFlagCode != null ">and b.importance_flag_code = #{importanceFlagCode}</if> |
| | | <if test="emergencyLevelCode != null ">and b.emergency_level_code = #{emergencyLevelCode}</if> |
| | | <if test="cry != null and cry == 0 ">and b.endtime is null</if> |
| | | <if test="cry != null and cry == 1 ">and b.inhospstate=1</if> |
| | | <if test="cry != null and cry == 2 ">and b.inhospstate=2</if> |
| | | <if test="cry != null and cry == 3 ">and b.inhospstate=3</if> |
| | | <if test="inhospstate != null ">and b.inhospstate = #{inhospstate}</if> |
| | | <if test="schemestatus != null ">and b.schemestatus = #{schemestatus}</if> |
| | | <if test="outWayId != null ">and b.out_way_id = #{outWayId}</if> |
| | | <if test="outWayName != null ">and b.out_way_name = #{outWayName}</if> |
| | | <if test="leaveldeptcode != null ">and b.leaveldeptcode = #{leaveldeptcode}</if> |
| | | <if test="leavediagname != null and leavediagname != ''">and b.leavediagname like concat('%', |
| | | #{leavediagname}, '%') |
| | | </if> |
| | | <if test="drname != null and drname != ''">and b.drname like concat('%', #{drname}, '%')</if> |
| | | <if test="leaveldeptname != null and leaveldeptname != ''">and b.leaveldeptname like concat('%', |
| | | #{leaveldeptname}, '%') |
| | | </if> |
| | | <if test="deptname != null and deptname != ''">and b.deptname like concat('%', |
| | | #{deptname}, '%') |
| | | </if> |
| | | <if test="patid != null and patid != ''">and a.id =#{patid} |
| | | </if> |
| | | <if test="leavehospitaldistrictname != null and leavehospitaldistrictname != ''">and |
| | | b.leavehospitaldistrictname like concat('%', #{leavehospitaldistrictname}, '%') |
| | | </if> |
| | | |
| | | <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size()>0"> |
| | | AND b.leavehospitaldistrictcode IN |
| | | <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator="," |
| | | close=")"> |
| | | #{leavehospitaldistrictcode} |
| | | </foreach> |
| | | </if> |
| | | |
| | | <if test="hospitaldistrictcodeList != null and hospitaldistrictcodeList.size()>0"> |
| | | AND b.hospitaldistrictcode IN |
| | | <foreach collection="hospitaldistrictcodeList" item="hospitaldistrictcode" open="(" separator="," |
| | | close=")"> |
| | | #{hospitaldistrictcode} |
| | | </foreach> |
| | | </if> |
| | | <if test="leaveldeptcodes != null and leaveldeptcodes.size()>0"> |
| | | AND b.leaveldeptcode IN |
| | | <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator="," |
| | | close=")"> |
| | | #{leaveldeptcode} |
| | | </foreach> |
| | | </if> |
| | | <if test="deptcodeList != null and deptcodeList.size()>0"> |
| | | AND b.deptcode IN |
| | | <foreach collection="deptcodeList" item="deptcode" open="(" separator="," |
| | | close=")"> |
| | | #{deptcode} |
| | | </foreach> |
| | | </if> |
| | | <if test="icd10codeList != null and icd10codeList.size()>0"> |
| | | AND b.leaveicd10code IN |
| | | <foreach collection="icd10codeList" item="icd10code" open="(" separator="," |
| | | close=")"> |
| | | #{icd10code} |
| | | </foreach> |
| | | </if> |
| | | <if test="medicalCode != null and medicalCode != ''">and b.medical_code = #{medicalCode}</if> |
| | | <if test="medicalName != null and medicalName != ''">and b.medical_name = #{medicalName}</if> |
| | | <if test="medicalCompany != null and medicalCompany != ''">and b.medical_company = #{medicalCompany}</if> |
| | | <include refid="selectPatMedInhospListFromWhere"/> |
| | | GROUP BY |
| | | b.inhospid, |
| | | a.age, |
| | |
| | | </otherwise> |
| | | </choose> |
| | | </if> |
| | | </select> |
| | | |
| | | <!-- |
| | | åé¡µæ»æ°ï¼PageHelper æå countï¼id = 主æ¥è¯¢ id + _COUNT ä¼è¢«èªå¨éç¨ï¼ã |
| | | |
| | | åç¶æï¼ä¸»æ¥è¯¢å¸¦ GROUP BYï¼pagehelper ç CountSqlParser#isSimpleCount å¤å®ä¸º |
| | | "ä¸è½ç®å"ï¼äºæ¯æ»æ°åæ SELECT count(0) FROM ( ä¸é¢é£æ¡ 60 åæ¥è¯¢ ) tmp_count â |
| | | çäºæ¯æ¬¡ç¿»é¡µææ´æ¡æ¥è¯¢åè·ä¸éã |
| | | |
| | | è¿éä¿æãå®å
¨ç¸åç FROM/WHERE/GROUP BYãï¼å
±ç¨ selectPatMedInhospListFromWhere çæ®µï¼ |
| | | æ¡ä»¶ä¸ä¼æ¼ï¼ï¼ä½åæ¥è¯¢åª select 1ï¼ä¸ç©å 60 åï¼ä¹ä¸å¸¦ order byã |
| | | å 为åç»é®å
å« a.id èè¿ä¸ª join æ¯ä¸å¯¹ä¸ï¼åç»æ° == join ç»æè¡æ°ï¼æ»æ°ä¸åæ¥ä¸è´ã |
| | | --> |
| | | <select id="selectPatMedInhospList_COUNT" parameterType="com.ruoyi.inhospvisit.domain.PatMedInhosp" |
| | | resultType="java.lang.Long"> |
| | | select count(1) |
| | | from ( |
| | | select 1 |
| | | FROM |
| | | <include refid="selectPatMedInhospListFromWhere"/> |
| | | group by b.inhospid, a.age, a.age_unit, a.telcode, a.id, a.sex |
| | | ) t |
| | | </select> |
| | | |
| | | <select id="selectPatMedInhospListBySerialnum" parameterType="com.ruoyi.inhospvisit.domain.PatMedInhosp" |
| | |
| | | order by b.inhospid desc |
| | | </select> |
| | | |
| | | <!-- |
| | | å¨é¢ä¿¡æ¯å·æ°çåæ°ï¼åªæ¥ pat_med_inhosp èªèº«ãåªåå·æ°è¦ç¨çåã |
| | | 廿ä¸å¤ç¨ selectPatMedInhospList ââ é£ä¸ªæ¥è¯¢ join äº pat_archive ä¸è¦æ± |
| | | a.idcardno IS NOT NULLï¼ä¼è®©"è¯ä»¶å·è¿æ²¡è¡¥ä¸çæ°å
¥é¢æ£è
"é黿¼å·æ°ã |
| | | WHERE (del_flag, orgid, inhospstate) å½ä¸ idx_inhosp_optimize çåç¼ã |
| | | --> |
| | | <select id="selectInhospRefreshCandidates" resultMap="PatMedInhospResult"> |
| | | select inhospid, |
| | | serialnum, |
| | | patname, |
| | | orgid, |
| | | campusid, |
| | | deptcode, |
| | | deptname, |
| | | hospitaldistrictcode, |
| | | hospitaldistrictname, |
| | | hospitaldistrictid, |
| | | bed_no |
| | | from pat_med_inhosp |
| | | where inhospstate = '0' |
| | | and del_flag = '0' |
| | | and orgid = #{orgid} |
| | | order by inhospid asc |
| | | </select> |
| | | |
| | | <select id="selectPatMedInhospListByCondition" parameterType="com.ruoyi.inhospvisit.domain.PatMedInhospVO" |
| | | resultMap="PatMedInhospResult"> |
| | | select CONCAT( a.age, a.age_unit ) AS age, |
| | |
| | | private Long patid; |
| | | |
| | | /** |
| | | * HIS ä¾§æ£è
主é®ï¼{@code patid_his} åï¼ |
| | | * <p> |
| | | * â ï¸ ä¸è½çï¼{@code ruoyi-quartz} ç {@code CollectHISMapper.xml}ï¼å¸ä¸ HIS ééï¼ |
| | | * ç {@code PatMedOuthospResult} éæ {@code property="patidHis" column="patid_his"}ï¼ |
| | | * ä¸ {@code <if test="patidHis != null">and patid_his = #{patidHis}</if>}ã |
| | | * å®ä½ç¼ºè¿ä¸ªå±æ§æ¶ï¼é£äºééæ¥è¯¢å¨ç»ææ å°é¶æ®µå°±ä¼æ |
| | | * {@code ReflectionException: no setter for 'patidHis'}ã |
| | | * ï¼ç±»åä¸ {@code PatArchive.patidHis} ä¿æä¸è´ï¼Stringï¼ |
| | | */ |
| | | @ApiModelProperty(value = "HIS ä¾§æ£è
主é®ï¼patid_hisï¼") |
| | | private String patidHis; |
| | | |
| | | /** |
| | | * ç
人å§å |
| | | */ |
| | | @ApiModelProperty(value = " ç
人å§å") |
| | |
| | | <artifactId>ruoyi-task</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- |
| | | æ°æ®é鿍¡åï¼RyTask ç HIS ééå
¥å£ï¼dealHisDataï¼æ¹æ³ä½å·²æ´ä½æ¬è¿è¯¥æ¨¡åï¼ |
| | | è¿éåªä¿ç宿¶ä»»å¡å
¥å£å¹¶è½¬åç»å
¶é¨é¢ DataCollectionFacade |
| | | ï¼sys_job ç invoke_target 仿¯ ryTask.dealHisData('...')ï¼å
¥å£åä¸è½åï¼ã |
| | | --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-datacollection</artifactId> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
| | | </project> |
| | |
| | | @Autowired |
| | | private IServicePatientTempService iServicePatientTempService; |
| | | |
| | | @Autowired |
| | | private IHNGatherPatArchiveService ihnGatherPatArchiveService; |
| | | // â ï¸ 2026-10 ç§»é¤ï¼å `IHNGatherPatArchiveService ihnGatherPatArchiveService` åæ®µã |
| | | // å®å¨æ¬ç±»é**åª**被 dealHisData çæ²³ååæ¯ä½¿ç¨ï¼æ»åæ®µæ£æ¥ï¼æ¹åå
¨æä»¶ä»
1 å¤ä½¿ç¨ï¼ï¼ |
| | | // è¯¥åæ¯å·²éæ¹æ³ä½æ¬è¿ ruoyi-datacollectionï¼æ
åæ®µè¿å¸¦å é¤ ââ |
| | | // ççå®ä¼è®©äººè¯¯ä»¥ä¸º smartor çæ²³åééè¿ææ¬ç±»è¿ä¸ªä½¿ç¨æ¹ |
| | | // ï¼çæ£çä½¿ç¨æ¹å·²æ¯æ°æ®é鿍¡åç»å¥çº¦ HisGatherApi è°ç¨ç Bridgeï¼ã |
| | | |
| | | @Autowired |
| | | private IServiceSLTDHealthcareRecordService serviceSLTDHealthcareRecordService; |
| | |
| | | @Autowired |
| | | private IServiceSubtaskRecordService serviceSubtaskRecordService; |
| | | |
| | | @Autowired |
| | | IIcd10Service iIcd10Service; |
| | | // â ï¸ 2026-10 ç§»é¤ï¼å `IIcd10Service iIcd10Service` åæ®µã |
| | | // å®å¨æ¬ç±»é**åª**被 dealHisData ç"ç¾ç
åå
¸å¢ééé"ä¸è¡è°ç¨ï¼å·²éæ¹æ³ä½æ¬è¿ |
| | | // ruoyi-datacollectionï¼ç»å¥çº¦ HisGatherApi#gatherIcd10 è°å smartor çå®ç°ï¼ã |
| | | |
| | | @Autowired |
| | | IPatArchiveService patArchiveService; |
| | |
| | | @Autowired |
| | | private com.ruoyi.publicity.api.PublicityFacade publicityFacade; |
| | | |
| | | @Value("${appid}") |
| | | private String appid; |
| | | /** |
| | | * æ°æ®é鿍¡åç<b>常驻é¨é¢</b>ã |
| | | * <p> |
| | | * â ï¸ 2026-10 模ååï¼æ¬ç±»ç {@code dealHisData(String)} æ¹æ³ä½ï¼è¿åç§æå¸®æ |
| | | * {@code collectSegmentData}ï¼å·²æ´ä½æ¬è¿ {@code ruoyi-datacollection}ï¼ |
| | | * æ¬ç±»åªä¿ç宿¶ä»»å¡å
¥å£ï¼sys_job ç invoke_target æ¯ {@code ryTask.dealHisData('...')}ï¼ |
| | | * å
¥å£åä¸è½åï¼ãç«ç¹åæ¯ãæ¶é´çªå£ãåæ®µåæº¯ãæ¥å¿ææ¡é½å¨æ¨¡åéï¼ä¸è¡æªæ¹ã |
| | | * <p> |
| | | * 注å
¥é¨é¢è䏿¯æ¨¡åå
é¨ Serviceï¼é¨é¢<b>æ°¸è¿åå¨</b>ï¼ä¸åªæé¨é¢å¤ |
| | | * {@code sys_config: datacollection.enabled} å¼å
³ã |
| | | */ |
| | | @Autowired |
| | | private com.ruoyi.datacollection.api.DataCollectionFacade dataCollectionFacade; |
| | | |
| | | // â ï¸ 2026-10 å é¤ï¼å `@Value("${appid}") private String appid;` |
| | | // 宿¯ãæ°å微信å
¬ä¼å·æ¨éãçéçåæ®µï¼æäº¤ 8590ef6a å¼å
¥ï¼åªè¢« |
| | | // xinHuaWXReq.setAppid(appid) ç¨è¿ï¼ã该æ¨éé»è¾å·²æ¬è¿ ruoyi-message |
| | | // ï¼å
¬ä¼å·åæ®æ¹ç± sys_config.wx.mp.config.* ä¸åï¼ï¼æ¬ç±»éå·²æ å¼ç¨ï¼ |
| | | // ä½å®ç @Value 没æé»è®¤å¼ï¼è application-nhfy.yml / -xh.yml / -ls.yml |
| | | // 齿²¡å®ä¹ appid è¿ä¸ª keyï¼è¿äº profile å¯å¨æ¶ä¼ç´æ¥æ¥ |
| | | // `Could not resolve placeholder 'appid'`ãççæ¯å®æ¶ç¸å¼¹ï¼æ
å é¤ã |
| | | |
| | | @Value("${server.port}") |
| | | private String port; |
| | |
| | | * HISæ°æ®éé |
| | | * 宿¶ä»»å¡ï¼é鿣è
ä¿¡æ¯ãåºé¢ãé¨è¯æ°æ® |
| | | * todayZeroStr å½åçæ¶é´ ä¾å¦ï¼2026-05-06 00:00:00 |
| | | * <p> |
| | | * â ï¸ <b>2026-10 模åå</b>ï¼æ¹æ³ä½ï¼è¿åç§æå¸®æ {@code collectSegmentData}ï¼å·²æ´ä½æ¬è¿ |
| | | * {@code ruoyi-datacollection}ï¼å®ç°è§ |
| | | * {@code com.ruoyi.datacollection.service.impl.HisDataCollectionServiceImpl}ã |
| | | * è¿éåªä¿ç<b>宿¶ä»»å¡å
¥å£</b>ï¼sys_job ç invoke_target 仿¯ |
| | | * {@code ryTask.dealHisData('...')}ï¼å
¥å£åä¸è½åï¼æä»¥æ¬æ¹æ³æ¯<b>纯转å</b>ã |
| | | * <p> |
| | | * å
³éæ°æ®é鿍¡åï¼{@code sys_config: datacollection.enabled=false}ï¼æ¶é¨é¢ä¼æ |
| | | * {@link com.ruoyi.datacollection.api.DataCollectionModuleDisabledException}ï¼ |
| | | * æ¬å
¥å£æè·ååªæä¸æ¡ WARN ââ 飿¯"模å被主å¨å
³æ"ï¼ä¸æ¯ééå¤±è´¥ï¼ |
| | | * ä¸è¯¥è®©å®æ¶ä»»å¡è®°ææ§è¡å¼å¸¸ï¼å¦åè¿ç»´ä¼çå°ä¸ç红è²å¤±è´¥è®°å½ï¼ã |
| | | */ |
| | | public void dealHisData(String todayZeroStr) { |
| | | log.info("ãdealHisDataãå¼å§æ§è¡HISæ°æ®ééä»»å¡"); |
| | | // è·åæ¨å¤©0ç¹å°ä»å¤©0ç¹çæ¶é´èå´ |
| | | LocalDateTime todayZero = LocalDateTime.now().with(LocalTime.MIN); |
| | | if (StringUtils.isNotBlank(todayZeroStr)) { |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | todayZero = LocalDateTime.parse(todayZeroStr, formatter); |
| | | } |
| | | LocalDateTime yesterdayZero = todayZero.minusDays(1); |
| | | log.info("ãdealHisDataãééæ¶é´èå´ï¼{} ~ {}", yesterdayZero, todayZero); |
| | | |
| | | if (active.trim().equals("xh")) { |
| | | try { |
| | | // ééå
¥é¢æ°æ® |
| | | log.info("ãdealHisDataãæ°åå¼å§ééå
¥é¢æ°æ®"); |
| | | ixhGatherPatArchiveService.getInHospDataGather("0", yesterdayZero, todayZero); |
| | | log.info("ãdealHisDataãæ°åå
¥é¢æ°æ®éé宿"); |
| | | |
| | | // ééåºé¢æ°æ® |
| | | log.info("ãdealHisDataãæ°åå¼å§ééåºé¢æ°æ®"); |
| | | ixhGatherPatArchiveService.getInHospDataGather("1", yesterdayZero, todayZero); |
| | | log.info("ãdealHisDataãæ°ååºé¢æ°æ®éé宿"); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("ãdealHisDataãæ°åæ°æ®ééå¼å¸¸", e); |
| | | } |
| | | } else if (active.trim().equals("hn")) { |
| | | try { |
| | | // æ²³åæ°æ®éé |
| | | HnDataGatherVO hnDataGatherVO = new HnDataGatherVO(); |
| | | log.info("ãdealHisDataãæ²³åå¼å§ééæ°æ®"); |
| | | Date startTime = Date.from(yesterdayZero.atZone(ZoneId.systemDefault()).toInstant()); |
| | | Date endTime = Date.from(todayZero.atZone(ZoneId.systemDefault()).toInstant()); |
| | | |
| | | hnDataGatherVO.setStartTime(startTime); |
| | | hnDataGatherVO.setEndTime(endTime); |
| | | ihnGatherPatArchiveService.hnDataGather(hnDataGatherVO); |
| | | log.info("ãdealHisDataãæ²³åç»æééæ°æ®"); |
| | | } catch (Exception e) { |
| | | log.error("ãdealHisDataãæ²³åæ°æ®ééå¼å¸¸", e); |
| | | } |
| | | } else if (active.trim().equals("sltd") || active.trim().equals("nhfy")) { |
| | | //çç«åå¾·ä¸ååéä¸ç¨åä¸å¥ééæ¹æ³ï¼é½æ¯æ¥æªæ¥æä¾ï¼ |
| | | |
| | | try { |
| | | //è·åæ¯å¦éè¦ééç¨æ·ãé¨é¨ä¿¡æ¯ |
| | | SysConfig config = new SysConfig(); |
| | | config.setConfigKey("sltd.gather.sysuser"); |
| | | config.setOrgid("20001001"); |
| | | List<SysConfig> sysConfigs = configService.selectConfigList(config); |
| | | |
| | | //è·åçç«åå¾·è¦ééçé¢åº |
| | | SysConfig cf = new SysConfig(); |
| | | cf.setConfigKey("sltd.gather.campusid"); |
| | | cf.setOrgid("20001001"); |
| | | List<SysConfig> sysConfigcampusids = configService.selectConfigList(cf); |
| | | |
| | | List<Long> campusidList = new ArrayList<>(); |
| | | if (CollectionUtils.isNotEmpty(sysConfigcampusids)) { |
| | | String[] split = sysConfigcampusids.get(0).getConfigValue().split(","); |
| | | campusidList = Arrays.stream(split).map(Long::valueOf).collect(Collectors.toList()); |
| | | } else { |
| | | log.error("SysConfigä¸çé¢åºID为空ï¼"); |
| | | return; |
| | | } |
| | | |
| | | //configValue = 1 ä¸éè¦éé configValue = 2éè¦éé |
| | | if (CollectionUtils.isNotEmpty(sysConfigs) && sysConfigs.get(0).getConfigValue().equals("2")) { |
| | | log.info("ãdealHisDataãçç«åå¾·âé¨é¨ä¿¡æ¯âå¼å§ééæ°æ®"); |
| | | ServiceSLTDDeptReqVO serviceSLTDDeptReqVO = new ServiceSLTDDeptReqVO(); |
| | | serviceSLTDDeptReqVO.setOrgId("20001001"); |
| | | serviceSLTDDeptReqVO.setCampusIds(campusidList); |
| | | Boolean aBoolean1 = serviceSLTDHealthcareRecordService.queryDeptWardAreaInfoList(serviceSLTDDeptReqVO); |
| | | log.info("ãdealHisDataãçç«åå¾·âé¨é¨ä¿¡æ¯âç»æééæ°æ®ï¼{}", aBoolean1); |
| | | |
| | | Boolean aBoolean = false; |
| | | for (Long cid : campusidList) { |
| | | log.info("ãdealHisDataãçç«åå¾·âç¨æ·ä¿¡æ¯âå¼å§ééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | ServiceSLTDInhospReqVO reqVO = new ServiceSLTDInhospReqVO(); |
| | | reqVO.setOrgId("20001001"); |
| | | reqVO.setCampusId(cid); |
| | | ArrayList<String> statusList = new ArrayList<>(); |
| | | statusList.add("1"); |
| | | reqVO.setStatusList(statusList); |
| | | aBoolean = serviceSLTDHealthcareRecordService.queryHospUserInfoList(reqVO); |
| | | } |
| | | log.info("ãdealHisDataãçç«åå¾·âç¨æ·ä¿¡æ¯âç»æééæ°æ®ï¼{}", aBoolean); |
| | | //ç¾ç
åå
¸éé |
| | | iIcd10Service.queryAddIcd10(); |
| | | } |
| | | |
| | | // nhfy/sltdåæº¯30天忮µééå¤æï¼æ¯æ®µæå¤4å¤©ï¼ |
| | | boolean isBackfill = (active.trim().equals("nhfy") || active.trim().equals("sltd")) && StringUtils.isNotBlank(todayZeroStr); |
| | | if (isBackfill) { |
| | | DateTimeFormatter dateFmt = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
| | | LocalDate segStart = todayZero.toLocalDate().minusDays(30); |
| | | LocalDate segEndDate = todayZero.toLocalDate(); |
| | | int segCount = 0; |
| | | while (!segStart.isAfter(segEndDate)) { |
| | | LocalDate segEnd = segStart.plusDays(3); |
| | | if (segEnd.isAfter(segEndDate)) { |
| | | segEnd = segEndDate; |
| | | } |
| | | segCount++; |
| | | log.info("ãdealHisDataã{}åæº¯ç¬¬{}段ééï¼æ¥æèå´ï¼{} ~ {}", active.trim(), segCount, segStart.format(dateFmt), segEnd.format(dateFmt)); |
| | | for (Long cid : campusidList) { |
| | | collectSegmentData(cid, segStart.format(dateFmt), segEnd.format(dateFmt)); |
| | | } |
| | | segStart = segEnd.plusDays(1); |
| | | } |
| | | log.info("ãdealHisDataã{}åæº¯éé宿ï¼å
±{}段", active.trim(), segCount); |
| | | } |
| | | |
| | | // çç«åå¾·æ°æ®ééï¼éåæº¯æ¨¡å¼ææ§è¡ï¼ |
| | | if (!isBackfill) { |
| | | for (Long cid : campusidList) { |
| | | log.info("ãdealHisDataãçç«åå¾·é¢å
¥é¢å¼å§ééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | String nowTime = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); |
| | | ServiceSLTDInhospReqVO serviceSLTDInhospReqVO = new ServiceSLTDInhospReqVO(); |
| | | serviceSLTDInhospReqVO.setOrgId("20001001"); |
| | | serviceSLTDInhospReqVO.setCampusId(cid); |
| | | serviceSLTDInhospReqVO.setEncounterTimeStart(nowTime); |
| | | serviceSLTDInhospReqVO.setEncounterTimeEnd(nowTime); |
| | | if (active.trim().equals("nhfy")) { |
| | | serviceSLTDInhospReqVO.setEncounterTimeStart(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | serviceSLTDInhospReqVO.setEncounterTimeEnd(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | } |
| | | List<String> list = new ArrayList<>(); |
| | | list.add("FH0109.22"); |
| | | list.add("FH0109.23"); |
| | | list.add("FH0109.53"); |
| | | serviceSLTDInhospReqVO.setStatusList(list); |
| | | // log.info("ãdealHisDataãçç«åå¾·âé¢å
¥é¢âééæ°æ®å
¥åï¼{}", serviceSLTDInhospReqVO); |
| | | serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO); |
| | | log.info("ãdealHisDataãçç«åå¾·âé¢å
¥é¢âçµæééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | |
| | | log.info("ãdealHisDataãçç«åå¾·âå
¥é¢âå¼å§ééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | serviceSLTDInhospReqVO.setOrgId("20001001"); |
| | | serviceSLTDInhospReqVO.setCampusId(cid); |
| | | serviceSLTDInhospReqVO.setEncounterTimeStart(null); |
| | | serviceSLTDInhospReqVO.setEncounterTimeEnd(null); |
| | | serviceSLTDInhospReqVO.setStartHeadTime(nowTime); |
| | | serviceSLTDInhospReqVO.setStartTailTime(nowTime); |
| | | if (active.trim().equals("nhfy")) { |
| | | serviceSLTDInhospReqVO.setStartHeadTime(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | serviceSLTDInhospReqVO.setStartTailTime(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | } |
| | | List<String> listStr = new ArrayList<>(); |
| | | listStr.add("FH0109.24"); |
| | | serviceSLTDInhospReqVO.setStatusList(listStr); |
| | | // log.info("ãdealHisDataãçç«åå¾·âå
¥é¢âééæ°æ®å
¥åï¼{}", serviceSLTDInhospReqVO); |
| | | serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO); |
| | | log.info("ãdealHisDataãçç«åå¾·âå
¥é¢âçµæééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | |
| | | log.info("ãdealHisDataãçç«åå¾·âåºé¢âå¼å§ééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | serviceSLTDInhospReqVO.setStartHeadTime(null); |
| | | serviceSLTDInhospReqVO.setStartTailTime(null); |
| | | serviceSLTDInhospReqVO.setEncounterTimeStart(null); |
| | | serviceSLTDInhospReqVO.setEncounterTimeEnd(null); |
| | | serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(nowTime); |
| | | serviceSLTDInhospReqVO.setPreOutHospitalTailDate(nowTime); |
| | | if (active.trim().equals("nhfy")) { |
| | | serviceSLTDInhospReqVO.setPreOutHospitalHeadDate(yesterdayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | serviceSLTDInhospReqVO.setPreOutHospitalTailDate(todayZero.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | } |
| | | serviceSLTDInhospReqVO.setHealthcareRecordTypeList(null); |
| | | List<String> list2 = new ArrayList<>(); |
| | | // list2.add("FH0108.02"); |
| | | //åºé¢ |
| | | list2.add("FH0109.27"); |
| | | //é¢åºé¢ |
| | | list2.add("FH0109.25"); |
| | | serviceSLTDInhospReqVO.setStatusList(list2); |
| | | // log.info("ãdealHisDataãçç«åå¾·âåºé¢âééæ°æ®å
¥åï¼{}", serviceSLTDInhospReqVO); |
| | | serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO); |
| | | log.info("ãdealHisDataãçç«åå¾·âåºé¢âæééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("ãdealHisDataãçç«åå¾·æ°æ®ééå¼å¸¸", e); |
| | | } |
| | | dataCollectionFacade.dealHisData(todayZeroStr); |
| | | } catch (com.ruoyi.datacollection.api.DataCollectionModuleDisabledException e) { |
| | | log.warn("ãdealHisDataã{}ï¼æ¬è½®å®æ¶ééè·³è¿ï¼", e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åæ®µééæ°æ®ï¼é¢å
¥é¢ãå
¥é¢ãåºé¢ï¼ |
| | | * ç¨äºnhfy/sltdåæº¯ééï¼æ¯æ¬¡æå¤æ¥è¯¢7å¤©æ°æ® |
| | | * å¨é¢æ£è
"ç§å®¤ / ç
åº / åºä½"å·æ°ï¼ååéä¸ï¼æ¯å¤©ä¸æ¬¡ï¼ã |
| | | * <p> |
| | | * å¨é¢æ£è
ä¼è½¬ç§ã转ç
åºãæ¢åºï¼è {@code pat_med_inhosp} çä½ç½®å段åªå¨å
¥é¢æ¶åè¿ä¸æ¬¡ï¼ |
| | | * ä¹åä¸ä¼èªå·±æ´æ° ââ è¿éæ¯å¤©ææ£è
æ¥ä¸é HIS é<b>该æ£è
å½åçå¨é¢ä¿¡æ¯</b> |
| | | * ï¼{@code dtcQueryHealthcareRecordList}ï¼ä¸å
¥é¢é鿝åä¸ä¸ªæ¥å£ï¼æ |
| | | * {@code healthcareRecordNo} 忥 + {@code statusList=["FH0109.24"]}ï¼ï¼ |
| | | * ä¸åºå
æ¯å¯¹ååªæååçåæ®µååå»ãå®ç°ä¸å¤å®å£å¾è§ |
| | | * {@code com.ruoyi.datacollection.service.impl.InhospDeptRefreshServiceImpl}ã |
| | | * <p> |
| | | * ä¸ {@link #dealHisData(String)} åæ ·çé级å£å¾ï¼æ¨¡å被å
³æï¼ |
| | | * {@code sys_config: datacollection.enabled=false}ï¼æ¶é¨é¢æ |
| | | * {@link com.ruoyi.datacollection.api.DataCollectionModuleDisabledException}ï¼ |
| | | * è¿éåªæä¸æ¡ WARN ââ 飿¯"模å被主å¨å
³æ"ï¼ä¸è¯¥è®°æå®æ¶ä»»å¡æ§è¡å¼å¸¸ã |
| | | * <p> |
| | | * sys_job ç invoke_target 为 {@code ryTask.refreshInhospDeptInfo()}ï¼ |
| | | * 建议æ¯å¤© 03:30ï¼é¿å¼ 01:00 å
¥é¢ééä¸ 02:00 åºé¢å¤çï¼ï¼å¹¶åçç¥é"ç¦æ¢å¹¶å"ã |
| | | * |
| | | * @param cid é¢åºID |
| | | * @param startDateStr æ¥æå¼å§ yyyy-MM-dd |
| | | * @param endDateStr æ¥æç»æ yyyy-MM-dd |
| | | * @return æ¬æ¬¡å®é
æ´æ°çå¨é¢è®°å½æ¡æ°ï¼0 = æ åå / ç«ç¹ä¸å¹é
/ 模å被å
³éï¼ |
| | | */ |
| | | private void collectSegmentData(Long cid, String startDateStr, String endDateStr) { |
| | | // // é¢å
¥é¢ |
| | | log.info("ãdealHisDataãé¢å
¥é¢å¼å§ééæ°æ®ï¼é¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr); |
| | | ServiceSLTDInhospReqVO reqVO = new ServiceSLTDInhospReqVO(); |
| | | reqVO.setOrgId("20001001"); |
| | | reqVO.setCampusId(cid); |
| | | reqVO.setEncounterTimeStart(startDateStr); |
| | | reqVO.setEncounterTimeEnd(endDateStr); |
| | | List<String> preAdmitStatus = new ArrayList<>(); |
| | | preAdmitStatus.add("FH0109.22"); |
| | | preAdmitStatus.add("FH0109.23"); |
| | | preAdmitStatus.add("FH0109.53"); |
| | | reqVO.setStatusList(preAdmitStatus); |
| | | log.info("ãdealHisDataãé¢å
¥é¢ééæ°æ®å
¥åï¼{}", reqVO); |
| | | public int refreshInhospDeptInfo() { |
| | | try { |
| | | serviceSLTDHealthcareRecordService.queryHealthcareRecordList(reqVO); |
| | | } catch (Exception e) { |
| | | // åç±»æ°æ®å¤±è´¥ä¸åå䏿ï¼å¦å䏿®µå¤±è´¥ä¼è®©æ¬æ¬¡å溯åé¢çæææ®µé½ä¸æ§è¡ |
| | | log.error("ãdealHisDataãé¢å
¥é¢éé失败ï¼è·³è¿è¯¥ç±»ç»§ç»ãé¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr, e); |
| | | return dataCollectionFacade.refreshInhospDeptInfo(); |
| | | } catch (com.ruoyi.datacollection.api.DataCollectionModuleDisabledException e) { |
| | | log.warn("ãrefreshInhospDeptInfoã{}ï¼æ¬è½®å¨é¢ä¿¡æ¯å·æ°è·³è¿ï¼", e.getMessage()); |
| | | return 0; |
| | | } |
| | | log.info("ãdealHisDataãé¢å
¥é¢çµäºééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | |
| | | // å
¥é¢ |
| | | log.info("ãdealHisDataãå
¥é¢å¼å§ééæ°æ®ï¼é¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr); |
| | | reqVO = new ServiceSLTDInhospReqVO(); |
| | | reqVO.setOrgId("20001001"); |
| | | reqVO.setCampusId(cid); |
| | | reqVO.setStartHeadTime(startDateStr); |
| | | reqVO.setStartTailTime(endDateStr); |
| | | List<String> admitStatus = new ArrayList<>(); |
| | | admitStatus.add("FH0109.24"); |
| | | reqVO.setStatusList(admitStatus); |
| | | log.info("ãdealHisDataãå
¥é¢ééæ°æ®å
¥åï¼{}", reqVO); |
| | | try { |
| | | serviceSLTDHealthcareRecordService.queryHealthcareRecordList(reqVO); |
| | | } catch (Exception e) { |
| | | // åç±»æ°æ®å¤±è´¥ä¸åå䏿ï¼å¦å䏿®µå¤±è´¥ä¼è®©æ¬æ¬¡å溯åé¢çæææ®µé½ä¸æ§è¡ |
| | | log.error("ãdealHisDataãå
¥é¢éé失败ï¼è·³è¿è¯¥ç±»ç»§ç»ãé¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr, e); |
| | | } |
| | | log.info("ãdealHisDataãå
¥é¢çµäºééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | |
| | | // åºé¢ |
| | | log.info("ãdealHisDataãåºé¢å¼å§ééæ°æ®ï¼é¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr); |
| | | reqVO = new ServiceSLTDInhospReqVO(); |
| | | reqVO.setOrgId("20001001"); |
| | | reqVO.setCampusId(cid); |
| | | reqVO.setPreOutHospitalHeadDate(startDateStr); |
| | | reqVO.setPreOutHospitalTailDate(endDateStr); |
| | | List<String> dischargeStatus = new ArrayList<>(); |
| | | //åºé¢ |
| | | dischargeStatus.add("FH0109.27"); |
| | | //é¢åºé¢ |
| | | dischargeStatus.add("FH0109.25"); |
| | | reqVO.setStatusList(dischargeStatus); |
| | | log.info("ãdealHisDataãåºé¢ééæ°æ®å
¥åï¼{}", reqVO); |
| | | try { |
| | | serviceSLTDHealthcareRecordService.queryHealthcareRecordList(reqVO); |
| | | } catch (Exception e) { |
| | | // åç±»æ°æ®å¤±è´¥ä¸åå䏿ï¼å¦å䏿®µå¤±è´¥ä¼è®©æ¬æ¬¡å溯åé¢çæææ®µé½ä¸æ§è¡ |
| | | log.error("ãdealHisDataãåºé¢éé失败ï¼è·³è¿è¯¥ç±»ç»§ç»ãé¢åºï¼{}ï¼æ¶é´æ®µï¼{} ~ {}", cid, startDateStr, endDateStr, e); |
| | | } |
| | | log.info("ãdealHisDataãåºé¢ç»æééæ°æ®ï¼é¢åºï¼{}", cid); |
| | | } |
| | | |
| | | /** |
| | |
| | | return !CollectionUtils.isEmpty(list); |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦åå¨ãå䏿£è
+ å䏿¬¡åºé¢è®°å½ + åä¸ä»»å¡ãçåä»»å¡ï¼{@code del_flag = 0}ï¼ã |
| | | * <p> |
| | | * ç´æ¥ç¨ç°æç {@code selectServiceSubtaskList}ï¼æ¬èº«å°±å¸¦ |
| | | * {@code del_flag = 0} + {@code patid} + {@code inhospid} + {@code taskid} ä¸ä¸ªæ¡ä»¶ï¼ï¼ |
| | | * 䏿°å¢ XML ââ é¿å
为äºä¸ä¸ª"ææ²¡æ"åå䏿¡çä»· SQLã |
| | | * <p> |
| | | * â ï¸ ä¸æ {@code sendstate} è¿æ»¤ï¼å·²åç¨ï¼sendstate=4ï¼çåå²è¡ä¹ç®"çæè¿"ã |
| | | * å¦å"忧䏿¡ + åçæä¸æ¡"伿 é累积 ââ è¿æ£æ¯ 2026-10 å䏿£è
å åæ¡åä»»å¡çæå ã |
| | | */ |
| | | @Override |
| | | public boolean existsSubtask(Long patid, Long inhospid, Long taskid) { |
| | | if (patid == null || taskid == null) { |
| | | return false; |
| | | } |
| | | ServiceSubtaskEntity q = new ServiceSubtaskEntity(); |
| | | q.setPatid(patid); |
| | | q.setInhospid(inhospid); |
| | | q.setTaskid(taskid); |
| | | return !CollectionUtils.isEmpty(serviceSubtaskMapper.selectServiceSubtaskList(q)); |
| | | } |
| | | |
| | | // ========================================================================== |
| | | // åæ®µæ¬è¿ï¼éåæ®µå¯¹ç
§ï¼å¿"顺æç²¾ç®"ï¼ |
| | | // ========================================================================== |
| | |
| | | VisitLongTaskDto dto = new VisitLongTaskDto(); |
| | | dto.setTaskid(t.getTaskid()); |
| | | dto.setTaskName(t.getTaskName()); |
| | | dto.setTaskDesc(t.getTaskDesc()); |
| | | dto.setType(t.getType()); |
| | | dto.setServiceType(t.getServiceType()); |
| | | dto.setTemplateid(t.getTemplateid()); |
| | | dto.setTemplatename(t.getTemplatename()); |
| | | dto.setLibtemplateid(t.getLibtemplateid()); |
| | | dto.setLibtemplatename(t.getLibtemplatename()); |
| | | dto.setSendDay(t.getSendDay()); |
| | | dto.setPreachform(t.getPreachform()); |
| | | dto.setPreachformDesc(t.getPreachformDesc()); |
| | | dto.setOrgid(t.getOrgid()); |
| | | dto.setCampusid(t.getCampusid()); |
| | | dto.setHosType(t.getHospType()); |
| | | // å boxedServiceSubtask 第ä¸è¡ç DtoConversionUtils.sourceToTarget ä¼æè¿ 6 个 |
| | | // æ·è¿åä»»å¡å¹¶é insertServiceSubtask è½åºï¼ä¸æ¬å°±æ¯éé»ä¸¢åï¼è§ VisitLongTaskDto 注éï¼ |
| | | dto.setGuid(t.getGuid()); |
| | | dto.setPid(t.getPid()); |
| | | dto.setSendType(t.getSendType()); |
| | | dto.setIsupload(t.getIsupload()); |
| | | dto.setTextParam(t.getTextParam()); |
| | | dto.setUploadTime(t.getUploadTime()); |
| | | dto.setUpdateBy(t.getUpdateBy()); |
| | | dto.setCreateBy(t.getCreateBy()); |
| | | return dto; |
| | |
| | | e.setSex(d.getSex()); |
| | | e.setAge(d.getAge()); |
| | | e.setInhospid(d.getInhospid()); |
| | | e.setHospno(d.getHospno()); |
| | | e.setNurseId(d.getNurseId()); |
| | | e.setNurseName(d.getNurseName()); |
| | | e.setDrcode(d.getDrcode()); |
| | |
| | | e.setTemplateid(d.getTemplateid()); |
| | | e.setTemplatename(d.getTemplatename()); |
| | | e.setLibtemplateid(d.getLibtemplateid()); |
| | | e.setLibtemplatename(d.getLibtemplatename()); |
| | | e.setStarttime(d.getStarttime()); |
| | | e.setEndtime(d.getEndtime()); |
| | | e.setLongSendTime(d.getLongSendTime()); |
| | |
| | | e.setOperationItemId(d.getOperationItemId()); |
| | | e.setCreateBy(d.getCreateBy()); |
| | | e.setUpdateBy(d.getUpdateBy()); |
| | | // â ï¸ create_time / update_time ä¹å乿¯æ¼çï¼ |
| | | // ç»è£
å¨ï¼boxedServiceSubtask å L1157-1177ï¼ãwriteInSubTask çæ¯ä¸ª insert 忝 |
| | | // é½å¨ setCreateTime/setUpdateTimeï¼XML ä¹æå¯¹åºæ¡ä»¶åï¼ä½è¿é没æ å° â |
| | | // ä¸¤æ¡æ¶é´åéé»è½ NULLï¼2026-10 宿ºåç°ï¼ã |
| | | e.setCreateTime(d.getCreateTime()); |
| | | e.setUpdateTime(d.getUpdateTime()); |
| | | // ------------------------------------------------------------------ |
| | | // 任塿¥æºå段ï¼å boxedServiceSubtask 第ä¸è¡ DtoConversionUtils æ´æ¹æ·å
¥ï¼ |
| | | // |
| | | // â ï¸ è¿ 8 个æ¯"ä»»å¡ â åä»»å¡"çå¿«ç
§åãåå
åªæ¬äº taskid/serviceType çï¼ |
| | | // taskName/taskDesc/type/libtemplatename 以å guid/pid/sendType/isupload/ |
| | | // textParam/uploadTime å
¨é¨æ¼æ å° â XML ç <if test="xxx != null"> ç´æ¥è·³è¿, |
| | | // service_subtask ä¸è¿äºåéé»ä¸º NULLï¼2026-10 ç± addSubTaskByRule 宿ºåç°ï¼ã |
| | | // ------------------------------------------------------------------ |
| | | e.setTaskName(d.getTaskName()); |
| | | e.setTaskDesc(d.getTaskDesc()); |
| | | e.setType(d.getType()); |
| | | e.setGuid(d.getGuid()); |
| | | e.setPid(d.getPid()); |
| | | e.setSendType(d.getSendType()); |
| | | e.setIsupload(d.getIsupload()); |
| | | e.setTextParam(d.getTextParam()); |
| | | e.setUploadTime(d.getUploadTime()); |
| | | |
| | | // ------------------------------------------------------------------ |
| | | // 鍿¥è¯é访ä¸ç¨å段ï¼OuthospSubtaskDraftï¼ã |
| | |
| | | if (d instanceof com.ruoyi.common.core.service.dto.OuthospSubtaskDraft) { |
| | | com.ruoyi.common.core.service.dto.OuthospSubtaskDraft o = |
| | | (com.ruoyi.common.core.service.dto.OuthospSubtaskDraft) d; |
| | | // hospno 已䏿å°ç¶ç±» VisitSubtaskDraftï¼ä¸é¢ç»ä¸æ å°è¿äºï¼ï¼è¿éä¸åéå¤ |
| | | // åªæç¶ç±»æ²¡æçåæ®µæå¨è¿éè¡¥æ å°ï¼å
¶ä½å¦ sendname/sfzh/phone/sex/age ç¶ç±»å·²æï¼ |
| | | e.setHospno(o.getHospno()); |
| | | e.setAdmindate(o.getAdmitdate()); |
| | | e.setFinishtime(o.getFinishtime()); |
| | | // â ï¸ åå®ç°ç¡¬ç¼ç "1"ï¼ä¸è¯» serviceTask.getHospType()ï¼ï¼æ¤å¤ä¿æä¸è´ |
| | |
| | | private String diagname; |
| | | |
| | | /** |
| | | * ICD/ç¾ç
åç§°ï¼{@code pat_task_relevance.icd_name} åï¼ |
| | | * <p> |
| | | * â ï¸ ä¸è½çï¼smartor ç {@code PatHetaskRelevanceMapper.xml} |
| | | * ï¼namespace æ¯ {@code com.smartor.mapper.PatTaskRelevanceMapper}ï¼è¢« |
| | | * {@code IPatTaskRelevanceService} 使ç¨ï¼é resultMap æ¯ |
| | | * {@code property="icdName" column="icd_name"}ï¼select/insert/update ä¹é½ç¨ |
| | | * {@code icdName}ãæ¬å®ä½æ¯ã任塿¨¡ååãæ¶ä» smartor æ¬è¿æ¥çï¼ |
| | | * æ¬çæ¶åå°äºè¿ä¸ªå段 ââ äºæ¯é£æ¡ mapper ç**æ¯ä¸æ¬¡è°ç¨**é½ä¼æ |
| | | * {@code ReflectionException: no getter for 'icdName'}ã |
| | | */ |
| | | @Excel(name = "ICDåç§°") |
| | | @ApiModelProperty(value = "ICD/ç¾ç
åç§°ï¼icd_name åï¼") |
| | | private String icdName; |
| | | |
| | | /** |
| | | * æ¯å¦å卿ä½ï¼1 æ°å¢ 2ä¿®æ¹ 3å é¤ |
| | | */ |
| | | @ApiModelProperty(value = "æ¯å¦å卿ä½ï¼1 æ°å¢ 2ä¿®æ¹ 3å é¤") |
| | |
| | | <if test="deptname != null and deptname != ''">deptname,</if> |
| | | <if test="leaveicd10code != null and leaveicd10code != ''">leaveicd10code,</if> |
| | | <if test="leavediagname != null and leavediagname != ''">leavediagname,</if> |
| | | <!-- diagnameï¼å
¥é¢è¯æåç§°ãå insert æ¼äºè¿ä¸åï¼èåºé¢é¾è·¯ç |
| | | boxedServiceSubtask ä¸ç´å¨ setDiagname(patMedInhosp.diagname)ï¼ |
| | | äºæ¯ service_subtask.diagname æ°¸è¿ä¸º NULLï¼select ä¾§å´ä¸ç´å¨è¯»å®ï¼ã --> |
| | | <if test="diagname != null and diagname != ''">diagname,</if> |
| | | <if test="libtemplateid != null ">libtemplateid,</if> |
| | | <if test="libtemplatename != null ">libtemplatename,</if> |
| | | <if test="patid != null ">patid,</if> |
| | |
| | | <if test="deptname != null and deptname != ''">#{deptname},</if> |
| | | <if test="leaveicd10code != null and leaveicd10code != ''">#{leaveicd10code},</if> |
| | | <if test="leavediagname != null and leavediagname != ''">#{leavediagname},</if> |
| | | <if test="diagname != null and diagname != ''">#{diagname},</if> |
| | | <if test="libtemplateid != null ">#{libtemplateid},</if> |
| | | <if test="libtemplatename != null ">#{libtemplatename},</if> |
| | | <if test="patid != null ">#{patid},</if> |
| | |
| | | private Long ID; |
| | | |
| | | /** |
| | | * æ¹é主é®éåï¼åªä½æ¥è¯¢æ¡ä»¶ï¼ä¸æ¯è¡¨åï¼ |
| | | * <p> |
| | | * {@code IvrLibaExtemplatescriptMapper.xml#queryIvrLibaExtemplatescriptList} ç¨ |
| | | * {@code <if test="IDs != null">} + {@code <foreach collection="IDs">} æ¼ |
| | | * {@code extID in (...)}ï¼å®ä½ä¸åæ¬åªæå个 {@code ID}ï¼æä»¥é£æ¡è¯å¥ä¸æ§è¡å°±æ |
| | | * {@code ReflectionException: no getter for 'IDs'}ãæ¤å¤è¡¥ä¸éååæ®µï¼ååä¸åå½±åï¼ã |
| | | */ |
| | | @ApiModelProperty("æ¹é主é®éåï¼æ¥è¯¢æ¡ä»¶ï¼") |
| | | private List<Long> IDs; |
| | | |
| | | /** |
| | | * 模çåºid |
| | | */ |
| | | @Excel(name = "模çåºid") |
| | |
| | | private String orgid; |
| | | |
| | | /** |
| | | * é¢åºID |
| | | * <p> |
| | | * â ï¸ å¿
é¡»åå¨ï¼{@code ServiceSubtaskMapper.xml} ç {@code getHeLibraryCount} / |
| | | * {@code gethelibraryCountHyperlink} éæ {@code <if test="campusid != null">}ï¼ |
| | | * MyBatis ç¨ OGNL æ±å¼è¯¥è¡¨è¾¾å¼ï¼ç¼º getter ä¼ç´æ¥æ |
| | | * {@code ReflectionException: no getter for 'campusid'}ï¼ä¸æ¯"æ¡ä»¶ä¸æç«"ï¼ã |
| | | */ |
| | | @ApiModelProperty(value = "é¢åºID") |
| | | private String campusid; |
| | | |
| | | /** |
| | | * åéç¶æ |
| | | */ |
| | | @Excel(name = " åéç¶æ ") |
| | |
| | | <if test="targetdesc != null and targetdesc != ''">and a.targetdesc = #{targetdesc}</if> |
| | | <if test="language != null and language != ''">and a.language = #{language}</if> |
| | | <if test="version != null ">and a.version = #{version}</if> |
| | | <if test="valueType != null ">and a.valueType = #{value_type}</if> |
| | | <!-- å为 `and a.valueType = #{value_type}`ï¼ååä¸å±æ§åååäºï¼åæ¯ value_typeã |
| | | 屿§æ¯ valueTypeï¼ãMyBatis æ±å¼ä¼æ |
| | | ReflectionException: no getter for 'value_type'ï¼ä¸ a.valueType ä¹ä¸æ¯åæ³åã --> |
| | | <if test="valueType != null ">and a.value_type = #{valueType}</if> |
| | | <if test="isabnormal != null ">and a.isabnormal = #{isabnormal}</if> |
| | | <if test="warnup != null ">and a.warnup = #{warnup}</if> |
| | | <if test="warndown != null ">and a.warndown = #{warndown}</if> |
| | |
| | | <if test="revisitBefore != null and revisitBefore != ''">and revisit_before = #{revisitBefore}</if> |
| | | <if test="revisitAfter != null and revisitAfter != ''">and revisit_after = #{revisitAfter}</if> |
| | | <if test="noVoiceNum != null ">and no_voice_num = #{noVoiceNum}</if> |
| | | <if test="recallcount != null">and recallcount = #{prologrecallcountue}</if> |
| | | <!-- å为 `#{prologrecallcountue}`ï¼å®ä½ä¸æ²¡æè¿ä¸ªå±æ§ï¼æ¯æ `prolog` ç²å°äº |
| | | `recallcount` åé¢ï¼ï¼test å¤çæ¯ recallcount å´åä¸å°å¼ï¼ |
| | | è¿è¡ææ ReflectionExceptionã屿§æ test ç recallcount åã --> |
| | | <if test="recallcount != null">and recallcount = #{recallcount}</if> |
| | | <if test="deptCode != null">and dept_code = #{deptCode}</if> |
| | | <if test="longTemp != null">and long_temp = #{longTemp}</if> |
| | | </select> |
| | |
| | | <if test="language != null and language!=''">language,</if> |
| | | <if test="otherdata != null and otherdata!=''">otherdata,</if> |
| | | <if test="valueType != null and valueType!=''">value_type,</if> |
| | | <if test="reply != null and reply!=''">otherdata,</if> |
| | | <!-- å为 `otherdata,`ï¼ä¸ä¸é¢é£æ¡éå¤ååä¸ä¸ªåï¼reply çå
容ä¼çæ otherdataï¼ï¼ |
| | | 表é reply æ¯ç¬ç«åï¼è§æ¬æä»¶ resultMap: property="reply" column="reply"ï¼ã --> |
| | | <if test="reply != null and reply!=''">reply,</if> |
| | | <if test="scoretype != null and scoretype!=''">scoretype,</if> |
| | | <if test="score != null ">score,</if> |
| | | <if test="icd10Name != null and icd10Name!=''">icd10_name,</if> |
| | |
| | | <if test="language != null and language!=''">#{language},</if> |
| | | <if test="otherdata != null and otherdata!=''">#{otherdata},</if> |
| | | <if test="valueType != null and valueType!=''">#{valueType},</if> |
| | | <if test="reply != null and reply!=''">#{therdata},</if> |
| | | <!-- å为 `#{therdata}`ï¼å®ä½ä¸æ²¡æ therdataï¼æ¯ otherdata çéæ¼ï¼ï¼ |
| | | è¿è¡ææ ReflectionExceptionãåä¸å±æ§é½æ reply åã --> |
| | | <if test="reply != null and reply!=''">#{reply},</if> |
| | | <if test="scoretype != null and scoretype!=''">#{scoretype},</if> |
| | | <if test="score != null ">#{score},</if> |
| | | <if test="icd10Name != null and icd10Name!=''">#{icd10Name},</if> |
| | |
| | | <if test="language != null and language!=''">language = #{language},</if> |
| | | <if test="otherdata != null and otherdata!=''">otherdata = #{otherdata},</if> |
| | | <if test="valueType != null and valueType!=''">value_type = #{valueType},</if> |
| | | <if test="reply != null and reply!=''">therdata =#{therdata},</if> |
| | | <!-- å为 `therdata =#{therdata}`ï¼åä¸å otherdata 已被ä¸é¢èµè¿å¼ï¼ |
| | | MySQL 伿¥ "Column 'otherdata' specified twice"ï¼ä¸å±æ§ therdata ä¸åå¨ã |
| | | æ reply å + reply 屿§ä¿®æ£ã --> |
| | | <if test="reply != null and reply!=''">reply = #{reply},</if> |
| | | <if test="scoretype != null and scoretype!=''">scoretype = #{scoretype},</if> |
| | | <if test="score != null">score = #{score},</if> |
| | | <if test="icd10Name != null and icd10Name!=''">icd10_name = #{icd10Name},</if> |
| | |
| | | <if test="scoretype != null and scoretype != ''"> and scoretype = #{scoretype}</if> |
| | | <if test="score != null and score != ''"> and score = #{score}</if> |
| | | <if test="showtype != null and showtype != ''"> and showtype = #{showtype}</if> |
| | | <if test="picturePath != null and picturePath != ''"> and picture_path = #{picturePath}</if> |
| | | <!-- å为 `and picture_path = #{picturePath}`ï¼svy_task_script 没æ picture_path å |
| | | ï¼æ¬æä»¶ resultMap / select 忏
åéåªæ script_pictureï¼ï¼å®ä½ä¹æ²¡æ |
| | | picturePath 屿§ ââ 两å¤é½ä¸åå¨ï¼è¿æ¡æ¡ä»¶ä»æ¥ä¸å¯è½çæã |
| | | æ"åªè®¤çå®å"å æï¼å¾çç±ä¸é¢ç scriptPicture / script_picture è´è´£ã --> |
| | | </select> |
| | | |
| | | <select id="selectSvyTaskScriptById" parameterType="Long" resultMap="SvyTaskScriptResult"> |
| | |
| | | <if test="scoretype != null">scoretype = #{scoretype},</if> |
| | | <if test="score != null">score = #{score},</if> |
| | | <if test="showtype != null">showtype = #{showtype},</if> |
| | | <if test="picturePath != null">picture_path = #{picturePath},</if> |
| | | <!-- åä¸ï¼picture_path åä¸ picturePath 屿§é½ä¸åå¨ï¼å æè¿æ¡ï¼å¦å䏿¦æäºº |
| | | ç»å®ä½è¡¥ä¸ picturePathï¼SQL å°±ä¼å Unknown column 'picture_path' æ¥éï¼ã --> |
| | | <if test="scriptPicture != null">script_picture = #{scriptPicture},</if> |
| | | </trim> |
| | | where id = #{id} |
| | |
| | | <if test="circulationDeptPersonName != null and circulationDeptPersonName != ''">circulation_dept_person_name = #{circulationDeptPersonName},</if> |
| | | <if test="circulationDeptPersonCode != null and circulationDeptPersonCode != ''">circulation_dept_person_code = #{circulationDeptPersonCode},</if> |
| | | </trim> |
| | | where id = #{d} |
| | | <!-- å为 `where id = #{d}`ï¼å±æ§ d ä¸åå¨ï¼æ´æ°è¯å¥ä¸æ§è¡å°±æ |
| | | ReflectionExceptionï¼no getter for 'd'ï¼ã主é®å±æ§æ¯ idã --> |
| | | where id = #{id} |
| | | </update> |
| | | |
| | | <delete id="deleteSvyTaskTemplateScriptByID" parameterType="Long"> |
| | |
| | | @Excel(name = "夿³¨") |
| | | private Long userInfoId; |
| | | |
| | | /** |
| | | * å¯ä¸æ è¯ |
| | | * <p> |
| | | * â ï¸ å¿
é¡»åå¨ï¼{@code ServiceThirdDataMapper.xml} ç resultMap å·²æ å° |
| | | * {@code property="guid" column="guid"}ï¼ä¸æ¡ insert ä¹é½æ |
| | | * {@code <if test="guid != null">}ãå®ä½ç¼ºè¿ä¸ªå段æ¶ï¼ |
| | | * æ¥è¯¢ä¼å¨ç»ææ å°é¶æ®µãæå
¥ä¼å¨ OGNL æ±å¼é¶æ®µç´æ¥æ ReflectionExceptionã |
| | | */ |
| | | @ApiModelProperty("å¯ä¸æ è¯") |
| | | private String guid; |
| | | |
| | | /** |
| | | * æºæID |
| | | * <p> |
| | | * â ï¸ åä¸ï¼resultMap æ å° {@code property="orgid" column="orgid"}ï¼ |
| | | * {@code selectServiceThirdDataList} ä¸ä¸æ¡ insert é½å¼ç¨å®ã |
| | | */ |
| | | @ApiModelProperty("æºæID") |
| | | private String orgid; |
| | | |
| | | } |
| | | |
| | |
| | | package com.smartor.service; |
| | | |
| | | import afu.org.checkerframework.checker.oigj.qual.O; |
| | | import com.ruoyi.common.core.service.dto.InhospPositionRecord; |
| | | import com.smartor.domain.MedicationItem; |
| | | import com.smartor.domain.ServiceSLTDDeptReqVO; |
| | | import com.smartor.domain.ServiceSLTDInhospReqVO; |
| | |
| | | */ |
| | | Boolean queryDeptWardAreaInfoList(ServiceSLTDDeptReqVO serviceSLTDDeptReqVO); |
| | | |
| | | /** |
| | | * æ¥è¯¢å个å¨é¢æ£è
ç<b>å½å</b>ç§å®¤ / ç
åº / åºä½ |
| | | * ï¼ä¸å
¥é¢ééåä¸ä¸ªæ¥å£ {@code dtcQueryHealthcareRecordList}ï¼ç¨ {@code healthcareRecordNo} 忥ï¼ã |
| | | * <p> |
| | | * â ï¸ <b>åªåæ°ï¼ä¸è½åº</b>ï¼ç±è°ç¨æ¹ï¼æ°æ®é鿍¡åç"å¨é¢ä¿¡æ¯å·æ°"ï¼èªå·±ä¸ |
| | | * {@code pat_med_inhosp} æ¯å¯¹ãåæ°å¤±è´¥ï¼æ ååº / é 200ï¼<b>æ RuntimeException</b>ï¼ |
| | | * ä¸ç¨ç©ºå表åå
"该æ£è
å·²ä¸å¨é¢"ã |
| | | * <p> |
| | | * å
¥å约å®ï¼{@code orgId} + {@code campusId} + {@code statusList=["FH0109.24"]} + |
| | | * {@code healthcareRecordNo}ã{@code statusList} ç± HIS ä¾§è¿æ»¤æå·²åºé¢/é¢åºé¢çè®°å½ï¼ |
| | | * å æ¤<b>è¿å空å表å³è¡¨ç¤º"å½åä¸å¨å
¥é¢ç¶æ"</b>ã |
| | | * |
| | | * @param reqVO è§ä¸ |
| | | * @return å½åä½ç½®è®°å½ï¼ç©ºå表 = 该æ£è
å½åä¸å¨"å
¥é¢"ç¶æ |
| | | */ |
| | | List<InhospPositionRecord> queryInhospPosition(ServiceSLTDInhospReqVO reqVO); |
| | | |
| | | |
| | | } |
| | |
| | | import com.ruoyi.common.core.domain.entity.SysUserRole; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.core.service.dto.InhospPositionRecord; |
| | | import com.smartor.common.enums.EmergencyLevelEnum; |
| | | import com.smartor.common.enums.ImportFlagEnum; |
| | | import com.ruoyi.common.utils.http.HttpUtils; |
| | |
| | | public class ServiceSLTDHealthcareRecordServiceImpl implements IServiceSLTDHealthcareRecordService { |
| | | |
| | | private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; |
| | | |
| | | /** |
| | | * å¨é¢æ£è
å½åä½ç½®æ¥è¯¢å°åï¼ç½å
³æ ¹è·¯å¾ {@code sltd_pub_path} + åºå®åç¼ï¼ã |
| | | * <p> |
| | | * ä¸"å
¥é¢éé"æ¯<b>åä¸ä¸ªæ¥å£</b>ï¼{@code queryHealthcareRecordList} ç¨ç乿¯å®ï¼ï¼ |
| | | * åºå«åªæ¯æ¬æ¹æ³æ {@code healthcareRecordNo} 忥ãåªåä½ç½®å段ãä¸è½åºã |
| | | */ |
| | | private static final String INHOSP_POSITION_PATH = |
| | | "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList"; |
| | | |
| | | /** |
| | | * å½åä½ç½®æ¥è¯¢çè¿æ¥/读è¶
æ¶ï¼ä¸è½®è¦ææ£è
è°ç¨å 忬¡ï¼ |
| | | * ä¸è½è®©ä¸æ¬¡æ ååºæééçº¿ç¨æ éææä½ï¼{@code HttpUtils} èæ¹æ³æ²¡æè¶
æ¶ï¼ |
| | | */ |
| | | private static final int INHOSP_POSITION_CONNECT_TIMEOUT_MS = 5000; |
| | | |
| | | private static final int INHOSP_POSITION_READ_TIMEOUT_MS = 15000; |
| | | |
| | | @Autowired |
| | | private IPatArchiveService patArchiveService; |
| | |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public List<InhospPositionRecord> queryInhospPosition(ServiceSLTDInhospReqVO reqVO) { |
| | | // ä¸"å
¥é¢éé"å
±ç¨åä¸å¥å
¥åæé ï¼orgId + campusIds + statusList + healthcareRecordNo |
| | | Map<String, Object> requestParams = buildRequestParams(reqVO); |
| | | Map<String, String> headers = buildRequestHeaders(); |
| | | String url = sltdPubPath + INHOSP_POSITION_PATH; |
| | | String result = HttpUtils.sendPostByHeader(url, new Gson().toJson(requestParams), headers, |
| | | INHOSP_POSITION_CONNECT_TIMEOUT_MS, INHOSP_POSITION_READ_TIMEOUT_MS); |
| | | if (StringUtils.isEmpty(result)) { |
| | | // sendPostByHeader æå¼å¸¸åæåè¿å空串ï¼è¿éç»ä¸è½å½æ"该æ£è
å·²ä¸å¨é¢"ï¼ |
| | | // å¦åæ¥å£æ´ä½ä¸å¯ç¨æ¶ä¼è¢«è®°æ"å å个æ£è
é½åºé¢äº"ï¼ä¸çç¸åã |
| | | throw new RuntimeException("æ¥è¯¢å¨é¢æ£è
å½åä½ç½®æ¥å£æ ååºï¼healthcareRecordNo=" + reqVO.getHealthcareRecordNo()); |
| | | } |
| | | // getDataList å¨è¿åç é 200 æ¶æ RuntimeExceptionï¼data 为 []ï¼è¯¥æ£è
å·²ä¸å¨å
¥é¢ç¶æï¼æ¶è¿å空å表 |
| | | List<Map<String, Object>> dataList = getDataList(result, 1); |
| | | List<InhospPositionRecord> records = new ArrayList<>(dataList.size()); |
| | | for (Map<String, Object> dataItem : dataList) { |
| | | records.add(convertToInhospPosition(dataItem)); |
| | | } |
| | | return records; |
| | | } |
| | | |
| | | /** |
| | | * å¥åº·è®°å½ JSON â å¥çº¦ DTO çéåæ®µæ¬è¿ï¼åªå"å½åä½ç½®"è¦ç¨çåæ®µï¼ã |
| | | * <p> |
| | | * ä¸å¾èµ° {@code getStringValue} / {@code getLongValue}ï¼æ¥å£å¯¹ç©ºå¼å¯è½è¿å {@code null}ã |
| | | * {@code ""} çè³ç¼ºå段ï¼ç´æ¥è®© Gson ååºååå° Long åæ®µä¼å¨ç©ºä¸²ä¸æ NumberFormatExceptionã |
| | | */ |
| | | private InhospPositionRecord convertToInhospPosition(Map<String, Object> dataItem) { |
| | | InhospPositionRecord record = new InhospPositionRecord(); |
| | | record.setHealthcareRecordNo(getStringValue(dataItem, "healthcareRecordNo")); |
| | | record.setPatientName(getStringValue(dataItem, "patientName")); |
| | | record.setDeptId(getLongValue(dataItem, "deptId")); |
| | | record.setDeptName(getStringValue(dataItem, "deptName")); |
| | | record.setAreaId(getLongValue(dataItem, "areaId")); |
| | | record.setAreaName(getStringValue(dataItem, "areaName")); |
| | | record.setBedNumber(getStringValue(dataItem, "bedNumber")); |
| | | record.setHealthcareRecordStatus(getStringValue(dataItem, "healthcareRecordStatus")); |
| | | return record; |
| | | } |
| | | |
| | | private String determineCry(ServiceSLTDInhospReqVO reqVO) { |
| | | if (CollectionUtils.isEmpty(reqVO.getStatusList()) && CollectionUtils.isEmpty(reqVO.getHealthcareRecordTypeList())) |
| | | return null; |
| | |
| | | <if test="directorName != null and directorName != ''">and DirectorName like concat('%', #{directorName}, |
| | | '%') |
| | | </if> |
| | | <if test="dncDiagnosisCode != null and dncDiagnosisCode != ''">and EncDiagnosisCode = #{dncDiagnosisCode} |
| | | <if test="encDiagnosisCode != null and encDiagnosisCode != ''">and EncDiagnosisCode = #{encDiagnosisCode} |
| | | </if> |
| | | <if test="encDiagnosisDesc != null and encDiagnosisDesc != ''">and EncDiagnosisDesc = #{encDiagnosisDesc} |
| | | </if> |
| | |
| | | <update id="updateHospitalRecord" parameterType="com.smartor.domain.HospitalRecord"> |
| | | update hospital_record |
| | | <trim prefix="SET" suffixOverrides=","> |
| | | <if test="SourceSystem != null">SourceSystem = #{SourceSystem},</if> |
| | | <if test="MessageID != null">MessageID = #{MessageID},</if> |
| | | <if test="CreateTime != null">CreateTime = #{CreateTime},</if> |
| | | <if test="MethodName != null">MethodName = #{MethodName},</if> |
| | | <if test="ReqIimRules != null">ReqIimRules = #{ReqIimRules},</if> |
| | | <if test="PatientID != null">PatientID = #{PatientID},</if> |
| | | <if test="OpreationTime != null">OpreationTime = #{OpreationTime},</if> |
| | | <if test="EpisodeID != null">EpisodeID = #{EpisodeID},</if> |
| | | <if test="OutMedNO != null">OutMedNO = #{OutMedNO},</if> |
| | | <if test="InMedNO != null">InMedNO = #{InMedNO},</if> |
| | | <if test="VisitNum != null">VisitNum = #{VisitNum},</if> |
| | | <if test="AdmTypeCode != null">AdmTypeCode = #{AdmTypeCode},</if> |
| | | <if test="AdmTypeDesc != null">AdmTypeDesc = #{AdmTypeDesc},</if> |
| | | <if test="AdmStatus != null">AdmStatus = #{AdmStatus},</if> |
| | | <if test="AdmDate != null">AdmDate = #{AdmDate},</if> |
| | | <if test="EncPatName != null">EncPatName = #{EncPatName},</if> |
| | | <if test="EncPatGender != null">EncPatGender = #{EncPatGender},</if> |
| | | <if test="EncPatBirthDate != null">EncPatBirthDate = #{EncPatBirthDate},</if> |
| | | <if test="Transferstart != null">Transferstart = #{Transferstart},</if> |
| | | <if test="Transferend != null">Transferend = #{Transferend},</if> |
| | | <if test="EncPatMaritalStatus != null">EncPatMaritalStatus = #{EncPatMaritalStatus},</if> |
| | | <if test="OriginalText != null">OriginalText = #{OriginalText},</if> |
| | | <if test="EncDocList != null">EncDocList = #{EncDocList},</if> |
| | | <if test="EncAdmLocList != null">EncAdmLocList = #{EncAdmLocList},</if> |
| | | <if test="sourceSystem != null">SourceSystem = #{sourceSystem},</if> |
| | | <if test="messageID != null">MessageID = #{messageID},</if> |
| | | <if test="createTime != null">CreateTime = #{createTime},</if> |
| | | <if test="methodName != null">MethodName = #{methodName},</if> |
| | | <if test="reqIimRules != null">ReqIimRules = #{reqIimRules},</if> |
| | | <if test="patientID != null">PatientID = #{patientID},</if> |
| | | <if test="opreationTime != null">OpreationTime = #{opreationTime},</if> |
| | | <if test="episodeID != null">EpisodeID = #{episodeID},</if> |
| | | <if test="outMedNO != null">OutMedNO = #{outMedNO},</if> |
| | | <if test="inMedNO != null">InMedNO = #{inMedNO},</if> |
| | | <if test="visitNum != null">VisitNum = #{visitNum},</if> |
| | | <if test="admTypeCode != null">AdmTypeCode = #{admTypeCode},</if> |
| | | <if test="admTypeDesc != null">AdmTypeDesc = #{admTypeDesc},</if> |
| | | <if test="admStatus != null">AdmStatus = #{admStatus},</if> |
| | | <if test="admDate != null">AdmDate = #{admDate},</if> |
| | | <if test="encPatName != null">EncPatName = #{encPatName},</if> |
| | | <if test="encPatGender != null">EncPatGender = #{encPatGender},</if> |
| | | <if test="encPatBirthDate != null">EncPatBirthDate = #{encPatBirthDate},</if> |
| | | <if test="transferstart != null">Transferstart = #{transferstart},</if> |
| | | <if test="transferend != null">Transferend = #{transferend},</if> |
| | | <if test="encPatMaritalStatus != null">EncPatMaritalStatus = #{encPatMaritalStatus},</if> |
| | | <if test="originalText != null">OriginalText = #{originalText},</if> |
| | | <if test="encDocList != null">EncDocList = #{encDocList},</if> |
| | | <if test="encAdmLocList != null">EncAdmLocList = #{encAdmLocList},</if> |
| | | <if test="encounterPeriodStart != null">Encounter_period_start = #{encounterPeriodStart},</if> |
| | | <if test="encounterPeriodEnd != null">Encounter_period_end = #{encounterPeriodEnd},</if> |
| | | <if test="encounterBooktime != null">Encounter_booktime = #{encounterBooktime},</if> |
| | | <if test="EncAdmSource != null">EncAdmSource = #{EncAdmSource},</if> |
| | | <if test="EncInhostype != null">EncInhostype = #{EncInhostype},</if> |
| | | <if test="EncDietName != null">EncDietName = #{EncDietName},</if> |
| | | <if test="EncOuthostype != null">EncOuthostype = #{EncOuthostype},</if> |
| | | <if test="EncVisitnum != null">EncVisitnum = #{EncVisitnum},</if> |
| | | <if test="EncChargeType != null">EncChargeType = #{EncChargeType},</if> |
| | | <if test="EncChargeTypeName != null">EncChargeTypeName = #{EncChargeTypeName},</if> |
| | | <if test="EncChargeCode != null">EncChargeCode = #{EncChargeCode},</if> |
| | | <if test="EncChargeName != null">EncChargeName = #{EncChargeName},</if> |
| | | <if test="EncReglevelcode != null">EncReglevelcode = #{EncReglevelcode},</if> |
| | | <if test="EncCareLevel != null">EncCareLevel = #{EncCareLevel},</if> |
| | | <if test="Specialday != null">Specialday = #{Specialday},</if> |
| | | <if test="Primaryday != null">Primaryday = #{Primaryday},</if> |
| | | <if test="Secondaryday != null">Secondaryday = #{Secondaryday},</if> |
| | | <if test="Tertiaryday != null">Tertiaryday = #{Tertiaryday},</if> |
| | | <if test="Enroomno != null">Enroomno = #{Enroomno},</if> |
| | | <if test="EnBedno != null">EnBedno = #{EnBedno},</if> |
| | | <if test="EncSeeno != null">EncSeeno = #{EncSeeno},</if> |
| | | <if test="EncAgeUnit != null">EncAgeUnit = #{EncAgeUnit},</if> |
| | | <if test="EncAgeValue != null">EncAgeValue = #{EncAgeValue},</if> |
| | | <if test="EnIsbaby != null">EnIsbaby = #{EnIsbaby},</if> |
| | | <if test="EncHavebaby != null">EncHavebaby = #{EncHavebaby},</if> |
| | | <if test="EncDiagList != null">EncDiagList = #{EncDiagList},</if> |
| | | <if test="DirectorCode != null">DirectorCode = #{DirectorCode},</if> |
| | | <if test="DirectorName != null">DirectorName = #{DirectorName},</if> |
| | | <if test="EncDiagnosisCode != null">EncDiagnosisCode = #{EncDiagnosisCode},</if> |
| | | <if test="EncDiagnosisDesc != null">EncDiagnosisDesc = #{EncDiagnosisDesc},</if> |
| | | <if test="EncAdmLocCode != null">EncAdmLocCode = #{EncAdmLocCode},</if> |
| | | <if test="EncAdmLocName != null">EncAdmLocName = #{EncAdmLocName},</if> |
| | | <if test="encAdmSource != null">EncAdmSource = #{encAdmSource},</if> |
| | | <if test="encInhostype != null">EncInhostype = #{encInhostype},</if> |
| | | <if test="encDietName != null">EncDietName = #{encDietName},</if> |
| | | <if test="encOuthostype != null">EncOuthostype = #{encOuthostype},</if> |
| | | <if test="encVisitnum != null">EncVisitnum = #{encVisitnum},</if> |
| | | <if test="encChargeType != null">EncChargeType = #{encChargeType},</if> |
| | | <if test="encChargeTypeName != null">EncChargeTypeName = #{encChargeTypeName},</if> |
| | | <if test="encChargeCode != null">EncChargeCode = #{encChargeCode},</if> |
| | | <if test="encChargeName != null">EncChargeName = #{encChargeName},</if> |
| | | <if test="encReglevelcode != null">EncReglevelcode = #{encReglevelcode},</if> |
| | | <if test="encCareLevel != null">EncCareLevel = #{encCareLevel},</if> |
| | | <if test="specialday != null">Specialday = #{specialday},</if> |
| | | <if test="primaryday != null">Primaryday = #{primaryday},</if> |
| | | <if test="secondaryday != null">Secondaryday = #{secondaryday},</if> |
| | | <if test="tertiaryday != null">Tertiaryday = #{tertiaryday},</if> |
| | | <if test="enroomno != null">Enroomno = #{enroomno},</if> |
| | | <if test="enBedno != null">EnBedno = #{enBedno},</if> |
| | | <if test="encSeeno != null">EncSeeno = #{encSeeno},</if> |
| | | <if test="encAgeUnit != null">EncAgeUnit = #{encAgeUnit},</if> |
| | | <if test="encAgeValue != null">EncAgeValue = #{encAgeValue},</if> |
| | | <if test="enIsbaby != null">EnIsbaby = #{enIsbaby},</if> |
| | | <if test="encHavebaby != null">EncHavebaby = #{encHavebaby},</if> |
| | | <if test="encDiagList != null">EncDiagList = #{encDiagList},</if> |
| | | <if test="directorCode != null">DirectorCode = #{directorCode},</if> |
| | | <if test="directorName != null">DirectorName = #{directorName},</if> |
| | | <if test="encDiagnosisCode != null">EncDiagnosisCode = #{encDiagnosisCode},</if> |
| | | <if test="encDiagnosisDesc != null">EncDiagnosisDesc = #{encDiagnosisDesc},</if> |
| | | <if test="encAdmLocCode != null">EncAdmLocCode = #{encAdmLocCode},</if> |
| | | <if test="encAdmLocName != null">EncAdmLocName = #{encAdmLocName},</if> |
| | | <if test="taskStatus != null">taskStatus = #{taskStatus},</if> |
| | | <if test="guid != null">guid = #{guid},</if> |
| | | <if test="orgid != null">orgid = #{orgid},</if> |
| | |
| | | <result property="ID" column="ID"/> |
| | | <result property="SourceSystem" column="SourceSystem"/> |
| | | <result property="MessageID" column="MessageID"/> |
| | | <result property="CreateTime" column="CreateTime"/> |
| | | <!-- å为 property="CreateTime"ï¼å®ä½ä¸åªæ createTimeï¼å
¶ä½ ID/SourceSystem/MessageID/ |
| | | PatientID ç大å屿§å¨å®ä½éç¡®æåååæ®µï¼åªæè¿ä¸ªæ²¡æï¼ï¼ |
| | | ç»ææ å°ä¼æ ReflectionException: no setter for 'CreateTime'ã --> |
| | | <result property="createTime" column="CreateTime"/> |
| | | <result property="MethodName" column="MethodName"/> |
| | | <result property="ReqIimRules" column="ReqIimRules"/> |
| | | <result property="PatientID" column="PatientID"/> |
| | |
| | | where 1=1 |
| | | <if test="SourceSystem != null and SourceSystem != ''">and SourceSystem = #{SourceSystem}</if> |
| | | <if test="MessageID != null and MessageID != ''">and MessageID = #{MessageID}</if> |
| | | <if test="CreateTime != null and CreateTime != ''">and CreateTime = #{CreateTime}</if> |
| | | <if test="createTime != null and createTime != ''">and CreateTime = #{createTime}</if> |
| | | <if test="MethodName != null and MethodName != ''">and MethodName like concat('%', #{MethodName}, '%')</if> |
| | | <if test="ReqIimRules != null and ReqIimRules != ''">and ReqIimRules = #{ReqIimRules}</if> |
| | | <if test="PatientID != null and PatientID != ''">and PatientID = #{PatientID}</if> |
| | |
| | | <trim prefix="(" suffix=")" suffixOverrides=","> |
| | | <if test="SourceSystem != null">SourceSystem,</if> |
| | | <if test="MessageID != null">MessageID,</if> |
| | | <if test="CreateTime != null and CreateTime != ''">CreateTime,</if> |
| | | <if test="createTime != null and createTime != ''">CreateTime,</if> |
| | | <if test="MethodName != null">MethodName,</if> |
| | | <if test="ReqIimRules != null">ReqIimRules,</if> |
| | | <if test="PatientID != null">PatientID,</if> |
| | |
| | | <trim prefix="values (" suffix=")" suffixOverrides=","> |
| | | <if test="SourceSystem != null">#{SourceSystem},</if> |
| | | <if test="MessageID != null">#{MessageID},</if> |
| | | <if test="CreateTime != null and CreateTime != ''">#{CreateTime},</if> |
| | | <if test="createTime != null and createTime != ''">#{createTime},</if> |
| | | <if test="MethodName != null">#{MethodName},</if> |
| | | <if test="ReqIimRules != null">#{ReqIimRules},</if> |
| | | <if test="PatientID != null">#{PatientID},</if> |
| | |
| | | <trim prefix="SET" suffixOverrides=","> |
| | | <if test="SourceSystem != null">SourceSystem = #{SourceSystem},</if> |
| | | <if test="MessageID != null">MessageID = #{MessageID},</if> |
| | | <if test="CreateTime != null">CreateTime = #{CreateTime},</if> |
| | | <if test="createTime != null">CreateTime = #{createTime},</if> |
| | | <if test="MethodName != null">MethodName = #{MethodName},</if> |
| | | <if test="ReqIimRules != null">ReqIimRules = #{ReqIimRules},</if> |
| | | <if test="PatientID != null">PatientID = #{PatientID},</if> |
| | |
| | | <trim prefix="SET" suffixOverrides=","> |
| | | <if test="SourceSystem != null">SourceSystem = #{SourceSystem},</if> |
| | | <if test="MessageID != null">MessageID = #{MessageID},</if> |
| | | <if test="CreateTime != null">CreateTime = #{CreateTime},</if> |
| | | <if test="createTime != null">CreateTime = #{createTime},</if> |
| | | <if test="MethodName != null">MethodName = #{MethodName},</if> |
| | | <if test="ReqIimRules != null">ReqIimRules = #{ReqIimRules},</if> |
| | | <if test="PatientID != null">PatientID = #{PatientID},</if> |
| | |
| | | and d.orgid = #{orgid} |
| | | <if test="name != null and name != ''">and a.name like concat('%', #{name}, '%')</if> |
| | | <if test="idcardno != null and idcardno != ''">and a.idcardno = #{idcardno}</if> |
| | | <if test="pid != null and pid != ''">and a.id = #{id}</if> |
| | | <!-- å为 `and a.id = #{id}`ï¼PatArchiveReq 䏿²¡æ idï¼åªæ pidï¼ï¼ |
| | | æ¡ä»¶å¤çæ¯ pid å´å id ââ è¿æ¡æ¥è¯¢ï¼æä½é¢è®°å½æ¥æ¡£æ¡ï¼ä¸æ§è¡å°±æ |
| | | ReflectionException: no getter for 'id'ãå ä½ç¬¦æ pid åã --> |
| | | <if test="pid != null and pid != ''">and a.id = #{pid}</if> |
| | | <if test="campusid != null and campusid != ''">and a.campusid = #{campusid}</if> |
| | | <if test="telcode != null and telcode != ''">and a.telcode = #{telcode}</if> |
| | | <if test="notrequiredFlag != null and notrequiredFlag != ''">and a.notrequired_flag = #{notrequiredFlag} |
| | |
| | | and d.orgid = #{orgid} |
| | | <if test="name != null and name != ''">and a.name like concat('%', #{name}, '%')</if> |
| | | <if test="idcardno != null and idcardno != ''">and a.idcardno = #{idcardno}</if> |
| | | <if test="pid != null and pid != ''">and a.id = #{id}</if> |
| | | <!-- åä¸ï¼QC çè¯å¥ï¼ï¼å ä½ç¬¦ id -> pidã --> |
| | | <if test="pid != null and pid != ''">and a.id = #{pid}</if> |
| | | <if test="telcode != null and telcode != ''">and a.telcode = #{telcode}</if> |
| | | <if test="notrequiredFlag != null and notrequiredFlag != ''">and a.notrequired_flag = #{notrequiredFlag} |
| | | </if> |
| | |
| | | <result property="sendTime" column="send_time"/> |
| | | <result property="operatePerson" column="operate_person"/> |
| | | <result property="receiveTime" column="receive_time"/> |
| | | <result property="visitTime" column="visit_time"/> |
| | | <!-- å为 property="visitTime"ï¼ä»»å¡æ¨¡åååå®ä½åæ®µå« visittimeï¼å
¨å°åï¼å仿¯ visit_timeï¼ã --> |
| | | <result property="visittime" column="visit_time"/> |
| | | <result property="guid" column="guid"/> |
| | | <result property="orgid" column="orgid"/> |
| | | </resultMap> |
| | |
| | | <if test="icdName != null and icdName != ''">and icd_name like concat('%', #{icdName}, '%')</if> |
| | | <if test="sendStatus != null ">and send_status = #{sendStatus}</if> |
| | | <if test="sendTime != null ">and send_time = #{sendTime}</if> |
| | | <if test="visitTime != null ">and visit_time = #{visitTime}</if> |
| | | <if test="visittime != null ">and visit_time = #{visittime}</if> |
| | | <if test="receiveTime != null ">and receive_time = #{receiveTime}</if> |
| | | <if test="operatePerson != null and operatePerson != ''">and operate_person = #{operatePerson}</if> |
| | | </select> |
| | |
| | | <if test="sendStatus != null">send_status,</if> |
| | | <if test="sendTime != null">send_time,</if> |
| | | <if test="receiveTime != null">receive_time,</if> |
| | | <if test="visitTime != null">visit_time,</if> |
| | | <if test="visittime != null">visit_time,</if> |
| | | <if test="operatePerson != null and operatePerson != ''">operate_person,</if> |
| | | <if test="guid != null and guid != ''">guid,</if> |
| | | <if test="orgid != null and orgid != ''">orgid,</if> |
| | |
| | | <if test="sendStatus != null">#{sendStatus},</if> |
| | | <if test="sendTime != null">#{sendTime},</if> |
| | | <if test="receiveTime != null">#{receiveTime},</if> |
| | | <if test="visitTime != null">#{visitTime},</if> |
| | | <if test="visittime != null">#{visittime},</if> |
| | | <if test="operatePerson != null and operatePerson != ''">#{operatePerson},</if> |
| | | <if test="guid != null and guid != ''">#{guid},</if> |
| | | <if test="orgid != null and orgid != ''">#{orgid},</if> |
| | |
| | | <if test="sendStatus != null">send_status=#{sendStatus},</if> |
| | | <if test="sendTime != null">send_time=#{sendTime},</if> |
| | | <if test="receiveTime != null">receive_time=#{receiveTime},</if> |
| | | <if test="visitTime != null">visit_time=#{visitTime},</if> |
| | | <if test="visittime != null">visit_time=#{visittime},</if> |
| | | <if test="operatePerson != null and operatePerson != ''">operate_person=#{operatePerson},</if> |
| | | <if test="guid != null and guid != ''">guid=#{guid},</if> |
| | | <if test="orgid != null and orgid != ''">orgid=#{orgid},</if> |
| | |
| | | <if test="partId != null">and part_id = #{partId}</if> |
| | | <if test="partName != null">and part_name = #{partName}</if> |
| | | <if test="typeId != null">and type_id = #{typeId}</if> |
| | | <if test="typeName != null">and type_name = #{type}</if> |
| | | <!-- å为 `#{type}`ï¼å®ä½ä¸åªæ typeNameï¼test éç¨ç乿¯ typeNameï¼ï¼ |
| | | `type` ä¸åå¨ ââ è¯¥åæ¯ä¸èµ°å°å°±æ |
| | | ReflectionException: no getter for 'type'ã --> |
| | | <if test="typeName != null">and type_name = #{typeName}</if> |
| | | <if test="filmFlag != null">and film_flag = #{filmFlag}</if> |
| | | <if test="bedFlag != null">and bed_flag = #{bedFlag}</if> |
| | | <if test="pushFlag != null">and push_flag = #{pushFlag}</if> |
| | |
| | | <if test="registTimeRange != null">regist_time_range = |
| | | #{registTimeRange}, |
| | | </if> |
| | | <!-- å为 `#{schedDetailSn}`ï¼å®ä½å±æ§å« scheduleDetailSnï¼test éç¨ç乿¯å®ï¼ï¼ |
| | | schedDetailSn ä¸åå¨ ââ 䏿¦èµ°å°è¿æ¡åæ¯å°±æ |
| | | ReflectionException: no getter for 'schedDetailSn'ã --> |
| | | <if test="scheduleDetailSn != null">schedule_detail_sn = |
| | | #{schedDetailSn}, |
| | | #{scheduleDetailSn}, |
| | | </if> |
| | | <if test="treatDate != null">treat_date = |
| | | #{treatDate}, |