lizeyu 10 mesiacov pred
rodič
commit
936ba55215

+ 81 - 0
h5app/src/App.vue

@@ -393,5 +393,86 @@ ion-grid {
   }
 }
 
+.cascade-model{
+    --height: 50%;
+    --border-radius: 16px;
+    --box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+
+
+  ::part(backdrop) {
+    background: rgba(209, 213, 219);
+    opacity: 1;
+  }
+
+  ion-toolbar {
+    --background: white;
+    --color: white;
+    padding-left: 0 !important;
+    padding-right: 0 !important;
+    --padding-start: 0;
+    --padding-end: 0;
+  }
+
+  ion-toolbar ion-item:first-child {
+    --inner-border-width: 0 0 0 0;
+    text-align: center;
+  }
+
+  ion-toolbar ion-item:last-child {
+    --padding-start: 0;
+    --inner-padding-end: 0;
+  }
+
+  ion-segment {
+    width: 100%;
+    --background: #ffffff;
+  }
+
+  ion-segment-button {
+    --indicator-color: rgba(254, 255, 255, 0.97);
+    --color: #000000;
+    --color-checked: #1a65eb;
+    --background-hover: rgba(47, 107, 215, 0.98);
+    --border-width: 0 0 0 0;
+    --indicator-box-shadow: 0 0 0 0;
+  }
+
+  /*!* Material Design styles *!*/
+  /*ion-segment-button.md {*/
+  /*  --color: #000;*/
+  /*  --color-checked: #1a65eb;*/
+  /*  --border-radius: 0px;*/
+  /*  --border-width: 0 0 0 0;*/
+  /*}*/
+
+  /*!* iOS styles *!*/
+  /*ion-segment-button.ios {*/
+  /*  --color: #000;*/
+  /*  --color-checked: #1a65eb;*/
+  /*  --border-radius: 0px;*/
+  /*  --border-width: 0 0 0 0;*/
+  /*}*/
+
+  .custom-scroll {
+    overflow-y: auto; /* 显示垂直滚动条 */
+    max-height: 200px; /* 设置最大高度,超出部分会出现滚动条 */
+  }
+
+  /* 可以根据需要自定义滚动条的样式 */
+  .custom-scroll::-webkit-scrollbar {
+    width: 8px;
+  }
+
+  .custom-scroll::-webkit-scrollbar-thumb {
+    background-color: #888;
+    border-radius: 4px;
+  }
+
+  .custom-scroll::-webkit-scrollbar-thumb:hover {
+    background-color: #555;
+  }
+
+}
+
 
 </style>

+ 13 - 0
h5app/src/api/recommendmgt/index.ts

@@ -91,6 +91,19 @@ export function getProfessionLevelList() {
     );
 }
 
