From 60b7a9849e957872203ef78b99e7a0ee8e533e94 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期二, 13 十月 2026 17:53:13 +0800
Subject: [PATCH] 【丽水】专科档案生成配置

---
 smartor/src/main/resources/mapper/smartor/PatChildArchiveDetailMapper.xml          |    1 
 smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java     |  110 +++++++++++++++++++++++++++
 smartor/src/main/java/com/smartor/service/impl/PatMaternityArchiveServiceImpl.java |   65 +++++++++++++++
 smartor/src/main/resources/mapper/smartor/PatChildArchiveMapper.xml                |    1 
 smartor/src/main/java/com/smartor/service/impl/PatChildArchiveServiceImpl.java     |   48 ++++++++++-
 smartor/src/main/resources/mapper/smartor/PatMaternityArchiveDetailMapper.xml      |    1 
 smartor/src/main/resources/mapper/smartor/PatMaternityArchiveMapper.xml            |    1 
 7 files changed, 218 insertions(+), 9 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/service/impl/PatChildArchiveServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatChildArchiveServiceImpl.java
index 04aef2b..4dd9148 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatChildArchiveServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatChildArchiveServiceImpl.java
@@ -88,14 +88,50 @@
             log.error("insertOrUpdateChildArchive鍏ュ弬涓虹┖锛岃妫�鏌ュ叆鍙�");
             throw new BaseException("鍎跨妗f鍏ュ弬涓虹┖锛岃妫�鏌ュ叆鍙�");
         }
+        if (StringUtils.isEmpty(patChildArchiveDetail.getOuthospno())) {
+            throw new BaseException("鍎跨妗f鍏ュ弬闂ㄨ瘖缂栧彿outhospno涓虹┖锛岃妫�鏌ュ叆鍙傞棬璇婄紪鍙�");
+        }
+        if (StringUtils.isEmpty(patChildArchiveDetail.getArchiveType())) {
+            throw new BaseException("鍎跨妗f鍏ュ弬妗f绫诲瀷archiveType涓虹┖锛岃妫�鏌ュ叆鍙傛。妗堢被鍨�");
+        }
 
