295 lines
7.9 KiB
PHP
295 lines
7.9 KiB
PHP
<?php
|
||
|
||
// +----------------------------------------------------------------------
|
||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||
// +----------------------------------------------------------------------
|
||
// | Author: CRMEB Team <admin@crmeb.com>
|
||
// +----------------------------------------------------------------------
|
||
|
||
namespace app\common\model\store;
|
||
|
||
use app\common\model\BaseModel;
|
||
use app\common\model\store\order\StoreOrderProduct;
|
||
use app\common\model\store\product\Product;
|
||
use app\common\repositories\store\StoreActivityRepository;
|
||
use think\model\concern\SoftDelete;
|
||
use think\model\relation\HasMany;
|
||
|
||
class StoreSeckillActive extends BaseModel
|
||
{
|
||
protected $autoWriteTimestamp = true;
|
||
protected $createTime = 'create_time';
|
||
protected $updateTime = 'update_time';
|
||
protected $deleteTime = 'delete_time';
|
||
|
||
use SoftDelete;
|
||
|
||
protected $append = ['status_text', 'seckill_time_text_arr','stop_time'];
|
||
|
||
/**
|
||
* TODO 设置主键
|
||
* @return string
|
||
* @author Qinii
|
||
* @day 2020-07-30
|
||
*/
|
||
public static function tablePk(): string
|
||
{
|
||
return 'seckill_active_id';
|
||
}
|
||
|
||
/**
|
||
* TODO 设置表名
|
||
* @return string
|
||
* @author Qinii
|
||
* @day 2020-07-30
|
||
*/
|
||
public static function tableName(): string
|
||
{
|
||
return 'store_seckill_active';
|
||
}
|
||
|
||
|
||
/**
|
||
* 开始日期修改器
|
||
* @param $value
|
||
* @param $data
|
||
* @return false|int|void
|
||
* FerryZhao 2024/4/11
|
||
*/
|
||
protected static function setStartDayAttr($value, $data)
|
||
{
|
||
if ($value) {
|
||
return date('Y-m-d', strtotime($value));
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 标识修改器
|
||
* @param $value
|
||
* @param $data
|
||
* @return false|string|void
|
||
* FerryZhao 2024/4/24
|
||
*/
|
||
protected static function setSignAttr($value, $data)
|
||
{
|
||
return 1;
|
||
}
|
||
|
||
/**
|
||
* 结束日期修改器
|
||
* @param $value
|
||
* @param $data
|
||
* @return false|int|void
|
||
* FerryZhao 2024/4/11
|
||
*/
|
||
protected static function setEndDayAttr($value, $data)
|
||
{
|
||
if(isset($data['seckill_time_ids']) && $data['seckill_time_ids']){
|
||
$data['seckill_time_ids'] = explode(',', $data['seckill_time_ids']);
|
||
$seckillEndTime = app()->make(StoreSeckillTime::class)->where(['status'=>1])->whereIn('seckill_time_id',$data['seckill_time_ids'])->order('end_time','desc')->value('end_time');
|
||
$endTime = $seckillEndTime * 60 * 60;
|
||
$endTime = $seckillEndTime == 24 ? $endTime - 1 : $endTime;
|
||
if ($value) {
|
||
return date('Y-m-d H:i:s',strtotime(date('Y-m-d',strtotime($value))) + $endTime);
|
||
}
|
||
return $endTime;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 活动状态
|
||
* @param $value
|
||
* @param $data
|
||
* @return int|string|void
|
||
* FerryZhao 2024/4/19
|
||
*/
|
||
public static function setActiveStatusAttr($value,$data)
|
||
{
|
||
$startTime = strtotime(date('Y-m-d', strtotime($data['start_day'])));
|
||
$endTime = strtotime(date('Y-m-d', strtotime($data['end_day'])));
|
||
if($startTime > time()){
|
||
return 0;
|
||
}else if($endTime < time()){
|
||
return '-1';
|
||
}else if($startTime <= time() && $endTime >= time()){
|
||
return 1;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @return array
|
||
*/
|
||
public function getSeckillTimesAttr()
|
||
{
|
||
if ($this->seckill_time_ids) {
|
||
return StoreSeckillTime::whereIn('seckill_time_id',$this->seckill_time_ids)->where('status',1)->column('title,start_time,end_time');
|
||
}
|
||
return [];
|
||
}
|
||
|
||
/**
|
||
* 开始日期获取器
|
||
* @param $value
|
||
* @param $data
|
||
* @return false|int|void
|
||
* FerryZhao 2024/4/11
|
||
*/
|
||
protected static function getStartDayAttr($value, $data)
|
||
{
|
||
if ($value) {
|
||
return date('Y-m-d', strtotime($value));
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 结束日期获取器
|
||
* @param $value
|
||
* @param $data
|
||
* @return false|int|void
|
||
* FerryZhao 2024/4/11
|
||
*/
|
||
protected static function getEndDayAttr($value, $data)
|
||
{
|
||
if ($value) {
|
||
return date('Y-m-d', strtotime($value));
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 活动场次获取器
|
||
* @param $value
|
||
* @param $data
|
||
* @return void
|
||
* FerryZhao 2024/4/11
|
||
*/
|
||
protected static function getSeckillTimeIdsAttr($value, $data)
|
||
{
|
||
if (!empty($value)) {
|
||
return explode(',', $value);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 平台一级商品分类获取器
|
||
* @param $value
|
||
* @param $data
|
||
* @return void
|
||
* FerryZhao 2024/4/11
|
||
*/
|
||
protected static function getProductCategoryIdsAttr($value, $data)
|
||
{
|
||
if (!empty($value)) {
|
||
return explode(',', $value);
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 状态说明获取器
|
||
* @param $value
|
||
* @param $data
|
||
* @return void
|
||
* FerryZhao 2024/4/11
|
||
*/
|
||
protected static function getStatusTextAttr($value, $data)
|
||
{
|
||
$statusTextArray = [
|
||
'0'=>'未开始',
|
||
'1'=>'进行中',
|
||
'-1'=>'已结束'
|
||
];
|
||
return $statusTextArray[$data['active_status']];
|
||
|
||
}
|
||
|
||
/**
|
||
* 时间场次获取器
|
||
* @param $value
|
||
* @param $data
|
||
* @return void
|
||
* FerryZhao 2024/4/13
|
||
*/
|
||
protected function getSeckillTimeTextArrAttr($value, $data)
|
||
{
|
||
$timeList = [];
|
||
if (isset($data['seckill_time_ids'])) {
|
||
$list = app()->make(StoreSeckillTime::class)->whereIn('seckill_time_id', explode(',', $data['seckill_time_ids']))->field('start_time,end_time')->select();
|
||
foreach ($list as $item) {
|
||
$timeList[] = $item['start_time_text'] . ' - ' . $item['end_time_text'];
|
||
}
|
||
}
|
||
|
||
return $timeList;
|
||
}
|
||
|
||
|
||
/**
|
||
* 氛围图获取器
|
||
* @param $value
|
||
* @param $data
|
||
* @return void
|
||
* FerryZhao 2024/4/18
|
||
*/
|
||
public function getAtmospherePicAttr($value, $data)
|
||
{
|
||
$storeActivity = app()->make(StoreActivityRepository::class);
|
||
$pic = app()->make(StoreActivity::class)->where(
|
||
[
|
||
'scope_type' => $storeActivity::TYPE_MUST_SECKILL_ACTIVE,
|
||
'activity_type' => $storeActivity::ACTIVITY_TYPE_ATMOSPHERE,
|
||
'link_id' => $data['seckill_active_id']
|
||
]
|
||
)->value('pic');
|
||
return $pic ?: '';
|
||
}
|
||
|
||
/**
|
||
* 氛围图获取器
|
||
* @param $value
|
||
* @param $data
|
||
* @return void
|
||
* FerryZhao 2024/4/18
|
||
*/
|
||
public function getBorderPicAttr($value, $data)
|
||
{
|
||
$storeActivity = app()->make(StoreActivityRepository::class);
|
||
$pic = app()->make(StoreActivity::class)->where(
|
||
[
|
||
'scope_type' => $storeActivity::TYPE_MUST_SECKILL_ACTIVE,
|
||
'activity_type' => $storeActivity::ACTIVITY_TYPE_BORDER,
|
||
'link_id' => $data['seckill_active_id']
|
||
]
|
||
)->value('pic');
|
||
return $pic ?: '';
|
||
}
|
||
|
||
|
||
/**
|
||
* 关联订单商品
|
||
* @return void
|
||
* FerryZhao 2024/4/26
|
||
*/
|
||
public function seckillStoreOrderProduct()
|
||
{
|
||
return $this->hasMany(StoreOrderProduct::class, 'activity_id', 'seckill_active_id')->where(['product_type'=>1]);
|
||
}
|
||
|
||
/**
|
||
* 停止时间获取器
|
||
* @param $value
|
||
* @param $data
|
||
* @return void
|
||
* FerryZhao 2024/4/28
|
||
*/
|
||
public function getStopTimeAttr($value,$data)
|
||
{
|
||
$time = app()->make(StoreSeckillTime::class)->whereIn('seckill_time_id', explode(',', $data['seckill_time_ids']))->field('start_time,end_time')->max('end_time');
|
||
$date = date('Y-m-d',strtotime($data['end_day'])).' '.$time.':00:00';
|
||
return strtotime($date);
|
||
}
|
||
}
|