wlzboy
2026-03-19 c5ac97682e3b4ca748541ace97cb37a2295bd81e
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
@@ -2,9 +2,7 @@
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.MapValueUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.*;
import com.ruoyi.system.domain.SysTaskEmergency;
import com.ruoyi.system.domain.VehicleInfo;
import com.ruoyi.system.domain.enums.TaskStatus;
@@ -78,7 +76,7 @@
     */
    @Override
    public int syncLegacyTransferOrders(int daysAgo) {
        log.info("开始同步{}天前的旧系统转运单数据", daysAgo);
//        log.info("开始同步{}天前的旧系统转运单数据", daysAgo);
        
        try {
            // 参数验证
@@ -90,16 +88,17 @@
            // 计算日期范围
            Date startDate = DateUtils.addDays(new Date(), -daysAgo);
            String startDateStr = DateUtils.parseDateToStr("yyyy-MM-dd", startDate);
            String endDateStr = DateUtils.parseDateToStr("yyyy-MM-dd", new Date());
            
            // 从SQL Server查询转运单数据
            List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrders(startDateStr);
            List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrders(startDateStr, endDateStr);
            
            if (transferOrders == null || transferOrders.isEmpty()) {
                log.info("未查询到{}天前的转运单数据", daysAgo);
                return 0;
            }
            
            log.info("查询到{}条转运单数据,开始同步...", transferOrders.size());
//            log.info("查询到{}条转运单数据,开始同步...", transferOrders.size());
            
            int successCount = 0;
            int totalCount = transferOrders.size();
@@ -117,12 +116,12 @@
                        continue;
                    }
                    
                    log.debug("正在处理第{}/{}条转运单: ServiceOrdID={}, DispatchOrdID={}",
                             processedCount, totalCount, serviceOrdID, dispatchOrdID);
//                    log.debug("正在处理第{}/{}条转运单: ServiceOrdID={}, DispatchOrdID={}",
//                             processedCount, totalCount, serviceOrdID, dispatchOrdID);
                    
                    // 检查是否已同步
                    if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
                        log.debug("转运单已同步,跳过: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
//                        log.debug("转运单已同步,跳过: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                        //进行更新操作
                        updateTransferOrder(serviceOrdID, dispatchOrdID, order);
                        continue;
@@ -147,7 +146,7 @@
                }
            }
            
            log.info("同步完成,共处理{}条转运单,成功同步{}条转运单数据", totalCount, successCount);
//            log.info("同步完成,共处理{}条转运单,成功同步{}条转运单数据", totalCount, successCount);
            return successCount;
            
        } catch (Exception e) {
@@ -257,8 +256,14 @@
            }
            SysDept dept=sysDeptService.selectDeptByServiceClass(serviceOrdClass);
            Long deptId=dept==null?null:dept.getDeptId();
            if(deptId==null){
                log.error("创建任务时,获取部门信息失败,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                return false;
            }
            createTaskVo.setDeptId(deptId);
            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);
