request->get('user_id'); $beUserID = Yii::$app->request->get('be_user_id');//受赠用户ID $type = Yii::$app->request->get('type');//类型 $gold = Yii::$app->request->get('gold');//赠送金币 $item_list = Yii::$app->request->get('item_list');//赠送物品列表 $payPassword = Yii::$app->request->get('pay_password');//支付密码 if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录 if (!isset($beUserID) || !in_array($type, EnumUtil::DEAL_TYPE_LIST) || empty($payPassword)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARSE_PARAM_ERROR); $userDbData = User::findById($userID); if($userDbData['isjihuo']==0){ return ClientMessageServices::sendMessage('请先激活账号'); } //给自己交易 if ($userID == $beUserID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_DEAL_SELF_ERROR); if ($type == EnumUtil::DEAL_TYPE_PERSENT_MONEY && (empty($gold) || $gold <= 0)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARSE_PARAM_ERROR); if ($type == EnumUtil::DEAL_TYPE_PERSENT_ITEM && count($item_list) == 0) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARSE_PARAM_ERROR); //检查是否在线 // if (!UserService::isOnline($beUserID)) // return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_OFFLINE); //检查受赠用户是否存在 if (empty(User::findById($beUserID))) return ClientMessageServices::sendMessage(ResultStatusServices::RS_DEAL_BE_USER_NOT_EXIST); //检查支付密码 $userDbData = User::findById($userID); if (!$userDbData->validatePayPassword($payPassword)) return ClientMessageServices::sendMessage(ResultStatusServices::RS_PYA_PASSWORD_ERROR); // if ($userDbData->level < 2) // return ClientMessageServices::sendMessage(ResultStatusServices::RS_LEVEL_LIMIT); $dbTrans = Yii::$app->db->beginTransaction(); try { $data = new DealData(); if ($type == EnumUtil::DEAL_TYPE_PERSENT_MONEY) { //赠送金钱 $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, -$gold, 0, SystemLogUtil::FROM_TYPE_DEAL_PAY, []); $rs = UserService::checkAndModifyMoney($userID, false, -$gold, 0, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs); $data->gold = $gold; $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, $gold, 0, SystemLogUtil::FROM_TYPE_DEAL_GET, []); $rs = UserService::checkAndModifyMoney($beUserID, true, $gold, 0, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs); } elseif ($type == EnumUtil::DEAL_TYPE_PERSENT_ITEM) { // //赠送物品 // $list = []; // foreach ($item_list as $item) { // // $itemID = $item['item_id']; //// $num = intval($item['num']) * 100;//数量以100为单位 // $num = intval($item['num']);//数量以100为单位 // if (empty($num) || $num < 0) ClientMessageServices::sendMessage(ResultStatusServices::RS_PARAM_ERROR); // // $data->addItem($itemID, $num); // // $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, -$num, SystemLogUtil::FROM_TYPE_DEAL_PAY, []); // $rs = ItemServices::checkAndModifyNum($userID, $itemID, false, -$num, $log); // if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs); // } } //记录交易 $deal = new Deal(); $deal->from_user_id = $userID; $deal->be_user_id = $beUserID; $deal->type = $type; $deal->data = json_encode($data); if (!$deal->save()) return ClientMessageServices::sendMessage(ResultStatusServices::RS_SAVE_DB_ERROR); //向客户端发送消息 MessageServices::addDealMessage($beUserID, $deal->id, EnumUtil::MESSAGE_CONFIRM_BE_USER_DEAL); $success = true; } finally { if (isset($success)) $dbTrans->commit(); else { $dbTrans->rollBack(); Yii::$app->redis->clearDirtyKey();//清除脏缓存数据 } } return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS,User::findById($userID)->genClientData(false)); } public function actionProductlist(){ //获取数据 $Code = $_GET['token']; //验证 if (!$Code) { $json = array('code' =>'1004', 'error_msg' =>'用户不存在'); return $json; } $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $tradelist = GameConfigServices::getParamByPath('trade_list'); foreach($tradelist as $k => $v){ $findone=Deal::find()->where(['itemid'=>$v['itemid'],'daytime'=>$beginToday])->orderBy(["id" => SORT_DESC])->one(); if(!empty($findone)){ $tradelist[$k]['HighestPrice']=$findone['HighestPrice']; $tradelist[$k]['LowestPrice']=$findone['LowestPrice']; }else{ $tradelist[$k]['HighestPrice']=0; $tradelist[$k]['LowestPrice']=0; } $dealinfo=Deal::find()->where(['itemid'=>$v['itemid']])->orderBy(["id" => SORT_DESC])->one(); if(!empty($dealinfo)){ $find=Deal::find()->where(['itemid'=>$tradeinfo['itemid']])->orderBy(["id" => SORT_ASC]); $find->andWhere(['>', 'created_at',$beginToday]); $dealinfo2= $find->one(); if(!empty($dealinfo2)){ $tradelist[$k]['nowOpen']=$dealinfo2['price']; }else{ $tradelist[$k]['nowOpen']=$dealinfo['price']; } }else{ $tradelist[$k]['nowOpen']=$v['startprice']; } $dealinfo1=Deal::find()->where(['itemid'=>$v['itemid']])->orderBy(["id" => SORT_DESC])->one(); if(!empty($dealinfo1)){ $tradelist[$k]['buyprice']=$dealinfo1['price']; }else{ $tradelist[$k]['buyprice']=$v['startprice']; } $count=Deal::find()->where(['complete'=>'1','del'=>'0','itemid'=>$v['itemid']])->orderBy(["id" => SORT_DESC])->count(); if(!empty($count)){ $tradelist[$k]['successNum']=$count; }else{ $tradelist[$k]['successNum']=0; } } $json = array('code' =>0, 'data' =>$tradelist); return $json; } public function actionGetmakertinfo(){ //获取数据 $Code = $_POST['token']; $id = $_POST['sid']; //验证 if (!$Code) { $json = array('code' =>'1004', 'error_msg' =>'用户不存在'); return $json; } $userData = User::findOne(['code' => $Code]); if ($userData == null) { $json = array('code' =>'1004', 'msg' =>'用户不存在'); return $json; } $tradeinfo = GameConfigServices::getParamByPath('trade_list.'.$id); $itemID=$tradeinfo['itemid']; $iteminfo=Item::find()->where(['user_id'=>$userData['id'],'item_id'=>$tradeinfo['itemid']])->orderBy(["id" => SORT_DESC])->one(); $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $find=Deal::find()->where(['itemid'=>$tradeinfo['itemid']])->orderBy(["id" => SORT_ASC]); $find->andWhere(['>', 'created_at',$beginToday]); $dealinfo = $find->one(); $dealinfo1=Deal::find()->where(['itemid'=>$tradeinfo['itemid']])->orderBy(["id" => SORT_DESC])->one(); if(!empty($dealinfo)){ $tradeinfo['nowOpen']=$dealinfo['price']; }else{ $tradeinfo['nowOpen']=$dealinfo1['price']; if($tradeinfo['nowOpen']==0){ $tradeinfo['nowOpen']=$tradeinfo['startprice']; } } if(!empty($dealinfo1)){ $tradeinfo['buyprice']=$dealinfo1['price']; }else{ $tradeinfo['buyprice']=$tradeinfo['startprice']; } $max=Deal::find()->where(['itemid'=>$tradeinfo['itemid']])->orderBy(["price" => SORT_DESC])->one(); $min=Deal::find()->where(['itemid'=>$tradeinfo['itemid']])->orderBy(["price" => SORT_ASC])->one(); $tradeinfo['successNum']=Deal::find()->where(['complete'=>'1','del'=>'0','itemid'=>$tradeinfo['itemid']])->count(); $tradeinfo['gold']=$userData['gold']; $tradeinfo['HighestPrice']=$max['price']; $tradeinfo['LowestPrice']=$min['price']; $tradeinfo['num']=$iteminfo['num']; $tradeinfo['fee']=$tradeinfo['poundage']; $tradeinfo['riseStop']=$tradeinfo['nowOpen']+$tradeinfo['rise']; $tradeinfo['fallStop']=$tradeinfo['nowOpen']-$tradeinfo['fall']; $data['marketinfo']=$tradeinfo; $json = array('code' =>0, 'data' =>$data); return $json; } public function actionNewentrust(){ //获取数据 $Code = $_GET['token']; $id = $_GET['sid']; //验证 if (!$Code) { $json = array('code' =>'1004', 'error_msg' =>'用户不存在'); return $json; } $userData = User::findOne(['code' => $Code]); if ($userData == null) { $json = array('code' =>'1004', 'msg' =>'用户不存在'); return $json; } $tradeinfo = GameConfigServices::getParamByPath('trade_list.'.$id); $itemID=$tradeinfo['itemid']; $find=Deal::find()->where(['itemid'=>$tradeinfo['itemid'],'state'=>'buy','complete'=>0])->orderBy(["id" => SORT_DESC])->limit(5); $buylist = $find->all(); $find1=Deal::find()->where(['itemid'=>$tradeinfo['itemid'],'state'=>'sell','complete'=>0])->orderBy(["id" => SORT_DESC])->limit(5); $selllist = $find1->all(); $data['buy']=$buylist; $data['sell'] = $selllist; if (empty($data)){$data = '';} $json = array('code' =>0, 'data' =>$data); return $json; } public function actionGetentrust(){ //获取数据 $Code = $_GET['token']; $id = $_GET['sid']; //验证 if (!$Code) { $json = array('code' =>'1004', 'error_msg' =>'用户不存在'); return $json; } $userData = User::findOne(['code' => $Code]); if ($userData == null) { $json = array('code' =>'1004', 'msg' =>'用户不存在'); return $json; } $tradeinfo = GameConfigServices::getParamByPath('trade_list.'.$id); $itemID=$tradeinfo['itemid']; $deallist=Deal::find()->where(['from_user_id'=>$userData['id'],'complete'=>0])->orderBy(["id" => SORT_DESC])->all(); $data['newlist']=$deallist; $deallist1=Deal::find()->where(['from_user_id'=>$userData['id'],'complete'=>1])->orderBy(["id" => SORT_DESC])->all(); $data['oldlist']=$deallist1; $json = array('code' =>0, 'data' =>$data); return $json; } public function actionProduct(){ //获取数据 $Code = $_GET['token']; $id = $_GET['pid']; //验证 if (!$Code) { $json = array('code' =>'1004', 'error_msg' =>'用户不存在'); return $json; } $tradeinfo = GameConfigServices::getParamByPath('trade_list.'.$id); $itemID=$tradeinfo['itemid']; $find=Deal::find()->where(['itemid'=>$tradeinfo['itemid']])->orderBy(["id" => SORT_DESC])->limit(10); $find->andWhere(['>', 'daytime',0]); $deallist = $find->all(); foreach($deallist as $k => $v){ $data['KLineList'][] =array( 'Date' => $v['daytime'], 'OpeningPrice' => $v['OpeningPrice'], 'ClosingPrice' => $v['ClosingPrice'], 'HighestPrice' => $v['HighestPrice'], 'LowestPrice' => $v['LowestPrice'], 'Volume' => $v['daycount'], ); } $json = array('code' =>0, 'data' =>$data); return $json; } public function actionTimeshare(){ //获取数据 $Code = $_POST['token']; $id = $_POST['sid']; //验证 if (!$Code) { $json = array('code' =>'1004', 'error_msg' =>'用户不存在'); return $json; } $tradeinfo = GameConfigServices::getParamByPath('trade_list.'.$id); $itemID=$tradeinfo['itemid']; $find=Deal::find()->where(['itemid'=>$tradeinfo['itemid']])->orderBy(["id" => SORT_DESC])->limit(10); //$find->andWhere(['>', 'daytime',0]); $deallist = $find->all(); foreach($deallist as $k => $v){ $data[]=array( 'Volume'=>1, 'Price'=>$v['price'], 'Time' => $v['created_at'] ); } $json = array('code' =>0, 'data' =>$data); return $json; } public function actionChexiao(){ //获取数据 $Code = $_GET['token']; $id = $_GET['id']; //验证 if (!$Code) { $json = array('code' =>'1004', 'msg' =>'用户不存在'); return $json; } $userData = User::findOne(['code' => $Code]); if ($userData == null) { $json = array('code' =>'1004', 'msg' =>'用户不存在'); return $json; } $userID=$userData['id']; $dealinfo=Deal::find()->where(['id'=>$id])->one(); if($dealinfo['del']==1){ $json = array('code' =>'1004', 'msg' =>'该交易已经撤销'); return $json; } if($dealinfo['from_user_id']==$userData['id']||$dealinfo['be_user_id']==$userData['id']){ if($dealinfo['state']=='buy'){ //获取剩余数量 $shengyu=$dealinfo['num']-$dealinfo['dealnum']; //获取剩余金币 $jinbi=$shengyu*$dealinfo['price']; //开启事务 $dbTrans = Yii::$app->db->beginTransaction(); try { $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, 0, $jinbi, SystemLogUtil::FROM_TYPE_DEAL_CANCEL, []); $rs = UserService::checkAndModifyMoney($userID, true,0, $jinbi, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS){ $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } //记录日志 UserLogService::addUserLog($userID, 28, 0, $jinbi); $success = true; } finally { if (isset($success)) $dbTrans->commit(); else { $dbTrans->rollBack(); Yii::$app->redis->clearDirtyKey();//清除脏缓存数据 } } }else{ //修改仓库物品 $itemID=$dealinfo['itemid']; $num=$dealinfo['num']-$dealinfo['dealnum']; $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, $num, SystemLogUtil::FROM_TYPE_DEAL_CANCEL, []); $rs = ItemServices::checkAndModifyNum($userID, $itemID, true, $num, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs); } }else{ $json = array('code' =>'1004', 'msg' =>'操作错误'); return $json; } $dealinfo->del=1; $dealinfo->complete=1; if (!$dealinfo->save()) { $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } $json = array('code' =>0, 'msg' =>'操作成功'); return $json; } public function actionOrder(){ //获取数据 $Code = $_POST['token']; $id = $_POST['sid']; $price= $_POST['price']; $num= $_POST['num']; $money= $_POST['money']; $state= $_POST['state']; $tradeinfo = GameConfigServices::getParamByPath('trade_list.'.$id); $itemID=$tradeinfo['itemid']; //验证 if (!$Code) { $json = array('code' =>'1004', 'msg' =>'用户不存在'); return $json; } //查找用户 $userData = User::findOne(['code' => $Code]); if ($userData == null) { $json = array('code' =>'1004', 'msg' =>'用户不存在'); return $json; } $userID=$userData['id']; $dbTrans = Yii::$app->db->beginTransaction(); try { if($state=='buy'){ //扣除金钱 $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_GOLD, -$money, 0, SystemLogUtil::FROM_TYPE_DEAL_PAY, []); $rs = UserService::checkAndModifyMoney($userID, false, -$money, 0, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS){ $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } }else{ //获取配置 $itemConfig = GameConfigServices::getParamByPath('item_list.' . $itemID); if (!$itemConfig) { $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } //修改仓库物品 $log = SystemLogUtil::get($userID, SystemLogUtil::TYPE_ITEM, $itemID, -$num, SystemLogUtil::FROM_TYPE_SELL, []); $rs = ItemServices::checkAndModifyNum($userID, $itemID, false, -$num, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) { $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } } //向客户端发送消息 // MessageServices::addDealMessage($beUserID, $deal->id, EnumUtil::MESSAGE_CONFIRM_BE_USER_DEAL); $success = true; } finally { if (isset($success)) $dbTrans->commit(); else { $dbTrans->rollBack(); Yii::$app->redis->clearDirtyKey();//清除脏缓存数据 } } //记录交易 $deal = new Deal(); $deal->from_user_id = $userID; $deal->be_user_id = 0; $deal->itemid = $itemID; $deal->price = $price; $deal->num = $num; $deal->money = $money; $deal->state = $state; $deal->created_at=time(); $deal->from_user_confirm=0; $deal->be_user_confirm=0; $deal->complete=0; $deal->del=0; $deal->updated_at=0; $deal->type=0; $deal->fee=$money*$tradeinfo['poundage']; $deal->data = $tradeinfo['itemname']; $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $dealData = Deal::findOne(['daytime' => $beginToday,'itemid'=>$itemID]); if(empty($dealData)){ $deal->daytime = $beginToday; $deal->OpeningPrice = $price; $deal->ClosingPrice = $price; $deal->HighestPrice = $price; $deal->LowestPrice = $price; }else{ if($dealData->price>$price){ $dealData->LowestPrice=$price; }else{ $dealData->HighestPrice=$price; } $dealData->ClosingPrice = $price; if (!$dealData->save()) { $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } } if (!$deal->save()) { $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } //自动交易 //记录交易 if($deal->state=='buy'){ //判断当前交易是购买 查询所有未交易完成卖出订单 $find = Deal::find() ->andWhere(['del' => 0]) ->andWhere(['itemid' => $deal->itemid]) ->andWhere(['state' => 'sell']) ->andWhere(['complete' => 0]) ->orderBy(['created_at' => SORT_ASC]); $dbList = $find->offset($offset)->limit($count)->all(); foreach ($dbList as $item) { if($deal->price>=$item['price']&&$deal->complete==0){ //进行交易 $itemarr = Deal::findOne(['id' => $item['id']]); $itemarr['complete']=0; //成交价格 $chengjiaojia=$item['price']; $deal->dealprice=$chengjiaojia; $itemarr['dealprice']=$chengjiaojia; //买家应退回差价 $tuihui=$deal->price-$chengjiaojia; if($deal->num-$deal->dealnum>$item['num']-$item['dealnum']){//买家未成交大于卖家未成交 //买家已成交数量 $deal->dealnum=$deal->dealnum+($item['num']-$item['dealnum']); //成交数量 $chengjiaonum=$item['num']-$item['dealnum']; //卖家成交数量 $itemarr['dealnum']=$item['num']; //设置买家成交状态 $itemarr['complete']=1; }elseif($deal->num-$deal->dealnum==$item['num']-$item['dealnum']){//买家未成交等于卖家未成交 //买家已成交数量 $deal->dealnum=$deal->num; //成交数量 $chengjiaonum=$item['num']-$item['dealnum']; //卖家成交数量 $itemarr['dealnum']=$itemarr['num']; //设置买家成交状态 $itemarr['complete']=1; $deal->complete=1; }else{ //买家已成交数量 $deal->dealnum=$deal->num; //成交数量 $chengjiaonum=$deal['num']-$deal['dealnum']; //卖家成交数量 $itemarr['dealnum']=$item['dealnum']+$chengjiaonum; //设置买家成交状态 $itemarr['complete']=0; $deal->complete=1; } //这里计算 //买家得到相应数量物品 $log = SystemLogUtil::get($deal->from_user_id, SystemLogUtil::TYPE_ITEM, $deal->itemid, $chengjiaonum, SystemLogUtil::FROM_TYPE_SELL, []); $rs = ItemServices::checkAndModifyNum($deal->from_user_id, $deal->itemid, true, $chengjiaonum, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) { $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } //记录日志 UserLogService::addUserLog($deal->from_user_id, 29, $deal->itemid, $chengjiaonum);//买家交易成功获得物品 //修改当前买家订单交易状态 if (!$deal->save()) { $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } //买家退回金币 if($tuihui>0){ $tuijinbi=$chengjiaonum*$tuihui; $log = SystemLogUtil::get($deal->from_user_id, SystemLogUtil::TYPE_GOLD, $tuijinbi, 0, SystemLogUtil::FROM_TYPE_DEAL_PAY, []); $rs = UserService::checkAndModifyMoney($deal->from_user_id, true, $tuijinbi, 0, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS){ $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } //记录日志 UserLogService::addUserLog($deal->from_user_id, 31, $deal->itemid, $tuijinbi);//卖家交易成功获得金币 } //卖家得到相应金币 //如果需要扣除手续费 这里加上 $dedao=$chengjiaonum*$chengjiaojia; $log = SystemLogUtil::get($item['from_user_id'], SystemLogUtil::TYPE_GOLD, $dedao, 0, SystemLogUtil::FROM_TYPE_DEAL_PAY, []); $rs = UserService::checkAndModifyMoney($item['from_user_id'], true, $dedao, 0, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS){ $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } //记录日志 UserLogService::addUserLog($item['from_user_id'], 30, $deal->itemid, $dedao);//卖家交易成功获得金币 if (!$itemarr->save()) { $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } } } } //记录交易 if($deal->state=='sell'){ //判断当前交易是卖出 查询所有未交易完成卖出订单 $find = Deal::find() ->andWhere(['del' => 0]) ->andWhere(['itemid' => $deal->itemid]) ->andWhere(['state' => 'buy']) ->andWhere(['complete' => 0]) ->orderBy(['created_at' => SORT_ASC]); $dbList = $find->offset($offset)->limit($count)->all(); foreach ($dbList as $item) { if($deal->price<=$item['price']&&$deal->complete==0){ //进行交易 $itemarr = Deal::findOne(['id' => $item['id']]); $itemarr['complete']=0; //成交价格 $chengjiaojia=$deal['price']; $deal->dealprice=$chengjiaojia; $itemarr['dealprice']=$chengjiaojia; //买家应退回差价 $tuihui=$item->price-$chengjiaojia; if($item->num-$item->dealnum>$deal['num']-$deal['dealnum']){//买家未成交大于卖家未成交 //买家已成交数量 $item->dealnum=$item->dealnum+($deal['num']-$deal['dealnum']); //成交数量 $chengjiaonum=$deal['num']-$deal['dealnum']; //卖家成交数量 $deal['dealnum']=$deal['num']; //设置买家成交状态 $deal['complete']=1; }elseif($deal->num-$deal->dealnum==$item['num']-$item['dealnum']){//买家未成交等于卖家未成交 //买家已成交数量 $deal->dealnum=$deal->num; //成交数量 $chengjiaonum=$item['num']-$item['dealnum']; //卖家成交数量 $itemarr['dealnum']=$itemarr['num']; //设置买家成交状态 $itemarr['complete']=1; $deal->complete=1; }else{ //买家已成交数量 $itemarr->dealnum=$item->num; //成交数量 $chengjiaonum=$item['num']-$item['dealnum']; //卖家成交数量 $deal['dealnum']=$deal['dealnum']+$chengjiaonum; //设置买家成交状态 $deal['complete']=0; $itemarr->complete=1; } //这里计算 //买家得到相应数量物品 $log = SystemLogUtil::get($item->from_user_id, SystemLogUtil::TYPE_ITEM, $item->itemid, $chengjiaonum, SystemLogUtil::FROM_TYPE_SELL, []); $rs = ItemServices::checkAndModifyNum($item->from_user_id, $item->itemid, true, $chengjiaonum, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) { $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } //记录日志 UserLogService::addUserLog($item->from_user_id, 29, $deal->itemid, $chengjiaonum);//买家交易成功获得物品 //修改当前买家订单交易状态 if (!$itemarr->save()) { $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } //买家退回金币 if($tuihui>0){ $tuijinbi=$chengjiaonum*$tuihui; $log = SystemLogUtil::get($item->from_user_id, SystemLogUtil::TYPE_GOLD, $tuijinbi, 0, SystemLogUtil::FROM_TYPE_DEAL_PAY, []); $rs = UserService::checkAndModifyMoney($item->from_user_id, true, $tuijinbi, 0, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS){ $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } //记录日志 UserLogService::addUserLog($item->from_user_id, 31, $item->itemid, $tuijinbi);//卖家交易成功获得金币 } //卖家得到相应金币 //如果需要扣除手续费 这里加上 $dedao=$chengjiaonum*$chengjiaojia; $log = SystemLogUtil::get($deal['from_user_id'], SystemLogUtil::TYPE_GOLD, $dedao, 0, SystemLogUtil::FROM_TYPE_DEAL_PAY, []); $rs = UserService::checkAndModifyMoney($deal['from_user_id'], true, $dedao, 0, $log); if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS){ $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } //记录日志 UserLogService::addUserLog($deal['from_user_id'], 30, $deal->itemid, $dedao);//卖家交易成功获得金币 if (!$deal->save()) { $json = array('code' =>'1004', 'msg' =>'操作失败'); return $json; } } } } $json = array('code' =>0, 'msg' =>'操作成功'); return $json; } // /** // * 同意交易 // */ // public function actionDealConfirm() // { // $userID = Yii::$app->request->get('user_id'); // $dealID = Yii::$app->request->get('deal_id'); //交易ID // $payPassword = Yii::$app->request->get('pay_password');//支付密码 // // if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录 // // if (!isset($dealID) || empty($payPassword)) // return ClientMessageServices::sendMessage(ResultStatusServices::RS_PARSE_PARAM_ERROR); // // //检查支付密码 // $userDbData = User::findById($userID); // if (!$userDbData->validatePayPassword($payPassword)) // return ClientMessageServices::sendMessage(ResultStatusServices::RS_PYA_PASSWORD_ERROR); // // //修改数据 // $dbTrans = Yii::$app->db->beginTransaction(); // try { // // //修改交易数据 // $dealDbData = null; // $rs = DealService::deal($dealID, $userID, $dealDbData); // if ($rs != ResultStatusServices::RS_OPERATION_SUCCESS) return ClientMessageServices::sendMessage($rs); // // if ($dealDbData->complete == EnumUtil::COMPETE) { // MessageServices::addDealMessage($dealDbData->be_user_id, $dealDbData->id, EnumUtil::MESSAGE_DEAL_COMPLETE); // // } else { // //向客户端发送消息 // if ($dealDbData->be_user_id == $userID) // MessageServices::addDealMessage($dealDbData->from_user_id, $dealDbData->id, EnumUtil::MESSAGE_CONFIRM_FROM_USER_DEAL); // } // // $success = true; // } finally { // if (isset($success)) // $dbTrans->commit(); // else { // $dbTrans->rollBack(); // Yii::$app->redis->clearDirtyKey();//清除脏缓存数据 // } // } // // return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS); // } /** * 获取交易列表 */ public function actionGetList() { $userID = Yii::$app->request->get('user_id'); $offset = Yii::$app->request->get('offset'); $count = Yii::$app->request->get('count'); if (!$userID) return ClientMessageServices::sendMessage(ResultStatusServices::RS_USER_NOT_LOGIN);//验证登录 if (!isset($offset)) $offset = 0; if (!isset($count)) $count = 0; $find = Deal::find() ->orWhere(['from_user_id' => $userID]) ->orWhere(['be_user_id' => $userID]) ->andWhere(['del' => EnumUtil::DELETE_NOT]) ->andWhere(['complete' => EnumUtil::NOT_COMPETE]) ->orderBy(['created_at' => SORT_DESC]); $totalCount = $find->count(); $dbList = $find->offset($offset)->limit($count)->all(); $list = []; foreach ($dbList as $item) { array_push($list, $item->genClientData()); } $returnData['offset'] = $offset; $returnData['total_count'] = $totalCount; $returnData['count'] = $count; $returnData['list'] = $list; return ClientMessageServices::sendMessage(ResultStatusServices::RS_OPERATION_SUCCESS, $returnData); } }