879 lines
33 KiB
PHP
879 lines
33 KiB
PHP
<?php
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: zn
|
|
* Date: 2017/6/14
|
|
* Time: 14:19
|
|
*/
|
|
|
|
namespace app\controllers;
|
|
|
|
|
|
use common\models\Deal;
|
|
use common\models\Item;
|
|
use common\models\DealData;
|
|
use common\models\User;
|
|
use common\models\UserLog;
|
|
use common\modules\systemlog\SystemLogUtil;
|
|
use common\services\ClientMessageServices;
|
|
use common\services\GameConfigServices;
|
|
use common\services\DealService;
|
|
use common\services\ItemServices;
|
|
use common\services\MessageServices;
|
|
use common\services\ResultStatusServices;
|
|
use common\services\UserService;
|
|
use common\services\UserLogService;
|
|
use common\utils\EnumUtil;
|
|
use Yii;
|
|
use yii\rest\Controller;
|
|
|
|
/**
|
|
* 交易
|
|
* Class DealController
|
|
* @package app\controllers
|
|
*/
|
|
class DealController extends Controller
|
|
{
|
|
/**
|
|
* 发起交易
|
|
* @return mixed
|
|
*/
|
|
public function actionDeal()
|
|
{
|
|
$userID = Yii::$app->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);
|
|
}
|
|
} |