UserController.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  1. <?php
  2. namespace app\controller;
  3. use app\api\repositories\UsersRepositories;
  4. use app\business\BankCardBusiness;
  5. use app\business\LoginBusiness;
  6. use app\business\PayorderBusiness;
  7. use app\business\StreamBusiness;
  8. use app\business\UserIdentityBusiness;
  9. use Illuminate\Support\Arr;
  10. use Matrix\Exception;
  11. use Respect\Validation\Validator;
  12. use support\Db;
  13. use support\Redis;
  14. use support\Request;
  15. use hg\apidoc\annotation as Apidoc;
  16. use Throwable;
  17. use Webman\Captcha\CaptchaBuilder;
  18. use Webman\Captcha\PhraseBuilder;
  19. use function Symfony\Component\String\s;
  20. #[Apidoc\Title("用户信息")]
  21. #[Apidoc\Group("User")]
  22. #[Apidoc\Sort(5)]
  23. class UserController
  24. {
  25. #[Apidoc\Title("用户信息")]
  26. #[Apidoc\Url("api/user.html")]
  27. #[Apidoc\Method("POST")]
  28. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  29. #[Apidoc\Returned(name: "uuid", type: "int", require: true, desc: 'UUID', default: '100001')]
  30. #[Apidoc\Returned(name: "mobile", type: "string", require: true, desc: '账号', default: '15800000000')]
  31. #[Apidoc\Returned(name: "name", type: "string", require: true, desc: '名称', default: '主号')]
  32. #[Apidoc\Returned(name: "money", type: "string", require: true, desc: '我的资产', default: '0.00')]
  33. #[Apidoc\Returned(name: "money_one", type: "string", require: true, desc: '推荐奖', default: '0.00')]
  34. #[Apidoc\Returned(name: "money_two", type: "string", require: true, desc: '持股数量', default: '0.00')]
  35. #[Apidoc\Returned(name: "money_four", type: "string", require: true, desc: '持股总价值', default: '0.00')]
  36. #[Apidoc\Returned(name: "money_five", type: "string", require: true, desc: '股权分红', default: '0.00')]
  37. #[Apidoc\Returned(name: "money_six", type: "string", require: true, desc: '股权今日分红', default: '0.00')]
  38. #[Apidoc\Returned(name: "money_seven", type: "string", require: true, desc: '总股权分红', default: '0.00')]
  39. #[Apidoc\Returned(name: "sign_award", type: "string", require: true, desc: '签到奖励', default: '0.00')]
  40. #[Apidoc\Returned(name: "autonym", type: "string", require: true, desc: '实名赠送我的资产', default: '0.00')]
  41. #[Apidoc\Returned(name: "invitation_award", type: "string", require: true, desc: '邀请奖励', default: '0.00')]
  42. #[Apidoc\Returned(name: "is_alipay", type: "string", require: true, desc: '是否绑定支付宝 true false', default: '0.00')]
  43. #[Apidoc\Returned(name: "is_wechat", type: "string", require: true, desc: '是否绑定微信 true false', default: '0.00')]
  44. #[Apidoc\Returned(name: "total_sign", type: "int", require: true, desc: '签到总天数', default: '')]
  45. #[Apidoc\Returned(name: "day_is_sign", type: "int", require: true, desc: '今日是否签到', default: '')]
  46. #[Apidoc\Returned(name: "user_identity", type: "array", desc: '实名信息', default: '', children: [
  47. ['name' => "name", 'type' => 'string', 'require' => true, 'default' => '张三1', 'desc' => '姓名'],
  48. ['name' => "number", 'type' => 'string', 'require' => true, 'default' => '500221233312836451', 'desc' => '身份证号'],
  49. ])]
  50. #[Apidoc\Returned(name: "bank_card", type: "string", desc: '银行卡', default: '', children: [
  51. ['name' => "affiliated_bank", 'type' => 'string', 'require' => true, 'default' => '中国银行1', 'desc' => '归属银行'],
  52. ['name' => "account_holder", 'type' => 'string', 'require' => true, 'default' => '张三', 'desc' => '开户人'],
  53. ['name' => "card_number", 'type' => 'string', 'require' => true, 'default' => '500221233312836451', 'desc' => '卡号'],
  54. ])]
  55. public function userData(Request $request)
  56. {
  57. //查询今日是否已签到
  58. $day_is_sign = Db::table('wa_stream')
  59. ->where('type', streamType2)
  60. ->whereBetween('add_time', [strtotime(date('Y-m-d')) . ' 00:00:00', strtotime(date('Y-m-d') . ' 23:59:59')])
  61. ->where('user_id', $request->user_data['id'])
  62. ->first();
  63. $total_sign = Db::table('wa_stream')->where('type', streamType2)->where('user_id', $request->user_data['id'])->count();
  64. $system = Db::table('wa_system')->first();
  65. $money_six = Db::table('wa_stream')
  66. ->where('type', streamType9)
  67. ->where('mold', moldType5)
  68. ->whereBetween('add_time', [strtotime(date('Y-m-d')) . ' 00:00:00', strtotime(date('Y-m-d') . ' 23:59:59')])
  69. ->where('user_id', $request->user_data['id'])
  70. ->sum('money');
  71. // $is_buy_extract = Db::table('wa_payorder')
  72. // ->where('user_id', $request->user_data['id'])
  73. // ->where('is_pay', 2)
  74. // ->where('goods_type', 4)
  75. // ->exists();
  76. //
  77. // $is_alipay = Db::table('wa_binding')
  78. // ->where('user_id', $request->user_data['id'])
  79. // ->where('type', 1)
  80. // ->exists();
  81. // $is_weChat = Db::table('wa_binding')
  82. // ->where('user_id', $request->user_data['id'])
  83. // ->where('type', 2)
  84. // ->exists();
  85. //
  86. // $is_buy_sign = Db::table('wa_payorder')
  87. // ->where('user_id', $request->user_data['id'])
  88. // ->where('is_pay', 2)
  89. // ->where('goods_type', 6)
  90. // ->exists();
  91. // $is_buy_mail = Db::table('wa_payorder')
  92. // ->where('user_id', $request->user_data['id'])
  93. // ->where('is_pay', 2)
  94. // ->where('goods_type', 9)
  95. // ->exists();
  96. $payorderseven = Db::table('wa_payorder')
  97. ->where('user_id', $request->user_data['id'])
  98. ->where('is_pay', 2)
  99. ->where('goods_type', 7)
  100. ->first();
  101. if ($payorderseven) {
  102. $is_buy_join = true;
  103. $join_name = $payorderseven->name;
  104. $join_number = $payorderseven->number;
  105. $join_mobile = $payorderseven->mobile;
  106. } else {
  107. $is_buy_join = false;
  108. $join_name = '';
  109. $join_number = '';
  110. $join_mobile = '';
  111. }
  112. $is_buy_vip = Db::table('wa_payorder')
  113. ->where('user_id', $request->user_data['id'])
  114. ->where('is_pay', 2)
  115. ->where('goods_type', 12)
  116. ->first();
  117. $is_buy_dtpass = Db::table('wa_payorder')
  118. ->where('user_id', $request->user_data['id'])
  119. ->where('is_pay', 2)
  120. ->where('goods_type', 13)
  121. ->first();
  122. $is_buy_tenfour = Db::table('wa_payorder')
  123. ->where('user_id', $request->user_data['id'])
  124. ->where('is_pay', 2)
  125. ->where('goods_type', 14)
  126. ->first();
  127. $arr = [
  128. 'img' => !empty($request->user_data['img']) ? imageToBase64($request->user_data['img']) : '',
  129. 'uuid' => $request->user_data['uuid'],
  130. 'mobile' => $request->user_data['mobile'],
  131. 'name' => $request->user_data['name'],
  132. 'is_autonym' => $request->user_data['is_autonym'],
  133. 'is_num' => $request->user_data['is_num'],
  134. 'money' => $request->user_data['money'],
  135. 'money_one' => $request->user_data['money_one'],
  136. 'money_two' => $request->user_data['money_two'],
  137. 'money_four' => $request->user_data['money_four'],
  138. 'money_five' => $request->user_data['money_five'],
  139. 'pass_one' => $request->user_data['pass_one'],
  140. 'sign_img' => !empty($request->user_data['sign_img']) ? imageToBase64($request->user_data['sign_img']) : '',
  141. 'sign_time' => $request->user_data['sign_time'],
  142. 'money_six' => $money_six,
  143. 'money_seven' => $request->user_data['money_seven'],
  144. 'mail_province' => $request->user_data['mail_province'],
  145. 'mail_address' => $request->user_data['mail_address'],
  146. 'sign_award' => $system->sign_award,
  147. 'autonym' => $system->autonym,
  148. 'invitation_award' => $system->invitation_award,
  149. 'rebate' => $system->rebate,
  150. // 'day_is_sign' => $day_is_sign ? true : false,
  151. // 'is_wechat' => $is_weChat ? true : false,
  152. // 'is_alipay' => $is_alipay ? true : false,
  153. // 'is_buy_extract' => $is_buy_extract ? true : false,
  154. // 'is_buy_sign' => $is_buy_sign ? true : false,
  155. 'is_buy_mail' => true,
  156. 'is_buy_vip' => $is_buy_vip ? true : false,
  157. 'is_buy_dtpass' => $is_buy_dtpass ? true : false,
  158. 'is_buy_tenfour' => $is_buy_tenfour ? true : false,
  159. 'day_is_sign' => true,
  160. 'is_wechat' => true,
  161. 'is_alipay' => true,
  162. 'is_buy_extract' => true,
  163. 'is_buy_sign' => true,
  164. 'is_buy_join' => $is_buy_join,
  165. 'total_sign' => $total_sign,
  166. 'user_identity' => UserIdentityBusiness::data(['uid' => $request->user_data['id']]),
  167. 'bank_card' => BankCardBusiness::data(['uid' => $request->user_data['id']]),
  168. 'wechat_binding' => $request->user_data['wechat_binding'],
  169. 'alipay_binding' => $request->user_data['alipay_binding'],
  170. 'join_name' => $join_name,
  171. 'join_number' => $join_number,
  172. 'join_mobile' => $join_mobile,
  173. ];
  174. $signdata = Db::table('wa_sign_record')
  175. ->where('uid', $request->user_data['id'])
  176. ->whereIn('goods_id', [30, 44])
  177. ->first();
  178. if (empty($signdata)) {
  179. $payorderId = PayorderBusiness::orderAdd([
  180. 'id' => 44,
  181. 'pay_characteristic' => 99999,
  182. 'user_data' => [
  183. 'id' => $request->user_data['id']
  184. ],
  185. 'num' => 1,
  186. ]);
  187. $payorder = Db::table('wa_payorder')->where('id', $payorderId)->first();
  188. PayorderBusiness::payorderSave(collect($payorder)->toArray());
  189. }
  190. return success($arr);
  191. }
  192. #[Apidoc\Title("签到列表")]
  193. #[Apidoc\Url("api/user/signlist.html")]
  194. #[Apidoc\Method("POST")]
  195. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  196. #[Apidoc\Returned(name: "money", type: "string", desc: '签到奖励', default: '')]
  197. #[Apidoc\Returned(name: "day", type: "string", desc: '天数', default: '')]
  198. #[Apidoc\Returned(name: "has", type: "string", desc: '是否签到', default: 'true 已签到 false 未签到')]
  199. #[Apidoc\Returned(name: "signcount", type: "string", desc: '累计签到天数', default: '1')]
  200. #[Apidoc\Returned(name: "continuity", type: "string", desc: '连续签到天数', default: 't1')]
  201. #[Apidoc\Returned(name: "is_sign", type: "string", desc: '今日是否签到', default: 'true 已签到 false 未签到')]
  202. public function signlist(Request $request)
  203. {
  204. $system = Db::table('wa_system')->first();
  205. $arr[] = date('Y-m-d', strtotime('monday this week'));
  206. $arr[] = date('Y-m-d', strtotime('monday this week +1 day'));
  207. $arr[] = date('Y-m-d', strtotime('monday this week +2 day'));
  208. $arr[] = date('Y-m-d', strtotime('monday this week +3 day'));
  209. $arr[] = date('Y-m-d', strtotime('monday this week +4 day'));
  210. $arr[] = date('Y-m-d', strtotime('monday this week +5 day'));
  211. $arr[] = date('Y-m-d', strtotime('sunday this week'));
  212. $array = [];
  213. foreach ($arr as $k => $v) {
  214. $array[] = [
  215. 'day' => date('d', strtotime($v)),
  216. 'has' => Db::table('wa_stream')
  217. ->where('user_id', $request->user_data['id'])
  218. ->where('type', streamType2)
  219. ->whereBetween('add_time', [strtotime($v . ' 00:00:00'), strtotime($v . ' 23:59:59')])->exists()
  220. ];
  221. }
  222. $signcount = Db::table('wa_stream')->where('type', streamType2)->where('user_id', $request->user_data['id'])->count();
  223. $is_sign = Db::table('wa_stream')
  224. ->where('user_id', $request->user_data['id'])
  225. ->where('type', streamType2)
  226. ->whereBetween('add_time', [strtotime(date('Y-m-d') . ' 00:00:00'), strtotime(date('Y-m-d') . ' 23:59:59')])
  227. ->exists();
  228. return success([
  229. 'list' => $array,
  230. 'signcount' => $signcount,
  231. 'continuity' => $request->user_data['continuity'],
  232. 'money' => $system->sign_award,
  233. 'is_sign' => $is_sign,
  234. ]);
  235. }
  236. #[Apidoc\Title("签到")]
  237. #[Apidoc\Url("api/user/sign.html")]
  238. #[Apidoc\Method("POST")]
  239. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  240. #[Apidoc\Returned(name: "money", type: "string", desc: '奖励金额', default: '888')]
  241. #[Apidoc\Returned(name: "signcount", type: "string", desc: '累计签到天数', default: '888')]
  242. public function sign(Request $request)
  243. {
  244. Db::beginTransaction();
  245. try {
  246. $zuotian = Db::table('wa_stream')
  247. ->where('user_id', $request->user_data['id'])
  248. ->where('type', streamType2)
  249. ->whereBetween('add_time', [bcsub(strtotime(date('Y-m-d') . ' 00:00:00'), 86400), bcadd(strtotime(date('Y-m-d') . ' 23:59:59'), 86400)])
  250. ->exists();
  251. if ($zuotian) {
  252. $continuity = bcadd($request->user_data['continuity'], 1);
  253. } else {
  254. $continuity = 1;
  255. }
  256. $has = Db::table('wa_stream')
  257. ->where('user_id', $request->user_data['id'])
  258. ->where('type', streamType2)
  259. ->whereBetween('add_time', [strtotime(date('Y-m-d') . ' 00:00:00'), strtotime(date('Y-m-d') . ' 23:59:59')])
  260. ->exists();
  261. if ($has) {
  262. throw new \Exception('今日已签到,请不要重复签到');
  263. }
  264. $system = Db::table('wa_system')->first();
  265. if (!empty($system->sign_award)) {
  266. StreamBusiness::addStream($request->user_data['id'], $system->sign_award, streamType2, moldType1, moldTypefild1);
  267. }
  268. $signcount = Db::table('wa_stream')->where('type', streamType2)->where('user_id', $request->user_data['id'])->count();
  269. Db::table('wa_users')->where(['id' => $request->user_data['id']])->update(['continuity' => $continuity]);
  270. } catch (\Throwable $exception) {
  271. Db::rollBack();
  272. return error($exception->getMessage());
  273. }
  274. Db::commit();
  275. return success([
  276. 'money' => $system->sign_award,
  277. 'signcount' => $signcount
  278. ], '签到成功');
  279. }
  280. #[Apidoc\Title("我的团队头数据")]
  281. #[Apidoc\Url("api/user/team.html")]
  282. #[Apidoc\Method("POST")]
  283. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  284. #[Apidoc\Returned(name: "num", type: "int", require: true, desc: '团队总人数', default: '1')]
  285. #[Apidoc\Returned(name: "day_num", type: "int", require: true, desc: '今日新增人数', default: '1')]
  286. #[Apidoc\Returned(name: "earnings", type: "int", require: true, desc: '总拥金收益', default: '0')]
  287. #[Apidoc\Returned(name: "dayearnings", type: "int", require: true, desc: '今日收益', default: '0')]
  288. #[Apidoc\Returned(name: "money", type: "int", require: true, desc: '总业绩', default: '0')]
  289. #[Apidoc\Returned(name: "one", type: "int", require: true, desc: '一级人数', default: '0')]
  290. #[Apidoc\Returned(name: "two", type: "int", require: true, desc: '二级人数', default: '0')]
  291. #[Apidoc\Returned(name: "three", type: "int", require: true, desc: '三级人数', default: '0')]
  292. #[Apidoc\Returned(name: "rebate", type: "int", require: true, desc: '一级返佣', default: '0')]
  293. #[Apidoc\Returned(name: "rebate_one", type: "int", require: true, desc: '二级返佣', default: '0')]
  294. #[Apidoc\Returned(name: "rebate_two", type: "int", require: true, desc: '三级返佣', default: '0')]
  295. public function team(Request $request)
  296. {
  297. $param = $request->user_data;
  298. $data = Db::table('wa_users')->where(function ($query) use ($param) {
  299. $query->orWhere('pid', $param['id']);
  300. $query->orWhere('ppid', $param['id']);
  301. $query->orWhere('toppid', $param['id']);
  302. });
  303. $system = Db::table('wa_system')->first();
  304. /** @var $num 团队总人数 */
  305. $num = (clone $data)->count();
  306. $stream = Db::table('wa_stream')->where('mold', moldType2)->where('user_id', $request->user_data['id']);
  307. return success([
  308. 'num' => $num,
  309. 'day_num' => (clone $data)
  310. ->where('created_at', '>=', date('Y-m-d') . ' 00:00:00')
  311. ->where('created_at', '<=', date('Y-m-d') . ' 23:59:59')->count(),
  312. 'earnings' => (clone $stream)->sum('money'),
  313. 'dayearnings' => (clone $stream)
  314. ->where('add_time', '>=', strtotime(date('Y-m-d')))
  315. ->where('add_time', '<=', strtotime(date('Y-m-d 23:59:59')))
  316. ->sum('money'),
  317. 'money' => (clone $data)->sum('invest_money'),
  318. 'one' => Db::table('wa_users')->where('pid', $param['id'])->count(),
  319. 'two' => Db::table('wa_users')->where('ppid', $param['id'])->count(),
  320. 'three' => Db::table('wa_users')->where('toppid', $param['id'])->count(),
  321. 'rebate' => $system->rebate,
  322. 'rebate_one' => $system->rebate_one,
  323. 'rebate_two' => $system->rebate_two,
  324. ]);
  325. }
  326. #[Apidoc\Title("我的团队列表数据")]
  327. #[Apidoc\Url("api/user/team_list.html")]
  328. #[Apidoc\Method("POST")]
  329. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  330. #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
  331. #[Apidoc\Param("limit", type: "int", require: true, desc: "输出条数", mock: 10)]
  332. #[Apidoc\Param("grade", type: "int", require: true, desc: "等级 1一级 2二级 3三级", mock: 1)]
  333. #[Apidoc\Returned(name: "name", type: "string", require: true, desc: '名称', default: '未实名')]
  334. #[Apidoc\Returned(name: "mobile", type: "string", require: true, desc: '电话', default: '158****0002')]
  335. #[Apidoc\Returned(name: "join_time", type: "string", require: true, desc: '注册时间', default: '2024-07-08 01:20:47')]
  336. #[Apidoc\Returned(name: "invest_money", type: "string", require: true, desc: '消费金额', default: '0.00')]
  337. public function teamList(Request $request)
  338. {
  339. try {
  340. $param = $request->param_data;
  341. $param['user_data'] = $request->user_data;
  342. Validator::input($param, [
  343. 'page' => Validator::notEmpty()->intType()->setName('页面'),
  344. 'limit' => Validator::notEmpty()->intType()->setName('输出条数'),
  345. 'grade' => Validator::notEmpty()->intType()->setName('等级'),
  346. ]);
  347. $data = Db::table('wa_users')->where(function ($query) use ($param) {
  348. if (Arr::get($param, 'grade')) {
  349. if ($param['grade'] == 1) {
  350. $query->where('pid', $param['user_data']['id']);
  351. } elseif ($param['grade'] == 2) {
  352. $query->where('ppid', $param['user_data']['id']);
  353. } elseif ($param['grade'] == 3) {
  354. $query->where('toppid', $param['user_data']['id']);
  355. }
  356. } else {
  357. $query->where('pid', $param['user_data']['id']);
  358. }
  359. })->select(['name', 'mobile', 'join_time', 'invest_money'])
  360. ->orderByDesc('id')
  361. ->paginate(Arr::get($param, 'limit', 10))
  362. ->toArray();
  363. foreach ($data['data'] as $k => $v) {
  364. $data['data'][$k]->mobile = substr_replace($v->mobile, '****', 3, 4);
  365. }
  366. } catch (\Throwable $exception) {
  367. return new Exception($exception->getMessage());
  368. }
  369. return success($data['data'], '成功', 200, $data['total']);
  370. }
  371. // #[Apidoc\Title("我的投资")]
  372. // #[Apidoc\Url("api/user/mygoods")]
  373. // #[Apidoc\Method("POST")]
  374. // #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  375. // #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
  376. // #[Apidoc\Param("limit", type: "int", require: true, desc: "输出条数", mock: 10)]
  377. // #[Apidoc\Returned(name: "id", type: "string", require: true, desc: '购买记录ID', default: '485')]
  378. // #[Apidoc\Returned(name: "goods_id", type: "string", require: true, desc: '产品ID', default: '5')]
  379. // #[Apidoc\Returned(name: "img", type: "string", require: true, desc: '封面图', default: '')]
  380. // #[Apidoc\Returned(name: "name", type: "string", require: true, desc: '产品名称', default: '')]
  381. // #[Apidoc\Returned(name: "type", type: "string", require: true, desc: '产品类型 1 慈善 2助力', default: '')]
  382. // #[Apidoc\Returned(name: "price", type: "string", require: true, desc: '价格', default: '')]
  383. // #[Apidoc\Returned(name: "pay_price", type: "string", require: true, desc: '通道支付金额', default: '')]
  384. // #[Apidoc\Returned(name: "period", type: "string", require: true, desc: '周期', default: '')]
  385. // #[Apidoc\Returned(name: "bl", type: "string", require: true, desc: '比例', default: '')]
  386. // #[Apidoc\Returned(name: "bonus", type: "string", require: true, desc: '每日分红金额', default: '')]
  387. // #[Apidoc\Returned(name: "predict", type: "string", require: true, desc: '预计收益', default: '')]
  388. // #[Apidoc\Returned(name: "created_at", type: "string", require: true, desc: '购买时间', default: '')]
  389. // #[Apidoc\Returned(name: "expiretime", type: "string", require: true, desc: '到期时间戳', default: '')]
  390. // #[Apidoc\Returned(name: "is_grant", type: "string", require: true, desc: '是否退本 1未退本 2已退本', default: '')]
  391. // public function mygoods(Request $request)
  392. // {
  393. // try {
  394. // $param = Arr::only($request->all(), ['page', 'limit', 'grade']);
  395. // $param['user_data'] = $request->user_data;
  396. // Validator::input($param, [
  397. // 'page' => Validator::notEmpty()->intType()->setName('页码'),
  398. // 'limit' => Validator::notEmpty()->intType()->setName('输出条数'),
  399. // ]);
  400. // $data = Db::table('wa_my_goods')
  401. // ->join('wa_goods', 'wa_goods.id', '=', 'wa_my_goods.goods_id')
  402. // ->where('wa_my_goods.user_id', $param['user_data']['id'])
  403. // ->select(['wa_my_goods.id', 'wa_my_goods.goods_id', 'wa_goods.img', 'wa_goods.type', 'wa_goods.pay_price', 'wa_goods.price', 'wa_goods.name', 'wa_goods.period', 'wa_goods.bl', 'wa_goods.bonus', 'wa_goods.predict', 'wa_goods.bonus', 'wa_my_goods.created_at', 'wa_my_goods.expiretime', 'wa_my_goods.is_grant'])
  404. // ->orderByDesc('wa_my_goods.id')
  405. // ->paginate(Arr::get($param, 'limit', 10))
  406. // ->toArray();
  407. // foreach ($data['data'] as $k => $v) {
  408. // $data['data'][$k]->img = getenv('IMG') . $v->img;
  409. // }
  410. // } catch (\Throwable $exception) {
  411. // return error($exception->getMessage());
  412. // }
  413. //
  414. // return success($data['data'], '成功', 200, $data['total']);
  415. // }
  416. #[Apidoc\Title("退出登录")]
  417. #[Apidoc\Url("api/user/quit.html")]
  418. #[Apidoc\Method("POST")]
  419. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  420. public function quit(Request $request)
  421. {
  422. Redis::del($request->user_data['id']);
  423. return success([], '已退出登录!');
  424. }
  425. #[Apidoc\Title("修改密码")]
  426. #[Apidoc\Url("api/user/save.html")]
  427. #[Apidoc\Method("POST")]
  428. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  429. #[Apidoc\Param("type", type: "int", require: true, desc: "类型 1修改名称 2 修改密码 ", mock: 1)]
  430. #[Apidoc\Param("name", type: "string", require: true, desc: "名称", mock: 1)]
  431. #[Apidoc\Param("old_password", type: "string", require: true, desc: "旧密码", mock: 1)]
  432. #[Apidoc\Param("password", type: "string", require: true, desc: "新密码", mock: 10)]
  433. public function save(Request $request)
  434. {
  435. Db::beginTransaction();
  436. try {
  437. $param = $request->param_data;
  438. Validator::input($param, [
  439. 'type' => Validator::notEmpty()->intType()->setName('操作类型'),
  440. ]);
  441. if (Arr::get($param, 'type') == 1) {
  442. Validator::input($param, [
  443. 'name' => Validator::notEmpty()->setName('操作类型'),
  444. ]);
  445. $arr['name'] = $param['name'];
  446. } elseif (Arr::get($param, 'type') == 2) {
  447. Validator::input($param, [
  448. 'old_password' => Validator::notEmpty()->setName('旧密码'),
  449. 'password' => Validator::notEmpty()->setName('新密码'),
  450. ]);
  451. if ($request->user_data['password'] != md5($param['old_password'])) {
  452. throw new \Exception('密码验证失败');
  453. }
  454. $arr['password'] = md5($param['password']);
  455. }
  456. if (empty($arr)) {
  457. throw new \Exception('非法操作');
  458. }
  459. Db::table('wa_users')->where('id', $request->user_data['id'])->update($arr);
  460. } catch (\Throwable $exception) {
  461. Db::rollBack();
  462. return error($exception->getMessage());
  463. }
  464. Db::commit();
  465. return success([], '修改成功');
  466. }
  467. #[Apidoc\Title("动态密码")]
  468. #[Apidoc\Url("api/user/dynamic_pass.html")]
  469. #[Apidoc\Method("POST")]
  470. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  471. public function dynamic_pass(Request $request)
  472. {
  473. try {
  474. $param = $request->param_data;
  475. $param['user_data'] = $request->user_data;
  476. $datapass = mt_rand(100000, 999999);
  477. } catch (\Throwable $exception) {
  478. return new Exception($exception->getMessage());
  479. }
  480. return success($datapass, '获取成功', 200);
  481. }
  482. }