diff --git a/app/Service/v3/Implementations/BadgeService.php b/app/Service/v3/Implementations/BadgeService.php index e8d013d..61ae05e 100644 --- a/app/Service/v3/Implementations/BadgeService.php +++ b/app/Service/v3/Implementations/BadgeService.php @@ -77,14 +77,36 @@ class BadgeService implements BadgeServiceInterface public function allByUserOrder($userId) { $redis = ApplicationContext::getContainer()->get(Redis::class); + $redisHName = 'badge_user'; + $redisHKey = 'user_id_'.$userId; + + // 取出当前用户的key的badge(key=>value json串) + $userBadges = $redis->hGet($redisHName, $redisHKey); + $userBadges = json_decode($userBadges, true); + return [ - 'unpaid' => count($redis->sMembers('badge_unpaid_user_'.$userId)), - 'receiving' => count($redis->sMembers('badge_receiving_user_'.$userId)), - 'finish' => count($redis->sMembers('badge_finish_user_'.$userId)), - 'refund' => count($redis->sMembers('badge_refund_user_'.$userId)), - 'canceled' => count($redis->sMembers('badge_canceled_user_'.$userId)), - 'rejection' => count($redis->sMembers('badge_rejection_store_'.$userId)), + 'unpaid' => isset($userBadges['unpaid']) ? count($userBadges['unpaid']) : 0, + 'receiving' => isset($userBadges['receiving']) ? count($userBadges['receiving']) : 0, + 'finish' => isset($userBadges['finish']) ? count($userBadges['finish']) : 0, + 'refund' => isset($userBadges['refund']) ? count($userBadges['refund']) : 0, + 'canceled' => isset($userBadges['canceled']) ? count($userBadges['canceled']) : 0, + 'rejection' => isset($userBadges['rejection']) ? count($userBadges['rejection']) : 0, + 'unpaid_arr' => $userBadges['unpaid'] ?? [], + 'receiving_arr' => $userBadges['receiving'] ?? [], + 'finish_arr' => $userBadges['finish'] ?? [], + 'refund_arr' => $userBadges['refund'] ?? [], + 'canceled_arr' => $userBadges['canceled'] ?? [], + 'rejection_arr' => $userBadges['rejection'] ?? [], ]; + + // return [ + // 'unpaid' => count($redis->sMembers('badge_unpaid_user_'.$userId)), + // 'receiving' => count($redis->sMembers('badge_receiving_user_'.$userId)), + // 'finish' => count($redis->sMembers('badge_finish_user_'.$userId)), + // 'refund' => count($redis->sMembers('badge_refund_user_'.$userId)), + // 'canceled' => count($redis->sMembers('badge_canceled_user_'.$userId)), + // 'rejection' => count($redis->sMembers('badge_rejection_store_'.$userId)), + // ]; } /** @@ -93,14 +115,36 @@ class BadgeService implements BadgeServiceInterface public function allByStoreOrder($storeId) { $redis = ApplicationContext::getContainer()->get(Redis::class); + $redisHName = 'badge_store'; + $redisHKey = 'store_id_'.$storeId; + + // 取出当前用户的key的badge(key=>value json串) + $storeBadges = $redis->hGet($redisHName, $redisHKey); + $storeBadges = json_decode($storeBadges, true); + return [ - 'paid' => count($redis->sMembers('badge_paid_store_'.$storeId)), - 'delivery' => count($redis->sMembers('badge_delivery_store_'.$storeId)), - 'finish' => count($redis->sMembers('badge_finish_store_'.$storeId)), - 'refund' => count($redis->sMembers('badge_refund_store_'.$storeId)), - 'canceled' => count($redis->sMembers('badge_canceled_store_'.$storeId)), - 'rejection' => count($redis->sMembers('badge_rejection_store_'.$storeId)), + 'paid' => isset($storeBadges['paid']) ? count($storeBadges['paid']) : 0, + 'delivery' => isset($storeBadges['delivery']) ? count($storeBadges['delivery']) : 0, + 'finish' => isset($storeBadges['finish']) ? count($storeBadges['finish']) : 0, + 'refund' => isset($storeBadges['refund']) ? count($storeBadges['refund']) : 0, + 'canceled' => isset($storeBadges['canceled']) ? count($storeBadges['canceled']) : 0, + 'rejection' => isset($storeBadges['rejection']) ? count($storeBadges['rejection']) : 0, + 'paid_arr' => $storeBadges['paid'] ?? [], + 'delivery_arr' => $storeBadges['delivery'] ?? [], + 'finish_arr' => $storeBadges['finish'] ?? [], + 'refund_arr' => $storeBadges['refund'] ?? [], + 'canceled_arr' => $storeBadges['canceled'] ?? [], + 'rejection_arr' => $storeBadges['rejection'] ?? [], ]; + + // return [ + // 'paid' => count($redis->sMembers('badge_paid_store_'.$storeId)), + // 'delivery' => count($redis->sMembers('badge_delivery_store_'.$storeId)), + // 'finish' => count($redis->sMembers('badge_finish_store_'.$storeId)), + // 'refund' => count($redis->sMembers('badge_refund_store_'.$storeId)), + // 'canceled' => count($redis->sMembers('badge_canceled_store_'.$storeId)), + // 'rejection' => count($redis->sMembers('badge_rejection_store_'.$storeId)), + // ]; } /** @@ -109,13 +153,30 @@ class BadgeService implements BadgeServiceInterface public function sAddUserOrder($badge, $userId, $globalOrderId) { $redis = ApplicationContext::getContainer()->get(Redis::class); - $redis->sRem('badge_unpaid_user_'.$userId, $globalOrderId); # 移除用户待付款 - $redis->sRem('badge_receiving_user_'.$userId, $globalOrderId); # 移除用户待收货 - $redis->sRem('badge_finish_user_'.$userId, $globalOrderId); # 移除用户已完成 - $redis->sRem('badge_canceled_user_'.$userId, $globalOrderId); # 移除用户已取消 - $redis->sRem('badge_refund_user_'.$userId, $globalOrderId); # 移除用户退款售后 - $redis->sRem('badge_rejection_store_', $userId, $globalOrderId); # 移除用户拒单 - $redis->sAdd('badge_'.$badge.'_user_'.$userId, $globalOrderId); # 新增用户当前状态的值 + $redisHName = 'badge_user'; + $redisHKey = 'user_id_'.$userId; + + // 取出当前用户的key的badge(key=>value json串) + $userBadges = $redis->hGet($redisHName, $redisHKey); + $userBadges = json_decode($userBadges, true); + + $userBadges['unpaid'] = isset($userBadges['unpaid']) ? array_diff($userBadges['unpaid'], [$globalOrderId]) : []; # 移除用户待付款 + $userBadges['receiving'] = isset($userBadges['receiving']) ? array_diff($userBadges['receiving'], [$globalOrderId]) : []; # 移除用户待收货 + $userBadges['finish'] = isset($userBadges['finish']) ? array_diff($userBadges['finish'], [$globalOrderId]) : []; # 移除用户已完成 + $userBadges['canceled'] = isset($userBadges['canceled']) ? array_diff($userBadges['canceled'], [$globalOrderId]) : []; # 移除用户已取消 + $userBadges['refund'] = isset($userBadges['refund']) ? array_diff($userBadges['refund'], [$globalOrderId]) : []; # 移除用户退款售后 + $userBadges['rejection'] = isset($userBadges['rejection']) ? array_diff($userBadges['rejection'], [$globalOrderId]) : []; # 移除用户拒单 + $userBadges[$badge] = array_merge($userBadges[$badge], [$globalOrderId]); # 新增用户当前状态的值 + + $redis->hSet($redisHName,$redisHKey,json_encode($userBadges)); + + // $redis->sRem('badge_unpaid_user_'.$userId, $globalOrderId); # 移除用户待付款 + // $redis->sRem('badge_receiving_user_'.$userId, $globalOrderId); # 移除用户待收货 + // $redis->sRem('badge_finish_user_'.$userId, $globalOrderId); # 移除用户已完成 + // $redis->sRem('badge_canceled_user_'.$userId, $globalOrderId); # 移除用户已取消 + // $redis->sRem('badge_refund_user_'.$userId, $globalOrderId); # 移除用户退款售后 + // $redis->sRem('badge_rejection_store_', $userId, $globalOrderId); # 移除用户拒单 + // $redis->sAdd('badge_'.$badge.'_user_'.$userId, $globalOrderId); # 新增用户当前状态的值 } /** @@ -124,48 +185,101 @@ class BadgeService implements BadgeServiceInterface public function sAddStoreOrder($badge, $storeId, $globalOrderId) { $redis = ApplicationContext::getContainer()->get(Redis::class); - $redis->sRem('badge_paid_store_'.$storeId, $globalOrderId); # 移除商户待接单 - $redis->sRem('badge_delivery_store_'.$storeId, $globalOrderId); # 移除商户待送达 - $redis->sRem('badge_finish_store_'.$storeId, $globalOrderId); # 移除商户已完成 - $redis->sRem('badge_canceled_store_'.$storeId, $globalOrderId); # 移除商户已取消 - $redis->sRem('badge_refund_store_'.$storeId, $globalOrderId); # 移除商户退款售后 - $redis->sRem('badge_rejection_store_', $storeId, $globalOrderId); # 移除商户拒单 - $redis->sAdd('badge_'.$badge.'_store_'.$storeId, $globalOrderId); # 新增用户当前状态的值 + $redisHName = 'badge_store'; + $redisHKey = 'store_id_'.$storeId; + + // 取出当前用户的key的badge(key=>value json串) + $storeBadges = $redis->hGet($redisHName, $redisHKey); + $storeBadges = json_decode($storeBadges, true); + + $storeBadges['paid'] = isset($storeBadges['paid']) ? array_diff($storeBadges['paid'], [$globalOrderId]) : []; # 移除商户待接单 + $storeBadges['delivery'] = isset($storeBadges['delivery']) ? array_diff($storeBadges['delivery'], [$globalOrderId]) : []; # 移除商户待送达 + $storeBadges['finish'] = isset($storeBadges['finish']) ? array_diff($storeBadges['finish'], [$globalOrderId]) : []; # 移除商户已完成 + $storeBadges['canceled'] = isset($storeBadges['canceled']) ? array_diff($storeBadges['canceled'], [$globalOrderId]) : []; # 移除商户已取消 + $storeBadges['refund'] = isset($storeBadges['refund']) ? array_diff($storeBadges['refund'], [$globalOrderId]) : []; # 移除商户退款售后 + $storeBadges['rejection'] = isset($storeBadges['rejection']) ? array_diff($storeBadges['rejection'], [$globalOrderId]) : []; # 移除商户拒单 + $storeBadges[$badge] = array_merge($storeBadges[$badge], [$globalOrderId]); # 新增商户当前状态的值 + + $redis->hSet($redisHName,$redisHKey,json_encode($storeBadges)); + + // $redis->sRem('badge_paid_store_'.$storeId, $globalOrderId); # 移除商户待接单 + // $redis->sRem('badge_delivery_store_'.$storeId, $globalOrderId); # 移除商户待送达 + // $redis->sRem('badge_finish_store_'.$storeId, $globalOrderId); # 移除商户已完成 + // $redis->sRem('badge_canceled_store_'.$storeId, $globalOrderId); # 移除商户已取消 + // $redis->sRem('badge_refund_store_'.$storeId, $globalOrderId); # 移除商户退款售后 + // $redis->sRem('badge_rejection_store_', $storeId, $globalOrderId); # 移除商户拒单 + // $redis->sAdd('badge_'.$badge.'_store_'.$storeId, $globalOrderId); # 新增用户当前状态的值 } /** * @inheritDoc */ - public function clearUserOrder($userId, $badge = 'all') + public function clearUserOrder($userId, $badge = 'all', $globalOrderId = '') { $redis = ApplicationContext::getContainer()->get(Redis::class); + $redisHName = 'badge_user'; + $redisHKey = 'user_id_'.$userId; + + // 取出当前用户的key的badge(key=>value json串) + $userBadges = $redis->hGet($redisHName, $redisHKey); + $userBadges = json_decode($userBadges, true); + if ($badge == 'all') { - $redis->del('badge_unpaid_user_'.$userId); # 移除用户待付款 - $redis->del('badge_receiving_user_'.$userId); # 移除用户待收货 - $redis->del('badge_finish_user_'.$userId); # 移除用户已完成 - $redis->del('badge_canceled_user_'.$userId); # 移除用户已取消 - $redis->del('badge_refund_user_'.$userId); # 移除用户退款售后 - $redis->del('badge_rejection_store_', $userId); # 移除用户拒单 + + $redis->hDel($redisHName, $redisHKey); + + // $redis->del('badge_unpaid_user_'.$userId); # 移除用户待付款 + // $redis->del('badge_receiving_user_'.$userId); # 移除用户待收货 + // $redis->del('badge_finish_user_'.$userId); # 移除用户已完成 + // $redis->del('badge_canceled_user_'.$userId); # 移除用户已取消 + // $redis->del('badge_refund_user_'.$userId); # 移除用户退款售后 + // $redis->del('badge_rejection_store_', $userId); # 移除用户拒单 } else { - $redis->del('badge_'.$badge.'_user_'.$userId); + + if ($globalOrderId) { + $userBadges[$badge] = isset($userBadges[$badge]) ? array_diff($userBadges[$badge], [$globalOrderId]) : []; # 移除当前状态里的某个值 + } else { + unset($userBadges[$badge]); + } + $redis->hSet($redisHName,$redisHKey,json_encode($userBadges)); + + // $redis->del('badge_'.$badge.'_user_'.$userId); } } /** * @inheritDoc */ - public function clearStoreOrder($storeId, $badge = 'all') + public function clearStoreOrder($storeId, $badge = 'all', $globalOrderId = '') { $redis = ApplicationContext::getContainer()->get(Redis::class); + $redisHName = 'badge_store'; + $redisHKey = 'store_id_'.$storeId; + + // 取出当前用户的key的badge(key=>value json串) + $storeBadges = $redis->hGet($redisHName, $redisHKey); + $storeBadges = json_decode($storeBadges, true); + if ($badge == 'all') { - $redis->del('badge_paid_store_'.$storeId); # 移除商户待付款 - $redis->del('badge_delivery_store_'.$storeId); # 移除商户待收货 - $redis->del('badge_finish_store_'.$storeId); # 移除商户已完成 - $redis->del('badge_canceled_store_'.$storeId); # 移除商户已取消 - $redis->del('badge_refund_store_'.$storeId); # 移除商户退款售后 - $redis->del('badge_rejection_store_', $storeId); # 移除商户拒单 + + $redis->hDel($redisHName, $redisHKey); + + // $redis->del('badge_paid_store_'.$storeId); # 移除商户待付款 + // $redis->del('badge_delivery_store_'.$storeId); # 移除商户待收货 + // $redis->del('badge_finish_store_'.$storeId); # 移除商户已完成 + // $redis->del('badge_canceled_store_'.$storeId); # 移除商户已取消 + // $redis->del('badge_refund_store_'.$storeId); # 移除商户退款售后 + // $redis->del('badge_rejection_store_', $storeId); # 移除商户拒单 } else { - $redis->del('badge_'.$badge.'_store_'.$storeId); + + if ($globalOrderId) { + $storeBadges[$badge] = isset($storeBadges[$badge]) ? array_diff($storeBadges[$badge], [$globalOrderId]) : []; # 移除当前状态里的某个值 + } else { + unset($storeBadges[$badge]); + } + $redis->hSet($redisHName,$redisHKey,json_encode($storeBadges)); + + // $redis->del('badge_'.$badge.'_store_'.$storeId); } } } \ No newline at end of file diff --git a/app/Service/v3/Interfaces/BadgeServiceInterface.php b/app/Service/v3/Interfaces/BadgeServiceInterface.php index 4ada4e6..d41a672 100644 --- a/app/Service/v3/Interfaces/BadgeServiceInterface.php +++ b/app/Service/v3/Interfaces/BadgeServiceInterface.php @@ -50,15 +50,17 @@ interface BadgeServiceInterface * 清除用户角标 * @param $userId * @param string $badge + * @param string $globalOrderId * @return mixed */ - public function clearUserOrder($userId, $badge = 'all'); + public function clearUserOrder($userId, $badge = 'all', $globalOrderId = ''); /** * 清除商户角标 * @param $storeId * @param string $badge + * @param string $globalOrderId * @return mixed */ - public function clearStoreOrder($storeId, $badge = 'all'); + public function clearStoreOrder($storeId, $badge = 'all', $globalOrderId = ''); } \ No newline at end of file