MemberController.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. <?php
  2. namespace app\admin\controller\member;
  3. use app\admin\service\member\MemberService;
  4. use app\admin\validate\member\MemberValidate;
  5. use app\model\Family;
  6. use app\model\FamilyMember;
  7. use app\model\Member;
  8. use app\model\MemberAccount;
  9. use app\model\MemberBenefit;
  10. use app\model\MemberQuota;
  11. use app\model\PayDetail;
  12. use support\Db;
  13. use support\Request;
  14. class MemberController
  15. {
  16. public function selectList(Request $request)
  17. {
  18. $keywords = $request->get('keywords');
  19. $isOwner = $request->get('member_is_owner', 'N');
  20. if (!$keywords) {
  21. return json_fail("查询错误");
  22. }
  23. $res = Db::table('member')
  24. ->leftjoin('member_cert', 'member.member_id', '=', 'member_cert.join_cert_member_id')
  25. ->leftjoin('member_info', 'member.member_id', '=', 'member_info.join_info_member_id')
  26. ->select('member.member_id', 'member.member_mobile', 'member_cert.member_cert_name','member_info.member_info_nickname')
  27. ->where('member.member_is_owner', $isOwner)
  28. ->where('member_status','ACTIVED')
  29. // ->where('member_mobile','<>','0000')
  30. ->where(function ($query) use ($keywords) {
  31. $query->where('member.member_mobile', 'like', '%' . $keywords . '%')
  32. ->orWhere("member.member_id", 'like', '%' . $keywords . '%')
  33. ->orWhere("member_cert.member_cert_name", 'like', '%' . $keywords . '%')
  34. ->orWhere("member_info.member_info_nickname", 'like', '%' . $keywords . '%');
  35. })->get();
  36. $data = [];
  37. foreach ($res as $item) {
  38. // $item->member_mobile = substr($item->member_mobile,0,3).'****'.substr($item->member_mobile,7);
  39. $name = '';
  40. if(!empty($item->member_cert_name)){
  41. $name = $item->member_cert_name;
  42. }else if(!empty($item->member_info_nickname)){
  43. $name = $item->member_info_nickname;
  44. }
  45. $value = !empty($name) ? $name.'-' : '';
  46. if ($item->member_mobile != '0000'){
  47. $value .= $item->member_mobile;
  48. }
  49. if (empty($value)){
  50. $value = $item->member_mobile;
  51. }
  52. $value =
  53. $data[] = [
  54. 'key' => $item->member_id,
  55. 'value' => $value,
  56. ];
  57. }
  58. return json_success('', $data);
  59. }
  60. public function exportMember(Request $request){
  61. return MemberService::exportMember($request);
  62. }
  63. public function selectWriteOffMember()
  64. {
  65. $members = Member::with([
  66. 'cert' => function ($query) {
  67. $query->select('join_cert_member_id', 'member_cert_name');
  68. }
  69. ])->whereRaw("JSON_EXTRACT(`member_json`, '$.user') IS NOT NULL")
  70. ->select('member_id', 'member_mobile', 'member_json')
  71. ->get()
  72. ->toArray();
  73. foreach ($members as &$member) {
  74. // $member['member_mobile'] = substr($member['member_mobile'],0,3).'****'.substr($member['member_mobile'],7);
  75. $member['member_json'] = json_decode($member['member_json'], true);
  76. $member['username'] = $member['member_mobile'];
  77. $member['user_id'] = $member['member_json']['user'] ? $member['member_json']['user']['user_id'] : '';
  78. if (isset($member['cert']['member_cert_name'])) {
  79. $member['username'] = $member['cert']['member_cert_name'] . '-' . $member['username'];
  80. }
  81. }
  82. return json_success('', $members);
  83. }
  84. public function selectFamilyMemberList(Request $request)
  85. {
  86. $keywords = $request->get('keywords');
  87. if (!$keywords) {
  88. return json_fail("查询错误");
  89. }
  90. // 创建的家庭
  91. $family = Family::where('join_family_creator_member_id', $request->get('memberId'))->get()->toArray();
  92. if (!$family) {
  93. return json_success('暂无数据');
  94. }
  95. $familyIds = array_column($family, 'family_id');
  96. $res = FamilyMember::whereIn('join_family_id', $familyIds)
  97. ->where("family_member_name", 'like', '%' . $keywords . '%')
  98. ->get()
  99. ->toArray();
  100. $data = [];
  101. foreach ($res as $item) {
  102. $data[] = [
  103. 'key' => $item['join_family_member_id'],
  104. 'value' => $item['family_member_name']
  105. ];
  106. }
  107. return json_success('', $data);
  108. }
  109. public function selectMemberAllQuota(Request $request)
  110. {
  111. $memberId = $request->get('member_id','');
  112. $orderId = $request->get('order_id', '');
  113. $goodsId = $request->get('goods_id','');
  114. $person = $request->get('person', '');
  115. $selectType = $request->get('select_type', 'ALL');
  116. if (!$memberId) {
  117. return json_fail('参数异常');
  118. }
  119. $data = [];
  120. $benefit = MemberBenefit::where('join_benefit_member_id', $memberId)
  121. ->whereColumn('member_benefit_limit_count', '>', 'member_benefit_used_count')
  122. ->select('member_benefit_id as id', 'member_benefit_name as name', 'member_benefit_limit_count as total', 'member_benefit_used_count as used')
  123. ->when($orderId != '', function ($query) use ($orderId) {
  124. $query->where('join_benefit_order_id', $orderId);
  125. })->when($goodsId != '', function ($query) use ($goodsId) {
  126. $query->where('join_benefit_goods_id', $goodsId);
  127. })
  128. ->get()
  129. ->toArray();
  130. foreach ($benefit as $item) {
  131. if ($item['total'] - $item['used'] < $person) {
  132. $item['disabled'] = true;
  133. }
  134. $item['cut'] = $item['total'] - $item['used'];
  135. $data[] = $item;
  136. }
  137. if ($selectType == 'BENEFIT') {
  138. return json_success('', $data);
  139. }
  140. $quotas = MemberQuota::where('join_quota_member_id', $memberId)
  141. ->when($goodsId != '', function ($query) use ($goodsId) {
  142. $query->whereJsonContains('member_quota_json', ['goods_id' => $goodsId]);
  143. })
  144. ->selectRaw('join_quota_member_id,join_member_rule_added_component_id,COUNT(*) as total')
  145. ->groupBy('join_quota_member_id', 'join_member_rule_added_component_id')
  146. ->get()
  147. ->toArray();
  148. foreach ($quotas as $quota) {
  149. $usedNum = MemberQuota::where('join_quota_member_id', $quota['join_quota_member_id'])
  150. ->where('join_member_rule_added_component_id', $quota['join_member_rule_added_component_id'])
  151. ->where('member_quota_status', 'USED')
  152. ->count('*');
  153. if ($quota['total'] <= $usedNum) {
  154. continue;
  155. }
  156. $memberQuota = MemberQuota::where('join_quota_member_id', $quota['join_quota_member_id'])
  157. ->where('join_member_rule_added_component_id', $quota['join_member_rule_added_component_id'])
  158. ->select('member_quota_id as id', 'member_quota_name as name')
  159. ->first()
  160. ->toArray();
  161. $memberQuota['total'] = $quota['total'];
  162. $memberQuota['used'] = $usedNum;
  163. if ($memberQuota['total'] - $memberQuota['used'] < $person) {
  164. $memberQuota['disabled'] = true;
  165. }
  166. $memberQuota['cut'] = $memberQuota['total'] - $memberQuota['used'];
  167. $data[] = $memberQuota;
  168. }
  169. if ($selectType == 'QUOTA') {
  170. return json_success('', $data);
  171. }
  172. return json_success('', $data);
  173. }
  174. /**
  175. * 预约核销用
  176. */
  177. public function selectMemberAllQuotaByAppointment(Request $request)
  178. {
  179. $memberId = $request->get('member_id','');
  180. $orderId = $request->get('order_id', '');
  181. $goodsId = $request->get('goods_id','');
  182. $person = $request->get('person', '');
  183. $selectType = $request->get('select_type', 'ALL');
  184. if (!$memberId) {
  185. return json_fail('参数异常');
  186. }
  187. $data = [];
  188. $benefit = MemberBenefit::where('join_benefit_member_id', $memberId)
  189. ->whereColumn('member_benefit_limit_count', '>', 'member_benefit_used_count')
  190. ->select('member_benefit_id as id', 'member_benefit_name as name', 'member_benefit_limit_count as total', 'member_benefit_used_count as used')
  191. ->when($orderId != '', function ($query) use ($orderId) {
  192. $query->where('join_benefit_order_id', $orderId);
  193. })->when($goodsId != '', function ($query) use ($goodsId) {
  194. $query->where('join_benefit_goods_id', $goodsId);
  195. })
  196. ->get()
  197. ->toArray();
  198. $data['benefit'] = [];
  199. foreach ($benefit as $item) {
  200. $item['benefit']['cut'] = $item['total'] - $item['used'];
  201. $data['benefit']['name'] = $item['name'];
  202. $data['benefit']['cut'] += $item['cut'];
  203. $data['benefit']['id'][] = $item['id'];
  204. }
  205. if ($selectType == 'BENEFIT') {
  206. return json_success('', $data);
  207. }
  208. $quotas = MemberQuota::where('join_quota_member_id', $memberId)
  209. ->when($goodsId != '', function ($query) use ($goodsId) {
  210. $query->whereJsonContains('member_quota_json', ['goods_id' => $goodsId]);
  211. })
  212. ->selectRaw('join_quota_member_id,join_member_rule_added_component_id,COUNT(*) as total')
  213. ->groupBy('join_quota_member_id', 'join_member_rule_added_component_id')
  214. ->get()
  215. ->toArray();
  216. $data['quota'] = [];
  217. foreach ($quotas as $quota) {
  218. $usedNum = MemberQuota::where('join_quota_member_id', $quota['join_quota_member_id'])
  219. ->where('join_member_rule_added_component_id', $quota['join_member_rule_added_component_id'])
  220. ->where('member_quota_status', 'USED')
  221. ->count('*');
  222. if ($quota['total'] <= $usedNum) {
  223. continue;
  224. }
  225. $memberQuota = MemberQuota::where('join_quota_member_id', $quota['join_quota_member_id'])
  226. ->where('join_member_rule_added_component_id', $quota['join_member_rule_added_component_id'])
  227. ->select('member_quota_id as id', 'member_quota_name as name')
  228. ->first()
  229. ->toArray();
  230. $memberQuota['total'] = $quota['total'];
  231. $memberQuota['used'] = $usedNum;
  232. if ($memberQuota['total'] - $memberQuota['used'] < $person) {
  233. $memberQuota['disabled'] = true;
  234. }
  235. $memberQuota['cut'] = $memberQuota['total'] - $memberQuota['used'];
  236. $data['quota']['name'] = $memberQuota['name'];
  237. $data['quota']['cut'] += $memberQuota['cut'];
  238. $data['quota']['id'][] = $memberQuota['id'];
  239. // $data[] = $memberQuota;
  240. }
  241. if ($selectType == 'QUOTA') {
  242. return json_success('', $data);
  243. }
  244. return json_success('', $data);
  245. }
  246. public function selectMemberAllQuotaByGoods(Request $request)
  247. {
  248. $memberId = $request->get('member_id', '');
  249. $orderId = $request->get('order_id', '');
  250. $person = $request->get('person', '');
  251. $selectType = $request->get('select_type', 'ALL');
  252. if (!$memberId) {
  253. return json_fail('参数异常');
  254. }
  255. $data = [];
  256. $benefit = MemberBenefit::where('join_benefit_member_id', $memberId)
  257. // ->whereColumn('member_benefit_limit_count','>','member_benefit_used_count')
  258. ->select('member_benefit_id as id', 'member_benefit_name as name', 'member_benefit_limit_count as total', 'member_benefit_used_count as used')
  259. ->when($orderId != '', function ($query) use ($orderId) {
  260. $query->where('join_benefit_order_id', $orderId);
  261. })
  262. ->get()
  263. ->toArray();
  264. foreach ($benefit as $item) {
  265. if ($item['total'] - $item['used'] < $person) {
  266. $item['disabled'] = true;
  267. }
  268. $item['cut'] = $item['total'] - $item['used'];
  269. $data[] = $item;
  270. }
  271. if ($selectType == 'BENEFIT') {
  272. return json_success('', $data);
  273. }
  274. $quotas = MemberQuota::where('join_quota_member_id', $memberId)
  275. ->selectRaw('join_quota_member_id,join_member_rule_added_component_id,COUNT(*) as total')
  276. ->groupBy('join_quota_member_id', 'join_member_rule_added_component_id')
  277. ->get()
  278. ->toArray();
  279. foreach ($quotas as $quota) {
  280. $usedNum = MemberQuota::where('join_quota_member_id', $quota['join_quota_member_id'])
  281. ->where('join_member_rule_added_component_id', $quota['join_member_rule_added_component_id'])
  282. ->where('member_quota_status', 'USED')
  283. ->count('*');
  284. if ($quota['total'] <= $usedNum) {
  285. continue;
  286. }
  287. $memberQuota = MemberQuota::where('join_quota_member_id', $quota['join_quota_member_id'])
  288. ->where('join_member_rule_added_component_id', $quota['join_member_rule_added_component_id'])
  289. ->select('member_quota_id as id', 'member_quota_name as name')
  290. ->first()
  291. ->toArray();
  292. $memberQuota['total'] = $quota['total'];
  293. $memberQuota['used'] = $usedNum;
  294. if ($memberQuota['total'] - $memberQuota['used'] < $person) {
  295. $memberQuota['disabled'] = true;
  296. }
  297. $memberQuota['cut'] = $memberQuota['total'] - $memberQuota['used'];
  298. $data[] = $memberQuota;
  299. }
  300. if ($selectType == 'QUOTA') {
  301. return json_success('', $data);
  302. }
  303. return json_success('', $data);
  304. }
  305. public function list(Request $request)
  306. {
  307. return MemberService::list($request);
  308. }
  309. public function info(Request $request)
  310. {
  311. $memberId = $request->get('member_id', '');
  312. if (!$memberId) {
  313. return json_fail("参数错误");
  314. }
  315. return MemberService::info($memberId);
  316. }
  317. public function vipInfo(Request $request)
  318. {
  319. $memberId = $request->get('member_id', '');
  320. if (!$memberId) {
  321. return json_fail("参数错误");
  322. }
  323. return MemberService::vipInfo($request);
  324. }
  325. public function welfareInfo(Request $request)
  326. {
  327. $memberId = $request->get('member_id', '');
  328. if (!$memberId) {
  329. return json_fail("参数错误");
  330. }
  331. return MemberService::welfareInfo($request);
  332. }
  333. public function balanceInfo(Request $request)
  334. {
  335. $memberId = $request->get('member_id', '');
  336. if (!$memberId) {
  337. return json_fail("参数错误");
  338. }
  339. return MemberService::balanceInfo($request);
  340. }
  341. public function pointInfo(Request $request)
  342. {
  343. $memberId = $request->get('member_id', '');
  344. if (!$memberId) {
  345. return json_fail("参数错误");
  346. }
  347. return MemberService::pointInfo($memberId);
  348. }
  349. /**
  350. * @Desc 添加会员
  351. * @Author Gorden
  352. * @Date 2024/3/25 13:40
  353. *
  354. * @param Request $request
  355. * @return \support\Response
  356. */
  357. public function add(Request $request)
  358. {
  359. $validate = new MemberValidate();
  360. if (!$validate->scene('add')->check($request->post())) {
  361. return json_fail($validate->getError());
  362. }
  363. _syslog("添加用户", "用户【" . $request->post('member_cert_name') . '】');
  364. return MemberService::add($request->post());
  365. }
  366. public function update(Request $request)
  367. {
  368. $validate = new MemberValidate();
  369. if (!$validate->scene('update')->check($request->post())) {
  370. return json_fail($validate->getError());
  371. }
  372. _syslog("编辑用户", "用户【" . $request->post('member_cert_name') ?? $request->post('member_id') . '】');
  373. return MemberService::update($request->post());
  374. }
  375. /**
  376. * @Desc 绑定的设备
  377. * @Author Gorden
  378. * @Date 2024/4/7 10:20
  379. *
  380. * @param $id
  381. * @return \support\Response
  382. */
  383. public function device($id)
  384. {
  385. return MemberService::deviceList($id);
  386. }
  387. public function addDevice(Request $request)
  388. {
  389. return MemberService::addDevice($request);
  390. }
  391. public function updateDevice(Request $request)
  392. {
  393. return MemberService::updateDevice($request);
  394. }
  395. public function deleteDevice(Request $request)
  396. {
  397. return MemberService::deleteDevice($request);
  398. }
  399. }