Task.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <?php
  2. namespace app\controller\v2;
  3. use app\extra\basic\Base;
  4. use app\extra\service\blue\TaskService;
  5. use app\extra\tools\XcJob;
  6. use app\middleware\WxMiddleware;
  7. use app\model\blue\BlueCategory;
  8. use app\model\blue\BlueExpert;
  9. use app\model\blue\BlueExpertPlatform;
  10. use app\model\blue\BlueTask;
  11. use app\model\blue\BlueTaskUser;
  12. use DI\Attribute\Inject;
  13. use LinFly\Annotation\Route\Controller;
  14. use LinFly\Annotation\Route\Middleware;
  15. use LinFly\Annotation\Route\Route;
  16. use support\Request;
  17. use support\Response;
  18. use yzh52521\EasyHttp\Http;
  19. #[Controller(prefix: "/wx_v2/task"),Middleware(WxMiddleware::class)]
  20. class Task extends Base
  21. {
  22. protected array $noNeedLogin = ["getTaskList"];
  23. #[Inject]
  24. protected TaskService $service;
  25. #[Inject]
  26. protected BlueTask $model;
  27. /**
  28. * 任务列表
  29. * @param Request $request
  30. * @return Response
  31. */
  32. #[Route(path: "portal",methods: "get")]
  33. public function getTaskList(Request $request): Response
  34. {
  35. try {
  36. $param = $request->all();
  37. if (empty($param['size'])) return errorTrans("empty.require");
  38. $param['pageSize'] = $param['size'];
  39. $list = $this->service->getList($param,"id,title,product_cover_url,job_id,category,category_detail,expiration_time_end,sign_number,need_number,product_price,level");
  40. $category = (new BlueCategory)->where("type",1)->field("name,icon,small_icon,sign")->append(['id'])->withAttr(['id' => function($data,$resp){
  41. return $resp['sign'];
  42. }])->select()->toArray();
  43. return successTrans("success.data",[
  44. "category" => $category,
  45. "filter" => $this->getTaskFilter(),
  46. "task" => pageFormat($list)
  47. ],200);
  48. } catch (\Throwable $throwable) {
  49. return error($throwable->getMessage());
  50. }
  51. }
  52. protected function getTaskFilter(): array
  53. {
  54. return [
  55. [
  56. "name" => "任务状态",
  57. "children" => [
  58. [
  59. "name" => "不限",
  60. "field" => "status",
  61. "val" => 0
  62. ],
  63. [
  64. "name" => "进行中",
  65. "field" => "status",
  66. "val" => 1
  67. ],
  68. [
  69. "name" => "已终止",
  70. "field" => "status",
  71. "val" => 2
  72. ]
  73. ]
  74. ],
  75. [
  76. "name" => "平台等级",
  77. "children" => [
  78. [
  79. "name" => "不限",
  80. "field" => "level",
  81. "val" => 0
  82. ],
  83. ]
  84. ],
  85. [
  86. "name" => "平台等级",
  87. "children" => [
  88. [
  89. "name" => "不限",
  90. "field" => "sort",
  91. "val" => 0
  92. ],
  93. ]
  94. ]
  95. ];
  96. }
  97. /**
  98. * 任务详情
  99. * @param Request $request
  100. * @return Response
  101. */
  102. #[Route(path: "detail",methods: "get")]
  103. public function getTaskDetail(Request $request): Response
  104. {
  105. try {
  106. $param = $this->_valid([
  107. "task_sn.require" => trans("empty.require"),
  108. "id.require" => trans("empty.require"),
  109. ],$request->method());
  110. if (!is_array($param)) return error($param);
  111. $data = $this->service->getTaskDetail($param);
  112. if (empty($data)) return errorTrans("empty.data");
  113. $return = $data->toArray();
  114. $content = json_decode($return['content'],true);
  115. $return['content'] = $content['content_advice_v2']??[];
  116. $return['need_number'] = $return['need_number']>0 ? $return['need_number'] : 999;
  117. $return['field_tag'] = [
  118. [
  119. "label" => "商品售价",
  120. "content" => $return['price_format']
  121. ],
  122. [
  123. "label" => "投放预算",
  124. "content" => $return['total_budget'] == 0 ? '不限' : $return['total_budget_format']
  125. ],
  126. [
  127. "label" => "商品售价",
  128. "content" => $return['price_format']
  129. ],
  130. [
  131. "label" => "商品售价",
  132. "content" => $return['price_format']
  133. ],
  134. [
  135. "label" => "商品售价",
  136. "content" => $return['price_format']
  137. ]
  138. ];
  139. return success("ok",$return);
  140. } catch (\Throwable $throwable) {
  141. return error($throwable->getMessage());
  142. }
  143. }
  144. /**
  145. * 任务报名
  146. * @param Request $request
  147. * @return Response
  148. */
  149. #[Route(path: "sign",methods: "post")]
  150. public function taskUserReg(Request $request): Response
  151. {
  152. try {
  153. $param = $this->_valid([
  154. "task_sn.require" => trans("empty.require"),
  155. "task_id.require" => trans("empty.require"),
  156. ],$request->method());
  157. if (!is_array($param)) return error($param);
  158. $task = $this->model->where(['job_id' => $param['task_sn'],'id' => $param['task_id']])->findOrEmpty();
  159. if ($task->isEmpty()) return errorTrans("empty.data");
  160. $expert = (new BlueExpert)->where(["openid" => $request->user['openid'] ])->findOrEmpty();
  161. if ($expert->isEmpty()) return error("请先完成平台认证",[],2);
  162. $platform = (new BlueExpertPlatform)->where(["openid" => $request->user['openid'],'source' => $task['category']])->findOrEmpty();
  163. if ($platform->isEmpty()) return error("请先绑定平台账号",[],3);
  164. $starId = $platform['star_id'];
  165. if (empty($platform['star_id'])) {
  166. [$starState,$starData] = (new XcJob)->getStarData($platform['unique_id']);
  167. if (!$starState) return error($starData,[],4);
  168. $platform->star_id = $starData['list'][0]['star_id']??'';
  169. $platform->save();
  170. $starId = $starData['list'][0]['star_id'];
  171. }
  172. if ($platform['jd_exist'] == 0) {
  173. $resp = Http::asJson()->post("https://api.jiandaoyun.com/api/v1/automation/tenant/69dc899f71c9656940c3db33/hooks/69e07cb9d9016a50bb60ae230bb32ba47135e7e946bedb7a",[
  174. "uid" => $platform['unique_id'],
  175. "platform" => $task['category']
  176. ])->array();
  177. }
  178. $taskUser = (new BlueTaskUser)->where(['openid' => $request->user['openid'],'job_id' => $param['task_sn'],'task_id' => $param['task_id']])->findOrEmpty();
  179. if (!$taskUser->isEmpty()) return error("请勿重复报名");
  180. $state = $taskUser->insertGetId([
  181. "openid" => $request->user['openid'],
  182. "task_id" => $param['task_id'],
  183. "job_id" => $param['task_sn'],
  184. "source" => $task['category'],
  185. "start_id" => $starId, // 星图ID
  186. "status" => 0 // 0待提交 1审核中 2审核通过 3已拒绝
  187. ]);
  188. if (!$state) return errorTrans("error.data");
  189. return successTrans("success.data",['qrcode' => "https://work.weixin.qq.com/ca/cawcde3784d6329ab7"],5);
  190. // return successTrans("success.data",['task_user_id' => $state]);
  191. } catch (\Throwable $throwable) {
  192. return error($throwable->getMessage());
  193. }
  194. }
  195. /**
  196. * 绑定星图ID
  197. * @param Request $request
  198. * @return Response
  199. */
  200. #[Route(path: "star",methods: "post")]
  201. public function bindStarId(Request $request): Response
  202. {
  203. try {
  204. $param = $this->_valid([
  205. "star.require" => trans("empty.require"),
  206. "source.require" => trans("empty.require")
  207. ],$request->method());
  208. if (!is_array($param)) return error($param);
  209. $platform = (new BlueExpertPlatform)->where(["openid" => $request->user['openid'],'source' => $param['source']])->findOrEmpty();
  210. if ($platform->isEmpty()) return error("未绑定该平台账号");
  211. $platform->star_id = $param['star'];
  212. $state = $platform->save();
  213. if (!$state) return errorTrans("error.data");
  214. return successTrans("success.data");
  215. } catch (\Throwable $throwable) {
  216. return error($throwable->getMessage());
  217. }
  218. }
  219. }