step3.txt 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. 原项目 apply/step3 的查询逻辑
  2. 1. Controller层 (ApplyController.php:130-142)
  3. public function step3(ApplicationService $service)
  4. {
  5. $params = $this->getParams();
  6. ApplicationValidate::checkStep3($params); // 验证参数
  7. $doctor = $service->getUser($this->getToken()); // 获取当前登录医生
  8. $odd_number = $service->getNum(); // 生成订单号
  9. $update = $service->application_start($params,$doctor,$odd_number);
  10. return $this->success($update);
  11. }
  12. 2. 参数验证 (ApplicationThree.php)
  13. 必填参数:
  14. - id - 申请单ID(remote_application的id)
  15. - institution_id - 受邀机构ID(上级机构ID)
  16. 可选参数:
  17. - doctor_id - 受邀医生ID(可选,但特殊机构必填)
  18. - is_special - 是否是特殊机构(1=是)
  19. - scid - 特殊联系ID
  20. - sid - 特殊ID
  21. 3. Service层核心逻辑 (ApplicationService.php:379-465)
  22. 第一步:更新申请单信息
  23. 更新 remote_application 表的以下字段:
  24. - remote_institution_id - 受邀方医院ID(上级医院)
  25. - remote_institution_name - 受邀方医院名称
  26. - remote_doctor_id - 受邀方医生ID
  27. - remote_doctor_name - 受邀方医生名称
  28. - local_institution_id - 申请方医院ID
  29. - local_institution_name - 申请方医院名称
  30. - req_doctor_id - 申请方医生ID
  31. - req_doctor_name - 申请方医生名称
  32. - req_date_time - 申请时间
  33. - odd_number - 订单号
  34. - sid, scid - 特殊机构相关ID
  35. 注意:不修改 report_status(保持为3)
  36. 第二步:保存进度日志
  37. 保存到 progress_log 表:
  38. - current_step = 1 (发起申请待支付)
  39. - operator_id - 操作医生ID
  40. - operator_name - 操作医生名称
  41. - application_id - 申请单ID
  42. 第三步:发送消息通知
  43. 保存到 message 表:
  44. - title - "收到一条远程诊断申请"
  45. - content - "{申请方医院}{申请医生}向您发起了一条远程申请"
  46. - doctor_id - 受邀方医生ID
  47. - institution_id - 受邀方机构ID
  48. - application_id - 申请单ID
  49. - type = 1 (申请类消息)
  50. 第四步:创建报告记录(如果不存在)
  51. 查询 report 表,如果该申请单还没有报告记录,则创建:
  52. - exam_id - 检查ID
  53. - type = 2 (远程报告)
  54. - remote_application_id - 申请单ID
  55. 第五步:保存讨论记录
  56. 保存到 bbs 表(申请讨论板):
  57. - initiator - 发起人名称
  58. - remote_application_id - 申请单ID
  59. - content - "{医生名称}医生发起了申请"
  60. - type = 1 (发起申请)
  61. 第六步:处理费用和订单
  62. 1. 查询支付类型(rcontact 表的 pay_type 字段)
  63. 2. 查询医生费用(从 remote_cost 表,根据下级医院、上级医院、医生、检查类别)
  64. 3. 根据支付类型创建订单:
  65. - 特殊机构:使用特殊费用,调用 makeHospitalOrder
  66. - 医院挂账(pay_type=HOSPITAL):调用 makeHospitalOrder
  67. - 患者支付(pay_type=PATIENT):调用 makePatientsOrder
  68. 4. 关键业务逻辑
  69. - 特殊机构验证:如果 is_special=1,必须选择医生(doctor_id不能为空)
  70. - 状态不变:step3 不修改 report_status,保持为3(完善病例资料保存继续)
  71. - 订单创建:根据机构间的支付类型和医生费用自动创建订单
  72. - 多表联动:同时操作 remote_application、progress_log、message、report、bbs 等表
  73. 5. 返回值
  74. 返回 updateApplication 的执行结果(通常是布尔值或影响行数)
  75. ---
  76. 总结:step3 的核心功能是选择上级机构和医生,并发起申请。它完成了从病例资料(step2)到正式发起申请的转换,包括通知、订单、讨论等完整的业务流程。