From 0b253b60584fc4dfa87d3a4ef2cc2ca5c1dd884e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=98=8A=E5=A4=A9?= <442384644@qq.com> Date: Mon, 26 Oct 2026 12:04:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E4=BC=9A=E5=91=98=E8=AE=A2=E5=8D=95):=20?= =?UTF-8?q?=E7=A9=BA=E7=AD=9B=E9=80=89=E4=B8=8D=E8=90=BD=E5=BA=93=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=94=AF=E6=8C=81=E5=A7=93=E5=90=8D=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E6=90=9C=E7=B4=A2=E5=B9=B6=E5=85=B3=E8=81=94=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- backend/app/dao/user/MemberOrderDao.php | 2 +- backend/app/model/user/MemberOrder.php | 42 +++++++ .../app/services/user/MemberOrderServices.php | 108 +++++++++++++----- 3 files changed, 121 insertions(+), 31 deletions(-) diff --git a/backend/app/dao/user/MemberOrderDao.php b/backend/app/dao/user/MemberOrderDao.php index 79736b7ff..934c81582 100644 --- a/backend/app/dao/user/MemberOrderDao.php +++ b/backend/app/dao/user/MemberOrderDao.php @@ -37,7 +37,7 @@ class MemberOrderDao extends BaseDao */ public function getList(array $where, string $field = '*', int $page = 0, int $limit = 0) { - return $this->search($where)->field($field)->when($page && $limit, function ($query) use ($page, $limit) { + return $this->search($where)->with(['user'])->field($field)->when($page && $limit, function ($query) use ($page, $limit) { $query->page($page, $limit); })->order('id desc')->select()->toArray(); } diff --git a/backend/app/model/user/MemberOrder.php b/backend/app/model/user/MemberOrder.php index def001ab5..4ca589896 100644 --- a/backend/app/model/user/MemberOrder.php +++ b/backend/app/model/user/MemberOrder.php @@ -51,6 +51,15 @@ class MemberOrder extends BaseModel return time(); } + /** + * 关联用户 + * @return \think\model\relation\HasOne + */ + public function user() + { + return $this->hasOne(User::class, 'uid', 'uid')->field('uid,nickname,phone,avatar'); + } + /** * 用户ID搜索器 * @param mixed $query @@ -117,6 +126,9 @@ class MemberOrder extends BaseModel */ public function searchMemberTypeAttr($query, $value) { + if ($value === '' || $value === null) { + return; + } if ($value === -1) { $query->where('member_type', '<>', ''); } else { @@ -124,6 +136,36 @@ class MemberOrder extends BaseModel } } + /** + * 支付方式搜索器 + * @param mixed $query + * @param mixed $value + */ + public function searchPayTypeAttr($query, $value) + { + if ($value === '' || $value === null) { + return; + } + $query->where('pay_type', $value); + } + + /** + * 免费支付筛选(免费领取 / 试用免费单) + * @param mixed $query + * @param mixed $value + */ + public function searchFreePayAttr($query, $value) + { + if (!$value) { + return; + } + $query->where(function ($q) { + $q->where('type', 0)->whereOr(function ($q2) { + $q2->where('type', 1)->where('is_free', 1); + }); + }); + } + /** * 渠道类型搜索器 * @param mixed $query diff --git a/backend/app/services/user/MemberOrderServices.php b/backend/app/services/user/MemberOrderServices.php index d0f3061c9..19eb44c8b 100644 --- a/backend/app/services/user/MemberOrderServices.php +++ b/backend/app/services/user/MemberOrderServices.php @@ -453,18 +453,51 @@ class MemberOrderServices extends BaseService */ public function getMemberRecord(array $where) { - $where['type'] = [0, 1, 2]; - $where['paid'] = 1; - //时间范围筛选 - if ($where['add_time']) { - $searchTime = explode('-', $where['add_time']); - $startTime = strtotime($searchTime[0]); - $endTime = strtotime($searchTime[1]); - if ($startTime == $endTime) { - $endTime += 86400; + // 空筛选不得下发到搜索器/字段条件,否则会出现 member_type=''、pay_type='' 把结果滤空 + foreach (['name', 'member_type', 'pay_type', 'add_time'] as $key) { + if (!isset($where[$key]) || $where[$key] === '' || $where[$key] === null) { + unset($where[$key]); } - $where['add_time'] = [$startTime, $endTime]; } + unset($where['page'], $where['limit']); + + // 0免费 1购买 2卡密 3后台赠送 + $where['type'] = [0, 1, 2, 3]; + $where['paid'] = 1; + + // 用户名/手机号/UID 模糊搜索 → uid 集合 + if (!empty($where['name'])) { + /** @var UserServices $userServices */ + $userServices = app()->make(UserServices::class); + $uids = $userServices->getColumn([['account|nickname|phone|real_name|uid', 'like', '%' . $where['name'] . '%']], 'uid'); + unset($where['name']); + if (!$uids) { + return ['list' => [], 'count' => 0]; + } + $where['uid'] = $uids; + } + + // 支付方式「免费」:免费领取 / 试用免费单 + if (isset($where['pay_type']) && $where['pay_type'] === 'free') { + unset($where['pay_type']); + $where['free_pay'] = 1; + } + + // 时间范围筛选 + if (!empty($where['add_time'])) { + $searchTime = explode('-', $where['add_time']); + $startTime = strtotime($searchTime[0] ?? ''); + $endTime = strtotime($searchTime[1] ?? ''); + if ($startTime && $endTime) { + if ($startTime == $endTime) { + $endTime += 86400; + } + $where['add_time'] = [$startTime, $endTime]; + } else { + unset($where['add_time']); + } + } + [$page, $limit] = $this->getPageValue(); $list = $this->dao->getList($where, '*', $page, $limit); if ($list) { @@ -473,36 +506,51 @@ class MemberOrderServices extends BaseService $shipInfo = $memberShipService->getApiList([]); $shipInfo = array_column($shipInfo, 'title', 'type'); $shipInfo['owner'] = '自定义'; + $shipInfo['free'] = '试用'; + $shipInfo['card'] = '卡密'; foreach ($list as &$v) { - $v['member_type'] = $v['member_type'] ? $shipInfo[$v['member_type']] ?? '其他' : '其他'; - $v['pay_time'] = date('Y-m-d H:i:s', $v['pay_time']); - $v['add_time'] = date('Y-m-d H:i:s', $v['add_time']); - $v['overdue_time'] = date('Y-m-d H:i:s', $v['overdue_time']); - //支付方式转换 + $memberTypeKey = (string)($v['member_type'] ?? ''); + $v['member_type'] = $memberTypeKey !== '' && $memberTypeKey !== '0' + ? ($shipInfo[$memberTypeKey] ?? '其他') + : ($v['type'] == 3 ? '后台赠送' : '其他'); + $v['pay_time'] = $v['pay_time'] ? date('Y-m-d H:i:s', (int)$v['pay_time']) : ''; + $v['add_time'] = $v['add_time'] ? date('Y-m-d H:i:s', (int)$v['add_time']) : ''; + $v['overdue_time'] = $v['overdue_time'] ? date('Y-m-d H:i:s', (int)$v['overdue_time']) : ''; + // 支付方式转换 switch ($v['pay_type']) { - case "yue": - $v['pay_type'] = "余额"; + case 'yue': + $v['pay_type'] = '余额'; break; - case "weixin": - $v['pay_type'] = "微信"; + case 'weixin': + $v['pay_type'] = '微信'; break; - case "alipay": - $v['pay_type'] = "支付宝"; + case 'alipay': + $v['pay_type'] = '支付宝'; break; case 'allinpay': - $v['pay_type'] = "通联支付"; + $v['pay_type'] = '通联支付'; break; - case "admin": - $v['pay_type'] = "后台赠送"; + case 'admin': + $v['pay_type'] = '后台赠送'; break; } - //订单类型特殊处理 - if ($v['type'] == 0) $v['pay_type'] = "免费领取"; - if ($v['type'] == 2) { - $v['pay_type'] = "卡密领取"; - $v['member_type'] = "卡密激活"; + // 订单类型特殊处理 + if ((int)$v['type'] === 0) { + $v['pay_type'] = '免费领取'; + } + if ((int)$v['type'] === 2) { + $v['pay_type'] = '卡密领取'; + $v['member_type'] = '卡密激活'; + } + if ((int)$v['type'] === 1 && (int)$v['is_free'] === 1) { + $v['pay_type'] = '免费领取'; + } + if ((int)$v['type'] === 3) { + $v['pay_type'] = '后台赠送'; + } + if (!isset($v['user']) || !is_array($v['user'])) { + $v['user'] = ['nickname' => '', 'phone' => '']; } - if ($v['type'] == 1 && $v['is_free'] == 1) $v['pay_type'] = "免费领取"; } } $count = $this->dao->count($where);