瀏覽代碼

完善企业登录逻辑

王育民 5 年之前
父節點
當前提交
cd1a6a8524

+ 1 - 0
src/main/java/cn/minbb/job/config/WebSecurityConfig.java

@@ -43,6 +43,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
         http.antMatcher("/**").authorizeRequests()
                 .antMatchers("/login**").permitAll()
                 .antMatchers("/admin/**").hasAnyRole("ADMIN")
+                .antMatchers("/company/**").hasAnyRole("COMPANY")
                 // 其他地址的访问均放行
                 .anyRequest().permitAll()
                 .and().formLogin().loginPage("/login").loginProcessingUrl("/login")

+ 26 - 10
src/main/java/cn/minbb/job/controller/rest/SignController.java

@@ -3,9 +3,11 @@ package cn.minbb.job.controller.rest;
 import cn.minbb.job.data.Const;
 import cn.minbb.job.data.ResponseResult;
 import cn.minbb.job.enumerate.Role;
+import cn.minbb.job.model.Company;
 import cn.minbb.job.model.User;
 import cn.minbb.job.model.UserRole;
 import cn.minbb.job.model.vo.UserVo;
+import cn.minbb.job.service.CompanyService;
 import cn.minbb.job.service.UserRoleService;
 import cn.minbb.job.service.UserService;
 import com.alibaba.fastjson.JSON;
