Activity.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\system\controller\v1;
  4. use app\BaseController;
  5. use app\model\api\User as UserModel;
  6. use app\model\api\Activity as ActivityModel;
  7. use app\Request;
  8. use library\services\UtilService;
  9. // +----------------------------------------------------------------------
  10. // | [ WE CAN DO IT MORE SIMPLE ]
  11. // +----------------------------------------------------------------------
  12. // | Copyright (c) 2018-2020 rights reserved.
  13. // +----------------------------------------------------------------------
  14. // | [ 活动管理 ]
  15. // +----------------------------------------------------------------------
  16. // | Date: 2020-09-06 21:53
  17. // +----------------------------------------------------------------------
  18. class Activity extends BaseController{
  19. private $activityDefaultParms = [
  20. ["title"=>"联系电话","type"=>"input","required"=>1,"content"=>"","parms"=>[]],
  21. ["title"=>"联系人","type"=>"input","required"=>1,"content"=>"","parms"=>[]],
  22. ];
  23. private $activityFromType=[
  24. ["title"=>"文本输入框","type"=>"input"],
  25. ["title"=>"下拉选择框","type"=>"select"],
  26. ["title"=>"文本域","type"=>"textarea"],
  27. ];
  28. /**
  29. * 活动列表
  30. * @param Request $request
  31. * @return type
  32. */
  33. public function list(Request $request) {
  34. $pageSize = 50;
  35. $post = UtilService::getMore([
  36. ['page',1],
  37. ['title',''],
  38. ['is_main',''],
  39. ['status',''],
  40. ['is_show',''],
  41. ['time',[]],
  42. ],$request);
  43. $where = [];
  44. //添加时间
  45. $startTime="";
  46. $endTime="";
  47. if(!empty($post['time'][0]) && !empty($post['time'][1])) {
  48. $startTime = strtotime($post['time'][0]);
  49. $endTime = strtotime($post['time'][1]);
  50. $where[]=["c.add_time","between","{$startTime},{$endTime}"];
  51. }
  52. if (!empty($post["title"])){
  53. $where[]=["c.title","like","%{$post['title']}%"];
  54. }
  55. if (!empty($post["is_main"]) && (int)$post["is_main"]==1){
  56. $where[]=["c.is_main","=",1];
  57. }
  58. if(in_array((string)$post["status"],['1','0'])){
  59. //活动已经结束
  60. if((string)$post["status"]=="0"){
  61. $where[]=["c.time","<=",time()];
  62. }
  63. //报名中
  64. if((string)$post["status"]=="1"){
  65. $where[]=["c.time",">",time()];
  66. }
  67. }
  68. if(in_array((string)$post["is_show"],['1','0'])){
  69. $where[]=["c.is_show","=",(int)$post["is_show"]];
  70. }
  71. $data = (new ActivityModel)
  72. ->field("c.*,IFNULL(o.order_count,0) as order_count")
  73. ->alias("c")
  74. ->leftJoin("(select count(*) as order_count,activity_id from table_activity_order where status > 0 group by activity_id) as o","o.activity_id = c.id")
  75. ->where($where)
  76. ->page((int)$post["page"], (int)$pageSize)
  77. ->order("c.is_main","desc")
  78. ->order("c.id","desc")
  79. ->select()
  80. ->toArray();
  81. $pageCount = (new ActivityModel)->alias("c")->where($where)->count();
  82. $data = empty($data)?[]:$data;
  83. $defaultParms=$this->activityDefaultParms;
  84. foreach($data as $k=>$v){
  85. $data[$k]["imgs"] = empty($v["imgs"]) ? [] : explode(",",$v["imgs"]);
  86. $data[$k]["descs"] = empty($v["descs"]) ? [] : explode(",",$v["descs"]);
  87. $data[$k]["labels"] = empty($v["labels"]) ? [] : explode(",",$v["labels"]);
  88. $data[$k]["time"] = date("Y-m-d H:i:s",$v["time"]);
  89. $data[$k]["add_time"] = date("Y-m-d H:i:s",$v["add_time"]);
  90. $data[$k]["status"] = $v["time"] > time() ? 1 : 0;
  91. $data[$k]["data"] = empty($v["data"]) ? [] : unserialize($v["data"]);
  92. }
  93. return app('json')->success([
  94. 'list' => $data,
  95. 'pageCount' => $pageCount,
  96. 'pageSize' => $pageSize,
  97. 'page' => $post["page"],
  98. 'defaultParms' => $defaultParms,
  99. 'activityFromType'=>$this->activityFromType,
  100. ]);
  101. }
  102. /**
  103. * 添加编辑活动
  104. * @param Request $request
  105. * @return type
  106. */
  107. public function add(Request $request){
  108. $post = UtilService::getMore([
  109. ['id','0'],
  110. ['title','','empty','请填写活动标题'],
  111. ['mono',''],
  112. ['deposits_price','0','is_numeric','请输入正确的活动定金'],
  113. ['time','','empty','请选择活动时间'],
  114. ['time_str',''],
  115. ['address',''],
  116. ['imgs',[],'empty','请上传活动主图'],
  117. ['descs',[],'empty','请上传活动详情图'],
  118. ['labels',[]],
  119. ['is_show','0'],
  120. ['is_main','0'],
  121. ['data',[],'empty','请添加报名参数'],
  122. ],$request);
  123. $post["deposits_price"] = floatval($post["deposits_price"]);
  124. $post["time"] = strtotime($post["time"]);
  125. $post["imgs"] = empty($post["imgs"]) ? "" : implode(",", $post["imgs"]);
  126. $post["descs"] = empty($post["descs"]) ? "" : implode(",", $post["descs"]);
  127. $post["labels"] = empty($post["labels"]) ? "" : implode(",", $post["labels"]);
  128. $post["is_show"] = (int)$post["is_show"];
  129. $post["is_main"] = (int)$post["is_main"];
  130. if($post["is_main"]==1){
  131. (new ActivityModel)->where("is_main",1)->update(["is_main"=>0]);
  132. }
  133. //参数添加
  134. $parmsAr = empty($post["data"]) ? [] : $post["data"];
  135. $post["data"]=[];
  136. $activityFromType = $this->activityFromType;
  137. foreach($parmsAr as $k=>$v){
  138. if(!empty($v["title"]) && !empty($v["type"])){
  139. $check = false;
  140. foreach($activityFromType as $k2=>$v2){
  141. if($v2["type"]==$v["type"]){
  142. $check = true;
  143. break;
  144. }
  145. }
  146. if(!$check){
  147. return app('json')->fail("请选择正确的参数类型");
  148. }
  149. if($v["type"]=="select" && (empty($v["parms"]) || !is_array($v["parms"]))){
  150. return app('json')->fail("请添加下拉选择框的选项值");
  151. }
  152. if($v["type"]!="select"){
  153. $v["parms"] = [];
  154. }
  155. $post["data"][]=[
  156. "title" => trim($v["title"]),
  157. "content" => trim($v["content"]),
  158. "type" => trim($v["type"]),
  159. "required"=> (int)$v["required"]==1?1:0,
  160. "parms" => $v["parms"],
  161. ];
  162. }
  163. }
  164. $post["data"] = serialize($post["data"]);
  165. $id = $post["id"];
  166. unset($post["id"]);
  167. $r=0;
  168. if(empty($id) || $id=="0"){
  169. $post["add_time"] = time();
  170. $r = (new ActivityModel)->insert($post);
  171. }else{
  172. $r = (new ActivityModel)->where("id",$id)->update($post);
  173. }
  174. if($r){
  175. return app('json')->success("数据保存成功");
  176. }else{
  177. return app('json')->fail("数据保存失败");
  178. }
  179. }
  180. }