+export function getProfessionLikeList(params: any) {
+    return request<any>(
+        {
+            url: "jobusermgr/recommendmgt/getProfessionLikeList",
+            method: 'get',
+            params: params,
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
 
 export function getOccupationCategoryList() {
     return request<object>(

+ 1 - 86
h5app/src/components/industrySelection.vue

@@ -1,94 +1,9 @@
-<style>
-ion-modal {
-  --height: 50%;
-  --border-radius: 16px;
-  --box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
-}
-
-ion-modal::part(backdrop) {
-  background: rgba(209, 213, 219);
-  opacity: 1;
-}
-
-ion-modal ion-toolbar {
-  --background: white;
-  --color: white;
-}
-
-ion-toolbar {
-  padding-left: 0 !important;
-  padding-right: 0 !important;
-  --padding-start: 0;
-  --padding-end: 0;
-}
-
-ion-toolbar ion-item:first-child {
-  --inner-border-width: 0 0 0 0;
-  text-align: center;
-}
-
-ion-toolbar ion-item:last-child {
-  --padding-start: 0;
-  --inner-padding-end: 0;
-}
-
-ion-segment {
-  width: 100%;
-  --background: #ffffff;
-}
-
-ion-segment-button {
-  --indicator-color: rgba(254, 255, 255, 0.97);
-  --color: #000000;
-  --color-checked: #1a65eb;
-  --background-hover: rgba(47, 107, 215, 0.98);
-  --border-width: 0 0 0 0;
-  --indicator-box-shadow: 0 0 0 0;
-}
-
-/*!* Material Design styles *!*/
-/*ion-segment-button.md {*/
-/*  --color: #000;*/
-/*  --color-checked: #1a65eb;*/
-/*  --border-radius: 0px;*/
-/*  --border-width: 0 0 0 0;*/
-/*}*/
-
-/*!* iOS styles *!*/
-/*ion-segment-button.ios {*/
-/*  --color: #000;*/
-/*  --color-checked: #1a65eb;*/
-/*  --border-radius: 0px;*/
-/*  --border-width: 0 0 0 0;*/
-/*}*/
-
-.custom-scroll {
-  overflow-y: auto; /* 显示垂直滚动条 */
-  max-height: 200px; /* 设置最大高度,超出部分会出现滚动条 */
-}
-
-/* 可以根据需要自定义滚动条的样式 */
-.custom-scroll::-webkit-scrollbar {
-  width: 8px;
-}
-
-.custom-scroll::-webkit-scrollbar-thumb {
-  background-color: #888;
-  border-radius: 4px;
-}
-
-.custom-scroll::-webkit-scrollbar-thumb:hover {
-  background-color: #555;
-}
-
-</style>
-
 <template>
   <ion-button id="open-modal" style="color: #02a6f1;font-size: 15px;" fill="clear" @click="loadIndustryID">选择
   </ion-button>
   <ion-page>
     <ion-content class="ion-padding">
-      <ion-modal trigger="open-modal" :backdrop-dismiss="false" :is-open="isOpen" :initial-breakpoint="1"
+      <ion-modal class="cascade-model" trigger="open-modal" :backdrop-dismiss="false" :is-open="isOpen" :initial-breakpoint="1"
                  :breakpoints="[0, 1]">
         <ion-toolbar>
           <ion-item>

+ 1 - 86
h5app/src/components/ocCategorySelection.vue

@@ -1,94 +1,9 @@
-<style>
-ion-modal {
-  --height: 50%;
-  --border-radius: 16px;
-  --box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
-}
-
-ion-modal::part(backdrop) {
-  background: rgba(209, 213, 219);
-  opacity: 1;
-}
-
-ion-modal ion-toolbar {
-  --background: white;
-  --color: white;
-}
-
-ion-toolbar {
-  padding-left: 0 !important;
-  padding-right: 0 !important;
-  --padding-start: 0;
-  --padding-end: 0;
-}
-
-ion-toolbar ion-item:first-child {
-  --inner-border-width: 0 0 0 0;
-  text-align: center;
-}
-
-ion-toolbar ion-item:last-child {
-  --padding-start: 0;
-  --inner-padding-end: 0;
-}
-
-ion-segment {
-  width: 100%;
-  --background: #ffffff;
-}
-
-ion-segment-button {
-  --indicator-color: rgba(254, 255, 255, 0.97);
-  --color: #000000;
-  --color-checked: #1a65eb;
-  --background-hover: rgba(47, 107, 215, 0.98);
-  --border-width: 0 0 0 0;
-  --indicator-box-shadow: 0 0 0 0;
-}
-
-/*!* Material Design styles *!*/
-/*ion-segment-button.md {*/
-/*  --color: #000;*/
-/*  --color-checked: #1a65eb;*/
-/*  --border-radius: 0px;*/
-/*  --border-width: 0 0 0 0;*/
-/*}*/
-
-/*!* iOS styles *!*/
-/*ion-segment-button.ios {*/
-/*  --color: #000;*/
-/*  --color-checked: #1a65eb;*/
-/*  --border-radius: 0px;*/
-/*  --border-width: 0 0 0 0;*/
-/*}*/
-
-.custom-scroll {
-  overflow-y: auto; /* 显示垂直滚动条 */
-  max-height: 200px; /* 设置最大高度,超出部分会出现滚动条 */
-}
-
-/* 可以根据需要自定义滚动条的样式 */
-.custom-scroll::-webkit-scrollbar {
-  width: 8px;
-}
-
-.custom-scroll::-webkit-scrollbar-thumb {
-  background-color: #888;
-  border-radius: 4px;
-}
-
-.custom-scroll::-webkit-scrollbar-thumb:hover {
-  background-color: #555;
-}
-
-</style>
-
 <template>
   <ion-button id="open-modal" style="color: #02a6f1;font-size: 15px;" fill="clear" @click="loadOccupationalID">选择
   </ion-button>
   <ion-page>
     <ion-content class="ion-padding">
-      <ion-modal trigger="open-modal" :backdrop-dismiss="false" :is-open="isOpen" :initial-breakpoint="1"
+      <ion-modal class="cascade-model" trigger="open-modal" :backdrop-dismiss="false" :is-open="isOpen" :initial-breakpoint="1"
                  :breakpoints="[0, 1]">
         <ion-toolbar>
           <ion-item>

+ 2 - 87
h5app/src/components/postSelection.vue

@@ -1,94 +1,9 @@
-<style>
-ion-modal {
-  --height: 50%;
-  --border-radius: 16px;
-  --box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
-}
-
-ion-modal::part(backdrop) {
-  background: rgba(209, 213, 219);
-  opacity: 1;
-}
-
-ion-modal ion-toolbar {
-  --background: white;
-  --color: white;
-}
-
-ion-toolbar {
-  padding-left: 0 !important;
-  padding-right: 0 !important;
-  --padding-start: 0;
-  --padding-end: 0;
-}
-
-ion-toolbar ion-item:first-child {
-  --inner-border-width: 0 0 0 0;
-  text-align: center;
-}
-
-ion-toolbar ion-item:last-child {
-  --padding-start: 0;
-  --inner-padding-end: 0;
-}
-
-ion-segment {
-  width: 100%;
-  --background: #ffffff;
-}
-
-ion-segment-button {
-  --indicator-color: rgba(254, 255, 255, 0.97);
-  --color: #000000;
-  --color-checked: #1a65eb;
-  --background-hover: rgba(47, 107, 215, 0.98);
-  --border-width: 0 0 0 0;
-  --indicator-box-shadow: 0 0 0 0;
-}
-
-/*!* Material Design styles *!*/
-/*ion-segment-button.md {*/
-/*  --color: #000;*/
-/*  --color-checked: #1a65eb;*/
-/*  --border-radius: 0px;*/
-/*  --border-width: 0 0 0 0;*/
-/*}*/
-
-/*!* iOS styles *!*/
-/*ion-segment-button.ios {*/
-/*  --color: #000;*/
-/*  --color-checked: #1a65eb;*/
-/*  --border-radius: 0px;*/
-/*  --border-width: 0 0 0 0;*/
-/*}*/
-
-.custom-scroll {
-  overflow-y: auto; /* 显示垂直滚动条 */
-  max-height: 200px; /* 设置最大高度,超出部分会出现滚动条 */
-}
-
-/* 可以根据需要自定义滚动条的样式 */
-.custom-scroll::-webkit-scrollbar {
-  width: 8px;
-}
-
-.custom-scroll::-webkit-scrollbar-thumb {
-  background-color: #888;
-  border-radius: 4px;
-}
-
-.custom-scroll::-webkit-scrollbar-thumb:hover {
-  background-color: #555;
-}
-
-</style>
-
 <template>
   <ion-button id="open-modal" style="color: #02a6f1;font-size: 15px;" fill="clear" @click="loadProfessionInfo">选择
   </ion-button>
-  <ion-page>
+  <ion-page >
     <ion-content class="ion-padding">
-      <ion-modal trigger="open-modal" :backdrop-dismiss="false" @willPresent="onRest()" :is-open="isOpen" :initial-breakpoint="1"
+      <ion-modal class="cascade-model" trigger="open-modal" :backdrop-dismiss="false" @willPresent="onRest()" :is-open="isOpen" :initial-breakpoint="1"
                  :breakpoints="[0, 1]">
         <ion-toolbar>
           <ion-item>

+ 158 - 0
h5app/src/components/postSelectionLike.vue

@@ -0,0 +1,158 @@
+<template>
+  <ion-button id="postSelectionLike" style="color: #02a6f1;font-size: 15px;" fill="clear" @click="onOpen">选择
+  </ion-button>
+  <ion-page>
+    <ion-content class="ion-padding">
+      <ion-modal trigger="postSelectionLike" :is-open="isOpen" @willPresent="onRest">
+        <ion-header class="header-theme2">
+          <ion-toolbar>
+            <ion-buttons slot="start">
+              <ion-icon :icon="arrowBackOutline" @click="onOpen"></ion-icon>
+            </ion-buttons>
+            <ion-title>岗位名称</ion-title>
+            <ion-buttons slot="end">
+              <ion-button fill="clear" @click="onConfirm">确定</ion-button>
+            </ion-buttons>
+          </ion-toolbar>
+        </ion-header>
+        <ion-content class="ion-padding">
+          <ion-item class="search-item" style="--border-style: unset; --inner-padding-end: 0px;--padding-start: 0px;">
+            <ion-input placeholder="岗位名称" class="custom"
+                       v-model="searchParams.professionName"
+                       @input="reload" :clear-on-edit="true"
+                       style="border: 1px solid #f2f2f5;border-radius: 14px;--padding-start: 10px;height: 35px;">
+              <ion-icon slot="start" :icon="searchOutline" aria-hidden="true"></ion-icon>
+            </ion-input>
+          </ion-item>
+          <div class="bw-vue-list">
+            <div class="list-content">
+              <ion-list>
+                <ion-item v-for="(record,key) in dataList" :key="key">
+                  <ion-label @click="onSelect(record)" >
+                    <span v-html="formatStr(record.professionName)"></span>({{record.parentProfessionName}})
+                  </ion-label>
+                </ion-item>
+              </ion-list>
+              <b-empty v-if="dataList.length<=0" :loading="loading"/>
+              <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
+                <ion-infinite-scroll-content
+                    :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
+                    loadingSpinner="bubbles">
+                </ion-infinite-scroll-content>
+              </ion-infinite-scroll>
+            </div>
+          </div>
+        </ion-content>
+      </ion-modal>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script lang="ts">
+
+import {computed, defineComponent, reactive, ref} from 'vue';
+import {arrowBackOutline, searchOutline} from 'ionicons/icons';
+import {IonIcon} from '@ionic/vue';
+import BEmpty from "@/components/empty.vue";
+import {getProfessionLikeList} from "@/api/recommendmgt";
+
+export default defineComponent({
+  name: 'postSelectLike',
+  components: {IonIcon, BEmpty},
+  props: {},
+  setup(props, context) {
+    const total = ref(20);
+    const loading = ref(true);
+    const pagination = computed(() => ({
+      total: total,
+      current: searchParams.pageIndex,
+      pageSize: searchParams.pageSize
+    }));
+    const searchParams = reactive({
+      pageIndex: 1,
+      pageSize: 10,
+      professionName: '',
+    });
+    const isOpen = ref(false);
+    const dataList = ref<any>([]);
+    const resultInfo = reactive({value: '', text: ''})
+
+    const loadData = async function () {
+      loading.value = true;
+      getProfessionLikeList(searchParams).then(data => {
+        dataList.value = dataList.value.concat(data.list);
+        total.value = data.total;
+      })
+      loading.value = false;
+    }
+
+    const reload = () => {
+      dataList.value = [];
+      searchParams.pageIndex = 1;
+      loadData();
+    }
+
+    const onScroll = (e: any) => {
+      setTimeout(() => {
+        e.target.complete();
+        if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
+          searchParams.pageIndex += 1;
+          loadData();
+        }
+      }, 500);
+    }
+
+    const onConfirm = () => {
+      resultInfo.text = searchParams.professionName;
+      context.emit("resultInfo", resultInfo);
+      onOpen();
+    }
+
+    const onSelect = (item: any) => {
+      resultInfo.text = item.professionName;
+      resultInfo.value = item.professionID;
+      context.emit("resultInfo", resultInfo);
+      onOpen();
+    }
+
+    const onOpen = () => {
+      isOpen.value = !isOpen.value;
+    }
+
+    const onRest = () => {
+      dataList.value = [];
+      searchParams.professionName = '';
+      searchParams.pageIndex = 1;
+      resultInfo.text = '';
+      resultInfo.value = '';
+    }
+
+    const formatStr = (str: any) => {
+      if(!str){
+        return "";
+      }
+
+      return str.replace(searchParams.professionName,'<span style="color: coral">'+searchParams.professionName+'</span>');
+    }
+
+    return {
+      searchOutline,
+      arrowBackOutline,
+      total,
+      loading,
+      isOpen,
+      dataList,
+      pagination,
+      searchParams,
+      onConfirm,
+      onSelect,
+      onOpen,
+      onScroll,
+      loadData,
+      reload,
+      onRest,
+      formatStr
+    }
+  }
+});
+</script>

+ 16 - 8
h5app/src/views/pages/post/edit.vue

@@ -30,11 +30,11 @@
           <div class="form-input">
             <ion-label>岗位名称<span class="danger">*</span></ion-label>
             <ion-item :class="[v$.dataModel.professionName.$error?'ion-invalid':'ion-valid']">
-              <ion-input readonly placeholder="请选择岗位" label-placement="stacked" :clear-input="true"
-                         v-model="dataModel.professionName" class="custom">
+              <ion-input readonly placeholder="请输入岗位" label-placement="stacked" :clear-input="true"
+                        @click="onOpenPost"  v-model="dataModel.professionName" class="custom">
               </ion-input>
-              <post-selection :ProfessionID="dataModel.professionID" @SetProfessionID="onSetProfessionID"></post-selection>
-              <ion-note slot="error">请选择岗位</ion-note>
+              <post-selection-like ref="refPOstSelectionLike" @resultInfo="onResultInfo"></post-selection-like>
+              <ion-note slot="error">请输入岗位</ion-note>
             </ion-item>
           </div>
           <div class="form-input">
@@ -199,11 +199,12 @@ import {getSysDictionaryList} from "@/api/system/dictionary";
 import {getCompanyBySiteID} from "@/api/company";
 import {useUserStore} from '@/store/modules/user';
 import dayjs from "dayjs";
-import PostSelection from "@/components/postSelection.vue";
+// import PostSelection from "@/components/postSelection.vue";
+import PostSelectionLike from "@/components/postSelectionLike.vue";
 
 export default defineComponent({
   name: 'PostEdit',
-  components:{PostSelection},
+  components:{PostSelectionLike},
   setup() {
     const router = useRouter();
     const route = useRoute();
@@ -252,6 +253,7 @@ export default defineComponent({
     const workYearList = ref([]);
     const cultureRankList = ref([]);
     const companyList = ref([]);
+    const refPOstSelectionLike = ref();
 
     const presentAlert = async (message: string) => {
       const alert = await alertController.create({
@@ -263,7 +265,7 @@ export default defineComponent({
       });
       await alert.present();
     }
-    const onSetProfessionID = (data: any)=>{
+    const onResultInfo = (data: any)=>{
       formState.dataModel.professionID = data.value;
       formState.dataModel.professionName = data.text;
     }
@@ -280,6 +282,10 @@ export default defineComponent({
       })
     }
 
+    const onOpenPost = () => {
+      refPOstSelectionLike.value.onOpen();
+    }
+
     const back = () => {
       router.push({path: "./list", query: {reload: 1}});
     }
@@ -321,6 +327,8 @@ export default defineComponent({
       chevronDownOutline,
       chevronUpOutline,
       arrowBackOutline,
+      refPOstSelectionLike,
+      onOpenPost,
       route,
       router,
       isShow,
@@ -330,7 +338,7 @@ export default defineComponent({
       workYearList,
       cultureRankList,
       v$,
-      onSetProfessionID,
+      onResultInfo,
       onSave,
       back,
     }

+ 8 - 0
src/main/java/com/hz/employmentsite/controller/jobUserManager/RecommendMgtController.java

@@ -84,6 +84,14 @@ public class RecommendMgtController {
         return RespGenerstor.success(result);
     }
 
+    @ResponseBody
+    @GetMapping("/getProfessionLikeList")
+    public BaseResponse getProfessionLikeList(@RequestParam("pageIndex") int pageIndex, @RequestParam("pageSize") int pageSize,
+                                              @RequestParam("professionName") String professionName) {
+        PageInfo<ProfessionLevel> result = recommendMgtService.getProfessionLikeList(pageIndex, pageSize, professionName);
+        return RespGenerstor.success(result);
+    }
+
     @ResponseBody
     @GetMapping("/getOccupationCategoryList")
     public BaseResponse getOccupationCategoryList() {

+ 31 - 26
src/main/java/com/hz/employmentsite/mapper/cquery/RecommendMgtCQuery.java

@@ -1,5 +1,6 @@
 package com.hz.employmentsite.mapper.cquery;
 
+import com.hz.employmentsite.model.PcProfession;
 import com.hz.employmentsite.vo.jobUserManager.*;
 import org.apache.ibatis.annotations.Param;
 
@@ -23,46 +24,50 @@ public interface RecommendMgtCQuery {
 
     /**
      * 获取推荐岗位信息
-     * @param jobHuntID 求职意向id
-     * @param professionID 岗位id
-     * @param companyName 企业名称
-     * @param type 0-未推荐;1-已推荐
+     *
+     * @param jobHuntID          求职意向id
+     * @param professionID       岗位id
+     * @param companyName        企业名称
+     * @param type               0-未推荐;1-已推荐
      * @param parentProfessionID 岗位父级id
-     * @param cultureRank 学历编号
-     * @param workYear 工作年限
-     * @param minSalary 最低薪资
-     * @param maxSalary 最高薪资
+     * @param cultureRank        学历编号
+     * @param workYear           工作年限
+     * @param minSalary          最低薪资
+     * @param maxSalary          最高薪资
      * @return
-     * */
-    List<RecommendCompanyPostVo> getRecommendCompanyPostList(@Param("jobHuntID")String jobHuntID, @Param("professionID") String professionID,
-                                                             @Param("companyName")String companyName, @Param("type") Integer type,
-                                                             @Param("parentProfessionID")String parentProfessionID, @Param("cultureRank") Integer cultureRank,
-                                                              @Param("workYear") Integer workYear,@Param("minSalary")Integer minSalary,
-                                                             @Param("maxSalary")Integer maxSalary);
+     */
+    List<RecommendCompanyPostVo> getRecommendCompanyPostList(@Param("jobHuntID") String jobHuntID, @Param("professionID") String professionID,
+                                                             @Param("companyName") String companyName, @Param("type") Integer type,
+                                                             @Param("parentProfessionID") String parentProfessionID, @Param("cultureRank") Integer cultureRank,
+                                                             @Param("workYear") Integer workYear, @Param("minSalary") Integer minSalary,
+                                                             @Param("maxSalary") Integer maxSalary);
 
     /**
      * 获取推荐求职人员信息
-     * @param postID 企业岗位id
+     *
+     * @param postID       企业岗位id
      * @param professionID 岗位id
-     * @param userName 求职人员姓名
-     * @param type 0-未推荐;1-已推荐
+     * @param userName     求职人员姓名
+     * @param type         0-未推荐;1-已推荐
      * @return
-     * */
-    List<RecommendJobVo> getRecommendJobList(@Param("postID")String postID, @Param("professionID") String professionID,
-                                             @Param("userName")String userName, @Param("type") Integer type,
+     */
+    List<RecommendJobVo> getRecommendJobList(@Param("postID") String postID, @Param("professionID") String professionID,
+                                             @Param("userName") String userName, @Param("type") Integer type,
                                              @Param("cultureRank") Integer cultureRank, @Param("keyPersonType") Integer keyPersonType,
-                                             @Param("parentProfessionID")String parentProfessionID,
-                                             @Param("workYear") Integer workYear,@Param("minSalary")Integer minSalary,
-                                             @Param("maxSalary")Integer maxSalary);
+                                             @Param("parentProfessionID") String parentProfessionID,
+                                             @Param("workYear") Integer workYear, @Param("minSalary") Integer minSalary,
+                                             @Param("maxSalary") Integer maxSalary);
 
-   List<ProfessionLevel> getProfessionLevelList();
+    List<ProfessionLevel> getProfessionLevelList();
 
-   List<OccupationCategory> getOccupationCategoryList();
+    List<ProfessionLevel> getProfessionLikeList(@Param("professionName") String professionName);
 
-   List<IndustryLevel> getAllIndustryList();
+    List<OccupationCategory> getOccupationCategoryList();
 
+    List<IndustryLevel> getAllIndustryList();
 
     List<HashMap<String, Object>> getCompanypostToUsermessageList();
+
     List<HashMap<String, Object>> getUserhuntpostToCompanymessageList();
 
 }

+ 37 - 0
src/main/java/com/hz/employmentsite/services/impl/companyService/PostServiceImpl.java

@@ -6,6 +6,7 @@ import com.hz.employmentsite.filter.exception.BaseException;
 import com.hz.employmentsite.mapper.*;
 import com.hz.employmentsite.mapper.cquery.LabelCQuery;
 import com.hz.employmentsite.mapper.cquery.PostCQuery;
+import com.hz.employmentsite.mapper.cquery.RecommendMgtCQuery;
 import com.hz.employmentsite.model.*;
 import com.hz.employmentsite.services.service.companyService.PostService;
 import com.hz.employmentsite.services.service.system.DictionaryService;
@@ -54,6 +55,9 @@ public class PostServiceImpl implements PostService {
     @Autowired
     private LabelCQuery labelCQuery;
 
+    @Autowired
+    private RecommendMgtCQuery recommendMgtCQuery;
+
     @Override
     public PageInfo<PostVo> getList(Integer page, Integer rows, List<String> postIDList,
                                     String professionName, Integer minCount, Integer maxCount,
@@ -133,6 +137,39 @@ public class PostServiceImpl implements PostService {
             dbData = pcPostMapper.selectByExample(exp).stream().findFirst().orElse(null);
         }
 
+        //判断岗位id是否为空
+        if (stringUtils.IsNullOrEmpty(data.professionID)) {
+            PcProfessionExample proEmp = new PcProfessionExample();
+            PcProfessionExample.Criteria proCia = proEmp.or();
+            proCia.andParentProfessionIDNotEqualTo("");
+            proCia.andProfessionNameEqualTo("其他");
+            //获取二级其他信息
+            PcProfession proOther = pcProfessionMapper.selectByExample(proEmp).stream().findFirst().orElse(null);
+            if (proOther != null) {
+                proEmp = new PcProfessionExample();
+                proEmp.or().andParentProfessionIDEqualTo(proOther.getProfessionID());
+//                proCia.andProfessionNameEqualTo(data.getProfessionName());
+
+                //查询其他岗位
+                List<PcProfession> proOtherSonList = pcProfessionMapper.selectByExample(proEmp);
+                PcProfession proOtherSon = proOtherSonList.stream()
+                        .filter(x -> x.getProfessionName().equals(data.getProfessionName())).findFirst().orElse(null);
+                if (proOtherSon != null) {
+                    data.setProfessionID(proOtherSon.getProfessionID());
+                } else {
+                    data.setProfessionID(UUID.randomUUID().toString());
+                    PcProfession proModel = new PcProfession();
+                    proModel.setProfessionID(data.getProfessionID());
+                    proModel.setParentProfessionID(proOther.getProfessionID());
+                    proModel.setProfessionName(data.getProfessionName());
+                    proModel.setStatus(Integer.parseInt("1"));
+                    proModel.setOrderNo(proOtherSonList.size() + 1);
+
+                    pcProfessionMapper.insert(proModel);
+                }
+            }
+        }
+
         if (dbData == null) {
             dbData = new PcPost();
             dbData.setPostID(UUID.randomUUID().toString());

+ 14 - 0
src/main/java/com/hz/employmentsite/services/impl/jobUserManager/RecommendMgtServiceImpl.java

@@ -124,12 +124,26 @@ public class RecommendMgtServiceImpl implements RecommendMgtService {
         return result;
     }
 
+    @Override
     public List<ProfessionLevel> getProfessionLevelList() {
         return recommendMgtCQuery.getProfessionLevelList();
     }
 
+    @Override
+    public PageInfo<ProfessionLevel> getProfessionLikeList(Integer page, Integer rows,String professionName) {
+        PageHelper.startPage(page, rows);
+
+        List<ProfessionLevel> list = recommendMgtCQuery.getProfessionLikeList(professionName);
+
+        PageInfo<ProfessionLevel> result = new PageInfo(list);
+
+        return result;
+    }
+
+    @Override
     public List<OccupationCategory> getOccupationCategoryList() {return recommendMgtCQuery.getOccupationCategoryList();}
 
+    @Override
     public List<IndustryLevel> getAllIndustryList() {return recommendMgtCQuery.getAllIndustryList();}
 
     @Override

+ 2 - 0
src/main/java/com/hz/employmentsite/services/service/jobUserManager/RecommendMgtService.java

@@ -65,6 +65,8 @@ public interface RecommendMgtService {
 
     List<ProfessionLevel> getProfessionLevelList();
 
+    PageInfo<ProfessionLevel> getProfessionLikeList(Integer page, Integer rows,String professionName) ;
+
     List<OccupationCategory> getOccupationCategoryList();
 
     List<IndustryLevel> getAllIndustryList();

+ 1 - 0
src/main/java/com/hz/employmentsite/vo/jobUserManager/ProfessionLevel.java

@@ -5,4 +5,5 @@ import com.hz.employmentsite.model.PcProfession;
 
 public class ProfessionLevel extends PcProfession {
     public String professionLevel;
+    public String parentProfessionName;
 }

+ 32 - 6
src/main/resources/mapping/cquery/RecommendMgtCQuery.xml

@@ -87,8 +87,10 @@
         left join pc_company b on a.CompanyID = b.CompanyID
         left join pc_profession c on a.ProfessionID = c.ProfessionID
         left join pc_recommend_mgt d on a.PostID = d.PostID and d.JobHuntID = #{jobHuntID}
-        left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='CultureLevel') dic1 on a.CultureRank = dic1.`Value`
-        left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='WorkYearType') dic2 on a.WorkYear = dic2.`Value`
+        left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='CultureLevel') dic1 on
+        a.CultureRank = dic1.`Value`
+        left join (select `Value`,`Name` from sys_dictionary_item where DictionaryCode='WorkYearType') dic2 on
+        a.WorkYear = dic2.`Value`
         <where>
             <if test="type!=null and type==0">
                 and d.RecommendMgtID is null
@@ -216,6 +218,30 @@
                                                  on a.ParentProfessionID = b.ProfessionID) bb
                             on c.ParentProfessionID = bb.ProfessionID
     </select>
+    <select id="getProfessionLikeList" resultType="com.hz.employmentsite.vo.jobUserManager.ProfessionLevel">
+        select aa.ProfessionID, aa.ParentProfessionID, aa.ProfessionName, bb.ProfessionName as ParentProfessionName
+        from (
+        select c.ProfessionID, c.ParentProfessionID, c.ProfessionName,c.OrderNo
+        from pc_profession c
+        inner join (select a.ProfessionID
+        from pc_profession a
+        inner join (select ProfessionID from pc_profession where ParentProfessionID = '') b
+        on a.ParentProfessionID = b.ProfessionID) bb
+        on c.ParentProfessionID = bb.ProfessionID
+        <where>
+            <choose>
+                <when test="professionName!=null and professionName!=''">
+                    and c.ProfessionName like Concat('%',#{professionName},'%')
+                </when>
+                <otherwise>
+                    and 1!=1
+                </otherwise>
+            </choose>
+        </where>
+        ) aa
+        left join pc_profession bb on aa.ParentProfessionID = bb.ProfessionID
+        order by bb.OrderNo,aa.OrderNo
+    </select>
     <select id="getOccupationCategoryList" resultType="com.hz.employmentsite.vo.jobUserManager.OccupationCategory">
         select OccupationalID, ParentOccupationalID, OccupationalName, '1' as OccupationalLevel
         from pc_occupational
@@ -238,9 +264,9 @@
     </select>
     <select id="getCompanypostToUsermessageList" resultType="java.util.HashMap">
         select a.recommendmgtid,
-               e.openId     as userOpenId,
+               e.openId         as userOpenId,
                c.companyname,
-               c.usermobile as companymobile,
+               c.usermobile     as companymobile,
                f.professionname as postName
         from pc_recommend_mgt a
                  inner join pc_post b on a.PostID = b.PostID
@@ -253,8 +279,8 @@
     </select>
     <select id="getUserhuntpostToCompanymessageList" resultType="java.util.HashMap">
         select a.recommendmgtid,
-               c.openId   as companyOpenId,
-               e.`name`   as userName,
+               c.openId          as companyOpenId,
+               e.`name`          as userName,
                e.usermobile,
                f2.professionname as userHuntPostName
         from pc_recommend_mgt a