DashboardController.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: leo
  5. * Date: 2018/2/24
  6. * Time: 下午12:48
  7. */
  8. namespace frontendApi\modules\v1\controllers;
  9. use common\helpers\Cache;
  10. use common\helpers\ChartData;
  11. use common\helpers\Date;
  12. use common\helpers\user\Reconsume;
  13. use common\helpers\user\Info;
  14. use common\models\Ad;
  15. use common\models\Article;
  16. use common\models\ArticleCategory;
  17. use common\models\CalcBonus;
  18. use common\models\EliteLevel;
  19. use common\models\FlowBonus;
  20. use common\models\Period;
  21. use common\models\ReconsumePool;
  22. use common\models\RemainPv;
  23. use common\models\Order;
  24. use common\models\User;
  25. use Yii;
  26. class DashboardController extends BaseController
  27. {
  28. public $modelClass = FlowBonus::class;
  29. public function behaviors() {
  30. $behaviors = parent::behaviors();
  31. return $behaviors;
  32. }
  33. /**
  34. * 控制台首页
  35. * @return mixed
  36. * @throws \yii\base\Exception
  37. * @throws \yii\db\Exception
  38. * @throws \yii\web\HttpException
  39. */
  40. public function actionIndex(){
  41. $nowTime = Date::nowTime();
  42. $baseInfo = Info::baseInfoZh(\Yii::$app->user->id);
  43. $news = ArticleCategory::find()
  44. ->select('ID,CATE_NAME')
  45. ->orderBy('CREATED_AT DESC')
  46. ->asArray()
  47. ->all();
  48. $where = ' CID=:CID AND STATUS=1 AND COUNTRY_ID=:COUNTRY_ID';
  49. foreach ($news as &$value){
  50. $params = [
  51. ':CID' => $value['ID'],
  52. ':COUNTRY_ID' => $baseInfo['COUNTRY_ID'],
  53. ];
  54. $value['LISTS'] = Article::find()
  55. ->select('ID,TITLE,CID,CREATED_AT')
  56. ->where($where, $params)
  57. ->orderBy('SORT DESC')
  58. ->orderBy('CREATED_AT DESC')
  59. ->limit(6)
  60. ->asArray()
  61. ->all();
  62. }
  63. $empLv = $baseInfo['EMP_LV'];
  64. $empLvName = $baseInfo['EMP_LV_NAME'];
  65. if($baseInfo['SHOW_EMP_LV']){
  66. $empLv = $baseInfo['SHOW_EMP_LV'];
  67. $empLvName = Cache::getEmpLevelConfig()[$baseInfo['SHOW_EMP_LV']]['LEVEL_NAME'];
  68. }
  69. //会员级别
  70. $decLv = $baseInfo['DEC_LV'];
  71. $decLvName = $baseInfo['DEC_LV_NAME'];
  72. //期数显示
  73. $period = Period::instance();
  74. $periodNum = $period->getNowPeriodNum();
  75. // 会员Elite级别
  76. $user = User::findOneAsArray('ID=:ID', [':ID' => \Yii::$app->user->id]);
  77. $eliteLv = $user['LAST_ELITE_LV'] ?: EliteLevel::getDefaultLevelId();
  78. $eliteLvName = EliteLevel::getNameById($eliteLv);
  79. $curYM = Period::find()->select("CALC_YEAR,CALC_MONTH")->where('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM'=>$periodNum])->asArray()->one();
  80. $plist=Period::find()->select("PERIOD_NUM")->where('CALC_YEAR=:CALC_YEAR AND CALC_MONTH=:CALC_MONTH', [':CALC_YEAR'=>$curYM['CALC_YEAR'],':CALC_MONTH'=>$curYM['CALC_MONTH']])->orderBy('PERIOD_NUM ASC')->asArray()->all();
  81. $wkrd = '';
  82. foreach ($plist as $k=>$v){
  83. if($v['PERIOD_NUM']==$periodNum){
  84. $wkrd =$k+1;break;
  85. }
  86. }
  87. if($wkrd==1){
  88. $wkrd.='st';
  89. }else{
  90. $wkrd.='nd';
  91. }
  92. $monthArray = [
  93. 1 => 'Jan',
  94. 2 => 'Feb',
  95. 3 => 'Mar',
  96. 4 => 'Apr',
  97. 5 => 'May',
  98. 6 => 'Jun',
  99. 7 => 'Jul',
  100. 8 => 'Aug',
  101. 9 => 'Sep',
  102. 10 => 'Oct',
  103. 11 => 'Nov',
  104. 12 => 'Dec',
  105. ];
  106. //剩余分期PV显示
  107. $myRemainPv = RemainPv::findOne(['USER_ID'=>$baseInfo['ID']])->REMAIN_PV ?? 0;
  108. // 找到当月的所有订单,计算总PV及总REMAIN_PV
  109. $myOrders = Order::fetchOrderCurrentMonth($periodNum, $baseInfo['ID']);
  110. $myCurrentOrders = Order::fetchOrderCurrentPeriod($periodNum, $baseInfo['ID']);
  111. $currentPv = $myOrders->SUM('PV');
  112. $currentRemainPv = $myCurrentOrders->SUM('REMAIN_PV');
  113. $totalRemainPv = $myRemainPv + $currentRemainPv;
  114. $remainMonth = $totalRemainPv / 30;
  115. if($currentPv >= 30){ // 如果当月合格,则活跃资格延后一个月
  116. $activeEndStr = date("Y-m", strtotime('next month'));
  117. }else{
  118. $activeEndStr = date("Y-m");
  119. }
  120. $activeEndStr = $activeEndStr. " + $remainMonth months";
  121. $activeEnd = date("Y-m-d H:i:s", strtotime($activeEndStr));
  122. $sliders = Ad::findUseSlaves()
  123. ->select('ID,IMAGE,LID,TITLE,CONTENT,TYPE')
  124. ->where('LID=:LID AND STATUS=1 AND COUNTRY_ID=:COUNTRY_ID', [':LID'=>'7EFF6260A16C3CC7E053693418AC03E4', ':COUNTRY_ID'=>$baseInfo['COUNTRY_ID']])
  125. ->orderBy('SORT ASC')
  126. ->asArray()
  127. ->all();
  128. return static::notice([
  129. 'nowTime' => $nowTime,
  130. 'empLv'=>$empLv,
  131. 'empLvName'=>$empLvName,
  132. 'decLv'=>$decLv,
  133. 'decLvName'=>$decLvName,
  134. 'eliteLv'=>$eliteLv,
  135. 'eliteLvName'=>$eliteLvName,
  136. 'slides'=> $sliders,
  137. 'news'=>$news,
  138. 'periodNum'=>$periodNum . ', ' . $wkrd . ' '. Yii::t('app', 'pcOf') . ' '. $monthArray[$curYM['CALC_MONTH']],
  139. 'myRemainPv'=>$totalRemainPv,
  140. 'activeEnd'=>$activeEnd
  141. ]);
  142. }
  143. /**
  144. * 移动端我的页面首页
  145. * @return mixed
  146. * @throws \yii\base\Exception
  147. * @throws \yii\web\HttpException
  148. */
  149. public function actionMyIndex() {
  150. $nowTime = Date::nowTime();
  151. $baseInfo = Info::baseInfoZh(\Yii::$app->user->id);
  152. $empLv = $baseInfo['EMP_LV'];
  153. $empLvName = $baseInfo['EMP_LV_NAME'];
  154. if ($baseInfo['SHOW_EMP_LV']) {
  155. $empLv = $baseInfo['SHOW_EMP_LV'];
  156. $empLvName = Cache::getEmpLevelConfig()[$baseInfo['SHOW_EMP_LV']]['LEVEL_NAME'];
  157. }
  158. return static::notice([
  159. 'nowTime' => $nowTime,
  160. 'reConsumePool' => Reconsume::getUserReconsumePool(\Yii::$app->user->id),
  161. 'empLv' => $empLv,
  162. 'empLvName' => $empLvName,
  163. ]);
  164. }
  165. /**
  166. * 近7期奖金
  167. * @return mixed
  168. * @throws \yii\db\Exception
  169. * @throws \yii\web\HttpException
  170. */
  171. public function actionPeriodBonus(){
  172. return static::notice(CalcBonus::periodBonus(\Yii::$app->user->id));
  173. }
  174. /**
  175. * 奖金量
  176. * @return mixed
  177. * @throws \yii\web\HttpException
  178. */
  179. public function actionBonusNum(){
  180. $chartData = ChartData::instance();
  181. return static::notice($chartData->userBonusData(\Yii::$app->user->id));
  182. }
  183. /**
  184. * 控制台首页
  185. * @return mixed
  186. * @throws \yii\base\Exception
  187. * @throws \yii\db\Exception
  188. * @throws \yii\web\HttpException
  189. */
  190. public function actionBaIndex(){
  191. $nowTime = Date::nowTime();
  192. $news = ArticleCategory::find()->select('ID,CATE_NAME')->orderBy('SORT ASC')->asArray()->all();
  193. $where = ' CID=:CID AND STATUS=1';
  194. foreach ($news as &$value){
  195. $params = [
  196. ':CID'=>$value['ID'],
  197. ];
  198. $value['LISTS'] = Article::find()->select('ID,TITLE,CID,CREATED_AT')->where($where,$params)->orderBy('CREATED_AT DESC')->limit(6)->asArray()->all();
  199. }
  200. //期数显示
  201. $period = Period::instance();
  202. $periodNum = $period->getNowPeriodNum();
  203. //
  204. $curYM = Period::find()->select("CALC_YEAR,CALC_MONTH")->where('PERIOD_NUM=:PERIOD_NUM', [':PERIOD_NUM'=>$periodNum])->asArray()->one();
  205. $plist = Period::find()->select("PERIOD_NUM")->where('CALC_YEAR=:CALC_YEAR AND CALC_MONTH=:CALC_MONTH', [':CALC_YEAR'=>$curYM['CALC_YEAR'],':CALC_MONTH'=>$curYM['CALC_MONTH']])->orderBy('PERIOD_NUM ASC')->asArray()->all();
  206. $wkrd = '';
  207. foreach ($plist as $k=>$v) {
  208. if($v['PERIOD_NUM'] == $periodNum){
  209. $wkrd = $k + 1;
  210. break;
  211. }
  212. }
  213. if ($wkrd == 1) {
  214. $wkrd .= 'st';
  215. } else {
  216. $wkrd .= 'nd';
  217. }
  218. $monthArray = [
  219. 1 => 'Jan',
  220. 2 => 'Feb',
  221. 3 => 'Mar',
  222. 4 => 'Apr',
  223. 5 => 'May',
  224. 6 => 'Jun',
  225. 7 => 'Jul',
  226. 8 => 'Aug',
  227. 9 => 'Sep',
  228. 10 => 'Oct',
  229. 11 => 'Nov',
  230. 12 => 'Dec',
  231. ];
  232. return static::notice([
  233. 'nowTime' => $nowTime,
  234. 'slides'=> Ad::findUseSlaves()->select('ID,IMAGE,LID,TITLE,CONTENT,TYPE')->where('LID=:LID AND STATUS=1', [':LID'=>'7EFF6260A16C3CC7E053693418AC03E4'])->orderBy('SORT ASC')->asArray()->all(),
  235. 'news'=>$news,
  236. 'periodNum'=>$periodNum . ' ,' . $wkrd . ' PC of '. $monthArray[$curYM['CALC_MONTH']],
  237. ]);
  238. }
  239. }