LotteryController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. <?php
  2. namespace backend\controllers;
  3. use Yii;
  4. use yii\data\Pagination;
  5. use common\components\util;
  6. use common\components\qrCodeUtil;
  7. use common\models\xhLuckyDrawActivity;
  8. use common\models\xhLuckyDrawAwardCustomer;
  9. use common\models\xhLuckyDrawAwardParticipant;
  10. use common\services\xhLuckyDrawActivityService;
  11. use common\services\xhLuckyDrawAwardService;
  12. use common\services\xhUserService;
  13. use common\services\xhLuckyDrawAwardCustomerService;
  14. use common\services\xhWxOpenService;
  15. use common\services\xhAdminToMerchantService;
  16. use common\services\xhTMessageService;
  17. class LotteryController extends BackendController
  18. {
  19. public function actionList()
  20. {
  21. $condition = ['merchantId' => $this->merchantId];//此商户的抽奖活动
  22. $query = xhLuckyDrawActivity::find()->where($condition)->orderBy('createTime desc');
  23. $countQuery = clone $query;
  24. $pages = new Pagination(['totalCount' => $countQuery->count(),'pageSize' => 20]);
  25. $activities = $query->offset($pages->offset)->limit($pages->limit)->asArray()->all();
  26. $now = time();
  27. foreach ($activities as $key => $activity){
  28. if($activity['startTime'] > $now){
  29. $activities[$key]['status'] = '未开始';
  30. }else if($activity['endTime'] < $now){
  31. $activities[$key]['status'] = '已结束';
  32. }else{
  33. $activities[$key]['status'] = '进行中';
  34. }
  35. }
  36. return $this->render('list', ['activities'=>$activities, 'pages' => $pages]);
  37. }
  38. public function actionAdd()
  39. {
  40. return $this->render('add');
  41. }
  42. public function actionSaveAdd(){
  43. $post = Yii::$app->request->post();
  44. $awardNames = $post['awardName'];
  45. $orders = $post['order'];
  46. $counts = $post['count'];
  47. $probabilities = $post['probability'];
  48. $luckyDrawActivityIds = '';
  49. //表单校验
  50. if($post['startTime'] > $post['endTime']){
  51. util::failInfo('结束时间要大于开始时间');
  52. }
  53. $connection = Yii::$app->db;//事务处理
  54. $transaction = $connection->beginTransaction();
  55. try {
  56. $post['merchantId'] = $this->merchantId;
  57. $post['startTime'] = strtotime($post['startTime']);
  58. $post['endTime'] = strtotime($post['endTime']);
  59. $post['awardIds'] = '';
  60. $post['createTime'] = date('Y-m-d H:m:i', time());
  61. $re = xhLuckyDrawActivityService::add($post);
  62. //奖品保存
  63. foreach($awardNames as $key => $awardName){
  64. $data = [
  65. 'awardName' => $awardName,
  66. 'order' => $orders[$key],
  67. 'count' => $counts[$key],
  68. 'probability' => $probabilities[$key],
  69. 'luckyDrawActivityId' => $re['id'],
  70. ];
  71. $drawAward = xhLuckyDrawAwardService::add($data);
  72. $luckyDrawActivityIds .= $drawAward['id'] . ',';
  73. }
  74. $luckyDrawActivityIds = rtrim($luckyDrawActivityIds, ',');
  75. //更新xhLuckyDrawActivity
  76. $update = ['awardIds' => $luckyDrawActivityIds];
  77. xhLuckyDrawActivityService::updateById($re['id'], $update);
  78. $transaction->commit();
  79. util::successInfo('抽奖活动保存成功', 'A0001');
  80. }catch (Exception $e) {
  81. $transaction->rollBack();
  82. util::failInfo('抽奖活动保存失败');
  83. }
  84. }
  85. public function actionEdit(){
  86. $id = Yii::$app->request->get('id');
  87. $awards = [];
  88. $activity = xhLuckyDrawActivityService::getById($id);
  89. $this->merchantCheck($activity);//检测merchantId数据权限
  90. $awardIds = $activity['awardIds'];
  91. $awardIdsArr = explode(',', $awardIds);
  92. foreach ($awardIdsArr as $awardId){
  93. $awards[] = xhLuckyDrawAwardService::getById($awardId);
  94. }
  95. $awards = util::arraySequence($awards, 'order', 'SORT_ASC');
  96. echo "<pre>";
  97. print_r($awards);
  98. die;
  99. return $this->render('edit', ['activity'=>$activity, 'awards'=>$awards]);
  100. }
  101. public function actionUpdate(){
  102. $post = Yii::$app->request->post();
  103. $luckyDrawActivityId = $post['id'];
  104. //检查是否有用户参与了,是:禁止修改
  105. $condition = ['luckyDrawActivityId'=>$luckyDrawActivityId];
  106. $participantCount = xhLuckyDrawAwardParticipant::getCount($condition);
  107. if($participantCount > 0){
  108. util::failInfo('有客户参与了抽奖活动,不能修改!');
  109. }
  110. $awardIds = $post['awardId'];
  111. $awardNames = $post['awardName'];
  112. $orders = $post['order'];
  113. $counts = $post['count'];
  114. $probabilities = $post['probability'];
  115. $luckyDrawActivityIds = '';
  116. $post['startTime'] = strtotime($post['startTime']);
  117. $post['endTime'] = strtotime($post['endTime']);
  118. $post['awardIds'] = '';
  119. $post['createTime'] = date('Y-m-d H:m:i', time());
  120. $re = xhLuckyDrawActivityService::updateById($luckyDrawActivityId, $post);
  121. if($re['status']){
  122. //奖品保存
  123. foreach($awardNames as $key => $awardName){
  124. $id = isset($awardIds[$key]) ? $awardIds[$key] : 0;
  125. if($id){
  126. $data = [
  127. 'awardName' => $awardName,
  128. 'order' => $orders[$key],
  129. 'count' => $counts[$key],
  130. 'probability' => $probabilities[$key],
  131. 'luckyDrawActivityId' => $re['data']['id'],
  132. ];
  133. $reData = xhLuckyDrawAwardService::updateById($id, $data);
  134. $drawAward = $reData['data'];
  135. $luckyDrawActivityIds .= $drawAward['id'] . ',';
  136. }else{
  137. $data = [
  138. 'awardName' => $awardName,
  139. 'order' => $orders[$key],
  140. 'count' => $counts[$key],
  141. 'probability' => $probabilities[$key],
  142. 'luckyDrawActivityId' => $re['data']['id'],
  143. ];
  144. $drawAward = xhLuckyDrawAwardService::add($data);
  145. $luckyDrawActivityIds .= $drawAward['id'] . ',';
  146. }
  147. }
  148. $luckyDrawActivityIds = rtrim($luckyDrawActivityIds, ',');
  149. //更新xhLuckyDrawActivity
  150. $update = ['awardIds' => $luckyDrawActivityIds];
  151. xhLuckyDrawActivityService::updateById($luckyDrawActivityId, $update);
  152. util::successInfo('抽奖活动修改成功', 'A0001');
  153. }
  154. util::failInfo('抽奖活动修改失败');
  155. }
  156. public function actionSortAwards(){
  157. }
  158. /**
  159. * 中奖列表
  160. * @return string
  161. */
  162. public function actionWinList()
  163. {
  164. $luckyDrawActivityId = Yii::$app->request->get('id');
  165. $condition = ['luckyDrawActivityId' => $luckyDrawActivityId];
  166. $query = xhLuckyDrawAwardCustomer::find()->groupBy(['uid','awardId'])->where($condition)->orderBy('hitTime desc');
  167. //$countQuery = clone $query;
  168. $pages = new Pagination(['totalCount' => $query->count(),'pageSize' => 20]);
  169. $winnerList = $query->offset($pages->offset)->limit($pages->limit)->asArray()->all();
  170. //按照奖品分类,展出获奖者
  171. if(!empty($winnerList)){
  172. foreach ($winnerList as $key => $winner){
  173. $uid = $winner['uid'];
  174. $winnerList[$key]['count'] = xhLuckyDrawAwardCustomer::getCount(['luckyDrawActivityId' => $luckyDrawActivityId, 'uid'=>$uid, 'awardId'=>$winner['awardId']]);
  175. $customer = xhUserService::getById($uid);
  176. $winnerList[$key]['mobile'] = $customer['mobile'];
  177. $winnerList[$key]['avatar'] = $customer['avatar'];
  178. }
  179. }
  180. return $this->render('winList', ['winnerList'=>$winnerList, 'pages'=>$pages]);
  181. }
  182. /**
  183. * 所有参加抽奖活动的用户列表
  184. * @return string
  185. */
  186. public function actionJoinList()
  187. {
  188. $luckyDrawActivityId = Yii::$app->request->get('id');
  189. $condition = ['luckyDrawActivityId' => $luckyDrawActivityId];
  190. $query = xhLuckyDrawAwardParticipant::find()->where($condition)->orderBy('participateTime desc');
  191. $totalCount = $query->count();
  192. $pages = new Pagination(['totalCount' => $totalCount, 'pageSize' => 20]);
  193. $participants = $query->offset($pages->offset)->limit($pages->limit)->asArray()->all();
  194. $newParticipants = [];
  195. foreach ($participants as $participant){
  196. $uid = $participant['uid'];
  197. $user = xhUserService::getById($uid);
  198. $participant['userName'] = $user['userName'];
  199. $participant['mobile'] = $user['mobile'];
  200. $participant['avatar'] = $user['avatar'];
  201. $newParticipants[] = $participant;
  202. }
  203. return $this->render('joinList', ['participants'=>$newParticipants, 'totalCount'=>$totalCount, 'pages'=>$pages]);
  204. }
  205. /**
  206. * 奖品详情
  207. * @return string
  208. */
  209. public function actionAwardDetail(){
  210. $luckyDrawActivityId = Yii::$app->request->get('id');
  211. $activity = xhLuckyDrawActivityService::getById($luckyDrawActivityId);
  212. $awardIds = $activity['awardIds'];
  213. $awardIdsArr = explode(',', $awardIds);
  214. foreach ($awardIdsArr as $awardId){
  215. $awards[] = xhLuckyDrawAwardService::getById($awardId);
  216. }
  217. //dump($awards);
  218. return $this->render('awardDetail', ['activityName'=>$activity['activityName'], 'awards'=>$awards]);
  219. }
  220. /**
  221. * 设置奖品已领取
  222. */
  223. public function actionSetAwardGet(){
  224. $awardId = Yii::$app->request->post('awardId');
  225. $luckyDrawActivityId = Yii::$app->request->post('activityId');
  226. $uid = Yii::$app->request->post('uid');
  227. $activity = xhLuckyDrawActivity::getById($luckyDrawActivityId);
  228. if($activity['merchantId'] != $this->merchantId) {//检测merchantId数据权限
  229. util::failInfo('非法访问', 'fail');
  230. }
  231. if($activity['endTime'] > time()){
  232. util::failInfo('抽奖活动未结束,禁止此设置', 'fail');
  233. }
  234. $condition = ['uid'=>$uid, 'luckyDrawActivityId'=>$luckyDrawActivityId, 'awardId'=>$awardId];
  235. $awardCustomers = xhLuckyDrawAwardCustomer::getAllByCondition($condition);
  236. foreach ($awardCustomers as $awardCustomer){
  237. $id = $awardCustomer['id'];
  238. if($awardCustomer['status'] == 1){
  239. //util::failInfo('已是领取状态', 'fail');
  240. continue;
  241. }
  242. if($awardCustomer['status'] == -1){
  243. //util::failInfo('已过期', 'fail');
  244. continue;
  245. }
  246. $data = ['status' => 1];
  247. $re = xhLuckyDrawAwardCustomerService::updateById($id, $data);
  248. /*if($re['status']){
  249. util::successInfo('置为领取成功', 'success');
  250. }else{
  251. util::failInfo('操作失败', 'fail');
  252. }*/
  253. }
  254. util::successInfo('置为领取成功', 'success');
  255. }
  256. /**
  257. * 生成活动链接的二维码地址
  258. */
  259. public function actionShowActQrcode()
  260. {
  261. $get = Yii::$app->request->get();
  262. $id = isset($get['id']) ? $get['id'] : 0;
  263. //$id校验与权限校验
  264. $activity = xhLuckyDrawActivityService::getById($id);
  265. $this->merchantCheck($activity);//检测merchantId数据权限
  266. $url = Yii::$app->params['frontUrl'].'/lottery/index?id='.$id.'&account='.$this->merchant['id'];
  267. $logo = Yii::getAlias("@app").'/../images'.$this->merchant['logo'];//取商家的logo
  268. $imgUrl = qrCodeUtil::generate($url, 'backend_active_url_'.$this->merchantId.'_'.$id, $logo);
  269. xhLuckyDrawActivityService::updateById($id, ['urlQrCode' => $imgUrl]);
  270. util::successInfo('操作成功','A0001',['url' =>$imgUrl]);
  271. }
  272. public function actionSendActiveUrl()
  273. {
  274. $get = Yii::$app->request->get();
  275. $id = isset($get['activeId']) ? $get['activeId'] : 0;
  276. $activity = xhLuckyDrawActivityService::getById($id);
  277. $this->merchantCheck($activity);//检测merchantId数据权限
  278. $name = $activity['activityName'];
  279. $url = Yii::$app->params['frontUrl'].'/lottery/index?id='.$id.'&account='.$this->merchant['id'];
  280. $admin = xhAdminToMerchantService::getAdminByMerchantId($this->merchantId);
  281. $openMerchant = xhWxOpenService::getMerchant();
  282. xhTMessageService::sendUrl($url, $name, $openMerchant, $admin);
  283. util::successInfo('已发送');
  284. }
  285. }