| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 原项目 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)到正式发起申请的转换,包括通知、订单、讨论等完整的业务流程。
|