params = $this->request->post(); if(empty($this->params) || !array_filter($this->params)) $this->error('参数错误'); $sign = ''; foreach ($this->params as $key => $value) { if($key != 'sign') $sign .= $value; } $sign .= Env::get('rwa.AppID'); $sign = md5($sign); if($this->params['sign'] != $sign) $this->error('签名验签错误'); } /* * 判断登录 */ public function login() { //获取第三方api参数 /* $data = $this->request->post(); if(!$data) $this->error('参数错误'); if(!$data['mobile'] || !$data['sign']) $this->error('参数错误'); if($data['sign'] != md5($data['mobile'] . Env::get('rwa.AppID'))) $this->error('签名验签错误'); $user = UserModel::where('mobile', $data['mobile'])->find(); if(!$user) $this->error('账号不存在', [], 4000); Token::marshal($user['id'], $user['address']); $user['token'] = Token::getEncryptedToken($user['id']); $this->success('ok', $user);*/ } /* * 注册 */ public function register(UserModel $userModel) { //判断地址存在 if($userModel->getByAddress($this->params['address'])) $this->error('地址已存在'); //手机号存在 if($userModel::where('mobile', $this->params['mobile'])->find()) $this->error('账号已存在'); $newUserID = 0; Db::startTrans(); try { //注册 $time = time(); $data = [ 'address' => $this->params['address'], 'mobile' => $this->params['mobile'], 'nickname' => "188" . substr((string)$time, 2) . rand(10, 99),//188开头,时间戳去掉开头两位,再后面再加两位随机数 'avatar' => $this->request->domain().'/assets/img/logo.png', 'create_time' => $time, 'team_level_id' => 0, ]; // 创建用户 $newUserID = $userModel->insertGetId($data); // 创建钱包 (new LedgerWalletModel())->insertGetId(['user_id' => $newUserID]); Token::marshal($newUserID, $this->params['address']); // 提交事务 Db::commit(); } catch (Exception $e) { // 回滚事务 Db::rollback(); return $e->getMessage(); } if($newUserID == 0) $this->error('注册失败'); $this->success('ok', ['token' => Token::getEncryptedToken($newUserID)]); } //发布出售 public function setSell(LedgerWalletModel $ledgerWalletModel, TeacLogin $teacLogin) { $params = $this->request->post(); $validate = \think\Loader::validate('Teac'); if(!$validate->scene('sell')->check($params)) $this->error($validate->getError()); if(config('teac_trade.sell_min_num') > $params['stock']) $this->error('数量不能低于'.config('teac_trade.sell_min_num')); if(config('teac_trade.sell_min_price') > $params['price'] || config('teac_trade.sell_max_price') < $params['price']) $this->error('价格不在'.config('teac_trade.sell_min_price').'~'.config('teac_trade.sell_max_price').'之间'); if($ledgerWalletModel->getWalletTeac($this->auth->id) < $params['stock']) $this->error('您的钱包Teac余额不足'); Db::startTrans(); try{ //新增求购信息 $teacLogin::setCreateTrade($this->auth->id, $params['price'], $params['stock'], ProductTeac::Sell, $params['stock']); //冻结Teac $ledgerWalletModel->changeWalletAccount($this->auth->id, Asset::TEAC, -$params['stock'], LedgerTeacChangeModel::Sell, $this->auth->id); Db::commit(); }catch(Exception $e){ Db::rollback(); $this->error($e->getMessage()); } $this->success('ok'); } /** * 出售购买 */ public function setSellOrder(ProductTeac $productTeac, LedgerWalletModel $ledgerWalletModel, TeacLogin $teacLogin, UserTeac $userTeac, UserModel $userModel) { $params = $this->request->post(); $validate = \think\Loader::validate('Teac'); if(!$validate->scene('sell_order')->check($params)) $this->error($validate->getError()); $row = $productTeac::where(['type_id'=> ProductTeac::Sell, 'id' => $params['teac_id']])->find(); if(empty($row) || $row['status'] != ProductTeac::Normal) $this->error('订单不存在'); if($this->auth->id == $row['user_id']) $this->error('不能购买自己的订单'); if($params['num'] > $row['stock'] - $row['num']) $this->error('库存不足'); $chabao = $ledgerWalletModel->getWalletChaBao($this->auth->id); $tatal = bcmul($row['price'], $params['num'], 4); if($chabao < $tatal) $this->error('您的钱包茶宝余额不足'); // 启动事务 Db::startTrans(); try { $fee = config('teac_trade.sell_serve_fee'); // 出售购买 $fees = $userTeac::setUserCreateOrder($this->auth->id, $row['id'], ProductTeac::Sell, $params['num'], $row['price'], $fee); //添加扣除相应茶宝Teac $teacLogin::setCreateSellOrder($this->auth->id, $row['user_id'], $row['price'], $params['num'], $fee); //等级分润 CommonLogic::setTeamLevelIncome($row['user_id'], $fees, Asset::TEAC, LedgerTeacChangeModel::TeamLevel); //修改状态 if($row->stock - $row->num == $params['num']) $row->status = ProductTeac::Complete; $row->frozen -= $params['num']; $row->num += $params['num']; $row->save(); // 提交事务 Db::commit(); } catch (Exception $e) { // 回滚事务 Db::rollback(); return $e->getMessage(); } $this->success('ok'); } // 求购出售 public function setBuyOrder(ProductTeac $productTeac, TeacLogin $teacLogin, UserTeac $userTeac) { $params = $this->request->post(); $validate = \think\Loader::validate('Teac'); if(!$validate->scene('sell_order')->check($params)) $this->error($validate->getError()); $row = $productTeac::where(['type_id'=> ProductTeac::Buying, 'id' => $params['teac_id']])->find(); if(empty($row) || $row['status'] != ProductTeac::Normal) $this->error('订单不存在'); if($this->auth->id == $row['user_id']) $this->error('不能购买自己的订单'); if($params['num'] > $row['stock'] - $row['num']) $this->error('库存不足'); // 启动事务 Db::startTrans(); try { $fee = config('teac_trade.buy_serve_fee'); $chabao = bcmul($row['price'], $params['num'], 4); // 出售购买 $userTeac::setUserCreateOrder($this->auth->id, $row['id'], ProductTeac::Buying, $params['num'], $row['price'], $fee); //添加扣除相应茶宝Teac $teacLogin::setCreateBuyingOrder($this->auth->id, $row['user_id'], $row['price'], $params['num'], $fee); //修改状态 if($row->stock - $row->num == $params['num']) $row->status = ProductTeac::Complete; $row->frozen -= $chabao; $row->num += $params['num']; $row->save(); // 提交事务 Db::commit(); } catch (Exception $e) { // 回滚事务 Db::rollback(); return $e->getMessage(); } $this->success('ok'); } // 我的交易列表 public function getUserTeacList(ProductTeac $productTeac) { $list = $productTeac::where('user_id', $this->auth->id) ->order('create_time desc') ->paginate($this->pageSize); $this->success('ok', $list); } //取消交易 public function cancelTrade(ProductTeac $productTeac, TeacLogin $teacLogin) { $id = $this->request->post('teac_id/d', 0); $row = $productTeac::where(['id' => $id, 'user_id' => $this->auth->id])->find(); if(empty($row)) $this->error('订单不存在'); if($row['status'] != ProductTeac::Normal) $this->error('订单已完成'); Db::startTrans(); try { //返回相应茶宝Teac $teacLogin::setUserReturnOrder($this->auth->id, $row['type_id'], $row['frozen']); $row->frozen = 0; $row->status = ProductTeac::Closure; $row->save(); // 提交事务 Db::commit(); } catch (Exception $e) { // 回滚事务 Db::rollback(); return $e->getMessage(); } $this->success('ok'); } /** * 获取配置 */ public function getConfig() { $this->success('ok', config('teac_trade')); } }