wupengfei 1 year ago
parent
commit
230d17175f

+ 16 - 12
.idea/workspace.xml

@@ -2,7 +2,11 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="1a36929e-c054-4875-a943-593a74e55fa4" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/application/common/model/RecruitResume.php" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/application/api/controller/General.php" beforeDir="false" afterPath="$PROJECT_DIR$/application/api/controller/General.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/application/api/controller/Recruit.php" beforeDir="false" afterPath="$PROJECT_DIR$/application/api/controller/Recruit.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/application/common/model/Recruit.php" beforeDir="false" afterPath="$PROJECT_DIR$/application/common/model/Recruit.php" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -137,7 +141,7 @@
     <property name="WebServerToolWindowPanel.toolwindow.show.date" value="false" />
     <property name="WebServerToolWindowPanel.toolwindow.show.permissions" value="false" />
     <property name="WebServerToolWindowPanel.toolwindow.show.size" value="false" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$/application/operate/controller" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/application/common/model" />
     <property name="node.js.detected.package.eslint" value="true" />
     <property name="node.js.detected.package.tslint" value="true" />
     <property name="node.js.path.for.package.eslint" value="project" />
@@ -148,6 +152,13 @@
     <property name="two.files.diff.last.used.folder" value="$PROJECT_DIR$" />
   </component>
   <component name="RecentsManager">
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="D:\zs\gaoyixia\application\common\model" />
+      <recent name="D:\zs\gaoyixia\application\operate\controller" />
+      <recent name="D:\zs\gaoyixia\application\operate\view" />
+      <recent name="D:\zs\gaoyixia\public\static" />
+      <recent name="D:\zs\gaoyixia\application\common\service" />
+    </key>
     <key name="MoveFile.RECENT_KEYS">
       <recent name="D:\zs\gaoyixia\public" />
       <recent name="D:\zs\gaoyixia\public\static" />
@@ -155,13 +166,6 @@
       <recent name="D:\zs\gaoyixia\public\a" />
       <recent name="D:\zs\gaoyixia\application\api\controller" />
     </key>
-    <key name="CopyFile.RECENT_KEYS">
-      <recent name="D:\zs\gaoyixia\application\operate\controller" />
-      <recent name="D:\zs\gaoyixia\application\operate\view" />
-      <recent name="D:\zs\gaoyixia\public\static" />
-      <recent name="D:\zs\gaoyixia\application\common\service" />
-      <recent name="D:\zs\gaoyixia\application\operate\view\recruit_cate" />
-    </key>
   </component>
   <component name="SvnConfiguration">
     <configuration />
@@ -385,7 +389,7 @@
       <workItem from="1690592199498" duration="13486000" />
       <workItem from="1690764472148" duration="16055000" />
       <workItem from="1690851419503" duration="20529000" />
-      <workItem from="1690938001930" duration="1490000" />
+      <workItem from="1690938001930" duration="9552000" />
     </task>
     <servers />
   </component>
@@ -515,10 +519,10 @@
       <screen x="0" y="0" width="2560" height="1400" />
     </state>
     <state x="1410" y="539" key="#com.intellij.fileTypes.FileTypeChooser/0.0.2560.1400@0.0.2560.1400" timestamp="1684374232836" />
-    <state x="1106" y="469" key="#com.jetbrains.php.actions.copyPaste.importReferences.PhpImportReferencesDialog" timestamp="1690512040659">
+    <state x="1106" y="469" key="#com.jetbrains.php.actions.copyPaste.importReferences.PhpImportReferencesDialog" timestamp="1690966036896">
       <screen x="0" y="0" width="2560" height="1400" />
     </state>
-    <state x="1106" y="469" key="#com.jetbrains.php.actions.copyPaste.importReferences.PhpImportReferencesDialog/0.0.2560.1400@0.0.2560.1400" timestamp="1690512040659" />
+    <state x="1106" y="469" key="#com.jetbrains.php.actions.copyPaste.importReferences.PhpImportReferencesDialog/0.0.2560.1400@0.0.2560.1400" timestamp="1690966036896" />
     <state x="420" y="147" width="1942" height="1088" key="DiffContextDialog" timestamp="1690615446290">
       <screen x="0" y="0" width="2560" height="1400" />
     </state>
