248 lines
10 KiB
PHP
248 lines
10 KiB
PHP
<?php
|
|
/**
|
|
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.gobuysaas.com
|
|
* =========================================================
|
|
*/
|
|
|
|
namespace addon\activity\model;
|
|
|
|
use app\model\BaseModel;
|
|
use app\model\goods\Goods;
|
|
use app\model\system\Config as ConfigModel;
|
|
use app\model\system\Cron;
|
|
use think\facade\Cache;
|
|
use think\facade\Db;
|
|
|
|
/**
|
|
* 团购活动
|
|
*/
|
|
class ActivityModel extends BaseModel
|
|
{
|
|
/**
|
|
* Common: 添加拓客活动
|
|
* Author: ldy
|
|
* Time: 2024/08/22 11:59
|
|
* Interface addActivity
|
|
* @package addon\activity\model
|
|
*/
|
|
public function addActivity($data){
|
|
$time = time();
|
|
if($data['start_time'] < $time && $data['end_time'] > $time){
|
|
$data['status'] = 1;
|
|
}else if($data['start_time'] < $time){
|
|
$data['status'] = 0;
|
|
}else if($data['end_time'] > time()){
|
|
$data['status'] = 2;
|
|
}
|
|
model('promotion_activity')->startTrans();
|
|
try{
|
|
$activity_id = model('promotion_activity')->add($data);
|
|
if($activity_id){
|
|
$cron = new Cron();
|
|
if($data['status'] === 0){
|
|
$cron->addCron(1, 0, "拓客活动开启", "OpenActivity", $data[ 'start_time' ], $activity_id);
|
|
$cron->addCron(1, 0, "拓客活动关闭", "CloseActivity", $data[ 'end_time' ], $activity_id);
|
|
}else{
|
|
$cron->addCron(1, 0, "拓客活动关闭", "CloseActivity", $data[ 'end_time' ], $activity_id);
|
|
}
|
|
}
|
|
|
|
model('promotion_activity')->commit();
|
|
return $this->success();
|
|
}catch(\Exception $e){
|
|
model('promotion_activity')->rollback();
|
|
return $this->error();
|
|
}
|
|
}
|
|
/**
|
|
* Common: 添加拓客活动
|
|
* Author: ldy
|
|
* Time: 2024/08/22 15:24
|
|
* Interface addActivity
|
|
* @package addon\activity\model
|
|
*/
|
|
public function editActivity($activity_id,$data,$site_id){
|
|
$time = time();
|
|
if($data['start_time'] < $time && $data['end_time'] > $time){
|
|
$data['status'] = 1;
|
|
}else if($data['start_time'] < $time){
|
|
$data['status'] = 0;
|
|
}else if($data['end_time'] > time()){
|
|
$data['status'] = 2;
|
|
}
|
|
model('promotion_activity')->startTrans();
|
|
try{
|
|
$res = model('promotion_activity')->update($data,[ [ 'activity_id', '=', $activity_id ], [ 'site_id', '=', $site_id ] ]);
|
|
if($activity_id){
|
|
$cron = new Cron();
|
|
if($data['status'] === 0){
|
|
$cron->deleteCron([ [ 'event', '=', 'OpenActivity' ], [ 'relate_id', '=', $activity_id ] ]);
|
|
$cron->deleteCron([ [ 'event', '=', 'CloseActivity' ], [ 'relate_id', '=', $activity_id ] ]);
|
|
|
|
$cron->addCron(1, 0, "拓客活动开启", "OpenActivity", $data[ 'start_time' ], $activity_id);
|
|
$cron->addCron(1, 0, "拓客活动关闭", "CloseActivity", $data[ 'end_time' ], $activity_id);
|
|
}else{
|
|
$cron->deleteCron([ [ 'event', '=', 'OpenActivity' ], [ 'relate_id', '=', $activity_id ] ]);
|
|
$cron->deleteCron([ [ 'event', '=', 'CloseActivity' ], [ 'relate_id', '=', $activity_id ] ]);
|
|
|
|
$cron->addCron(1, 0, "拓客活动关闭", "CloseActivity", $data[ 'end_time' ], $activity_id);
|
|
}
|
|
}
|
|
|
|
model('promotion_activity')->commit();
|
|
return $this->success($res);
|
|
}catch(\Exception $e){
|
|
model('promotion_activity')->rollback();
|
|
return $this->error();
|
|
}
|
|
}
|
|
/**
|
|
* Common: 关闭拓客活动
|
|
* Author: ldy
|
|
* Time: 2024/08/22 14:03
|
|
* Interface cronCloseActivity
|
|
* @package addon\activity\model
|
|
*/
|
|
public function getActivityPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '')
|
|
{
|
|
|
|
$field = '*';
|
|
$list = model('promotion_activity')->pageList($condition, $field, $order, $page, $page_size);
|
|
if($list && count($list['list'])){
|
|
foreach($list['list'] as $key => &$value){
|
|
$value['goods'] = self::getActivityGoods(json_decode($value['goods_ids']));
|
|
$value['form_title'] = $value['form_id'] > 0 ? model('form')->getValue(['id' => $value['form_id']],'form_name') : '暂无';
|
|
$value['poster_title'] = $value['template_id'] > 0 ? model('poster_template')->getValue(['template_id' => $value['template_id']],'poster_name') : '暂无';
|
|
}
|
|
}
|
|
return $this->success($list);
|
|
}
|
|
|
|
public function getActivityInfo($condition = [], $field = '*'){
|
|
$info = model("promotion_activity")->getInfo($condition, $field);
|
|
if($info){
|
|
$goods_ids = json_decode($info['goods_ids'],true);
|
|
$info['goods_ids'] = $goods_ids;
|
|
$info['activity_image'] = implode(',',json_decode($info['activity_image'],true));
|
|
$goods = self::getActivityGoods($goods_ids);
|
|
$info['goods'] = $goods;
|
|
$info['goods_num'] = count($goods);
|
|
$divide_money_ids = json_decode($info['divide_money_ids'],true);//分账账号
|
|
$info['divide_money_ids'] = $divide_money_ids;
|
|
$info['divide_ids'] = implode(',',$divide_money_ids);
|
|
}
|
|
return $this->success($info);
|
|
}
|
|
|
|
/**
|
|
* 删除拓客活动
|
|
* @param $groupbuy_id
|
|
* @param $site_id
|
|
* @return array|\multitype
|
|
*/
|
|
public function deleteActivity($activity_id, $site_id)
|
|
{
|
|
//团购信息
|
|
$info = model('promotion_activity')->getInfo([ [ 'activity_id', '=', $activity_id ], [ 'site_id', '=', $site_id ] ], 'activity_id,status');
|
|
if ($info) {
|
|
if ($info['status'] == 1) {
|
|
$res = model('promotion_activity')->delete([ [ 'activity_id', '=', $activity_id ] ]);
|
|
if ($res) {
|
|
$cron = new Cron();
|
|
$cron->deleteCron([ [ 'event', '=', 'OpenActivity' ], [ 'relate_id', '=', $activity_id ] ]);
|
|
$cron->deleteCron([ [ 'event', '=', 'CloseActivity' ], [ 'relate_id', '=', $activity_id ] ]);
|
|
}
|
|
return $this->success($res);
|
|
} else {
|
|
return $this->error('', '拓客活动进行中');
|
|
}
|
|
} else {
|
|
return $this->error('', '拓客活动不存在');
|
|
}
|
|
}
|
|
|
|
public function urlQrcode($page, $qrcode_param, $promotion_type, $site_id)
|
|
{
|
|
$params = [
|
|
'site_id' => $site_id,
|
|
'data' => $qrcode_param,
|
|
'page' => $page,
|
|
'promotion_type' => $promotion_type,
|
|
'h5_path' => $page . '?id=' . $qrcode_param[ 'id' ],
|
|
'qrcode_path' => 'upload/qrcode/activity',
|
|
'qrcode_name' => [
|
|
'h5_name' => 'activity_qrcode_' . $promotion_type . '_h5_' . $qrcode_param[ 'id' ] . '_' . $site_id,
|
|
'weapp_name' => 'activity_qrcode_' . $promotion_type . '_weapp_' . $qrcode_param[ 'id' ] . '_' . $site_id
|
|
]
|
|
];
|
|
|
|
$solitaire = event('ExtensionInformation', $params);
|
|
return $this->success($solitaire[ 0 ]);
|
|
}
|
|
|
|
/**
|
|
* Common: 关闭拓客活动
|
|
* Author: ldy
|
|
* Time: 2024/08/23 11:08
|
|
* Interface cronCloseActivity
|
|
* @package addon\activity\model
|
|
*/
|
|
public function cronCloseActivity($activity_id){
|
|
return model('promotion_activity')->update(['status' => 2],[ [ 'activity_id', '=', $activity_id ]]);
|
|
}
|
|
/**
|
|
* Common: 开启拓客活动
|
|
* Author: ldy
|
|
* Time: 2024/08/23 11:02
|
|
* Interface cronOpenActivity
|
|
* @package addon\activity\model
|
|
*/
|
|
public function cronOpenActivity($activity_id){
|
|
return model('promotion_activity')->update(['status' => 1],[ [ 'activity_id', '=', $activity_id ]]);
|
|
}
|
|
|
|
|
|
protected function getActivityGoods($goods_ids){
|
|
$model = new Goods();
|
|
$goods = $model->getGoodsSelect([ [ 'goods_id', 'in', $goods_ids ] ], 'goods_name,goods_image,price,goods_stock,goods_service_ids');
|
|
return $goods['data'];
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取活动商品详情
|
|
* @param $condition
|
|
* @param string $field
|
|
* @return array
|
|
*/
|
|
public function getActivityGoodsDetail($condition, $field = '')
|
|
{
|
|
if (empty($field)) {
|
|
$field = 'sku.goods_id,sku.sku_id,sku.sku_name,sku.sku_spec_format,sku.price,sku.promotion_type,sku.stock,sku.click_num,(g.sale_num + g.virtual_sale) as sale_num,sku.collect_num,sku.sku_image,sku.sku_images,sku.site_id,sku.goods_content,sku.goods_state,sku.is_virtual,sku.is_free_shipping,sku.goods_spec_format,sku.goods_attr_format,sku.introduction,sku.support_trade_type,sku.unit,sku.video_url,sku.evaluate,sku.goods_service_ids,ptg.id,ptg.topic_id,ptg.start_time,ptg.end_time,ptg.topic_price,pt.topic_name,g.goods_image,g.goods_stock,g.goods_name,sku.qr_id,sku.market_price,g.stock_show,g.sale_show,g.market_price_show,g.barrage_show,g.label_name,pt.remark';
|
|
}
|
|
$alias = 'ptg';
|
|
$join = [
|
|
[ 'goods_sku sku', 'ptg.sku_id = sku.sku_id', 'inner' ],
|
|
[ 'goods g', 'g.goods_id = sku.goods_id', 'inner' ],
|
|
// [ 'promotion_topic pt', 'pt.topic_id = ptg.topic_id', 'inner' ],
|
|
];
|
|
$info = model('promotion_activity')->getInfo($condition, $field, $alias, $join);
|
|
if (!empty($info)) {
|
|
if (isset($info[ 'sale_num' ])) {
|
|
$info[ 'sale_num' ] = numberFormat($info[ 'sale_num' ]);
|
|
}
|
|
if (isset($info[ 'stock' ])) {
|
|
$info[ 'stock' ] = numberFormat($info[ 'stock' ]);
|
|
}
|
|
if (isset($info[ 'goods_stock' ])) {
|
|
$info[ 'goods_stock' ] = numberFormat($info[ 'goods_stock' ]);
|
|
}
|
|
}
|
|
return $this->success($info);
|
|
}
|
|
}
|