Activity.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693
  1. <?php
  2. namespace app\index\controller;
  3. use app\index\model\activity\ActivityModel;
  4. use app\index\model\activity\ActivityOrderDetailModel;
  5. use app\index\model\activity\ActivityOrderModel;
  6. use app\index\model\activity\ActivityPriceModel;
  7. use app\index\model\activity\ActivityTimeModel;
  8. use app\index\model\activity\CollectionModel;
  9. use app\index\service\ActivityService;
  10. use app\index\service\HelperService;
  11. class Activity extends CmsController
  12. {
  13. /**
  14. * 添加活动接口
  15. */
  16. public function addActivity(){
  17. $param_list = [
  18. 'title'=>'string',
  19. 'position_description'=>'string',
  20. 'contain'=>'int',
  21. 'telephone'=>'mobile',
  22. ];
  23. HelperService::diffParam($param_list,$this->post);
  24. $data = [
  25. 'activity_img'=>isset($this->post['activity_img'])?$this->post['activity_img']:'',
  26. 'title'=>$this->post['title'],
  27. 'sub_title'=>isset($this->post['sub_title'])?$this->post['sub_title']:'',
  28. 'show_param'=>isset($this->post['show_param'])?$this->post['show_param']:'',
  29. 'position_description'=>$this->post['position_description'],
  30. 'contain'=>$this->post['contain'],
  31. 'telephone'=>$this->post['telephone'],
  32. 'type'=>isset($this->post['type'])?$this->post['type']:0,
  33. 'status'=>0
  34. ];
  35. $activityModel = new ActivityModel();
  36. $res = $activityModel->addInfo($data);
  37. $this->returnJson($res);
  38. }
  39. /**
  40. * 修改活动接口
  41. */
  42. public function updateActivity(){
  43. $param_list = [
  44. 'activity_id'=>'number',
  45. ];
  46. HelperService::diffParam($param_list,$this->post);
  47. $data = [
  48. 'activity_img'=>isset($this->post['activity_img'])?$this->post['activity_img']:'',
  49. 'title'=>isset($this->post['title'])?$this->post['title']:'',
  50. 'sub_title'=>isset($this->post['sub_title'])?$this->post['sub_title']:'',
  51. 'position_description'=>isset($this->post['position_description'])?$this->post['position_description']:'',
  52. 'contain'=>isset($this->post['contain'])?$this->post['contain']:0,
  53. 'telephone'=>isset($this->post['telephone'])?$this->post['telephone']:'',
  54. 'show_param'=>isset($this->post['show_param'])?$this->post['show_param']:'',
  55. ];
  56. $data = array_filter($data);
  57. if(isset($this->post['status'])){
  58. $data['status'] = $this->post['status'];
  59. }
  60. if(isset($this->post['type'])){
  61. $data['type'] = $this->post['type'];
  62. }
  63. $activityModel = new ActivityModel();
  64. $row = $activityModel->upInfo(['activity_id'=>$this->post['activity_id']],$data);
  65. $this->returnJson(['row'=>$row]);
  66. }
  67. /**
  68. * 获取当前活动列表
  69. */
  70. public function getActivityList(){
  71. $param_list = [
  72. 'user_id'=>'number',
  73. ];
  74. HelperService::diffParam($param_list,$this->post);
  75. $where = [
  76. 'activity.status'=>0,
  77. ];
  78. $activityModel = new ActivityModel();
  79. $order = "sort desc,activity_id desc";
  80. if(isset($this->post['type']) && is_numeric($this->post['type'])){
  81. $order = "type <> {$this->post['type']},sort desc,activity_id desc";
  82. }
  83. $list = $activityModel->getListAndCollection($where,$order);
  84. $collectionActivityIds = $activityModel->getCurrentUserCollectionList($this->post['user_id']);
  85. foreach($list as &$item){
  86. if(isset($collectionActivityIds[$item['activity_id']])){
  87. $item['is_collection'] = 1;
  88. }else{
  89. $item['is_collection'] = 0;
  90. }
  91. }
  92. $this->returnJson($list);
  93. }
  94. /**
  95. * 获取当前活动列表
  96. */
  97. public function getActivityPage(){
  98. $param_list = [
  99. 'page'=>'number',
  100. 'pageSize'=>'number',
  101. 'condition'=>'array'
  102. ];
  103. HelperService::diffParam($param_list,$this->post);
  104. $search_key = ['title','telephone','status'];
  105. $condition = $this->post['condition'];
  106. $where = [];
  107. foreach($condition as $key=>$item){
  108. if(!in_array($key,$search_key)){
  109. continue;
  110. }
  111. switch($key){
  112. case "status":
  113. $where[$key] = $item;
  114. break;
  115. case 'title':
  116. case 'telephone':
  117. $where[$key] = ['like',"%{$item}%"];
  118. break;
  119. }
  120. }
  121. $page = $this->post['page']>1?$this->post['page']:1;
  122. $pageSize = $this->post['pageSize']>2?$this->post['pageSize']:2;
  123. $activityModel = new ActivityModel();
  124. $list = $activityModel->getPage($where,"sort desc,activity_id desc",
  125. $page,$pageSize);
  126. $this->returnJson($list);
  127. }
  128. /**
  129. * 通过条件获取订单信息
  130. */
  131. public function getUserOrderByType(){
  132. $param_list = [
  133. 'user_id'=>'number',
  134. 'status'=>'int'
  135. ];
  136. HelperService::diffParam($param_list,$this->post);
  137. if(!in_array($this->post['status'],[0,1,2,3,4,10])){
  138. $this->returnJson([],400,'status is error');
  139. }
  140. $params = [];
  141. $params['user_id'] = $this->post['user_id'];
  142. if($this->post['status']!=10){
  143. $params['status'] = $this->post['status'];
  144. }
  145. $activityOrderModel = new ActivityOrderModel();
  146. $activityOrder = $activityOrderModel->getList($params,"activity_order_id desc",100);
  147. if(empty($activityOrder)){
  148. $activityOrder = [];
  149. }else{
  150. foreach($activityOrder as $key=>$item) {
  151. $activityOrder[$key]['detail'] = $item['people_json']?json_decode($item['people_json']):[];
  152. unset($activityOrder[$key]['people_json']);
  153. }
  154. }
  155. $this->returnJson($activityOrder);
  156. }
  157. /**
  158. * 用户每种类型订单的数量
  159. */
  160. public function getUserOrderCountByType(){
  161. $param_list = [
  162. 'user_id'=>'number',
  163. 'status'=>'int'
  164. ];
  165. HelperService::diffParam($param_list,$this->post);
  166. if(!in_array($this->post['status'],[0,1,2,3,4,10])){
  167. $this->returnJson([],400,'status is error');
  168. }
  169. $params = [];
  170. $params['user_id'] = $this->post['user_id'];
  171. if($this->post['status']!=10){
  172. $params['status'] = $this->post['status'];
  173. }
  174. $activityOrderModel = new ActivityOrderModel();
  175. $activityOrder = $activityOrderModel->where($params)->count();
  176. $this->returnJson($activityOrder);
  177. }
  178. /**
  179. * 前后台修改订单(通用)
  180. */
  181. public function saveOrderStatus(){
  182. $param_list = [
  183. 'activity_order_no'=>'string',
  184. 'status'=>'number',
  185. ];
  186. HelperService::diffParam($param_list,$this->post);
  187. if(!in_array($this->post['status'],[0,1,2,3,4])){
  188. $this->returnJson([],400,'status is error');
  189. }
  190. $where = ['activity_order_no' => $this->post['activity_order_no']];
  191. $data = ['status' => $this->post['status']];
  192. $activityOrderModel = new ActivityOrderModel();
  193. $activityOrderModel->upInfo($where,$data);
  194. $this->returnJson('success');
  195. }
  196. /**
  197. * 根据订单编号或许订单详情
  198. */
  199. public function getOrderByOrderNo(){
  200. $param_list = [
  201. 'activity_order_no'=>'string'
  202. ];
  203. HelperService::diffParam($param_list,$this->post);
  204. $params = [];
  205. $params['activity_order_no'] = $this->post['activity_order_no'];
  206. $activityOrderModel = new ActivityOrderModel();
  207. $activityOrder = $activityOrderModel->getOne($params);
  208. $activityOrder['detail'] = $activityOrder['people_json']?json_decode($activityOrder['people_json']):[];
  209. unset($activityOrder['people_json']);
  210. $this->returnJson($activityOrder);
  211. }
  212. /**
  213. * 加入到活动订单里面
  214. */
  215. public function addActivityOrder(){
  216. $params_list = [
  217. 'user_id'=>'number',
  218. 'activity_id'=>'number',
  219. 'total_price'=>'number',
  220. 'total_people'=>'number',
  221. 'pay_style'=>'int',
  222. 'peopleType_num_price_array'=>'array',
  223. ];
  224. HelperService::diffParam($params_list,$this->post);
  225. $data = [
  226. 'user_id'=>$this->post['user_id'],
  227. 'activity_id'=>$this->post['activity_id'],
  228. 'total_price'=>$this->post['total_price'],
  229. 'total_people'=>$this->post['total_people'],
  230. 'pay_style'=>$this->post['pay_style'],
  231. 'people_json'=>json_encode($this->post['peopleType_num_price_array']),
  232. 'add_time'=>time(),
  233. 'add_date'=>date('Y-m-d'),
  234. 'data'=>isset($this->post['data'])?$this->post['data']:'',
  235. 'status'=>0
  236. ];
  237. $uni_qid = uniqid();//为了保证子项业务先执行的机制,建立唯一字段关联
  238. $data['activity_order_no'] = $uni_qid;
  239. $row = 0;//受影响的行数
  240. $activityOrderDetailModel = new ActivityOrderDetailModel();
  241. $peopleType_num_price_array = $this->post['peopleType_num_price_array'];
  242. foreach($peopleType_num_price_array as $item) {
  243. if (is_array($item) && isset($item['type']) && isset($item['num'])
  244. && isset($item['single_price'])) {
  245. $params = [
  246. 'activity_order_no'=>$uni_qid,
  247. 'people_type'=>$item['type'],
  248. 'single_price'=>$item['single_price'],
  249. 'people_num'=>$item['num'],
  250. 'add_time'=>time(),
  251. ];
  252. $activityOrderDetail = $activityOrderDetailModel->addInfo($params);
  253. if($activityOrderDetail){
  254. $row += 1;
  255. }
  256. }
  257. }
  258. if($row == 0){
  259. $this->returnJson(null,400,'please give me a valid array of peopleType_num_price_array');
  260. }
  261. $activityOrderModel = new ActivityOrderModel();
  262. $id = $activityOrderModel->addInfo($data);
  263. $this->returnJson($uni_qid);
  264. }
  265. /**
  266. * 获取各种类型的活动订单列表
  267. */
  268. public function ActivityOrderListByType(){
  269. $params_list =[
  270. 'type'=>'int',
  271. 'user_id'=>'number'
  272. ];
  273. HelperService::diffParam($params_list,$this->post);
  274. $activityService = new ActivityService();
  275. $condition = [
  276. 'user_id' => $this->post['user_id']
  277. ];
  278. if(in_array($this->post['type'],[0,1,2,3])){
  279. $condition['status'] = $this->post['type'];
  280. }
  281. $activityOrderList = $activityService->getActivityOrderListByCondition($condition);
  282. foreach($activityOrderList as $key=>$activityOrder){
  283. $activityOrderList[$key]['detail'] = json_decode($activityOrderList[$key]['people_json'],true);
  284. unset($activityOrderList[$key]['people_json']);
  285. }
  286. $this->returnJson($activityOrderList);
  287. }
  288. /**
  289. * 通过订单id获取订单信息
  290. */
  291. public function getActivityOrderInfoById(){
  292. $param_list = [
  293. 'order_id'=>'number',
  294. ];
  295. HelperService::diffParam($param_list,$this->post);
  296. $activityOrderModel = new ActivityOrderModel();
  297. $activityOrder = $activityOrderModel->getOne(['activity_order_id'=>$this->post['order_id']]);
  298. if(!empty($activityOrder)){
  299. $activityOrder['detail'] = json_decode($activityOrder['people_json'],true);
  300. unset($activityOrder['people_json']);
  301. }
  302. $this->returnJson($activityOrder);
  303. }
  304. /**
  305. * 获取活动订单分页
  306. */
  307. public function ActivityOrderPage(){
  308. $params_list =[
  309. 'page'=>'number',
  310. 'pageSize'=>'number',
  311. 'condition'=>'array',
  312. ];
  313. HelperService::diffParam($params_list,$this->post);
  314. $activityService = new ActivityService();
  315. $page = $this->post['page'] >1?$this->post['page']:1;
  316. $pageSize = $this->post['pageSize'] >2? $this->post['pageSize']:2;
  317. $condition = $this->post['condition'];
  318. $where = [
  319. 'user_id'=>isset($condition['user_id'])?$condition['user_id']:0,
  320. 'activity_id'=>isset($condition['activity_id'])?$condition['activity_id']:0,
  321. ];
  322. $where = array_filter($where);
  323. if(isset($condition['status']) && is_numeric($condition['status'])
  324. && in_array($condition['status'],[0,1,2,3])){
  325. $where['status'] = $condition['status'];
  326. }
  327. $activityOrderList = $activityService->getActivityOrderPageByCondition($where,'activity_id desc',$page,$pageSize);
  328. foreach($activityOrderList['list'] as $key=>$activityOrder){
  329. $activityOrderList['list'][$key]['detail'] = !empty($activityOrder['people_json'])?json_decode($activityOrder['people_json'],true):[];
  330. unset($activityOrderList['list'][$key]['people_json']);
  331. }
  332. $this->returnJson($activityOrderList);
  333. }
  334. /**
  335. * 针对于活动订单的处理
  336. */
  337. public function dealActivityOrder(){
  338. $param_list = [
  339. 'activity_order_id'=>'number',
  340. 'status'=>'number',
  341. ];
  342. HelperService::diffParam($param_list,$this->post);
  343. if(!in_array($this->post['status'],[0,1,2,3])){
  344. $this->returnJson('',400,'status is error');
  345. }
  346. $data = [
  347. 'status'=>$this->post['status'],
  348. ];
  349. if(isset($this->post['note']) && !empty($this->post['note'])){
  350. $data['note'] = $this->post['note'];
  351. }
  352. $activityOrderModel = new ActivityOrderModel();
  353. $row = $activityOrderModel->upInfo([
  354. 'activity_order_id'=>$this->post['activity_order_id']
  355. ],$data);
  356. $this->returnJson(['row'=>$row]);
  357. }
  358. /**
  359. * 根据活动id获取活动信息
  360. */
  361. public function getActivityInfoById(){
  362. $param_list = [
  363. 'activity_id'=>'number',
  364. ];
  365. HelperService::diffParam($param_list,$this->post);
  366. $activityModel = new ActivityModel();
  367. $activity = $activityModel->getOne(['activity_id'=>$this->post['activity_id']]);
  368. $this->returnJson($activity);
  369. }
  370. /**
  371. *活动每日订单数量
  372. */
  373. public function ActivityOrderDayNum(){
  374. $param = $this->request->param();
  375. $end_date = isset($param['end_date'])?strtotime($param['end_date']):strtotime("-1 seconds",strtotime(date('Y-m-d')));
  376. $start_date = isset($param['start_date'])?strtotime($param['start_date']):0;
  377. //控制时间,以免增加服务器压力
  378. if(empty($start_date) || $end_date-$start_date>86400*20){
  379. $start_date = $end_date-86400*20;
  380. }
  381. $activityOrderModel = new ActivityOrderModel();
  382. $activityOrder = $activityOrderModel
  383. ->field('count(activity_order_id) as total_count,add_date')
  384. ->where(['add_date'=>['between',[date('Y-m-d',$start_date),date('Y-m-d',$end_date)]]])->group('add_date')->cache(3600*2)->select();
  385. $this->returnJson($activityOrder);
  386. }
  387. /**
  388. *订单总数量
  389. */
  390. public function totalOrderNum(){
  391. $activityOrderModel = new ActivityOrderModel();
  392. $activityOrder = $activityOrderModel->cache(10)->count();
  393. $this->returnJson(['count'=>$activityOrder]);
  394. }
  395. /**
  396. * 根据活动id获取活动信息
  397. */
  398. public function getActivityInfoByIdAndUserId(){
  399. $param_list = [
  400. 'activity_id'=>'number',
  401. 'user_id'=>'int',
  402. ];
  403. HelperService::diffParam($param_list,$this->post);
  404. $activityModel = new ActivityModel();
  405. $activity = $activityModel->getOne(['activity_id'=>$this->post['activity_id']]);
  406. //判断当前的人是否收藏了该活动
  407. $is_collection = $activityModel->getCurrentUserIsCollection(
  408. $this->post['user_id'],
  409. $this->post['activity_id']
  410. );
  411. //获取当前活动时间的信息
  412. $activityTime = new ActivityTimeModel();
  413. $time_arr = $activityTime->getList(['activity_id'=>$this->post['activity_id']]);
  414. $activity['is_collection'] = empty($is_collection)?0:1;
  415. $activity['time_arr'] = empty($time_arr)?[]:$time_arr;
  416. $activity['collection_num'] = $activityModel->getCollectionCount($this->post['activity_id']);
  417. $this->returnJson($activity);
  418. }
  419. /**
  420. * 保存活动收藏
  421. */
  422. public function saveCollection(){
  423. $param_list = [
  424. 'user_id'=>'number',
  425. 'activity_id'=>'number',
  426. 'status'=>'int'
  427. ];
  428. HelperService::diffParam($param_list,$this->post);
  429. $data = [
  430. 'user_id'=>$this->post['user_id'],
  431. 'activity_id'=>$this->post['activity_id'],
  432. 'status'=>$this->post['status']
  433. ];
  434. $collectionModel = new CollectionModel();
  435. //判断活动是否存在
  436. $collection = $collectionModel->getOne(['user_id'=>$data['user_id'],'activity_id'=>$data['activity_id']]);
  437. if(empty($collection) && $this->post['status'] == 0) {
  438. $data['add_time'] = time();
  439. $id = $collectionModel->addInfo($data);
  440. $this->returnJson(['id'=>$id]);
  441. }else{
  442. if($this->post['status'] == 0) {
  443. $row = $collectionModel->upInfo(['id' => $collection['id']], $data);
  444. $this->returnJson(['row' => $row]);
  445. }else{
  446. $row = $collectionModel->where(['id' => $collection['id']])->delete();
  447. $this->returnJson(['row' => $row]);
  448. }
  449. }
  450. }
  451. /**
  452. * 获取用户的收藏列表
  453. */
  454. public function getCollectionByUid(){
  455. $param_list = [
  456. 'user_id'=>'number',
  457. ];
  458. HelperService::diffParam($param_list,$this->post);
  459. $collectionModel = new CollectionModel();
  460. $collection = $collectionModel->getActivityCollection(
  461. ['user_id'=>$this->post['user_id']]
  462. );
  463. $this->returnJson($collection);
  464. }
  465. /**
  466. * 活动保存价格的接口
  467. */
  468. public function saveActivityPrice(){
  469. $param_list = [
  470. 'activity_id'=>'number',
  471. 'people_price_array'=>'array'
  472. ];
  473. HelperService::diffParam($param_list,$this->post);
  474. //首先删除这个活动的所有价格,然后再去填充数据库
  475. $activityPriceModel = new ActivityPriceModel();
  476. $activityPriceModel->where(['activity_id'=>$this->post['activity_id']])->delete();
  477. //拆分数组
  478. $people_price_array = $this->post['people_price_array'];
  479. $row = 0;
  480. foreach($people_price_array as $key=>$item){
  481. if(is_numeric($item)){
  482. $id = $activityPriceModel->addInfo([
  483. 'activity_id'=>$this->post['activity_id'],
  484. 'people_type'=>$key,
  485. 'price'=>$item,
  486. ]);
  487. if($id){
  488. $row += 1;
  489. }
  490. }
  491. }
  492. $this->returnJson(['row'=>$row]);
  493. }
  494. /**
  495. * 活动保存价格的接口
  496. */
  497. public function saveActivityTime(){
  498. $param_list = [
  499. 'activity_id'=>'number',
  500. 'start_end_time_sort_array'=>'array'
  501. ];
  502. HelperService::diffParam($param_list,$this->post);
  503. //首先删除这个活动的所有时间,然后再去填充数据库
  504. $activityTimeModel = new ActivityTimeModel();
  505. $activityTimeModel->where(['activity_id'=>$this->post['activity_id']])->delete();
  506. //拆分数组
  507. $start_end_time_sort_array = $this->post['start_end_time_sort_array'];
  508. $row = 0;
  509. foreach($start_end_time_sort_array as $item){
  510. if(is_array($item) && isset($item['start_time'])
  511. && isset($item['end_time']) && isset($item['sort'])){
  512. $id = $activityTimeModel->addInfo([
  513. 'activity_id'=>$this->post['activity_id'],
  514. 'start_time'=>intval($item['start_time']),
  515. 'end_time'=>intval($item['end_time']),
  516. 'sort'=>intval($item['sort']),
  517. ]);
  518. if($id){
  519. $row += 1;
  520. }
  521. }
  522. }
  523. $this->returnJson(['row'=>$row]);
  524. }
  525. /**
  526. * 获取活动时间列表
  527. */
  528. public function getActivityTimeList(){
  529. $param_list = [
  530. 'activity_id'=>'number',
  531. ];
  532. HelperService::diffParam($param_list,$this->post);
  533. $activityTimeModel = new ActivityTimeModel();
  534. $list = $activityTimeModel->getList(['activity_id'=>$this->post['activity_id']],
  535. 'sort desc,id desc',100);
  536. $this->returnJson($list);
  537. }
  538. /**
  539. *获取活动价格
  540. */
  541. public function getActivityPriceList(){
  542. $param_list = [
  543. 'activity_id'=>'number',
  544. ];
  545. HelperService::diffParam($param_list,$this->post);
  546. $activityPriceModel = new ActivityPriceModel();
  547. $activityPriceList = $activityPriceModel->where(['activity_id'=>$this->post['activity_id']])->select();
  548. $this->returnJson($activityPriceList);
  549. }
  550. /**
  551. * 获取活动最新关注的人
  552. */
  553. public function getNewOrderByActivityId(){
  554. $param_list = [
  555. 'activity_id'=>'int',
  556. ];
  557. HelperService::diffParam($param_list,$this->post);
  558. $activityOrderModel = new ActivityOrderModel();
  559. $limit = isset($this->post['limit'])?intval($this->post['limit']):10;
  560. $activityOrderList = $activityOrderModel->getOrderListByActivityId($this->post['activity_id'],$limit,"user_id");
  561. $this->returnJson($activityOrderList);
  562. }
  563. }