@@ -576,7 +580,7 @@
         </line-breakpoint>
         <line-breakpoint enabled="true" type="php-line-method">
           <url>file://$PROJECT_DIR$/application/api/controller/Recruit.php</url>
-          <line>573</line>
+          <line>613</line>
           <properties>
             <option name="className" value="\app\api\controller\Recruit" />
             <option name="methodName" value="getFollowUpList" />

+ 2 - 2
application/api/controller/General.php

@@ -89,8 +89,8 @@ class General extends Base
      * @method POST
      * @url /api/General/switchSet
      * @header name:Authorization require:1 desc:Token
-     * @param name:id type:int require:1 default:-- desc:记录id
-     * @param name:type type:int require:1 default:-- desc:类型【1=>'问答通知开关',2=>'视频追更',3=>'图文追更',4=>'资料追更',5=>'供应商订阅',6=>'招聘追更',7=>'视频通知开关',8=>图文通知开关,9=>资料通知开关,10=>新闻通知,11=>供应商通知,12=>需求通知】
+     * @param name:id type:int require:1 default:-- desc:记录id【招聘订阅的是第三级分类id】
+     * @param name:type type:int require:1 default:-- desc:类型【1=>'问答通知开关',2=>'视频追更',3=>'图文追更',4=>'资料追更',5=>'供应商订阅',6=>'招聘订阅',7=>'视频通知开关',8=>图文通知开关,9=>资料通知开关,10=>新闻通知,11=>供应商通知,12=>需求通知】
      * @return name:status type:int default:1 desc:1开启0关闭
      */
     public function switchSet()

+ 93 - 53
application/api/controller/Recruit.php

@@ -1,8 +1,10 @@
 <?php
 namespace app\api\controller;
+use AlibabaCloud\SDK\Vod\V20170321\Models\GetMediaDNAResultResponseBody\DNAResult\videoDNA\detail\input;
 use app\common\model\PlatformLike;
 use app\common\model\PlatformSwitch;
 use app\common\model\RecruitCate;
+use app\common\model\RecruitResume;
 use app\common\model\User;
 use app\common\model\UserCollect;
 use app\common\model\UserSearch;