@@ -24,10 +26,12 @@ import java.util.Set;
 @RestController
 public class SignController {
 
+    private final CompanyService companyService;
     private final UserService userService;
     private final UserRoleService userRoleService;
 
-    public SignController(UserService userService, UserRoleService userRoleService) {
+    public SignController(CompanyService companyService, UserService userService, UserRoleService userRoleService) {
+        this.companyService = companyService;
         this.userService = userService;
         this.userRoleService = userRoleService;
     }
@@ -41,14 +45,7 @@ public class SignController {
         if (userService.existsByUsername(username)) {
             return ResponseResult.<UserVo>ok(false).code(Const.ReturnCode.FAILED).message("用户名已存在").build();
         } else {
-            User user = new User();
-            user.setName(name);
-            user.setUsername(username);
-            user.setPassword(password);
-            user.setIsAccountNonExpired(Boolean.TRUE);
-            user.setIsAccountNonLocked(Boolean.TRUE);
-            user.setIsCredentialsNonExpired(Boolean.TRUE);
-            user.setIsEnabled(Boolean.TRUE);
+            User user = new User(name, username, password);
             Set<UserRole> userRoleSet = new HashSet<>(1);
             userRoleSet.add(userRoleService.findOneByName(Role.USER.name()));
             user.setUserRoleSet(userRoleSet);
@@ -61,6 +58,25 @@ public class SignController {
     @PostMapping("/sign-up-company")
     public ResponseResult<UserVo> signUpCompany(@RequestBody Map<String, String> params) {
         log.info("注册企业用户入参:{}", params);
-        return null;
+        String name = params.get("name");
+        String introduction = params.get("introduction");
+        String username = params.get("username");
+        String password = params.get("password");
+        if (userService.existsByUsername(username)) {
+            return ResponseResult.<UserVo>ok(false).code(Const.ReturnCode.FAILED).message("用户名已存在").build();
+        } else {
+            User user = new User(name, username, password);
+            Set<UserRole> userRoleSet = new HashSet<>(1);
+            userRoleSet.add(userRoleService.findOneByName(Role.COMPANY.name()));
+            user.setUserRoleSet(userRoleSet);
+            Company company = new Company();
+            company.setName(name);
+            company.setIntroduction(introduction);
+            company.setIsEnabled(Boolean.FALSE);
+            user.setCompany(company);
+            user = userService.saveOne(user);
+            UserVo userVo = JSON.parseObject(JSON.toJSONString(user), UserVo.class);
+            return ResponseResult.<UserVo>ok(true).code(Const.ReturnCode.SUCCESS).message(Const.ReturnMessage.SUCCESS).data(userVo).build();
+        }
     }
 }

+ 4 - 2
src/main/java/cn/minbb/job/controller/web/CompanyController.java

@@ -2,13 +2,14 @@ package cn.minbb.job.controller.web;
 
 import cn.minbb.job.data.Const;
 import cn.minbb.job.model.Company;
+import cn.minbb.job.model.User;
 import cn.minbb.job.service.CompanyService;
+import cn.minbb.job.system.UserSession;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
 @Controller
@@ -35,8 +36,9 @@ public class CompanyController {
     }
 
     @GetMapping("/info")
-    @ResponseBody
     public ModelAndView companyInfo(ModelAndView modelAndView) {
+        User user = UserSession.getUserAuthentication();
+        if (null != user) modelAndView.addObject("company", user.getCompany());
         modelAndView.setViewName(Const.ViewName.VIEW_COMPANY_INFO);
         return modelAndView;
     }

+ 8 - 0
src/main/java/cn/minbb/job/handler/LoginAuthenticationSuccessHandler.java

@@ -1,5 +1,8 @@
 package cn.minbb.job.handler;
 
+import cn.minbb.job.enumerate.Role;
+import cn.minbb.job.model.User;
+import cn.minbb.job.system.UserSession;
 import cn.minbb.job.util.RequestUtil;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.log4j.Log4j2;
@@ -37,6 +40,11 @@ public class LoginAuthenticationSuccessHandler extends SavedRequestAwareAuthenti
             // 把 authentication 对象转成 json 格式字符串通过 response 以 application/json;charset=UTF-8 格式写到响应里面去
             response.getWriter().write(objectMapper.writeValueAsString(authentication));
         } else {
+            User user = UserSession.getUserAuthentication();
+            if (null != user && user.hasRole(Role.COMPANY)) {
+                response.sendRedirect("/company/info");
+                return;
+            }
             // 跳转到登录之前访问的页面
             response.setStatus(HttpStatus.OK.value());
             SavedRequest savedRequest = (SavedRequest) request.getSession().getAttribute("SPRING_SECURITY_SAVED_REQUEST");

+ 6 - 5
src/main/java/cn/minbb/job/model/Company.java

@@ -25,16 +25,16 @@ public class Company extends Auditable {
     @Column(name = "name", nullable = false, columnDefinition = "VARCHAR(32) COMMENT '名称'")
     private String name;
 
-    @Column(name = "brand", nullable = false, columnDefinition = "VARCHAR(255) COMMENT '商标'")
+    @Column(name = "brand", columnDefinition = "VARCHAR(255) COMMENT '商标'")
     private String brand;
 
     @Column(name = "introduction", nullable = false, columnDefinition = "VARCHAR(500) COMMENT '简介'")
     private String introduction;
 
-    @Column(name = "nature", nullable = false, columnDefinition = "VARCHAR(16) COMMENT '性质'")
+    @Column(name = "nature", columnDefinition = "VARCHAR(16) COMMENT '性质'")
     private String nature;
 
-    @Column(name = "scale", nullable = false, columnDefinition = "VARCHAR(16) COMMENT '规模'")
+    @Column(name = "scale", columnDefinition = "VARCHAR(16) COMMENT '规模'")
     private String scale;
 
     @Column(name = "description", columnDefinition = "VARCHAR(1000) COMMENT '描述'")
@@ -47,10 +47,11 @@ public class Company extends Auditable {
     private Boolean isEnabled;
 
     // 岗位(集合)
-    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy = "company", fetch = FetchType.LAZY)
+    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy = "company", fetch = FetchType.EAGER)
     private Set<Job> jobSet;
 
-    @ManyToMany(cascade = {CascadeType.MERGE})
+    // 行业(集合)
+    @ManyToMany(cascade = {CascadeType.MERGE}, fetch = FetchType.EAGER)
     @JoinTable(name = "company_industry",
             joinColumns = {@JoinColumn(name = "company_id", referencedColumnName = "id", columnDefinition = "INT COMMENT '企业ID'")},
             inverseJoinColumns = {@JoinColumn(name = "industry_id", referencedColumnName = "id", columnDefinition = "INT COMMENT '行业ID'")},

+ 13 - 1
src/main/java/cn/minbb/job/model/User.java

@@ -4,6 +4,7 @@ import cn.minbb.job.enumerate.Role;
 import com.alibaba.fastjson.annotation.JSONField;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
@@ -20,6 +21,7 @@ import java.util.Set;
 @Data
 @Entity
 @EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
 @Table(name = "user",
         indexes = {
                 @Index(name = "index_id", columnList = "id"),
@@ -73,7 +75,7 @@ public class User extends Auditable implements UserDetails {
     )
     private Set<UserRole> userRoleSet;
 
-    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = true)
+    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = true)
     @JoinColumn(name = "company_id", columnDefinition = "INT COMMENT '企业ID'")
     private Company company;
 
@@ -119,4 +121,14 @@ public class User extends Auditable implements UserDetails {
         }
         return false;
     }
+
+    public User(String name, String username, String password) {
+        this.name = name;
+        this.username = username;
+        this.password = password;
+        this.isAccountNonExpired = Boolean.TRUE;
+        this.isAccountNonLocked = Boolean.TRUE;
+        this.isCredentialsNonExpired = Boolean.TRUE;
+        this.isEnabled = Boolean.TRUE;
+    }
 }

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

@@ -0,0 +1,20 @@
+package cn.minbb.job.model.vo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@NoArgsConstructor
+public class CompanyVo implements Serializable {
+    private String name;
+    private String brand;
+    private String introduction;
+    private String nature;
+    private String scale;
+    private String description;
+    private Set<JobVo> jobSet;
+    private Boolean isEnabled;
+}

+ 12 - 0
src/main/java/cn/minbb/job/model/vo/JobTagVo.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 JobTagVo implements Serializable {
+    private String name;
+}

+ 18 - 0
src/main/java/cn/minbb/job/model/vo/JobVo.java

@@ -0,0 +1,18 @@
+package cn.minbb.job.model.vo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class JobVo implements Serializable {
+    private String name;
+    private String salary;
+    private String place;
+    private String education;
+    private String description;
+    private List<JobTagVo> jobTagList;
+}

+ 1 - 0
src/main/java/cn/minbb/job/model/vo/UserVo.java

@@ -15,4 +15,5 @@ public class UserVo implements Serializable {
     private String phone;
     private String mail;
     private String qq;
+    private CompanyVo company;
 }

+ 18 - 0
src/main/resources/templates/company-info.html

@@ -9,6 +9,24 @@
 </head>
 <body>
 <th:block layout:fragment="content">
+    <div class="album py-5 bg-light">
+        <div class="container">
+            <div class="row">
+                <div class="col text-center" th:if="${!company.getIsEnabled()}">企业信息未完善,完善后方可激活和发布职位信息。</div>
+            </div>
+        </div>
+    </div>
+
+    <section class="jumbotron text-center">
+        <div class="container">
+            <h1 class="jumbotron-heading" th:text="${company.getName()}"></h1>
+            <p class="lead text-muted" th:text="${company.getIntroduction()}"></p>
+            <p>
+                <a href="#" class="btn btn-primary my-2">企业信息完善并激活</a>
+            </p>
+        </div>
+    </section>
+
     <div class="container">
         <div class="row" style="margin-top: 24px;"></div>
     </div>

+ 1 - 1
src/main/resources/templates/sign-in.html

@@ -11,7 +11,7 @@
     <link href="../static/css/user-sign.css" th:href="@{/css/user-sign.css}" rel="stylesheet"/>
 </head>
 <body>
-<form class="form-login" method="post" action="/login">
+<form class="form-login" action="/login" method="POST">
     <div class="text-center">
         <a href="/"><img class="mb-4" src="../static/favicon.ico" alt="" width="72" height="72" th:src="@{/favicon.ico}"/></a>
         <h1 class="h3 mb-3 font-weight-normal">用户登录</h1>

+ 12 - 5
src/main/resources/templates/sign-up-company.html

@@ -28,6 +28,11 @@
         <label for="name">企业名称</label>
     </div>
 
+    <div class="form-label-group">
+        <input class="form-control" id="introduction" type="text" placeholder="简介" maxlength="500" style="height: 44px; margin-top: 0;" required/>
+        <label for="introduction">简介</label>
+    </div>
+
     <div class="form-label-group">
         <input class="form-control" id="username" type="text" placeholder="用户名" maxlength="16" style="height: 44px; margin-top: 0;" required/>
         <label for="username">用户名</label>
@@ -54,14 +59,17 @@
     });
 
     function submit() {
-        let nameInput = $('#name'), usernameInput = $('#username'), passwordInput = $('#password'), passwordInput2 = $('#repeat-password');
-        let name = nameInput.val(), username = usernameInput.val(), password = passwordInput.val(), password2 = passwordInput2.val();
+        let nameInput = $('#name'), usernameInput = $('#username'), introductionInput = $('#introduction'), passwordInput = $('#password'), passwordInput2 = $('#repeat-password');
+        let name = nameInput.val(), username = usernameInput.val(), introduction = introductionInput.val(), password = passwordInput.val(), password2 = passwordInput2.val();
         if (name === "") {
             alert("姓名不能为空");
             return;
         } else if (username === "") {
             alert("用户名不能为空");
             return;
+        } else if (introduction === "") {
+            alert("企业简介不能为空");
+            return;
         } else if (password === "") {
             alert("密码不能为空");
             return;
@@ -78,14 +86,13 @@
             url: '/sign-up-company',
             type: 'post',
             contentType: "application/json; charset=utf-8",
-            data: JSON.stringify({"name": name, "username": username, "password": password}),
+            data: JSON.stringify({"name": name, "username": username, "introduction": introduction, "password": password}),
             async: true,
             dataType: 'json',
             success: function (result) {
                 if (result && result.success) {
                     let user = result.data;
-                    alert("恭喜你 " + user.name + " ,注册成功,登录用户名为:" + user.username);
-                    window.location.href = "/sign-in";
+                    alert("恭喜你 " + user.name + " ,注册成功:" + user);
                 } else {
                     alert("注册失败:" + result.message);
                     window.location.reload();

+ 1 - 1
src/main/resources/templates/sign-up-user.html

@@ -85,7 +85,7 @@
                 if (result && result.success) {
                     let user = result.data;
                     alert("恭喜你 " + user.name + " ,注册成功,登录用户名为:" + user.username);
-                    window.location.href = "/sign-in";
+                    window.location.href = "/login";
                 } else {
                     alert("注册失败:" + result.message);
                     window.location.reload();