jh-admin/addon/activity/model/ActivityModel.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);
}
}