Explorar o código

feat:完成客户端家长注册功能

sakura hai 1 ano
pai
achega
d8f5da92cf

+ 32 - 7
school-in-out-admin/src/main/java/com/schoolinout/web/controller/api/Api_ParentController.java

@@ -11,7 +11,10 @@ import com.schoolinout.common.core.redis.RedisCache;
 import com.schoolinout.common.exception.ServiceException;
 import com.schoolinout.common.exception.user.UserPasswordNotMatchException;
 import com.schoolinout.common.utils.StringUtils;
+import com.schoolinout.common.validate.groups.Login;
+import com.schoolinout.common.validate.groups.Save;
 import com.schoolinout.framework.web.service.TokenService;
+import com.schoolinout.system.domain.Parent;
 import com.schoolinout.system.domain.ParentStudent;
 import com.schoolinout.system.domain.Student;
 import com.schoolinout.system.domain.dto.ApiParentDto;
@@ -65,7 +68,7 @@ public class Api_ParentController {
 
     @Operation(summary = "家长登入")
     @PostMapping("/login")
-    public AjaxResult parentLogin(@Validated @RequestBody ApiParentDto form) {
+    public AjaxResult parentLogin(@Validated(Login.class) @RequestBody ApiParentDto form) {
         // step1:校验验证码是否正确
         boolean matches = form.getPhone().matches("^1[34578]\\d{9}$");
         if (!matches) {
@@ -112,12 +115,34 @@ public class Api_ParentController {
 
     @Operation(summary = "家长注册")
     @PostMapping("/register")
-    public AjaxResult parentRegister(@Validated @RequestBody ApiParentDto form) {
-        // step1:校验验证码是否正确
-        // step2:通过手机号去查询家长
-        // step3:通过学号去查询学生
-        // step4:返回登入成功的令牌
-        return AjaxResult.success();
+    public AjaxResult parentRegister(@Validated(Save.class) @RequestBody ApiParentDto form) {
+        // step1: 校验手机号是否正确
+        boolean matches = form.getPhone().matches("^1[34578]\\d{9}$");
+        if (!matches) {
+            return AjaxResult.error("手机号输入格式不正确");
+        }
+        // step2:校验手机号是否存在用户
+        Parent parent = new Parent();
+        parent.setParentPhone(form.getPhone());
+        parent = parentService.listParentSimple(parent);
+        if (parent != null) {
+            return AjaxResult.error("当前手机号已注册!");
+        }
+        // step3:校验要绑定的学号的学生是否存在
+        Student student = new Student();
+        student.setStudentNum(form.getStudentNum());
+        student = studentService.listStudentSimple(student);
+        if (student == null) {
+            return AjaxResult.error("不存在该学号");
+        }
+        // step4:校验成功则添加对应的关系
+        parent = new Parent();
+        parent.setParentName(form.getName());
+        parent.setParentPhone(form.getPhone());
+        parent.setRelation(form.getRelation());
+        parent.setStudentIds(String.valueOf(student.getId()));
+        parentService.saveParent(parent);
+        return AjaxResult.success("注册成功,请去登入!");
     }
 
     @Operation(summary = "发送手机号验证码")

+ 3 - 0
school-in-out-admin/src/main/resources/application.yml

@@ -105,6 +105,9 @@ mybatis-plus:
   mapperLocations: classpath*:mapper/**/*Mapper.xml
   # 加载全局的配置文件
   configLocation: classpath:mybatis/mybatis-config.xml
+  global-config:
+    db-config:
+      id-type: auto
 
 # PageHelper分页插件
 pagehelper:

+ 10 - 0
school-in-out-common/src/main/java/com/schoolinout/common/validate/groups/Edit.java

@@ -0,0 +1,10 @@
+package com.schoolinout.common.validate.groups;
+
+/**
+ * 校验修改分组
+ *
+ * @author sakura
+ * @date 2024/1/10 14:14:40 Wed
+ */
+public interface Edit {
+}

+ 10 - 0
school-in-out-common/src/main/java/com/schoolinout/common/validate/groups/Login.java

@@ -0,0 +1,10 @@
+package com.schoolinout.common.validate.groups;
+
+/**
+ * 登入校验分组
+ *
+ * @author sakura
+ * @date 2024/1/10 14:14:41 Wed
+ */
+public interface Login {
+}

+ 10 - 0
school-in-out-common/src/main/java/com/schoolinout/common/validate/groups/Save.java

@@ -0,0 +1,10 @@
+package com.schoolinout.common.validate.groups;
+
+/**
+ * 校验插入分组
+ *
+ * @author sakura
+ * @date 2024/1/10 14:14:40 Wed
+ */
+public interface Save {
+}

+ 2 - 0
school-in-out-system/src/main/java/com/schoolinout/api/mapper/ApiParentMapper.java

@@ -11,4 +11,6 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface ApiParentMapper extends BaseMapper<Parent> {
     Parent selectOnlyOne(Parent selectCondition);
+
+
 }

+ 2 - 0
school-in-out-system/src/main/java/com/schoolinout/api/mapper/ApiParentStudentRelationMapper.java

@@ -12,4 +12,6 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface ApiParentStudentRelationMapper extends BaseMapper<ParentStudent> {
     ParentStudent selectOnlyOne(@Param("parentId") Long parentId, @Param("studentId") Long studentId);
+
+    int insertOrUpdate(ParentStudent parentStudent);
 }

+ 7 - 0
school-in-out-system/src/main/java/com/schoolinout/api/service/IApiParentService.java

@@ -14,4 +14,11 @@ public interface IApiParentService {
      * @return 结果
      */
     public Parent listParentSimple(Parent selectCondition);
+
+    /**
+     * 保存对应关系
+     *
+     * @param form 表单
+     */
+    public void saveParent(Parent parent);
 }

+ 20 - 0
school-in-out-system/src/main/java/com/schoolinout/api/service/impl/ApiParentServiceImpl.java

@@ -1,10 +1,13 @@
 package com.schoolinout.api.service.impl;
 
 import com.schoolinout.api.mapper.ApiParentMapper;
+import com.schoolinout.api.mapper.ApiParentStudentRelationMapper;
 import com.schoolinout.api.service.IApiParentService;
 import com.schoolinout.system.domain.Parent;
+import com.schoolinout.system.domain.ParentStudent;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author sakura
@@ -15,9 +18,26 @@ public class ApiParentServiceImpl implements IApiParentService {
 
     @Autowired
     private ApiParentMapper parentMapper;
+    @Autowired
+    private ApiParentStudentRelationMapper relationMapper;
 
     @Override
     public Parent listParentSimple(Parent selectCondition) {
         return parentMapper.selectOnlyOne(selectCondition);
     }
+
+    @Override
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void saveParent(Parent parent) {
+        // 先保存 家长
+        parentMapper.insert(parent);
+        // 两种情况
+        //  一种是他绑定原来系统中就已经绑定的
+        //  第二他第一次绑定
+        ParentStudent parentStudent = new ParentStudent();
+        parentStudent.setParentId(parent.getId());
+        // 默认先只能绑定一个
+        parentStudent.setStudentId(Long.valueOf(parent.getStudentIds()));
+        relationMapper.insertOrUpdate(parentStudent);
+    }
 }

+ 2 - 0
school-in-out-system/src/main/java/com/schoolinout/system/domain/Parent.java

@@ -1,6 +1,7 @@
 package com.schoolinout.system.domain;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.schoolinout.common.annotation.Excel;
 import com.schoolinout.common.core.domain.BaseEntity;
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -12,6 +13,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
  * @author sakura
  * @date 2024-01-09
  */
+@TableName("tb_school_parent")
 public class Parent extends BaseEntity {
     private static final long serialVersionUID = 1L;
 

+ 29 - 3
school-in-out-system/src/main/java/com/schoolinout/system/domain/dto/ApiParentDto.java

@@ -1,5 +1,7 @@
 package com.schoolinout.system.domain.dto;
 
+import com.schoolinout.common.validate.groups.Login;
+import com.schoolinout.common.validate.groups.Save;
 import io.swagger.v3.oas.annotations.media.Schema;
 
 import javax.validation.constraints.NotBlank;
@@ -10,16 +12,40 @@ import javax.validation.constraints.NotBlank;
  */
 @Schema(name = "用户端家长登入实体")
 public class ApiParentDto {
+
+    @Schema(description = "家长姓名")
+    @NotBlank(message = "姓名不能为空", groups = {Save.class})
+    private String name;
     @Schema(description = "电话", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotBlank(message = "手机号不能为空")
+    @NotBlank(message = "手机号不能为空", groups = {Save.class, Login.class})
     private String phone;
     @Schema(description = "手机号验证码", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotBlank(message = "手机号验证码不能为空")
+    @NotBlank(message = "手机号验证码不能为空", groups = {Login.class})
     private String code;
     @Schema(description = "学号", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotBlank(message = "学号不能为空")
+    @NotBlank(message = "学号不能为空", groups = {Save.class, Login.class})
     private String studentNum;
 
+    @Schema(description = "绑定关系", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "绑定关系不能为空", groups = {Save.class})
+    private String relation;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getRelation() {
+        return relation;
+    }
+
+    public void setRelation(String relation) {
+        this.relation = relation;
+    }
+
     public String getPhone() {
         return phone;
     }

+ 1 - 0
school-in-out-system/src/main/resources/mapper/api/ApiParentMapper.xml

@@ -3,6 +3,7 @@
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.schoolinout.api.mapper.ApiParentMapper">
+
     <select id="selectOnlyOne" resultType="com.schoolinout.system.domain.Parent">
         SELECT
         p.id,

+ 6 - 0
school-in-out-system/src/main/resources/mapper/api/ApiParentStudentRelationMapper.xml

@@ -3,6 +3,12 @@
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.schoolinout.api.mapper.ApiParentStudentRelationMapper">
+    <insert id="insertOrUpdate">
+        INSERT INTO tb_school_student_parent_relation (student_id, parent_id)
+        VALUES (#{studentId}, #{parentId})
+        ON DUPLICATE KEY UPDATE student_id = #{studentId},
+                                parent_id  = #{parentId};
+    </insert>
     <select id="selectOnlyOne" resultType="com.schoolinout.system.domain.ParentStudent">
         SELECT parent_id,
                student_id