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.

170 lines
7.2 KiB

  1. <?php
  2. namespace App\Service\v3\Implementations;
  3. use App\Constants\v3\OrderState;
  4. use App\Service\v3\Interfaces\BadgeServiceInterface;
  5. use Hyperf\Redis\Redis;
  6. use Hyperf\Utils\ApplicationContext;
  7. class BadgeService implements BadgeServiceInterface
  8. {
  9. /**
  10. * @inheritDoc
  11. */
  12. public function doByOrder($userId, $storeIds, $globalOrderId, $orderState)
  13. {
  14. switch ($orderState) {
  15. case OrderState::UNPAID: # 待付款(用户)
  16. $this->sAddUserOrder('unpaid', $userId, $globalOrderId);
  17. break;
  18. case OrderState::CANCELED: # 订单取消(用户)
  19. $this->sAddUserOrder('canceled', $userId, $globalOrderId);
  20. foreach ($storeIds as $key => &$storeId) {
  21. $this->sAddStoreOrder('canceled', $storeId, $globalOrderId);
  22. }
  23. break;
  24. case OrderState::PAID: # 已付款(用户)
  25. $this->sAddUserOrder('receiving', $userId, $globalOrderId);
  26. foreach ($storeIds as $key => &$storeId) {
  27. $this->sAddStoreOrder('paid', $storeId, $globalOrderId);
  28. }
  29. break;
  30. case OrderState::REFUNDING: # 用户申请退款
  31. case OrderState::REFUNDED: # 后台同意退款
  32. case OrderState::REFUND_REFUSE: # 后台拒绝退款
  33. $this->sAddUserOrder('refund', $userId, $globalOrderId);
  34. foreach ($storeIds as $key => &$storeId) {
  35. $this->sAddStoreOrder('refund', $storeId, $globalOrderId);
  36. }
  37. break;
  38. case OrderState::REJECTION: # 后台拒单(后台)
  39. $this->sAddUserOrder('rejection', $userId, $globalOrderId);
  40. foreach ($storeIds as $key => &$storeId) {
  41. $this->sAddStoreOrder('rejection', $storeId, $globalOrderId);
  42. }
  43. break;
  44. case OrderState::DELIVERY: # 后台接单(后台)
  45. $this->sAddUserOrder('receiving', $userId, $globalOrderId);
  46. foreach ($storeIds as $key => &$storeId) {
  47. $this->sAddStoreOrder('delivery', $storeId, $globalOrderId);
  48. }
  49. break;
  50. case OrderState::COMPLETED: # 订单完成(用户或后台操作)
  51. case OrderState::EVALUATED: # 订单评价(用户)
  52. $this->sAddUserOrder('finish', $userId, $globalOrderId);
  53. foreach ($storeIds as $key => &$storeId) {
  54. $this->sAddStoreOrder('finish', $storeId, $globalOrderId);
  55. }
  56. break;
  57. }
  58. }
  59. public function allByUserOrder($userId)
  60. {
  61. $redis = ApplicationContext::getContainer()->get(Redis::class);
  62. return [
  63. 'unpaid' => count($redis->sMembers('badge_unpaid_user_'.$userId)),
  64. 'receiving' => count($redis->sMembers('badge_receiving_user_'.$userId)),
  65. 'finish' => count($redis->sMembers('badge_finish_user_'.$userId)),
  66. 'refund' => count($redis->sMembers('badge_refund_user_'.$userId)),
  67. 'canceled' => count($redis->sMembers('badge_canceled_user_'.$userId)),
  68. 'rejection' => count($redis->sMembers('badge_rejection_store_'.$userId)),
  69. ];
  70. }
  71. /**
  72. * @inheritDoc
  73. */
  74. public function allByStoreOrder($storeId)
  75. {
  76. $redis = ApplicationContext::getContainer()->get(Redis::class);
  77. return [
  78. 'paid' => count($redis->sMembers('badge_paid_store_'.$storeId)),
  79. 'delivery' => count($redis->sMembers('badge_delivery_store_'.$storeId)),
  80. 'finish' => count($redis->sMembers('badge_canceled_store_'.$storeId)),
  81. 'refund' => count($redis->sMembers('badge_refund_store_'.$storeId)),
  82. 'canceled' => count($redis->sMembers('badge_canceled_store_'.$storeId)),
  83. 'rejection' => count($redis->sMembers('badge_rejection_store_'.$storeId)),
  84. ];
  85. }
  86. /**
  87. * @inheritDoc
  88. */
  89. public function sAddUserOrder($badge, $userId, $globalOrderId)
  90. {
  91. $redis = ApplicationContext::getContainer()->get(Redis::class);
  92. $redis->sRem('badge_unpaid_user_'.$userId, $globalOrderId); # 移除用户待付款
  93. $redis->sRem('badge_receiving_user_'.$userId, $globalOrderId); # 移除用户待收货
  94. $redis->sRem('badge_finish_user_'.$userId, $globalOrderId); # 移除用户已完成
  95. $redis->sRem('badge_canceled_user_'.$userId, $globalOrderId); # 移除用户已取消
  96. $redis->sRem('badge_refund_user_'.$userId, $globalOrderId); # 移除用户退款售后
  97. $redis->sRem('badge_rejection_store_', $userId, $globalOrderId); # 移除用户拒单
  98. $redis->sAdd('badge_'.$badge.'_user_'.$userId, $globalOrderId); # 新增用户当前状态的值
  99. }
  100. /**
  101. * @inheritDoc
  102. */
  103. public function sAddStoreOrder($badge, $storeId, $globalOrderId)
  104. {
  105. $redis = ApplicationContext::getContainer()->get(Redis::class);
  106. $redis->sRem('badge_paid_store_'.$storeId, $globalOrderId); # 移除商户待接单
  107. $redis->sRem('badge_delivery_store_'.$storeId, $globalOrderId); # 移除商户待送达
  108. $redis->sRem('badge_finish_store_'.$storeId, $globalOrderId); # 移除商户已完成
  109. $redis->sRem('badge_canceled_store_'.$storeId, $globalOrderId); # 移除商户已取消
  110. $redis->sRem('badge_refund_store_'.$storeId, $globalOrderId); # 移除商户退款售后
  111. $redis->sRem('badge_rejection_store_', $storeId, $globalOrderId); # 移除商户拒单
  112. $redis->sAdd('badge_'.$badge.'_store_'.$storeId, $globalOrderId); # 新增用户当前状态的值
  113. }
  114. /**
  115. * @inheritDoc
  116. */
  117. public function clearUserOrder($userId, $badge = 'all')
  118. {
  119. $redis = ApplicationContext::getContainer()->get(Redis::class);
  120. if ($badge == 'all') {
  121. $redis->del('badge_unpaid_user_'.$userId); # 移除用户待付款
  122. $redis->del('badge_receiving_user_'.$userId); # 移除用户待收货
  123. $redis->del('badge_finish_user_'.$userId); # 移除用户已完成
  124. $redis->del('badge_canceled_user_'.$userId); # 移除用户已取消
  125. $redis->del('badge_refund_user_'.$userId); # 移除用户退款售后
  126. $redis->del('badge_rejection_store_', $userId); # 移除用户拒单
  127. } else {
  128. $redis->del('badge_'.$badge.'_user_'.$userId);
  129. }
  130. }
  131. /**
  132. * @inheritDoc
  133. */
  134. public function clearStoreOrder($storeId, $badge = 'all')
  135. {
  136. $redis = ApplicationContext::getContainer()->get(Redis::class);
  137. if ($badge == 'all') {
  138. $redis->del('badge_paid_store_'.$storeId); # 移除商户待付款
  139. $redis->del('badge_delivery_store_'.$storeId); # 移除商户待收货
  140. $redis->del('badge_finish_store_'.$storeId); # 移除商户已完成
  141. $redis->del('badge_canceled_store_'.$storeId); # 移除商户已取消
  142. $redis->del('badge_refund_store_'.$storeId); # 移除商户退款售后
  143. $redis->del('badge_rejection_store_', $storeId); # 移除商户拒单
  144. } else {
  145. $redis->del('badge_'.$badge.'_store_'.$storeId);
  146. }
  147. }
  148. }