| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?php
- namespace addons\Store\common\models;
- use yii\redis\Connection;
- class StoreCart extends \common\models\base\BaseActiveRecord
- {
- public static $expire_time = 7 * 24 * 3600;//购物车内商品的有效期
- public static $key = 'store_cart:';//购物车hash key
- public static $mall_key = 'mall_cart_set:';//商城购车user_id计数键值
- public static $pre = 'user_id_';
- // public static $field = 'attr_id_';//字段
- public static $field = '';//字段
- public static $redis_index = 4;
- /**
- * 获取购物车列表数据
- * @param $user_id
- * @return mixed
- */
- public static function getCartList($user_id)
- {
- $key = self::$key . $user_id;
- return \Yii::$app->redis->hgetall($key);
- }
- public static function getCartGoodsNums($user_id,$attr_id){
- $key = self::$key .$user_id;
- $field = self::$field . $attr_id;
- $res = \Yii::$app->redis->hget($key,$field);
- if(empty($res)) return 0;
- $res = json_decode($res,true);
- if(empty($res['num']))return 0;
- return $res['num'];
- }
- /**
- * 添加购物车
- * @param $params
- */
- public static function addCart($params)
- {
- $key = self::$key . $params['user_id'];
- $field = self::$field . $params['attr_id'];
- $data = \Yii::$app->redis->hget($key,$field);
- if(!empty($data)){
- $data = json_decode($data,true);
- $data['num'] += $params['num'];
- if(!empty($params['buy_limit_nums'])&&$data['num']<$params['buy_limit_nums']) throw new \Exception('最低起购数量是'.$params['buy_limit_nums']);
- if(!empty($params['buy_limit_total_num'])&&$data['num']>$params['buy_limit_total_num']) throw new \Exception('商品限购总数'.$params['buy_limit_total_num']);
- \Yii::$app->redis->hset($key, $field, json_encode($data));
- }else{
- if(!empty($params['buy_limit_total_num'])&&$params['num']>$params['buy_limit_total_num']) throw new \Exception('商品限购总数'.$params['buy_limit_total_num']);
- \Yii::$app->redis->hset($key, $field, json_encode($params));
- }
- \Yii::$app->redis->expire($key, self::$expire_time);
- }
- /**
- * 更新购物车
- * @param $params
- * @return void
- * @throws \Exception
- */
- public static function updateCart($params)
- {
- $key = self::$key . $params['user_id'];
- //传入的插件名和识别value
- if (!empty($params['key']) && !empty($params['value'])) {
- $key .= '_'.$params['key'];
- $key .= '_'. $params['value'];
- }
- $field = self::$field . $params['attr_id'];
- if(!empty($params['buy_limit_total_num'])&&$params['num']>$params['buy_limit_total_num']) throw new \Exception('商品限购总数'.$params['buy_limit_total_num']);
- \Yii::$app->redis->hset($key, $field, json_encode($params));
- \Yii::$app->redis->sadd(self::$mall_key . $params['mall_id'],self::$pre . $params['user_id']);
- \Yii::$app->redis->expire($key, self::$expire_time);
- }
- /**
- * 删除购物车
- * @param $params
- */
- public static function delCart($params)
- {
- $key = self::$key . $params['user_id'];
- foreach ($params['list'] as $v) {
- $field = self::$field . $v['attr_id'];
- \Yii::$app->redis->hdel($key, $field);
- }
- $cart_list = self::getCartList($params['user_id']);
- if(empty($cart_list)) self::delMallCart($params['mall_id'],$params['user_id']);
- }
- //清除购物车
- public static function clearCart($params)
- {
- $key = self::$key . $params['user_id'];
- \Yii::$app->redis->del($key);
- $cart_list = self::getCartList($params['user_id']);
- if(empty($cart_list)) self::delMallCart($params['mall_id'],$params['user_id']);
- }
- /**
- * @desc:用户购物车为空,把商城购车计数清除
- * @Author: hua
- * @Date: 2021/11/16
- * @Time: 12:02
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $mall_id
- * @param $user_id
- */
- public static function delMallCart($mall_id,$user_id){
- \Yii::$app->redis->srem(self::$mall_key.$mall_id, self::$pre.$user_id);
- }
- /**
- * @desc:遍历商城购车计数集合数
- * @Author: hua
- * @Date: 2021/11/16
- * @Time: 14:33
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $mall_id
- * @param $offset
- * @param $pattern
- * @param int $limit
- * @return mixed
- */
- public static function getMallCartList($mall_id,$offset,$pattern,$limit=10){
- $key = self::$mall_key . $mall_id;
- return \Yii::$app->redis->sscan($key,$offset,'MATCH',$pattern,'COUNT',$limit);
- }
- /**
- * 减少购物车商品数量
- *
- * @param array $params[user_id=>user_id,list=>[attr_id=>num]]
- *
- */
- public static function decreaseNumb($params) {
- $key = self::$key . $params['user_id'];
- $config = \Yii::$app->getComponents()['redis'];
- unset($config['class']);
- $redis = new Connection($config);
- foreach ($params['list'] as $attr_id => $num) {
- $cart_info = $redis->hget($key, self::$field . $attr_id);
- if ($cart_info) {
- $cart_info = json_decode($cart_info, true);
- $cart_num = $cart_info['num'] - $num;
- if ($cart_num <= 0) {
- $redis->hdel($key, $attr_id);
- } else {
- $cart_info['num'] = $cart_num;
- $redis->hset($key, $attr_id, json_encode($cart_info));
- }
- }
- }
- $redis->close();
- }
- }
|