'用户生日', 2 => '活动日期' ]; /** * 活动日期类型 * @var array */ public const ACTIVITY_DATE_TYPE = [ 1 => '自定义日期', 2 => '每月', 3 => '每周' ]; /** * 生日类型 * @var array */ public const BIRTHDAY_TYPE = [ 1 => '生日当天', 2 => '生日当周', 3 => '生日当月', 0 => '无' ]; /** * 推送时段类型 * @var array */ public const PUSH_TIME_TYPE = [ 1 => '全时段', 2 => '指定时段' ]; /** * 推送人群类型 * @var array */ public const PUSH_USER_TYPE = [ 1 => '全部人群', 2 => '指定人群' ]; /** * 条件满足类型 * @var array */ public const CONDITION_TYPE = [ 1 => '满足任一条件', 2 => '满足全部条件' ]; /** * 礼品类型 * @var array */ public const GIFT_TYPE = [ 1 => '优惠券', 2 => '积分', 3 => '多倍积分', 4 => '余额', 5 => '全场包邮' ]; /** * 推送渠道 * @var array */ public const PUSH_CHANNEL = [ 1 => '短信', 2 => '公众号', 3 => '弹框广告' ]; /** * 推送频次 * @var array */ public const PUSH_FREQUENCY = [ 1 => '永久一次', 2 => '每次进入', 3 => '每天', 4 => '每月', 5 => '每周' ]; /** * 显示页面 * @var array */ public const SHOW_PAGE = [ 1 => '商城首页', 2 => '分类页', 3 => '购物车', 4 => '个人中心', 5 => '支付成功', 6 => '专题页面' ]; /** * 状态 * @var array */ public const STATUS = [ 0 => '关闭', 1 => '开启' ]; /** * 是否提前推送 * @var array */ public const ADVANCE_PUSH = [ 0 => '否', 1 => '是' ]; /** * 是否永久 * @var array */ public const IS_PERMANENT = [ 0 => '否', 1 => '是' ]; /** * 推送类型 * @var array */ public const PUSH_TYPE = [ 1 => '短信', 2 => '公众号', 3 => '弹框广告' ]; /** * 推送状态 * @var array */ public const PUSH_STATUS = [ 0 => '推送失败', 1 => '推送成功' ]; /** * 记录状态 * @var array */ public const RECORD_STATUS = [ 0 => '未使用', 1 => '已使用' ]; public function getAddTimeAttr($value) { return $value ? date('Y-m-d H:i:s', $value) : ''; } /** * 获取用户标签属性 * 将逗号分隔的字符串转换为数组,并将字符串数字转为整型 * @param string|null $value 原始值 * @return array 用户标签数组 */ public function getUserLabelAttr($value) { if (!$value) return []; $array = explode(',', $value); return $this->convertNumericStringsToInt($array); } /** * 设置用户标签属性 * 将数组转换为逗号分隔的字符串 * @param array|string $value 用户标签数组或字符串 * @return string 逗号分隔的字符串 */ public function setUserLabelAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 获取用户自定义标签属性 * 将逗号分隔的字符串转换为数组,并将字符串数字转为整型 * @param string|null $value 原始值 * @return array 用户自定义标签数组 */ public function getUserTagAttr($value) { if (!$value) return []; $array = explode(',', $value); return $this->convertNumericStringsToInt($array); } public function getUserLevelAttr($value) { if (!$value) return []; $array = explode(',', $value); return $this->convertNumericStringsToInt($array); } public function setUserLevelAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 设置用户自定义标签属性 * 将数组转换为逗号分隔的字符串 * @param array|string $value 用户自定义标签数组或字符串 * @return string 逗号分隔的字符串 */ public function setUserTagAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 获取礼品类型属性 * 将逗号分隔的字符串转换为数组,并将字符串数字转为整型 * @param string|null $value 原始值 * @return array 礼品类型数组 */ public function getGiftTypeAttr($value) { if (!$value) return []; $array = explode(',', $value); return $this->convertNumericStringsToInt($array); } /** * 设置礼品类型属性 * 将数组转换为逗号分隔的字符串 * @param array|string $value 礼品类型数组或字符串 * @return string 逗号分隔的字符串 */ public function setGiftTypeAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 获取优惠券ID属性 * 将逗号分隔的字符串转换为数组,并将字符串数字转为整型 * @param string|null $value 原始值 * @return array 优惠券ID数组 */ public function getCouponIdsAttr($value) { if (!$value) return []; $array = explode(',', $value); return $this->convertNumericStringsToInt($array); } /** * 设置优惠券ID属性 * 将数组转换为逗号分隔的字符串 * @param array|string $value 优惠券ID数组或字符串 * @return string 逗号分隔的字符串 */ public function setCouponIdsAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 获取推送渠道属性 * 将逗号分隔的字符串转换为数组,并将字符串数字转为整型 * @param string|null $value 原始值 * @return array 推送渠道数组 */ public function getPushChannelAttr($value) { if (!$value) return []; $array = explode(',', $value); return $this->convertNumericStringsToInt($array); } /** * 设置推送渠道属性 * 将数组转换为逗号分隔的字符串 * @param array|string $value 推送渠道数组或字符串 * @return string 逗号分隔的字符串 */ public function setPushChannelAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 获取推送周期属性 * 将逗号分隔的字符串转换为数组,并将字符串数字转为整型 * @param string|null $value 原始值 * @return array 推送周期数组 */ public function getPushWeekDaysAttr($value) { if (!$value) return []; $array = explode(',', $value); return $this->convertNumericStringsToInt($array); } /** * 设置推送周期属性 * 将数组转换为逗号分隔的字符串 * @param array|string $value 推送周期数组或字符串 * @return string 逗号分隔的字符串 */ public function setPushWeekDaysAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 获取显示页面属性 * 将逗号分隔的字符串转换为数组,并将字符串数字转为整型 * @param string|null $value 原始值 * @return array 显示页面数组 */ public function getShowPageAttr($value) { if (!$value) return []; $array = explode(',', $value); return $this->convertNumericStringsToInt($array); } /** * 设置展示页面属性 * 将数组转换为逗号分隔的字符串 * @param array|string $value 展示页面数组或字符串 * @return string 逗号分隔的字符串 */ public function setShowPageAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 获取微信图片属性 * 将JSON字符串转换为数组,并将字符串数字转为整型 * @param string|null $value 原始值 * @return array 微信图片数组 */ public function getWechatImageAttr($value) { if (!$value) return []; $array = json_decode($value, true); return $this->convertNumericStringsToInt($array); } /** * 递归将数组中的数字字符串转换为整型 * @param array $array 需要处理的数组 * @return array|int */ private function convertNumericStringsToInt($array) { if (!is_array($array)) { return is_numeric($array) ? (int)$array : $array; } foreach ($array as $key => $value) { if (is_array($value)) { $array[$key] = $this->convertNumericStringsToInt($value); } else if (is_numeric($value)) { $array[$key] = (int)$value; } } return $array; } /** * 设置微信图片属性 * 将数组转换为JSON字符串 * @param array|string $value 微信图片数组或字符串 * @return string JSON格式的字符串 */ public function setWechatImageAttr($value) { return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : $value; } /** * 获取话题ID属性 * 将逗号分隔的字符串转换为数组,并将字符串数字转为整型 * @param string|null $value 原始值 * @return array 话题ID数组 */ public function getTopicIdsAttr($value) { if (!$value) return []; $array = explode(',', $value); return $this->convertNumericStringsToInt($array); } /** * 设置专题ID属性 * 将数组转换为逗号分隔的字符串 * @param array|string $value 专题ID数组或字符串 * @return string 逗号分隔的字符串 */ public function setTopicIdsAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 获取活动月份日期属性 * 将逗号分隔的字符串转换为数组,并将字符串数字转为整型 * @param string|null $value 原始值 * @return array 活动月份日期数组 */ public function getActivityMonthDaysAttr($value) { if (!$value) return []; $array = explode(',', $value); return $this->convertNumericStringsToInt($array); } /** * 设置活动月份日期属性 * 将数组转换为逗号分隔的字符串 * @param array|string $value 活动月份日期数组或字符串 * @return string 逗号分隔的字符串 */ public function setActivityMonthDaysAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 获取活动周日期属性 * 将逗号分隔的字符串转换为数组,并将字符串数字转为整型 * @param string|null $value 原始值 * @return array 活动周日期数组 */ public function getActivityWeekDaysAttr($value) { if (!$value) return []; $array = explode(',', $value); return $this->convertNumericStringsToInt($array); } /** * 设置活动周日期属性 * 将数组转换为逗号分隔的字符串 * @param array|string $value 活动周日期数组或字符串 * @return string 逗号分隔的字符串 */ public function setActivityWeekDaysAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 根据ID搜索 * @param Model $query 查询对象 * @param mixed $value 搜索值 * @return Model */ public function searchIdAttr($query, $value) { if ($value !== '') { if (is_array($value)) { $query->whereIn('id', $value); } else { $query->where('id', $value); } } return $query; } /** * 根据名称搜索 * @param Model $query 查询对象 * @param mixed $value 搜索值 * @return Model */ public function searchNameAttr($query, $value) { if ($value !== '') { $query->whereLike('name', '%' . $value . '%'); } return $query; } /** * 根据删除状态搜索 * @param Model $query 查询对象 * @param mixed $value 搜索值 * @return Model */ public function searchIsDelAttr($query, $value) { if ($value !== '') { $query->where('is_del', $value); } return $query; } /** * 根据状态搜索 * @param Model $query 查询对象 * @param mixed $value 搜索值 * @return Model */ public function searchStatusAttr($query, $value) { if ($value !== '') { $query->where('status', $value); } return $query; } /** * 根据任务类型搜索 * @param Model $query 查询对象 * @param mixed $value 搜索值 * @return Model */ public function searchTaskTypeAttr($query, $value) { if ($value !== '') { $query->where('task_type', $value); } return $query; } /** * 根据生日类型搜索 * @param Model $query 查询对象 * @param mixed $value 搜索值 * @return Model */ public function searchBirthdayTypeAttr($query, $value) { if ($value !== '') { $query->where('birthday_type', $value); } return $query; } /** * 搜索有效期内的活动 * @param Model $query 查询对象 * @param mixed $value 是否在有效期内,true表示在有效期内,false表示不限制 * @return Model */ public function searchIsValidAttr($query, $value = true) { if ($value !== '') { $query->where(function ($query) { $query->where('is_permanent', 1)->whereOr(function ($query) { $now = time(); $query->where('start_time', '<=', $now) ->where('end_time', '>=', $now); }); }); } return $query; } public function searchGiftTimeAttr($query, $value = true) { if ($value !== '') { $time = explode('-', $value); $start_time = strtotime($time[0]); $end_time = strtotime($time[1]); $query->where('start_time', '<=', $start_time) ->where('end_time', '>=', $end_time); } return $query; } /** * 推送渠道,多个用逗号分隔:1-短信,2-公众号,3-弹框广告', * * @param $query * @param $value * @return mixed * User: liusl * DateTime: 2025/8/12 15:34 */ public function searchPushChannelsAttr($query, $value = true) { if ($value !== '') { $query->whereLike('push_channel', '%' . $value . '%'); } return $query; } }