Selaa lähdekoodia

完善主页逻辑

王育民 5 vuotta sitten
vanhempi
commit
9c05d49713

+ 11 - 2
src/main/java/cn/minbb/job/controller/web/JobController.java

@@ -4,6 +4,7 @@ import cn.minbb.job.data.Const;
 import cn.minbb.job.model.Job;
 import cn.minbb.job.service.JobService;
 import lombok.extern.log4j.Log4j2;
+import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -41,14 +42,22 @@ public class JobController {
     }
 
     @GetMapping("/full")
-    public ModelAndView jobFullPage(ModelAndView modelAndView) {
+    public ModelAndView jobFullPage(
+            @RequestParam(name = "page", defaultValue = "1", required = false) Integer page,
+            @RequestParam(name = "size", defaultValue = "9", required = false) Integer size,
+            ModelAndView modelAndView) {
+        Page<Job> jobPage = jobService.findAllByTypeWithPage("全职", page, size);
         modelAndView.addObject(Const.Key.KEY_ACTIVE, Const.ViewName.VIEW_JOB_FULL);
         modelAndView.setViewName(Const.ViewName.VIEW_JOB_FULL);
         return modelAndView;
     }
 
     @GetMapping("/practice")
-    public ModelAndView jobPracticePage(ModelAndView modelAndView) {
+    public ModelAndView jobPracticePage(
+            @RequestParam(name = "page", defaultValue = "1", required = false) Integer page,
+            @RequestParam(name = "size", defaultValue = "9", required = false) Integer size,
+            ModelAndView modelAndView) {
+        Page<Job> jobPage = jobService.findAllByTypeWithPage("实习", page, size);
         modelAndView.addObject(Const.Key.KEY_ACTIVE, Const.ViewName.VIEW_JOB_PRACTICE);
         modelAndView.setViewName(Const.ViewName.VIEW_JOB_PRACTICE);
         return modelAndView;

+ 17 - 1
src/main/java/cn/minbb/job/controller/web/MainController.java

@@ -2,7 +2,11 @@ package cn.minbb.job.controller.web;
 
 import cn.minbb.job.data.Const;
 import cn.minbb.job.model.Banner;
+import cn.minbb.job.model.Company;
+import cn.minbb.job.model.Job;
 import cn.minbb.job.service.BannerService;
+import cn.minbb.job.service.CompanyService;
+import cn.minbb.job.service.JobService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -17,15 +21,27 @@ import java.util.List;
 public class MainController {
 
     private final BannerService bannerService;
+    private final CompanyService companyService;
+    private final JobService jobService;
 
-    public MainController(BannerService bannerService) {
+    public MainController(BannerService bannerService, CompanyService companyService, JobService jobService) {
         this.bannerService = bannerService;
+        this.companyService = companyService;
+        this.jobService = jobService;
     }
 
     @GetMapping("")
     public ModelAndView indexPage(ModelAndView modelAndView) {
         List<Banner> bannerList = bannerService.findAll();
+        List<Company> companyList = companyService.findTop2();
+        List<Job> jobTop = jobService.findTop8();
+        List<Job> jobTop1 = jobService.findTop5ByType("全职");
+        List<Job> jobTop2 = jobService.findTop5ByType("实习");
         modelAndView.addObject("bannerList", bannerList);
+        modelAndView.addObject("companyList", companyList);
+        modelAndView.addObject("jobTop", jobTop);
+        modelAndView.addObject("jobTop1", jobTop1);
+        modelAndView.addObject("jobTop2", jobTop2);
         modelAndView.addObject(Const.Key.KEY_ACTIVE, Const.ViewName.VIEW_INDEX);
         modelAndView.setViewName(Const.ViewName.VIEW_INDEX);
         return modelAndView;

+ 4 - 0
src/main/java/cn/minbb/job/model/repository/CompanyRepository.java

@@ -9,5 +9,9 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import java.util.List;
 
 public interface CompanyRepository extends JpaRepository<Company, Integer> {
+    List<Company> findTop2ByIsEnabledTrueOrderByPriorityDesc();
+
+    List<Company> findTop5ByIsEnabledTrueOrderByPriorityDesc();
+
     Page<Company> findAllByIndustryListInAndIsEnabledTrue(List<Industry> industryList, Pageable pageable);
 }

+ 5 - 0
src/main/java/cn/minbb/job/model/repository/JobRepository.java

@@ -3,5 +3,10 @@ package cn.minbb.job.model.repository;
 import cn.minbb.job.model.Job;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 public interface JobRepository extends JpaRepository<Job, Integer> {
+    List<Job> findTop8ByIsEnabledTrueOrderByPriorityDesc();
+
+    List<Job> findTop5ByTypeAndIsEnabledTrueOrderByPriorityDesc(String type);
 }

+ 5 - 0
src/main/java/cn/minbb/job/model/vo/CompanyVo.java

@@ -4,11 +4,14 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
 import java.util.Set;
 
 @Data
 @NoArgsConstructor
 public class CompanyVo implements Serializable {
+    private Integer id;
     private String name;
     private String brand;
     private String introduction;
@@ -16,5 +19,7 @@ public class CompanyVo implements Serializable {
     private String scale;
     private String description;
     private Set<JobVo> jobSet;
+    private List<IndustryVo> industryList;
     private Boolean isEnabled;
+    private Date createdDate;
 }

+ 12 - 0
src/main/java/cn/minbb/job/model/vo/IndustryVo.java

@@ -0,0 +1,12 @@
+package cn.minbb.job.model.vo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@NoArgsConstructor
+public class IndustryVo implements Serializable {
+    private String name;
+}

+ 4 - 0
src/main/java/cn/minbb/job/service/CompanyService.java

@@ -11,6 +11,10 @@ public interface CompanyService {
 
     Company findOneById(Integer id);
 
+    List<Company> findTop2();
+
+    List<Company> findTop5();
+
     Page<Company> findAll(Integer page, Integer size);
 
     Page<Company> findAllByIndustryIn(Industry industry, Integer page, Integer size);

+ 7 - 0
src/main/java/cn/minbb/job/service/JobService.java

@@ -2,6 +2,7 @@ package cn.minbb.job.service;
 
 import cn.minbb.job.model.Company;
 import cn.minbb.job.model.Job;
+import org.springframework.data.domain.Page;
 
 import java.util.List;
 
@@ -10,5 +11,11 @@ public interface JobService {
 
     Job findOneById(Integer id);
 
+    List<Job> findTop8();
+
+    List<Job> findTop5ByType(String type);
+
     List<Job> findAllByCompanyAndType(Company company, String type);
+
+    Page<Job> findAllByTypeWithPage(String type, Integer page, Integer size);
 }

+ 10 - 0
src/main/java/cn/minbb/job/service/impl/CompanyServiceImpl.java

@@ -33,6 +33,16 @@ public class CompanyServiceImpl implements CompanyService {
         return companyRepository.findById(id).orElse(null);
     }
 
+    @Override
+    public List<Company> findTop2() {
+        return companyRepository.findTop2ByIsEnabledTrueOrderByPriorityDesc();
+    }
+
+    @Override
+    public List<Company> findTop5() {
+        return companyRepository.findTop5ByIsEnabledTrueOrderByPriorityDesc();
+    }
+
     @Override
     public Page<Company> findAll(Integer page, Integer size) {
         Company company = new Company();

+ 20 - 0
src/main/java/cn/minbb/job/service/impl/JobServiceImpl.java

@@ -4,8 +4,10 @@ import cn.minbb.job.model.Company;
 import cn.minbb.job.model.Job;
 import cn.minbb.job.model.repository.JobRepository;
 import cn.minbb.job.service.JobService;
+import cn.minbb.job.util.PageHelper;
 import cn.minbb.job.util.SortTool;
 import org.springframework.data.domain.Example;
+import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -29,6 +31,16 @@ public class JobServiceImpl implements JobService {
         return jobRepository.findById(id).orElse(null);
     }
 
+    @Override
+    public List<Job> findTop8() {
+        return jobRepository.findTop8ByIsEnabledTrueOrderByPriorityDesc();
+    }
+
+    @Override
+    public List<Job> findTop5ByType(String type) {
+        return jobRepository.findTop5ByTypeAndIsEnabledTrueOrderByPriorityDesc(type);
+    }
+
     @Override
     public List<Job> findAllByCompanyAndType(Company company, String type) {
         Job job = new Job();
@@ -37,4 +49,12 @@ public class JobServiceImpl implements JobService {
         job.setIsEnabled(Boolean.TRUE);
         return jobRepository.findAll(Example.of(job), SortTool.priorityDown());
     }
+
+    @Override
+    public Page<Job> findAllByTypeWithPage(String type, Integer page, Integer size) {
+        Job job = new Job();
+        job.setType(type);
+        job.setIsEnabled(Boolean.TRUE);
+        return jobRepository.findAll(Example.of(job), PageHelper.of(page, size, SortTool.priorityDown()));
+    }
 }

+ 15 - 0
src/main/resources/templates/index.html

@@ -109,10 +109,25 @@
     </div>
 
     <div class="container" style="margin-top: 24px;">
+        <!-- 热门企业 x2 -->
         <div class="row mb-2">
             <div class="col-md-12">
                 <h3 class="pb-3 mb-4 font-italic border-bottom">推荐企业</h3>
             </div>
+            <div class="col-lg-6" th:each="company : ${companyList}">
+                <div class="card flex-md-row mb-4 box-shadow h-md-250">
+                    <div class="card-body d-flex flex-column align-items-start">
+                        <strong class="d-inline-block mb-2 text-primary" th:text="${company.getIndustryList().get(0).getName()}"></strong>
+                        <h3 class="mb-0">
+                            <a class="text-dark" href="#" th:text="${company.getName()}" th:href="${'/company?id=' + company.getId()}"></a>
+                        </h3>
+                        <div class="mb-1 text-muted" th:text="${#dates.format(company.getCreatedDate(), 'yyyy年MM月dd日')}"></div>
+                        <p class="card-text mb-auto" th:text="${company.getIntroduction()}"></p>
+                        <a href="#" th:href="${'/company?id=' + company.getId()}">了解更多</a>
+                    </div>
+                    <img class="card-img-right flex-auto d-none d-md-block" alt="" src="" style="width: 200px; height: 250px;" th:src="${company.getBrand()}"/>
+                </div>
+            </div>
             <div class="col-lg-6">
                 <div class="card flex-md-row mb-4 box-shadow h-md-250">
                     <div class="card-body d-flex flex-column align-items-start">