## 时序图 ```plantuml @startuml title AI问诊服务时序图 actor User as U participant AIDoctor as AD participant Department as D participant Consultation as C participant Prescription as P U -> U: 决定选择或创建AI医生 alt 选择已有医生 U -> AD: 选择现有AI医生 else 创建新医生 U -> AD: 输入医生属性信息创建新AI医生 end U -> AD: 发起问诊,提供信息 AD -> AD: 接收用户信息 AD -> AD: 与用户对话 AD -> P: 生成处方 AD -> U: 返回对话结果及处方 U -> C: 创建问诊记录实例,关联相关对象(自身、医生、科室等) C -> D: 获取科室信息(若需要完整记录科室情况) D -> C: 返回科室信息 C -> C: 整合问诊信息(包含处方等) C -> C: 保存到数据库 U -> C: 查询问诊记录(可按需指定查询条件) C -> U: 返回相应问诊记录 @enduml ``` ## 类图 ```plantuml @startuml class User { - userId : int + selectExistingDoctor() : AIDoctor + createCustomDoctor(doctorInfo : Map) : AIDoctor + startConsultation(doctor : AIDoctor) : void + viewConsultationRecords() : List } class AIDoctor { - objectid : int - avator : String - name : String - gender : String - age : int - title : String - qualications : String - desc : String - depart : String - specialty : String - scrid : int + haveConversation(userInfo : String) : String + generatePrescription() : Prescription } class Department { - objectid : int - desc : String - name : String - srcid : int } class Consultation { - objectid : int - user : User - content : String - doctor : AIDoctor - department : Department - title : String + saveToDatabase() : void + queryFromDatabase(queryParams : Map) : Consultation } class Prescription { - prescriptionId : int - medicineList : List - usageInstructions : String } User "1" --> "0..*" AIDoctor : selects/ creates User "1" --> "0..*" Consultation : initiates/ views AIDoctor "1" --> "1" Prescription : generates Consultation "1" --> "1" Prescription : contains Consultation "1" --> "1" Department : belongs to @enduml ``` # 状态图 ```plantuml @startuml [*] --> Initiated state Initiated { [*] --> SelectingDoctor SelectingDoctor : 用户决定选择已有或创建新AI医生 SelectingDoctor --> DoctorSelected : 完成医生选择 } state DoctorSelected { [*] --> ProvidingInfo ProvidingInfo : 用户向选定医生提供问诊信息 ProvidingInfo --> ConversationInProgress : 医生开始对话交流 } state ConversationInProgress { [*] --> PrescriptionGenerated PrescriptionGenerated : AI医生生成处方 PrescriptionGenerated --> ConversationFinished : 对话结束 } state ConversationFinished { [*] --> CreatingRecord CreatingRecord : 创建问诊记录实例 CreatingRecord --> SavingRecord : 整合记录信息 SavingRecord --> RecordSaved : 保存到数据库 RecordSaved --> [*] } @enduml ``` - 在这个状态图中: [*] 表示初始状态和最终状态(即整个流程开始前的状态和流程完整结束后的状态)。 从 Initiated 开始,代表问诊流程启动,首先进入 SelectingDoctor 状态,意味着用户要进行选择 AI 医生的操作,完成选择后进入 DoctorSelected 状态。 在 DoctorSelected 状态下,用户接着要提供问诊信息,进入 ProvidingInfo 状态,随后 AI 医生开始与之对话,进入 ConversationInProgress 状态。 当 AI 医生生成处方后,进入 PrescriptionGenerated 状态,对话结束后到达 ConversationFinished 状态。 最后在 ConversationFinished 状态下依次进行创建问诊记录、整合信息并保存记录的操作,最终达到 RecordSaved 状态,表示整个问诊记录成功保存到数据库,流程结束返回初始的结束状态 [*] 。 ## 活动图 ```plantuml @startuml start :用户发起问诊; if (选择已有AI医生?) then (是) :选择已有的AI医生; else (否) :输入信息创建新的AI医生; endif :用户提供问诊信息; :AI医生接收信息并对话; :AI医生生成处方; :结束对话; :创建问诊记录实例; :关联用户、医生、科室等信息; :整合问诊记录内容(包含处方); :保存问诊记录到数据库; :用户查询问诊记录; stop @enduml ``` 在这个活动图中: 首先通过 “用户发起问诊” 活动开始整个流程。 接着通过一个条件判断分支来决定是选择已有 AI 医生还是创建新的 AI 医生,根据用户的选择执行相应的活动。 然后用户提供问诊信息后,AI 医生依次进行接收信息并对话、生成处方以及结束对话等活动。 后续开展创建问诊记录实例,并关联相关的用户、医生、科室等重要信息,再整合包含处方在内的问诊记录内容,接着将其保存到数据库中。 最后用户可以进行查询问诊记录的活动,整个流程结束。 此活动图从比较宏观的角度展示了 AI 问诊服务中主要的活动以及它们之间的先后顺序和逻辑关系,