UserController.php 31 KB

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