134 lines
4.3 KiB
PHP
134 lines
4.3 KiB
PHP
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | YwxApp [ WE CAN DO IT JUST THINK ]
|
|
// +----------------------------------------------------------------------
|
|
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
|
|
// +----------------------------------------------------------------------
|
|
// | Author: ywxapp<admin@ywxapp.cn>
|
|
// +----------------------------------------------------------------------
|
|
declare (strict_types = 1);
|
|
|
|
namespace addon\wxchat\controller\member;
|
|
|
|
use addon\wxchat\model\WxchatFamily;
|
|
use addon\wxchat\model\WxchatFamilyMember;
|
|
use think\facade\Db;
|
|
use think\facade\Request;
|
|
use ywxapp\controller\FrontendBase;
|
|
use ywxapp\model\MemberProfile as ProfileModel;
|
|
|
|
/**
|
|
* 家族:创建 / 加入 / 退出 / 成员 / 家族群聊(复用 group 消息通道)
|
|
*/
|
|
class Family extends FrontendBase
|
|
{
|
|
/**
|
|
* 创建家族
|
|
*/
|
|
public function create()
|
|
{
|
|
$uid = $this->auth->uid;
|
|
$name = trim((string) Request::post('name', ''));
|
|
$avatar = trim((string) Request::post('avatar', ''));
|
|
$notice = trim((string) Request::post('notice', ''));
|
|
if (! $name) {
|
|
$this->error('请填写家族名称');
|
|
}
|
|
|
|
$family = new WxchatFamily();
|
|
$family->name = $name;
|
|
$family->avatar = $avatar;
|
|
$family->owner_uid = $uid;
|
|
$family->notice = $notice;
|
|
$family->member_count = 1;
|
|
$family->status = 1;
|
|
$family->create_at = time();
|
|
$family->save();
|
|
|
|
$member = new WxchatFamilyMember();
|
|
$member->family_id = $family->id;
|
|
$member->uid = $uid;
|
|
$member->role = 2; // 族长
|
|
$member->join_at = time();
|
|
$member->save();
|
|
|
|
$this->success(['family_id' => $family->id], '创建成功');
|
|
}
|
|
|
|
/**
|
|
* 加入家族
|
|
*/
|
|
public function join()
|
|
{
|
|
$uid = $this->auth->uid;
|
|
$familyId = (int) Request::post('family_id', 0);
|
|
$family = WxchatFamily::where('id', $familyId)->where('status', 1)->find();
|
|
if (! $family) {
|
|
$this->error('家族不存在或已解散');
|
|
}
|
|
if (WxchatFamilyMember::where('family_id', $familyId)->where('uid', $uid)->find()) {
|
|
$this->error('你已在家族中');
|
|
}
|
|
$member = new WxchatFamilyMember();
|
|
$member->family_id = $familyId;
|
|
$member->uid = $uid;
|
|
$member->role = 0;
|
|
$member->join_at = time();
|
|
$member->save();
|
|
|
|
$family->where('id', $familyId)->inc('member_count')->update();
|
|
$this->success([], '已加入');
|
|
}
|
|
|
|
/**
|
|
* 退出家族(族长退出则解散家族)
|
|
*/
|
|
public function quit()
|
|
{
|
|
$uid = $this->auth->uid;
|
|
$familyId = (int) Request::post('family_id', 0);
|
|
$member = WxchatFamilyMember::where('family_id', $familyId)->where('uid', $uid)->find();
|
|
if (! $member) {
|
|
$this->error('你不在该家族');
|
|
}
|
|
if ($member->role == 2) {
|
|
// 族长退出 -> 解散
|
|
WxchatFamily::where('id', $familyId)->update(['status' => 0]);
|
|
WxchatFamilyMember::where('family_id', $familyId)->delete();
|
|
} else {
|
|
$member->delete();
|
|
WxchatFamily::where('id', $familyId)->where('member_count', '>', 0)->dec('member_count')->update();
|
|
}
|
|
$this->success([], '已退出');
|
|
}
|
|
|
|
/**
|
|
* 家族信息
|
|
*/
|
|
public function info()
|
|
{
|
|
$familyId = (int) Request::get('family_id', 0);
|
|
$family = WxchatFamily::where('id', $familyId)->where('status', 1)->find();
|
|
if (! $family) {
|
|
$this->error('家族不存在');
|
|
}
|
|
$this->success($family);
|
|
}
|
|
|
|
/**
|
|
* 成员列表(含昵称/头像)
|
|
*/
|
|
public function members()
|
|
{
|
|
$familyId = (int) Request::get('family_id', 0);
|
|
$list = Db::name('wxchat_family_members')->alias('m')
|
|
->join('user u', 'u.uid = m.uid')
|
|
->join('user_profile p', 'p.uid = m.uid', 'left')
|
|
->where('m.family_id', $familyId)
|
|
->field('m.uid,m.role,m.join_at,u.nickname,u.avatar,p.gender,p.residecity')
|
|
->order('m.role', 'desc')
|
|
->select();
|
|
$this->success($list);
|
|
}
|
|
}
|