From 656d6f8029f8bf9b2daa9dcc89101a879a70b860 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期三, 03 十二月 2025 23:10:05 +0800
Subject: [PATCH] feat:优先添加执行人

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java |  221 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 186 insertions(+), 35 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
index abc7e5c..e764723 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
@@ -1,15 +1,13 @@
 package com.ruoyi.system.service.impl;
 
-import com.ruoyi.common.annotation.DataSource;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.common.enums.DataSourceType;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.system.domain.SysTask;
 import com.ruoyi.system.domain.SysTaskEmergency;
 import com.ruoyi.system.domain.VehicleInfo;
 import com.ruoyi.system.domain.vo.TaskCreateVO;
+import com.ruoyi.system.domain.vo.TaskUpdateVO;
 import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
 import com.ruoyi.system.mapper.SysTaskMapper;
 import com.ruoyi.system.service.ILegacyTransferSyncService;
@@ -18,8 +16,10 @@
 import com.ruoyi.system.mapper.LegacyTransferSyncMapper;
 import com.ruoyi.system.mapper.VehicleInfoMapper;
 import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.IWechatTaskNotifyService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -61,7 +61,12 @@
 
     @Autowired
     private ISysUserService sysUserService;
-    
+
+    @Autowired
+    private IWechatTaskNotifyService wechatTaskNotifyService;
+
+
+
     /**
      * 鍚屾鎸囧畾鏃ユ湡鑼冨洿鐨勬棫绯荤粺杞繍鍗曞埌鏂扮郴缁�
      * 
@@ -115,6 +120,8 @@
                     // 妫�鏌ユ槸鍚﹀凡鍚屾
                     if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
                         log.debug("杞繍鍗曞凡鍚屾锛岃烦杩�: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+                        //杩涜鏇存柊鎿嶄綔
+                        updateTransferOrder(serviceOrdID, dispatchOrdID, order);
                         continue;
                     }
                     
@@ -188,7 +195,71 @@
             return false;
         }
     }
-    
+
+    private boolean updateTransferOrder(String serviceOrdID, String dispatchOrdID, Map<String, Object> order){
+        log.info("寮�濮嬪悓姝ュ崟涓浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+        String sysTaskCode="";
+        try {
+            SysTaskEmergency emergency=sysTaskEmergencyMapper.selectByLegacyServiceOrdId(Long.parseLong(serviceOrdID));
+            if(emergency.getNeedResync().equals(1)){
+                log.info("鏂扮郴缁熼渶瑕佸悓姝ュ埌鏃х郴缁熼偅閲岋紝鎵�浠ヤ笉瑕佸悓姝ユ棫鏁版嵁鍒版柊绯荤粺,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+                return false;
+            }
+            // 鏋勯�燭askCreateVO瀵硅薄
+            TaskCreateVO createTaskVo = buildCreateTaskVo(serviceOrdID, dispatchOrdID, order);
+
+            sysTaskCode = createTaskVo.getTaskCode();
+            if (createTaskVo == null) {
+                log.error("鏋勯�燭askCreateVO澶辫触: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+                return false;
+            }
+
+            // 璁板綍鍒涘缓鐨勪换鍔′俊鎭�
+            log.debug("鍑嗗鍒涘缓浠诲姟: ServiceOrdID={}, DispatchOrdID={}, 鎮h�呭鍚�={}, 杞嚭鍖婚櫌={}, 杞叆鍖婚櫌={}",
+                    serviceOrdID, dispatchOrdID,
+                    createTaskVo.getPatient() != null ? createTaskVo.getPatient().getName() : "鏈煡",
+                    createTaskVo.getHospitalOut() != null ? createTaskVo.getHospitalOut().getName() : "鏈煡",
+                    createTaskVo.getHospitalIn() != null ? createTaskVo.getHospitalIn().getName() : "鏈煡");
+            /**
+             * 寮�鍗曟椂闂�
+             */
+            Date ServiceOrd_CC_Time= getDateValue(order, "ServiceOrd_CC_Time");
+            // 璋冪敤sysTaskService鍒涘缓浠诲姟
+            String serviceOrdClass = getStringValue(order,"ServiceOrdClass");
+            String serviceOrdNo = getStringValue(order,"ServiceOrdNo");
+
+            Integer oauserId=getIntegerValue(order,"ServiceOrd_NS_ID");
+            SysUser sysUser=sysUserService.selectUserByOaUserId(oauserId);
+            Long taskCreatorId=sysUser==null?null:sysUser.getUserId();
+            String createUserName=sysUser==null?"system":sysUser.getUserName();
+            SysDept dept=sysDeptService.selectDeptByServiceClass(serviceOrdClass);
+            Long deptId=dept==null?null:dept.getDeptId();
+            TaskUpdateVO updateTaskVo = new TaskUpdateVO();
+            BeanUtils.copyProperties(createTaskVo, updateTaskVo);
+
+
+            int result = sysTaskService.updateTask(updateTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
+
+            if (result > 0) {
+                log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, result);
+
+                try {
+                    notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
+                } catch (Exception e) {
+                    log.error("杞繍鍗曞悓姝ユ垚鍔熷悗鍙戦�佸井淇¢�氱煡澶辫触: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
+                }
+
+                return true;
+            } else {
+                log.error("杞繍鍗曞悓姝ュけ璐�: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+                return false;
+            }
+
+        } catch (Exception e) {
+            log.error("鍚屾鍗曚釜杞繍鍗曞紓甯�: ServiceOrdID={}, DispatchOrdID={},sysTaskCode:{}", serviceOrdID, dispatchOrdID,sysTaskCode, e);
+            return false;
+        }
+    }
     /**
      * 鍚屾鍗曚釜鏃х郴缁熻浆杩愬崟鍒版柊绯荤粺锛堝甫璇︾粏淇℃伅锛�
      * 
@@ -199,11 +270,11 @@
      */
     private boolean syncSingleTransferOrder(String serviceOrdID, String dispatchOrdID, Map<String, Object> order) {
         log.info("寮�濮嬪悓姝ュ崟涓浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
-        
+        String sysTaskCode="";
         try {
             // 鏋勯�燭askCreateVO瀵硅薄
             TaskCreateVO createTaskVo = buildCreateTaskVo(serviceOrdID, dispatchOrdID, order);
-            
+            sysTaskCode = createTaskVo.getTaskCode();
             if (createTaskVo == null) {
                 log.error("鏋勯�燭askCreateVO澶辫触: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                 return false;
@@ -215,10 +286,13 @@
                      createTaskVo.getPatient() != null ? createTaskVo.getPatient().getName() : "鏈煡",
                      createTaskVo.getHospitalOut() != null ? createTaskVo.getHospitalOut().getName() : "鏈煡",
                      createTaskVo.getHospitalIn() != null ? createTaskVo.getHospitalIn().getName() : "鏈煡");
-
+            /**
+             * 寮�鍗曟椂闂�
+             */
             Date ServiceOrd_CC_Time= getDateValue(order, "ServiceOrd_CC_Time");
             // 璋冪敤sysTaskService鍒涘缓浠诲姟
             String serviceOrdClass = getStringValue(order,"ServiceOrdClass");
+            String serviceOrdNo = getStringValue(order,"ServiceOrdNo");
 
             Integer oauserId=getIntegerValue(order,"ServiceOrd_NS_ID");
             SysUser sysUser=sysUserService.selectUserByOaUserId(oauserId);
@@ -227,10 +301,17 @@
             SysDept dept=sysDeptService.selectDeptByServiceClass(serviceOrdClass);
             Long deptId=dept==null?null:dept.getDeptId();
 
-            int result = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
+            int result = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
 
             if (result > 0) {
                 log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, result);
+
+                try {
+                    notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
+                } catch (Exception e) {
+                    log.error("杞繍鍗曞悓姝ユ垚鍔熷悗鍙戦�佸井淇¢�氱煡澶辫触: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
+                }
+
                 return true;
             } else {
                 log.error("杞繍鍗曞悓姝ュけ璐�: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
@@ -238,7 +319,7 @@
             }
             
         } catch (Exception e) {
-            log.error("鍚屾鍗曚釜杞繍鍗曞紓甯�: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
+            log.error("鍚屾鍗曚釜杞繍鍗曞紓甯�: ServiceOrdID={}, DispatchOrdID={},sysTaskCode:{}", serviceOrdID, dispatchOrdID,sysTaskCode, e);
             return false;
         }
     }
@@ -288,7 +369,16 @@
             return false;
         }
     }
-    
+
+    private String getServiceOrdCode(Date ServiceOrd_CC_Time,String serviceOrdClass,String serviceOrdNo){
+        //BF20251101-serviceOrdNo;
+        //灏� ServiceOrd_CC_Time 杞负 yyyyMMdd 鏍煎紡
+        String ServiceOrd_CC_Time_Str= DateUtils.parseDateToStr(DateUtils.YYYYMMDD,ServiceOrd_CC_Time);
+        //serviceOrdNo 杩欎釜鏄暟瀛楋紝鍥哄畾3浣嶆暟 锛屽皢32锛岃浆鎴�032锛涘皢1杞垚001
+        Integer intServiceNo=Integer.valueOf(serviceOrdNo);
+        String ServiceOrdNo_Str=String.format("%03d", intServiceNo);
+        return serviceOrdClass+ServiceOrd_CC_Time_Str+"-"+ServiceOrdNo_Str;
+    }
     /**
      * 鏋勯�燭askCreateVO瀵硅薄鐢ㄤ簬鍒涘缓浠诲姟
      * 
@@ -312,18 +402,17 @@
                 log.error("鏈嶅姟鍗旾D涓嶈兘涓虹┖");
                 return null;
             }
-            
+            String serviceOrdClass = getStringValue(order, "ServiceOrdClass");
+            //TODO
             TaskCreateVO createTaskVo = new TaskCreateVO();
-            String Old_ServiceOrdID_TXT=getStringValue(order,"Old_ServiceOrdID_TXT");
-            if(Old_ServiceOrdID_TXT!=null){
-                createTaskVo.setTaskCode(Old_ServiceOrdID_TXT);
-            }
-            
+            String serviceOrdCode=this.getServiceOrdCode(getDateValue(order, "ServiceOrd_CC_Time"),serviceOrdClass,getStringValue(order, "ServiceOrdNo"));
+            createTaskVo.setTaskCode(serviceOrdCode);
+            log.info("鏋勯�燭askCreateVO: ServiceOrdID={}, DispatchOrdID={},taskCode:{}", serviceOrdID, dispatchOrdID,serviceOrdCode);
             // 璁剧疆鍩烘湰淇℃伅
             createTaskVo.setTaskType("EMERGENCY_TRANSFER"); // 鎬ユ晳杞繍浠诲姟
             
             // 璁剧疆鍗曟嵁绫诲瀷鍜屼换鍔$被鍨婭D锛堜粠鏃х郴缁熷瓧娈垫槧灏勶級
-            String serviceOrdClass = getStringValue(order, "ServiceOrdClass");
+
             if (StringUtils.isNotEmpty(serviceOrdClass)) {
                 createTaskVo.setDocumentTypeId(serviceOrdClass);
             }
@@ -335,18 +424,10 @@
             
             // 璁剧疆鍖哄煙绫诲瀷
             String serviceOrdAreaType = getStringValue(order, "ServiceOrdAreaType");
-            if (StringUtils.isNotEmpty(serviceOrdAreaType)) {
-                // 鍙互鏍规嵁闇�瑕佸皢鍖哄煙绫诲瀷鏄犲皠鍒癟askCreateVO鐨勫叾浠栧瓧娈�
-                log.debug("鍖哄煙绫诲瀷: {}", serviceOrdAreaType);
-            }
-            
+
             // 璁剧疆鐢ㄦ埛ID
             Long serviceOrdUserID = getLongValue(order, "ServiceOrdUserID");
-            if (serviceOrdUserID != null) {
-                // 鍙互鏍规嵁闇�瑕佸皢鐢ㄦ埛ID鏄犲皠鍒癟askCreateVO鐨勫叾浠栧瓧娈�
-                log.debug("鐢ㄦ埛ID: {}", serviceOrdUserID);
-            }
-            
+
             // 璁剧疆鎮h�呬俊鎭�
             TaskCreateVO.PatientInfo patientInfo = new TaskCreateVO.PatientInfo();
             patientInfo.setName(getStringValue(order, "ServiceOrdPtName"));
@@ -390,9 +471,6 @@
 
 
             String hospitalOutDeptId = getStringValue(order, "ServiceOrdPtServicesID");
-
-            //杞嚭搴婁綅
-            String serviceOrdPtServices=getStringValue(order, "ServiceOrdPtServices");
             hospitalOutInfo.setDepartmentId(hospitalOutDeptId);
             if (StringUtils.isNotEmpty(hospitalOutDeptId)) {
                 String hospitalOutDeptName = legacyTransferSyncMapper.selectDepartmentNameByDeptID(hospitalOutDeptId);
@@ -400,6 +478,8 @@
                     hospitalOutInfo.setDepartment(hospitalOutDeptName);
                 }
             }
+            //杞嚭搴婁綅
+            String serviceOrdPtServices=getStringValue(order, "ServiceOrdPtServices");
             if(serviceOrdPtServices!= null){
                 hospitalOutInfo.setBedNumber(serviceOrdPtServices);
             }
@@ -437,7 +517,7 @@
             createTaskVo.setHospitalIn(hospitalInInfo);
             
             // 璁剧疆鍦板潃淇℃伅
-            createTaskVo.setDepartureAddress(getStringValue(order, "ServiceOrdTraVia"));
+            createTaskVo.setDepartureAddress(getStringValue(order, "ServiceOrdTraStreet"));
             createTaskVo.setDestinationAddress(getStringValue(order, "ServiceOrdTraEnd"));
             
             // 璁剧疆浠锋牸鍜岃窛绂讳俊鎭�
@@ -447,6 +527,9 @@
             // 璁剧疆鎵ц浜轰俊鎭�
             List<TaskCreateVO.AssigneeInfo> assignees = queryAssignees(dispatchOrdID);
             createTaskVo.setAssignees(assignees);
+            if(!assignees.isEmpty()){
+                createTaskVo.setAssigneeId(assignees.get(0).getUserId());
+            }
             
             // 璁剧疆杞﹁締淇℃伅
             // 杞﹁締ID闇�瑕佹牴鎹瓺ispatchOrdCarID鏌ヨ鑾峰彇
@@ -526,7 +609,7 @@
 
 
             
-            // 璁剧疆鍒涘缓鏃堕棿
+            // 璁剧疆鍒涘缓鏃堕棿 寮�鍗曟棩鏈�
             Date createTime = getDateValue(order, "ServiceOrd_CC_Time");
             if (createTime != null) {
                 createTaskVo.setCreateTime(createTime);
@@ -578,7 +661,7 @@
             if (assigneeList != null && !assigneeList.isEmpty()) {
                 for (Map<String, Object> assigneeMap : assigneeList) {
                     String entourageOAId = getStringValue(assigneeMap, "EntourageOAId");
-                    String entourageState = getStringValue(assigneeMap, "EntourageState");
+                    String entourageState = getStringValue(assigneeMap, "EntourageID");
                     
                     if (StringUtils.isNotEmpty(entourageOAId)) {
                         try {
@@ -767,4 +850,72 @@
             return false;
         }
     }
-}
\ No newline at end of file
+
+    private void notifyTransferOrderByWechat(Long taskId,
+                                             String serviceOrdID,
+                                             String dispatchOrdID,
+                                             String serviceOrdNo,
+                                             Date serviceOrdCcTime,
+                                             SysDept dept,
+                                             Map<String, Object> order) {
+        try {
+            // 鑾峰彇閫氱煡鎺ユ敹浜哄垪琛�
+            List<SysUser> receivers = getWechatNotifyUsers(dispatchOrdID, dept);
+            if (receivers == null || receivers.isEmpty()) {
+                log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟鏃犲彲鐢ㄥ井淇℃帴鏀朵汉锛宼askId={}", taskId);
+                return;
+            }
+
+            // 鎻愬彇鎺ユ敹浜� ID 鍒楄〃
+            List<Long> userIds = new ArrayList<>();
+            for (SysUser user : receivers) {
+                if (user != null && user.getUserId() != null) {
+                    userIds.add(user.getUserId());
+                }
+            }
+
+            // 璋冪敤缁熶竴鐨勫井淇¢�氱煡鏈嶅姟
+            int successCount = wechatTaskNotifyService.sendTaskNotifyMessage(taskId, userIds);
+            log.info("鏃х郴缁熷悓姝ヨ浆杩愬崟寰俊閫氱煡鍙戦�佸畬鎴愶紝taskId={}, 鎴愬姛={}", taskId, successCount);
+        } catch (Exception e) {
+            log.error("notifyTransferOrderByWechat鍙戠敓寮傚父, serviceOrdID={}, dispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
+        }
+    }
+
+    private List<SysUser> getWechatNotifyUsers(String dispatchOrdID, SysDept dept) {
+        try {
+            List<SysUser> result = new ArrayList<>();
+
+            List<TaskCreateVO.AssigneeInfo> assignees = queryAssignees(dispatchOrdID);
+            if (assignees != null && !assignees.isEmpty()) {
+                for (TaskCreateVO.AssigneeInfo assigneeInfo : assignees) {
+                    if (assigneeInfo == null || assigneeInfo.getUserId() == null) {
+                        continue;
+                    }
+                    SysUser user = sysUserService.selectUserById(assigneeInfo.getUserId());
+                    if (user != null && StringUtils.isNotEmpty(user.getOpenId())) {
+                        result.add(user);
+                    }
+                }
+            }
+
+            if (!result.isEmpty()) {
+                return result;
+            }
+
+            if (dept == null || StringUtils.isEmpty(dept.getPhone())) {
+                return result;
+            }
+
+            SysUser leader = sysUserService.selectUserByPhonenumber(dept.getPhone());
+            if (leader != null && StringUtils.isNotEmpty(leader.getOpenId())) {
+                result.add(leader);
+            }
+
+            return result;
+        } catch (Exception e) {
+            log.error("鑾峰彇鏃х郴缁熷悓姝ヨ浆杩愬崟寰俊閫氱煡鎺ユ敹浜哄け璐�, dispatchOrdID={}", dispatchOrdID, e);
+            return new ArrayList<>();
+        }
+    }
+}

--
Gitblit v1.9.1