auth->id; $list = UniversityEventModel::with([ 'apply' => function ($query) use ($user_id) { $query->field('id,event_id,user_id')->where('user_id', $user_id)->where('status', 1); } ]) ->field('id,name,price,image,start_apply_time,end_apply_time,start_time,address') ->where('status', 1) ->order('id desc') ->autopage() ->select(); foreach ($list as $k => $v) { $list[$k]['start_apply_time'] = date('Y-m-d H:i', $v['start_apply_time']); $list[$k]['end_apply_time'] = date('Y-m-d H:i', $v['end_apply_time']); $list[$k]['start_time'] = date('Y-m-d H:i', $v['start_time']); $list[$k]['apply'] = !empty($v['apply']) ? 1 : 0; } return $this->success('success', $list); } // 活动详情 public function info() { $params = $this->request->param(); if (empty($params['event_id'])) { return $this->error('参数缺失'); } $user_id = $this->auth->id; $info = UniversityEventModel::with([ 'apply' => function ($query) use ($user_id) { $query->field('id,event_id,user_id')->where('user_id', $user_id)->where('status', 1); } ]) ->field('id,name,price,image,images,start_apply_time,end_apply_time,start_time,address,content') ->where('id', $params['event_id']) ->where('status', 1) ->order('id desc') ->find(); $info['start_apply_time'] = date('Y-m-d', $info['start_apply_time']); $info['end_apply_time'] = date('Y-m-d', $info['end_apply_time']); $info['start_time'] = date('Y-m-d', $info['start_time']); $info['apply'] = !empty($info['apply']) ? 1 : 0; return $this->success('success', $info); } public function apply() { $params = $this->request->param(); if (empty($params['event_id'])) { return $this->error('参数缺失'); } if (empty($params['pay_type']) || empty($params['platform'])) { return $this->error('请选择支付方式'); } if (empty($params['apply_list'])) { return $this->error('请提交报名信息'); } foreach ($params['apply_list'] as $k => $v) { if (empty($v['name'])) { return $this->error('报名信息姓名不能为空'); } if (empty($v['phone'])) { return $this->error('报名信息手机号不能为空'); } } $user_id = $this->auth->id; $info = UniversityEventModel::with([ 'apply' => function ($query) use ($user_id) { $query->field('id,event_id,user_id')->where('user_id', $user_id)->where('status', 1); } ]) ->field('id,name,price,image,images,start_apply_time,end_apply_time,start_time,address,content') ->where('id', $params['event_id']) ->where('status', 1) ->order('id desc') ->find(); if (!$info) { return $this->error('活动不存在'); } if (!empty($info['apply'])) { return $this->error('您已报过名了'); } $nowTime = time(); if ($info['start_apply_time'] > $nowTime) { return $this->error('报名未开始'); } if ($info['end_apply_time'] < $nowTime) { return $this->error('报名已结束'); } // 开始报名 $num = count($params['apply_list']); $data = [ 'user_id' => $user_id, 'event_id' => $params['event_id'], 'order_no' => createUniqueNo('E', $user_id), 'pay_amount' => bcmul($info['price'], $num, 2), 'create_time' => $nowTime ]; Db::startTrans(); $apply_id = Db::name('university_event_apply')->insertGetId($data); if (!$apply_id) { Db::rollback(); return $this->error('订单创建失败'); } $apply_info = []; foreach ($params['apply_list'] as $k => $v) { $apply_info[] = [ 'user_id' => $user_id, 'event_id' => $params['event_id'], 'order_id' => $apply_id, 'order_no' => $data['order_no'], 'name' => $v['name'], 'phone' => $v['phone'] ]; } if (!Db::name('university_event_info')->insertAll($apply_info)) { Db::rollback(); return $this->error('订单创建失败'); } Db::commit(); // 创建支付订单 $remark = '老年大学活动报名'; $orderData = [ 'user_id' => $user_id, 'out_trade_no' => $data['order_no'], 'order_amount' => $data['pay_amount'], 'pay_type' => $params['pay_type'], 'platform' => $params['platform'], 'table_name' => 'university_event_apply', 'table_id' => $apply_id, 'createtime' => time(), 'args' => json_encode([ 'table_id' => $apply_id, 'remark' => $remark ], JSON_UNESCAPED_UNICODE), ]; if (!Db::name('pay_order')->insert($orderData)) { return $this->error('订单创建失败'); } // 拉起支付 余额支付 if ($params['pay_type'] == 'wallet') { Db::startTrans(); //钱包更新 $walletService = new Wallet(); if (!$walletService->change($user_id, -$orderData['order_amount'], 'money', 20, $remark, $orderData['table_name'], $orderData['table_id'])) { Db::rollback(); return $this->error($walletService->getMessage()); } // 支付成功,更改支付金额 [$res,$msg] = PayOrderModel::university_event($orderData['out_trade_no']); if (!$res){ Db::rollback(); return $this->error($msg); } Db::commit(); return $this->success('支付成功'); } // 第三方支付下单 $params = [ 'type' => $orderData['pay_type'], 'orderid' => $orderData['out_trade_no'], 'title' => $remark, 'amount' => $orderData['order_amount'], 'method' => $orderData['platform'], 'notifyurl' => CurlUtil::getHttp("/api/notify/university_event_{$params['pay_type']}"), 'returnurl' => '', ]; // 如果是小程序则需要添加 openid if ($params['pay_type'] == 'wechat' && $params['platform'] == 'miniapp') { $params['openid'] = $this->auth->mini_openid; } $res = Service::submitOrder($params); if ($params['pay_type'] == 'wechat') { $this->success('success', json_decode($res, true)); } else { $this->success('success', $res); } } }