123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704 |
- <?php
-
-
- namespace App\Services;
-
- use App\Common\Api;
-
- use App\Models\Activitys;
- use App\Models\AdminVip;
- use App\Models\Apps;
- use App\Models\Configs;
- use App\Models\Corps;
- use App\Models\Prizes;
- use App\Models\Departments;
- use App\Models\Users;
- use App\Models\Questions;
- use App\Models\Categorys;
- use App\Models\LotteryBoxs;
- use App\Models\CorpVip;
-
- use App\Models\VipConfig;
- use DB;
- use Excel;
- use Illuminate\Support\Facades\Session;
-
- class ActivityService
- {
- public function __construct($configs=[])
- {
-
- }
-
- const ACT_STATUS_RELEASE = 1;
- const ACT_STATUS_NOT_RELEASE = 1;
- const ACT_NOT_COMPLETE = 0;
- const ACT_COMPLETE = 1;
-
-
- const LOTTERY_LEVEL = array(
- 'copperPrize'=>1,
- 'sliverPrize'=>2,
- 'goldPrize' =>3,
- );
-
-
-
- public static function copyActivity($params){
-
- $act_info = Activitys::where('activity_id', $params['activity_id'])->first()->toArray();
- if(!$act_info){
- return Api::json(config('code.activity_not_exist'), trans('msg.activity_not_exist'));
- }
-
- $corp_id = empty($params['corp_id'])?$act_info['corp_id']:$params['corp_id'];
-
- unset($act_info['activity_id']);
- $act_query = $act_info;
- $act_query['corp_id'] = $corp_id;
-
- $act_query['auth_type'] = empty($params['auth_type'])?$act_info['auth_type']:$params['auth_type'];
- $act_query['status'] = 1;
- $act_query['is_temp_stop']= 0;
- $act_query['is_complete_set']= 0;
- $act_query['update_time'] = time();
- $act_query['create_time'] = time();
-
-
- $act_res = Activitys::insertGetId($act_query);
-
-
- $config_info = Configs::where('activity_id', $params['activity_id'])->first()->toArray();
-
- $config_query = $config_info;
- $config_query['activity_id'] = $act_res;
- $config_query['corp_id'] = $corp_id;
- $config_query['update_time'] = time();
- $config_query['create_time'] = time();
-
-
- $config_res = Configs::insert($config_query);
-
- if(!$act_res || !$config_res){
- return false;
- }
-
-
- if(empty($params['prize'])){
- $prize_res = self::copyPrize($params['activity_id'], $act_res, $corp_id);
- if(!$prize_res){
- return false;
- }
- }
-
-
- if(empty($params['question'])){
- $question_res = self::copyQuestion($params['activity_id'], $act_res, $corp_id);
- if(!$question_res){
- return false;
- }
- }
-
-
-
-
-
-
-
-
-
- return $act_res;
- }
-
-
-
- public static function copyPrize($old_act_id, $activity_id, $corp_id){
-
- $prize_info = Prizes::where('activity_id', $old_act_id)->get()->toArray();
- foreach ($prize_info as $k => $v) {
- $prize_query = [];
- unset($v['prize_id']);
- $prize_query = $v;
- $prize_query['activity_id'] = $activity_id;
- $prize_query['corp_id'] = $corp_id;
- $prize_query['prize_grant_count'] = 0;
- $prize_query['create_time'] = time();
- $prize_query['update_time'] = time();
-
- $prize_res = Prizes::insert($prize_query);
-
- if(!$prize_res){
- return false;
- }
- }
- return true;
- }
-
-
-
- public static function copyUser($old_act_id, $activity_id, $corp_id){
-
- $department_info = Departments::where('activity_id', $old_act_id)->get()->toArray();
- foreach ($department_info as $k => $v) {
-
- $user_info = Users::where('activity_id', $old_act_id)->where('department_id', $v['department_id'])->get()->toArray();
-
- $department_query = [];
- unset($v['department_id']);
- $department_query = $v;
- $department_query['activity_id'] = $activity_id;
- $department_query['corp_id'] = $corp_id;
- $department_query['create_time'] = time();
- $department_query['update_time'] = time();
- $department_res = Departments::insertGetId($department_query);
- if(!$department_res){
- return false;
- }
-
-
- foreach($user_info as $key=>$val){
- $user_query = [];
- unset($val['user_id']);
- $user_query['activity_id'] = $activity_id;
- $user_query['corp_id'] = $corp_id;
- $user_query['guid'] = $val['guid'];
- $user_query['phone'] = $val['phone'];
- $user_query['name'] = $val['name'];
- $user_query['department_id']= $department_res;
- $user_query['create_time'] = time();
- $user_query['update_time'] = time();
- $user_res = Users::insert($user_query);
- if(!$user_res){
- return false;
- }
- }
- }
-
-
- $user_not_department = Users::where('activity_id', $old_act_id)->where('department_id', 0)->get()->toArray();
- if(count($user_not_department)>0){
- foreach($user_not_department as $key=>$val){
- $user_query = [];
- unset($val['user_id']);
- $user_query['activity_id'] = $activity_id;
- $user_query['corp_id'] = $corp_id;
- $user_query['guid'] = $val['guid'];
- $user_query['phone'] = $val['phone'];
- $user_query['name'] = $val['name'];
- $user_query['department_id']= 0;
- $user_query['create_time'] = time();
- $user_query['update_time'] = time();
- $user_res = Users::insert($user_query);
- if(!$user_res){
- return false;
- }
- }
- }
-
- return true;
- }
-
-
-
- public static function copyQuestion($old_act_id, $activity_id, $corp_id){
-
- $category_info = Categorys::where('activity_id', $old_act_id)->get()->toArray();
-
-
- $extend_configs = Configs::where('activity_id', $old_act_id)->value('extend_configs');
- $extend_configs = json_decode($extend_configs, true);
- $blockade_category_ids = explode(',', $extend_configs['blockade_category_ids']);
- $must_category_ids = explode(',', $extend_configs['must_category_ids']);
- $pk_category_ids = explode(',', $extend_configs['pk_category_ids']);
-
- $must_category_ids_new = [];
- $blockade_category_ids_new = [];
- $pk_category_ids_new = [];
- foreach ($category_info as $k => $v) {
-
- $question_info = Questions::where('activity_id', $old_act_id)->where('category_id', $v['category_id'])->get()->toArray();
-
-
- $category_query = [];
- $old_category_id = $v['category_id'];
- unset($v['category_id']);
- $category_query = $v;
- $category_query['activity_id'] = $activity_id;
- $category_query['corp_id'] = $corp_id;
-
- $category_query['create_time'] = time();
- $category_query['update_time'] = time();
- $category_res = Categorys::insertGetId($category_query);
- if(!$category_res){
- return false;
- }
-
-
- foreach($question_info as $key=>$val){
- $question_query = [];
- unset($val['question_id']);
- $question_query = $val;
- $question_query['activity_id'] = $activity_id;
- $question_query['corp_id'] = $corp_id;
- $question_query['category_id'] = $category_res;
- $question_query['create_time'] = time();
- $question_query['update_time'] = time();
- $question_res = Questions::insert($question_query);
- if(!$question_res){
- return false;
- }
- }
-
-
- if(in_array($old_category_id, $must_category_ids)) $must_category_ids_new[] = $category_res;
- if(in_array($old_category_id, $blockade_category_ids)) $blockade_category_ids_new[] = $category_res;
- if(in_array($old_category_id, $pk_category_ids)) $pk_category_ids_new[] = $category_res;
- }
-
-
- $config = ActivityService::getActivityConfig($activity_id);
- $extend_configs = json_decode($config['extend_configs'], true);
- $extend_configs['must_category_ids'] = implode(',', $must_category_ids_new);
- $extend_configs['blockade_category_ids'] = implode(',', $blockade_category_ids_new);
-
- $extend_configs['pk_category_ids'] = implode(',', $pk_category_ids_new);
- $extend_configs = json_encode($extend_configs);
- $res = Configs::where('activity_id', $activity_id)->where('corp_id', $corp_id)->update(['extend_configs'=>$extend_configs]);
- if(!$res){
- return false;
- }
-
- return true;
- }
-
-
-
- public static function getActivityInfo($activity_id, $corp_id=''){
- $res = Activitys::where('activity_id', $activity_id)
-
- ->where('status', 1)
- ->first();
-
- if($res) {
-
- $res = collect($res)->toArray();
- $res = Api::dateFormat($res);
- }
- return $res;
- }
-
-
-
- public static function getActivityConfig($activity_id){
- $res = Configs::where('activity_id', $activity_id)->first();
-
- if(!empty($res)) {
- $res = collect($res)->toArray();
- $res = Api::dateFormat($res);
- }
- return $res;
- }
-
-
-
- public static function getUsersCount($corp_id, $activity_id){
- $user_count = Users::where('activity_id', $activity_id)->where('corp_id', $corp_id)->where('status', 1)->count();
- $data['total'] = $user_count;
-
- $departments = Departments::where('activity_id', $activity_id)->where('corp_id', $corp_id)->where('status', 1)->get()->toArray();
-
- $has_department_num = 0;
- if($departments) {
- foreach ($departments as $department) {
- $data[$department['department_name']] = Users::where('activity_id', $activity_id)->where('corp_id', $corp_id)->where('status', 1)->where('department_id', $department['department_id'])->count();
- $has_department_num += $data[$department['department_name']];
- }
- }
-
- $data['其他'] = $data['total'] - $has_department_num;
-
- return $data;
- }
-
-
-
- public static function getAppInfo($app_id=''){
- if(empty($app_id)){
- $data = Apps::get()->toArray();
- } else {
- $data = Apps::where('app_id', $app_id)->first()->toArray();
- }
-
- return $data;
- }
-
-
-
- public static function changeActStatus($params){
-
- if(isset($params['status'])){
- $query['status'] = $params['status'];
- } else {
- $query['status'] = self::ACT_STATUS_RELEASE;
- }
-
- $res = Activitys::where('activity_id', $params['activity_id'])->where('corp_id', $params['corp_id'])->update($query);
- if($res){
- return Api::arr(config('code.success'), trans('msg.success'));
- } else {
- return Api::arr(config('code.sql_error'), trans('msg.sql_error'));
- }
- }
-
-
-
- public static function stopActivity($params){
- $act_info = ActivityService::getActivityInfo($params['activity_id'], $params['corp_id']);
- if(!$act_info){
- return Api::arr(config('code.activity_not_exist'), trans('msg.activity_not_exist'));
- }
-
- $is_temp_stop = empty($params['is_temp_stop'])?0:$params['is_temp_stop'];
-
- $res = Activitys::where('activity_id', $params['activity_id'])->where('corp_id', $params['corp_id'])->update(['is_temp_stop'=>$is_temp_stop]);
-
- if($res){
- return Api::arr(config('code.success'), trans('msg.success'));
- } else {
- return Api::arr(config('code.sql_error'), trans('msg.sql_error'));
- }
- }
-
-
-
- public static function addAct($corp_id, $app_id){
-
- $user_info = Session::get('userInfo')->toArray();
- $corpVip = CorpVip::where('corp_id', $user_info['corp_id'])->first();
- if($corpVip){
- if($corpVip['vip_end_time'] > time()){
- $activity_num = Activitys::where('status', 1)->where('creator', $user_info['id'])->where('end_time', '>', time())->where('is_complete_set', 1)->count();
- $online_act_num = VipConfig::where('vip_level', $corpVip['vip_level'])->value('online_act_num');
- if($activity_num >= $online_act_num){
- return Api::arr(config('code.fail'), trans('msg.vip_act_full'));
- }
- } else {
- return Api::arr(config('code.fail'), trans('msg.vip_time_out'));
- }
- } else {
- return Api::arr(config('code.fail'), trans('msg.admin_not_vip'));
- }
-
-
- $app_info = Apps::where('app_id', $app_id)->value('default_data');
- $default_data = json_decode($app_info, true);
-
-
- $query = [];
- $query['corp_id'] = $corp_id;
- $query['app_id'] = $app_id;
- $query['create_time'] = time();
- $query['update_time'] = time();
- $corpShortName = Corps::where('corp_id', $corp_id)->value('corp_short_name');
- $query['title'] = $corpShortName.env('APP_NAME');
- $query['logo'] = $default_data['logo'];
- $query['regulation'] = $default_data['regulation'];
- $query['is_jobtime_limit'] = $default_data['is_jobtime_limit'];
- $query['jobtimes'] = $default_data['jobtimes'];
- $query['start_time'] = strtotime(date('Y-m-d'));
- $query['end_time'] = strtotime(date('Y-m-d'))+7*3600*24-1;
- $query['auth_type'] = $default_data['auth_type'];
- $query['client_type'] = $default_data['client_type'];
- $query['activity_type'] = $corpVip['vip_level'] == 1 ? 1 : 2;
- $query['creator'] = session()->get('userInfo')->id;
-
-
-
- $query['vip_level'] = $corpVip['vip_level'];
-
- $activity_res = Activitys::insertGetId($query);
-
-
- $configQuery = [];
- $configQuery['activity_id'] = $activity_res;
- $configQuery['corp_id'] = $corp_id;
- $configQuery['top_banner'] = $default_data['top_banner'];
- $configQuery['home_background'] = $default_data['home_background'];
- $configQuery['mark_background'] = $default_data['mark_background'];
- $configQuery['count_down_background'] = $default_data['count_down_background'];
- $configQuery['sponsor_corp'] = $default_data['sponsor_corp'];
- $configQuery['prize_banner'] = $default_data['prize_banner'];
- $configQuery['copper_box_km'] = $default_data['copper_box_km'];
- $configQuery['silver_box_km'] = $default_data['silver_box_km'];
- $configQuery['gold_box_km'] = $default_data['gold_box_km'];
- $configQuery['is_open_prize'] = $default_data['is_open_prize'];
- $configQuery['open_department_top'] = $default_data['open_department_top'];
- $configQuery['extend_configs'] = json_encode($default_data['extend_configs']);
- $configQuery['level_star_config'] = json_encode($default_data['level_star_config']);
- $configQuery['update_time'] = time();
- $configQuery['create_time'] = time();
-
- $config_res = Configs::insert($configQuery);
-
- if($activity_res && $config_res){
- $res = ActivityService::getConfigs($activity_res, $corp_id);
- QuestionService::addDefault($activity_res);
-
- return Api::arr(config('code.success'), trans('msg.success'), $res['data']);
- } else {
- return Api::arr(config('code.sql_error'), trans('msg.sql_error'));
- }
- }
-
-
-
- public static function getConfigs($activity_id, $corp_id){
- $activity_info = self::getActivityInfo($activity_id, $corp_id);
- if (!$activity_info || empty($activity_info)) {
- return Api::arr(config('code.activity_not_exist'), trans('msg.activity_not_exist'));
- }
- $config_info = self::getActivityConfig($activity_id);
-
- $data['baseInfo'] = array_merge($activity_info, $config_info);
- $data['baseInfo']['extend_configs'] = json_decode($data['baseInfo']['extend_configs'], true);
- $corpInfo = Corps::where('corp_id', $corp_id)->value('has_wesuit');
- $data['baseInfo']['has_wesuit'] = $corpInfo;
-
-
-
- $admin_vip_info = CorpVip::where('corp_id', $corp_id)->first();
- $data['baseInfo']['time_range']['vip_start_time'] = date('Y-m-d H:i:s', $admin_vip_info['vip_start_time']);
- $data['baseInfo']['time_range']['vip_end_time'] = date('Y-m-d H:i:s', $admin_vip_info['vip_end_time']);
-
-
-
-
-
- $data['questionInfo'] = QuestionService::getCategoryCount($corp_id, $activity_id);
-
-
- $lotteryLevels = LotteryBoxs::where('activity_id', $activity_id)->where('corp_id', $corp_id)->pluck('lottery_level', 'lottery_name');
- foreach($lotteryLevels as $lotteryName=>$lotteryLevel){
- $prize = PrizeService::getPrizeList($corp_id, $activity_id, $lotteryLevel);
- $data['prizeInfo'][$lotteryName] = $prize['data'];
- }
-
-
-
-
-
-
- if (strtotime($activity_info['start_time']) > time()) {
- $data['activityStatus'] = '活动未开始';
- } elseif (strtotime($activity_info['end_time']) < time()) {
- $data['activityStatus'] = '活动已结束';
- } else {
- if ($activity_info['is_temp_stop'] == 1) {
- $data['activityStatus'] = '活动已暂停';
- } else {
- $data['activityStatus'] = '活动进行中';
- }
- }
-
-
- $app_info = self::getAppInfo($activity_info['app_id']);
- $data['QR_url'] = env('WEB_URL') . '/' . $app_info['app_code'] . '?activity_id=' . $activity_id;
-
- $data['activity_id'] = $activity_id;
-
- if($data){
- return Api::arr(config('code.success'), trans('msg.success'), $data);
- } else {
- return Api::arr(config('code.sql_error'), trans('msg.sql_error'));
- }
- }
-
-
-
- public static function saveActivity($params){
-
- $activityInfo = self::getActivityInfo($params['activity_id'], $params['corp_id']);
- if (!$activityInfo || empty($activityInfo)) {
- return Api::arr(config('code.activity_not_exist'), trans('msg.activity_not_exist'));
- }
-
-
- $activityQuery = [];
- $activityQuery['title'] = $params['title'];
- $activityQuery['logo'] = empty($params['logo']) ? '' : $params['logo'];
- $activityQuery['key'] = empty($params['key']) ? 1 : $params['key'];
- $activityQuery['regulation'] = empty($params['regulation']) ? '' : $params['regulation'];
- $activityQuery['is_complete_set'] = 1;
- $activityQuery['status'] = 1;
- $activityQuery['is_jobtime_limit'] = empty($params['is_jobtime_limit']) ? 0 : $params['is_jobtime_limit'];
- $activityQuery['is_weekend_limit'] = empty($params['is_weekend_limit']) ? 0 : $params['is_weekend_limit'];
- $activityQuery['jobtimes'] = isset($params['jobtimes']) ? $params['jobtimes'] : '';
- $activityQuery['start_time'] = strtotime($params['start_time']);
- $activityQuery['end_time'] = strtotime($params['end_time']);
-
- $vipInfo = CorpVip::where('corp_id', $params['corp_id'])->first();
- if($vipInfo['vip_end_time'] < $activityQuery['end_time']){
- return Api::arr(config('code.fail'), trans('msg.time_out_vip'));
- }
-
- if($vipInfo['vip_level'] > 1 && $activityInfo['activity_type'] == 1){
- $activityQuery['activity_type'] = 2;
- }
-
-
- if($activityInfo['is_complete_set'] == 0) {
- $activityQuery['client_type'] = empty($params['client_type']) ? 'wechat' : $params['client_type'];
-
- if ($activityQuery['client_type'] == 'wesuit') {
- $corpInfo = Corps::where('corp_id', $params['corp_id'])->first();
- if ($corpInfo['has_wesuit'] == 0) {
- return Api::arr(config('code.corp_not_wesuit'), trans('msg.corp_not_wesuit'));
- }
- $activityQuery['auth_type'] = 'agh';
- } else {
- $activityQuery['auth_type'] = empty($params['auth_type']) ? 'wechat' : $params['auth_type'];
- }
- }
- $activityQuery['update_time'] = time();
-
-
- $configQuery = [];
- $configQuery['top_banner'] = empty($params['top_banner']) ? '' : $params['top_banner'];
- $configQuery['home_background'] = empty($params['home_background']) ? '' : $params['home_background'];
- $configQuery['mark_background'] = empty($params['mark_background']) ? '' : $params['mark_background'];
- $configQuery['count_down_background'] = $params['count_down_background'];
- $configQuery['sponsor_corp'] = $params['sponsor_corp'];
-
-
-
-
-
- $configQuery['prize_banner'] = $params['prize_banner'];
- $configQuery['copper_box_km'] = empty($params['copper_box_km']) ? 100 :$params['copper_box_km'];
- $configQuery['silver_box_km'] = empty($params['silver_box_km']) ? 500 :$params['silver_box_km'];
- $configQuery['gold_box_km'] = empty($params['gold_box_km']) ? 1000:$params['gold_box_km'];
- $configQuery['is_open_prize'] = empty($params['is_open_prize']) ? 0 :$params['is_open_prize'];
- $configQuery['open_department_top'] = empty($params['open_department_top'])?0:$params['open_department_top'];
- $configQuery['get_question_mode'] = !isset($params['get_question_mode'])?0:$params['get_question_mode'];
- $configQuery['update_time'] = time();
- $configQuery['top_background_color']= empty($params['top_background_color'])?'#242f55':$params['top_background_color'];
-
- $act_res = Activitys::where('activity_id', $params['activity_id'])->where('corp_id', $params['corp_id'])->update($activityQuery);
- $config_res = Configs::where('activity_id', $params['activity_id'])->where('corp_id', $params['corp_id'])->update($configQuery);
-
-
- $questionConfig = QuestionService::questionConfigDetail($params);
-
- if(!$act_res || !$config_res || $questionConfig['code'] != 0){
- return Api::arr($questionConfig['code'], $questionConfig['msg']);
- }
-
-
- if($configQuery['is_open_prize'] == 1 && !empty($params['box_config'])){
- PrizeService::defaultBox($params);
- }
-
-
- $data['activity_id'] = $params['activity_id'];
- $actInfo = Configs::where('activity_id', $params['activity_id'])->where('corp_id', $params['corp_id'])->first()->toArray();
-
- if($params['auth_type'] == 'wechat_auto_add'){
- $data['user_msg'] = '';
- } else {
- $data['user_msg'] = $actInfo['is_user_upload'] == 0 ? '未上传人员':'';
- }
- $data['question_msg'] = $actInfo['is_question_upload'] == 0 ? '未上传题目' : '';
- $data['prize_msg'] = '';
- if($actInfo['is_open_prize'] == 1){
- $prizes = Prizes::where('activity_id', $params['activity_id'])->where('corp_id', $params['corp_id'])->get();
- $data['prize_msg'] = count($prizes) < 1 ? '未设置奖品' : '';
- }
- return Api::arr(config('code.success'), trans('msg.success'), $data);
- }
-
-
-
- public static function modifyLevelConfig($params){
- $activityInfo = self::getActivityInfo($params['activity_id']);
- if(!$activityInfo){
- return Api::arr(config('code.fail'), trans('msg.activity_not_exist'));
- }
-
- $activityConfig = self::getActivityConfig($params['activity_id']);
- $levelConfig = json_decode($activityConfig['level_star_config'], true);
- $levelConfig[1]['name'] = Api::trimAll($params['level_one']);
- $levelConfig[2]['name'] = Api::trimAll($params['level_two']);
- $levelConfig[3]['name'] = Api::trimAll($params['level_three']);
- $levelConfig[4]['name'] = Api::trimAll($params['level_four']);
- $levelConfig[5]['name'] = Api::trimAll($params['level_five']);
- $levelConfig[6]['name'] = Api::trimAll($params['level_six']);
-
- $levelConfigNew = json_encode($levelConfig);
-
- $res = Configs::where('activity_id', $params['activity_id'])->update(['level_star_config'=>$levelConfigNew]);
- if($res){
- return Api::arr(config('code.success'), trans('msg.success'));
- } else {
- return Api::arr(config('code.fail'), trans('msg.sql_error'));
- }
- }
- }
- ?>
|