原 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)

{$ins.name}

{:build_radios('pay_status', ['0'=>'未支付', '1'=>'已支付'], $ins['pay_status'])}
这就是原 PHP 项目中"更改支付状态"的完整实现逻辑。主要用于手动调整检查的支付状态,并在标记为"已支付"时自动生成对应的资金流水记录。