@@ -46,7 +48,7 @@ class Recruit extends Base
 
     /**
      * @title 获取招聘分类
-     * @desc  级分类
+     * @desc  级分类
      * @author  qc
      * @url /api/Recruit/getRecruitCate
      * @method GET
@@ -64,6 +66,73 @@ class Recruit extends Base
 
 
     /**
+     * @title 获取第三级分类
+     * @desc  获取第三级分类
+     * @author  qc
+     * @url /api/Recruit/getThirdCate
+     * @method GET
+     * @header name:Authorization require:1 desc:Token
+     * @param name:fid type:int  default:-- desc:一级分类id
+     * @param name:pid type:int default:-- desc:二级分类id【不传查一级分类下全部的三级分类】
+     * @return name:id type:int default:-- desc:分类id
+     * @return name:title type:string default:0 desc:分类名称
+     * @return name:lev type:int default:0 desc:分类等级
+     * @return name:children type:array default:0 desc:下级分类
+     *
+     */
+    public function getThirdCate()
+    {
+        $where = [];
+        $where[]=['is_deleted','=',0];
+        $where[]=['pid','=',input('fid')];
+        if(input('pid')) $where[] = ['id','=',input('pid')];
+        $list = RecruitCate::where($where)->field('id,title,pid,lev')->order('sort desc,id asc')->select()->toArray();
+        foreach ($list  as &$v) {
+            $v['children'] =  RecruitCate::where([['is_deleted','=',0],['pid','=',$v['id']]])->field('id,title,pid,lev')->order('sort desc,id asc')->select()->toArray();
+        }
+        $this->success('ok',['list'=>$list]);
+    }
+
+
+    /**
+     * @title 投递简历
+     * @desc  投递简历
+     * @author  qc
+     * @url /api/Recruit/sendResume
+     * @method POST
+     * @header name:Authorization require:1 desc:Token
+     * @param name:recruit_id type:int default:-- desc:招聘记录id
+     * @param name:images type:string default:0 desc:图片(多张|隔开)
+     */
+    public function sendResume()
+    {
+        $images = input('post.images');
+        if(empty($images)) $this->error('请上传图片');
+        RecruitResume::create(['user_id'=>$this->user_id,'recruit_id'=>input('post.recruit_id'),'images'=>$images]);
+        $this->success('投递成功');
+    }
+
+    /**
+     * @title 获取简历详情
+     * @desc  获取简历详情
+     * @author  qc
+     * @url /api/Recruit/getResumeInfo
+     * @method POST
+     * @header name:Authorization require:1 desc:Token
+     * @param name:resume_id type:int default:-- desc:简历记录id
+     * @return name:images type:string default:-- desc:图片
+     * @return name:images_arr type:array default:-- desc:数组
+     */
+    public function getResumeInfo()
+    {
+        $info  = RecruitResume::field('id,user_id,images,create_at')->where('id',input('get.resume_id'))->where(['user_id'=>$this->user_id,'is_deleted'=>0])->find();
+        if(!$info) $this->error('简历详情不存在');
+        $info = $info->toArray();
+        $info['images_arr'] = explode('|',$info['images']);
+        $this->success('ok',$info);
+    }
+
+    /**
      * @title 联系我们【两个二维码】(招聘详情内部)
      * @desc 联系HR
      * @author qc
@@ -92,7 +161,6 @@ class Recruit extends Base
 
      }
 
-
     /**
      * @title 招聘推荐
      * @desc 招聘推荐
@@ -157,53 +225,43 @@ class Recruit extends Base
     }
 
     /**
-     * @title 获取招聘列表
-     * @desc 获取招聘列表
+     * @title 合集列表
+     * @desc 合集列表
      * @author qc
      * @method GET
      * @url /api/Recruit/getRecruitList
      * @header name:Authorization require:1 desc:Token
-     * @param  name:title type:string default:-- desc:标题
      * @param  name:page type:int default:0 desc:页数
      * @param  name:page_num type:int default:20 desc:每页数
      * @param  name:sort_type type:int default:1 desc:1默认2时间升序3时间降序
      * @param  name:first_classify type:int default:0 desc:一级分类id
      * @param  name:second_classify type:int default:0 desc:二级分类id
+     * @param  name:third_classify type:int default:0 desc:三级分类id
      *
      * @return name:title type:string default:-- desc:标题
      * @return name:company type:string default:-- desc:公司名
      * @return name:cover type:string default:-- desc:公司logo
+     * @return name:salary type:int default:-- desc:薪资【文本】
      * @return name:phone type:string default:-- desc:电话
      * @return name:email type:string default:-- desc:email
      * @return name:label_name type:array default:-- desc:标签
      * @return name:welfare_arr type:array default:-- desc:岗位福利
-     * @return name:education type:string default:-- desc:学历
-     * @return name:experience_min type:int default:0 desc:最低工作年限
-     * @return name:experience_max type:int default:0 desc:最高工作年限
-     * @return name:price_min type:int default:-- desc:最低薪资[弃用]
-     * @return name:price_max type:int default:-- desc:最高薪资[弃用]
-     * @return name:salary type:int default:-- desc:薪资【文本】
-     * @return name:content type:string default:-- desc:招聘详情
-     * @return name:create_at type:string default:-- desc:发布时间
-     * @return name:first_classify type:int default:-- desc:一级分类id
-     * @return name:second_classify type:int default:-- desc:二级分类id
+     * @return name:principal type:string default:-- desc:HR
+     * @return name:hr_headimg type:string default:-- desc:HR头像
      * @return name:province type:string default:-- desc:省名
      * @return name:city type:string default:-- desc:市名
      * @return name:county type:string default:-- desc:县区
      * @return name:address type:string default:-- desc:地址
-     * @return name:longitude type:string default:-- desc:经度
-     * @return name:latitude type:string default:-- desc:纬度
      * @return name:num type:int default:-- desc:招聘人数
      * @return name:app_name type:string default:-- desc:发布方名称
      * @return name:app_logo type:string default:-- desc:发布方头像
+     * @return name:follow_switch type:int default:-- desc:订阅开关状态【0关闭1开启】
      */
     public function getRecruitList(){
-        $title = input('get.title');
         $sort_type = input('get.sort_type',1);
         $first_classify = input('get.first_classify');
         $second_classify = input('get.second_classify');
-        $app_name = sysconf('app_name');
-        $app_logo = sysconf('app_logo');
+        $third_classify = input('get.third_classify');
         switch ($sort_type) {
             case 1:
                 $order =   ['sort'=>'desc','read_num'=>'desc'];
@@ -221,30 +279,22 @@ class Recruit extends Base
         $sel_where[] = ['status','=',1];
         if($first_classify)  $sel_where[]  = ['first_classify','=',$first_classify];
         if($second_classify)  $sel_where[]  = ['second_classify','=',$second_classify];
-        if($title && $this->user_id) UserSearch::saveSearchTitle($this->user_id,$title,8);
-        $list = \app\common\model\Recruit::where($sel_where)
-            ->when($title,function ($query)use($title){
-                if($title) $query->where('title|label','like','%'.$title.'%');
-            })->order($order)->limit($this->off_set,$this->page_num)->select()->toArray();
+        if($third_classify)  $sel_where[]  = ['third_classify','=',$third_classify];
+        $field = "id,title,num,province,city,county,address,user_id,principal,hr_headimg,label,welfare";
+        $list = \app\common\model\Recruit::field($field)->where($sel_where)->order($order)->limit($this->off_set,$this->page_num)->select()->toArray();
         foreach ($list as &$v) {
             $v['label_name'] = $v['label']? explode(',',trim($v['label'],',')) : null;
             $v['welfare_arr'] = explode(',',trim($v['welfare'],','));
-            if(!$v['user_id']){
-                $v['app_name']  = $app_name;
-                $v['app_logo']  = $app_logo;
-            }else{
-                $user_info = User::where('id',$v['user_id'])->field('name,headimg')->find();
-                $v['app_name']  = $user_info ? $user_info->name : '';
-                $v['app_logo']  = $user_info ? $user_info->headimg : '';
-            }
+            $auth_info = \app\common\model\Recruit::getAuth($v['user_id'],APPNAME,APPLOGO);
+            $v['app_name']  = $auth_info['app_name'];
+            $v['app_logo']  = $auth_info['app_logo'];
         }
-        $total_num = \app\common\model\Recruit::where($sel_where)
-            ->when($title,function ($query)use($title){
-                if($title) $query->where('title|label','like','%'.$title.'%');
-            })->count();
-        $this->success('ok',['list'=>$list,'total_num'=>$total_num]);
+        $total_num = \app\common\model\Recruit::where($sel_where)->count();
+        $follow_switch =  PlatformSwitch::checkSwitch($this->user_id,$third_classify,6);
+        $this->success('ok',['list'=>$list,'follow_switch'=>$follow_switch,'total_num'=>$total_num,'total_count'=>$total_num,'page_num'=>$this->page_num]);
     }
 
+
     /**
      * @title 获取招聘详情
      * @desc 获取招聘详情
@@ -257,8 +307,8 @@ class Recruit extends Base
      * @return name:company type:string default:-- desc:公司名
      * @return name:cover type:string default:-- desc:公司logo
      * @return name:company_label type:array default:-- desc:公司标签
-     * @return name:principal type:string default:-- desc:联系人
-     * @return name:hr_headimg type:string default:-- desc:联系人头像
+     * @return name:principal type:string default:-- desc:RH
+     * @return name:hr_headimg type:string default:-- desc:RH头像
      * @return name:phone type:string default:-- desc:电话
      * @return name:email type:string default:-- desc:email
      * @return name:label_name type:array default:-- desc:标签
@@ -266,18 +316,15 @@ class Recruit extends Base
      * @return name:education type:string default:-- desc:学历
      * @return name:experience_min type:int default:0 desc:最低工作年限
      * @return name:experience_max type:int default:0 desc:最高工作年限
-     * @return name:price_min type:int default:-- desc:最低薪资[弃用]
-     * @return name:price_max type:int default:-- desc:最高薪资[弃用]
-     * @return name:salary type:int default:-- desc:薪资【文本】
+     * @return name:salary type:string:-- desc:薪资【文本】
      * @return name:content type:string default:-- desc:招聘详情
      * @return name:create_at type:string default:-- desc:发布时间
-     * @return name:first_classify type:int default:-- desc:一级分类id
-     * @return name:second_classify type:int default:-- desc:二级分类id
      * @return name:praise_num type:int default:-- desc:点赞量
      * @return name:is_praise type:int default:-- desc:是否点赞【0否1是】
      * @return name:is_collect type:int default:-- desc:是否收藏【0否1是】
      * @return name:collect_num type:int default:-- desc:收藏量
      * @return name:transmit_num type:int default:-- desc:转发量
+     * @return name:read_num type:int default:-- desc:阅读量
      * @return name:province type:string default:-- desc:省名
      * @return name:city type:string default:-- desc:市名
      * @return name:county type:string default:-- desc:县区
@@ -286,6 +333,7 @@ class Recruit extends Base
      * @return name:latitude type:string default:-- desc:纬度
      * @return name:num type:int default:-- desc:招聘人数
      * @return name:hr_code type:int default:-- desc:二维码
+     * @return name:follow_switch type:int default:-- desc:订阅开关状态【0关闭1开启】
      */
     public function getRecruitDetail()
     {
@@ -305,14 +353,6 @@ class Recruit extends Base
         $this->success('ok',['detail'=>$detail]);
     }
 
-    /**
-     * @title 以下接口调用验证登录【需要header传Authorization】
-     * @desc 以下接口调用验证登录
-     * @author qc
-     * @method
-     * @url /api/Recruit/needLogin()
-     */
-    public function needLogin(){}
 
     /**
      * @title 点赞||取消点赞

+ 38 - 0
application/common/model/Recruit.php

@@ -1,8 +1,46 @@
 <?php
 namespace app\common\model;
+use app\common\service\Elastic;
 use think\Model;
 // 招聘
 class Recruit extends Model
 {
+    public static function getAuth($user_id,$app_name,$app_logo)
+    {
+        $ret_val = [];
+        if(!$user_id) return ['app_name'=>$app_name,'app_logo'=>$app_logo];
+        $user_info = User::where('id',$user_id)->field('name,headimg')->find();
+        $ret_val['app_name']  = $user_info ? $user_info->name : '';
+        $ret_val['app_logo']  = $user_info ? $user_info->headimg : '';
+        return $ret_val;
+    }
+
+
+    public static function esAdd($id, $info = [])
+    {
+        if (empty($info)) $info = self::where('id', $id)->find()->toArray();
+        $index = config('text.es_index');
+        $properties = Elastic::getProperties($index);
+        $body_field = array_keys($properties);
+        $data = [];
+        foreach ($body_field as $v) {
+            switch ($v) {
+                case 'module':
+                    $data[$v] = 'recruit';
+                    break;
+                case 'level':
+                    $data[$v] = 0;
+                    break;
+                default:
+                    $data[$v] = isset($info[$v]) ? $info[$v] : '';
+                    break;
+            }
+        }
+        $data['create_at'] = isset($info['create_at']) ? strtotime($info['create_at']) : time();
+        $data['release_time'] = isset($info['release_time']) ? strtotime($info['release_time']) : time();
+        return Elastic::add($index, 'recruit_' . $info['id'], $data);
+
+
+    }
 
 }

+ 8 - 0
application/common/model/RecruitResume.php

@@ -0,0 +1,8 @@
+<?php
+namespace app\common\model;
+use think\Model;
+// 招聘简历
+class RecruitResume extends Model
+{
+
+}