redis->hgetall($key); } /** * 添加购物车 * @param $params */ public static function addCart($params) { // 添加购物车添加时间 list($msec, $sec) = explode(' ', microtime()); $microtime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000); $params['microtime'] = $microtime; $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']; $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']); // 如果需要增加数量变成最新的 // $data['microtime'] = $microtime; \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->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 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']; //传入的插件名和识别value if (!empty($params['key']) && !empty($params['value'])) { $key .= '_'.$params['key']; $key .= '_'. $params['value']; } 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']); } /** * @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']; //传入的插件名和识别value if (!empty($params['key']) && !empty($params['value'])) { $key .= '_'.$params['key']; $key .= '_'. $params['value']; } $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(); } }