| | |
| | | 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.LongUtil; |
| | | import com.ruoyi.common.utils.MapValueUtils; |
| | | 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; |
| | |
| | | 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; |
| | | } |
| | |
| | | break; |
| | | } catch (Exception e) { |
| | | log.error("同步单个转运单失败: ServiceOrdID={}, DispatchOrdID={}", |
| | | getStringValue(order, "ServiceOrdID"), |
| | | getStringValue(order, "DispatchOrdID"), e); |
| | | MapValueUtils.getStringValue(order, "ServiceOrdID"), |
| | | MapValueUtils.getStringValue(order, "DispatchOrdID"), e); |
| | | } |
| | | } |
| | | |
| | |
| | | * @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; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | private boolean updateTransferOrder(String serviceOrdID, String dispatchOrdID, Map<String, Object> order){ |
| | | log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID); |
| | | /** |
| | | * 更新单个转运单 |
| | | * @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(Long.parseLong(serviceOrdID)); |
| | | 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); |
| | | |
| | | 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"); |
| | | 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(); |
| | | 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); |
| | | |
| | | 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); |
| | |
| | | * @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"); |
| | | |
| | | /** |
| | | * 创建人ID |
| | | */ |
| | | Integer oauserId=getIntegerValue(order,"ServiceOrd_CC_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(); |
| | | 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); |
| | | |
| | | 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); |
| | |
| | | * @return 是否已同步 |
| | | */ |
| | | @Override |
| | | public boolean isTransferOrderSynced(String serviceOrdID, String dispatchOrdID) { |
| | | public boolean isTransferOrderSynced(Long serviceOrdID, Long dispatchOrdID) { |
| | | try { |
| | | // 检查参数有效性 |
| | | if (StringUtils.isEmpty(serviceOrdID)) { |
| | | if (LongUtil.isEmpty(serviceOrdID)) { |
| | | log.warn("服务单ID不能为空"); |
| | | return false; |
| | | } |
| | |
| | | // 条件: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; |
| | | } |
| | |
| | | log.warn("服务单ID不是有效数字: {}", serviceOrdID); |
| | | } |
| | | |
| | | if (StringUtils.isNotEmpty(dispatchOrdID)) { |
| | | if (LongUtil.isNotEmpty(dispatchOrdID)) { |
| | | try { |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyDispatchOrdId(Long.valueOf(dispatchOrdID)); |
| | | SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyDispatchOrdId(dispatchOrdID); |
| | | if (emergency != null) { |
| | | return true; |
| | | } |
| | |
| | | String ServiceOrdNo_Str=String.format("%03d", intServiceNo); |
| | | return serviceOrdClass+ServiceOrd_CC_Time_Str+"-"+ServiceOrdNo_Str; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 构造TaskCreateVO对象用于创建任务 |
| | | * |
| | |
| | | * @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 { |
| | | // 检查参数有效性 |
| | |
| | | return null; |
| | | } |
| | | |
| | | if (StringUtils.isEmpty(serviceOrdID)) { |
| | | if (LongUtil.isEmpty(serviceOrdID)) { |
| | | 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"); // 急救转运任务 |
| | | |
| | | // 设置单据类型和任务类型ID(从旧系统字段映射) |
| | | |
| | | if (StringUtils.isNotEmpty(serviceOrdClass)) { |
| | | createTaskVo.setDocumentTypeId(serviceOrdClass); |
| | | String ServiceOrdAreaType = MapValueUtils.getStringValue(order, "ServiceOrdAreaType"); |
| | | if (StringUtils.isNotEmpty(ServiceOrdAreaType)) { |
| | | createTaskVo.setDocumentTypeId(ServiceOrdAreaType); |
| | | } |
| | | |
| | | String serviceOrdType = getStringValue(order, "ServiceOrdType"); |
| | | String serviceOrdType = MapValueUtils.getStringValue(order, "ServiceOrdType"); |
| | | if (StringUtils.isNotEmpty(serviceOrdType)) { |
| | | createTaskVo.setTaskTypeId(serviceOrdType); |
| | | } |
| | | |
| | | // 设置区域类型 |
| | | String serviceOrdAreaType = getStringValue(order, "ServiceOrdAreaType"); |
| | | String serviceOrdAreaType = MapValueUtils.getStringValue(order, "ServiceOrdAreaType"); |
| | | |
| | | // 设置用户ID |
| | | Long serviceOrdUserID = getLongValue(order, "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"); |
| | |
| | | } |
| | | 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)); |
| | |
| | | // 设置转出医院信息 |
| | | |
| | | 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()); |
| | |
| | | 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 hospitalOutDeptId = MapValueUtils.getStringValue(order, "ServiceOrdPtServicesID"); |
| | | hospitalOutInfo.setDepartmentId(hospitalOutDeptId); |
| | | if (StringUtils.isNotEmpty(hospitalOutDeptId)) { |
| | | String hospitalOutDeptName = legacyTransferSyncMapper.selectDepartmentNameByDeptID(hospitalOutDeptId); |
| | |
| | | } |
| | | } |
| | | //转出床位 |
| | | String serviceOrdPtServices=getStringValue(order, "ServiceOrdPtServices"); |
| | | String serviceOrdPtServices=MapValueUtils.getStringValue(order, "ServiceOrdPtServices"); |
| | | if(serviceOrdPtServices!= null){ |
| | | hospitalOutInfo.setBedNumber(serviceOrdPtServices); |
| | | } |
| | |
| | | |
| | | // 设置转入医院信息 |
| | | 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()); |
| | |
| | | hospitalInInfo.setName(hospitalInName); |
| | | } |
| | | } |
| | | String serviceOrdTraEnd = getStringValue(order, "ServiceOrdTraEnd"); |
| | | 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); |
| | |
| | | createTaskVo.setHospitalIn(hospitalInInfo); |
| | | |
| | | // 设置地址信息 |
| | | createTaskVo.setDepartureAddress(getStringValue(order, "ServiceOrdTraStreet")); |
| | | 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")); |
| | | // 距离信息需要从其他字段计算或获取 |
| | | |
| | | if(dispatchOrdID!=null) { |
| | | if(LongUtil.isNotEmpty(dispatchOrdID)) { |
| | | // 设置执行人信息 |
| | | List<TaskCreateVO.AssigneeInfo> assignees = queryAssignees(dispatchOrdID); |
| | | createTaskVo.setAssignees(assignees); |
| | |
| | | } |
| | | // 设置车辆信息 |
| | | // 车辆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 { |
| | |
| | | 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("从旧系统同步的转运单"); |
| | | |
| | | // 设置备注信息 |
| | | 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); |
| | | } |
| | |
| | | |
| | | |
| | | // 设置创建时间 开单日期 |
| | | Date createTime = getDateValue(order, "ServiceOrd_CC_Time"); |
| | | Date createTime = MapValueUtils.getDateValue(order, "ServiceOrd_CC_Time"); |
| | | if (createTime != null) { |
| | | createTaskVo.setCreateTime(createTime); |
| | | } |
| | |
| | | } |
| | | 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) { |
| | |
| | | * @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 (LongUtil.isEmpty(dispatchOrdID)) { |
| | | log.warn("调度单ID不能为空"); |
| | | return new ArrayList<>(); |
| | | } |
| | | |
| | | // 从SQL Server查询执行人信息 |
| | | // 将String转换为Long,避免数据库类型不匹配导致的性能问题 |
| | | |
| | | |
| | | // 从SQL Server查询执行人信息(使用Long类型,匹配BIGINT字段) |
| | | List<Map<String, Object>> assigneeList = legacyTransferSyncMapper.selectAssigneesByDispatchOrdID(dispatchOrdID); |
| | | 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, "EntourageID"); |
| | | String entourageOAId = MapValueUtils.getStringValue(assigneeMap, "EntourageOAId"); |
| | | String entourageState = MapValueUtils.getStringValue(assigneeMap, "EntourageID"); |
| | | |
| | | if (StringUtils.isNotEmpty(entourageOAId)) { |
| | | try { |
| | |
| | | } |
| | | } |
| | | |
| | | 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 |
| | | } |
| | | } |
| | |
| | | * @param serviceOrdID 服务单ID |
| | | * @return 病情ID列表 |
| | | */ |
| | | private String queryDiseaseIds(String serviceOrdID) { |
| | | private String queryDiseaseIds(Long serviceOrdID) { |
| | | try { |
| | | // 检查参数有效性 |
| | | if (StringUtils.isEmpty(serviceOrdID)) { |
| | | if (LongUtil.isEmpty(serviceOrdID) ) { |
| | | log.warn("服务单ID不能为空"); |
| | | return null; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 从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, |
| | |
| | | // 获取通知接收人列表 |
| | | List<SysUser> receivers = getWechatNotifyUsers(dispatchOrdID, dept); |
| | | if (receivers == null || receivers.isEmpty()) { |
| | | log.info("旧系统同步转运单无可用微信接收人,taskId={}", taskId); |
| | | // log.info("旧系统同步转运单无可用微信接收人,taskId={}", taskId); |
| | | return; |
| | | } |
| | | |
| | |
| | | |
| | | // 调用统一的微信通知服务 |
| | | 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<>(); |
| | | |