$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); } }