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 - } }); }