This commit is contained in:
2025-10-29 15:32:26 +08:00
parent d90614805b
commit b7462657cd
78921 changed files with 2753938 additions and 71 deletions

View File

@@ -0,0 +1,27 @@
<?php
/**
*/
namespace addon\seckill\event;
use addon\seckill\model\Seckill;
/**
* 关闭活动
*/
class CloseSeckill
{
public function handle($params)
{
$seckill = new Seckill();
$res = $seckill->cronCloseSeckill($params[ 'relate_id' ]);
return $res;
}
}

View File

@@ -0,0 +1,33 @@
<?php
/**
*/
namespace addon\seckill\event;
use addon\seckill\model\SeckillOrder;
/**
* 订单营销活动类型
*/
class CronOrderClose
{
/**
* 订单关闭
* @param $params
* @return array
*/
public function handle($params)
{
$seckill = new SeckillOrder();
$res = $seckill->cronOrderClose($params[ 'order_id' ]);
return $res;
}
}

View File

@@ -0,0 +1,65 @@
<?php
/**
*/
namespace addon\seckill\event;
use addon\seckill\model\Seckill;
use app\model\goods\Goods as GoodsModel;
/**
* 商品营销活动信息
*/
class GoodsPromotion
{
/**
* 商品营销活动信息
* @param $param
* @return array
*/
public function handle($param)
{
if (isset($param['goods_sku_detail'])) {
$goods_info = $param['goods_sku_detail'];
if (!empty($goods_info['promotion_addon'])) {
$promotion_addon = json_decode($goods_info['promotion_addon'], true);
if (!empty($promotion_addon['seckill'])) {
return [
'promotion_type' => 'seckill',
'promotion_name' => '限时秒杀',
'id' => $promotion_addon['seckill']
];
}
}
} else {
if (empty($param['goods_id'])) return [];
$goods_model = new GoodsModel();
$goods_info = $goods_model->getGoodsInfo([['goods_id', '=', $param['goods_id']]], 'promotion_addon')['data'];
if (!empty($goods_info['promotion_addon'])) {
$promotion_addon = json_decode($goods_info['promotion_addon'], true);
if (!empty($promotion_addon['seckill'])) {
$seckill_model = new Seckill();
$goods_detail = $seckill_model->getSeckillInfo($promotion_addon['seckill'])['data'];
if (!empty($goods_detail)) {
$time = time() - strtotime(date('Y-m-d'), time());
if ($time > $goods_detail['seckill_start_time'] && $time < $goods_detail['seckill_end_time']) {
$goods_detail['promotion_type'] = 'seckill';
$goods_detail['promotion_name'] = '限时秒杀';
return $goods_detail;
}
}
}
}
return [];
}
}
}

View File

@@ -0,0 +1,28 @@
<?php
/**
*/
namespace addon\seckill\event;
/**
* 活动类型
*/
class GoodsPromotionType
{
/**
* 活动类型
* @return array
*/
public function handle()
{
return ['name' => '限时秒杀', 'short' => '秒', 'type' => 'seckill', 'color' => '#89689D', 'url' => 'seckill://shop/seckill/goodslist'];
}
}

View File

@@ -0,0 +1,32 @@
<?php
/**
*/
namespace addon\seckill\event;
/**
* 应用安装
*/
class Install
{
/**
* 执行安装
*/
public function handle()
{
/* try{
execute_sql('addon/seckill/data/install.sql');
return success();
}catch (\Exception $e)
{
return error('', $e->getMessage());
} */
return success();
}
}

View File

@@ -0,0 +1,27 @@
<?php
/**
*/
namespace addon\seckill\event;
use addon\seckill\model\Seckill;
/**
* 开启活动
*/
class OpenSeckill
{
public function handle($params)
{
$seckill = new Seckill();
$res = $seckill->cronOpenSeckill($params[ 'relate_id' ]);
return $res;
}
}

View File

@@ -0,0 +1,27 @@
<?php
/**
*/
namespace addon\seckill\event;
/**
* 订单营销活动类型
*/
class OrderPromotionType
{
/**
* 订单营销活动类型
* @return array
*/
public function handle()
{
return [ "name" => "秒杀", "type" => "seckill" ];
}
}

View File

@@ -0,0 +1,27 @@
<?php
/**
*/
namespace addon\seckill\event;
/**
* 活动类型
*/
class PromotionType
{
/**
* 活动类型
* @return array
*/
public function handle()
{
return [ "name" => "秒杀", "type" => "seckill" ];
}
}

View File

@@ -0,0 +1,37 @@
<?php
/**
*/
namespace addon\seckill\event;
/**
* 活动专区——限时秒杀页面配置
*/
class SeckillZoneConfig
{
public function handle($params)
{
if (empty($params) || $params[ 'name' ] == 'seckill') {
$data = [
'name' => 'seckill', // 标识
'title' => '限时秒杀', // 名称
'url' => 'shop/adv/lists?keyword=NS_SECKILL', // 自定义跳转链接
'preview' => 'addon/seckill/shop/view/public/img/zone_preview.png', // 预览图
// 页面配置
'value' => [
'bg_color' => '#F83530'
],
];
return $data;
}
}
}

View File

@@ -0,0 +1,91 @@
<?php
/**
*/
namespace addon\seckill\event;
use think\facade\Db;
/**
* 活动展示
*/
class ShowPromotion
{
public $promotion_type = 'time_limit';
/**
* 活动展示
* @param array $params
* @return array
*/
public function handle($params = [])
{
$data = [
'shop' => [
[
//插件名称
'name' => 'seckill',
//展示分类根据平台端设置shop店铺营销member:会员营销, tool:应用工具)
'show_type' => 'shop',
//展示主题
'title' => '限时秒杀',
//展示介绍
'description' => '限时抢购引导客户快速下单',
//展示图标
'icon' => 'addon/seckill/icon.png',
//跳转链接
'url' => 'seckill://shop/seckill/goodslist',
'summary' => $this->summary($params)
]
]
];
return $data;
}
/**
* 营销活动概况
* @param $params
* @return array
*/
private function summary($params)
{
if (empty($params)) {
return [];
}
if(isset($params['promotion_type']) && $params['promotion_type'] != $this->promotion_type){
return [];
}
//获取活动数量
if (isset($params[ 'count' ])) {
$count = model("promotion_seckill")->getCount([ [ 'site_id', '=', $params[ 'site_id' ] ] ]);
return [
'count' => $count
];
}
//获取活动概况,需要获取开始时间与结束时间
if (isset($params[ 'summary' ])) {
$list = model("promotion_seckill")->getList([
[ '', 'exp', Db::raw('not ( (`start_time` >= ' . $params[ 'end_time' ] . ') or (`end_time` <= ' . $params[ 'start_time' ] . '))') ],
[ 'site_id', '=', $params[ 'site_id' ] ],
[ 'status', '<>', 2 ],
[ 'status', '<>', -1 ]
], 'seckill_name as promotion_name,id as promotion_id,start_time,end_time', '', 'a', null, 'seckill_name');
return !empty($list) ? [
'time_limit' => [
'count' => count($list),
'detail' => $list,
'color' => '#6D66FF'
]
] : [];
}
}
}

View File

@@ -0,0 +1,32 @@
<?php
/**
*/
namespace addon\seckill\event;
/**
* 应用卸载
*/
class UnInstall
{
/**
* 执行卸载
*/
public function handle()
{
/* try{
execute_sql('addon/seckill/data/uninstall.sql');
return success();
}catch (\Exception $e)
{
return error('', $e->getMessage());
} */
return error("系统插件不能删除");
}
}