| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- <?php
- namespace backend\models;
- use Yii;
- use common\helpers\Utils;
- use common\helpers\DateHelper;
- class Volume extends \yii\db\ActiveRecord
- {
- /**
- * @return \yii\db\Connection the database connection used by this AR class.
- */
- public static function getDb()
- {
- return Yii::$app->get('dbXcrm');
- }
- /**
- * @param array $post
- * @return array
- */
- public function getList($post)
- {
- $result = ['code' => 0, 'data' => [], 'message' => ''];
- $member_id = $post['member_id'];
- $order = isset($post['order']) ? $post['order'] : '';
- $orderBy = isset($post['orderBy']) ? strtolower($post['orderBy']) : 'desc';
- $search = isset($post['search']) ? $post['search'] : '';
- $start = isset($post['start']) ? (int) $post['start'] : 0;
- $length = isset($post['length']) ? (int) $post['length'] : 20;
- $sTime = isset($post['sTime']) ? DateHelper::convertDateToGmt($post['sTime']) : $this->defaultStartTime();
- $eTime = isset($post['eTime']) ? DateHelper::convertDateToGmt($post['eTime']. ' 23:59:59') : $this->defaultEndTime() . ' 23:59:59';
- $ibId = isset($post['ibId']) ? $post['ibId'] : 0;
- $draw = isset($post['draw']) ? $post['draw'] : 1;
-
- $where = ['and'];
-
- // 代理商,没有搜索条件就查所有
- $member = new Member();
- $ibs = $member->findChildrenIncludeSelf($member_id);
- $id_arr = array_column($ibs, 'id');
- if ($ibId && in_array($ibId, $id_arr)) {
- $id_arr = [$ibId];
- }
- if ($id_arr) {
- $where[] = ['in', 'cum.member_id', $id_arr];
- }
-
- // 账户或姓名
- if ($search) {
- $where[] = [
- 'or',
- ['like', 'mu.LOGIN', $search],
- ['like', 'mu.NAME', $search],
- ];
- }
-
- // 排序
- $allowOrderColumn = ['name', 'LOGIN', 'NAME'];
- if (in_array($order, $allowOrderColumn) && in_array($orderBy, ['asc', 'desc'])) {
- if ($order === 'name') {
- $order = 'cum.' . $order;
- } elseif ($order === 'NAME') {
- $order = 'mu.' . $order;
- }
- if ($order === 'LOGIN') {
- $order = 'mu.LOGIN';
- }
- if ($orderBy == 'asc') {
- $orderCondition = [$order => SORT_ASC];
- } else {
- $orderCondition = [$order => SORT_DESC];
- }
- } else {
- $orderCondition = ['mu.LOGIN' => SORT_DESC];
- }
-
- $query = UserMember::find();
- $query->alias('cum')
- ->select('cum.*, mu.*')
- ->innerJoin('mt4_users mu', 'cum.login = mu.LOGIN')
- ->where($where)
- ->orderBy($orderCondition);
-
- $count = $query->count();
- $query->offset($start)->limit($length);
- $list = $query->asArray()->all();
-
- if ($count) {
- $logins = array_column($list, 'login');
-
- // 配置,一定会有
- $config = Config::find()->asArray()->limit(1)->one();
- // forex
- $forexSymbols = preg_split('/\s*,\s*/', trim($config['forex_symbols']), -1, PREG_SPLIT_NO_EMPTY);
- // gold
- $xauSymbols = preg_split('/\s*,\s*/', trim($config['xau_symbols']), -1, PREG_SPLIT_NO_EMPTY);
- // silver
- $xagSymbols = preg_split('/\s*,\s*/', trim($config['xag_symbols']), -1, PREG_SPLIT_NO_EMPTY);
- // cfd
- $cfdSymbols = preg_split('/\s*,\s*/', trim($config['cfd_symbols']), -1, PREG_SPLIT_NO_EMPTY);
- // stock
- $stockSymbols = preg_split('/\s*,\s*/', trim($config['stock_symbols']), -1, PREG_SPLIT_NO_EMPTY);
- // btc
- $btcSymbols = preg_split('/\s*,\s*/', trim($config['btc_symbols']), -1, PREG_SPLIT_NO_EMPTY);
-
- $mt4Trades = new Mt4Trades();
- // 外汇,黄金,白银,CFD,股指,btc的交易量列表
- $fvList = $mt4Trades->getSumVolumeEachLogin($logins, $forexSymbols, $sTime, $eTime);
- $mvGoldList = $mt4Trades->getSumVolumeEachLogin($logins, $xauSymbols, $sTime, $eTime);
- $mvSilverList = $mt4Trades->getSumVolumeEachLogin($logins, $xagSymbols, $sTime, $eTime);
- $cvList = $mt4Trades->getSumVolumeEachLogin($logins, $cfdSymbols, $sTime, $eTime);
- $stvList = $mt4Trades->getSumVolumeEachLogin($logins, $stockSymbols, $sTime, $eTime);
- $btvList = $mt4Trades->getSumVolumeEachLogin($logins, $btcSymbols, $sTime, $eTime);
- // 外汇,黄金,白银,CFD,股指,btc的内佣列表,trade_type 外汇0,CFD1,黄金2,白银3,股指4,BTC5
- $fvCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 0, $sTime, $eTime);
- $mvGoldCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 2, $sTime, $eTime);
- $mvSilveCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 3, $sTime, $eTime);
- $cvCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 1, $sTime, $eTime);
- $stvCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 4, $sTime, $eTime);
- $btvCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 5, $sTime, $eTime);
- // 外汇,黄金,白银的外佣列表,CFD,股指,BTC没有外佣
- $fvCommissionWyList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 0, $sTime, $eTime, true);
- $mvGoldCommissionWyList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 2, $sTime, $eTime, true);
- $mvSilveCommissionWyList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 3, $sTime, $eTime, true);
- // 处理数据
- foreach ($list as $k => $v) {
- $list[$k]['MARGIN'] = Utils::formatFloatOrInt($v['MARGIN']);
- $list[$k]['MARGIN_FREE'] = Utils::formatFloatOrInt($v['MARGIN_FREE']);
- $list[$k]['MARGIN_LEVEL'] = Utils::formatFloatOrInt($v['MARGIN_LEVEL']);
- $list[$k]['EQUITY'] = Utils::formatFloatOrInt($v['EQUITY']);
- $list[$k]['MODIFY_TIME'] = date('m-d H:i', strtotime($v['MODIFY_TIME']));
-
- // 外汇,黄金,白银,CFD,股指,BTC交易量
- $list[$k]['fv'] = !empty($fvList[$v['login']]['total_volume']) ? (float) $fvList[$v['login']]['total_volume'] : 0;
- $list[$k]['mvGold'] = !empty($mvGoldList[$v['login']]['total_volume']) ? (float) $mvGoldList[$v['login']]['total_volume'] : 0;
- $list[$k]['mvSilver'] = !empty($mvSilverList[$v['login']]['total_volume']) ? (float) $mvSilverList[$v['login']]['total_volume'] : 0;
- $list[$k]['cv'] = !empty($cvList[$v['login']]['total_volume']) ? (float) $cvList[$v['login']]['total_volume'] : 0;
- $list[$k]['stv'] = !empty($stvList[$v['login']]['total_volume']) ? (float) $stvList[$v['login']]['total_volume'] : 0;
- $list[$k]['btv'] = !empty($btvList[$v['login']]['total_volume']) ? (float) $btvList[$v['login']]['total_volume'] : 0;
- // 外汇佣金
- $list[$k]['fvc'] = !empty($fvCommissionList[$v['login']]['total_commission']) ? (float) $fvCommissionList[$v['login']]['total_commission'] : 0;
-
- // 黄金佣金
- $list[$k]['gvc'] = !empty($mvGoldCommissionList[$v['login']]['total_commission']) ? (float) $mvGoldCommissionList[$v['login']]['total_commission'] : 0;
-
- // 白银佣金
- $list[$k]['svc'] = !empty($mvSilveCommissionList[$v['login']]['total_commission']) ? (float) $mvSilveCommissionList[$v['login']]['total_commission'] : 0;
-
- // CFD佣金
- $list[$k]['cvc'] = !empty($cvCommissionList[$v['login']]['total_commission']) ? (float) $cvCommissionList[$v['login']]['total_commission'] : 0;
- // 股指佣金
- $list[$k]['stvc'] = !empty($stvCommissionList[$v['login']]['total_commission']) ? (float) $stvCommissionList[$v['login']]['total_commission'] : 0;
- // BTC佣金
- $list[$k]['btvc'] = !empty($btvCommissionList[$v['login']]['total_commission']) ? (float) $btvCommissionList[$v['login']]['total_commission'] : 0;
-
- // 总外佣,CFD,股指,BTC没有外佣
- $list[$k]['wvc'] = 0;
- if (!empty($fvCommissionWyList[$v['login']]['total_commission'])) {
- $list[$k]['wvc'] += (float) $fvCommissionWyList[$v['login']]['total_commission'];
- }
- if (!empty($mvGoldCommissionWyList[$v['login']]['total_commission'])) {
- $list[$k]['wvc'] += (float) $mvGoldCommissionWyList[$v['login']]['total_commission'];
- }
- if (!empty($mvSilveCommissionWyList[$v['login']]['total_commission'])) {
- $list[$k]['wvc'] += (float) $mvSilveCommissionWyList[$v['login']]['total_commission'];
- }
-
- // 总佣金
- $list[$k]['tvc'] = $list[$k]['fvc'] + $list[$k]['gvc'] + $list[$k]['svc'] + $list[$k]['cvc'] + $list[$k]['stvc'] + $list[$k]['btvc'] + $list[$k]['wvc'];
- }
- }
- $data['data'] = $list;
- $data['draw'] = $draw;
- $data['recordsFiltered'] = $count;
- $data['recordsTotal'] = $count;
-
- $result['data'] = $data;
- $result['code'] = 1;
-
- return $result;
- }
- /**
- * @param array $post
- * @return array
- */
- public function cal($post)
- {
- $result = ['code' => 0, 'data' => [], 'message' => ''];
- $member_id = $post['member_id'];
- $sTime = isset($post['sTime']) ? DateHelper::convertDateToGmt($post['sTime']) : $this->defaultStartTime();
- $eTime = isset($post['eTime']) ? DateHelper::convertDateToGmt($post['eTime']. ' 23:59:59') : $this->defaultEndTime() . ' 23:59:59';
- $ibId = isset($post['ibId']) ? $post['ibId'] : 0;
- $where = ['and'];
- // 代理商,没有搜索条件就查所有
- $member = new Member();
- $ibs = $member->findChildrenIncludeSelf($member_id);
- $id_arr = array_column($ibs, 'id');
- if ($ibId && in_array($ibId, $id_arr)) {
- $id_arr = [$ibId];
- }
- if ($id_arr) {
- $where[] = ['in', 'cum.member_id', $id_arr];
- }
- $query = UserMember::find();
- $query->alias('cum')
- ->select('cum.login')
- ->innerJoin('mt4_users mu', 'cum.login = mu.LOGIN')
- ->where($where);
- $count = $query->count();
- $list = $query->asArray()->all();
- $fvSum = 0;
- $mvGoldSum = 0;
- $mvSilverSum = 0;
- $cvSum = 0;
- $stvSum = 0;
- $btvSum = 0;
- $fvcSum = 0;
- $gvcSum = 0;
- $svcSum = 0;
- $cvcSum = 0;
- $stvcSum = 0;
- $btvcSum = 0;
- $wvcSum = 0;
- $tvcSum = 0;
- if ($count) {
- $logins = array_column($list, 'login');
- // 配置,一定会有
- $config = Config::find()->asArray()->limit(1)->one();
- // forex
- $forexSymbols = preg_split('/\s*,\s*/', trim($config['forex_symbols']), -1, PREG_SPLIT_NO_EMPTY);
- // gold
- $xauSymbols = preg_split('/\s*,\s*/', trim($config['xau_symbols']), -1, PREG_SPLIT_NO_EMPTY);
- // silver
- $xagSymbols = preg_split('/\s*,\s*/', trim($config['xag_symbols']), -1, PREG_SPLIT_NO_EMPTY);
- // cfd
- $cfdSymbols = preg_split('/\s*,\s*/', trim($config['cfd_symbols']), -1, PREG_SPLIT_NO_EMPTY);
- // 股指
- $stockSymbols = preg_split('/\s*,\s*/', trim($config['stock_symbols']), -1, PREG_SPLIT_NO_EMPTY);
- // btc
- $btcSymbols = preg_split('/\s*,\s*/', trim($config['btc_symbols']), -1, PREG_SPLIT_NO_EMPTY);
- $mt4Trades = new Mt4Trades();
-
- // 外汇,黄金,白银,CFD,股指,BTC的总交易量
- $fvSum = $mt4Trades->getSumVolume($logins, $forexSymbols, $sTime, $eTime);
- $mvGoldSum = $mt4Trades->getSumVolume($logins, $xauSymbols, $sTime, $eTime);
- $mvSilverSum = $mt4Trades->getSumVolume($logins, $xagSymbols, $sTime, $eTime);
- $cvSum = $mt4Trades->getSumVolume($logins, $cfdSymbols, $sTime, $eTime);
- $stvSum = $mt4Trades->getSumVolume($logins, $stockSymbols, $sTime, $eTime);
- $btvSum = $mt4Trades->getSumVolume($logins, $btcSymbols, $sTime, $eTime);
- // 外汇,黄金,白银,CFD,股指,BTC的交易量列表
- $fvList = $mt4Trades->getSumVolumeEachLogin($logins, $forexSymbols, $sTime, $eTime);
- $mvGoldList = $mt4Trades->getSumVolumeEachLogin($logins, $xauSymbols, $sTime, $eTime);
- $mvSilverList = $mt4Trades->getSumVolumeEachLogin($logins, $xagSymbols, $sTime, $eTime);
- $cvList = $mt4Trades->getSumVolumeEachLogin($logins, $cfdSymbols, $sTime, $eTime);
- $stvList = $mt4Trades->getSumVolumeEachLogin($logins, $stockSymbols, $sTime, $eTime);
- $btvList = $mt4Trades->getSumVolumeEachLogin($logins, $btcSymbols, $sTime, $eTime);
- // 外汇,黄金,白银,CFD,股指,BTC的内佣列表,trade_type 外汇0,CFD1,黄金2,白银3,股指4,BTC5
- $fvCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 0, $sTime, $eTime);
- $mvGoldCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 2, $sTime, $eTime);
- $mvSilveCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 3, $sTime, $eTime);
- $cvCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 1, $sTime, $eTime);
- $stvCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 4, $sTime, $eTime);
- $btvCommissionList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 5, $sTime, $eTime);
- // 外汇,黄金,白银的外佣列表,CFD,股指,BTC没有外佣
- $fvCommissionWyList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 0, $sTime, $eTime, true);
- $mvGoldCommissionWyList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 2, $sTime, $eTime, true);
- $mvSilveCommissionWyList = $mt4Trades->getSumCommissionEachLogin($member_id, $logins, 3, $sTime, $eTime, true);
- // 计算佣金
- foreach ($list as $k => $v) {
- // 外汇,黄金,白银,CFD,股指,BTC交易量
- $list[$k]['fv'] = !empty($fvList[$v['login']]['total_volume']) ? (float) $fvList[$v['login']]['total_volume'] : 0;
- $list[$k]['mvGold'] = !empty($mvGoldList[$v['login']]['total_volume']) ? (float) $mvGoldList[$v['login']]['total_volume'] : 0;
- $list[$k]['mvSilver'] = !empty($mvSilverList[$v['login']]['total_volume']) ? (float) $mvSilverList[$v['login']]['total_volume'] : 0;
- $list[$k]['cv'] = !empty($cvList[$v['login']]['total_volume']) ? (float) $cvList[$v['login']]['total_volume'] : 0;
- $list[$k]['stv'] = !empty($stvList[$v['login']]['total_volume']) ? (float) $stvList[$v['login']]['total_volume'] : 0;
- $list[$k]['btv'] = !empty($btvList[$v['login']]['total_volume']) ? (float) $btvList[$v['login']]['total_volume'] : 0;
- // 外汇佣金
- if (!empty($fvCommissionList[$v['login']]['total_commission'])) {
- $fvcSum += (float) $fvCommissionList[$v['login']]['total_commission'];
- }
- // 黄金佣金
- if (!empty($mvGoldCommissionList[$v['login']]['total_commission'])) {
- $gvcSum += (float) $mvGoldCommissionList[$v['login']]['total_commission'];
- }
- // 白银佣金
- if (!empty($mvSilveCommissionList[$v['login']]['total_commission'])) {
- $svcSum += (float) $mvSilveCommissionList[$v['login']]['total_commission'];
- }
- // CFD佣金
- if (!empty($cvCommissionList[$v['login']]['total_commission'])) {
- $cvcSum += (float) $cvCommissionList[$v['login']]['total_commission'];
- }
- // 股指佣金
- if (!empty($stvCommissionList[$v['login']]['total_commission'])) {
- $stvcSum += (float) $stvCommissionList[$v['login']]['total_commission'];
- }
- // BTC佣金
- if (!empty($btvCommissionList[$v['login']]['total_commission'])) {
- $btvcSum += (float) $btvCommissionList[$v['login']]['total_commission'];
- }
- // 总外佣,CFD,股指,BTC没有外佣
- if (!empty($fvCommissionWyList[$v['login']]['total_commission'])) {
- $wvcSum += (float) $fvCommissionWyList[$v['login']]['total_commission'];
- }
- if (!empty($mvGoldCommissionWyList[$v['login']]['total_commission'])) {
- $wvcSum += (float) $mvGoldCommissionWyList[$v['login']]['total_commission'];
- }
- if (!empty($mvSilveCommissionWyList[$v['login']]['total_commission'])) {
- $wvcSum += (float) $mvSilveCommissionWyList[$v['login']]['total_commission'];
- }
- }
- // 总佣金
- $tvcSum += $fvcSum + $gvcSum + $svcSum + $cvcSum + $stvcSum + $wvcSum;
- }
-
- $result['data'] = [
- 'fvSum' => $fvSum,
- 'mvGoldSum' => $mvGoldSum,
- 'mvSilverSum' => $mvSilverSum,
- 'cvSum' => $cvSum,
- 'stvSum' => $stvSum,
- 'btvSum' => $btvSum,
- 'fvcSum' => $fvcSum,
- 'gvcSum' => $gvcSum,
- 'svcSum' => $svcSum,
- 'cvcSum' => $cvcSum,
- 'stvcSum' => $stvcSum,
- 'btvcSum' => $btvcSum,
- 'wvcSum' => $wvcSum,
- 'tvcSum' => $tvcSum,
- ];
- $result['code'] = 1;
-
- return $result;
- }
- /**
- * 默认开始时间,默认从上个星期天开始
- * @return string
- */
- protected function defaultStartTime()
- {
- return date('Y-m-d', strtotime('last sunday'));
- }
- /**
- * 默认结束时间,默认今天
- * @return string
- */
- protected function defaultEndTime()
- {
- return date('Y-m-d');
- }
- }
|