From f2cc333b963cb0de81aebc5ae3a8c247e99243d8 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期二, 02 六月 2026 18:21:27 +0800
Subject: [PATCH] 【市一】同步手术视图

---
 ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml                       |  225 +++++++++++++++++++++++++++++++++++++
 smartor/src/main/java/com/smartor/domain/PatMedOperation.java                            |    6 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java |    5 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java      |   81 +++++++++++++
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/CollectHISMapper.java                 |   17 ++
 smartor/src/main/java/com/smartor/domain/PatMedOperationItem.java                        |    6 +
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java              |    5 
 7 files changed, 345 insertions(+), 0 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
index 9382fd6..d458f35 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -829,4 +829,9 @@
     public void syncMedInhospForShiyi(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) {
         collectHISService.syncMedInhosp(startTime, endTime);
     }
+
+    @PostMapping("/syncMedOperForShiyi")
+    public void syncMedOperForShiyi(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) {
+        collectHISService.syncOper(startTime, endTime);
+    }
 }
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/CollectHISMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/CollectHISMapper.java
index c687dcc..754af48 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/CollectHISMapper.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/CollectHISMapper.java
@@ -110,6 +110,23 @@
     public List<SysDept> selectDeptList(SysDept dept);
 
     /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鎵嬫湳淇℃伅
+     *
+     * @param patMedOperation 鎵嬫湳淇℃伅
+     * @return 鎵嬫湳淇℃伅闆嗗悎淇℃伅
+     */
+    public List<PatMedOperation> selectOperList(PatMedOperation patMedOperation);
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鎵嬫湳璇︽儏淇℃伅
+     *
+     * @param patMedOperationItem 鎵嬫湳璇︽儏淇℃伅
+     * @return 鎵嬫湳璇︽儏淇℃伅闆嗗悎淇℃伅
+     */
+    public List<PatMedOperationItem> selectOperItemList(PatMedOperationItem patMedOperationItem);
+
+
+    /**
      * 鏌ヨ杩斿洖strign sql
      * @param sql
      * @return
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
index b8b6e1b..f5b2c05 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
@@ -78,4 +78,9 @@
      * 甯備竴鍚屾
      */
     public Integer syncMedInhosp(String startTime, String endTime);
+
+    /**
+     * 甯備竴鍚屾
+     */
+    public Integer syncOper(String startTime, String endTime);
 }
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
index d639291..5569719 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
@@ -74,7 +74,11 @@
 
     @Value("${spring.profiles.active}")
     private String active;
+    @Autowired
+    private PatMedOperationMapper patMedOperationMapper;
 
+    @Autowired
+    private PatMedOperationItemMapper patMedOperationItemMapper;
 
     @Override
     public List<PatArchive> selectPatArchiveList(PatArchive patArchive) {
@@ -127,6 +131,12 @@
                 utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_outhosp' ");
             }
 
+            //鍚屾鎵嬫湳淇℃伅
+            syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_med_operation")).collect(Collectors.toList());
+            if (syncTemp.size() > 0) {
+                count += syncOper(syncTemp.get(0).get("startTime") + "", endTime);
+                utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_operation' ");
+            }
 
         } else {
             log.info("鍚屾浠诲姟鏃堕棿sys_sync_time琛ㄤ腑娌℃湁闇�瑕佸悓姝ョ殑浠诲姟");
@@ -311,6 +321,77 @@
         return count;
     }
 
