TaskCounterService.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace services\common;
  3. use addons\CloudStock\common\listeners\order\OrderComputeCommissionListener;
  4. use addons\CloudStockTwo\common\listeners\order\OrderComputeCommissionListener as CloudStockTwoOrderComputeCommissionListener;
  5. use common\components\Service;
  6. use common\enums\RabbitMqEnum;
  7. use common\enums\RedisKeyEnum;
  8. use common\models\mall\MallAddons;
  9. use common\enums\AddonsEnum;
  10. /**
  11. *
  12. * 计数器服务类
  13. * Class PayService
  14. * @package services\common
  15. */
  16. class TaskCounterService extends Service
  17. {
  18. public $counter_key = '';
  19. public $counter_result_key = '';
  20. public $redis = null;
  21. public function set($order_id)
  22. {
  23. $this->counter_key = RedisKeyEnum::suffix(RedisKeyEnum::COUNTER_KEY, $order_id, true);
  24. $this->counter_result_key = RedisKeyEnum::suffix(RedisKeyEnum::COUNTER_RESULT_KEY, $order_id, true);
  25. $this->redis = \Yii::$app->redis;
  26. return $this;
  27. }
  28. public function incr($number = 1)
  29. {
  30. $this->redis->incrby($this->counter_key, $number);
  31. }
  32. public function decr($number = 1)
  33. {
  34. return $this->redis->decrby($this->counter_key, $number);
  35. }
  36. public function getCounterResult()
  37. {
  38. return $this->redis->get($this->counter_result_key);
  39. }
  40. public function setCounterResult($data)
  41. {
  42. return $this->redis->set($this->counter_result_key, json_encode($data));
  43. }
  44. public function callBackOld($mall_id, $order_id,$commission_arr,$handle_class = null)
  45. {
  46. var_dump('callBack:order_id:'.$order_id.json_encode($commission_arr));
  47. if(!empty($commission_arr)){
  48. $result = $this->getCounterResult();
  49. var_dump('callBack:result.order_id:'.$order_id.json_encode($result));
  50. if ($result) {
  51. $result = json_decode($result, true);
  52. if(!empty($result['commission_arr'])){
  53. foreach ($result['commission_arr'] as $order_detail_id => &$commission) {
  54. $commission['commission'] += $commission_arr[$order_detail_id]['commission'];
  55. $commission['commission_type'] = $commission_arr[$order_detail_id]['commission_type'] ?? '';
  56. }
  57. $this->setCounterResult($result);
  58. }else{
  59. $this->setCounterResult(['order_id' => $order_id, 'commission_arr' => $commission_arr]);
  60. }
  61. var_dump('callBack:result1.order_id:'.$order_id.json_encode($result));
  62. } else {
  63. var_dump('callBack:result2.order_id:'.$order_id.json_encode($commission_arr));
  64. $this->setCounterResult(['order_id' => $order_id, 'commission_arr' => $commission_arr]);
  65. }
  66. }else{
  67. $result = $this->getCounterResult();
  68. var_dump('callBack:result111111.order_id:'.$order_id.json_encode($result));
  69. if(!$result){
  70. $this->setCounterResult(['order_id' => $order_id, 'commission_arr' => []]);
  71. }
  72. }
  73. $res = $this->decr();
  74. $res = $this->redis->get($this->counter_key);
  75. var_dump('res'.$res);
  76. if ($res == 0) {
  77. //todo 触发事件
  78. $result = $this->getCounterResult();
  79. if(!$handle_class) $handle_class = OrderComputeCommissionListener::class;
  80. $data = json_decode($result, true);
  81. var_dump('callBack:data:'.$order_id.json_encode($data));
  82. if(!empty($data)&&is_array($data)){
  83. \Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_ORDER, RabbitMqEnum::ORDER_QUEUE, $data, $handle_class, 'handleSync');
  84. // if(MallAddons::isInstall($mall_id,AddonsEnum::ADDONS_NAME_CLOUD_STOCK_TWO)){
  85. // $handle_class = CloudStockTwoOrderComputeCommissionListener::class;
  86. // \Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_ORDER, RabbitMqEnum::ORDER_QUEUE, $data, $handle_class, 'handleSync');
  87. // }
  88. }
  89. $this->redis->del($this->counter_key);
  90. $this->redis->del($this->counter_result_key);
  91. }
  92. }
  93. public function callBack($mall_id, $order_id,$commission_arr,$handle_class = null)
  94. {
  95. var_dump('callBack:order_id:'.$order_id.json_encode($commission_arr));
  96. if(!empty($commission_arr)){
  97. $result = $this->getCounterResult();
  98. var_dump('callBack:result.order_id:'.$order_id.json_encode($result));
  99. if ($result) {
  100. $result = json_decode($result, true);
  101. if(!empty($result['commission_arr'])){
  102. foreach ($result['commission_arr'] as $k=>&$val){
  103. if(isset($commission_arr[$k])){
  104. $val = array_merge($val,$commission_arr[$k]);
  105. }
  106. }
  107. $this->setCounterResult($result);
  108. }else{
  109. $this->setCounterResult(['order_id' => $order_id, 'commission_arr' => $commission_arr]);
  110. }
  111. var_dump('callBack:result1.order_id:'.$order_id.json_encode($result));
  112. } else {
  113. var_dump('callBack:result2.order_id:'.$order_id.json_encode($commission_arr));
  114. $this->setCounterResult(['order_id' => $order_id, 'commission_arr' => $commission_arr]);
  115. }
  116. }else{
  117. $result = $this->getCounterResult();
  118. var_dump('callBack:result111111.order_id:'.$order_id.json_encode($result));
  119. if(!$result){
  120. $this->setCounterResult(['order_id' => $order_id, 'commission_arr' => []]);
  121. }
  122. }
  123. $res = $this->decr();
  124. $res = $this->redis->get($this->counter_key);
  125. var_dump('res'.$res);
  126. if ($res == 0) {
  127. //todo 触发事件
  128. $result = $this->getCounterResult();
  129. if(!$handle_class) $handle_class = OrderComputeCommissionListener::class;
  130. $data = json_decode($result, true);
  131. var_dump('callBack:data:'.$order_id.json_encode($data));
  132. if(!empty($data)&&is_array($data)){
  133. \Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_ORDER, RabbitMqEnum::ORDER_QUEUE, $data, $handle_class, 'handleSync');
  134. // if(MallAddons::isInstall($mall_id,AddonsEnum::ADDONS_NAME_CLOUD_STOCK_TWO)){
  135. // $handle_class = CloudStockTwoOrderComputeCommissionListener::class;
  136. // \Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_ORDER, RabbitMqEnum::ORDER_QUEUE, $data, $handle_class, 'handleSync');
  137. // }
  138. }
  139. $this->redis->del($this->counter_key);
  140. $this->redis->del($this->counter_result_key);
  141. }
  142. }
  143. public function del()
  144. {
  145. $this->redis->del($this->counter_key);
  146. $this->redis->del($this->counter_result_key);
  147. }
  148. }