| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702 |
- <?php
- namespace console\controllers;
- use common\enums\RedisKeyEnum;
- use common\enums\StatusEnum;
- use common\models\backend\Admin;
- use common\models\census\CensusMall;
- use common\models\census\CensusMallAnalysis;
- use common\models\census\CensusMallCapital;
- use common\models\census\CensusMallCapitalStatistics;
- use common\models\census\CensusMallPurchasingPower;
- use common\models\census\CensusMallRfAnalysis;
- use common\models\census\CensusMallRmAnalysis;
- use common\models\census\CensusMallSingleDay;
- use common\models\census\CensusMallUserLevelSingleDay;
- use common\models\common\CapitalLog;
- use common\models\common\CommissionLog;
- use common\models\goods\Goods;
- use common\models\mall\Mall;
- use common\models\order\Order;
- use common\models\order\OrderDetail;
- use common\models\order\OrderRefund;
- use common\models\user\User;
- use common\models\user\UserWallet;
- use yii\console\Controller;
- use yii\console\ExitCode;
- use yii\db\Expression;
- use Yii;
- class CensusMallController extends Controller
- {
- public function actionIndex()
- {
- try {
- $this->sendSite();
- } catch (\Throwable $th) {
- }
- try {
- $mall_list = Mall::getEnableMallList(true);
- $time = strtotime(date('Y-m-d', time()) . ' 00:00:00');
- $config_list = CensusMallAnalysis::getConfigList();
- foreach ($mall_list as $mall) {
- $rf_arr = [];
- $rm_arr = [];
- $rf_list = CensusMallRfAnalysis::lists(['where' => [['mall_id' => $mall['id']]], 'index' => 'purchase_interval']);
- $rm_list = CensusMallRmAnalysis::lists(['where' => [['mall_id' => $mall['id']]], 'index' => 'purchase_interval']);
- foreach ($config_list as $key => $item) {
- list($rf, $rm) = $this->getRfRm($mall, $time, $rf_list, $rm_list, $item['min'], $item['max'], $key);
- if (!empty($rf)) $rf_arr[] = $rf;
- if (!empty($rm)) $rm_arr[] = $rm;
- }
- //rf
- $redis = \Yii::$app->redis;
- if (!empty($rf_arr)) {
- $redis_key = RedisKeyEnum::suffix(RedisKeyEnum::CENSUS_MALL_RF_ANALYSIS, '', true) . ':' . $mall['id'];
- $redis->set($redis_key, json_encode($rf_arr));
- foreach ($rf_arr as $item) {
- CensusMallRfAnalysis::setData($item);
- }
- }
- //rm
- if (!empty($rm_arr)) {
- $redis_key = RedisKeyEnum::suffix(RedisKeyEnum::CENSUS_MALL_RM_ANALYSIS, '', true) . ':' . $mall['id'];
- $redis->set($redis_key, json_encode($rm_arr));
- foreach ($rm_arr as $item) {
- CensusMallRmAnalysis::setData($item);
- }
- }
- }
- return true;
- } catch (\Exception $e) {
- return false;
- }
- }
- protected function getRfRm($mall, $time, $rf_list, $rm_list, $start, $end, $purchase_interval = '1')
- {
- $head_date = date('Y-m-d', $time - $end * 24 * 3600);
- $tail_date = date('Y-m-d', $time - $start * 24 * 3600);
- if ($start != $end) {
- $head_date_start_time = strtotime($head_date . ' 00:00:00');
- $head_date_end_time = strtotime($head_date . ' 23:59:59');
- $head_list = CensusMallAnalysis::lists([
- 'where' => [
- ['mall_id' => $mall['id']],
- ['>=', 'created_at', $head_date_start_time],
- ['<=', 'created_at', $head_date_end_time],
- ],
- ]);
- }
- $tail_date_start_time = strtotime($tail_date . ' 00:00:00');
- $tail_date_end_time = strtotime($tail_date . ' 23:59:59');
- $where = [
- ['mall_id' => $mall['id']],
- ['>=', 'created_at', $tail_date_start_time],
- ['<=', 'created_at', $tail_date_end_time],
- ];
- $tail_list = CensusMallAnalysis::lists([
- 'where' => $where,
- ]);
- if (isset($rf_list[$purchase_interval])) {
- $rf_row = $rf_list[$purchase_interval];
- if (!empty($head_list)) {
- foreach ($head_list as $item) {
- switch ($item['buy_numbers']) {
- case 0:
- break;
- case 1:
- case 2:
- case 3:
- case 4:
- if ($rf_row['f_users' . $item['buy_numbers']] > 0) $rf_row['f_users' . $item['buy_numbers']]--;
- if ($rf_row['f_total_pay_money' . $item['buy_numbers']] > $item['total_pay_money']) {
- $rf_row['f_total_pay_money' . $item['buy_numbers']] -= $item['total_pay_money'];
- }
- break;
- default:
- if ($rf_row['f_users5'] > 0) $rf_row['f_users5']--;
- if ($rf_row['f_total_pay_money5'] > $item['total_pay_money']) $rf_row['f_total_pay_money5'] -= $item['total_pay_money'];
- }
- }
- }
- } else {
- $rf_row = ['purchase_interval' => $purchase_interval,
- 'f_users1' => 0, 'f_users2' => 0, 'f_users3' => 0, 'f_users4' => 0, 'f_users5' => 0,
- 'f_total_pay_money1' => 0, 'f_total_pay_money2' => 0, 'f_total_pay_money3' => 0, 'f_total_pay_money4' => 0, 'f_total_pay_money5' => 0,
- ];
- }
- foreach ($tail_list as $item) {
- switch ($item['buy_numbers']) {
- case 0:
- break;
- case 1:
- case 2:
- case 3:
- case 4:
- $rf_row['f_users' . $item['buy_numbers']]++;
- $rf_row['f_total_pay_money' . $item['buy_numbers']] += $item['total_pay_money'];
- $rf_row['f_total_pay_money' . $item['buy_numbers']] = bcmul($rf_row['f_total_pay_money' . $item['buy_numbers']] ,1,2);
- break;
- default:
- $rf_row['f_users5']++;
- $rf_row['f_total_pay_money5'] += $item['total_pay_money'];
- $rf_row['f_total_pay_money5'] = bcmul($rf_row['f_total_pay_money5'],1,2);
- }
- }
- if (isset($rm_list[$purchase_interval])) {
- $rm_row = $rm_list[$purchase_interval];
- if (!empty($head_list)) {
- foreach ($head_list as $item) {
- if ($item['total_pay_money'] >= 2000) {
- if ($rm_row['m_users5'] > 0) $rm_row['m_users1']--;
- if ($rm_row['m_total_pay_money5'] > $item['total_pay_money']) $rm_row['m_total_pay_money5'] -= $item['total_pay_money'];
- } elseif ($item['total_pay_money'] >= 1000 && $item['total_pay_money'] < 2000) {
- if ($rm_row['m_users4'] > 0) $rm_row['m_users4']--;
- if ($rm_row['m_total_pay_money4'] > $item['total_pay_money']) $rm_row['m_total_pay_money4'] -= $item['total_pay_money'];
- } elseif ($item['total_pay_money'] >= 500 && $item['total_pay_money'] < 1000) {
- if ($rm_row['m_users3'] > 0) $rm_row['m_users3']--;
- if ($rm_row['m_total_pay_money3'] > $item['total_pay_money']) $rm_row['m_total_pay_money3'] -= $item['total_pay_money'];
- } elseif ($item['total_pay_money'] >= 200 && $item['total_pay_money'] < 500) {
- if ($rm_row['m_users2'] > 0) $rm_row['m_users2']--;
- if ($rm_row['m_total_pay_money2'] > $item['total_pay_money']) $rm_row['m_total_pay_money2'] -= $item['total_pay_money'];
- } else {
- if ($rm_row['m_users1'] > 0) $rm_row['m_users1']--;
- if ($rm_row['m_total_pay_money1'] > $item['total_pay_money']) $rm_row['m_total_pay_money1'] -= $item['total_pay_money'];
- }
- }
- }
- } else {
- $rm_row = ['purchase_interval' => $purchase_interval,
- 'm_users1' => 0, 'm_users2' => 0, 'm_users3' => 0, 'm_users4' => 0, 'm_users5' => 0,
- 'm_total_pay_money1' => 0, 'm_total_pay_money2' => 0, 'm_total_pay_money3' => 0, 'm_total_pay_money4' => 0, 'm_total_pay_money5' => 0,
- ];
- }
- foreach ($tail_list as $item) {
- if ($item['total_pay_money'] >= 2000) {
- $rm_row['m_users5']++;
- $rm_row['m_total_pay_money5'] += $item['total_pay_money'];
- $rm_row['m_total_pay_money5'] = bcmul($rm_row['m_total_pay_money5'],1,2);
- } elseif ($item['total_pay_money'] >= 1000 && $item['total_pay_money'] < 2000) {
- $rm_row['m_users4']++;
- $rm_row['m_total_pay_money4'] += $item['total_pay_money'];
- $rm_row['m_total_pay_money4'] = bcmul($rm_row['m_total_pay_money4'],1,2);
- } elseif ($item['total_pay_money'] >= 500 && $item['total_pay_money'] < 1000) {
- $rm_row['m_users3']++;
- $rm_row['m_total_pay_money3'] += $item['total_pay_money'];
- $rm_row['m_total_pay_money3'] = bcmul($rm_row['m_total_pay_money3'],1,2);
- } elseif ($item['total_pay_money'] >= 200 && $item['total_pay_money'] < 500) {
- $rm_row['m_users1']++;
- $rm_row['m_total_pay_money2'] += $item['total_pay_money'];
- $rm_row['m_total_pay_money2'] = bcmul($rm_row['m_total_pay_money2'],1,2);
- } else {
- $rm_row['m_users1']++;
- $rm_row['m_total_pay_money1'] += $item['total_pay_money'];
- $rm_row['m_total_pay_money1'] = bcmul($rm_row['m_total_pay_money1'],1,2);
- }
- }
- return [$rf_row, $rm_row];
- }
- //初始化基础分析表
- public function actionInitAna($mall_id = null)
- {
- $mall_list = Mall::getEnableMallList(true);
- if ($mall_id) {
- $mall = Mall::findOne(['id' => $mall_id]);
- $this->initAna($mall);
- } else {
- foreach ($mall_list as $mall) {
- $this->initAna($mall);
- }
- }
- }
- protected function initAna($mall)
- {
- $mall_id = $mall['id'];
- $sql = "
- SELECT t.mall_id, t.user_id,t.date,sum(t.pay_money) as total_pay_money,count(*) as buy_numbers from (
- SELECT FROM_UNIXTIME(pay_time, '%Y-%m-%d') as date,user_id,mall_id, pay_money FROM qimall_order where mall_id = $mall_id and pay_status = 1
- ) t GROUP BY t.user_id,t.date
- ";
- $list = \Yii::$app->getDb()->createCommand($sql)->queryAll();
- foreach ($list as $item) {
- $model = CensusMallAnalysis::findOne(['mall_id' => $mall['id'], 'user_id' => $item['user_id'], 'date' => $item['date'], 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]);
- if (empty($model)) {
- $model = new CensusMallAnalysis();
- $model->date = $item['date'];
- $model->user_id = $item['user_id'];
- $model->mall_id = $mall['id'];
- $model->loadDefaultValues();
- }
- $model->buy_numbers = $item['buy_numbers'];
- $model->total_pay_money = $item['total_pay_money'];
- $model->save();
- $item['created_at'] = strtotime($item['date'] . ' 00:20:00');
- $res = CensusMallAnalysis::updateAll(['created_at' => strtotime($item['date'] . ' 00:20:00')],
- ['mall_id' => $item['mall_id'], 'user_id' => $item['user_id'], 'date' => $item['date']]
- );
- var_dump($res);
- }
- }
- //初始化rf,rm表
- public function actionInitRfm()
- {
- $mall_list = Mall::getEnableMallList(true);
- $time = strtotime(date('Y-m-d', time()) . ' 00:00:00');
- $config_list = CensusMallAnalysis::getConfigList();
- foreach ($mall_list as $mall) {
- $rf_arr = [];
- $rm_arr = [];
- foreach ($config_list as $key => $item) {
- list($rf, $rm) = $this->initRfRm($mall, $time, $item['min'], $item['max'], $key);
- if (!empty($rf)) $rf_arr[] = $rf;
- if (!empty($rm)) $rm_arr[] = $rm;
- }
- if (!empty($rf_arr)) {
- $redis_key = RedisKeyEnum::suffix(RedisKeyEnum::CENSUS_MALL_RF_ANALYSIS, '', true) . ':' . $mall['id'];
- $redis = \Yii::$app->redis;
- $redis->set($redis_key, json_encode($rf_arr));
- foreach ($rf_arr as $item) {
- CensusMallRfAnalysis::setData($item);
- }
- }
- if (!empty($rm_arr)) {
- $redis_key = RedisKeyEnum::suffix(RedisKeyEnum::CENSUS_MALL_RM_ANALYSIS, '', true) . ':' . $mall['id'];
- $redis = \Yii::$app->redis;
- $redis->set($redis_key, json_encode($rm_arr));
- foreach ($rm_arr as $item) {
- CensusMallRmAnalysis::setData($item);
- }
- }
- }
- }
- protected function initRfRm($mall, $time, $start, $end, $purchase_interval = 'r_1_30')
- {
- $start_time = strtotime(date('Y-m-d', $time - $start * 24 * 3600) . ' 23:59:59');
- if ($end) {
- $end_time = strtotime(date('Y-m-d', $time - $end * 24 * 3600) . ' 23:59:59');
- }
- $where[] = ['mall_id' => $mall['id']];
- $where[] = ['<', 'created_at', $start_time];
- if (isset($end_time)) $where[] = ['>=', 'created_at', $end_time];
- $list = CensusMallAnalysis::lists([
- 'where' => $where,
- 'group' => 'user_id',
- 'select' => 'mall_id,user_id,sum(total_pay_money) as total_pay_money,sum(buy_numbers) as buy_numbers,'
- ]);
- $rf_row = ['purchase_interval' => $purchase_interval,
- 'mall_id' => $mall['id'],
- 'f_users1' => 0, 'f_users2' => 0, 'f_users3' => 0, 'f_users4' => 0, 'f_users5' => 0,
- 'f_total_pay_money1' => 0, 'f_total_pay_money2' => 0, 'f_total_pay_money3' => 0, 'f_total_pay_money4' => 0, 'f_total_pay_money5' => 0,
- ];
- foreach ($list as $item) {
- switch ($item['buy_numbers']) {
- case 0:
- break;
- case 1:
- case 2:
- case 3:
- case 4:
- $rf_row['f_users' . $item['buy_numbers']]++;
- $rf_row['f_total_pay_money' . $item['buy_numbers']] += $item['total_pay_money'];
- $rf_row['f_total_pay_money' . $item['buy_numbers']] = bcmul($rf_row['f_total_pay_money' . $item['buy_numbers']],1,2);
- break;
- default:
- $rf_row['f_users5']++;
- $rf_row['f_total_pay_money5'] += $item['total_pay_money'];
- $rf_row['f_total_pay_money5'] = bcmul($rf_row['f_total_pay_money5'],1,2);
- }
- }
- $rm_row = ['purchase_interval' => $purchase_interval,
- 'mall_id' => $mall['id'],
- 'm_users1' => 0, 'm_users2' => 0, 'm_users3' => 0, 'm_users4' => 0, 'm_users5' => 0,
- 'm_total_pay_money1' => 0, 'm_total_pay_money2' => 0, 'm_total_pay_money3' => 0, 'm_total_pay_money4' => 0, 'm_total_pay_money5' => 0,
- ];
- foreach ($list as $item) {
- if ($item['total_pay_money'] >= 2000) {
- $rm_row['m_users5']++;
- $rm_row['m_total_pay_money5'] += $item['total_pay_money'];
- $rm_row['m_total_pay_money5'] = bcmul($rm_row['m_total_pay_money5'],1,2);
- } elseif ($item['total_pay_money'] >= 1000 && $item['total_pay_money'] < 2000) {
- $rm_row['m_users4']++;
- $rm_row['m_total_pay_money4'] += $item['total_pay_money'];
- $rm_row['m_total_pay_money4'] = bcmul($rm_row['m_total_pay_money4'],1,2);
- } elseif ($item['total_pay_money'] >= 500 && $item['total_pay_money'] < 1000) {
- $rm_row['m_users3']++;
- $rm_row['m_total_pay_money3'] += $item['total_pay_money'];
- $rm_row['m_total_pay_money3'] = bcmul($rm_row['m_total_pay_money3'],1,2);
- } elseif ($item['total_pay_money'] >= 200 && $item['total_pay_money'] < 500) {
- $rm_row['m_users2']++;
- $rm_row['m_total_pay_money2'] += $item['total_pay_money'];
- $rm_row['m_total_pay_money2'] = bcmul($rm_row['m_total_pay_money2'],1,2);
- } else {
- $rm_row['m_users1']++;
- $rm_row['m_total_pay_money1'] += $item['total_pay_money'];
- $rm_row['m_total_pay_money1'] = bcmul($rm_row['m_total_pay_money1'],1,2);
- }
- }
- return [$rf_row, $rm_row];
- }
- //商城单日数据,需添加定时任务
- public function actionMallSingleDay($mall_id=null)
- {
- $mall_list = Mall::getEnableMallList(true);
- $time = time();
- $date = date('Y-m-d', $time);
- $start_time = strtotime($date . ' 00:00:00');
- foreach ($mall_list as $mall) {
- $mall_id = $mall['id'];
- $goods_counts = $this->getCounts($mall['id'], $start_time);
- list($order_counts,$add_pay_orders,$add_pay_nums,$add_pay_people_nums,$add_refund_orders) = $this->getOrders($mall['id'], $start_time);
- list($settlement_commission,$expenditure_commission) = $this->fixCommissionDate($mall['id'], $start_time);
- $obj = CensusMallSingleDay::findOne(['mall_id'=>$mall_id,'date'=>$date]);
- if(empty($obj)){
- $obj = new CensusMallSingleDay();
- $obj->loadDefaultValues();
- $obj->mall_id = $mall_id;
- $obj->date = $date;
- }
- $obj->add_goods = $goods_counts??0;
- $obj->add_orders = $order_counts??0;
- $obj->add_pay_orders = $add_pay_orders??0;
- $obj->add_pay_nums = $add_pay_nums??0;
- $obj->add_pay_people_nums = $add_pay_people_nums??0;
- $obj->add_refund_orders = $add_refund_orders??0;
- $obj->settlement_commission = $settlement_commission??0;
- $obj->expenditure_commission = $expenditure_commission??0;
- $res = $obj->save();
- var_dump($res);
- }
- }
- protected function getCounts($mall_id, $start_time)
- {
- return Goods::find()->where(['mall_id' => $mall_id])->andWhere(['>=', 'created_at', $start_time])->count();
- }
- protected function getOrders($mall_id, $start_time)
- {
- $order_counts = Order::find()->where(['mall_id' => $mall_id])->andWhere(['>=', 'created_at', $start_time])->count();
- $add_pay_orders = Order::find()->where(['mall_id' => $mall_id,'pay_status'=>1])->andWhere(['>=', 'created_at', $start_time])->count();
- $add_pay_nums = OrderDetail::find()->where(['mall_id' => $mall_id])->andWhere(['>=', 'created_at', $start_time])->andWhere(['<>','order_status',0])->sum('num');
- $add_refund_orders = OrderRefund::find()->where(['mall_id' => $mall_id])->andWhere(['>=', 'created_at', $start_time])->count();
- $add_pay_people_nums = Order::find()->where(['mall_id' => $mall_id,'pay_status'=>1])
- ->andWhere(['>=', 'created_at', $start_time])
- ->groupBy('user_id')
- ->count();
- return [$order_counts,$add_pay_orders,$add_pay_nums,$add_pay_people_nums,$add_refund_orders];
- }
- public function fixCommissionDate($mall_id,$start_time)
- {
- $query = CommissionLog::find()->where(['mall_id' => $mall_id])->andWhere(['>=', 'created_at', $start_time]);
- $list = $query->select(new Expression("mall_id,
- sum(change_num) as change_num,change_type"))
- ->groupBy('change_type')->asArray()->all();
- $settlement_commission = 0;
- $expenditure_commission = 0;
- foreach ($list as $item){
- if($item['change_type']=='add'){
- $settlement_commission+=$item['change_num'];
- }else{
- $expenditure_commission+=$item['change_num'];
- }
- }
- return [$settlement_commission,$expenditure_commission];
- }
- //会员等级单日统计,需添加定时任务
- public function actionUserLevelSingleDay($mall_id=null){
- $mall_list = Mall::getEnableMallList(true);
- foreach ($mall_list as $mall) {
- $mall_id = $mall['id'];
- $this->userLevelSingle($mall_id);
- }
- }
- public function userLevelSingle($mall_id){
- $list = User::lists(
- [
- 'where' => [
- ['mall_id' => $mall_id],
- ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]
- ],
- 'select' => 'count(*) as counts,level',
- 'group' => 'level'
- ]
- );
- foreach ($list as $item) {
- $date = date('Y-m-d', time());
- $model = CensusMallUserLevelSingleDay::findOne(['mall_id' => $mall_id, 'date' => $date, 'level' => $item['level']]);
- if (empty($model)) {
- $model = new CensusMallUserLevelSingleDay();
- $model->loadDefaultValues();
- $model->mall_id = $mall_id;
- $model->level = $item['level'];
- $model->date = $date;
- }
- $model->numbers = $item['counts'];
- $res = $model->save();
- }
- var_dump('userLevelSingle执行结束');
- }
- //商城资金统计,需添加定时任务
- public function actionCapital($mall_id = null)
- {
- if (!empty($mall_id)) {
- $mall = Mall::findOne(['id' => $mall_id]);
- if ($mall) {
- $this->capitalBalance($mall['id']);
- $this->capitalScore($mall['id']);
- $this->capitalCommission($mall['id']);
- }
- } else {
- $mall_list = Mall::getEnableMallList(true);
- foreach ($mall_list as $mall) {
- $this->capitalBalance($mall['id']);
- $this->capitalScore($mall['id']);
- $this->capitalCommission($mall['id']);
- }
- }
- }
- public function capitalBalance($mall_id)
- {
- $type = 'balance';
- $total_nums = UserWallet::find()->where(['mall_id' => $mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])->sum('total_balance');
- CapitalLog::$capitalType = $type;
- $use_nums = CapitalLog::find()->where(['mall_id' => $mall_id, 'change_type' => 'sub', 'status' => StatusEnum::ENABLED])->sum('change_num');
- $surplus_nums = UserWallet::find()->where(['mall_id' => $mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])->sum('balance');
- CapitalLog::$capitalType = $type;
- $withdrawal_nums = CapitalLog::find()->where(['mall_id' => $mall_id,
- 'change_type' => 'sub',
- 'from_type' => 'withdrawal',
- 'status' => StatusEnum::ENABLED])->sum('change_num');
- $model = CensusMallCapital::findOne(['mall_id' => $mall_id, 'type' => $type]);
- if (empty($model)) {
- $model = new CensusMallCapital();
- $model->mall_id = $mall_id;
- $model->type = $type;
- }
- $model->total_nums = $total_nums ?? 0;
- $model->use_nums = $use_nums ?? 0;
- $model->surplus_nums = $surplus_nums ?? 0;
- $model->withdrawal_nums = $withdrawal_nums ?? 0;
- $res = $model->save();
- var_dump('capitalBalance执行结束');
- }
- public function capitalScore($mall_id)
- {
- $type = 'score';
- $result = UserWallet::find()->where(['mall_id' => $mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])
- ->select('sum(total_score) as total_score,sum(total_use_score) as total_use_score,sum(score) as score')
- ->groupBy('mall_id')
- ->asArray()
- ->one();
- $model = CensusMallCapital::findOne(['mall_id' => $mall_id, 'type' => $type]);
- if (empty($model)) {
- $model = new CensusMallCapital();
- $model->mall_id = $mall_id;
- $model->type = $type;
- }
- $model->total_nums = $result['total_score'] ?? 0;
- $model->use_nums = $result['total_use_score'] ?? 0;
- $model->surplus_nums = $result['score'] ?? 0;
- $res = $model->save();
- var_dump('capitalScore执行结束');
- }
- public function capitalCommission($mall_id)
- {
- $type = 'commission';
- $result = UserWallet::find()->where(['mall_id' => $mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])
- ->select('sum(total_commission) as total_commission,sum(frozen_commission) as frozen_commission,sum(commission) as commission')
- ->asArray()
- ->one();
- CapitalLog::$capitalType = $type . '_frozen';
- $cancel_nums = CapitalLog::find()->where(['mall_id' => $mall_id, 'status' => StatusEnum::DELETE])->sum('change_num');
- $frozen_commission = CapitalLog::find()->where(['mall_id' => $mall_id, 'status' => StatusEnum::DISABLED])->sum('change_num');
- $model = CensusMallCapital::findOne(['mall_id' => $mall_id, 'type' => $type]);
- if (empty($model)) {
- $model = new CensusMallCapital();
- $model->mall_id = $mall_id;
- $model->type = $type;
- }
- CapitalLog::$capitalType = $type;
- $commission_sum = CapitalLog::find()->where(['mall_id' => $mall_id, 'change_type' =>'add'])
- ->andWhere(['!=', 'from_type', 'withdrawal']) // 过滤提现驳回增加的记录
- ->sum('change_num');
- $withdrawal_nums = CapitalLog::find()->where([
- 'mall_id' => $mall_id,
- 'change_type' => 'sub',
- 'from_type' => 'withdrawal'
- ])->sum('change_num');
- if(empty($commission_sum)) $commission_sum = 0;
- if(empty($frozen_commission)) $frozen_commission = 0;
- $model->total_nums = $commission_sum;
- $model->surplus_nums = $result['commission'] ?? 0;
- $model->unsettled = $frozen_commission ?? 0;
- $model->cancel_nums = $cancel_nums ?? 0;
- $model->withdrawal_nums = $withdrawal_nums ?? 0;
- $res = $model->save();
- var_dump('capitalCommission执行结束');
- }
- public function sendSite()
- {
- $mall = [];
- $mall_list = Mall::find()
- ->select(['id', 'mall_sign', 'name'])
- ->where(['is_recycle' => 0, 'is_delete' => 0, 'status' => 1])
- ->andWhere(['>', 'expired_at', time()])
- ->orWhere(['=', 'expired_at', 0])
- ->all();
- $user_count_list = User::find()
- ->select(['mall_id', 'count(id) as user_total'])
- ->groupBy('mall_id')
- ->asArray()
- ->all();
- $user_count_list = static::getArrByKey($user_count_list, 'mall_id');
- $census_list = CensusMall::find()->asArray()->all();
- $census_list = static::getArrByKey($census_list, 'mall_id');
- $admin_list = Admin::find()
- ->select(['id', 'mall_id', 'username'])
- ->where(['>', 'mall_id', 0])
- ->andWhere(['is_default' => 1])
- ->all();
- $admin_list = static::getArrByKey($admin_list, 'mall_id');
- $total_commission_list = UserWallet::find()->select(['mall_id', 'sum(total_commission) as total'])->groupBy('mall_id')->asArray()->all();
- $total_commission_list = static::getArrByKey($total_commission_list, 'mall_id');
- foreach ($mall_list as $item) {
- $user_count = $user_count_list[$item->id]['user_total'] ?? 0;
- $total_pay_money = $census_list[$item->id]['total_pay_money'] ?? 0;
- $username = $admin_list[$item->id]['username'] ?? '';
- $total_commission = !empty($total_commission_list[$item->id]['total']) ? $total_commission_list[$item->id]['total'] : 0;
- $mall[] = [
- 'mall_id' => $item->id,
- 'mall_name' => $item->name,
- 'mobile' => $username,
- 'total_user' => $user_count,
- 'total_price' => $total_pay_money ?? 0,
- 'total_commission' => $total_commission,
- ];
- }
- $data['host'] = \Yii::$app->services->setting->platform->get('system.api_url');
- $data['data'] = $mall;
- $url = "https://middle-api.qijianshigw.com/qimall-statistics/data/submit";
- $headers['Content-Type'] = 'application/json; charset=utf-8';
- $client = new \GuzzleHttp\Client();
- $result = $client->request('POST', $url, ['form_params' => $data]);
- }
- protected static function getArrByKey(array $array, string $key)
- {
- $res = [];
- foreach ($array as $item) {
- $res[$item[$key]] = $item;
- }
- return $res;
- }
- public function actionCapitalDate()
- {
- try {
- $mall_list = Mall::getEnableMallList(true);
- if (empty($mall_list)) {
- return true;
- }
- $now_time = time();
- $date = date('Y-m-d', $now_time);
- $insert_data = [];
- foreach ($mall_list as $mall) {
- $data = CensusMallCapital::find()->where([
- 'mall_id' => $mall['id'],
- 'type' => ['balance', 'score', 'commission'],
- 'status' => StatusEnum::ENABLED])
- ->asArray()->all();
- $data = array_column($data, null, 'type');
- $insert_data[] = [
- $mall['id'],
- $date,
- $data['balance']['surplus_nums'] ?? 0,
- $data['commission']['surplus_nums'] ?? 0,
- $data['score']['surplus_nums'] ?? 0,
- StatusEnum::ENABLED,
- $now_time,
- $now_time
- ];
- }
- $fields = [
- 'mall_id',
- 'statistics_date',
- 'balance_surplus_nums',
- 'commission_surplus_nums',
- 'score_surplus_nums',
- 'status',
- 'created_at',
- 'updated_at'
- ];
- if ($insert_data) {
- Yii::$app->db->createCommand()->batchInsert(
- CensusMallCapitalStatistics::tableName(),
- $fields,
- $insert_data
- )->execute();
- }
- return ExitCode::OK;
- } catch (\Exception $e) {
- echo $e->getMessage();
- return ExitCode::UNSPECIFIED_ERROR;
- }
- }
- }
|