<?php /** * Created by PhpStorm. * User: wuzhenke * Date: 2018/11/28 * Time: 16:43 */ namespace App\Services\Company; use App\Exceptions\ResponseException; use App\Models\Company; use App\Models\Jobs; use App\Models\MembersSetmeal; use App\Models\Tpl; use App\Repositories\CompanyRepository; use App\Repositories\JobsRepository; use App\Repositories\MemberHandselRepository; use App\Repositories\MemberLogRepository; use App\Repositories\MemberPointRepository; use App\Repositories\MembersChargeLogRepository; use App\Repositories\MemberSetmealRepository; use App\Repositories\MembersSetmealLogRepository; use App\Repositories\OrderRepository; use App\Repositories\PaymentRepository; use App\Repositories\QueueAutoRefreshRepository; use App\Repositories\SetmealIncrementsRepository; use App\Repositories\SetmealRepository; use App\Repositories\TaskLogRepository; use App\Repositories\TaskRepository; use App\Services\Common\MembersSetmealRecordService; use App\Services\Common\PayService; use Carbon\Carbon; use Illuminate\Contracts\Encryption\EncryptException; use Illuminate\Support\Facades\DB; use App\Repositories\TplRepository; use App\Repositories\MemberSetmealRecordRepository; use Illuminate\Support\Facades\Log; class ServiceService { protected $taskRepository; protected $memberPointRepository; protected $taskLogRepository; protected $memberHandselRepository; protected $memberSetmealRepository; protected $jobsRepository; protected $setmealRepository; protected $paymentRepository; protected $orderRepository; protected $memberLogRepository; protected $membersChargeLogRepository; protected $companyRepository; protected $membersSetmealLogRepository; protected $setmealIncrementsRepository; protected $queueAutoRefreshRepository; protected $tplRepository; protected $memberSetmealRecordRepository; /** * ServiceService constructor. * @param $taskRepository * @param $memberPointRepository * @param $taskLogRepository * @param $memberHandselRepository * @param $memberSetmealRepository * @param $jobsRepository * @param $setmealRepository * @param $paymentRepository * @param $orderRepository * @param $memberLogRepository * @param $membersChargeLogRepository * @param $companyRepository * @param $membersSetmealLogRepository * @param $setmealIncrementsRepository * @param $queueAutoRefreshRepository * @param $tplRepository * */ public function __construct(TaskRepository $taskRepository,TplRepository $tplRepository, QueueAutoRefreshRepository $queueAutoRefreshRepository, SetmealIncrementsRepository $setmealIncrementsRepository, MembersSetmealLogRepository $membersSetmealLogRepository, CompanyRepository $companyRepository, MembersChargeLogRepository $membersChargeLogRepository, MemberLogRepository $memberLogRepository, OrderRepository $orderRepository, PaymentRepository $paymentRepository, SetmealRepository $setmealRepository, JobsRepository $jobsRepository, MemberSetmealRepository $memberSetmealRepository, MemberPointRepository $memberPointRepository, TaskLogRepository $taskLogRepository, MemberHandselRepository $memberHandselRepository,MemberSetmealRecordRepository $memberSetmealRecordRepository,MembersSetmealRecordService $membersSetmealRecordService){ $this->taskRepository = $taskRepository; $this->memberPointRepository = $memberPointRepository; $this->taskLogRepository = $taskLogRepository; $this->memberHandselRepository = $memberHandselRepository; $this->memberSetmealRepository = $memberSetmealRepository; $this->jobsRepository = $jobsRepository; $this->setmealRepository = $setmealRepository; $this->paymentRepository = $paymentRepository; $this->orderRepository = $orderRepository; $this->memberLogRepository = $memberLogRepository; $this->membersChargeLogRepository = $membersChargeLogRepository; $this->companyRepository = $companyRepository; $this->membersSetmealLogRepository = $membersSetmealLogRepository; $this->setmealIncrementsRepository = $setmealIncrementsRepository; $this->queueAutoRefreshRepository = $queueAutoRefreshRepository; $this->tplRepository = $tplRepository; $this->memberSetmealRecordRepository=$memberSetmealRecordRepository; $this->membersSetmealRecordService=$membersSetmealRecordService; } public function index($user) { $mySetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype);//套餐详细 $condition['company_id'] = $user->id; $condition['display'] = 1; $condition['valid'] = 1; $condition[] = ['audit','<>',3]; $jobsCount = $this->jobsRepository->jobsTotal($condition); $surplus_jobs = $mySetmeal->jobs_meanwhile-$jobsCount; $mySetmeal->jobs_meanwhile =$surplus_jobs>0?$surplus_jobs:0; if ($mySetmeal->endtime == 0) { $mySetmeal->leave_days = '永久'; } else { $tmpday = ceil((strtotime($mySetmeal->endtime) - time())/86400); $minus = $tmpday<0?0:$tmpday; $mySetmeal->leave_days = intval($minus); } $setmeal = $this->setmealRepository->findWhere(['display' => 1]);//会员套餐 foreach ($setmeal as $key => $val) { $setmeal[$key]->discount = $this->setmealRepository->getDiscountForSetmealOne($val); $setmeal[$key]->long = $val->days == 0 ? '永久' : $this->formatDays($val->days); } request()->offsetSet('id', $user->id); $setmealRecords=$this->membersSetmealRecordService->SetmealRecord(true); $this->freeSetmealIsOver($user); $result = [ 'user' => $user, 'mySetmeal' => $mySetmeal, 'setmeal' => $setmeal, 'setmealRecord'=>$setmealRecords, ]; return $result; } /** * 免费的会员是否过期了 */ public function freeSetmealIsOver($user){ $mySetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype);//套餐详细 session(["setmeal_message"=>""]); if (strtotime($mySetmeal->endtime)<time() && $mySetmeal->endtime!=0){ //现在就判断到期时间了 if (request('look')!=true){ //通过url来判断是否已经看过 session(["setmeal_message"=>"提醒:您的套餐已到期,请及时到我的套餐处升级套餐"]); } } } /** * @param $request * @return array */ public function setmealDetail($request, $user) { $mySetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype);//套餐详细 $condition['company_id'] = $user->id; $condition['display'] = 1; $condition['valid'] = 1; $condition[] = ['audit','<>',3]; $jobsCount = $this->jobsRepository->jobsTotal($condition); $surplus_jobs = $mySetmeal->jobs_meanwhile-$jobsCount; $mySetmeal->jobs_meanwhile =$surplus_jobs>0?$surplus_jobs:0; if ($mySetmeal->endtime == 0) { $mySetmeal->leave_days = '永久'; } else { $tmpday = ceil((strtotime($mySetmeal->endtime) - time())/86400); $minus = $tmpday<0?0:$tmpday; $mySetmeal->leave_days = intval($minus); } $setmeal = $this->setmealRepository->findWhere(['display' => 1]);//会员套餐 foreach ($setmeal as $key => $val) { $setmeal[$key]->discount = $this->setmealRepository->getDiscountForSetmealOne($val); $setmeal[$key]->long = $val->days == 0 ? '永久' : $this->formatDays($val->days); } $starttime = isset($request['starttime'])?$request['starttime']:date('Y-m-d', time()-30*86400); $endtime = isset($request['endtime'])?$request['endtime']:date('Y-m-d', time()); $where= [ ['created_at','>=',$starttime." 23:10:10"], ['created_at','<=',$endtime." 23:10:10"], ['log_uid','=',$user->id], ['log_utype','=',$user->utype], ]; $setmealDetail = $this->membersSetmealLogRepository->membersSetmealLog($where); request()->offsetSet('id', $user->id); $setmealRecords=$this->membersSetmealRecordService->SetmealRecord(true); $result = [ 'user' => $user, 'mySetmeal' => $mySetmeal, 'setmeal' => $setmeal, 'starttime'=>$starttime, 'endtime'=>$endtime, 'setmealDetail'=>$setmealDetail, 'setmealRecord'=>$setmealRecords, ]; return $result; } /** * 获取任务状态。 */ public function points($user, $type = 0) { $task = $this->memberPointRepository->getComTaskById($user->id); foreach ($task as $key => $val) { if ($key == 'task_logs') { $task_id = []; $task_id_w = []; foreach ($val as $k => $v) { if ($v['once'] != 1) { $task_id[] = $v['task_id']; } else { $task_id_w[] = $v['task_id']; } } } } $count = []; $task_id = array_unique($task_id); foreach ($task_id as $k => $v) { $count[$v] = $this->taskLogRepository->getTaskLogCount($user->id, $v, $user->utype); } $task_info = $this->taskRepository->getTaskById(array_keys($count)); $finshTask = []; //已完成任务。 foreach ($count as $k1 => $v1) { foreach ($task_info as $key1 => $val1) { if ($k1 == $val1->id) { if ($val1->times != -1) { if ($v1 == $val1->times) { $finshTask[$k1]['id'] = $val1->id; $finshTask[$k1]['title'] = $val1->title; $finshTask[$k1]['points'] = $val1->points; $finshTask[$k1]['type'] = '日常任务'; $finshTask[$k1]['status'] = '已完成'; $finshTask[$k1]['t_alias'] = $val1->t_alias; $finshTask[$k1]['count'] = '(*' . $v1 . ')'; } } } } } $task_info_w = $this->taskRepository->getTaskById(($task_id_w)); foreach ($task_info_w as $ke => $va) { $finshTask[$va->id]['id'] = $va->id; $finshTask[$va->id]['title'] = $va->title; $finshTask[$va->id]['points'] = $va->points; $finshTask[$va->id]['type'] = '一次性任务'; $finshTask[$va->id]['status'] = '已完成'; $finshTask[$va->id]['t_alias'] = $va->t_alias; $finshTask[$va->id]['count'] = ''; } $task_ZZ = $this->taskRepository->getTaskByUtype($user->utype); $task_info_z = []; $sub_site = ''; if (get_subsite_id() > 0) { $sub_site = 'jkq.'; } foreach ($task_ZZ as $key => $val) { if (!in_array($val->id, array_keys($finshTask))) { $task_info_z[$val->id]['id'] = $val->id; $task_info_z[$val->id]['title'] = $val->title; $task_info_z[$val->id]['points'] = $val->points; if ($val->once == 1) { $task_info_z[$val->id]['count'] = ''; $task_info_z[$val->id]['type'] = '一次性任务'; } else { $task_info_z[$val->id]['type'] = '日常任务'; $hjk = $this->taskLogRepository->getTaskLogCount($user->id, $val->id, $user->utype); if (!$hjk) { $task_info_z[$val->id]['count'] = ''; } else { $times = $val->times; $lasT = $times - $hjk; if ($times == -1) { $task_info_z[$val->id]['count'] = ''; } else { $task_info_z[$val->id]['count'] = '(*'.$lasT.')'; } } } if ($type) { if ($val->id == 17) { $task_info_z[$val->id]['status'] = '<a href="" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 18) { $task_info_z[$val->id]['status'] = '<a href="javascript:;" url="' . route($sub_site."mobile.firm.sing") . '" data-type="sign" class="ajax_do" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 19) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."mobile.firm.info") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 20) { $task_info_z[$val->id]['status'] = '<a href="' . route($sub_site."mobile.firm.com.img") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 21) { $task_info_z[$val->id]['status'] = '<a href="' . route($sub_site."mobile.resumes") . '" style="text-decoration: none;" target="_blank">去完成</a>'; } elseif ($val->id == 22) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."mobile.firm.com.security") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 23) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."mobile.firm.com.security") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 25) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."mobile.firm.com.binding") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 27) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."mobile.firm.info") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 28) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."mobile.firm.resume.apply") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 29) { // $task_info_z[$val->id]['status'] = '<a href="" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 30) { $task_info_z[$val->id]['status'] = '<a href="' . route($sub_site."mobile.firm.com.auth") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 31) { // $task_info_z[$val->id]['status'] = '<a href="" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 32) { $task_info_z[$val->id]['status'] = '<a href="' . route($sub_site."mobile.firm.com.psm.consult") . '" style="text-decoration: none;">去完成</a>'; } else { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."mobile.firm.com.binding") . '" style="text-decoration: none;">去完成</a>'; } } else { if ($val->id == 17) { $task_info_z[$val->id]['status'] = '<a href="" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 18) { $task_info_z[$val->id]['status'] = '<a href="javascript:;" url="' . route($sub_site."com.sign") . '" data-type="sign" class="ajax_do" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 19) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."com.info") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 20) { $task_info_z[$val->id]['status'] = '<a href="' . route($sub_site."com.img") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 21) { $task_info_z[$val->id]['status'] = '<a href="' . route($sub_site."resumes") . '" style="text-decoration: none;" target="_blank">去完成</a>'; } elseif ($val->id == 22) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."com.security") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 23) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."com.security") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 25) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."com.security") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 27) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."com.info") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 28) { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."resume.apply") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 29) { // $task_info_z[$val->id]['status'] = '<a href="" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 30) { $task_info_z[$val->id]['status'] = '<a href="' . route($sub_site."com.auth") . '" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 31) { // $task_info_z[$val->id]['status'] = '<a href="" style="text-decoration: none;">去完成</a>'; } elseif ($val->id == 32) { $task_info_z[$val->id]['status'] = '<a href="' . route($sub_site."com.pms.consult") . '" style="text-decoration: none;">去完成</a>'; } else { $task_info_z[$val->id]['status'] = '<a href=" ' . route($sub_site."com.security") . '" style="text-decoration: none;">去完成</a>'; } } $task_info_z[$val->id]['t_alias'] = $val->t_alias; } } $todayPoints = 0; $rs = $this->taskLogRepository->getTodayPoints($user->id, $user->utype); if ($rs) { $todayPoints = $rs; } $onPoints = $this->taskLogRepository->getSinglePoints($user->id, $user->utype); $dayPoints = $this->taskLogRepository->getDayPoints($user->id, $user->utype); $arrAll = $this->taskRepository->getAllPoints($user->utype); $allPoints = 0; foreach ($arrAll as $key => $val) { if ($val->once == 1) { $allPoints += $val->points; } else { $allPoints += (abs($val->times)) * ($val->points); } } $lastPoints = (int)$allPoints - $onPoints - $dayPoints > 0 ? (int)$allPoints - $onPoints - $dayPoints : 0; $mySetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype);//套餐详细 return [ 'w_finsh' => $task_info_z, 'finsh' => $finshTask, 'content' => $task, 'todayPoints' => $todayPoints, 'lastPoints' => $lastPoints, 'content' => $this->memberPointRepository->getComPointsById($user->id, $user->utype), 'mySetmeal' => $mySetmeal, ]; } /**积分收支明细 * @return array */ public function pointsDetail($type, $user) { $getNum = $this->memberHandselRepository->getNum($user, 1);//累计获得 $useNum = $this->memberHandselRepository->getNum($user, 2);//累计消耗 $content = $this->memberHandselRepository->getMembersHandsel($user->id, $user->utype, $type);//积分操作记录 $companyPoint = $this->memberPointRepository->getComPointsById($user->id, $user->utype); $points = $this->taskLogRepository->getTodayPoints($user->id, $user->utype);//今天获取积分 $todayPoints = $points ? $points : 0; $onPoints = $this->taskLogRepository->getSinglePoints($user->id, $user->utype);//获取单次积分 $dayPoints = $this->taskLogRepository->getDayPoints($user->id, $user->utype); //获取日常积分 $arrAll = $this->taskRepository->getAllPoints($user->utype); $allPoints = 0; foreach ($arrAll as $key => $val) { if ($val->once == 1) { $allPoints += $val->points; } else { $allPoints += (abs($val->times)) * ($val->points); } } $lastPoints = (int)$allPoints - $onPoints - $dayPoints > 0 ? (int)$allPoints - $onPoints - $dayPoints : 0; $res = [ 'content' => $content, 'points' => $todayPoints, 'lastPoints' => $lastPoints, 'companyPoint' => $companyPoint, 'getNum' => $getNum[0]->getTotalPoints, 'useNum' => $useNum[0]->getTotalPoints, 'type'=>$type ]; return $res; } /**套餐升级 * @param $id * @return array * @throws ResponseException */ public function setmealAdd($id, $user) { $setmeal = $this->setmealRepository->find($id); if (!$setmeal) { throw new ResponseException('请选择正确的套餐', '', 404); } // 购买套餐优惠 $setmeal->long = $this->formatDays($setmeal->days); $setmeal->discount = $this->setmealRepository->getDiscountForSetmealOne($setmeal); $offline = $this->paymentRepository->findWhere(['alias'=>'offline']); $online = $this->paymentRepository->findWhere([['alias','<>','offline']]); foreach ($offline as $key => &$val) { if (!config("aix.system.pay.{$val->alias}.is_on")) { unset($offline[$key]); } } foreach ($online as $key => &$val) { if (!config("aix.system.pay.{$val->alias}.is_on")) { unset($online[$key]); } } $mypoints = $this->memberPointRepository->getPointsById($user->id, $user->utype); $result = [ 'user' => $user, 'setmeal' => $setmeal, 'offline' => $offline, 'online' => $online, 'mypoints' => $mypoints->points, 'need_points' => $setmeal->expense * config('aix.companyset.points.points_set.payment_rate') ]; return $result; } public function setmealAddMobile($user) { //我的套餐 $mySetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, 1); //我的积分 $myPoints = $this->memberPointRepository->getPointsById($user->id, 1); //套餐列表 $setmeal = $this->setmealRepository->getSetmealList(); foreach ($setmeal as $key => $val) { $setmeal[$key]->long = $val->days==0?'永久':$this->formatDays($val->days); $setmeal[$key]['discount'] = $this->setmealRepository->getDiscountForSetmealOne($val); if (config('aix.mobile.mobile_set.mobile_set.mobile_setmeal_discount_value')>0) { $setmeal[$key]->expense = config('aix.mobile.mobile_set.mobile_set.mobile_setmeal_discount_value_type')==1?$val->expense/100*config('aix.mobile.mobile_set.mobile_set.mobile_setmeal_discount_value'):$val->expense-config('aix.mobile.mobile_set.mobile_set.mobile_setmeal_discount_value'); } $setmeal[$key]->service_points = round($setmeal[$key]->expense*config('aix.companyset.points.points_set.payment_rate')); } $result = [ 'user'=>$user, 'mySetmeal'=>$mySetmeal, 'myPoints'=>$myPoints, 'setmeal'=>$setmeal, ]; return $result; } /**设置套餐 * @param $user * @param $setmeal_id * @return array * @params 用来传递参数,后台修改到期时间,希望设置开始时间维当日期 by 李艳 * @throws \Prettus\Validator\Exceptions\ValidatorException * $params 参数使用地方 app/Admin/Controllers/Company/MembersSetmealController.php@update() */ public function setMembersSetmeal($user, $setmeal_id,$params=null) { $setmeal = $this->setmealRepository->getOneSetmeal($setmeal_id); if (!$setmeal) { return ['status'=>0,'msg'=>'请选择正确的套餐']; } $mysetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype); /** * 9月11日发现BUG * 当上个套餐,是免费会员的时候,并且结束时间是0,在此处转成时间戳的时候就会发生令人窒息的1970年 */ $before_end_time=$mysetmeal->endtime; //我现在的套餐的到期时间 if ($before_end_time==0){ $before_end_time=time(); }else{ //有老的异常数据,1970年的 if ($before_end_time<MembersSetmeal::ERROR_TIME){ $before_end_time=time();//直接开始时间就是现在吧 } } $sqlData['starttime']=$before_end_time; $sqlData['expire'] = 0;//如果$setmeal->is_free==1,说明是到期自动变为免费会员,标记过期 --- 其他会员降级 到期字段不变 $sqlData['setmeal_id'] = $setmeal->id; $sqlData['setmeal_name'] = $setmeal->setmeal_name; $sqlData['days'] = $setmeal->days; if (!empty($params) && isset($params['starttime'])){ //传过来的是设置指定的开始时间 $sqlData['starttime']=$params['starttime']; } if ($setmeal->days > 0) { //如果套餐未到期,判断是否叠加套餐服务时间 //配置文件开启套餐时间叠被动模式 if (config('aix.companyset.setmeal_com.setmeal_com_set.is_superposition_time') == 1) { $sqlData['endtime'] = strtotime("+{$setmeal->days} day",$sqlData['starttime']); } else { $sqlData['endtime'] = strtotime("".$setmeal->days." days"); } } else { $sqlData['endtime'] = 0; } $sqlData['expense']=$setmeal['expense']; $sqlData['jobs_meanwhile'] = $setmeal->jobs_meanwhile; $sqlData['refresh_jobs_free'] = $setmeal->refresh_jobs_free; $sqlData['jobfair_num'] = $setmeal->jobfair_num;//招聘会场次 $sqlData['download_resume'] = $setmeal->download_resume; //掠过免费会员 if ($setmeal_id!=MembersSetmeal::FREE_SetMember){ if (config('aix.companyset.setmeal_com.setmeal_com_set.is_superposition') == 1) { //如果开通服务时叠加项目,就减掉已发布的职位数 $map['company_id'] = $user->id; $sqlData['download_resume']=$mysetmeal->download_resume+$setmeal->download_resume; $sqlData['jobfair_num'] = $mysetmeal->jobfair_num+$setmeal->jobfair_num;//招聘会场次 $sqlData['jobs_meanwhile'] = $mysetmeal->jobs_meanwhile+$setmeal->jobs_meanwhile; } } $sqlData['download_resume_max'] = $setmeal->download_resume_max; $sqlData['added'] = $setmeal->added; $sqlData['setmeal_img'] = $setmeal->setmeal_img; $sqlData['show_apply_contact'] = $setmeal->show_apply_contact; $sqlData['is_free'] = $setmeal->is_free; $sqlData['discount_download_resume'] = $setmeal->discount_download_resume; $sqlData['discount_sms'] = $setmeal->discount_sms; $sqlData['discount_stick'] = $setmeal->discount_stick; $sqlData['discount_emergency'] = $setmeal->discount_emergency; $sqlData['discount_tpl'] = $setmeal->discount_tpl; $sqlData['discount_auto_refresh_jobs'] = $setmeal->discount_auto_refresh_jobs; $sqlData['discount_auto_refresh_jobs'] = $setmeal->discount_auto_refresh_jobs; $sqlData['discount_auto_refresh_jobs'] = $setmeal->discount_auto_refresh_jobs; $sqlData['discount_auto_refresh_jobs'] = $setmeal->discount_auto_refresh_jobs; $setmeal_jobs['setmeal_deadline']=$sqlData['endtime']; $setmeal_jobs['deadline']=$setmeal_jobs['setmeal_deadline']; $setmeal_jobs['setmeal_id']=$sqlData['setmeal_id']; $setmeal_jobs['setmeal_name']=$sqlData['setmeal_name']; DB::beginTransaction();//检查数据库事务(有错) try{ //检查套餐的开始时间和结束时间是否正常 if($sqlData["starttime"]<MembersSetmeal::ERROR_TIME || ($sqlData["endtime"]<MembersSetmeal::ERROR_TIME && $sqlData["endtime"]!=0)) { throw new \Exception('系统出现异常!,请联系管理员!'); } if (!$this->memberSetmealRepository->updateSetmeal($sqlData, $mysetmeal->id)) { throw new \Exception('更新会员套餐失败!'); } //删除 是否过期 以及套餐图标 unset($sqlData['expire']); unset($sqlData['setmeal_img']); unset($sqlData['setmeal_deadline']); $sqlData['uid'] = $user->id; $sqlData['utype'] = $user->utype; //往套餐记录里头添加 if($this->memberSetmealRecordRepository->create($sqlData)===false){ throw new \Exception('添加记录失败!'); } //如果套餐有赠送积分,则直接更新用户积分表 if ($setmeal->set_points) { $this->memberPointRepository->reportDeal($user->id, $user->utype, 1, $setmeal->set_points); $handsel['uid'] = $user->id; $handsel['htype'] = 'setmeal_gifts'; $handsel['htype_cn'] = '套餐内赠送'; $handsel['operate'] = 1; $handsel['points'] = $setmeal->set_points; $this->memberHandselRepository->addNew($handsel); } //如果套餐有赠送短信,则直接更新用户表的短信条数字段 //如果开启了服务叠被动模式 if ($setmeal_id!=1 && config('aix.companyset.setmeal_com.setmeal_com_set.is_superposition') == 1){ $this->companyRepository->updataSmsNum($user->id, 1, $setmeal->set_sms); }else{ $this->companyRepository->SetSmsNum($user->id,$setmeal->set_sms); } $this->companyRepository->update(['setmeal_id'=>$setmeal->id, 'setmeal_name'=>$setmeal->setmeal_name], $user->id); event_search_update(Company::class, (string)$user->id, 'update'); $this->jobsRepository->updateMap($user->id, $setmeal_jobs); $condition = [['where', 'company_id', $user->id]]; event_search_update(Jobs::class, $condition, 'update'); //检查在招职位数是否超出限额,并根据后台配置做关闭处理 $this->checkJobsMeanwhile($user->id, $setmeal->jobs_meanwhile); DB::commit(); return ['status'=>1]; }catch (\Exception $exception){ DB::rollBack(); return ['status'=>0,'msg'=>$exception->getMessage()]; } } /**设置免费会员套餐到期 * @param $user * @param $setmeal_id * @return array * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function setFreeMembersSetmeal($user) { $mysetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype); if (!$this->memberSetmealRepository->updateSetmeal(['expire'=>1], $mysetmeal->id)) { return ['status'=>0,'msg'=>'更新会员套餐失败!']; }else{ return ['status'=>1]; } } /**处理职位 * @param $uid * @param $num */ public function checkJobsMeanwhile($uid, $num) { if (config('aix.companyset.setmeal_com.setmeal_com_set.hold_beyond_jobs') == 0) { $yid = []; $com_ids = []; $jobs = $this->jobsRepository->jobsSelect($uid); if (count($jobs) >$num) { foreach ($jobs as $key => $val) { if ($key >= $num) { $yid[] = $val->id; $com_ids[] = $val->company_id; } } } if (!empty($yid)) { $this->jobsRepository->closeJobs($yid); $condition = [['whereIn','id', $yid]]; event_search_update(Jobs::class, $condition, 'update'); event_search_update(Company::class, [['whereIn','id', $com_ids]], 'update'); } } } /**更新订单号 * @param $order_insert_id * @param $oid * @return mixed * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function updateOid($order_insert_id, $oid) { $data['oid'] = $oid; return $this->orderRepository->update($data, $order_insert_id); } /**支付成功页面 * @param $oid * @return array * @throws ResponseException */ public function setmealFinish($oid) { if (!$oid) { throw new ResponseException('订单ID有误', '', 404); } $user = auth('web-company')->user(); $order = $this->orderRepository->getOneOder($oid); if (!$order) { throw new ResponseException('参数错误', '', 404); } $mysetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype); if (!$mysetmeal) { throw new ResponseException('您的套餐信息有误', '', 404); } switch ($order->order_type){ case 1: //套餐升级 $setmealIncr=$this->setmealRepository->find($order->setmeal); $setmealIncrDay=$setmealIncr->days; //理因到期时间 $expireTimeBase=date("Y-m-d h:i:s",strtotime("+{$setmealIncrDay} day",$order->payment_time)); $res['expireTime']=$expireTimeBase; break; case 16:case 7:case 14:case 2:case 10:case 5://充值积分 随着会员到期而到期 $setmealIncrDay="无期限"; break; case 15: $setmealIncrDay="无期限"; break; case 8: case 9: case 12: case 13: $setmealIncr=$this->setmealIncrementsRepository->find($order->setmeal); $setmealIncrDay=$setmealIncr->value; //理因到期时间 $expireTimeBase=date("Y-m-d H:i:s",strtotime("+{$setmealIncrDay} day",$order->payment_time)); $expireTime=strtotime($expireTimeBase); //我会员的结束时间小于套餐的到期时间 if (strtotime($expireTimeBase)>strtotime($mysetmeal->endtime)) { $expireTime=strtotime($mysetmeal->endtime); } if($mysetmeal->endtime==0){//免费的 $expireTime=strtotime($expireTimeBase); } $res['expireTime']=date("Y-m-d H:i:s",$expireTime); break; default: $setmealIncrDay="--"; break; } $endtime = strtotime($mysetmeal->endtime) == 0?"永久":date('Y-m-d', strtotime($mysetmeal->endtime)); $res = [ 'mysetmeal'=>$mysetmeal, 'order'=>$order, 'endtime'=>$endtime, 'open_time'=>date("Y-m-d H:i:s",$order->payment_time), 'setmealIncrDay'=>$setmealIncrDay ]; return $res; } /**各项增值服务 * @return array */ public function increment($user) { $cat = $this->setmealIncrementsRepository->getIncrementCategory(); $result = []; $category = []; foreach ($cat as $key => $val) { $category[$val->cat] = $val->cat; if ($val->cat=='jobs' || $val->cat=='jobfair_num') { $result[$val->cat] = 0; } else { $result[$val->cat] =$this->setmealRepository->getMaxDiscount($val->cat); } } $member_setmeal = 0; $memberSetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype); if($memberSetmeal){ $member_setmeal = $memberSetmeal->discount_tpl; } // $result['download_resume'] =$this->setmealRepository->getMaxDiscount('download_resume'); // $result['sms'] =$this->setmealRepository->getMaxDiscount('sms'); // $result['jobs_num'] =$this->setmealRepository->getMaxDiscount('jobs_num'); // $result['jobfair_num'] =$this->setmealRepository->getMaxDiscount('jobfair_num'); // $result['stick'] =$this->setmealRepository->getMaxDiscount('stick'); // $result['emergency'] =$this->setmealRepository->getMaxDiscount('emergency'); // $result['tpl'] =$this->setmealRepository->getMaxDiscount('tpl'); // $result['auto_refresh_jobs'] =$this->setmealRepository->getMaxDiscount('auto_refresh_jobs'); // return $result; return $res=['result'=>$result,'category'=>$category,'member_setmeal'=>$member_setmeal]; } /**增值服务提示框 * @return array */ public function confirmPayIncrement($user) { $user = auth('web-company')->user(); $mysetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype); $setmeal_end_days = '永久'; if (strtotime($mysetmeal->endtime) == 0) { $tip = '您当前【'.$mysetmeal->setmeal_name.'】有效期 '.date('Y-m-d', $mysetmeal->starttime).'至永久。增值包有效期与会员有效期一致('.$setmeal_end_days.'),是否继续购买增值包?'; } else { if (strtotime($mysetmeal->endtime) > time()) { $sub_day = sub_day(strtotime($mysetmeal->endtime), time()); $sub_day = preg_replace('/(\d+)/', '<span class="font_yellow">\1</span>', $sub_day); $setmeal_end_days = $sub_day.'后到期'; } else { $setmeal_end_days = '已经到期'; } $tip = "您当前【".$mysetmeal->setmeal_name."】有效期".date('Y-m-d', $mysetmeal->starttime)."至".date('Y-m-d', strtotime($mysetmeal->endtime))."。增值包有效期与会员有效期一致(".$setmeal_end_days."),是否继续购买增值包?"; } return ['tip'=>$tip]; } /**单个增值服务包内容 * @param $cat * @param $request * @return array */ public function incrementAdd($cat, $request) { $catData = $this->setmealIncrementsRepository->cate_arr; $service_unit = $this->setmealIncrementsRepository->service_unit; $user = auth('web-company')->user(); $mysetmeal = $this->memberSetmealRepository->getSetmealByUid($user->id, $user->utype); $mypoints = $this->memberPointRepository->getComPointsById($user->id, $user->utype); $increment_rule = [ 'jobs'=>config('aix.companyset.business_set.points_set.jobs_num'), 'jobfair_num'=>config('aix.companyset.business_set.points_set.jobfair_num'), 'download_resume'=>config('aix.companyset.business_set.points_set.download_resume'), 'sms'=>config('aix.companyset.business_set.points_set.sms'), 'stick'=>config('aix.companyset.business_set.points_set.stick'), 'emergency'=>config('aix.companyset.business_set.points_set.emergency'), 'tpl'=>config('aix.companyset.business_set.points_set.tpl'), 'auto_refresh_jobs'=>config('aix.companyset.business_set.points_set.auto_refresh_jobs') ]; $offline = $this->paymentRepository->findWhere(['alias'=>'offline']); $online = $this->paymentRepository->findWhere([['alias','<>','offline']]); foreach ($offline as $key => &$val) { if (!config("aix.system.pay.{$val->alias}.is_on")) { unset($offline[$key]); } } foreach ($online as $key => &$val) { if (!config("aix.system.pay.{$val->alias}.is_on")) { unset($online[$key]); } } if ($cat == 'tpl') { $request_tpl = isset($request['tpl_id']) ? $request['tpl_id'] : 0; $cate_arr = $this->incrementAddTpl($mysetmeal, $request_tpl); } else { $cate_arr = $this->incrementAddNormal($cat, $mysetmeal); } $result = [ 'user'=>$user, 'mysetmeal'=>$mysetmeal, 'cate_arr'=>$cate_arr, 'catData'=>$catData, 'service_unit'=>$service_unit, 'cat'=>$cat, 'increment_rule'=>$increment_rule, 'online'=>$online, 'offline'=>$offline, 'mypoints'=>$mypoints, ]; return $result; } /** * 购买增值包 - 普通增值服务 */ protected function incrementAddNormal($cat, $mysetmeal) { $cate_arr = $this->setmealIncrementsRepository->findByField(['cat'=>$cat]); foreach ($cate_arr as $key => $val) { //如果是非免费套餐 if ($mysetmeal->is_free == 0) { $discount = $this->setmealRepository->getIncrementDiscountByArray($cat, $mysetmeal); //当前基础套餐套餐需要付的价格,如果折扣为0,则价格与原始价格一致 $cate_arr[$key]->my_price = $discount>0?round($val->price*$discount/10, 2):$val->price; //当前基础套餐的对应的折扣 $cate_arr[$key]->my_discount = $discount; //单条价格 $cate_arr[$key]->my_unit_price = round($cate_arr[$key]->my_price/$val->value, 2); //节省的数 $cate_arr[$key]->my_saved_price = $val->price-$cate_arr[$key]->my_price; } else { $free_discount = $this->setmealRepository->getIncrementDiscountByArray($cat, $mysetmeal); //免费会员需要付的价格 $cate_arr[$key]->my_price = $free_discount>0?round($val->price*$free_discount/10, 2):$val->price; //免费会员单条价格 $cate_arr[$key]->my_unit_price = round($cate_arr[$key]->my_price/$val->value, 2); //VIP会员价格,取出折扣最大的套餐折扣 $vip_discount = $this->setmealRepository->getMaxDiscount($cat); $cate_arr[$key]->vip_price = intval($vip_discount)>0?round($val->price*$vip_discount/10, 2):$val->price; //VIP会员单条价格 $cate_arr[$key]->vip_unit_price = round($cate_arr[$key]->vip_price/$val->value, 2); } //换算积分 $cate_arr[$key]->need_points = round($cate_arr[$key]->my_price*config('aix.companyset.points.points_set.payment_rate')); // 原为round() } $jobs_list = []; if ($cat=='stick' || $cat=='emergency' || $cat=='auto_refresh_jobs') { $jobs_where['company_id'] = auth('web-company')->user()->id; config('aix.companyset.comset.show_set.jobs_display') == 1 ? $jobs_where['audit'] = 1 : $jobs_where[] = ['audit','<>',3]; $jobs_where['valid'] = 1; $jobs_list = $this->jobsRepository->findWhere($jobs_where); if ($cat == 'auto_refresh_jobs') { foreach ($jobs_list as $key => $val) { $condition['pid'] = $val->id; $condition['type'] = 1; $condition['utype'] = auth('web-company')->user()->utype; $has_auto = $this->queueAutoRefreshRepository->findData($condition); $jobs_list[$key]->auto_refresh = $has_auto?1:0; } } } $buy_cn = ''; switch ($cat) { case 'stick': $buy_cn = '置顶'; break; case 'emergency': $buy_cn = '紧急'; break; case 'jobs': $buy_cn = '职位增值包'; break; case 'jobfair_num': $buy_cn = '招聘会场次'; break; } return [ 'cate_arr'=>$cate_arr, 'jobs_list'=>$jobs_list, 'buy_cn'=>$buy_cn, ]; } /**购买增值包 - 模版服务 * @param int $request_tpl * @return bool */ public function incrementAddTpl($mysetmeal, $request_tpl = 0) { if ($request_tpl >0) { $condition['id'] = $request_tpl; } else { $condition['tpl_type'] = 1; } $cate_arr =$this->tplRepository->findTpl($condition); foreach ($cate_arr as $key => $val) { $discount = $this->setmealRepository->getIncrementDiscountByArray('tpl', $mysetmeal); //当前基础套餐套餐需要付的价格,如果折扣为0,则价格与原始价格一致 $cate_arr[$key]->my_price = $discount>0?round($val->price/config('aix.companyset.points.points_set.payment_rate')*$discount/10, 2):($val->price/config('aix.companyset.points.points_set.payment_rate')); //当前基础套餐的对应的折扣 $cate_arr[$key]->my_discount = $discount; //换算积分 $cate_arr[$key]->need_points = $discount>0?round($val->price*$discount/10):$val->price; //原为round() $cate_arr[$key]->id = $val->id; // $cate_arr[$key]->thumb_dir = $val->dir;//模版位置 } return ['cate_arr'=>$cate_arr]; } public function pointsAdd() { $payment = $this->paymentRepository->get(); foreach ($payment as $key => $val) { if (!config("aix.system.pay.{$val->alias}.is_on")) { unset($payment[$key]); } } $result = [ 'payment'=>$payment, 'payment_rate'=>config('aix.companyset.points.points_set.payment_rate'), ]; return $result; } /**计算天数 * @param $days * @return string */ protected function formatDays($days) { if ($days < 30) { return $days . '天'; } else { return intval($days / 30) . '个月'; } } //添加会员操作日志 public function writeMembersLog($user, $type, $log_value) { return $this->memberLogRepository->createLog($user, $type, $log_value); } //添加积分操作日志 public function writeMemberHandselLog($data) { return $this->memberHandselRepository->create($data); } //清除积分 public function clearPoint($uid){ if (config("aix.companyset.points.points_set.clear_points")==1){ $point=$this->memberPointRepository->getPointsOne($uid,1); if (empty($point->points)){ //如果积分就是空,就不清空了 return null; } $this->memberPointRepository->updateNew($uid,1,['points'=>0]); try{ //添加消除记录 $this->memberHandselRepository->addNew(['uid'=>$uid,'utype'=>1, "htype"=>"points_clear", "htype_cn"=>"套餐到期,清空积分", "operate"=>"2","points"=>$point->points]); }catch (\Exception $exception){ } } } //检查套餐到期的问题 public function checkMemberSetmeal(){ $condition = [ ['endtime','>', time()],//到期时间大于当前时间 ['utype','=',1], ['expire','=',1] ]; $or=[ ['endtime',0], ['utype','=',1], ['expire','=',1] ]; $list = $this->memberSetmealRepository->checkSetmeals($condition,$or); if (!empty($list)){ foreach ($list as $item) { $log=[ 'item'=>$item, 'action'=>"修改了套餐是否到期" ]; $this->memberLogRepository->addDebugLog($log); $this->memberSetmealRepository->updateSetmeal(['expire'=>0],$item->id); } } return $list; } }