MemberController.php 16 KB

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