| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- 原 PHP 项目"更改支付状态"功能逻辑分析
- 基于代码分析,这个功能的完整逻辑如下:
- 1. 业务流程
- GET 请求(显示弹框):
- - 根据检查ID查询检查信息:$this->model->get($ids)
- - 将检查信息传递给视图:$this->view->ins = $ins
- - 返回弹框页面,显示患者姓名和当前支付状态(单选框:未支付/已支付)
- POST 请求(提交修改):
- 1. 更新 exams 表的 pay_status 字段
- 2. 如果修改为"已支付"(pay_status=1),则创建资金流水记录
- 2. 核心逻辑代码(Exams.php:124-156)
- public function change_pay($ids)
- {
- // 1. 查询检查信息
- $ins = $this->model->get($ids);
- if($this->request->isPost()){
- $info = $this->request->post();
- // 2. 更新支付状态
- $res = $this->model->where('id', $ids)->update([
- 'pay_status' => $info['pay_status']
- ]);
- if(!$res){
- $this->error('更新失败','','',3);
- }
- // 3. 如果改为"已支付",生成资金流水
- if($info['pay_status'] == 1)
- {
- // 3.1 查询机构信息(获取胶片价格和收费模式)
- $institution = Db::table('institution')
- ->where('id',$ins['institution_id'])
- ->find();
- // 3.2 构建流水记录
- $money = [
- 'money' => $institution['film_price'], // 金额(分)
- 'order_type' => $institution['charge_mode'], // 订单类型
- 'type' => '2', // 类型:2=电子胶片
- 'exam_id' => $ins['id'], // 检查ID
- 'institution_id' => $ins['institution_id'], // 机构ID
- 'pay_way' => '2', // 支付方式:2=医院支付
- 'status' => 0, // 状态:0=未支付
- 'order_status' => 1, // 订单状态:1=未处理
- 'pay_type' => '1' // 1=支入
- ];
- // 3.3 插入流水表
- Db::table('money_water')->insert($money);
- }
- $this->success('修改成功','','',1);
- return true;
- }
- // GET请求:显示弹框
- $this->view->ins = $ins;
- return $this->view->fetch('change_pay');
- }
- 3. 数据表结构
- exams 表:
- - pay_status:支付状态(0=未支付,1=已支付)
- institution 表:
- - film_price:电子胶片价格(单位:分)
- - charge_mode:收费模式
- - 1:向患者结算(患者支付)
- - 2:向医院结算(医院托管)
- - 3:医院代收
- money_water 表(资金流水表):
- - money:金额(单位:分)
- - order_type:订单类型(与机构的 charge_mode 对应)
- - type:类型(1=远程申请,2=电子胶片)
- - exam_id:关联的检查ID
- - institution_id:关联的机构ID
- - pay_way:支付方式(1=患者支付,2=医院支付)
- - status:支付状态(0=未支付,2=已支付)
- - order_status:订单状态(1=未处理,2=进行中,3=已完成)
- - pay_type:1=支入,2=退款
- 4. 关键点
- 1. 只有改为"已支付"才生成流水:改为"未支付"不会生成流水记录
- 2. 流水记录的状态矛盾:
- - exams.pay_status 改为 1(已支付)
- - 但 money_water.status 插入的是 0(未支付)
- - 可能原因:这里的 money_water.status 代表"资金流水的处理状态",而不是"患者是否支付"
- 3. 金额来源:从机构配置的 film_price 字段获取
- 4. 订单类型:从机构配置的 charge_mode 字段获取(决定向谁收费)
- 5. 固定值:
- - type=2:电子胶片
- - pay_way=2:医院支付
- - pay_type=1:支入
- - order_status=1:订单未处理
- 5. 前端展示(change_pay.html)
- <!-- 显示患者姓名(真实姓名,不脱敏) -->
- <h3>{$ins.name}</h3>
- <!-- 支付状态单选框 -->
- <div class="form-group">
- <label>支付状态:</label>
- <div>
- <!-- 0=未支付, 1=已支付 -->
- {:build_radios('pay_status', ['0'=>'未支付', '1'=>'已支付'], $ins['pay_status'])}
- </div>
- </div>
- 这就是原 PHP 项目中"更改支付状态"的完整实现逻辑。主要用于手动调整检查的支付状态,并在标记为"已支付"时自动生成对应的资金流水记录。
|