123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?php
- namespace addons\shopro\library\activity;
- use addons\shopro\facade\Redis;
- use app\admin\model\shopro\activity\Activity as ActivityModel;
- use addons\shopro\library\activity\traits\ActivityRedis as ActivityRedisTrait;
- class ActivityRedis
- {
- use ActivityRedisTrait;
- public function __construct() {
- }
-
- public function setActivity($activity)
- {
- $activity = ActivityModel::with('activity_sku_prices')->where('id', $activity['id'])->find();
-
- $keyActivity = $this->keyActivity($activity->id, $activity->type);
-
- if (Redis::EXISTS($keyActivity)) {
-
- $activityCache = $this->getActivityByKey($keyActivity);
- foreach ($activityCache as $field => $value) {
-
- if (strpos($field, $this->hashGoodsPrefix) !== false && strpos($field, '-sale') === false) {
-
- Redis::HDEL($keyActivity, $field);
- }
- }
- }
- Redis::HMSET(
- $keyActivity,
- [
- 'id' => $activity['id'],
- 'title' => $activity['title'],
- 'type' => $activity['type'],
- 'type_text' => $activity['type_text'],
- 'classify' => $activity['classify'],
- 'goods_ids' => $activity['goods_ids'],
- 'richtext_id' => $activity['richtext_id'],
- 'richtext_title' => $activity['richtext_title'],
- 'prehead_time' => strtotime($activity['prehead_time']),
- 'start_time' => strtotime($activity['start_time']),
- 'end_time' => strtotime($activity['end_time']),
- 'rules' => is_array($activity['rules']) ? json_encode($activity['rules']) : $activity['rules'],
- ]
- );
-
- foreach ($activity['activity_sku_prices'] as $goods) {
- unset($goods['sales']);
- $keyActivityGoods = $this->keyActivityGoods($goods['goods_id'], $goods['goods_sku_price_id']);
-
- $cacheSale = Redis::HGET($keyActivity, $keyActivityGoods . '-sale');
- $goods['stock'] = $goods['stock'] + $cacheSale;
- Redis::HSET($keyActivity, $keyActivityGoods, json_encode($goods));
- }
-
- Redis::ZADD($this->zsetKey, strtotime($activity['start_time']), $keyActivity);
- }
-
- public function delActivity($activity)
- {
-
- $keyActivity = $this->keyActivity($activity->id, $activity->type);
-
- Redis::DEL($keyActivity);
-
- Redis::ZREM($this->zsetKey, $keyActivity);
- }
-
- public function getActivityList($activityTypes = [], $status = 'all', $format_type = 'normal')
- {
-
- $keysActivity = $this->getKeysActivityByTypes($activityTypes, $status);
- $activityList = [];
- foreach ($keysActivity as $keyActivity) {
-
- $activity = $this->formatActivityByKey($keyActivity, $format_type);
- if ($activity) {
- $activityList[] = $activity;
- }
- }
- return $activityList;
- }
-
- public function getGoodsActivitys($goods_id, $activityTypes = [], $status = 'all', $format_type = 'goods')
- {
-
- $keysActivity = $this->getkeysActivityByGoods($goods_id, $activityTypes, $status);
-
- foreach ($keysActivity as $keyActivity) {
-
- $activity = $this->formatActivityByKey($keyActivity, $format_type, ['goods_id' => $goods_id]);
- if ($activity) {
- $activityList[] = $activity;
- }
- }
- return $activityList ?? [];
- }
-
- public function getGoodsActivityByActivity($goods_id, $activity_id, $status = 'all', $format_type = 'goods') //33,8
- {
-
- $keyActivity = $this->getKeyActivityById($activity_id);
- if (!$keyActivity) {
- return null;
- }
-
- $activity = $this->formatActivityByKey($keyActivity, $format_type, ['goods_id' => $goods_id]);
- if ($activity) {
-
- $goods_ids = array_values(array_filter(explode(',', $activity['goods_ids'])));
- if (!in_array($goods_id, $goods_ids) && !empty($goods_ids)) {
- return null;
- }
-
-
- $status = is_array($status) ? $status : [$status];
- if (!in_array('all', $status)) {
- if (!in_array($activity['status'], $status)) {
- return null;
- }
- }
-
-
- }
- return $activity ?? null;
- }
- }
|