wlzboy
2 天以前 8cb5d3440208a3be3e772e65f1bd0ec63031ba62
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
@@ -1,15 +1,15 @@
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.MapValueUtils;
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.enums.TaskStatus;
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;
@@ -19,9 +19,10 @@
import com.ruoyi.system.mapper.VehicleInfoMapper;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.IWechatTaskNotifyService;
import org.apache.poi.ss.usermodel.DateUtil;
import com.ruoyi.system.utils.TaskStatusConverter;
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;
@@ -31,7 +32,6 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
/**
 * 旧系统转运单同步Service业务层处理
@@ -67,7 +67,9 @@
    @Autowired
    private IWechatTaskNotifyService wechatTaskNotifyService;
    /**
     * 同步指定日期范围的旧系统转运单到新系统
     * 
@@ -106,11 +108,11 @@
            for (Map<String, Object> order : transferOrders) {
                processedCount++;
                try {
                    String serviceOrdID = getStringValue(order, "ServiceOrdID");
                    String dispatchOrdID = getStringValue(order, "DispatchOrdID");
                    Long serviceOrdID = MapValueUtils.getLongValue(order, "ServiceOrdID");
                    Long dispatchOrdID = MapValueUtils.getLongValue(order, "DispatchOrdID");
                    
                    // 检查参数有效性
                    if (StringUtils.isEmpty(serviceOrdID)) {
                    if (serviceOrdID==null || serviceOrdID<=0) {
                        log.warn("第{}条数据服务单ID为空,跳过处理", processedCount);
                        continue;
                    }
@@ -121,6 +123,8 @@
                    // 检查是否已同步
                    if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
                        log.debug("转运单已同步,跳过: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                        //进行更新操作
                        updateTransferOrder(serviceOrdID, dispatchOrdID, order);
                        continue;
                    }
                    
@@ -138,8 +142,8 @@
                    break;
                } catch (Exception e) {
                    log.error("同步单个转运单失败: ServiceOrdID={}, DispatchOrdID={}", 
                             getStringValue(order, "ServiceOrdID"),
                             getStringValue(order, "DispatchOrdID"), e);
                             MapValueUtils.getStringValue(order, "ServiceOrdID"),
                             MapValueUtils.getStringValue(order, "DispatchOrdID"), e);
                }
            }
            
@@ -160,31 +164,35 @@
     * @return 是否同步成功
     */
    @Override
    public boolean syncSingleTransferOrder(String serviceOrdID, String dispatchOrdID) {
        log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
    public boolean syncSingleTransferOrder(Long serviceOrdID, Long dispatchOrdID) {
//        log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
        
        try {
            // 检查参数有效性
            if (StringUtils.isEmpty(serviceOrdID)) {
            if (serviceOrdID == null || serviceOrdID <= 0) {
                log.error("服务单ID不能为空");
                return false;
            }
            
            List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrdersByIDs(serviceOrdID, dispatchOrdID);
            Map<String, Object> order = transferOrders.get(0);
            // 检查是否已同步
            if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
                log.info("转运单已同步,跳过: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
//                log.info("转运单已同步,跳过: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                updateTransferOrder(serviceOrdID, dispatchOrdID, order);
                return true;
            }
            
            // 直接查询指定的转运单信息
            List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrdersByIDs(serviceOrdID, dispatchOrdID);
            if (transferOrders == null || transferOrders.isEmpty()) {
                log.error("未查询到对应的转运单信息: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                return false;
            }
            Map<String, Object> order = transferOrders.get(0);
            
            // 同步单个转运单
            return syncSingleTransferOrder(serviceOrdID, dispatchOrdID, order);
@@ -194,7 +202,87 @@
            return false;
        }
    }
    /**
     * 更新单个转运单
     * @param serviceOrdID
     * @param dispatchOrdID
     * @param order
     * @return
     */
    private boolean updateTransferOrder(Long serviceOrdID, Long dispatchOrdID, Map<String, Object> order){
//        log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
        String sysTaskCode="";
        try {
            SysTaskEmergency emergency=sysTaskEmergencyMapper.selectByLegacyServiceOrdId(serviceOrdID);
            if(emergency.getNeedResync().equals(1)){
                log.info("新系统需要同步到旧系统那里,所以不要同步旧数据到新系统,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                return false;
            }
            // 构造TaskCreateVO对象
            TaskCreateVO createTaskVo = buildCreateTaskVo(serviceOrdID, dispatchOrdID, order);
            if (createTaskVo == null) {
                log.error("构造TaskCreateVO失败: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                return false;
            }
            sysTaskCode = createTaskVo.getTaskCode();
            // 记录创建的任务信息
//            log.debug("准备创建任务: ServiceOrdID={}, DispatchOrdID={}, 患者姓名={}, 转出医院={}, 转入医院={}",
//                    serviceOrdID, dispatchOrdID,
//                    createTaskVo.getPatient() != null ? createTaskVo.getPatient().getName() : "未知",
//                    createTaskVo.getHospitalOut() != null ? createTaskVo.getHospitalOut().getName() : "未知",
//                    createTaskVo.getHospitalIn() != null ? createTaskVo.getHospitalIn().getName() : "未知");
            /**
             * 开单时间
             */
            Date ServiceOrd_CC_Time= MapValueUtils.getDateValue(order, "ServiceOrd_CC_Time");
            // 调用sysTaskService创建任务
            String serviceOrdClass = MapValueUtils.getStringValue(order,"ServiceOrdClass");
            String serviceOrdNo = MapValueUtils.getStringValue(order,"ServiceOrdNo");
            Integer oauserId=MapValueUtils.getIntegerValue(order,"ServiceOrd_CC_ID");
            if(oauserId==null){
                oauserId=MapValueUtils.getIntegerValue(order,"ServiceOrd_NS_ID");
            }
            if(oauserId==null || oauserId==0) {
                log.error("创建任务时,获取创建人信息失败,serviceOrdID={}, DispatchOrdID={} ServiceOrd_NS_ID={},ServiceOrd_CC_ID={}", serviceOrdID, dispatchOrdID, MapValueUtils.getIntegerValue(order, "ServiceOrd_NS_ID"), MapValueUtils.getIntegerValue(order, "ServiceOrd_CC_ID"));
                return false;
            }
            SysUser sysUser=sysUserService.selectUserByOaUserId(oauserId);
            Long taskCreatorId=sysUser==null?null:sysUser.getUserId();
            String createUserName=sysUser==null?"system":sysUser.getUserName();
            if(taskCreatorId==null || createUserName==null){
                log.error("创建任务时,获取创建人信息失败,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                return false;
            }
            SysDept dept=sysDeptService.selectDeptByServiceClass(serviceOrdClass);
            Long deptId=dept==null?null:dept.getDeptId();
            TaskUpdateVO updateTaskVo = new TaskUpdateVO();
            BeanUtils.copyProperties(createTaskVo, updateTaskVo);
//            log.info("开始保存转运任务,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
            int result = sysTaskService.updateTask(updateTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
            if (result > 0) {
//                log.info("转运单同步成功: ServiceOrdID={}, DispatchOrdID={}, 创建的任务ID={}", 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;
        }
    }
    /**
     * 同步单个旧系统转运单到新系统(带详细信息)
     * 
@@ -203,43 +291,55 @@
     * @param order 转运单详细信息
     * @return 是否同步成功
     */
    private boolean syncSingleTransferOrder(String serviceOrdID, String dispatchOrdID, Map<String, Object> order) {
        log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
    private boolean syncSingleTransferOrder(Long serviceOrdID, Long dispatchOrdID, Map<String, Object> order) {
//        log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
        String sysTaskCode="";
        try {
            // 构造TaskCreateVO对象
            TaskCreateVO createTaskVo = buildCreateTaskVo(serviceOrdID, dispatchOrdID, order);
            sysTaskCode = createTaskVo.getTaskCode();
            if (createTaskVo == null) {
                log.error("构造TaskCreateVO失败: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                return false;
            }
            sysTaskCode = createTaskVo.getTaskCode();
            // 记录创建的任务信息
            log.debug("准备创建任务: ServiceOrdID={}, DispatchOrdID={}, 患者姓名={}, 转出医院={}, 转入医院={}",
                     serviceOrdID, dispatchOrdID,
                     createTaskVo.getPatient() != null ? createTaskVo.getPatient().getName() : "未知",
                     createTaskVo.getHospitalOut() != null ? createTaskVo.getHospitalOut().getName() : "未知",
                     createTaskVo.getHospitalIn() != null ? createTaskVo.getHospitalIn().getName() : "未知");
//            log.debug("准备创建任务: ServiceOrdID={}, DispatchOrdID={}, 患者姓名={}, 转出医院={}, 转入医院={}",
//                     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");
            Date ServiceOrd_CC_Time= MapValueUtils.getDateValue(order, "ServiceOrd_CC_Time");
            // 调用sysTaskService创建任务
            String serviceOrdClass = getStringValue(order,"ServiceOrdClass");
            String serviceOrdNo = getStringValue(order,"ServiceOrdNo");
            String serviceOrdClass = MapValueUtils.getStringValue(order,"ServiceOrdClass");
            String serviceOrdNo = MapValueUtils.getStringValue(order,"ServiceOrdNo");
            Integer oauserId=getIntegerValue(order,"ServiceOrd_NS_ID");
            /**
             * 创建人ID
             */
            Integer oauserId=MapValueUtils.getIntegerValue(order,"ServiceOrd_CC_ID");
            if(oauserId==null || oauserId==0) {
                oauserId=MapValueUtils.getIntegerValue(order,"ServiceOrd_NS_ID");
            }
            SysUser sysUser=sysUserService.selectUserByOaUserId(oauserId);
            Long taskCreatorId=sysUser==null?null:sysUser.getUserId();
            String createUserName=sysUser==null?"system":sysUser.getUserName();
            if(sysUser==null) {
                log.error("创建任务时,获取创建人信息失败,serviceOrdID={}, DispatchOrdID={} ServiceOrd_CC_ID:{},ServiceOrd_NS_ID:{}", serviceOrdID, dispatchOrdID, MapValueUtils.getIntegerValue(order, "ServiceOrd_CC_ID"), MapValueUtils.getIntegerValue(order, "ServiceOrd_NS_ID"));
                return false;
            }
            Long taskCreatorId= sysUser.getUserId();
            String createUserName= sysUser.getUserName();
            SysDept dept=sysDeptService.selectDeptByServiceClass(serviceOrdClass);
            Long deptId=dept==null?null:dept.getDeptId();
            int result = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
            if (result > 0) {
                log.info("转运单同步成功: ServiceOrdID={}, DispatchOrdID={}, 创建的任务ID={}", serviceOrdID, dispatchOrdID, result);
//                log.info("转运单同步成功: ServiceOrdID={}, DispatchOrdID={}, 创建的任务ID={}", serviceOrdID, dispatchOrdID, result);
                try {
                    notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
@@ -267,10 +367,10 @@
     * @return 是否已同步
     */
    @Override
    public boolean isTransferOrderSynced(String serviceOrdID, String dispatchOrdID) {
    public boolean isTransferOrderSynced(Long serviceOrdID, Long dispatchOrdID) {
        try {
            // 检查参数有效性
            if (StringUtils.isEmpty(serviceOrdID)) {
            if (serviceOrdID == null || serviceOrdID<=0) {
                log.warn("服务单ID不能为空");
                return false;
            }
@@ -279,7 +379,7 @@
            // 条件:legacy_service_ord_id = serviceOrdID 或 legacy_dispatch_ord_id = dispatchOrdID
            
            try {
                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyServiceOrdId(Long.valueOf(serviceOrdID));
                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyServiceOrdId(serviceOrdID);
                if (emergency != null) {
                    return true;
                }
@@ -287,9 +387,9 @@
                log.warn("服务单ID不是有效数字: {}", serviceOrdID);
            }
            
            if (StringUtils.isNotEmpty(dispatchOrdID)) {
            if (dispatchOrdID>0) {
                try {
                    SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyDispatchOrdId(Long.valueOf(dispatchOrdID));
                    SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyDispatchOrdId(dispatchOrdID);
                    if (emergency != null) {
                        return true;
                    }
@@ -314,6 +414,8 @@
        String ServiceOrdNo_Str=String.format("%03d", intServiceNo);
        return serviceOrdClass+ServiceOrd_CC_Time_Str+"-"+ServiceOrdNo_Str;
    }
    /**
     * 构造TaskCreateVO对象用于创建任务
     * 
@@ -323,8 +425,8 @@
     * @return TaskCreateVO对象
     */
    @Override
    public TaskCreateVO buildCreateTaskVo(String serviceOrdID, String dispatchOrdID, Map<String, Object> order) {
        log.info("构造TaskCreateVO: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
    public TaskCreateVO buildCreateTaskVo(Long serviceOrdID, Long dispatchOrdID, Map<String, Object> order) {
//        log.info("构造TaskCreateVO: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
        try {
            // 检查参数有效性
@@ -333,16 +435,16 @@
                return null;
            }
            
            if (StringUtils.isEmpty(serviceOrdID)) {
            if (serviceOrdID==null || serviceOrdID<=0) {
                log.error("服务单ID不能为空");
                return null;
            }
            String serviceOrdClass = getStringValue(order, "ServiceOrdClass");
            //TODO
            String serviceOrdClass = MapValueUtils.getStringValue(order, "ServiceOrdClass");
            TaskCreateVO createTaskVo = new TaskCreateVO();
            String serviceOrdCode=this.getServiceOrdCode(getDateValue(order, "ServiceOrd_CC_Time"),serviceOrdClass,getStringValue(order, "ServiceOrdNo"));
            String serviceOrdCode=this.getServiceOrdCode(MapValueUtils.getDateValue(order, "ServiceOrd_CC_Time"),serviceOrdClass,MapValueUtils.getStringValue(order, "ServiceOrdNo"));
            createTaskVo.setTaskCode(serviceOrdCode);
            log.info("构造TaskCreateVO: ServiceOrdID={}, DispatchOrdID={},taskCode:{}", serviceOrdID, dispatchOrdID,serviceOrdCode);
//            log.info("构造TaskCreateVO: ServiceOrdID={}, DispatchOrdID={},taskCode:{}", serviceOrdID, dispatchOrdID,serviceOrdCode);
            // 设置基本信息
            createTaskVo.setTaskType("EMERGENCY_TRANSFER"); // 急救转运任务
            
@@ -352,34 +454,26 @@
                createTaskVo.setDocumentTypeId(serviceOrdClass);
            }
            
            String serviceOrdType = getStringValue(order, "ServiceOrdType");
            String serviceOrdType = MapValueUtils.getStringValue(order, "ServiceOrdType");
            if (StringUtils.isNotEmpty(serviceOrdType)) {
                createTaskVo.setTaskTypeId(serviceOrdType);
            }
            
            // 设置区域类型
            String serviceOrdAreaType = getStringValue(order, "ServiceOrdAreaType");
            if (StringUtils.isNotEmpty(serviceOrdAreaType)) {
                // 可以根据需要将区域类型映射到TaskCreateVO的其他字段
                log.debug("区域类型: {}", serviceOrdAreaType);
            }
            String serviceOrdAreaType = MapValueUtils.getStringValue(order, "ServiceOrdAreaType");
            // 设置用户ID
            Long serviceOrdUserID = getLongValue(order, "ServiceOrdUserID");
            if (serviceOrdUserID != null) {
                // 可以根据需要将用户ID映射到TaskCreateVO的其他字段
                log.debug("用户ID: {}", serviceOrdUserID);
            }
            Long serviceOrdUserID = MapValueUtils.getLongValue(order, "ServiceOrdUserID");
            // 设置患者信息
            TaskCreateVO.PatientInfo patientInfo = new TaskCreateVO.PatientInfo();
            patientInfo.setName(getStringValue(order, "ServiceOrdPtName"));
            patientInfo.setPhone(getStringValue(order, "ServiceOrdCoPhone"));
            patientInfo.setIdCard(getStringValue(order, "ServiceOrdPtIDCard"));
            patientInfo.setCondition(getStringValue(order, "ServiceOrdPtCondition"));
            patientInfo.setContact(getStringValue(order, "ServiceOrdCoName"));
            patientInfo.setName(MapValueUtils.getStringValue(order, "ServiceOrdPtName"));
            patientInfo.setPhone(MapValueUtils.getStringValue(order, "ServiceOrdCoPhone"));
            patientInfo.setIdCard(MapValueUtils.getStringValue(order, "ServiceOrdPtIDCard"));
            patientInfo.setCondition(MapValueUtils.getStringValue(order, "ServiceOrdPtCondition"));
            patientInfo.setContact(MapValueUtils.getStringValue(order, "ServiceOrdCoName"));
            String serviceOrdPtSex = getStringValue(order, "ServiceOrdPtSex");
            String serviceOrdPtSex = MapValueUtils.getStringValue(order, "ServiceOrdPtSex");
            if(serviceOrdPtSex!=null){
                if(serviceOrdPtSex.equals("男")){
                    patientInfo.setGender("male");
@@ -389,7 +483,7 @@
            }
            createTaskVo.setPatient(patientInfo);
            //1000公里,提取数字
            String ServiceOrdTraDistance=getStringValue(order, "ServiceOrdTraDistance");
            String ServiceOrdTraDistance=MapValueUtils.getStringValue(order, "ServiceOrdTraDistance");
            if(ServiceOrdTraDistance!=null){
                ServiceOrdTraDistance=ServiceOrdTraDistance.replaceAll("[^0-9]", "");
                createTaskVo.setDistance(new BigDecimal(ServiceOrdTraDistance));
@@ -399,7 +493,7 @@
            // 设置转出医院信息
            TaskCreateVO.HospitalInfo hospitalOutInfo = new TaskCreateVO.HospitalInfo();
            Long hospitalOutId = getLongValue(order, "ServiceOrdPtOutHospID");
            Long hospitalOutId = MapValueUtils.getLongValue(order, "ServiceOrdPtOutHospID");
            hospitalOutInfo.setId(hospitalOutId);
            if (hospitalOutId != null) {
                String hospitalOutName = legacyTransferSyncMapper.selectHospitalNameByHospID(hospitalOutId.toString());
@@ -407,16 +501,13 @@
                    hospitalOutInfo.setName(hospitalOutName);
                }
            }
            String ServiceOrdTraVia=getStringValue(order, "ServiceOrdTraVia");
            String ServiceOrdTraVia=MapValueUtils.getStringValue(order, "ServiceOrdTraVia");
            if(ServiceOrdTraVia!=null){
                hospitalOutInfo.setAddress(ServiceOrdTraVia);
            }
            String hospitalOutDeptId = getStringValue(order, "ServiceOrdPtServicesID");
            //转出床位
            String serviceOrdPtServices=getStringValue(order, "ServiceOrdPtServices");
            String hospitalOutDeptId = MapValueUtils.getStringValue(order, "ServiceOrdPtServicesID");
            hospitalOutInfo.setDepartmentId(hospitalOutDeptId);
            if (StringUtils.isNotEmpty(hospitalOutDeptId)) {
                String hospitalOutDeptName = legacyTransferSyncMapper.selectDepartmentNameByDeptID(hospitalOutDeptId);
@@ -424,6 +515,8 @@
                    hospitalOutInfo.setDepartment(hospitalOutDeptName);
                }
            }
            //转出床位
            String serviceOrdPtServices=MapValueUtils.getStringValue(order, "ServiceOrdPtServices");
            if(serviceOrdPtServices!= null){
                hospitalOutInfo.setBedNumber(serviceOrdPtServices);
            }
@@ -431,7 +524,7 @@
            
            // 设置转入医院信息
            TaskCreateVO.HospitalInfo hospitalInInfo = new TaskCreateVO.HospitalInfo();
            Long hospitalInId = getLongValue(order, "ServiceOrdPtInHospID");
            Long hospitalInId = MapValueUtils.getLongValue(order, "ServiceOrdPtInHospID");
            hospitalInInfo.setId(hospitalInId);
            if (hospitalInId != null) {
                String hospitalInName = legacyTransferSyncMapper.selectHospitalNameByHospID(hospitalInId.toString());
@@ -439,18 +532,18 @@
                    hospitalInInfo.setName(hospitalInName);
                }
            }
            String DispatchOrdTraEnd = getStringValue(order, "DispatchOrdTraEnd");
            if(DispatchOrdTraEnd!= null){
                hospitalInInfo.setAddress(DispatchOrdTraEnd);
            String serviceOrdTraEnd = MapValueUtils.getStringValue(order, "ServiceOrdTraEnd");
            if(serviceOrdTraEnd!= null){
                hospitalInInfo.setAddress(serviceOrdTraEnd);
            }
            //转入床位
            String serviceOrdPtInServices =getStringValue(order, "ServiceOrdPtInServices");
            String serviceOrdPtInServices =MapValueUtils.getStringValue(order, "ServiceOrdPtInServices");
            if(serviceOrdPtInServices!= null){
                hospitalInInfo.setBedNumber(serviceOrdPtInServices);
            }
            String hospitalInDeptId = getStringValue(order, "ServiceOrdPtInServicesID");
            String hospitalInDeptId = MapValueUtils.getStringValue(order, "ServiceOrdPtInServicesID");
            hospitalInInfo.setDepartmentId(hospitalInDeptId);
            if (StringUtils.isNotEmpty(hospitalInDeptId)) {
                String hospitalInDeptName = legacyTransferSyncMapper.selectDepartmentNameByDeptID(hospitalInDeptId);
@@ -461,25 +554,30 @@
            createTaskVo.setHospitalIn(hospitalInInfo);
            
            // 设置地址信息
            createTaskVo.setDepartureAddress(getStringValue(order, "ServiceOrdTraVia"));
            createTaskVo.setDestinationAddress(getStringValue(order, "ServiceOrdTraEnd"));
            createTaskVo.setDepartureAddress(MapValueUtils.getStringValue(order, "ServiceOrdTraStreet"));
            createTaskVo.setDestinationAddress(MapValueUtils.getStringValue(order, "ServiceOrdTraEnd"));
            
            // 设置价格和距离信息
            createTaskVo.setPrice(getBigDecimalValue(order, "ServiceOrdTraTxnPrice"));
            createTaskVo.setPrice(MapValueUtils.getBigDecimalValue(order, "ServiceOrdTraTxnPrice"));
            // 距离信息需要从其他字段计算或获取
            // 设置执行人信息
            List<TaskCreateVO.AssigneeInfo> assignees = queryAssignees(dispatchOrdID);
            createTaskVo.setAssignees(assignees);
            if(dispatchOrdID!=null) {
                // 设置执行人信息
                List<TaskCreateVO.AssigneeInfo> assignees = queryAssignees(dispatchOrdID);
                createTaskVo.setAssignees(assignees);
                if (!assignees.isEmpty()) {
                    createTaskVo.setAssigneeId(assignees.get(0).getUserId());
                }
            }
            // 设置车辆信息
            // 车辆ID需要根据DispatchOrdCarID查询获取
            String carID = getStringValue(order, "DispatchOrdCarID");
            String carID = MapValueUtils.getStringValue(order, "DispatchOrdCarID");
            if (StringUtils.isNotEmpty(carID)) {
                String carLicense = legacyTransferSyncMapper.selectCarLicenseByCarID(carID);
                if (StringUtils.isNotEmpty(carLicense)) {
                    // 根据车牌号查询新系统中的车辆ID
                    log.debug("车辆车牌号: {}", carLicense);
                    log.info("转运任务,ServiceOrdID:{},车辆车牌:{}",serviceOrdID,carLicense);
//                    log.debug("车辆车牌号: {}", carLicense);
                    
                    // 首先尝试通过VehicleInfoMapper查询车辆信息
                    try {
@@ -491,7 +589,7 @@
                            List<Long> vehicleIds = new ArrayList<>();
                            vehicleIds.add(vehicleInfo.getVehicleId());
                            createTaskVo.setVehicleIds(vehicleIds);
                            log.debug("通过car_id找到车辆信息: vehicle_id={}, vehicle_no={}", vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
//                            log.debug("通过car_id找到车辆信息: vehicle_id={}, vehicle_no={}", vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
                        } else {
                            // 如果通过car_id找不到,尝试通过车牌号查询
                            vehicleInfo = vehicleInfoMapper.selectVehicleInfoByVehicleNo(carLicense);
@@ -499,9 +597,9 @@
                                List<Long> vehicleIds = new ArrayList<>();
                                vehicleIds.add(vehicleInfo.getVehicleId());
                                createTaskVo.setVehicleIds(vehicleIds);
                                log.debug("通过车牌号找到车辆信息: vehicle_id={}, vehicle_no={}", vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
                                log.debug("转运任务,ServiceOrdID:{} 通过车牌号找到车辆信息: vehicle_id={}, vehicle_no={}",serviceOrdID, vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
                            } else {
                                log.warn("未找到对应的车辆信息: car_id={}, vehicle_no={}", carID, carLicense);
                                log.warn("转运任务,ServiceOrdID:{} 未找到对应的车辆信息: car_id={}, vehicle_no={}",serviceOrdID, carID, carLicense);
                            }
                        }
                    } catch (NumberFormatException e) {
@@ -521,29 +619,30 @@
            }
            
            // 设置其他信息
            createTaskVo.setTaskDescription("从旧系统同步的转运单");
            
            // 设置备注信息
            String remark = "服务单ID: " + serviceOrdID + ", 调度单ID: " + dispatchOrdID;
            String serviceOrdCoTies = getStringValue(order, "ServiceOrdCoTies");
            String serviceOrdCoTies = MapValueUtils.getStringValue(order, "ServiceOrdCoTies");
            if (StringUtils.isNotEmpty(serviceOrdCoTies)) {
                remark += ", 联系人关系: " + serviceOrdCoTies;
            }
            createTaskVo.setRemark(remark);
            
            // 设置计划开始时间
            Date plannedStartTime = getDateValue(order, "ServiceOrdApptDate");
            Date plannedStartTime = MapValueUtils.getDateValue(order, "ServiceOrdApptDate");
            if (plannedStartTime != null) {
                createTaskVo.setPlannedStartTime(plannedStartTime);
            }
            Date actualStartTime = getDateValue(order, "DispatchOrdActualDate");
            Date actualStartTime = MapValueUtils.getDateValue(order, "DispatchOrdActualDate");
            if (actualStartTime != null) {
                createTaskVo.setActualStartTime(actualStartTime);
            }
            Date actualEndTime = getDateValue(order, "DispatchOrdReturnDate");
            Date actualEndTime = MapValueUtils.getDateValue(order, "DispatchOrdReturnDate");
            if (actualEndTime != null) {
                createTaskVo.setActualEndTime(actualEndTime);
            }
@@ -551,7 +650,7 @@
            
            // 设置创建时间 开单日期
            Date createTime = getDateValue(order, "ServiceOrd_CC_Time");
            Date createTime = MapValueUtils.getDateValue(order, "ServiceOrd_CC_Time");
            if (createTime != null) {
                createTaskVo.setCreateTime(createTime);
            }
@@ -570,8 +669,37 @@
                }
                createTaskVo.setDiseaseIds(diseaseIds);
            }
            log.info("TaskCreateVO构造完成: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
            Integer dispatchOrdStatus = MapValueUtils.getIntegerValue(order, "DispatchOrdStatus");
           TaskStatus status= TaskStatusConverter.convertFromLegacyStatus(dispatchOrdStatus);
           if(status!=null) {
               createTaskVo.setTaskStatus(status.getCode());
           }
            // 设置旧系统同步字段
            String dispatchOrdNo = MapValueUtils.getStringValue(order, "DispatchOrdNo");
           if(dispatchOrdNo!=null) {
               createTaskVo.setLegacyDispatchOrdNo(dispatchOrdNo);
           }
           Date ccTime=MapValueUtils.getDateValue(order, "ServiceOrd_CC_Time");
           if(ccTime!=null) {
               createTaskVo.setLegacyServiceNsTime(ccTime);
           }
           Date nsTime=MapValueUtils.getDateValue(order, "DispatchOrd_NS_Time");
           if(nsTime!=null) {
               createTaskVo.setLegacyDispatchNsTime(MapValueUtils.getDateValue(order, "DispatchOrd_NS_Time"));
           }
           String dispatchOrdClass=MapValueUtils.getStringValue(order, "DispatchOrdClass");
           if(dispatchOrdClass!=null) {
               createTaskVo.setLegacyDispatchOrdClass(dispatchOrdClass);
           }
//           String serviceOrdClass=MapValueUtils.getStringValue(order, "ServiceOrdClass");
           if(serviceOrdClass!=null) {
               createTaskVo.setLegacyServiceOrdClass(serviceOrdClass);
           }
            return createTaskVo;
            
        } catch (Exception e) {
@@ -586,23 +714,40 @@
     * @param dispatchOrdID 调度单ID
     * @return 执行人信息列表
     */
    private List<TaskCreateVO.AssigneeInfo> queryAssignees(String dispatchOrdID) {
    private List<TaskCreateVO.AssigneeInfo> queryAssignees(Long dispatchOrdID) {
        long startTime = System.currentTimeMillis();
        try {
            // 检查参数有效性
            if (StringUtils.isEmpty(dispatchOrdID)) {
            if (dispatchOrdID==null || dispatchOrdID <= 0) {
                log.warn("调度单ID不能为空");
                return new ArrayList<>();
            }
            
            // 从SQL Server查询执行人信息
            List<Map<String, Object>> assigneeList = legacyTransferSyncMapper.selectAssigneesByDispatchOrdID(dispatchOrdID);
            // 将String转换为Long,避免数据库类型不匹配导致的性能问题
            Long dispatchOrdIdLong;
            try {
                dispatchOrdIdLong = Long.valueOf(dispatchOrdID);
            } catch (NumberFormatException e) {
                log.error("调度单ID格式不正确: {}", dispatchOrdID, e);
                return new ArrayList<>();
            }
            // 从SQL Server查询执行人信息(使用Long类型,匹配BIGINT字段)
            List<Map<String, Object>> assigneeList = legacyTransferSyncMapper.selectAssigneesByDispatchOrdID(dispatchOrdIdLong);
            long queryTime = System.currentTimeMillis() - startTime;
            // 记录慢查询(超过500ms)
            if (queryTime > 500) {
                log.warn("查询执行人信息耗时过长: {}ms, 调度单ID: {}, 建议在 DispatchOrd_Entourage 表的 DispatchOrdIDDt 字段上创建索引",
                    queryTime, dispatchOrdID);
            }
            
            // 转换为TaskCreateVO.AssigneeInfo对象
            List<TaskCreateVO.AssigneeInfo> assignees = new ArrayList<>();
            if (assigneeList != null && !assigneeList.isEmpty()) {
                for (Map<String, Object> assigneeMap : assigneeList) {
                    String entourageOAId = getStringValue(assigneeMap, "EntourageOAId");
                    String entourageState = getStringValue(assigneeMap, "EntourageState");
                    String entourageOAId = MapValueUtils.getStringValue(assigneeMap, "EntourageOAId");
                    String entourageState = MapValueUtils.getStringValue(assigneeMap, "EntourageID");
                    
                    if (StringUtils.isNotEmpty(entourageOAId)) {
                        try {
@@ -613,7 +758,7 @@
                            if (sysUser != null) {
                                TaskCreateVO.AssigneeInfo assigneeInfo = new TaskCreateVO.AssigneeInfo();
                                assigneeInfo.setUserId(sysUser.getUserId()); // 使用系统用户ID
                                assigneeInfo.setUserName(sysUser.getUserName());
                                assigneeInfo.setUserName(sysUser.getNickName());
                                // 根据EntourageState确定角色类型
                                // 1,2 司机,3,5 医生,4,6 护士
                                if ("1".equals(entourageState) || "2".equals(entourageState)) {
@@ -637,10 +782,11 @@
                }
            }
            
            log.info("查询到{}个执行人,调度单ID: {}", assignees.size(), dispatchOrdID);
            log.debug("查询到{}个执行人,调度单ID: {}, 耗时: {}ms", assignees.size(), dispatchOrdID, System.currentTimeMillis() - startTime);
            return assignees;
        } catch (Exception e) {
            log.error("查询执行人信息异常,调度单ID: {}", dispatchOrdID, e);
            long totalTime = System.currentTimeMillis() - startTime;
            log.error("查询执行人信息异常,调度单ID: {}, 耗时: {}ms", dispatchOrdID, totalTime, e);
            return new ArrayList<>(); // 返回空列表而不是null
        }
    }
@@ -651,10 +797,10 @@
     * @param serviceOrdID 服务单ID
     * @return 病情ID列表
     */
    private String queryDiseaseIds(String serviceOrdID) {
    private String queryDiseaseIds(Long serviceOrdID) {
        try {
            // 检查参数有效性
            if (StringUtils.isEmpty(serviceOrdID)) {
            if (serviceOrdID==null || serviceOrdID <= 0) {
                log.warn("服务单ID不能为空");
                return null;
            }
@@ -675,126 +821,11 @@
        }
    }
    
    /**
     * 从Map中获取字符串值
     *
     * @param map Map对象
     * @param key 键
     * @return 字符串值
     */
    private String getStringValue(Map<String, Object> map, String key) {
        Object value = map.get(key);
        return value != null ? value.toString() : null;
    }
    /**
     * 从Map中获取BigDecimal值
     *
     * @param map Map对象
     * @param key 键
     * @return BigDecimal值
     */
    private BigDecimal getBigDecimalValue(Map<String, Object> map, String key) {
        Object value = map.get(key);
        if (value == null) {
            return null;
        }
        if (value instanceof BigDecimal) {
            return (BigDecimal) value;
        }
        try {
            return new BigDecimal(value.toString());
        } catch (NumberFormatException e) {
            return null;
        }
    }
    /**
     * 从Map中获取Long值
     *
     * @param map Map对象
     * @param key 键
     * @return Long值
     */
    private Long getLongValue(Map<String, Object> map, String key) {
        Object value = map.get(key);
        if (value == null) {
            return null;
        }
        if (value instanceof Long) {
            return (Long) value;
        }
        try {
            return Long.valueOf(value.toString());
        } catch (NumberFormatException e) {
            return null;
        }
    }
    private Integer getIntegerValue(Map<String, Object> map, String key) {
        Object value = map.get(key);
        if (value == null) {
            return null;
        }
        if (value instanceof Integer) {
            return (Integer) value;
        }
        try {
            return Integer.valueOf(value.toString());
        } catch (NumberFormatException e) {
            return null;
        }
    }
    /**
     * 从Map中获取Date值
     *
     * @param map Map对象
     * @param key 键
     * @return Date值
     */
    private Date getDateValue(Map<String, Object> map, String key) {
        Object value = map.get(key);
        if (value == null) {
            return null;
        }
        if (value instanceof Date) {
            return (Date) value;
        }
        // 如果是字符串,尝试解析
        if (value instanceof String) {
            try {
                return DateUtils.parseDate(value.toString());
            } catch (Exception e) {
                return null;
            }
        }
        return null;
    }
    /**
     * 验证日期字符串格式是否有效
     *
     * @param dateStr 日期字符串
     * @param format 日期格式
     * @return 是否有效
     */
    private boolean isValidDateFormat(String dateStr, String format) {
        if (StringUtils.isEmpty(dateStr)) {
            return false;
        }
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            sdf.setLenient(false);
            sdf.parse(dateStr);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    private void notifyTransferOrderByWechat(Long taskId,
                                             String serviceOrdID,
                                             String dispatchOrdID,
                                             Long serviceOrdID,
                                             Long dispatchOrdID,
                                             String serviceOrdNo,
                                             Date serviceOrdCcTime,
                                             SysDept dept,
@@ -803,7 +834,7 @@
            // 获取通知接收人列表
            List<SysUser> receivers = getWechatNotifyUsers(dispatchOrdID, dept);
            if (receivers == null || receivers.isEmpty()) {
                log.info("旧系统同步转运单无可用微信接收人,taskId={}", taskId);
//                log.info("旧系统同步转运单无可用微信接收人,taskId={}", taskId);
                return;
            }
@@ -817,13 +848,13 @@
            // 调用统一的微信通知服务
            int successCount = wechatTaskNotifyService.sendTaskNotifyMessage(taskId, userIds);
            log.info("旧系统同步转运单微信通知发送完成,taskId={}, 成功={}", taskId, successCount);
//            log.info("旧系统同步转运单微信通知发送完成,taskId={}, 成功={}", taskId, successCount);
        } catch (Exception e) {
            log.error("notifyTransferOrderByWechat发生异常, serviceOrdID={}, dispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
        }
    }
    private List<SysUser> getWechatNotifyUsers(String dispatchOrdID, SysDept dept) {
    private List<SysUser> getWechatNotifyUsers(Long dispatchOrdID, SysDept dept) {
        try {
            List<SysUser> result = new ArrayList<>();