@@ -334,15 +339,20 @@
            String createUserName= sysUser.getUserName();
            SysDept dept=sysDeptService.selectDeptByServiceClass(serviceOrdClass);
            Long deptId=dept==null?null:dept.getDeptId();
            if(deptId==null){
                log.error("创建任务时,获取部门信息失败,serviceOrdID={}, DispatchOrdID={} ServiceOrdClass:{}", serviceOrdID, dispatchOrdID, serviceOrdClass);
                return false;
            }
            createTaskVo.setDeptId(deptId);
            int result = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
            Long taskId = 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);
            if (taskId != null && taskId > 0) {
//                log.info("转运单同步成功: ServiceOrdID={}, DispatchOrdID={}, 创建的任务ID={}", serviceOrdID, dispatchOrdID, taskId);
                try {
                    notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
                    notifyTransferOrderByWechat(taskId, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
                } catch (Exception e) {
                    log.error("转运单同步成功后发送微信通知失败: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
                }
@@ -370,7 +380,7 @@
    public boolean isTransferOrderSynced(Long serviceOrdID, Long dispatchOrdID) {
        try {
            // 检查参数有效性
            if (serviceOrdID == null || serviceOrdID<=0) {
            if (LongUtil.isEmpty(serviceOrdID)) {
                log.warn("服务单ID不能为空");
                return false;
            }
@@ -387,7 +397,7 @@
                log.warn("服务单ID不是有效数字: {}", serviceOrdID);
            }
            
            if (dispatchOrdID>0) {
            if (LongUtil.isNotEmpty(dispatchOrdID)) {
                try {
                    SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyDispatchOrdId(dispatchOrdID);
                    if (emergency != null) {
@@ -435,7 +445,7 @@
                return null;
            }
            
            if (serviceOrdID==null || serviceOrdID<=0) {
            if (LongUtil.isEmpty(serviceOrdID)) {
                log.error("服务单ID不能为空");
                return null;
            }
@@ -449,9 +459,9 @@
            createTaskVo.setTaskType("EMERGENCY_TRANSFER"); // 急救转运任务
            
            // 设置单据类型和任务类型ID(从旧系统字段映射)
            if (StringUtils.isNotEmpty(serviceOrdClass)) {
                createTaskVo.setDocumentTypeId(serviceOrdClass);
            String ServiceOrdAreaType = MapValueUtils.getStringValue(order, "ServiceOrdAreaType");
            if (StringUtils.isNotEmpty(ServiceOrdAreaType)) {
                createTaskVo.setDocumentTypeId(ServiceOrdAreaType);
            }
            
            String serviceOrdType = MapValueUtils.getStringValue(order, "ServiceOrdType");
@@ -459,8 +469,21 @@
                createTaskVo.setTaskTypeId(serviceOrdType);
            }
            
            // 设置区域类型
            String serviceOrdAreaType = MapValueUtils.getStringValue(order, "ServiceOrdAreaType");
           String serviceOrdVIP = MapValueUtils.getStringValue(order, "ServiceOrdVIP");
           if(serviceOrdVIP!=null){
               createTaskVo.setServiceOrdVIP(serviceOrdVIP);
           }else{
               createTaskVo.setServiceOrdVIP("0");
           }
           Integer FromHQ_is = MapValueUtils.getIntegerValue(order, "FromHQ_is");
           if(IntegerUtil.isNotEmpty(FromHQ_is)){
               createTaskVo.setFromHQ2_is("1");
           }else{
               createTaskVo.setFromHQ2_is("0");
           }
            // 设置用户ID
            Long serviceOrdUserID = MapValueUtils.getLongValue(order, "ServiceOrdUserID");
@@ -482,11 +505,20 @@
                }
            }
            createTaskVo.setPatient(patientInfo);
            //1000公里,提取数字
            //1000公里,提取数字(支持小数)
            String ServiceOrdTraDistance=MapValueUtils.getStringValue(order, "ServiceOrdTraDistance");
            if(ServiceOrdTraDistance!=null){
                ServiceOrdTraDistance=ServiceOrdTraDistance.replaceAll("[^0-9]", "");
                createTaskVo.setDistance(new BigDecimal(ServiceOrdTraDistance));
                // 保留数字和小数点,移除其他字符
                ServiceOrdTraDistance=ServiceOrdTraDistance.replaceAll("[^0-9.]", "");
                // 处理多个小数点的情况,只保留第一个
                int firstDotIndex = ServiceOrdTraDistance.indexOf('.');
                if (firstDotIndex != -1) {
                    ServiceOrdTraDistance = ServiceOrdTraDistance.substring(0, firstDotIndex + 1)
                        + ServiceOrdTraDistance.substring(firstDotIndex + 1).replace(".", "");
                }
                if (!ServiceOrdTraDistance.isEmpty() && !ServiceOrdTraDistance.equals(".")) {
                    createTaskVo.setTransferDistance(new BigDecimal(ServiceOrdTraDistance));
                }
            }
            
@@ -561,7 +593,7 @@
            createTaskVo.setPrice(MapValueUtils.getBigDecimalValue(order, "ServiceOrdTraTxnPrice"));
            // 距离信息需要从其他字段计算或获取
            if(dispatchOrdID!=null) {
            if(LongUtil.isNotEmpty(dispatchOrdID)) {
                // 设置执行人信息
                List<TaskCreateVO.AssigneeInfo> assignees = queryAssignees(dispatchOrdID);
                createTaskVo.setAssignees(assignees);
@@ -576,7 +608,7 @@
                String carLicense = legacyTransferSyncMapper.selectCarLicenseByCarID(carID);
                if (StringUtils.isNotEmpty(carLicense)) {
                    // 根据车牌号查询新系统中的车辆ID
                    log.info("转运任务,ServiceOrdID:{},车辆车牌:{}",serviceOrdID,carLicense);
//                    log.info("转运任务,ServiceOrdID:{},车辆车牌:{}",serviceOrdID,carLicense);
//                    log.debug("车辆车牌号: {}", carLicense);
                    
                    // 首先尝试通过VehicleInfoMapper查询车辆信息
@@ -597,7 +629,7 @@
                                List<Long> vehicleIds = new ArrayList<>();
                                vehicleIds.add(vehicleInfo.getVehicleId());
                                createTaskVo.setVehicleIds(vehicleIds);
                                log.debug("转运任务,ServiceOrdID:{} 通过车牌号找到车辆信息: vehicle_id={}, vehicle_no={}",serviceOrdID, vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
//                                log.debug("转运任务,ServiceOrdID:{} 通过车牌号找到车辆信息: vehicle_id={}, vehicle_no={}",serviceOrdID, vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
                            } else {
                                log.warn("转运任务,ServiceOrdID:{} 未找到对应的车辆信息: car_id={}, vehicle_no={}",serviceOrdID, carID, carLicense);
                            }
@@ -610,7 +642,7 @@
                            List<Long> vehicleIds = new ArrayList<>();
                            vehicleIds.add(vehicleInfo.getVehicleId());
                            createTaskVo.setVehicleIds(vehicleIds);
                            log.debug("通过车牌号找到车辆信息: vehicle_id={}, vehicle_no={}", vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
//                            log.debug("通过车牌号找到车辆信息: vehicle_id={}, vehicle_no={}", vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
                        } else {
                            log.warn("未找到对应的车辆信息: vehicle_no={}", carLicense);
                        }
@@ -718,22 +750,16 @@
        long startTime = System.currentTimeMillis();
        try {
            // 检查参数有效性
            if (dispatchOrdID==null || dispatchOrdID <= 0) {
            if (LongUtil.isEmpty(dispatchOrdID)) {
                log.warn("调度单ID不能为空");
                return new ArrayList<>();
            }
            
            // 将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);
            List<Map<String, Object>> assigneeList = legacyTransferSyncMapper.selectAssigneesByDispatchOrdID(dispatchOrdID);
            long queryTime = System.currentTimeMillis() - startTime;
            
            // 记录慢查询(超过500ms)
@@ -782,7 +808,7 @@
                }
            }
            
            log.debug("查询到{}个执行人,调度单ID: {}, 耗时: {}ms", assignees.size(), dispatchOrdID, System.currentTimeMillis() - startTime);
//            log.debug("查询到{}个执行人,调度单ID: {}, 耗时: {}ms", assignees.size(), dispatchOrdID, System.currentTimeMillis() - startTime);
            return assignees;
        } catch (Exception e) {
            long totalTime = System.currentTimeMillis() - startTime;
@@ -800,7 +826,7 @@
    private String queryDiseaseIds(Long serviceOrdID) {
        try {
            // 检查参数有效性
            if (serviceOrdID==null || serviceOrdID <= 0) {
            if (LongUtil.isEmpty(serviceOrdID) ) {
                log.warn("服务单ID不能为空");
                return null;
            }
@@ -813,7 +839,7 @@
                return String.join(",", diseaseIds);
            }
            
            log.info("查询到病情信息,服务单ID: {}, 病情数量: {}", serviceOrdID, diseaseIds != null ? diseaseIds.size() : 0);
//            log.info("查询到病情信息,服务单ID: {}, 病情数量: {}", serviceOrdID, diseaseIds != null ? diseaseIds.size() : 0);
            return null;
        } catch (Exception e) {
            log.error("查询病情信息异常,服务单ID: {}", serviceOrdID, e);