dao = $dao; } /** * TODO * @param $id * @return bool * @author Qinii * @day 2020-06-16 */ public function getWhereCount($id) { $where['extract_id'] = $id; $where['status'] = 0; return $this->dao->getWhereCount($where) > 0; } /** * TODO * @param array $where * @param $page * @param $limit * @return array * @author Qinii * @day 2020-06-16 */ public function search(array $where, $page, $limit) { $query = $this->dao->search($where)->with(['user' => function ($query) { $query->field('uid,avatar,nickname'); }]); $count = $query->count(); $list = $query->page($page, $limit)->select(); return compact('count', 'list'); } public function getTotalExtractPrice() { return $this->dao->search(['status' => 1])->sum('extract_price'); } /** * @param $uid * @return mixed * @author zfy * @day 2020/6/22 */ public function userTotalExtract($uid) { return $this->dao->search(['status' => 1, 'uid' => $uid])->sum('extract_price'); } /** * TODO * @param $user * @param $data * @author Qinii * @day 2020-06-16 */ public function create($user,$data) { $data = Db::transaction(function()use($user,$data){ if($user['brokerage_price'] < (systemConfig('user_extract_min'))) throw new ValidateException('可提现金额不足'); if($data['extract_price'] < (systemConfig('user_extract_min'))) throw new ValidateException('提现金额不得小于最低额度'); if($user['brokerage_price'] < $data['extract_price']) throw new ValidateException('提现金额不足'); if($data['extract_type'] == 3) { $make = app()->make(WechatUserRepository::class); $openid = $make->idByOpenId((int)$user['wechat_user_id']); if (!$openid){ $openid = $make->idByRoutineId((int)$user['wechat_user_id']); if(!$openid) throw new ValidateException('openID获取失败,请确认是微信用户'); } } $brokerage_price = bcsub($user['brokerage_price'],$data['extract_price'],2); $user->brokerage_price = $brokerage_price; $user->save(); $data['extract_sn'] = $this->createSn(); $data['uid'] = $user['uid']; $data['balance'] = $brokerage_price; return $this->dao->create($data); }); SwooleTaskService::admin('notice', [ 'type' => 'extract', 'title' => '您有一条新的提醒申请', 'id' => $data->extract_id ]); } public function switchStatus($id,$data) { Db::transaction(function()use($id,$data){ $extract = $this->dao->getWhere(['extract_id' => $id]); $user = app()->make(UserRepository::class)->get($extract['uid']); if(!$user) throw new ValidateException('用户不存在'); if($data['status'] == '-1'){ $user = app()->make(UserRepository::class)->get($extract['uid']); $brokerage_price = bcadd($user['brokerage_price'] ,$extract['extract_price'],2); $user->brokerage_price = $brokerage_price; $user->save(); } if($data['status'] == 1 && $extract['extract_type'] == 3){ $openid = app()->make(WechatUserRepository::class)->idByOpenId((int)$user['wechat_user_id']); if(!$openid) throw new ValidateException('openID获取失败'); $ret = [ 'openid' => $openid, 'sn' => $extract['extract_sn'], 'price' => $extract['extract_price'] ]; WechatService::create()->merchantPay($ret); } $this->dao->update($id,$data); }); Queue::push(SendTemplateMessageJob::class,[ 'tempCode' => 'ORDER_DELIVER_SUCCESS', 'id' =>$id ]); } public function createSn() { list($msec, $sec) = explode(' ', microtime()); $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', ''); $sn = 'ue' . $msectime . mt_rand(10000, max(intval($msec * 10000) + 10000, 98369)); return $sn; } }