-        // 鍙紶浜嗚鎯卛d鏃讹紝鍙嶆煡鍑哄搴旂殑妗f涓婚敭id锛屼繚璇佸悗缁兘姝g‘鏇存柊涓昏〃
-        if (patChildArchiveDetail.getId() != null && patChildArchiveDetail.getArchiveid() == null) {
-            PatChildArchiveDetail existDetail = patChildArchiveDetailService.selectPatChildArchiveDetailById(patChildArchiveDetail.getId());
-            if (existDetail != null) {
-                patChildArchiveDetail.setArchiveid(existDetail.getArchiveid());
+        // 鎸変笟鍔¢敭鏌ヨ鎯�
+        PatChildArchiveDetail key = new PatChildArchiveDetail();
+        key.setOrgid(patChildArchiveDetail.getOrgid());
+        key.setPatid(patChildArchiveDetail.getPatid());
+        key.setOuthospno(patChildArchiveDetail.getOuthospno());
+        key.setArchiveType(patChildArchiveDetail.getArchiveType());
+        List<PatChildArchiveDetail> olds =
+                patChildArchiveDetailService.selectPatChildArchiveDetailList(key);
+
+        Long existArchiveId = null;
+        Long existDetailId = null;
+        if (CollectionUtils.isNotEmpty(olds)) {
+            existArchiveId = olds.get(0).getArchiveid();
+            existDetailId = olds.get(0).getId();
+        }
+
+        // 璇︽儏娌℃煡鍒帮紝鍐嶅厹搴曟寜鍚屾牱閿煡涓昏〃锛岄伩鍏嶄富琛ㄩ噸澶�
+        if (existArchiveId == null) {
+            PatChildArchive mainKey = new PatChildArchive();
+            mainKey.setOrgid(patChildArchiveDetail.getOrgid());
+            mainKey.setPatid(patChildArchiveDetail.getPatid());
+            mainKey.setOuthospno(patChildArchiveDetail.getOuthospno());
+            mainKey.setArchiveType(patChildArchiveDetail.getArchiveType());
+            List<PatChildArchive> mainOlds =
+                    patChildArchiveMapper.selectPatChildArchiveList(mainKey);
+            if (CollectionUtils.isNotEmpty(mainOlds)) {
+                existArchiveId = mainOlds.get(0).getId();
             }
         }
+        patChildArchiveDetail.setArchiveid(existArchiveId);
+
+        // 鍚庨潰鏇存柊璇︽儏鏃讹紝浼樺厛鐢ㄤ笟鍔¢敭鍖归厤鍒扮殑 detail id
+        Long detailId = patChildArchiveDetail.getId();
+        if (detailId == null) {
+            detailId = existDetailId;
+        }
+
 
         // 灏嗚鎯呬腑鐨勫叕鍏卞瓧娈靛鍒跺埌涓昏〃瀵硅薄
         PatChildArchive patChildArchive = DtoConversionUtils.sourceToTarget(patChildArchiveDetail, PatChildArchive.class);
@@ -121,7 +157,7 @@
         // 鍥炲~涓昏〃id鍒拌鎯咃紝鍚屾鐢熸垚/鏇存柊璇︽儏琛�
         patChildArchiveDetail.setArchiveid(patChildArchive.getId());
 
-        Long detailId = patChildArchiveDetail.getId();
+//      Long detailId = patChildArchiveDetail.getId();
         if (detailId == null && patChildArchiveDetail.getArchiveid() != null) {
             PatChildArchiveDetail query = new PatChildArchiveDetail();
             query.setArchiveid(patChildArchiveDetail.getArchiveid());
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatMaternityArchiveServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatMaternityArchiveServiceImpl.java
index f5706f4..cea1042 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMaternityArchiveServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMaternityArchiveServiceImpl.java
@@ -4,8 +4,11 @@
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.smartor.domain.PatChildArchive;
+import com.smartor.domain.PatChildArchiveDetail;
 import com.smartor.domain.PatMaternityArchive;
 import com.smartor.domain.PatMaternityArchiveDetail;
+import com.smartor.mapper.PatMaternityArchiveDetailMapper;
 import com.smartor.mapper.PatMaternityArchiveMapper;
 import com.smartor.service.IPatMaternityArchiveDetailService;
 import com.smartor.service.IPatMaternityArchiveService;
@@ -32,6 +35,8 @@
 
     @Autowired
     private IPatMaternityArchiveDetailService patMaternityArchiveDetailService;
+    @Autowired
+    private PatMaternityArchiveDetailMapper patMaternityArchiveDetailMapper;
 
     @Override
     public PatMaternityArchive selectPatMaternityArchiveById(Long id)
@@ -89,9 +94,63 @@
             throw new BaseException("濡囩妗f鍏ュ弬涓虹┖锛岃妫�鏌ュ叆鍙�");
         }
 
+        //淇濊瘉鍚屼竴灏辫瘖璁板綍鍚屼竴妗f绫诲瀷鍙兘鐢熸垚涓�鏉�
+        PatMaternityArchiveDetail patMaternityArchiveDetailVo = new PatMaternityArchiveDetail();
+        patMaternityArchiveDetailVo.setOrgid(patMaternityArchiveDetail.getOrgid());
+        patMaternityArchiveDetailVo.setPatid(patMaternityArchiveDetail.getPatid());
+        patMaternityArchiveDetailVo.setOuthospno(patMaternityArchiveDetail.getOuthospno());
+        patMaternityArchiveDetailVo.setArchiveType(patMaternityArchiveDetail.getArchiveType());
+        List<PatMaternityArchiveDetail> patMaternityArchiveDetailOlds
+                = patMaternityArchiveDetailService.selectPatMaternityArchiveDetailList(patMaternityArchiveDetailVo);
+
+
+        if (StringUtils.isEmpty(patMaternityArchiveDetail.getOuthospno())) {
+            throw new BaseException("濡囩妗f鍏ュ弬闂ㄨ瘖缂栧彿outhospno涓虹┖锛岃妫�鏌ュ叆鍙傞棬璇婄紪鍙�");
+        }
+        if (StringUtils.isEmpty(patMaternityArchiveDetail.getArchiveType())) {
+            throw new BaseException("濡囩妗f鍏ュ弬妗f绫诲瀷archiveType涓虹┖锛岃妫�鏌ュ叆鍙傛。妗堢被鍨�");
+        }
+
+        // 鎸変笟鍔¢敭鏌ヨ鎯�
+        PatMaternityArchiveDetail key = new PatMaternityArchiveDetail();
+        key.setOrgid(patMaternityArchiveDetail.getOrgid());
+        key.setPatid(patMaternityArchiveDetail.getPatid());
+        key.setOuthospno(patMaternityArchiveDetail.getOuthospno());
+        key.setArchiveType(patMaternityArchiveDetail.getArchiveType());
+        List<PatMaternityArchiveDetail> olds =
+                patMaternityArchiveDetailService.selectPatMaternityArchiveDetailList(key);
+
+        Long existArchiveId = null;
+        Long existDetailId = null;
+        if (CollectionUtils.isNotEmpty(olds)) {
+            existArchiveId = olds.get(0).getArchiveid();
+            existDetailId = olds.get(0).getId();
+        }
+
+        // 璇︽儏娌℃煡鍒帮紝鍐嶅厹搴曟寜鍚屾牱閿煡涓昏〃锛岄伩鍏嶄富琛ㄩ噸澶�
+        if (existArchiveId == null) {
+            PatMaternityArchive mainKey = new PatMaternityArchive();
+            mainKey.setOrgid(patMaternityArchiveDetail.getOrgid());
+            mainKey.setPatid(patMaternityArchiveDetail.getPatid());
+            mainKey.setOuthospno(patMaternityArchiveDetail.getOuthospno());
+            mainKey.setArchiveType(patMaternityArchiveDetail.getArchiveType());
+            List<PatMaternityArchive> mainOlds =
+                    patMaternityArchiveMapper.selectPatMaternityArchiveList(mainKey);
+            if (CollectionUtils.isNotEmpty(mainOlds)) {
+                existArchiveId = mainOlds.get(0).getId();
+            }
+        }
+        patMaternityArchiveDetail.setArchiveid(existArchiveId);
+
+        // 鍚庨潰鏇存柊璇︽儏鏃讹紝浼樺厛鐢ㄤ笟鍔¢敭鍖归厤鍒扮殑 detail id
+        Long detailId = patMaternityArchiveDetail.getId();
+        if (detailId == null) {
+            detailId = existDetailId;
+        }
+
         // 鍙紶浜嗚鎯卛d鏃讹紝鍙嶆煡鍑哄搴旂殑妗f涓婚敭id锛屼繚璇佸悗缁兘姝g‘鏇存柊涓昏〃
-        if (patMaternityArchiveDetail.getId() != null && patMaternityArchiveDetail.getArchiveid() == null) {
-            PatMaternityArchiveDetail existDetail = patMaternityArchiveDetailService.selectPatMaternityArchiveDetailById(patMaternityArchiveDetail.getId());
+        if (CollectionUtils.isNotEmpty(patMaternityArchiveDetailOlds)) {
+            PatMaternityArchiveDetail existDetail = patMaternityArchiveDetailOlds.get(0);
             if (existDetail != null) {
                 patMaternityArchiveDetail.setArchiveid(existDetail.getArchiveid());
             }
@@ -121,7 +180,7 @@
         // 鍥炲~涓昏〃id鍒拌鎯咃紝鍚屾鐢熸垚/鏇存柊璇︽儏琛�
         patMaternityArchiveDetail.setArchiveid(patMaternityArchive.getId());
 
-        Long detailId = patMaternityArchiveDetail.getId();
+//        Long detailId = patMaternityArchiveDetail.getId();
         if (detailId == null && patMaternityArchiveDetail.getArchiveid() != null) {
             PatMaternityArchiveDetail query = new PatMaternityArchiveDetail();
             query.setArchiveid(patMaternityArchiveDetail.getArchiveid());
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
index 31a679c..f672d26 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -1,6 +1,9 @@
 package com.smartor.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.ruoyi.common.core.domain.entity.SysDept;
@@ -11,9 +14,12 @@
 import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.system.service.ISysConfigService;
 import com.smartor.domain.*;
 import com.smartor.domain.entity.ServiceSubtaskEntity;
 import com.smartor.mapper.*;
+import com.smartor.service.IPatChildArchiveService;
+import com.smartor.service.IPatMaternityArchiveService;
 import com.smartor.service.IPatMedOuthospService;
 import com.smartor.service.IServiceExternalService;
 import lombok.extern.slf4j.Slf4j;
@@ -70,6 +76,12 @@
     private Icd10Mapper icd10Mapper;
     @Autowired
     private IPatMedOuthospService patMedOuthospService;
+    @Autowired
+    private ISysConfigService configService;
+    @Autowired
+    private IPatMaternityArchiveService patMaternityArchiveService;
+    @Autowired
+    private IPatChildArchiveService patChildArchiveService;
     @Autowired
     private PatMedOuthospMapper patMedOuthospMapper;
     @Autowired
@@ -1312,6 +1324,8 @@
             patMedOuthospService.dealPatMedOuthosp(patMedOuthosp, visitTimeNum);
         }
 
+        genePatSpecificArchive(patMedOuthosp, patArchive);
+
         if (i > 0) {
             return true;
         }
@@ -2327,4 +2341,100 @@
         }
         return 1;
     }
+
+    //鏂板鎮h�呬笓绉戞。妗堝熀鏈俊鎭�
+    private void genePatSpecificArchive(PatMedOuthosp patMedOuthosp, PatArchive patArchive) {
+        String deptCategory = judgeDeptCategory(patMedOuthosp.getDeptcode(), patMedOuthosp.getOrgid());
+
+        boolean isGynecology = "1".equals(deptCategory);  // 鏄惁濡囩
+        boolean isPediatrics = "2".equals(deptCategory);  // 鏄惁鍎跨
+
+        if (isGynecology) {
+            // 璧板绉戞。妗堢敓鎴愰�昏緫
+            PatMaternityArchiveDetail patMaternityArchiveDetail
+                    = DtoConversionUtils.sourceToTarget(patMedOuthosp, PatMaternityArchiveDetail.class);
+            patMaternityArchiveDetail.setSourceType("1");
+            patMaternityArchiveDetail.setPhone(patArchive.getTelcode());
+            patMaternityArchiveDetail.setPatid(patArchive.getId());
+            patMaternityArchiveDetail.setPatname(patArchive.getName());
+            patMaternityArchiveDetail.setBirthdate(patArchive.getBirthdate());
+            patMaternityArchiveDetail.setSex(patArchive.getSex());
+            patMaternityArchiveDetail.setAddress(patArchive.getPlaceOfResidence());
+            patMaternityArchiveDetail.setOuthospno(patMedOuthosp.getOuthospno());
+            patMaternityArchiveDetail.setSerialnum(patMedOuthosp.getSerialnum());
+            patMaternityArchiveDetail.setIcd10code(patMedOuthosp.getIcd10code());
+            patMaternityArchiveDetail.setDeptcode(patMedOuthosp.getDeptcode());
+            patMaternityArchiveDetail.setDeptname(patMedOuthosp.getDeptname());
+            patMaternityArchiveDetail.setDoctorName(patMedOuthosp.getDrname());
+            patMaternityArchiveDetail.setDoctorCode(patMedOuthosp.getDrcode());
+            patMaternityArchiveDetail.setManagementDoctorName(patMedOuthosp.getDrname());
+            patMaternityArchiveDetail.setManagementDoctorCode(patMedOuthosp.getDrcode());
+            patMaternityArchiveDetail.setOrgid(patMedOuthosp.getOrgid());
+            patMaternityArchiveDetail.setCampusid(patMedOuthosp.getCampusid());
+            patMaternityArchiveService.insertOrUpdateMaternityArchive(patMaternityArchiveDetail);
+        } else if (isPediatrics) {
+            // 璧板効绉戞。妗堢敓鎴愰�昏緫
+            PatChildArchiveDetail patChildArchiveDetail
+                    = DtoConversionUtils.sourceToTarget(patMedOuthosp, PatChildArchiveDetail.class);
+            patChildArchiveDetail.setSourceType("1");
+            patChildArchiveDetail.setPhone(patArchive.getTelcode());
+            patChildArchiveDetail.setPatid(patArchive.getId());
+            patChildArchiveDetail.setPatname(patArchive.getName());
+            patChildArchiveDetail.setBirthdate(patArchive.getBirthdate());
+            patChildArchiveDetail.setSex(patArchive.getSex());
+//            patChildArchiveDetail.setAddress(patArchive.getPlaceOfResidence());
+            patChildArchiveDetail.setOuthospno(patMedOuthosp.getOuthospno());
+            patChildArchiveDetail.setSerialnum(patMedOuthosp.getSerialnum());
+            patChildArchiveDetail.setIcd10code(patMedOuthosp.getIcd10code());
+            patChildArchiveDetail.setDeptcode(patMedOuthosp.getDeptcode());
+            patChildArchiveDetail.setDeptname(patMedOuthosp.getDeptname());
+            patChildArchiveDetail.setDoctorName(patMedOuthosp.getDrname());
+            patChildArchiveDetail.setDoctorCode(patMedOuthosp.getDrcode());
+            patChildArchiveDetail.setManagementDoctorName(patMedOuthosp.getDrname());
+            patChildArchiveDetail.setManagementDoctorCode(patMedOuthosp.getDrcode());
+            patChildArchiveDetail.setOrgid(patMedOuthosp.getOrgid());
+            patChildArchiveDetail.setCampusid(patMedOuthosp.getCampusid());
+            patChildArchiveService.insertOrUpdateChildArchive(patChildArchiveDetail);
+        } else {
+            // 鏈懡涓厤缃紝涓嶇敓鎴愭。妗�
+        }
+    }
+
+    /**
+     * 鍒ゆ柇褰撳墠绉戝灞炰簬濡囩杩樻槸鍎跨
+     *
+     * @param deptCode 褰撳墠绉戝/鐥呭尯 Code锛屽 "D004"
+     * @param orgid    鍖婚櫌鏈烘瀯ID
+     * @return deptCategory锛�1-濡囩 2-鍎跨锛沶ull-鏈厤缃垨鏈懡涓�
+     */
+    public String judgeDeptCategory(String deptCode, String orgid) {
+        if (StringUtils.isEmpty(deptCode)) {
+            return null;
+        }
+
+        // 浼樺厛鍙栨満鏋勭骇閰嶇疆锛屽彇涓嶅埌鍐嶅彇鍏ㄥ眬閰嶇疆
+        String configValue = configService.selectConfigByKey("sys.dept.category",
+                orgid);
+        if (StringUtils.isEmpty(configValue)) {
+            configValue = configService.selectConfigByKey("sys.dept.category");
+        }
+        if (StringUtils.isEmpty(configValue)) {
+            return null;
+        }
+
+        JSONArray configs = JSON.parseArray(configValue);
+        if (configs == null || configs.isEmpty()) {
+            return null;
+        }
+
+        for (int i = 0; i < configs.size(); i++) {
+            JSONObject cfg = configs.getJSONObject(i);
+            JSONArray deptCodes = cfg.getJSONArray("deptCodes");
+            if (deptCodes != null && deptCodes.contains(deptCode)) {
+                return cfg.getString("deptCategory");
+            }
+        }
+        return null;
+    }
+
 }
diff --git a/smartor/src/main/resources/mapper/smartor/PatChildArchiveDetailMapper.xml b/smartor/src/main/resources/mapper/smartor/PatChildArchiveDetailMapper.xml
index db6384c..d17a477 100644
--- a/smartor/src/main/resources/mapper/smartor/PatChildArchiveDetailMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatChildArchiveDetailMapper.xml
@@ -174,6 +174,7 @@
     <select id="selectPatChildArchiveDetailById" parameterType="Long" resultMap="PatChildArchiveDetailResult">
         <include refid="selectPatChildArchiveDetailVo"/>
         where id = #{id}
+        and del_flag = '0'
     </select>
 
     <insert id="insertPatChildArchiveDetail" parameterType="com.smartor.domain.PatChildArchiveDetail"
diff --git a/smartor/src/main/resources/mapper/smartor/PatChildArchiveMapper.xml b/smartor/src/main/resources/mapper/smartor/PatChildArchiveMapper.xml
index 7e6ee5e..95fb901 100644
--- a/smartor/src/main/resources/mapper/smartor/PatChildArchiveMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatChildArchiveMapper.xml
@@ -144,6 +144,7 @@
     <select id="selectPatChildArchiveById" parameterType="Long" resultMap="PatChildArchiveResult">
         <include refid="selectPatChildArchiveVo"/>
         where id = #{id}
+        and del_flag = '0'
     </select>
 
     <insert id="insertPatChildArchive" parameterType="com.smartor.domain.PatChildArchive"
diff --git a/smartor/src/main/resources/mapper/smartor/PatMaternityArchiveDetailMapper.xml b/smartor/src/main/resources/mapper/smartor/PatMaternityArchiveDetailMapper.xml
index 1675900..fb2fef3 100644
--- a/smartor/src/main/resources/mapper/smartor/PatMaternityArchiveDetailMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatMaternityArchiveDetailMapper.xml
@@ -164,6 +164,7 @@
     <select id="selectPatMaternityArchiveDetailById" parameterType="Long" resultMap="PatMaternityArchiveDetailResult">
         <include refid="selectPatMaternityArchiveDetailVo"/>
         where id = #{id}
+        and del_flag = '0'
     </select>
 
     <insert id="insertPatMaternityArchiveDetail" parameterType="com.smartor.domain.PatMaternityArchiveDetail"
diff --git a/smartor/src/main/resources/mapper/smartor/PatMaternityArchiveMapper.xml b/smartor/src/main/resources/mapper/smartor/PatMaternityArchiveMapper.xml
index dac32bf..194b85f 100644
--- a/smartor/src/main/resources/mapper/smartor/PatMaternityArchiveMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatMaternityArchiveMapper.xml
@@ -130,6 +130,7 @@
     <select id="selectPatMaternityArchiveById" parameterType="Long" resultMap="PatMaternityArchiveResult">
         <include refid="selectPatMaternityArchiveVo"/>
         where id = #{id}
+        and del_flag = '0'
     </select>
 
     <insert id="insertPatMaternityArchive" parameterType="com.smartor.domain.PatMaternityArchive"

--
Gitblit v1.9.3