You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
285 lines
14 KiB
285 lines
14 KiB
<?php
|
|
|
|
namespace App\Service\v3\Implementations;
|
|
|
|
use App\Constants\v3\OrderState;
|
|
use App\Service\v3\Interfaces\BadgeServiceInterface;
|
|
use Hyperf\Redis\Redis;
|
|
use Hyperf\Utils\ApplicationContext;
|
|
|
|
class BadgeService implements BadgeServiceInterface
|
|
{
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function doByOrder($userId, $storeIds, $globalOrderId, $orderState)
|
|
{
|
|
|
|
switch ($orderState) {
|
|
case OrderState::UNPAID: # 待付款(用户)
|
|
$this->sAddUserOrder('unpaid', $userId, $globalOrderId);
|
|
break;
|
|
|
|
case OrderState::CANCELED: # 订单取消(用户)
|
|
$this->sAddUserOrder('canceled', $userId, $globalOrderId);
|
|
|
|
foreach ($storeIds as $key => &$storeId) {
|
|
$this->sAddStoreOrder('canceled', $storeId, $globalOrderId);
|
|
}
|
|
break;
|
|
|
|
case OrderState::PAID: # 已付款(用户)
|
|
$this->sAddUserOrder('receiving', $userId, $globalOrderId);
|
|
|
|
foreach ($storeIds as $key => &$storeId) {
|
|
$this->sAddStoreOrder('paid', $storeId, $globalOrderId);
|
|
}
|
|
break;
|
|
|
|
case OrderState::REFUNDING: # 用户申请退款
|
|
case OrderState::REFUNDED: # 后台同意退款
|
|
case OrderState::REFUND_REFUSE: # 后台拒绝退款
|
|
$this->sAddUserOrder('refund', $userId, $globalOrderId);
|
|
|
|
foreach ($storeIds as $key => &$storeId) {
|
|
$this->sAddStoreOrder('refund', $storeId, $globalOrderId);
|
|
}
|
|
break;
|
|
|
|
case OrderState::REJECTION: # 后台拒单(后台)
|
|
$this->sAddUserOrder('rejection', $userId, $globalOrderId);
|
|
|
|
foreach ($storeIds as $key => &$storeId) {
|
|
$this->sAddStoreOrder('rejection', $storeId, $globalOrderId);
|
|
}
|
|
break;
|
|
|
|
case OrderState::DELIVERY: # 后台接单(后台)
|
|
$this->sAddUserOrder('receiving', $userId, $globalOrderId);
|
|
|
|
foreach ($storeIds as $key => &$storeId) {
|
|
$this->sAddStoreOrder('delivery', $storeId, $globalOrderId);
|
|
}
|
|
break;
|
|
|
|
case OrderState::COMPLETED: # 订单完成(用户或后台操作)
|
|
case OrderState::EVALUATED: # 订单评价(用户)
|
|
$this->sAddUserOrder('finish', $userId, $globalOrderId);
|
|
|
|
foreach ($storeIds as $key => &$storeId) {
|
|
$this->sAddStoreOrder('finish', $storeId, $globalOrderId);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
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' => 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)),
|
|
// ];
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
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' => 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)),
|
|
// ];
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function sAddUserOrder($badge, $userId, $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);
|
|
|
|
$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); # 新增用户当前状态的值
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function sAddStoreOrder($badge, $storeId, $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);
|
|
|
|
$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', $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->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 {
|
|
|
|
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', $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->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 {
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|