+    /**
+     * 鍚屾鎵嬫湳淇℃伅
+     *
+     * @param
+     * @return
+     */
+    @Override
+    public Integer syncOper(String startTime, String endTime) {
+        Integer count = 0;
+        PatMedOperation patMedOperation = new PatMedOperation();
+        patMedOperation.setLastStartTime(startTime);
+        patMedOperation.setLastEndTime(endTime);
+        List<PatMedOperation> patMedOperations = chMapper.selectOperList(patMedOperation);
+        log.info("鍚屾鎵嬫湳淇℃伅鏁伴噺" + patMedOperations.size());
+        for (PatMedOperation operation : patMedOperations) {
+            try {
+                PatMedOperation oper = new PatMedOperation();
+                oper.setOpid(operation.getOpid());
+                List<PatMedOperation> patMedOperations1 = patMedOperationMapper.selectPatMedOperationList(oper);
+                if (CollectionUtils.isNotEmpty(patMedOperations1)) {
+                    operation.setId(patMedOperations1.get(0).getId());
+                    operation.setUpdateTime(new Date());
+                    count += patMedOperationMapper.updatePatMedOperation(patMedOperations1.get(0));
+                    syncOperItem(operation);
+                } else {
+                    operation.setCreateTime(new Date());
+                    count += patMedOperationMapper.insertPatMedOperation(operation);
+                    syncOperItem(operation);
+                }
+            } catch (Exception ex) {
+                log.info("鍚屾鎵嬫湳淇℃伅:" + ex.getMessage());
+            }
+        }
+        return count;
+    }
+
+    /**
+     * 鍚屾鎵嬫湳淇℃伅
+     *
+     * @param
+     * @return
+     */
+    private Integer syncOperItem(PatMedOperation operation) {
+        Integer count = 0;
+        PatMedOperationItem patMedOperationItem = new PatMedOperationItem();
+        patMedOperationItem.setOrgid(operation.getOrgid());
+        if(StringUtils.isNotEmpty(operation.getOpid())){
+            patMedOperationItem.setOpid(Long.valueOf(operation.getOpid()));
+            List<PatMedOperationItem> patMedOperationItems = chMapper.selectOperItemList(patMedOperationItem);
+            log.info("鍚屾鎵嬫湳璇︽儏淇℃伅鏁伴噺" + patMedOperationItems.size());
+            for (PatMedOperationItem operationItem : patMedOperationItems) {
+                try {
+                    PatMedOperationItem operItem = new PatMedOperationItem();
+                    operItem.setOpid(operationItem.getOpid());
+                    operItem.setOperationid(operationItem.getOperationid());
+                    List<PatMedOperationItem> patMedOperationItems1 = patMedOperationItemMapper.selectPatMedOperationItemList(operItem);
+                    if (CollectionUtils.isNotEmpty(patMedOperationItems1)) {
+                        operationItem.setId(patMedOperationItems1.get(0).getId());
+                        operationItem.setUpdateTime(new Date());
+                        count += patMedOperationItemMapper.updatePatMedOperationItem(operationItem);
+                    } else {
+                        operation.setCreateTime(new Date());
+                        count += patMedOperationItemMapper.insertPatMedOperationItem(operationItem);
+                    }
+                } catch (Exception ex) {
+                    log.info("鍚屾鎵嬫湳璇︽儏淇℃伅:" + ex.getMessage());
+                }
+            }
+        }
+        return count;
+    }
     @Override
     public Integer selectPatMedInhospList(PatMedInhosp patMedInhosp) {
         List<PatMedInhosp> patMedInhospList = chMapper.selectPatMedInhospList(patMedInhosp);
diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
index bfda1d8..4767c80 100644
--- a/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
+++ b/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
@@ -336,6 +336,107 @@
         <result property="guid" column="guid"/>
     </resultMap>
 
+    <resultMap type="com.smartor.domain.PatMedOperation" id="PatMedOperationResult">
+        <result property="id" column="id"/>
+        <result property="patid" column="patid"/>
+        <result property="patcode" column="patcode"/>
+        <result property="paname" column="paname"/>
+        <result property="opreqid" column="opreqid"/>
+        <result property="opreqcode" column="opreqcode"/>
+        <result property="opsstatus" column="opsstatus"/>
+        <result property="optypecode" column="optypecode"/>
+        <result property="optypename" column="optypename"/>
+        <result property="operatortime" column="operatortime"/>
+        <result property="opreqtime" column="opreqtime"/>
+        <result property="reqdoccode" column="reqdoccode"/>
+        <result property="reqdocname" column="reqdocname"/>
+        <result property="reqdeptcode" column="reqdeptcode"/>
+        <result property="reqdeptname" column="reqdeptname"/>
+        <result property="reqloccode" column="reqloccode"/>
+        <result property="reqlocname" column="reqlocname"/>
+        <result property="remark" column="remark"/>
+        <result property="surgeoncode" column="surgeoncode"/>
+        <result property="surgeonname" column="surgeonname"/>
+        <result property="firasscode" column="firasscode"/>
+        <result property="firassname" column="firassname"/>
+        <result property="secasscode" column="secasscode"/>
+        <result property="secassname" column="secassname"/>
+        <result property="thrasscode" column="thrasscode"/>
+        <result property="thrassname" column="thrassname"/>
+        <result property="canceltime" column="canceltime"/>
+        <result property="cancelreason" column="cancelreason"/>
+        <result property="cancelcode" column="cancelcode"/>
+        <result property="cancelname" column="cancelname"/>
+        <result property="visittype" column="visittype"/>
+        <result property="status" column="status"/>
+        <result property="schemetime" column="schemetime"/>
+        <result property="schemestatus" column="schemestatus"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="isupload" column="isupload"/>
+        <result property="uploadTime" column="upload_time"/>
+        <result property="orgid" column="orgid"/>
+        <result property="guid" column="guid"/>
+        <result property="pguid" column="pguid"/>
+        <result property="pid" column="pid"/>
+        <result property="inhospstate" column="inhospstate"/>
+        <result property="patno" column="patno"/>
+        <result property="patname" column="patname"/>
+        <result property="visitid" column="visitid"/>
+        <result property="serialnum" column="serialnum"/>
+        <result property="inhospno" column="inhospno"/>
+        <result property="hospitalname" column="hospitalname"/>
+        <result property="hospitalcode" column="hospitalcode"/>
+        <result property="deptid" column="deptid"/>
+        <result property="deptcode" column="deptcode"/>
+        <result property="deptname" column="deptname"/>
+        <result property="hospitaldistrictcode" column="hospitaldistrictcode"/>
+        <result property="hospitaldistrictname" column="hospitaldistrictname"/>
+        <result property="roomno" column="roomno"/>
+        <result property="bedNo" column="bed_no"/>
+        <result property="drcode" column="drcode"/>
+        <result property="drname" column="drname"/>
+        <result property="nurseId" column="nurse_id"/>
+        <result property="nurseName" column="nurse_name"/>
+        <result property="checkFlag" column="check_flag"/>
+        <result property="longTaskReason" column="long_task_reason"/>
+        <result property="opid" column="opid"/>
+        <result property="opcode" column="opcode"/>
+        <result property="opdesc" column="opdesc"/>
+        <result property="oplevelcode" column="oplevelcode"/>
+        <result property="opleveldesc" column="opleveldesc"/>
+    </resultMap>
+
+    <resultMap type="com.smartor.domain.PatMedOperationItem" id="PatMedOperationItemResult">
+        <result property="id" column="id"/>
+        <result property="operationid" column="operationid"/>
+        <result property="opid" column="opid"/>
+        <result property="opcode" column="opcode"/>
+        <result property="opdesc" column="opdesc"/>
+        <result property="mainFlag" column="main_flag"/>
+        <result property="incitypecode" column="incitypecode"/>
+        <result property="incitypedesc" column="incitypedesc"/>
+        <result property="oplevelcode" column="oplevelcode"/>
+        <result property="opleveldesc" column="opleveldesc"/>
+        <result property="opposition" column="opposition"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="isupload" column="isupload"/>
+        <result property="uploadTime" column="upload_time"/>
+        <result property="orgid" column="orgid"/>
+        <result property="pguid" column="pguid"/>
+        <result property="guid" column="guid"/>
+        <result property="pid" column="pid"/>
+        <result property="opercheckFlag" column="opercheck_flag"/>
+        <result property="longTaskReason" column="long_task_reason"/>
+    </resultMap>
+
     <sql id="selectPatArchiveVo">
         select notrequired_flag,
                notrequiredreason,
@@ -714,4 +815,128 @@
 
     </select>
 
+    <select id="selectOperList" parameterType="com.smartor.domain.PatMedOperation"
+            resultMap="PatMedOperationResult">
+        select
+        o.patid,
+        o.patcode,
+        o.paname,
+        o.opreqid,
+        o.opreqcode,
+        o.opsstatus,
+        o.optypecode,
+        o.optypename,
+        o.operatortime,
+        o.opreqtime,
+        o.reqdoccode,
+        o.reqdocname,
+        o.reqdeptcode,
+        o.reqdeptname,
+        o.reqloccode,
+        o.reqlocname,
+        o.remark,
+        o.surgeoncode,
+        o.surgeonname,
+        o.firasscode ,
+        o.firassname,
+        o.secasscode,
+        o.secassname ,
+        o.thrasscode,
+        o.thrassname,
+        o.endcancelname,
+        o.visittype,
+        o.status,
+        o.schemetime,
+        o.schemestatus,
+        o.del_flag,
+        o.update_by,
+        o.update_time,
+        o.create_by,
+        o.create_time,
+        o.isupload,
+        o.upload_time,
+        o.orgid ,
+        o.guid,
+        o.pguid,
+        o.pid ,
+        o.inhospstate,
+        o.patno,
+        o.patname,
+        o.visitid,
+        o.serialnum,
+        o.inhospno ,
+        o.hospitalname,
+        o.hospitalcode,
+        o.deptid ,
+        o.deptcode ,
+        o.deptname ,
+        o.hospitaldistrictcode,
+        o.hospitaldistrictname ,
+        o.roomno  ,
+        o.bed_no ,
+        o.drcode  ,
+        o.drname ,
+        o.nurse_id,
+        o.nurse_name ,
+        o.check_flag ,
+        o.long_task_reason,
+        o.opid ,
+        o.vopcode ,
+        o.opdesc,
+        o.oplevelcode ,
+        o.opleveldesc
+        from PAT_MED_OPERATION o
+        where 1=1
+        <if test="orgid != null and orgid != ''">
+            AND o.orgid = #{orgid}
+        </if>
+        <if test="lastStartTime != null and lastStartTime != ''">
+            and to_char(o.last_Update_Time, 'YYYY-MM-DD HH24:MI:SS') >= #{lastStartTime}
+        </if>
+        <if test="lastEndTime != null and lastEndTime != ''">
+            and to_char(o.last_Update_Time, 'YYYY-MM-DD HH24:MI:SS') &lt;= #{lastEndTime}
+        </if>
+    </select>
+
+    <select id="selectOperItemList" parameterType="com.smartor.domain.PatMedOperationItem"
+            resultMap="PatMedOperationItemResult">
+        select
+               oi.operationid,
+               oi.opid,
+               oi.opcode,
+               oi.opdesc,
+               oi.main_flag,
+               oi.incitypecode,
+               oi.incitypedesc,
+               oi.oplevelcode,
+               oi.opleveldesc,
+               oi.opposition,
+               oi.del_flag,
+               oi.update_by,
+               oi.update_time,
+               oi.create_by,
+               oi.create_time,
+               oi.isupload,
+               oi.upload_time,
+               oi.orgid,
+               oi.pguid,
+               oi.guid,
+               oi.pid,
+               oi.opercheck_flag,
+               oi.long_task_reason
+        from PAT_MED_OPERATION_ITEM oi
+        where 1=1
+        <if test="orgid != null and orgid != ''">
+            AND oi.orgid = #{orgid}
+        </if>
+        <if test="opid != null and opid != ''">
+            AND oi.opid = #{opid}
+        </if>
+        <if test="lastStartTime != null and lastStartTime != ''">
+            and to_char(oi.last_Update_Time, 'YYYY-MM-DD HH24:MI:SS') >= #{lastStartTime}
+        </if>
+        <if test="lastEndTime != null and lastEndTime != ''">
+            and to_char(oi.last_Update_Time, 'YYYY-MM-DD HH24:MI:SS') &lt;= #{lastEndTime}
+        </if>
+    </select>
 </mapper>
diff --git a/smartor/src/main/java/com/smartor/domain/PatMedOperation.java b/smartor/src/main/java/com/smartor/domain/PatMedOperation.java
index ba4c151..3aa232f 100644
--- a/smartor/src/main/java/com/smartor/domain/PatMedOperation.java
+++ b/smartor/src/main/java/com/smartor/domain/PatMedOperation.java
@@ -498,6 +498,12 @@
     @ApiModelProperty(value = "缁撴潫鎵嬫湳鏃堕棿")
     private Date endTime;
 
+    @ApiModelProperty(value = "鏈�鍚庡紑濮嬫椂闂�")
+    private String lastStartTime;
+
+    @ApiModelProperty(value = "鏈�鍚庣粨鏉熸椂闂�")
+    private String lastEndTime;
+
     /**
      * pageNum
      */
diff --git a/smartor/src/main/java/com/smartor/domain/PatMedOperationItem.java b/smartor/src/main/java/com/smartor/domain/PatMedOperationItem.java
index 4f916cc..d58c53f 100644
--- a/smartor/src/main/java/com/smartor/domain/PatMedOperationItem.java
+++ b/smartor/src/main/java/com/smartor/domain/PatMedOperationItem.java
@@ -146,6 +146,12 @@
     @Excel(name = "鐖禝D")
     private Long pid;
 
+    @ApiModelProperty(value = "鏈�鍚庡紑濮嬫椂闂�")
+    private String lastStartTime;
+
+    @ApiModelProperty(value = "鏈�鍚庣粨鏉熸椂闂�")
+    private String lastEndTime;
+
     /**
      * 鎵嬫湳闀挎湡浠诲姟锛屾槸鍚﹀鐞嗭細0鏈鐞�   1澶勭悊
      */

--
Gitblit v1.9.3