PurchaseCart.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace addons\Purchase\common\models;
  3. use yii\redis\Connection;
  4. class PurchaseCart extends \common\models\base\BaseActiveRecord
  5. {
  6. public static $expire_time = 7 * 24 * 3600;//购物车内商品的有效期
  7. public static $key = 'purchase_cart_';//购物车hash key
  8. public static $mall_key = 'purchase_cart_set_';//商城购车user_id计数键值
  9. public static $pre = 'user_id_';
  10. public static $field = '';//字段
  11. /**
  12. * 获取购物车列表数据
  13. * @param $user_id
  14. * @return mixed
  15. */
  16. public static function getCartList($user_id)
  17. {
  18. $key = self::$key . $user_id;
  19. return \Yii::$app->redis->hgetall($key);
  20. }
  21. /**
  22. * 添加购物车
  23. * @param $params
  24. */
  25. public static function addCart($params)
  26. {
  27. $key = self::$key . $params['user_id'];
  28. $field = self::$field . $params['attr_id'];
  29. $data = \Yii::$app->redis->hget($key,$field);
  30. if(!empty($data)){
  31. $data = json_decode($data,true);
  32. $data['num'] += $params['num'];
  33. \Yii::$app->redis->hset($key, $field, json_encode($data));
  34. }else{
  35. \Yii::$app->redis->hset($key, $field, json_encode($params));
  36. }
  37. \Yii::$app->redis->sadd(self::$mall_key.$params['mall_id'],self::$pre.$params['user_id']);
  38. \Yii::$app->redis->expire($key, self::$expire_time);
  39. }
  40. /**
  41. * 更新购物车
  42. * @param $params
  43. */
  44. public static function updateCart($params)
  45. {
  46. $key = self::$key . $params['user_id'];
  47. $field = self::$field . $params['attr_id'];
  48. \Yii::$app->redis->hset($key, $field, json_encode($params));
  49. \Yii::$app->redis->sadd(self::$mall_key.$params['mall_id'],self::$pre.$params['user_id']);
  50. \Yii::$app->redis->expire($key, self::$expire_time);
  51. }
  52. /**
  53. * 删除购物车
  54. * @param $params
  55. */
  56. public static function delCart($params)
  57. {
  58. $key = self::$key . $params['user_id'];
  59. foreach ($params['list'] as $v) {
  60. $field = self::$field . $v['attr_id'];
  61. \Yii::$app->redis->hdel($key, $field);
  62. }
  63. $cart_list = self::getCartList($params['user_id']);
  64. if(empty($cart_list)) self::delMallCart($params['mall_id'],$params['user_id']);
  65. }
  66. /**
  67. * @desc:用户购物车为空,把商城购车计数清除
  68. * @Author: hua
  69. * @Date: 2021/11/16
  70. * @Time: 12:02
  71. * @Copyright: copyright (c) 2021 广东七件事集团
  72. * @param $mall_id
  73. * @param $user_id
  74. */
  75. public static function delMallCart($mall_id,$user_id){
  76. \Yii::$app->redis->srem(self::$mall_key.$mall_id, self::$pre.$user_id);
  77. }
  78. /**
  79. * @desc:遍历商城购车计数集合数
  80. * @Author: hua
  81. * @Date: 2021/11/16
  82. * @Time: 14:33
  83. * @Copyright: copyright (c) 2021 广东七件事集团
  84. * @param $mall_id
  85. * @param $offset
  86. * @param $pattern
  87. * @param int $limit
  88. * @return mixed
  89. */
  90. public static function getMallCartList($mall_id,$offset,$pattern,$limit=10){
  91. $key = self::$mall_key . $mall_id;
  92. return \Yii::$app->redis->sscan($key,$offset,'MATCH',$pattern,'COUNT',$limit);
  93. }
  94. /**
  95. * 减少购物车商品数量
  96. *
  97. * @param array $params[user_id=>user_id,list=>[attr_id=>num]]
  98. *
  99. */
  100. public static function decreaseNumb($params) {
  101. $key = self::$key . $params['user_id'];
  102. $config = \Yii::$app->getComponents()['redis'];
  103. unset($config['class']);
  104. $redis = new Connection($config);
  105. foreach ($params['list'] ?? [] as $attr_id => $num) {
  106. $cart_info = $redis->hget($key, self::$field . $attr_id);
  107. if ($cart_info) {
  108. $cart_info = json_decode($cart_info, true);
  109. $cart_num = $cart_info['num'] - $num;
  110. if ($cart_num <= 0) {
  111. $redis->hdel($key, $attr_id);
  112. } else {
  113. $cart_info['num'] = $cart_num;
  114. $redis->hset($key, $attr_id, json_encode($cart_info));
  115. }
  116. }
  117. }
  118. $redis->close();
  119. }
  120. }