get('page', 1); $pageSize = $request->get('pageSize', 10); $name = $request->get('name', ''); $mobile = $request->get('mobile', ''); $rows = Member::where('member_is_owner', 'N') ->leftJoin('member_info', 'member_info.join_info_member_id', 'member.member_id') ->leftJoin('member_cert', 'member_cert.join_cert_member_id', 'member.member_id') ->when($name != '', function ($query) use ($name) { $query->where('member_cert.member_cert_name', 'like', '%' . $name . '%'); })->when($mobile != '', function ($query) use ($mobile) { $query->where('member.member_mobile', 'like', '%' . $mobile . '%'); })->select('member_id', 'member_is_owner', 'member_classify', 'member_status', 'member_mobile', 'member_from', 'member_addtimes', 'member_info.member_info_nickname', 'member_info.member_info_headimg', 'member_cert.member_cert_birth', 'member_cert.member_cert_gender', 'member_cert.member_cert_name', 'member_cert.member_cert_nbr', 'member_cert.member_cert_province', 'member_cert.member_cert_addr', 'member_cert.member_cert_face', 'member_cert.member_cert_photo', 'member_cert.member_cert_nation' ); // 总条数 $total = $rows->count('member_id'); $rows = $rows->orderBy('member_addtimes', 'DESC') ->forPage($page, $pageSize) ->get() ->toArray(); foreach ($rows as &$row) { $row['info'] = [ 'member_info_nickname' => $row['member_info_nickname'] ?? '', 'member_info_headimg' => !empty($row['member_info_headimg']) ? getenv('STORAGE_DOMAIN') . $row['member_info_headimg'] : '' ]; $row['cert'] = [ 'member_cert_birth' => $row['member_cert_birth'], 'member_cert_gender' => $row['member_cert_gender'], 'member_cert_name' => $row['member_cert_name'], 'member_cert_nbr' => $row['member_cert_nbr'], 'member_cert_province' => !empty($row['member_cert_province']) && is_json($row['member_cert_province']) ? json_decode($row['member_cert_province']) : '', 'member_cert_addr' => $row['member_cert_addr'], 'member_cert_face' => !empty($row['member_cert_face']) ? getenv('STORAGE_DOMAIN') . $row['member_cert_face'] : '', 'member_cert_photo' => !empty($row['member_cert_photo']) ? getenv('STORAGE_DOMAIN') . $row['member_cert_photo'] : '', 'member_cert_nation' => $row['member_cert_nation'], ]; $row['is_auth'] = "未认证"; if (!empty($row['member_cert_nbr']) && !empty($row['member_cert_face']) && !empty($row['member_cert_photo'])) { $row['is_auth'] = "已认证"; } } return json_success('', compact('rows', 'page', 'pageSize', 'total')); } /** * @Desc 添加会员 * @Author Gorden * @Date 2024/3/25 13:40 * * @param $params * @return \support\Response */ public static function add($params) { Db::beginTransaction(); try { $memberId = self::generateMemberId(); // 先写主表,要ID $memberData = [ 'member_id' => $memberId, 'member_is_owner' => $params['is_owner'], 'member_classify' => $params['classify'], 'member_status' => $params['status'], 'member_mobile' => $params['mobile'], 'member_from' => $params['source'], 'member_addtimes' => time(), ]; Member::insert($memberData); // member cert $certData = [ 'join_cert_member_id' => $memberId, 'member_cert_nation' => $params['member_cert_nation'] ?? '', 'member_cert_name' => $params['cert_name'] ?? '', 'member_cert_nbr' => $params['cert_nbr'] ?? '', 'member_cert_birth' => $params['birth'] ? date('Y-m-d', strtotime($params['birth'])) : '', 'member_cert_gender' => $params['gender'] ?? '', 'member_cert_province' => $params['province'] ? json_encode($params['province'], JSON_UNESCAPED_UNICODE) : '[]', 'member_cert_city' => $params['city'] ?? '', 'member_cert_addr' => $params['addr'] ?? '', 'member_cert_face' => str_replace(getenv('STORAGE_DOMAIN'), '', $params['member_cert_face']), 'member_cert_photo' => str_replace(getenv('STORAGE_DOMAIN'), '', $params['member_cert_photo']), ]; MemberCert::insert($certData); // member info $infoData = [ 'join_info_member_id' => $memberId, 'member_info_nickname' => $params['account_name'], 'member_info_headimg' => str_replace(getenv('STORAGE_DOMAIN'), '', $params['avatar']) ]; MemberInfo::insert($infoData); Db::commit(); } catch (\Exception $e) { Db::rollBack(); dump($e->getMessage() . ';line:' . $e->getLine()); return json_fail("数据添加失败"); } return json_success('数据添加成功'); } /** * @Desc 编辑会员/ 业主 * @Author Gorden * @Date 2024/4/20 15:18 * * @param $params * @return \support\Response */ public static function update($params) { Db::beginTransaction(); try { $memberId = $params['member_id']; if (!Member::where('member_id', $params['member_id'])->exists()) { return json_fail("暂无数据"); } // 先写主表,要ID $memberData = [ 'member_id' => $memberId, 'member_is_owner' => $params['is_owner'], 'member_classify' => $params['classify'], 'member_status' => $params['status'], 'member_mobile' => $params['mobile'], 'member_from' => $params['source'], ]; Member::where('member_id', $params['member_id'])->update($memberData); // member cert $certData = [ 'join_cert_member_id' => $memberId, 'member_cert_nation' => $params['member_cert_nation'] ?? '', 'member_cert_name' => $params['cert_name'] ?? '', 'member_cert_nbr' => $params['cert_nbr'] ?? '', 'member_cert_birth' => $params['birth'] ? date('Y-m-d', strtotime($params['birth'])) : '', 'member_cert_gender' => $params['gender'] ?? '', 'member_cert_province' => $params['province'] ? json_encode($params['province'], JSON_UNESCAPED_UNICODE) : '[]', 'member_cert_city' => $params['city'] ?? '', 'member_cert_addr' => $params['addr'] ?? '', 'member_cert_face' => str_replace(getenv('STORAGE_DOMAIN'), '', $params['member_cert_face']), 'member_cert_photo' => str_replace(getenv('STORAGE_DOMAIN'), '', $params['member_cert_photo']), ]; if (!MemberCert::where('join_cert_member_id', $memberId)->exists()) { MemberCert::insert($certData); } else { MemberCert::where('join_cert_member_id', $params['member_id'])->update($certData); } // member info $infoData = [ 'join_info_member_id' => $memberId, 'member_info_nickname' => $params['account_name'], 'member_info_headimg' => str_replace(getenv('STORAGE_DOMAIN'), '', $params['avatar']) ]; if (!MemberInfo::where('join_info_member_id', $params['member_id'])->exists()) { MemberInfo::insert($infoData); } else { MemberInfo::where('join_info_member_id', $params['member_id'])->update($infoData); } Db::commit(); } catch (\Exception $e) { Db::rollBack(); dump($e->getMessage() . ';line:' . $e->getLine()); return json_fail("数据更新失败"); } return json_success('数据更新成功'); } /** * @Desc 会员关联设备列表 * @Author Gorden * @Date 2024/4/7 9:52 * * @param $id * @return \support\Response */ public static function deviceList($id) { $family = Family::where('join_family_creator_member_id', $id)->get()->toArray(); $familyMemberIds = ''; if ($family) { $familyIds = array_column($family, 'family_id'); $familyMember = FamilyMember::whereIn('join_family_id', $familyIds)->get()->toArray(); $familyMemberIds = array_column($familyMember, 'join_family_member_id'); } $rows = MemberDevice::leftJoin('device', 'device.device_id', '=', 'member_device.join_member_device_id') ->leftJoin('member', 'member.member_id', '=', 'member_device.join_device_member_id') ->leftJoin('family_member', 'family_member.join_family_member_id', '=', 'member_device.join_device_member_id') ->select('device.device_category', 'device.device_name', 'device.device_type', 'member.member_mobile', 'member_device.*', 'family_member.family_member_name') ->when(!empty($familyMemberIds), function ($query) use ($familyMemberIds) { $query->whereIn('member_device.join_device_master_member_id', $familyMemberIds); }) ->when(empty($familyMemberIds), function ($query) use ($id) { $query->where('member_device.join_device_master_member_id', $id); })->orderBy('member_device_addtimes', 'desc') ->get() ->toArray(); return json_success('', ['rows' => $rows]); } /** * @Desc 绑定设备 * @Author Gorden * @Date 2024/4/7 10:27 * * @param Request $request * @return \support\Response */ public static function addDevice(Request $request) { $params = $request->post(); Db::beginTransaction(); try { $data = [ 'join_device_member_id' => $params['join_device_member_id'] ?? '', 'join_device_master_member_id' => $params['join_device_master_member_id'], 'join_member_device_id' => $params['join_member_device_id'], 'member_device_status' => $params['member_device_status'], 'member_device_key' => $params['member_device_key'] ?? '', 'member_device_config_json' => !empty($params['member_device_config_json']) ? $params['member_device_config_json'] : null, 'member_device_remark' => $params['member_device_remark'] ?? null, 'member_device_addtimes' => time(), ]; MemberDevice::insert($data); $device = Device::where('device_id', $params['join_member_device_id'])->whereIn('device_status', ['PROCESSING', 'PENDING'])->first(); // 激活设备 if (!$device) { Db::rollBack(); return json_fail('当前设备不是可激活状态'); } $device->device_status = 'ACTIVED'; $device->save(); Device::where('device_id', $params['join_member_device_id'])->update(['device_status' => 'ACTIVED']); _syslog("绑定设备", "用户【" . ($params['join_device_member_id'] ?? $params['join_device_master_member_id']) . '】,绑定设备【' . $device->device_name . '】'); Db::commit(); } catch (\Exception $e) { Db::rollBack(); dump($e->getMessage()); return json_fail('绑定失败'); } return json_success('绑定成功'); } public static function updateDevice(Request $request) { $params = $request->post(); Db::beginTransaction(); try { $data = [ 'member_device_status' => $params['member_device_status'], 'member_device_key' => $params['member_device_key'], 'join_device_member_id' => $params['join_device_member_id'], 'member_device_config_json' => !empty($params['member_device_config_json']) ? $params['member_device_config_json'] : null, 'member_device_remark' => $params['member_device_remark'] ?? null, ]; MemberDevice::where('member_device_id', $request->post('member_device_id'))->update($data); $device = Device::where('device_id', $params['join_member_device_id'])->first(); if ($device->device_status != $params['member_device_status']) { $device->device_status = $params['member_device_status']; $device->save(); } // Device::where('device_id', $params['join_member_device_id'])->update(['device_status' => $params['member_device_status']]); Db::commit(); _syslog("更新绑定设备", "用户【" . ($params['join_device_member_id'] == "" ? $params['join_device_member_id'] : $params['join_device_master_member_id']) . '】,绑定设备【' . $device->device_name . '】'); } catch (\Exception $e) { Db::rollBack(); dump($e->getMessage()); return json_fail('绑定更新失败'); } return json_success('绑定更新成功'); } public static function deleteDevice(Request $request) { try { Db::beginTransaction(); $memberDevice = MemberDevice::where('member_device_id', $request->post('member_device_id'))->first(); if (!$memberDevice) { return json_fail('数据不存在'); } $device = Device::where('device_id', $memberDevice->join_member_device_id)->first(); $device->device_status = "DISABLED"; $device->save(); // Device::where('device_id', $memberDevice->join_member_device_id)->update(['device_status' => 'DISABLED']); $memberDevice->delete(); Db::commit(); _syslog("解除绑定设备", "用户【" . ($memberDevice->join_device_member_id == "" ? $memberDevice->join_device_member_id : $memberDevice->join_device_master_member_id) . '】,解除绑定设备【' . $device->device_name . '】'); return json_success('解除绑定成功'); } catch (\Exception $e) { Db::rollBack(); return json_fail('绑定失败'); } } private static function generateMemberId() { $id = SysSerial::getSerial(); return "ME" . str_pad($id, 16, "0", STR_PAD_LEFT) . random_string(6, 'up'); } }