From d90135d2fc40e53c14a9cd7642c2cd7eb0e8e9e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=98=8A=E5=A4=A9?= <442384644@qq.com> Date: Fri, 23 Oct 2026 14:09:51 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E7=A7=AF=E5=88=86):=20=E7=A7=AF=E5=88=86?= =?UTF-8?q?=E7=B4=AF=E8=AE=A1=E6=94=B9=E6=8C=89=E6=94=B6=E6=94=AF=E6=96=B9?= =?UTF-8?q?=E5=90=91=E8=81=9A=E5=90=88=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=B7=B2?= =?UTF-8?q?=E5=BA=9F=E5=BC=83=E7=9A=84=E8=BF=87=E6=9C=9F=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserBillServices 新增 getIntegralSumByPm():按 category=integral + status=1 + pm 方向求和,支持时间筛选与冻结期内(is_frozen=1)统计。 - 签到页用户信息统计不再枚举 type 白名单:新增积分类型(order_give_integral、 order_gain_refund 等)无需同步维护即可正确计入累计/支出/今日; 冻结积分改为只统计积分流水中的冻结收入项。 - 用户端积分页移除 clear_time 过期提示(对应逻辑已废弃),清理 dayjs 依赖与 isTime 状态。 --- .../app/services/user/UserBillServices.php | 26 +++++++++++++++++++ .../signin/service/UserSignServices.php | 13 +++++----- .../src/pages/users/user_integral/index.vue | 18 +------------ 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/backend/app/services/user/UserBillServices.php b/backend/app/services/user/UserBillServices.php index 333cf7c84..2fca4ae43 100644 --- a/backend/app/services/user/UserBillServices.php +++ b/backend/app/services/user/UserBillServices.php @@ -457,6 +457,32 @@ class UserBillServices extends BaseService return $this->dao->getBillSumColumn($where); } + /** + * 按收支方向统计用户积分合计 + * 用 pm 方向聚合替代 type 白名单,避免新增积分类型漏统计 + * @param int $uid 用户ID + * @param int $pm 1=收入 0=支出 + * @param string $time 时间筛选(today/week/month 等),空则不限 + * @param bool $frozen 是否只统计冻结期内(frozen_time > 当前时间)的流水 + * @return float + */ + public function getIntegralSumByPm(int $uid, int $pm, string $time = '', bool $frozen = false): float + { + $where = [ + 'uid' => $uid, + 'category' => 'integral', + 'status' => 1, + 'pm' => $pm, + ]; + if ($time !== '') { + $where['time'] = $time; + } + if ($frozen) { + $where['is_frozen'] = 1; + } + return (float)$this->dao->getBillSumColumn($where); + } + /** * 获取用户|所有佣金总数 diff --git a/backend/modules/marketing/signin/service/UserSignServices.php b/backend/modules/marketing/signin/service/UserSignServices.php index 14fda09e8..316b56ba0 100644 --- a/backend/modules/marketing/signin/service/UserSignServices.php +++ b/backend/modules/marketing/signin/service/UserSignServices.php @@ -281,12 +281,13 @@ class UserSignServices extends BaseService if ($integral || $all) { /** @var UserBillServices $userBill */ $userBill = app()->make(UserBillServices::class); - $user['sum_integral'] = intval($userBill->getRecordCount($user['uid'], 'integral', 'sign,system_add,gain,lottery_add,product_gain,pay_product_integral_back')); - $user['deduction_integral'] = intval($userBill->getRecordCount($user['uid'], 'integral', 'deduction,lottery_use,order_deduction,storeIntegral_use', '', true) ?? 0); - $user['today_integral'] = intval($userBill->getRecordCount($user['uid'], 'integral', 'sign,system_add,gain,product_gain,lottery_add,pay_product_integral_back', 'today')); - /** @var UserBillServices $userBillServices */ - $userBillServices = app()->make(UserBillServices::class); - $user['frozen_integral'] = $userBillServices->getBillSum(['uid' => $user['uid'], 'is_frozen' => 1]); + // 按收支方向(pm)聚合,不再枚举 type 白名单:新增积分类型(如下单赠送 order_give_integral、 + // 退款回收 order_gain_refund 等)无需同步维护即可正确计入累计 + $user['sum_integral'] = intval($userBill->getIntegralSumByPm($user['uid'], 1)); + $user['deduction_integral'] = intval($userBill->getIntegralSumByPm($user['uid'], 0)); + $user['today_integral'] = intval($userBill->getIntegralSumByPm($user['uid'], 1, 'today')); + // 冻结积分:仅统计积分流水中处于冻结期内的收入项 + $user['frozen_integral'] = $userBill->getIntegralSumByPm($user['uid'], 1, '', true); } unset($user['pwd']); if (!$user['is_promoter']) { diff --git a/frontend/uni-app/src/pages/users/user_integral/index.vue b/frontend/uni-app/src/pages/users/user_integral/index.vue index c09a38421..d7f84adac 100644 --- a/frontend/uni-app/src/pages/users/user_integral/index.vue +++ b/frontend/uni-app/src/pages/users/user_integral/index.vue @@ -34,11 +34,8 @@ :class="item.icon">{{item.name}} - {{$t(`提示:积分数值的高低会直接影响您的会员等级`)}} - {{$t(`提示:你有`)}}{{userInfo.clear_integral}}{{$t(`积分在`)}}{{ dateFormat(userInfo.clear_time) }}{{$t(`过期,请尽快使用`)}} - {{$t(item.title)}} @@ -88,7 +85,6 @@ import { postSignUser, getIntegralList as getIntegralListApi } from '@/api/user.js'; -import dayjs from '@/plugin/dayjs/dayjs.min.js'; import { toLogin } from '@/libs/login.js'; @@ -125,7 +121,6 @@ const loading = ref(false); const loadTitle = ref(i18n.t(`加载更多`)); const isAuto = ref(false); //没有授权的不会自动授权 const isShowAuth = ref(false); //是否隐藏授权 -const isTime = ref(0); // ---------- watch ---------- watch(isLogin, (newV, oldV) => { @@ -152,9 +147,6 @@ onReachBottom(() => { }); // ---------- methods ---------- -function dateFormat(value) { - return dayjs(value * 1000).format('YYYY-MM-DD'); -} /** * 授权回调 */ @@ -173,14 +165,6 @@ function getUserInfo() { all: 1 }).then(function(res) { userInfo.value = res.data; - let clearTime = res.data.clear_time; - let showTime = clearTime - (86400 * 14); - let timestamp = Date.parse(new Date()) / 1000; - if (showTime < timestamp) { - isTime.value = 1 - } else { - isTime.value = 0 - } }); }