| | |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | 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.VehicleInfoMapper; |
| | | import com.ruoyi.system.service.ISysUserService; |
| | | import com.ruoyi.system.service.IWechatTaskNotifyService; |
| | | import com.ruoyi.system.utils.TaskStatusConverter; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | 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); |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 更新单个转运单 |
| | | * @param serviceOrdID |
| | | * @param dispatchOrdID |
| | | * @param order |
| | | * @return |
| | | */ |
| | | private boolean updateTransferOrder(String serviceOrdID, String dispatchOrdID, Map<String, Object> order){ |
| | | log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID); |
| | | String sysTaskCode=""; |
| | |
| | | } |
| | | // 构造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, |
| | |
| | | String serviceOrdClass = getStringValue(order,"ServiceOrdClass"); |
| | | String serviceOrdNo = getStringValue(order,"ServiceOrdNo"); |
| | | |
| | | Integer oauserId=getIntegerValue(order,"ServiceOrd_NS_ID"); |
| | | Integer oauserId=getIntegerValue(order,"ServiceOrd_CC_ID"); |
| | | if(oauserId==null){ |
| | | oauserId=getIntegerValue(order,"ServiceOrd_NS_ID"); |
| | | } |
| | | if(oauserId==null || oauserId==0){ |
| | | log.error("创建任务时,获取创建人信息失败,serviceOrdID={}, DispatchOrdID={} ServiceOrd_NS_ID={},ServiceOrd_CC_ID={}", serviceOrdID, dispatchOrdID, getIntegerValue(order,"ServiceOrd_NS_ID"),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); |
| | | |
| | |
| | | String serviceOrdClass = getStringValue(order,"ServiceOrdClass"); |
| | | String serviceOrdNo = getStringValue(order,"ServiceOrdNo"); |
| | | |
| | | Integer oauserId=getIntegerValue(order,"ServiceOrd_NS_ID"); |
| | | /** |
| | | * 创建人ID |
| | | */ |
| | | Integer oauserId=getIntegerValue(order,"ServiceOrd_CC_ID"); |
| | | if(oauserId==null || oauserId==0) { |
| | | 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(); |
| | | if(sysUser==null){ |
| | | log.error("创建任务时,获取创建人信息失败,serviceOrdID={}, DispatchOrdID={} ServiceOrd_CC_ID:{},ServiceOrd_NS_ID:{}", serviceOrdID, dispatchOrdID, getIntegerValue(order,"ServiceOrd_CC_ID"),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); |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public TaskCreateVO buildCreateTaskVo(String serviceOrdID, String dispatchOrdID, Map<String, Object> order) { |
| | | log.info("构造TaskCreateVO: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID); |
| | | // log.info("构造TaskCreateVO: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID); |
| | | |
| | | try { |
| | | // 检查参数有效性 |
| | |
| | | return null; |
| | | } |
| | | String serviceOrdClass = getStringValue(order, "ServiceOrdClass"); |
| | | //TODO |
| | | |
| | | TaskCreateVO createTaskVo = new TaskCreateVO(); |
| | | String serviceOrdCode=this.getServiceOrdCode(getDateValue(order, "ServiceOrd_CC_Time"),serviceOrdClass,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"); // 急救转运任务 |
| | | |
| | |
| | | |
| | | // 设置区域类型 |
| | | String serviceOrdAreaType = getStringValue(order, "ServiceOrdAreaType"); |
| | | if (StringUtils.isNotEmpty(serviceOrdAreaType)) { |
| | | // 可以根据需要将区域类型映射到TaskCreateVO的其他字段 |
| | | log.debug("区域类型: {}", serviceOrdAreaType); |
| | | } |
| | | |
| | | |
| | | // 设置用户ID |
| | | Long serviceOrdUserID = getLongValue(order, "ServiceOrdUserID"); |
| | | if (serviceOrdUserID != null) { |
| | | // 可以根据需要将用户ID映射到TaskCreateVO的其他字段 |
| | | log.debug("用户ID: {}", serviceOrdUserID); |
| | | } |
| | | |
| | | |
| | | // 设置患者信息 |
| | | TaskCreateVO.PatientInfo patientInfo = new TaskCreateVO.PatientInfo(); |
| | | patientInfo.setName(getStringValue(order, "ServiceOrdPtName")); |
| | |
| | | hospitalInInfo.setName(hospitalInName); |
| | | } |
| | | } |
| | | String DispatchOrdTraEnd = getStringValue(order, "DispatchOrdTraEnd"); |
| | | if(DispatchOrdTraEnd!= null){ |
| | | hospitalInInfo.setAddress(DispatchOrdTraEnd); |
| | | String serviceOrdTraEnd = getStringValue(order, "ServiceOrdTraEnd"); |
| | | if(serviceOrdTraEnd!= null){ |
| | | hospitalInInfo.setAddress(serviceOrdTraEnd); |
| | | } |
| | | //转入床位 |
| | | String serviceOrdPtInServices =getStringValue(order, "ServiceOrdPtInServices"); |
| | |
| | | createTaskVo.setHospitalIn(hospitalInInfo); |
| | | |
| | | // 设置地址信息 |
| | | createTaskVo.setDepartureAddress(getStringValue(order, "ServiceOrdTraVia")); |
| | | createTaskVo.setDepartureAddress(getStringValue(order, "ServiceOrdTraStreet")); |
| | | createTaskVo.setDestinationAddress(getStringValue(order, "ServiceOrdTraEnd")); |
| | | |
| | | // 设置价格和距离信息 |
| | | createTaskVo.setPrice(getBigDecimalValue(order, "ServiceOrdTraTxnPrice")); |
| | | // 距离信息需要从其他字段计算或获取 |
| | | |
| | | // 设置执行人信息 |
| | | List<TaskCreateVO.AssigneeInfo> assignees = queryAssignees(dispatchOrdID); |
| | | createTaskVo.setAssignees(assignees); |
| | | if(!assignees.isEmpty()){ |
| | | createTaskVo.setAssigneeId(assignees.get(0).getUserId()); |
| | | |
| | | 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 carLicense = legacyTransferSyncMapper.selectCarLicenseByCarID(carID); |
| | | if (StringUtils.isNotEmpty(carLicense)) { |
| | | // 根据车牌号查询新系统中的车辆ID |
| | | log.debug("车辆车牌号: {}", carLicense); |
| | | log.info("转运任务,ServiceOrdID:{},车辆车牌:{}",serviceOrdID,carLicense); |
| | | // log.debug("车辆车牌号: {}", carLicense); |
| | | |
| | | // 首先尝试通过VehicleInfoMapper查询车辆信息 |
| | | try { |
| | |
| | | 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); |
| | |
| | | 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) { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | // 设置其他信息 |
| | | createTaskVo.setTaskDescription("从旧系统同步的转运单"); |
| | |
| | | } |
| | | createTaskVo.setDiseaseIds(diseaseIds); |
| | | } |
| | | |
| | | Integer dispatchOrdStatus = getIntegerValue(order, "DispatchOrdStatus"); |
| | | TaskStatus status= TaskStatusConverter.convertFromLegacyStatus(dispatchOrdStatus); |
| | | if(status!=null) { |
| | | createTaskVo.setTaskStatus(status.getCode()); |
| | | } |
| | | |
| | | |
| | | log.info("TaskCreateVO构造完成: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID); |
| | | // log.info("TaskCreateVO构造完成: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID); |
| | | return createTaskVo; |
| | | |
| | | } catch (Exception e) { |
| | |
| | | * @return 执行人信息列表 |
| | | */ |
| | | private List<TaskCreateVO.AssigneeInfo> queryAssignees(String dispatchOrdID) { |
| | | long startTime = System.currentTimeMillis(); |
| | | try { |
| | | // 检查参数有效性 |
| | | if (StringUtils.isEmpty(dispatchOrdID)) { |
| | |
| | | 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 (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)) { |
| | |
| | | } |
| | | } |
| | | |
| | | 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 |
| | | } |
| | | } |