UserController.php 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  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: '总资产', 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: "card_code", type: "string", require: true, desc: '卡号', default: '0.00')]
  36. #[Apidoc\Returned(name: "total_sign", type: "int", require: true, desc: '签到总天数', default: '')]
  37. #[Apidoc\Returned(name: "day_is_sign", type: "int", require: true, desc: '今日是否签到', default: '')]
  38. #[Apidoc\Returned(name: "user_identity", type: "array", desc: '实名信息', default: '', children: [
  39. ['name' => "name", 'type' => 'string', 'require' => true, 'default' => '张三1', 'desc' => '姓名'],
  40. ['name' => "number", 'type' => 'string', 'require' => true, 'default' => '500221233312836451', 'desc' => '身份证号'],
  41. ])]
  42. #[Apidoc\Returned(name: "bank_card", type: "string", desc: '银行卡', default: '', children: [
  43. ['name' => "affiliated_bank", 'type' => 'string', 'require' => true, 'default' => '中国银行1', 'desc' => '归属银行'],
  44. ['name' => "account_holder", 'type' => 'string', 'require' => true, 'default' => '张三', 'desc' => '开户人'],
  45. ['name' => "card_number", 'type' => 'string', 'require' => true, 'default' => '500221233312836451', 'desc' => '卡号'],
  46. ])]
  47. #[Apidoc\Returned(name: "is_buy_sign", type: "string", desc: '是否签署承诺书', default: '', children: [
  48. ['name' => "has", 'type' => 'string', 'require' => true, 'default' => '1', 'desc' => '判断 1没有购买专属卡 需要提示跳转 2没有签署 3 已签署'],
  49. ['name' => "goods_data", 'type' => 'array', 'require' => true, 'default' => '张三', 'desc' => '产品信息'],
  50. ])]
  51. public function userData(Request $request)
  52. {
  53. //查询今日是否已签到
  54. // $day_is_sign = Db::table('wa_stream')
  55. // ->where('type', streamType2)
  56. // ->whereBetween('add_time', [strtotime(date('Y-m-d')) . ' 00:00:00', strtotime(date('Y-m-d') . ' 23:59:59')])
  57. // ->where('user_id', $request->user_data['id'])
  58. // ->first();
  59. $total_sign = Db::table('wa_stream')->where('type', streamType2)->where('user_id', $request->user_data['id'])->count();
  60. $is_buy_card = Db::table('wa_payorder')
  61. ->where('user_id', $request->user_data['id'])
  62. ->where('is_pay', 2)
  63. ->where('goods_type', 1)
  64. ->exists();
  65. // $is_buy_binding = Db::table('wa_payorder')
  66. // ->where('user_id', $request->user_data['id'])
  67. // ->where('is_pay', 2)
  68. // ->where('goods_type', 3)
  69. // ->exists();
  70. //
  71. // $is_buy_kaitong = Db::table('wa_payorder')
  72. // ->where('user_id', $request->user_data['id'])
  73. // ->where('is_pay', 2)
  74. // ->where('goods_type', 5)
  75. // ->exists();
  76. //
  77. // $is_buy_binding_mobile = Db::table('wa_payorder')
  78. // ->where('user_id', $request->user_data['id'])
  79. // ->where('is_pay', 2)
  80. // ->where('goods_type', 6)
  81. // ->exists();
  82. $is_buy_activate = Db::table('wa_payorder')
  83. ->where('user_id', $request->user_data['id'])
  84. ->where('is_pay', 2)
  85. ->where('goods_type', 8)
  86. ->exists();
  87. // $is_buy_double = Db::table('wa_payorder')
  88. // ->where('user_id', $request->user_data['id'])
  89. // ->where('is_pay', 2)
  90. // ->where('goods_type', 9)
  91. // ->exists();
  92. //
  93. // $is_buy_fast = Db::table('wa_payorder')
  94. // ->where('user_id', $request->user_data['id'])
  95. // ->where('is_pay', 2)
  96. // ->where('goods_type', 10)
  97. // ->exists();
  98. //
  99. // $is_buy_stampduty = Db::table('wa_payorder')
  100. // ->where('user_id', $request->user_data['id'])
  101. // ->where('is_pay', 2)
  102. // ->where('goods_type', 11)
  103. // ->exists();
  104. //
  105. // $is_buy_packaging = Db::table('wa_payorder')
  106. // ->where('user_id', $request->user_data['id'])
  107. // ->where('is_pay', 2)
  108. // ->where('goods_type', 12)
  109. // ->exists();
  110. // $is_buy_whitelist = Db::table('wa_payorder')
  111. // ->where('user_id', $request->user_data['id'])
  112. // ->where('is_pay', 2)
  113. // ->where('goods_type', 13)
  114. // ->exists();
  115. //
  116. // $is_buy_voucher = Db::table('wa_payorder')
  117. // ->where('user_id', $request->user_data['id'])
  118. // ->where('is_pay', 2)
  119. // ->where('goods_type', 14)
  120. // ->exists();
  121. //
  122. // $is_buy_cardactivation = Db::table('wa_payorder')
  123. // ->where('user_id', $request->user_data['id'])
  124. // ->where('is_pay', 2)
  125. // ->where('goods_type', 15)
  126. // ->exists();
  127. //
  128. // $is_buy_enable = Db::table('wa_payorder')
  129. // ->where('user_id', $request->user_data['id'])
  130. // ->where('is_pay', 2)
  131. // ->where('goods_type', 16)
  132. // ->exists();
  133. //
  134. // $is_buy_equanqdj = Db::table('wa_payorder')
  135. // ->where('user_id', $request->user_data['id'])
  136. // ->where('is_pay', 2)
  137. // ->where('goods_type', 17)
  138. // ->exists();
  139. //
  140. // $is_buy_jihuosz = Db::table('wa_payorder')
  141. // ->where('user_id', $request->user_data['id'])
  142. // ->where('is_pay', 2)
  143. // ->where('goods_type', 18)
  144. // ->exists();
  145. //
  146. // $is_buy_jkuaijiezf = Db::table('wa_payorder')
  147. // ->where('user_id', $request->user_data['id'])
  148. // ->where('is_pay', 2)
  149. // ->where('goods_type', 19)
  150. // ->exists();
  151. //
  152. // $is_buy_shoufukuan = Db::table('wa_payorder')
  153. // ->where('user_id', $request->user_data['id'])
  154. // ->where('is_pay', 2)
  155. // ->where('goods_type', 20)
  156. // ->exists();
  157. $is_buy_vipshengji = Db::table('wa_payorder')
  158. ->where('user_id', $request->user_data['id'])
  159. ->where('is_pay', 2)
  160. ->where('goods_type', 21)
  161. ->exists();
  162. $is_buy_tisxyhh = Db::table('wa_payorder')
  163. ->where('user_id', $request->user_data['id'])
  164. ->where('is_pay', 2)
  165. ->where('goods_type', 22)
  166. ->exists();
  167. $is_buy_jiashubao = Db::table('wa_payorder')
  168. ->where('user_id', $request->user_data['id'])
  169. ->where('is_pay', 2)
  170. ->where('goods_type', 23)
  171. ->exists();
  172. $is_buy_xianshangzhif = Db::table('wa_payorder')
  173. ->where('user_id', $request->user_data['id'])
  174. ->where('is_pay', 2)
  175. ->where('goods_type', 25)
  176. ->exists();
  177. $is_buy_fangfushenj = Db::table('wa_payorder')
  178. ->where('user_id', $request->user_data['id'])
  179. ->where('is_pay', 2)
  180. ->where('goods_type', 26)
  181. ->exists();
  182. $is_buy_ckdengji = Db::table('wa_payorder')
  183. ->where('user_id', $request->user_data['id'])
  184. ->where('is_pay', 2)
  185. ->where('goods_type', 27)
  186. ->exists();
  187. $is_buy_ckyanzheng = Db::table('wa_payorder')
  188. ->where('user_id', $request->user_data['id'])
  189. ->where('is_pay', 2)
  190. ->where('goods_type', 28)
  191. ->exists();
  192. $is_buy_zhuanzshenq = Db::table('wa_payorder')
  193. ->where('user_id', $request->user_data['id'])
  194. ->where('is_pay', 2)
  195. ->where('goods_type', 29)
  196. ->exists();
  197. $is_buy_baoxianpingz = Db::table('wa_payorder')
  198. ->where('user_id', $request->user_data['id'])
  199. ->where('is_pay', 2)
  200. ->where('goods_type', 31)
  201. ->exists();
  202. $is_buy_chaojiwangy = Db::table('wa_payorder')
  203. ->where('user_id', $request->user_data['id'])
  204. ->where('is_pay', 2)
  205. ->where('goods_type', 32)
  206. ->exists();
  207. $buy_sign['has'] = 1;
  208. $buy_sign['goods_data'] = [];
  209. $wa_user_social_cark = Db::table('wa_user_social_cark')
  210. ->where('user_id', $request->user_data['id'])
  211. ->first();
  212. if (!empty($wa_user_social_cark->goods_id)) {
  213. $buy_sign['has'] = 2;
  214. $relevance_goods = Db::table('wa_goods')
  215. ->where('type', 4)
  216. ->where('relevance_goods_id', $wa_user_social_cark->goods_id)
  217. ->first();
  218. if (!empty($relevance_goods)) {
  219. $is_buy_sign = Db::table('wa_payorder')
  220. ->where('user_id', $request->user_data['id'])
  221. ->where('is_pay', 2)
  222. ->where('goods_id', $relevance_goods->id)
  223. ->where('goods_type', 4)
  224. ->exists();
  225. if (empty($is_buy_sign) && !empty($wa_user_social_cark->goods_id)) {
  226. $buy_sign['goods_data'] = $relevance_goods;
  227. } elseif (!empty($is_buy_sign)) {
  228. $buy_sign['has'] = 3;
  229. }
  230. }
  231. $binding_mobile = $wa_user_social_cark->binding_mobile;
  232. } else {
  233. $binding_mobile = '';
  234. }
  235. if ($is_buy_activate) {
  236. if (!empty(Redis::get('879' . $request->user_data['id']))) {
  237. $dynamic_pass = Redis::get('879' . $request->user_data['id']);
  238. } else {
  239. $conter = mt_rand(100000, 999999);
  240. Redis::setEx('879' . $request->user_data['id'], 600, $conter);
  241. $dynamic_pass = $conter;
  242. }
  243. } else {
  244. $dynamic_pass = '';
  245. }
  246. $arr = [
  247. 'img' => !empty($request->user_data['img']) ? imageToBase64($request->user_data['img']) : '',
  248. 'uuid' => $request->user_data['uuid'],
  249. 'mobile' => $request->user_data['mobile'],
  250. 'name' => $request->user_data['name'],
  251. 'is_autonym' => $request->user_data['is_autonym'],
  252. 'is_num' => $request->user_data['is_num'],
  253. 'money' => $request->user_data['money'],
  254. 'money_one' => $request->user_data['money_one'],
  255. 'money_two' => $request->user_data['money_two'],
  256. 'money_four' => $request->user_data['money_four'],
  257. 'money_six' => $request->user_data['money_six'],
  258. 'card_code' => $request->user_data['card_code'],
  259. 'signature_time' => $request->user_data['signature_time'],
  260. 'vip_name' => $request->user_data['vip_name'],
  261. 'card_number' => $request->user_data['card_number'],
  262. 'pingzheng_name' => $request->user_data['pingzheng_name'],
  263. 'pingzheng_number' => $request->user_data['pingzheng_number'],
  264. 'front_ima' => imageToBase64($request->user_data['front_ima']),
  265. 'reverse_ima' => imageToBase64($request->user_data['reverse_ima']),
  266. 'vip_img' => imageToBase64($request->user_data['vip_img']),
  267. // 'day_is_sign' => $day_is_sign ? true : false,
  268. 'is_buy_card' => $is_buy_card ? true : false,
  269. // 'is_buy_binding' => $is_buy_binding ? true : false,
  270. // 'is_buy_kaitong' => $is_buy_kaitong ? true : false,
  271. // 'is_buy_binding_mobile' => $is_buy_binding_mobile ? true : false,
  272. // 'is_buy_activate' => $is_buy_activate ? true : false,
  273. // 'is_buy_double' => $is_buy_double ? true : false,
  274. // 'is_buy_fast' => $is_buy_fast ? true : false,
  275. // 'is_buy_stampduty' => $is_buy_stampduty ? true : false,
  276. // 'is_buy_packaging' => $is_buy_packaging ? true : false,
  277. // 'is_buy_whitelist' => $is_buy_whitelist ? true : false,
  278. // 'is_buy_voucher' => $is_buy_voucher ? true : false,
  279. // 'is_buy_cardactivation' => $is_buy_cardactivation ? true : false,
  280. // 'is_buy_enable' => $is_buy_enable ? true : false,
  281. // 'is_buy_equanqdj' => $is_buy_equanqdj ? true : false,
  282. // 'is_buy_jihuosz' => $is_buy_jihuosz ? true : false,
  283. // 'is_buy_jkuaijiezf' => $is_buy_jkuaijiezf ? true : false,
  284. // 'is_buy_shoufukuan' => $is_buy_shoufukuan ? true : false,
  285. 'day_is_sign' => true,
  286. 'is_buy_binding' => true,
  287. 'is_buy_kaitong' => true,
  288. 'is_buy_binding_mobile' => true,
  289. 'is_buy_activate' => true,
  290. 'is_buy_double' => true,
  291. 'is_buy_fast' => true,
  292. 'is_buy_stampduty' => true,
  293. 'is_buy_packaging' => true,
  294. 'is_buy_whitelist' => true,
  295. 'is_buy_voucher' => true,
  296. 'is_buy_cardactivation' => true,
  297. 'is_buy_enable' => true,
  298. 'is_buy_equanqdj' => true,
  299. 'is_buy_jihuosz' => true,
  300. 'is_buy_jkuaijiezf' => true,
  301. 'is_buy_shoufukuan' => true,
  302. 'is_buy_vipshengji' => $is_buy_vipshengji ? true : false,
  303. 'is_buy_tisxyhh' => $is_buy_tisxyhh ? true : false,
  304. 'is_buy_jiashubao' => $is_buy_jiashubao ? true : false,
  305. 'is_buy_xianshangzhif' => $is_buy_xianshangzhif ? true : false,
  306. 'is_buy_fangfushenj' => $is_buy_fangfushenj ? true : false,
  307. 'is_buy_ckdengji' => $is_buy_ckdengji ? true : false,
  308. 'is_buy_ckyanzheng' => $is_buy_ckyanzheng ? true : false,
  309. 'is_buy_zhuanzshenq' => $is_buy_zhuanzshenq ? true : false,
  310. 'is_buy_baoxianpingz' => $is_buy_baoxianpingz ? true : false,
  311. 'is_buy_chaojiwangy' => $is_buy_chaojiwangy ? true : false,
  312. 'is_buy_sign' => $buy_sign,
  313. 'total_sign' => $total_sign,
  314. 'dynamic_pass' => $dynamic_pass,
  315. 'binding_mobile' => $binding_mobile,
  316. 'user_identity' => UserIdentityBusiness::data(['uid' => $request->user_data['id']]),
  317. 'bank_card' => BankCardBusiness::data(['uid' => $request->user_data['id']]),
  318. ];
  319. return success($arr);
  320. }
  321. #[Apidoc\Title("签到列表")]
  322. #[Apidoc\Url("api/user/signlist.html")]
  323. #[Apidoc\Method("POST")]
  324. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  325. #[Apidoc\Returned(name: "money", type: "string", desc: '签到奖励', default: '')]
  326. #[Apidoc\Returned(name: "day", type: "string", desc: '天数', default: '')]
  327. #[Apidoc\Returned(name: "has", type: "string", desc: '是否签到', default: 'true 已签到 false 未签到')]
  328. #[Apidoc\Returned(name: "signcount", type: "string", desc: '累计签到', default: 'true 已签到 false 未签到')]
  329. #[Apidoc\Returned(name: "continuity", type: "string", desc: '连续签到', default: 'true 已签到 false 未签到')]
  330. #[Apidoc\Returned(name: "is_sign", type: "string", desc: '今日是否签到', default: 'true 已签到 false 未签到')]
  331. public function signlist(Request $request)
  332. {
  333. $system = Db::table('wa_system')->first();
  334. $arr[] = date('Y-m-d', strtotime('monday this week'));
  335. $arr[] = date('Y-m-d', strtotime('monday this week +1 day'));
  336. $arr[] = date('Y-m-d', strtotime('monday this week +2 day'));
  337. $arr[] = date('Y-m-d', strtotime('monday this week +3 day'));
  338. $arr[] = date('Y-m-d', strtotime('monday this week +4 day'));
  339. $arr[] = date('Y-m-d', strtotime('monday this week +5 day'));
  340. $arr[] = date('Y-m-d', strtotime('sunday this week'));
  341. $array = [];
  342. $money = 0;
  343. foreach ($arr as $k => $v) {
  344. $money = bcadd($money, 1000);
  345. $day = date('d', strtotime($v));
  346. $array[] = [
  347. 'money' => $money,
  348. 'day' => date('d', strtotime($v)),
  349. 'has' => Db::table('wa_stream')
  350. ->where('user_id', $request->user_data['id'])
  351. ->where('type', streamType2)
  352. ->whereBetween('add_time', [strtotime($v . ' 00:00:00'), strtotime($v . ' 23:59:59')])->exists()
  353. ];
  354. if ($money == 5000) {
  355. $money = 0;
  356. }
  357. }
  358. $signcount = Db::table('wa_stream')->where('type', streamType2)->where('user_id', $request->user_data['id'])->count();
  359. $is_sign = Db::table('wa_stream')
  360. ->where('user_id', $request->user_data['id'])
  361. ->where('type', streamType2)
  362. ->whereBetween('add_time', [strtotime(date('Y-m-d') . ' 00:00:00'), strtotime(date('Y-m-d') . ' 23:59:59')])
  363. ->exists();
  364. return success([
  365. 'list' => $array,
  366. 'signcount' => $signcount,
  367. 'continuity' => $request->user_data['continuity'],
  368. 'is_sign' => $is_sign,
  369. ]);
  370. // $param = $request->param_data;
  371. // $param['user_data'] = $request->user_data;
  372. // $month_num = date('t');
  373. // $res = [];
  374. // //查询当前用户当月签到记录
  375. // $this_month_sign = Db::table('wa_stream')
  376. // ->where('type', streamType2)
  377. // ->where('user_id', $param['user_data']['id'])
  378. // ->whereRaw("DATE_FORMAT(created_at,'%Y-%m')=?", date('Y-m'))
  379. // ->get();
  380. // $money = 0;
  381. // for ($i = 1; $i <= $month_num; $i++) {
  382. // $date = $i > 9 ? date('Y-m-') . $i : date('Y-m-') . '0' . $i;
  383. // $money = bcadd($money, 1000);
  384. // $res[] = [
  385. // 'day' => $i,
  386. // 'has' => Db::table('wa_stream')
  387. // ->where('user_id', $request->user_data['id'])
  388. // ->where('type', streamType2)
  389. // ->whereBetween('add_time', [strtotime($date . ' 00:00:00'), strtotime($date . ' 23:59:59')])
  390. // ->exists(),
  391. // 'money' => $money,
  392. // ];
  393. // if ($i % 5 == 0) {
  394. // $money = 0;
  395. // }
  396. // }
  397. // $signcount = Db::table('wa_stream')
  398. // ->where('type', streamType2)
  399. // ->where('user_id', $param['user_data']['id'])
  400. // ->count();
  401. // $is_sign = Db::table('wa_stream')
  402. // ->where('user_id', $param['user_data']['id'])
  403. // ->where('type', streamType2)
  404. // ->whereBetween('add_time', [strtotime(date('Y-m-d') . ' 00:00:00'), strtotime(date('Y-m-d') . ' 23:59:59')])
  405. // ->exists();
  406. // return success([
  407. // 'list' => $res,
  408. // 'signcount' => $signcount,
  409. // 'continuity' => $param['user_data']['continuity'],
  410. // 'is_sign' => $is_sign,
  411. // ]);
  412. }
  413. #[Apidoc\Title("签到")]
  414. #[Apidoc\Url("api/user/sign.html")]
  415. #[Apidoc\Method("POST")]
  416. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  417. #[Apidoc\Returned(name: "money", type: "string", desc: '奖励金额', default: '888')]
  418. #[Apidoc\Returned(name: "signcount", type: "string", desc: '累计签到天数', default: '888')]
  419. public function sign(Request $request)
  420. {
  421. Db::beginTransaction();
  422. try {
  423. $param = $request->param_data;
  424. $zuotian = Db::table('wa_stream')
  425. ->where('user_id', $request->user_data['id'])
  426. ->where('type', streamType2)
  427. ->whereBetween('add_time', [bcsub(strtotime(date('Y-m-d') . ' 00:00:00'), 86400), bcadd(strtotime(date('Y-m-d') . ' 23:59:59'), 86400)])
  428. ->exists();
  429. if ($zuotian) {
  430. $continuity = bcadd($request->user_data['continuity'], 1);
  431. } else {
  432. $continuity = 1;
  433. }
  434. $has = Db::table('wa_stream')
  435. ->where('user_id', $request->user_data['id'])
  436. ->where('type', streamType2)
  437. ->whereBetween('add_time', [strtotime(date('Y-m-d') . ' 00:00:00'), strtotime(date('Y-m-d') . ' 23:59:59')])
  438. ->exists();
  439. if ($has) {
  440. throw new \Exception('今日已签到,请不要重复签到');
  441. }
  442. $arr[] = date('Y-m-d', strtotime('monday this week'));
  443. $arr[] = date('Y-m-d', strtotime('monday this week +1 day'));
  444. $arr[] = date('Y-m-d', strtotime('monday this week +2 day'));
  445. $arr[] = date('Y-m-d', strtotime('monday this week +3 day'));
  446. $arr[] = date('Y-m-d', strtotime('monday this week +4 day'));
  447. $arr[] = date('Y-m-d', strtotime('monday this week +5 day'));
  448. $arr[] = date('Y-m-d', strtotime('sunday this week'));
  449. $day_money = 0;
  450. foreach ($arr as $k => $v) {
  451. $day_money = bcadd($day_money, 1000);
  452. $day = date('d', strtotime($v));
  453. if (date('d', time()) == $day) {
  454. $money = $day_money;
  455. }
  456. if ($day_money == 5000) {
  457. $day_money = 0;
  458. }
  459. }
  460. // $system = Db::table('wa_system')->first();
  461. // if (!empty($system->sign_award)) {
  462. // StreamBusiness::addStream($request->user_data['id'], $system->sign_award, streamType2, moldType2, moldTypefild2);
  463. // }
  464. StreamBusiness::addStream($request->user_data['id'], $money, streamType2, moldType2, moldTypefild2);
  465. Db::table('wa_users')->where(['id' => $request->user_data['id']])->update(['continuity' => $continuity]);
  466. $signcount = Db::table('wa_stream')->where('type', streamType2)->where('user_id', $request->user_data['id'])->count();
  467. } catch (\Throwable $exception) {
  468. Db::rollBack();
  469. return error($exception->getMessage());
  470. }
  471. Db::commit();
  472. return success([
  473. 'money' => $day_money,
  474. 'signcount' => $signcount
  475. ], '签到成功');
  476. }
  477. #[Apidoc\Title("我的团队头数据")]
  478. #[Apidoc\Url("api/user/team.html")]
  479. #[Apidoc\Method("POST")]
  480. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  481. #[Apidoc\Returned(name: "num", type: "int", require: true, desc: '团队总人数', default: '1')]
  482. #[Apidoc\Returned(name: "earnings", type: "int", require: true, desc: '总拥金收益', default: '0')]
  483. #[Apidoc\Returned(name: "dayearnings", type: "int", require: true, desc: '今日收益', default: '0')]
  484. #[Apidoc\Returned(name: "one", type: "int", require: true, desc: '一级人数', default: '0')]
  485. #[Apidoc\Returned(name: "two", type: "int", require: true, desc: '二级人数', default: '0')]
  486. #[Apidoc\Returned(name: "three", type: "int", require: true, desc: '三级人数', default: '0')]
  487. #[Apidoc\Returned(name: "rebate", type: "int", require: true, desc: '一级返佣', default: '0')]
  488. #[Apidoc\Returned(name: "rebate_one", type: "int", require: true, desc: '二级返佣', default: '0')]
  489. #[Apidoc\Returned(name: "rebate_two", type: "int", require: true, desc: '三级返佣', default: '0')]
  490. public function team(Request $request)
  491. {
  492. $param = $request->user_data;
  493. $data = Db::table('wa_users')->where(function ($query) use ($param) {
  494. $query->orWhere('pid', $param['id']);
  495. $query->orWhere('ppid', $param['id']);
  496. $query->orWhere('toppid', $param['id']);
  497. });
  498. $system = Db::table('wa_system')->first();
  499. /** @var $num 团队总人数 */
  500. $num = (clone $data)->count();
  501. // $stream = Db::table('wa_stream')
  502. // ->where('mold', moldType1)
  503. // ->where('type', streamType14)
  504. // ->where('user_id', $request->user_data['id']);
  505. return success([
  506. 'num' => $num,
  507. // 'earnings' => (clone $stream)->sum('money'),
  508. // 'dayearnings' => (clone $stream)
  509. // ->where('add_time', '>=', strtotime(date('Y-m-d')))
  510. // ->where('add_time', '<=', strtotime(date('Y-m-d 23:59:59')))
  511. // ->sum('money'),
  512. 'earnings' => '0.00',
  513. 'dayearnings' => '0.00',
  514. 'one' => Db::table('wa_users')->where('pid', $param['id'])->count(),
  515. 'two' => Db::table('wa_users')->where('ppid', $param['id'])->count(),
  516. 'three' => Db::table('wa_users')->where('toppid', $param['id'])->count(),
  517. 'rebate' => $system->rebate,
  518. 'rebate_one' => $system->rebate_one,
  519. 'rebate_two' => $system->rebate_two,
  520. ]);
  521. }
  522. #[Apidoc\Title("我的团队列表数据")]
  523. #[Apidoc\Url("api/user/team_list.html")]
  524. #[Apidoc\Method("POST")]
  525. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  526. #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
  527. #[Apidoc\Param("limit", type: "int", require: true, desc: "输出条数", mock: 10)]
  528. #[Apidoc\Param("grade", type: "int", require: true, desc: "等级 1一级 2二级 3三级", mock: 1)]
  529. #[Apidoc\Returned(name: "name", type: "string", require: true, desc: '名称', default: '未实名')]
  530. #[Apidoc\Returned(name: "mobile", type: "string", require: true, desc: '电话', default: '158****0002')]
  531. #[Apidoc\Returned(name: "join_time", type: "string", require: true, desc: '注册时间', default: '2024-07-08 01:20:47')]
  532. #[Apidoc\Returned(name: "invest_money", type: "string", require: true, desc: '消费金额', default: '0.00')]
  533. public function teamList(Request $request)
  534. {
  535. try {
  536. $param = $request->param_data;
  537. $param['user_data'] = $request->user_data;
  538. Validator::input($param, [
  539. 'page' => Validator::notEmpty()->intType()->setName('页面'),
  540. 'limit' => Validator::notEmpty()->intType()->setName('输出条数'),
  541. 'grade' => Validator::notEmpty()->intType()->setName('等级'),
  542. ]);
  543. $data = Db::table('wa_users')->where(function ($query) use ($param) {
  544. if (Arr::get($param, 'grade')) {
  545. if ($param['grade'] == 1) {
  546. $query->where('pid', $param['user_data']['id']);
  547. } elseif ($param['grade'] == 2) {
  548. $query->where('ppid', $param['user_data']['id']);
  549. } elseif ($param['grade'] == 3) {
  550. $query->where('toppid', $param['user_data']['id']);
  551. }
  552. } else {
  553. $query->where('pid', $param['user_data']['id']);
  554. }
  555. })->select(['name', 'mobile', 'join_time', 'invest_money'])
  556. ->orderByDesc('id')
  557. ->paginate(Arr::get($param, 'limit', 10), ['*'], 'page', Arr::get($param, 'page'))
  558. ->toArray();
  559. foreach ($data['data'] as $k => $v) {
  560. $data['data'][$k]->mobile = substr_replace($v->mobile, '****', 3, 4);
  561. }
  562. } catch (\Throwable $exception) {
  563. return new Exception($exception->getMessage());
  564. }
  565. return success($data['data'], '成功', 200, $data['total']);
  566. }
  567. // #[Apidoc\Title("我的投资")]
  568. // #[Apidoc\Url("api/user/mygoods")]
  569. // #[Apidoc\Method("POST")]
  570. // #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  571. // #[Apidoc\Param("page", type: "int", require: true, desc: "页面", mock: 1)]
  572. // #[Apidoc\Param("limit", type: "int", require: true, desc: "输出条数", mock: 10)]
  573. // #[Apidoc\Returned(name: "id", type: "string", require: true, desc: '购买记录ID', default: '485')]
  574. // #[Apidoc\Returned(name: "goods_id", type: "string", require: true, desc: '产品ID', default: '5')]
  575. // #[Apidoc\Returned(name: "img", type: "string", require: true, desc: '封面图', default: '')]
  576. // #[Apidoc\Returned(name: "name", type: "string", require: true, desc: '产品名称', default: '')]
  577. // #[Apidoc\Returned(name: "type", type: "string", require: true, desc: '产品类型 1 慈善 2助力', default: '')]
  578. // #[Apidoc\Returned(name: "price", type: "string", require: true, desc: '价格', default: '')]
  579. // #[Apidoc\Returned(name: "pay_price", type: "string", require: true, desc: '通道支付金额', default: '')]
  580. // #[Apidoc\Returned(name: "period", type: "string", require: true, desc: '周期', default: '')]
  581. // #[Apidoc\Returned(name: "bl", type: "string", require: true, desc: '比例', default: '')]
  582. // #[Apidoc\Returned(name: "bonus", type: "string", require: true, desc: '每日分红金额', default: '')]
  583. // #[Apidoc\Returned(name: "predict", type: "string", require: true, desc: '预计收益', default: '')]
  584. // #[Apidoc\Returned(name: "created_at", type: "string", require: true, desc: '购买时间', default: '')]
  585. // #[Apidoc\Returned(name: "expiretime", type: "string", require: true, desc: '到期时间戳', default: '')]
  586. // #[Apidoc\Returned(name: "is_grant", type: "string", require: true, desc: '是否退本 1未退本 2已退本', default: '')]
  587. // public function mygoods(Request $request)
  588. // {
  589. // try {
  590. // $param = Arr::only($request->all(), ['page', 'limit', 'grade']);
  591. // $param['user_data'] = $request->user_data;
  592. // Validator::input($param, [
  593. // 'page' => Validator::notEmpty()->intType()->setName('页码'),
  594. // 'limit' => Validator::notEmpty()->intType()->setName('输出条数'),
  595. // ]);
  596. // $data = Db::table('wa_my_goods')
  597. // ->join('wa_goods', 'wa_goods.id', '=', 'wa_my_goods.goods_id')
  598. // ->where('wa_my_goods.user_id', $param['user_data']['id'])
  599. // ->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'])
  600. // ->orderByDesc('wa_my_goods.id')
  601. // ->paginate(Arr::get($param, 'limit', 10))
  602. // ->toArray();
  603. // foreach ($data['data'] as $k => $v) {
  604. // $data['data'][$k]->img = getenv('IMG') . $v->img;
  605. // }
  606. // } catch (\Throwable $exception) {
  607. // return error($exception->getMessage());
  608. // }
  609. //
  610. // return success($data['data'], '成功', 200, $data['total']);
  611. // }
  612. #[Apidoc\Title("退出登录")]
  613. #[Apidoc\Url("api/user/quit.html")]
  614. #[Apidoc\Method("POST")]
  615. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  616. public function quit(Request $request)
  617. {
  618. Redis::del($request->user_data['id']);
  619. return success([], '已退出登录!');
  620. }
  621. #[Apidoc\Title("修改密码")]
  622. #[Apidoc\Url("api/user/save.html")]
  623. #[Apidoc\Method("POST")]
  624. #[Apidoc\Header("token", type: "string", require: true, desc: "身份令牌Token", mock: "@token")]
  625. #[Apidoc\Param("type", type: "int", require: true, desc: "类型 1修改名称 2 修改密码 ", mock: 1)]
  626. #[Apidoc\Param("name", type: "string", require: true, desc: "名称", mock: 1)]
  627. #[Apidoc\Param("old_password", type: "string", require: true, desc: "旧密码", mock: 1)]
  628. #[Apidoc\Param("password", type: "string", require: true, desc: "新密码", mock: 10)]
  629. public function save(Request $request)
  630. {
  631. Db::beginTransaction();
  632. try {
  633. $param = $request->param_data;
  634. Validator::input($param, [
  635. 'type' => Validator::notEmpty()->intType()->setName('操作类型'),
  636. ]);
  637. if (Arr::get($param, 'type') == 1) {
  638. Validator::input($param, [
  639. 'name' => Validator::notEmpty()->setName('操作类型'),
  640. ]);
  641. $arr['name'] = $param['name'];
  642. } elseif (Arr::get($param, 'type') == 2) {
  643. Validator::input($param, [
  644. 'old_password' => Validator::notEmpty()->setName('旧密码'),
  645. 'password' => Validator::notEmpty()->setName('新密码'),
  646. ]);
  647. if ($request->user_data['password'] != md5($param['old_password'])) {
  648. throw new \Exception('密码验证失败');
  649. }
  650. $arr['password'] = md5($param['password']);
  651. }
  652. if (empty($arr)) {
  653. throw new \Exception('非法操作');
  654. }
  655. Db::table('wa_users')->where('id', $request->user_data['id'])->update($arr);
  656. } catch (\Throwable $exception) {
  657. Db::rollBack();
  658. return error($exception->getMessage());
  659. }
  660. Db::commit();
  661. return success([], '修改成功');
  662. }
  663. }