Task.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. /**
  6. * 任务接口
  7. */
  8. class Task extends Api
  9. {
  10. protected $noNeedLogin = [''];
  11. protected $noNeedRight = '*';
  12. public function _initialize()
  13. {
  14. parent::_initialize();
  15. $this->taskModel = new \app\common\model\Task();
  16. $this->tasklogModel = new \app\common\model\TaskLog();
  17. }
  18. /**
  19. * 获取任务列表
  20. */
  21. public function getTaskList() {
  22. $type_id = input("type_id",1); // 任务类型:1=实时任务,2=每日任务
  23. $plat = input("plat",1); // 平台:1=安卓,2=ios
  24. $urlArr = ["1"=>"android_url","2"=>"ios_url"];
  25. $jump_url = $urlArr[$plat];
  26. if($type_id == 2) {
  27. // 获取所有基础任务
  28. $where = [];
  29. $where["type_id"] = 2;
  30. $where["is_show"] = 1;
  31. $taskList = Db::name('task')
  32. ->field("id,type_id,image,name,exp,exp_woman,number,".$jump_url." as jump_url,url_type")
  33. ->where($where)
  34. ->autopage()
  35. ->select();
  36. foreach($taskList as $key => &$val){
  37. if($this->auth->gender == 0){
  38. $val['exp'] = $val['exp_woman'];
  39. }
  40. unset($val['exp_woman']);
  41. }
  42. $taskList = list_domain_image($taskList,['image']);
  43. $today = strtotime(date("Y-m-d 00:00:00"));
  44. //今日开始的任务
  45. $where = [];
  46. $where["user_id"] = $this->auth->id;
  47. $where["createtime"] = ["gt",$today];
  48. $finishInfo = \app\common\model\TaskLog::where($where)->select();
  49. $finishIds = [];
  50. if($finishInfo) foreach($finishInfo as $k => $v) {
  51. $finishIds[$v["task_id"]] = $v;
  52. }
  53. if($taskList) {
  54. foreach($taskList as $k => $v) {
  55. $finishInfo = isset($finishIds[$v["id"]])?$finishIds[$v["id"]]:[];
  56. if($finishInfo) {
  57. $taskList[$k]["pace"] = $finishInfo->pace;
  58. $taskList[$k]["is_finish"] = $finishInfo->is_finish;
  59. $taskList[$k]["finish_number"] = $finishInfo->finish_number;
  60. $taskList[$k]["is_reward"] = $finishInfo->is_reward;
  61. if($finishInfo->is_finish != 1 && $finishInfo->pace != 0) {
  62. $taskList[$k]["pace_txt"] = $finishInfo->finish_number."/".$v["number"];
  63. }
  64. } else {
  65. $taskList[$k]["pace"] = 0;
  66. $taskList[$k]["is_finish"] = 0;
  67. $taskList[$k]["finish_number"] = 0;
  68. $taskList[$k]["is_reward"] = 0;
  69. $taskList[$k]["pace_txt"] = "0/".$v["number"];
  70. }
  71. }
  72. }
  73. } else {
  74. // 获取基本信息
  75. $where = [];
  76. $where["a.type_id"] = 1;
  77. $where["a.is_show"] = 1;
  78. $taskList = Db::name('task')->alias("a")
  79. ->field("a.id,a.type_id,a.image,a.name,a.exp,a.exp_woman,a.number,a.".$jump_url." as jump_url,a.url_type,l.pace,l.is_reward,l.is_finish,l.finish_number")
  80. ->join("task_log l", "l.task_id = a.id and l.user_id = ".$this->auth->id, "left")
  81. ->where($where)
  82. ->autopage()
  83. ->order("a.id","asc")
  84. ->select();
  85. foreach($taskList as $key => &$val){
  86. if($this->auth->gender == 0){
  87. $val['exp'] = $val['exp_woman'];
  88. }
  89. unset($val['exp_woman']);
  90. }
  91. $taskList = list_domain_image($taskList,['image']);
  92. if($taskList) {
  93. foreach($taskList as $k => $v) {
  94. $v["pace"] || $taskList[$k]["pace"] = 0;
  95. $v["is_finish"] || $taskList[$k]["is_finish"] = 0;
  96. $v["finish_number"] || $taskList[$k]["finish_number"] = 0;
  97. $v["is_reward"] || $taskList[$k]["is_reward"] = 0;
  98. if($v["is_finish"] != 1 && $v["pace"] != 0) {
  99. $taskList[$k]["pace_txt"] = $v["finish_number"]."/".$v["number"];
  100. }
  101. }
  102. }
  103. }
  104. $this->success("获取成功!",$taskList);
  105. }
  106. /**
  107. * 领取奖励
  108. */
  109. public function getReward() {
  110. $task_id = input("task_id"); // 任务ID
  111. if (!$task_id) {
  112. $this->error(__('Invalid parameters'));
  113. }
  114. // 查询任务信息
  115. $taskInfo = $this->taskModel->where(["id"=>$task_id])->find();
  116. if(!$taskInfo) {
  117. $this->error("任务信息未找到!");
  118. }
  119. // 查询用户完成情况
  120. $where = [];
  121. $where["user_id"] = $this->auth->id;
  122. $where["task_id"] = $task_id;
  123. $where["is_finish"] = 1;
  124. if($taskInfo["type_id"] == 2){
  125. $where["finish_date"] = date("Ymd");
  126. }
  127. $tasklogInfo = $this->tasklogModel->where($where)->find();
  128. if(!$tasklogInfo) {
  129. $this->error("任务还未完成哦!");
  130. }
  131. if($tasklogInfo["is_reward"] == 1) {
  132. $this->error("任务奖励已领取,请勿重复领取!");
  133. }
  134. Db::startTrans();
  135. try{
  136. // 增加用户金币
  137. $exp = $this->auth->gender == 0 ? $taskInfo['exp_woman'] : $taskInfo['exp'];
  138. $res1 = model('wallet')->lockChangeAccountRemain($this->auth->id,'jewel',$exp,32,$taskInfo['name'],'task_log',$tasklogInfo['id']);
  139. if($res1['status'] === false){
  140. Db::rollback();
  141. $this->error($res1['msg']);
  142. }
  143. // 更新奖励领取状态
  144. $res2 = $this->tasklogModel->update(["is_reward"=>1],["task_id"=>$task_id,"user_id"=>$this->auth->id]);
  145. if($res1['status'] === true && $res2) {
  146. Db::commit();
  147. $this->success("领取成功!");
  148. } else {
  149. Db::rollback();
  150. $this->error("领取失败!");
  151. }
  152. }catch (ValidateException $e) {
  153. Db::rollback();
  154. $this->error($e->getMessage());
  155. } catch (PDOException $e) {
  156. Db::rollback();
  157. $this->error($e->getMessage());
  158. } catch (Exception $e) {
  159. Db::rollback();
  160. $this->error($e->getMessage());
  161. }
  162. }
  163. /**
  164. * 完成任务
  165. */
  166. public function finishTask() {
  167. $task_id = input("task_id"); // 任务编码
  168. $number = input("number",1); // 完成次数
  169. if (!$task_id) {
  170. $this->error(__('Invalid parameters'));
  171. }
  172. \app\common\model\TaskLog::tofinish($this->auth->id,$task_id,$number);
  173. $this->success("成功!");
  174. }
  175. }