原项目 apply/step3 的查询逻辑 1. Controller层 (ApplyController.php:130-142) public function step3(ApplicationService $service) { $params = $this->getParams(); ApplicationValidate::checkStep3($params); // 验证参数 $doctor = $service->getUser($this->getToken()); // 获取当前登录医生 $odd_number = $service->getNum(); // 生成订单号 $update = $service->application_start($params,$doctor,$odd_number); return $this->success($update); } 2. 参数验证 (ApplicationThree.php) 必填参数: - id - 申请单ID(remote_application的id) - institution_id - 受邀机构ID(上级机构ID) 可选参数: - doctor_id - 受邀医生ID(可选,但特殊机构必填) - is_special - 是否是特殊机构(1=是) - scid - 特殊联系ID - sid - 特殊ID 3. Service层核心逻辑 (ApplicationService.php:379-465) 第一步:更新申请单信息 更新 remote_application 表的以下字段: - remote_institution_id - 受邀方医院ID(上级医院) - remote_institution_name - 受邀方医院名称 - remote_doctor_id - 受邀方医生ID - remote_doctor_name - 受邀方医生名称 - local_institution_id - 申请方医院ID - local_institution_name - 申请方医院名称 - req_doctor_id - 申请方医生ID - req_doctor_name - 申请方医生名称 - req_date_time - 申请时间 - odd_number - 订单号 - sid, scid - 特殊机构相关ID 注意:不修改 report_status(保持为3) 第二步:保存进度日志 保存到 progress_log 表: - current_step = 1 (发起申请待支付) - operator_id - 操作医生ID - operator_name - 操作医生名称 - application_id - 申请单ID 第三步:发送消息通知 保存到 message 表: - title - "收到一条远程诊断申请" - content - "{申请方医院}{申请医生}向您发起了一条远程申请" - doctor_id - 受邀方医生ID - institution_id - 受邀方机构ID - application_id - 申请单ID - type = 1 (申请类消息) 第四步:创建报告记录(如果不存在) 查询 report 表,如果该申请单还没有报告记录,则创建: - exam_id - 检查ID - type = 2 (远程报告) - remote_application_id - 申请单ID 第五步:保存讨论记录 保存到 bbs 表(申请讨论板): - initiator - 发起人名称 - remote_application_id - 申请单ID - content - "{医生名称}医生发起了申请" - type = 1 (发起申请) 第六步:处理费用和订单 1. 查询支付类型(rcontact 表的 pay_type 字段) 2. 查询医生费用(从 remote_cost 表,根据下级医院、上级医院、医生、检查类别) 3. 根据支付类型创建订单: - 特殊机构:使用特殊费用,调用 makeHospitalOrder - 医院挂账(pay_type=HOSPITAL):调用 makeHospitalOrder - 患者支付(pay_type=PATIENT):调用 makePatientsOrder 4. 关键业务逻辑 - 特殊机构验证:如果 is_special=1,必须选择医生(doctor_id不能为空) - 状态不变:step3 不修改 report_status,保持为3(完善病例资料保存继续) - 订单创建:根据机构间的支付类型和医生费用自动创建订单 - 多表联动:同时操作 remote_application、progress_log、message、report、bbs 等表 5. 返回值 返回 updateApplication 的执行结果(通常是布尔值或影响行数) --- 总结:step3 的核心功能是选择上级机构和医生,并发起申请。它完成了从病例资料(step2)到正式发起申请的转换,包括通知、订单、讨论等完整的业务流程。