model = new \app\admin\model\Activerefund; $this->view->assign("statusList", $this->model->getStatusList()); $this->view->assign("refundstatusList", $this->model->getRefundstatusList()); } /** * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法 * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑 * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改 */ /** * 查看 */ public function index() { //当前是否为关联查询 $this->relationSearch = true; //设置过滤方法 $this->request->filter(['strip_tags', 'trim']); if ($this->request->isAjax()) { //如果发送的来源是Selectpage,则转发到Selectpage if ($this->request->request('keyField')) { return $this->selectpage(); } list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $list = $this->model ->with(['active','activeorder','user']) ->where($where) ->order($sort, $order) ->paginate($limit); foreach ($list as $row) { $row->getRelation('active')->visible(['title','desc']); $row->getRelation('activeorder')->visible(['order_sn']); $row->getRelation('user')->visible(['nickname','mobile']); } $result = array("total" => $list->total(), "rows" => $list->items()); return json($result); } return $this->view->fetch(); } /** * 编辑 */ public function edit($ids = null) { $row = $this->model->get($ids); if (!$row) { $this->error(__('No Results were found')); } $adminIds = $this->getDataLimitAdminIds(); if (is_array($adminIds)) { if (!in_array($row[$this->dataLimitField], $adminIds)) { $this->error(__('You have no permission')); } } if ($this->request->isPost()) { $params = $this->request->post("row/a"); if ($params) { $params = $this->preExcludeFields($params); if ($row['status'] != 0) { $this->error('该数据已经操作过'); } if (isset($params['status']) && $params['status'] == 1) { //同意退款 //查询活动状态 $active_info = Db::name('active')->find($row['active_id']); if ($active_info['status'] == 2) { $this->error('活动已经结束,不能通过'); } if ($active_info['status'] == 3) { $this->error('活动已经取消,不能通过'); } //查询报名信息 $active_order_info = Db::name('active_order')->find($row['order_id']); if ($active_order_info['status'] == 2) { $this->error('活动已经结束,不能通过'); } if ($active_order_info['status'] == 3) { $this->error('活动已经取消,不能通过'); } $params['refundstatus'] = 1; $params['updatetime'] = time(); } $result = false; Db::startTrans(); try { //修改信息 if (isset($params['status'])) { if ($params['status'] == 1) { //同意退款 //修改活动订单人数 $active_data['currentperson'] = $active_info['currentperson'] - $row['number']; if ($active_info['currentperson'] - $row['number'] < $active_info['minperson'] && $active_info['status'] == 1) { $active_data['status'] = 0; } $active_rs = Db::name('active')->where(['id' => $row['active_id'], 'status' => $active_info['status'], 'currentperson' => $active_info['currentperson']])->setField($active_data); if (!$active_rs) { Db::rollback(); return ['code' => 0, 'msg' => '操作失败']; } //修改活动人员状态 $people_rs = Db::name('active_people')->where(['order_id' => $row['order_id']])->setField(['status' => 3, 'modifystatus' => 0, 'updatetime' => time()]); if ($people_rs === false) { Db::rollback(); return ['code' => 0, 'msg' => '操作失败']; } //构建活动订单数据 $order_data = [ 'status' => 3, 'updatetime' => time(), ]; if ($row['refundprice'] > 0) { $order_data['refundstatus'] = 1; //退款状态:0=无需退款,1=退款成功,2=退款失败 $order_data['refundprice'] = $row['refundprice'];//退款金额 $order_data['refundtime'] = time(); if ($row['paytype'] == 0) { //余额支付, 退回余额 $rs = create_log($row['refundprice'], '申请退款返还', $row['user_id'], 3, $row['order_id']); if ($rs != 1) { $order_data['refundstatus'] = 2; $params['refundstatus'] = 2; } } elseif ($row['paytype'] == 1) { //微信支付, 退回微信 //扣除用户成长值 $paygrowth = (int)config('site.paygrowth'); //每消费1元赠送成长值数量, 1元=?成长值 $balance = floor($paygrowth * $row['price']); if ($balance > 0) { $paygrowth_rs = create_growth_log(-$balance, '申请退款扣除', $row['user_id'], 4, $row['order_id']); } //退款单号 $order_data['refund_no'] = $row['refund_no']; //调用微信退款 $wxData['transaction_id'] = $row['transaction_id']; $wxData['out_refund_no'] = $order_data['refund_no']; $wxData['total_fee'] = (int)($row['price'] * 100);//1 微信支付 单位为分 $wxData['refund_fee'] = (int)($row['refundprice'] * 100);//1 微信支付 单位为分 $wxData['refund_desc'] = '申请退款返还'; // require_once("Plugins/WxPay/WxPay.php"); $wxPay = new wxpay\WxPay(config('wxchatpay')); $back = $wxPay->WxPayRefund($wxData); if($back['return_code'] != 'SUCCESS' || $back['result_code'] != 'SUCCESS') { $order_data['refundstatus'] = 2; $params['refundstatus'] = 2; } } } //修改活动订单 $order_rs = Db::name('active_order')->where(['id' => $row['order_id'], 'status' => $active_order_info['status']])->setField($order_data); if (!$order_rs) { Db::rollback(); return ['code' => 0, 'msg' => '操作失败']; } //上级优惠券设为过期 Db::name('user_coupon')->where(['order_id' => $row['order_id'], 'status' => 0])->setField('endtime', time() - 1); //发送消息 $data = [ 'user_id' => $row['user_id'], 'type' => 1, 'title' => '活动通知', 'content' => '您报名的' . $active_info['title'] . '活动申请退款已通过', 'createtime' => time() ]; Db::name('sys_msg')->insertGetId($data); } elseif ($params['status'] == 2) { //拒绝, 发送消息 $active_title = Db::name('active')->where(['id' => $row['active_id']])->value('title'); $data = [ 'user_id' => $row['user_id'], 'type' => 1, 'title' => '活动通知', 'content' => '您报名的' . $active_title . '活动申请退款已被拒绝', 'createtime' => time() ]; Db::name('sys_msg')->insertGetId($data); } } //是否采用模型验证 if ($this->modelValidate) { $name = str_replace("\\model\\", "\\validate\\", get_class($this->model)); $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : $name) : $this->modelValidate; $row->validateFailException(true)->validate($validate); } $result = $row->allowField(true)->save($params); Db::commit(); } catch (ValidateException $e) { Db::rollback(); $this->error($e->getMessage()); } catch (PDOException $e) { Db::rollback(); $this->error($e->getMessage()); } catch (Exception $e) { Db::rollback(); $this->error($e->getMessage()); } if ($result !== false) { $this->success(); } else { $this->error(__('No rows were updated')); } } $this->error(__('Parameter %s can not be empty', '')); } $this->view->assign("row", $row); return $this->view->fetch(); } }