MemberController.php 16 KB

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