Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

soft5566 2 лет назад
Родитель
Сommit
b2491241a7
100 измененных файлов с 7308 добавлено и 533 удалено
  1. 453 338
      .idea/workspace.xml
  2. 1 1
      src/main/java/com/template/AutoCode.java
  3. 7 0
      src/main/java/com/template/api/SmartAttendanceControllerAPI.java
  4. 14 2
      src/main/java/com/template/api/SmartClassControllerAPI.java
  5. 5 2
      src/main/java/com/template/api/SmartDepartmentControllerAPI.java
  6. 8 1
      src/main/java/com/template/api/SmartGradeControllerAPI.java
  7. 4 0
      src/main/java/com/template/api/SmartIdentityControllerAPI.java
  8. 40 0
      src/main/java/com/template/api/SmartMenuControllerAPI.java
  9. 17 8
      src/main/java/com/template/api/SmartUserControllerAPI.java
  10. 1 1
      src/main/java/com/template/api/SmartVisitorControllerAPI.java
  11. 85 0
      src/main/java/com/template/common/utils/AesTestOne.java
  12. 1 0
      src/main/java/com/template/common/utils/RequestUtils.java
  13. 11 0
      src/main/java/com/template/common/utils/TimeExchange.java
  14. 46 0
      src/main/java/com/template/common/utils/imageUtils.java
  15. 27 0
      src/main/java/com/template/config/ControlConfig.java
  16. 0 4
      src/main/java/com/template/config/ParkConfig.java
  17. 100 34
      src/main/java/com/template/controller/ScheduleController.java
  18. 44 2
      src/main/java/com/template/controller/SmartAttendanceController.java
  19. 292 8
      src/main/java/com/template/controller/SmartClassController.java
  20. 92 4
      src/main/java/com/template/controller/SmartDepartmentController.java
  21. 141 5
      src/main/java/com/template/controller/SmartGradeController.java
  22. 22 4
      src/main/java/com/template/controller/SmartIdentityController.java
  23. 103 0
      src/main/java/com/template/controller/SmartMenuController.java
  24. 13 6
      src/main/java/com/template/controller/SmartScoreController.java
  25. 679 33
      src/main/java/com/template/controller/SmartUserController.java
  26. 5 10
      src/main/java/com/template/controller/SmartVisitorController.java
  27. 3 1
      src/main/java/com/template/controller/WechatScanLoginController.java
  28. 16 13
      src/main/java/com/template/core/JwtAuthenticationInterceptor.java
  29. 18 0
      src/main/java/com/template/mapper/SmartMenuMapper.java
  30. 12 0
      src/main/java/com/template/model/pojo/SmartAttendance.java
  31. 3 0
      src/main/java/com/template/model/pojo/SmartClass.java
  32. 3 0
      src/main/java/com/template/model/pojo/SmartDepartment.java
  33. 11 1
      src/main/java/com/template/model/pojo/SmartGrade.java
  34. 65 0
      src/main/java/com/template/model/pojo/SmartMenu.java
  35. 3 0
      src/main/java/com/template/model/pojo/SmartSchool.java
  36. 13 1
      src/main/java/com/template/model/pojo/SmartUser.java
  37. 29 0
      src/main/java/com/template/model/request/insertMenuRequest.java
  38. 36 0
      src/main/java/com/template/model/request/insertSmartClassRequest.java
  39. 30 0
      src/main/java/com/template/model/request/insertSmartGradeRequest.java
  40. 13 13
      src/main/java/com/template/model/request/insertSmartUserRequest.java
  41. 35 0
      src/main/java/com/template/model/request/updateClassRequest.java
  42. 35 0
      src/main/java/com/template/model/request/updateMenuRequest.java
  43. 36 0
      src/main/java/com/template/model/request/updateSmartGradeRequest.java
  44. 12 12
      src/main/java/com/template/model/request/updateSmartUserRequest.java
  45. 20 0
      src/main/java/com/template/model/request/useridsRequest.java
  46. 248 0
      src/main/java/com/template/model/seewo/AttendanceRuleListEventByClazzParam.java
  47. 35 0
      src/main/java/com/template/model/seewo/AttendanceRuleListEventByClazzRequest.java
  48. 206 0
      src/main/java/com/template/model/seewo/AttendanceRuleListEventByClazzResult.java
  49. 1 3
      src/main/java/com/template/model/pojo/AttendanceRuleListSchoolAttendRuleParam.java
  50. 1 3
      src/main/java/com/template/model/pojo/AttendanceRuleListSchoolAttendRuleRequest.java
  51. 1 1
      src/main/java/com/template/model/pojo/AttendanceRuleListSchoolAttendRuleResult.java
  52. 1 3
      src/main/java/com/template/model/pojo/AttendanceServiceListAttendClassRecordsParam.java
  53. 1 3
      src/main/java/com/template/model/pojo/AttendanceServiceListAttendClassRecordsRequest.java
  54. 1 1
      src/main/java/com/template/model/pojo/AttendanceServiceListAttendClassRecordsResult.java
  55. 336 0
      src/main/java/com/template/model/seewo/ClassServiceBatchSaveClassParam.java
  56. 33 0
      src/main/java/com/template/model/seewo/ClassServiceBatchSaveClassRequest.java
  57. 262 0
      src/main/java/com/template/model/seewo/ClassServiceBatchSaveClassResult.java
  58. 1 3
      src/main/java/com/template/model/pojo/HomeSchoolServiceSendNoteToKidParam.java
  59. 1 3
      src/main/java/com/template/model/pojo/HomeSchoolServiceSendNoteToKidRequest.java
  60. 1 1
      src/main/java/com/template/model/pojo/HomeSchoolServiceSendNoteToKidResult.java
  61. 1 1
      src/main/java/com/template/model/pojo/OrgClassOpenSeewoUcOpenV1ClassFullParam.java
  62. 1 3
      src/main/java/com/template/model/pojo/OrgClassOpenSeewoUcOpenV1ClassFullRequest.java
  63. 1 1
      src/main/java/com/template/model/pojo/OrgClassOpenSeewoUcOpenV1ClassFullResult.java
  64. 283 0
      src/main/java/com/template/model/seewo/OrganizationNodeServiceInitSchoolClassesParam.java
  65. 35 0
      src/main/java/com/template/model/seewo/OrganizationNodeServiceInitSchoolClassesRequest.java
  66. 66 0
      src/main/java/com/template/model/seewo/OrganizationNodeServiceInitSchoolClassesResult.java
  67. 282 0
      src/main/java/com/template/model/seewo/ParentServiceBatchSaveOrUpdateParentsParam.java
  68. 35 0
      src/main/java/com/template/model/seewo/ParentServiceBatchSaveOrUpdateParentsRequest.java
  69. 66 0
      src/main/java/com/template/model/seewo/ParentServiceBatchSaveOrUpdateParentsResult.java
  70. 210 0
      src/main/java/com/template/model/seewo/PersonalLeaveListSchoolPeriodRecordsParam.java
  71. 33 0
      src/main/java/com/template/model/seewo/PersonalLeaveListSchoolPeriodRecordsRequest.java
  72. 302 0
      src/main/java/com/template/model/seewo/PersonalLeaveListSchoolPeriodRecordsResult.java
  73. 283 0
      src/main/java/com/template/model/seewo/StudentLeaveStudentLeaveRequestHandlerParam.java
  74. 33 0
      src/main/java/com/template/model/seewo/StudentLeaveStudentLeaveRequestHandlerRequest.java
  75. 178 0
      src/main/java/com/template/model/seewo/StudentLeaveStudentLeaveRequestHandlerResult.java
  76. 318 0
      src/main/java/com/template/model/seewo/StudentServiceBatchSaveClassStudentsParam.java
  77. 35 0
      src/main/java/com/template/model/seewo/StudentServiceBatchSaveClassStudentsRequest.java
  78. 206 0
      src/main/java/com/template/model/seewo/StudentServiceBatchSaveClassStudentsResult.java
  79. 354 0
      src/main/java/com/template/model/seewo/StudentServiceUpdateStudentInfoParam.java
  80. 35 0
      src/main/java/com/template/model/seewo/StudentServiceUpdateStudentInfoRequest.java
  81. 66 0
      src/main/java/com/template/model/seewo/StudentServiceUpdateStudentInfoResult.java
  82. 267 0
      src/main/java/com/template/model/seewo/TeacherServiceBatchSaveOrUpdateTeacherParam.java
  83. 35 0
      src/main/java/com/template/model/seewo/TeacherServiceBatchSaveOrUpdateTeacherRequest.java
  84. 154 0
      src/main/java/com/template/model/seewo/TeacherServiceBatchSaveOrUpdateTeacherResult.java
  85. 16 0
      src/main/java/com/template/model/vo/BsClassNoVo.java
  86. 26 0
      src/main/java/com/template/model/vo/BsClassVo.java
  87. 17 0
      src/main/java/com/template/model/vo/BsDepartmentNoVo.java
  88. 26 0
      src/main/java/com/template/model/vo/BsDepartmentVo.java
  89. 16 0
      src/main/java/com/template/model/vo/BsGradeNoVo.java
  90. 26 0
      src/main/java/com/template/model/vo/BsGradeVo.java
  91. 19 0
      src/main/java/com/template/model/vo/BsStaffNoVo.java
  92. 26 0
      src/main/java/com/template/model/vo/BsStaffVo.java
  93. 16 0
      src/main/java/com/template/model/vo/BsStudentNoVo.java
  94. 26 0
      src/main/java/com/template/model/vo/BsStudentVo.java
  95. 27 0
      src/main/java/com/template/model/vo/GradeListVo.java
  96. 1 1
      src/main/java/com/template/model/vo/GradeVo.java
  97. 32 0
      src/main/java/com/template/model/vo/ParentOfStudentsVo.java
  98. 5 0
      src/main/java/com/template/model/vo/ScorePageVo.java
  99. 17 2
      src/main/java/com/template/model/vo/ScoreVo.java
  100. 0 0
      src/main/java/com/template/model/vo/UserVo.java

Разница между файлами не показана из-за своего большого размера
+ 453 - 338
.idea/workspace.xml


+ 1 - 1
src/main/java/com/template/AutoCode.java

@@ -56,7 +56,7 @@ public class AutoCode {
         mpg.setPackageInfo(pc);
         //4、策略配置
         StrategyConfig strategy = new StrategyConfig();
-        strategy.setInclude("smart_score"); // 设置要映射的表名"smart_class","smart_grade","smart_attendance"
+        strategy.setInclude("smart_menu"); // 设置要映射的表名"smart_class","smart_grade","smart_attendance"
         strategy.setNaming(NamingStrategy.underline_to_camel);//下划线转驼峰
         strategy.setColumnNaming(NamingStrategy.underline_to_camel);//下划线转驼峰
         strategy.setEntityLombokModel(true); // 自动lombok;

+ 7 - 0
src/main/java/com/template/api/SmartAttendanceControllerAPI.java

@@ -32,4 +32,11 @@ public interface SmartAttendanceControllerAPI {
     @GetMapping(value = "/deleteSmartAttendanceById")
     @ApiOperation(value = "根据ID删除指定考勤", notes = "根据ID删除指定考勤", httpMethod = "GET")
     CommonResult deleteSmartAttendanceById(@RequestParam int id);
+
+    /**
+     * 获取请假记录数据
+     */
+    @GetMapping(value = "/queryLeaveRecords")
+    @ApiOperation(value = "获取请假记录数据", notes = "获取请假记录数据", httpMethod = "GET")
+    CommonResult queryLeaveRecords();
 }

+ 14 - 2
src/main/java/com/template/api/SmartClassControllerAPI.java

@@ -1,6 +1,8 @@
 package com.template.api;
 
 import com.template.model.pojo.SmartClass;
+import com.template.model.request.insertSmartClassRequest;
+import com.template.model.request.updateClassRequest;
 import com.template.model.result.CommonResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -8,6 +10,7 @@ import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+
 /**
  * @Author: binguo
  * @Date: 2023/3/30 星期四 17:28
@@ -23,7 +26,7 @@ public interface SmartClassControllerAPI {
 
     @PostMapping(value = "/updateSmartClassById")
     @ApiOperation(value = "编辑班级数据", notes = "编辑班级数据", httpMethod = "POST")
-    CommonResult updateSmartClassById(@Validated @RequestBody SmartClass ra, BindingResult bindingResult);
+    CommonResult updateSmartClassById(@Validated @RequestBody updateClassRequest ra, BindingResult bindingResult) throws Exception;
 
     @GetMapping(value = "/queryPageSmartClass")
     @ApiOperation(value = "班级分页数据", notes = "班级分页数据", httpMethod = "GET")
@@ -35,5 +38,14 @@ public interface SmartClassControllerAPI {
 
     @GetMapping(value = "/querySmartClasss")
     @ApiOperation(value = "班级集合列表数据", notes = "班级集合列表数据", httpMethod = "GET")
-    CommonResult querySmartClasss();
+    CommonResult querySmartClasss(@RequestParam int gradeId);
+
+    @PostMapping(value = "/insertSmartClassToBaisheng")
+    @ApiOperation(value = "将班级数据添加到百胜系统", notes = "将班级数据添加到百胜系统", httpMethod = "POST")
+    CommonResult insertSmartClassToBaisheng(@Validated @RequestBody insertSmartClassRequest iscr, BindingResult bindingResult) throws Exception;
+
+
+    @GetMapping(value = "/initSchoolClasses")
+    @ApiOperation(value = "初始化班级", notes = "初始化班级", httpMethod = "GET")
+    CommonResult initSchoolClasses();
 }

+ 5 - 2
src/main/java/com/template/api/SmartDepartmentControllerAPI.java

@@ -1,5 +1,6 @@
 package com.template.api;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.template.model.pojo.SmartDepartment;
 import com.template.model.request.insertDepartmentRequest;
 import com.template.model.request.updateDepartmentRequest;
@@ -10,6 +11,8 @@ import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.UnsupportedEncodingException;
+
 /**
  * @Author: binguo
  * @Date: 2023/3/30 星期四 17:28
@@ -21,11 +24,11 @@ import org.springframework.web.bind.annotation.*;
 public interface SmartDepartmentControllerAPI {
     @PostMapping(value = "/insertSmartDepartment")
     @ApiOperation(value = "添加部门", notes = "添加部门数据", httpMethod = "POST")
-    CommonResult insertSmartDepartment(@Validated @RequestBody insertDepartmentRequest smartApply, BindingResult bindingResult);
+    CommonResult insertSmartDepartment(@Validated @RequestBody insertDepartmentRequest smartApply, BindingResult bindingResult) throws Exception;
 
     @PostMapping(value = "/updateSmartDepartmentById")
     @ApiOperation(value = "编辑部门数据", notes = "编辑部门数据", httpMethod = "POST")
-    CommonResult updateSmartDepartmentById(@Validated @RequestBody updateDepartmentRequest udr, BindingResult bindingResult);
+    CommonResult updateSmartDepartmentById(@Validated @RequestBody updateDepartmentRequest udr, BindingResult bindingResult) throws Exception;
 
     @GetMapping(value = "/queryPageSmartDepartment")
     @ApiOperation(value = "部门分页数据", notes = "部门分页数据", httpMethod = "GET")

+ 8 - 1
src/main/java/com/template/api/SmartGradeControllerAPI.java

@@ -1,6 +1,8 @@
 package com.template.api;
 
 import com.template.model.pojo.SmartGrade;
+import com.template.model.request.insertSmartGradeRequest;
+import com.template.model.request.updateSmartGradeRequest;
 import com.template.model.result.CommonResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -23,7 +25,7 @@ public interface SmartGradeControllerAPI {
 
     @PostMapping(value = "/updateSmartGradeById")
     @ApiOperation(value = "编辑年级数据", notes = "编辑年级数据", httpMethod = "POST")
-    CommonResult updateSmartGradeById(@Validated @RequestBody SmartGrade ra, BindingResult bindingResult);
+    CommonResult updateSmartGradeById(@Validated @RequestBody updateSmartGradeRequest ra, BindingResult bindingResult) throws Exception;
 
     @GetMapping(value = "/queryPageSmartGrade")
     @ApiOperation(value = "年级分页数据", notes = "年级分页数据", httpMethod = "GET")
@@ -36,4 +38,9 @@ public interface SmartGradeControllerAPI {
     @GetMapping(value = "/querySmartGrades")
     @ApiOperation(value = "年级集合列表数据", notes = "年级集合列表数据", httpMethod = "GET")
     CommonResult querySmartGrades();
+
+    @PostMapping(value = "/insertSmartGradeToBaisheng")
+    @ApiOperation(value = "将年级数据添加到百胜系统", notes = "将年级数据添加到百胜系统", httpMethod = "POST")
+    CommonResult insertSmartGradeToBaisheng(@Validated @RequestBody insertSmartGradeRequest isgr, BindingResult bindingResult) throws Exception;
+
 }

+ 4 - 0
src/main/java/com/template/api/SmartIdentityControllerAPI.java

@@ -34,4 +34,8 @@ public interface SmartIdentityControllerAPI {
     @GetMapping(value = "/deleteSmartIdentityById")
     @ApiOperation(value = "根据ID删除指定身份", notes = "根据ID删除指定身份", httpMethod = "GET")
     CommonResult deleteSmartIdentityById(@RequestParam int id);
+
+    @GetMapping(value = "/querySmartIdentitys")
+    @ApiOperation(value = "获取身份集合", notes = "获取身份集合", httpMethod = "GET")
+    CommonResult querySmartIdentitys();
 }

+ 40 - 0
src/main/java/com/template/api/SmartMenuControllerAPI.java

@@ -0,0 +1,40 @@
+package com.template.api;
+
+import com.template.model.pojo.SmartMenu;
+import com.template.model.request.insertMenuRequest;
+import com.template.model.request.updateMenuRequest;
+import com.template.model.result.CommonResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * @Author: binguo
+ * @Date: 2023/3/30 星期四 17:28
+ * @Description: com.video.api
+ * @Version: 1.0
+ */
+@RequestMapping("/api/smartMenu")
+@Api(tags = {"SmartMenuControllerAPI"}, value = "菜单")
+public interface SmartMenuControllerAPI {
+    @PostMapping(value = "/insertSmartMenu")
+    @ApiOperation(value = "添加菜单", notes = "添加菜单数据", httpMethod = "POST")
+    CommonResult insertSmartMenu(@Validated @RequestBody insertMenuRequest imr, BindingResult bindingResult);
+
+    @PostMapping(value = "/updateSmartMenuById")
+    @ApiOperation(value = "编辑菜单数据", notes = "编辑菜单数据", httpMethod = "POST")
+    CommonResult updateSmartMenuById(@Validated @RequestBody updateMenuRequest ra, BindingResult bindingResult) throws Exception;
+
+    @GetMapping(value = "/queryPageSmartMenu")
+    @ApiOperation(value = "菜单分页数据", notes = "菜单分页数据", httpMethod = "GET")
+    CommonResult queryPageSmartMenus(@RequestParam int currentPage, @RequestParam int pageCount, String name);
+
+    @GetMapping(value = "/deleteSmartMenuById")
+    @ApiOperation(value = "根据ID删除指定菜单", notes = "根据ID删除指定菜单", httpMethod = "GET")
+    CommonResult deleteSmartMenuById(@RequestParam int id);
+
+
+}

+ 17 - 8
src/main/java/com/template/api/SmartUserControllerAPI.java

@@ -3,6 +3,7 @@ package com.template.api;
 import com.template.model.request.changeDepartmentRequest;
 import com.template.model.request.insertSmartUserRequest;
 import com.template.model.request.updateSmartUserRequest;
+import com.template.model.request.useridsRequest;
 import com.template.model.result.CommonResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -26,9 +27,9 @@ public interface SmartUserControllerAPI {
     /**
      * 注销账号
       */
-    @GetMapping(value = "logoffAccount")
-    @ApiOperation(value = "注销账号", notes = "注销账号", httpMethod = "GET")
-    CommonResult logoffAccount(@RequestParam int id);
+    @PostMapping(value = "logoffAccount")
+    @ApiOperation(value = "注销账号", notes = "注销账号", httpMethod = "POST")
+    CommonResult logoffAccount(@Validated @RequestBody useridsRequest ur, BindingResult bindingResult);
 
     /**
      * 移动多个用户到其他部门
@@ -58,11 +59,11 @@ public interface SmartUserControllerAPI {
 
     @PostMapping(value = "/insertSmartUser")
     @ApiOperation(value = "添加用户", notes = "添加用户数据", httpMethod = "POST")
-    CommonResult insertSmartUser(@Validated @RequestBody insertSmartUserRequest isur, BindingResult bindingResult);
+    CommonResult insertSmartUser(@Validated @RequestBody insertSmartUserRequest isur, BindingResult bindingResult) throws Exception;
 
     @PostMapping(value = "/updateSmartUserById")
     @ApiOperation(value = "编辑用户数据", notes = "编辑用户数据", httpMethod = "POST")
-    CommonResult updateSmartUserById(@Validated @RequestBody updateSmartUserRequest ra, BindingResult bindingResult);
+    CommonResult updateSmartUserById(@Validated @RequestBody updateSmartUserRequest ra, BindingResult bindingResult) throws Exception;
 
     @GetMapping(value = "/queryPageSmartUser")
     @ApiOperation(value = "用户分页数据", notes = "用户分页数据", httpMethod = "GET")
@@ -75,9 +76,9 @@ public interface SmartUserControllerAPI {
     @ApiOperation(value = "导出用户数据", notes = "导出用户数据", httpMethod = "GET")
     void smartUserExport(HttpServletResponse response, Integer departmentId, String name);
 
-    @GetMapping(value = "/deleteSmartUserById")
-    @ApiOperation(value = "根据ID删除指定用户", notes = "根据ID删除指定用户", httpMethod = "GET")
-    CommonResult deleteSmartUserById(@RequestParam int id);
+    @PostMapping(value = "/deleteSmartUserById")
+    @ApiOperation(value = "根据ID删除指定用户", notes = "根据ID删除指定用户", httpMethod = "POST")
+    CommonResult deleteSmartUserById(@Validated @RequestBody useridsRequest ur, BindingResult bindingResult);
 
     /**
      * 学生家长预约信息填写界面获取受访学生列表
@@ -93,4 +94,12 @@ public interface SmartUserControllerAPI {
     @GetMapping(value = "/downloadUserExcel")
     @ApiOperation(value = "导出人员Excel模板", notes = "导出人员Excel模板", httpMethod = "GET")
     CommonResult downloadUserExcel();
+
+    /**
+     * 导出人员模板
+     * @return
+     */
+    @GetMapping(value = "/queryStudents")
+    @ApiOperation(value = "根据用户ID查询学生", notes = "根据用户ID查询学生", httpMethod = "GET")
+    CommonResult queryStudents(@RequestParam int userId);
 }

+ 1 - 1
src/main/java/com/template/api/SmartVisitorControllerAPI.java

@@ -63,7 +63,7 @@ public interface SmartVisitorControllerAPI {
      */
     @GetMapping(value = "/appointmentPageRecord")
     @ApiOperation(value = "当前用户的预约记录", notes = "当前用户的预约记录", httpMethod = "GET")
-    CommonResult appointmentPageRecord(@RequestParam int currentPage, @RequestParam int pageCount, @RequestParam int userId, @RequestParam int type);
+    CommonResult appointmentPageRecord(@RequestParam int currentPage, @RequestParam int pageCount, Integer userId, @RequestParam int type);
 
     /**
      * 访客记录审核

+ 85 - 0
src/main/java/com/template/common/utils/AesTestOne.java

@@ -0,0 +1,85 @@
+package com.template.common.utils;
+
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/5 星期五 14:26
+ * @Description: com.template.common.utils
+ * @Version: 1.0
+ */
+public class AesTestOne {
+    /**
+     * AES 对称加密(RSA非对称加密)
+     * CBC 有向量 (ECB 无向量)
+     * PKCS5Padding 填充模式(NoPadding 无填充)
+     */
+    private static final String ALG_AES_CBC_PKCS5 = "AES/CBC/PKCS5Padding";
+
+    private static final String ALGORITHM = "AES";
+
+    private static final Charset UTF8 = StandardCharsets.UTF_8;
+
+    private static String aesKey = "fe0d767a2a394d1b81ccda6fc0ce5ecc";  // 指定好的秘钥,非Base64和16进制
+
+    private static String aesIv = "activevector4api";   // 偏移量
+
+    private static SecretKeySpec skeySpec;
+
+    private static IvParameterSpec iv;
+
+    /**
+     * 解密方法
+     * @param cipherStr Base64编码的加密字符串
+     * @return 解密后的字符串(UTF8编码)
+     * @throws Exception 异常
+     */
+    public static String decrypt(String cipherStr) throws Exception{
+        // step 1 获得一个密码器
+        Cipher cipher = Cipher.getInstance(ALG_AES_CBC_PKCS5);
+        // step 2 初始化密码器,指定是加密还是解密(Cipher.DECRYPT_MODE 解密; Cipher.ENCRYPT_MODE 加密)
+        // 加密时使用的盐来够造秘钥对象
+        skeySpec = new SecretKeySpec(aesKey.getBytes(),ALGORITHM);
+        // 加密时使用的向量,16位字符串
+        iv = new IvParameterSpec(aesIv.getBytes());
+        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
+        // 对加密报文进行base64解码
+        byte[] encrypted1 = Base64.decodeBase64(cipherStr);
+        // 解密后的报文数组
+        byte[] original = cipher.doFinal(encrypted1);
+        // 输出utf8编码的字符串,输出字符串需要指定编码格式
+        return new String(original, UTF8);
+    }
+
+    /**
+     * 加密
+     * @param plainText 明文
+     * @return Base64编码的密文
+     * @throws Exception  加密异常
+     */
+    public static String encrypt(String plainText) throws Exception{
+        Cipher cipher = Cipher.getInstance(ALG_AES_CBC_PKCS5);
+        skeySpec = new SecretKeySpec(aesKey.getBytes(),ALGORITHM);
+        iv = new IvParameterSpec(aesIv.getBytes());
+        cipher.init(Cipher.ENCRYPT_MODE, skeySpec,iv);
+        // 这里的编码格式需要与解密编码一致
+        byte [] encryptText = cipher.doFinal(plainText.getBytes(UTF8));
+        return Base64.encodeBase64String(encryptText);
+    }
+
+    public static void main(String[] args) throws Exception {
+        // URL解码
+        String decodedUrl = URLDecoder.decode("yfne4dmrwStWwdbUqM3uWpiNWt%2bk3s90G3fTihUUyEtAUHCElrbZBKT%2fxprt4DLf", "UTF-8");
+        System.out.println(decodedUrl);
+        String sds = decrypt(decodedUrl);
+        System.out.println(sds);
+    }
+}

+ 1 - 0
src/main/java/com/template/common/utils/RequestUtils.java

@@ -75,6 +75,7 @@ public class RequestUtils {
      * @return
      */
     public static String httpPost(String url, String param){
+        String dummyData = param.replace("%", "").replace(",", "").replace(" ", "+").replace("/","");
         PrintWriter out = null;
         BufferedReader in = null;
         String result = "";

+ 11 - 0
src/main/java/com/template/common/utils/TimeExchange.java

@@ -142,6 +142,17 @@ public class TimeExchange {
     }
 
     /**
+     * 获取当前时间戳
+     * @return
+     */
+    public static String DateNowTimeStamo(){
+        Date date = new Date();//获取当前的日期
+        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");//设置日期格式
+        String str = df.format(date);//获取String类型的时间
+        return str;
+    }
+
+    /**
      * Date类型转换为10位时间戳
      *
      * @param time

+ 46 - 0
src/main/java/com/template/common/utils/imageUtils.java

@@ -0,0 +1,46 @@
+package com.template.common.utils;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Base64;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/9 星期二 15:17
+ * @Description: com.template.common.utils
+ * @Version: 1.0
+ */
+public class imageUtils {
+
+    public static String getBase64Url(String imagePath){
+        ByteArrayOutputStream outPut = new ByteArrayOutputStream();
+        byte[] data = new byte[1024];
+        try {
+            // 创建URL
+            URL url = new URL(imagePath);
+            // 创建链接
+            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+            conn.setRequestMethod("GET");
+            conn.setConnectTimeout(10 * 1000);
+
+            if(conn.getResponseCode() != 200) {
+                return "fail";//连接失败/链接失效/图片不存在
+            }
+            InputStream inStream = conn.getInputStream();
+            int len = -1;
+            while ((len = inStream.read(data)) != -1) {
+                outPut.write(data, 0, len);
+            }
+            inStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        // 对字节数组Base64编码
+        byte[] encode = Base64.getEncoder().encode(outPut.toByteArray());
+        String res = new String(encode);
+        return res;
+    }
+}

+ 27 - 0
src/main/java/com/template/config/ControlConfig.java

@@ -0,0 +1,27 @@
+package com.template.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigurationProperties(prefix = "accesscontrol")
+@Data
+public class ControlConfig {
+
+    /**
+     * APP ID
+     */
+    private String appId;
+
+    /**
+     * APP SECRET
+     */
+    private String appSecret;
+
+    /**
+     * 百胜学校编号
+     */
+    private String schoolCode;
+}
+

+ 0 - 4
src/main/java/com/template/config/ParkConfig.java

@@ -24,9 +24,5 @@ public class ParkConfig {
      */
     private String appSecret;
 
-    /**
-     * url
-     */
-    private String url;
 }
 

+ 100 - 34
src/main/java/com/template/controller/ScheduleController.java

@@ -6,15 +6,22 @@ import com.seewo.open.sdk.auth.Account;
 import com.template.common.utils.TimeExchange;
 import com.template.config.ScheduleConfig;
 import com.template.config.SeewoConfig;
-import com.template.model.pojo.AttendanceServiceListAttendClassRecordsParam;
-import com.template.model.pojo.AttendanceServiceListAttendClassRecordsRequest;
-import com.template.model.pojo.AttendanceServiceListAttendClassRecordsResult;
+import com.template.model.pojo.SmartAttendance;
+import com.template.model.pojo.SmartClass;
+import com.template.model.pojo.SmartUser;
+import com.template.model.result.CommonResult;
+import com.template.model.seewo.*;
+import com.template.services.SmartClassService;
+import com.template.services.SmartUserService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 
 
 @Component
@@ -27,6 +34,13 @@ public class ScheduleController {
     @Resource
     private ScheduleConfig scheduleConfig;
 
+    @Autowired
+    private SmartClassService smartClassService;
+
+    @Autowired
+    private SmartUserService smartUserService;
+
+
     /**
      * @Scheduled注解会在默认情况下以单线程的方式执行定时任务。 这个“单线程”指两个方面:
      * 如果一个定时任务执行时间大于其任务间隔时间,那么下一次将会等待上一次执行结束后再继续执行。
@@ -54,43 +68,95 @@ public class ScheduleController {
     @Transactional(rollbackFor = {Exception.class})
     public void autoDispatch() throws Exception {
 
-        if(scheduleConfig.getIsOpen().equals("1")){
+        if (scheduleConfig.getIsOpen().equals("1")) {
+
+            List<SmartAttendance> attendances = new ArrayList<>();
+            List<SmartUser> students =smartUserService.queryStudentDatas();
 
             //循环班级的classUid
+            List<SmartClass> classes = smartClassService.getSmartClasss();
+
+            for (SmartClass data : classes) {
+                //region 获取考勤事件ID
+                //初始化客户端
+                SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+                AttendanceRuleListEventByClazzParam kParam = new AttendanceRuleListEventByClazzParam();
+                //响应体,MimeType为 application/json
+                AttendanceRuleListEventByClazzParam.RequestBody kRequestBody = AttendanceRuleListEventByClazzParam.RequestBody.builder()
+                        .build();
+                kParam.setRequestBody(kRequestBody);
+                //query
+                AttendanceRuleListEventByClazzParam.Query kQuery = AttendanceRuleListEventByClazzParam.Query.builder()
+                        .appId(seewoConfig.getAppId())
+                        .schoolUid(seewoConfig.getSchoolId())
+                        .date(TimeExchange.getDate())
+                        .classUid(data.getClassUid())
+                        .page(1)
+                        .pageSize(20)
+                        .build();
+                kRequestBody.setQuery(kQuery);
+                kParam.setRequestBody(kRequestBody);
+                AttendanceRuleListEventByClazzRequest kRequest = new AttendanceRuleListEventByClazzRequest(kParam);
+                System.out.println("入参:" + kRequest);
+                //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+                //request.setServerUrl("https://openapi.test.seewo.com")
+                //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+                AttendanceRuleListEventByClazzResult kResult = seewoClient.invoke(kRequest);
+                System.out.println("出参:" + kResult);
 
+                //考勤事件ID
+                List<String> eventIds = new ArrayList<>();
 
-            /**
-             * 定时获取考勤
-             */
-            //初始化客户端
-            SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
-            AttendanceServiceListAttendClassRecordsParam param = new AttendanceServiceListAttendClassRecordsParam();
-            //响应体,MimeType为 application/json
-            AttendanceServiceListAttendClassRecordsParam.RequestBody requestBody = AttendanceServiceListAttendClassRecordsParam.RequestBody.builder()
-                    .build();
-            param.setRequestBody(requestBody);
-            //query
-            AttendanceServiceListAttendClassRecordsParam.Query query = AttendanceServiceListAttendClassRecordsParam.Query.builder()
-                    .eventId("1316302749783220225")//考勤事件ID 固定写死
-                    .attendDate(TimeExchange.getDate())//考勤日期
-                    .appId(seewoConfig.getAppId())//appid
-                    .grade(1)//年级序号
-                    .classUid("123456789")//班级uid 班级uid与年级序号、班级序号二选一确定具体的班级,如果都填以classUid为准
-                    .clazz(1)//班级序号
-                    .schoolUid(seewoConfig.getSchoolId())//学校uid
-                    .attendType(1)//考勤类型 时间考勤(默认):1  课程考勤:2
-                    .build();
-            requestBody.setQuery(query);
-            param.setRequestBody(requestBody);
-            AttendanceServiceListAttendClassRecordsRequest request = new AttendanceServiceListAttendClassRecordsRequest(param);
-            System.out.println("入参:" +request);
-            //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
-            //request.setServerUrl("https://openapi.test.seewo.com")
-            //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
-            AttendanceServiceListAttendClassRecordsResult result = seewoClient.invoke(request);
-            System.out.println("出参:" +result);
+                if (kResult != null && kResult.getResponseBody().getCode().equals("000000")) {
+                    List<AttendanceRuleListEventByClazzResult.EventsItem> eventItems = kResult.getResponseBody().getData().getEvents();
+                    for (AttendanceRuleListEventByClazzResult.EventsItem eventItem : eventItems) {
+                        eventIds.add(eventItem.getRuleId());
+                    }
+                }
+                //endregion
 
+                for (String eventId : eventIds) {
+                    /**
+                     * 定时获取考勤
+                     */
+                    //初始化客户端
+                    //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+                    AttendanceServiceListAttendClassRecordsParam param = new AttendanceServiceListAttendClassRecordsParam();
+                    //响应体,MimeType为 application/json
+                    AttendanceServiceListAttendClassRecordsParam.RequestBody requestBody = AttendanceServiceListAttendClassRecordsParam.RequestBody.builder()
+                            .build();
+                    param.setRequestBody(requestBody);
+                    //query
+                    AttendanceServiceListAttendClassRecordsParam.Query query = AttendanceServiceListAttendClassRecordsParam.Query.builder()
+                            .eventId(eventId)//考勤事件ID 固定写死
+                            .attendDate(TimeExchange.getDate())//考勤日期
+                            .appId(seewoConfig.getAppId())//appid
+                            .grade(1)//年级序号
+                            .classUid(data.getClassUid())//班级uid 班级uid与年级序号、班级序号二选一确定具体的班级,如果都填以classUid为准
+                            .schoolUid(seewoConfig.getSchoolId())//学校uid
+                            .attendType(1)//考勤类型 时间考勤(默认):1  课程考勤:2
+                            .build();
+                    requestBody.setQuery(query);
+                    param.setRequestBody(requestBody);
+                    AttendanceServiceListAttendClassRecordsRequest request = new AttendanceServiceListAttendClassRecordsRequest(param);
+                    System.out.println("入参:" + request);
+                    //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+                    //request.setServerUrl("https://openapi.test.seewo.com")
+                    //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+                    AttendanceServiceListAttendClassRecordsResult result = seewoClient.invoke(request);
+                    System.out.println("出参:" + result);
 
+                    if (result != null && result.getResponseBody().getCode().equals("000000")) {
+                        String userUid = "";
+                        List<AttendanceServiceListAttendClassRecordsResult.RecordsItem> items = result.getResponseBody().getData().getRecords();
+                        if(students != null && students.size() > 0){
+                            SmartAttendance attnedance = new SmartAttendance();
+                            //SmartUser student = students.stream().filter(e -> e.getXwStudentUid().equals())
+                            //attnedance.setUserId();
+                        }
+                    }
+                }
+            }
         }
     }
 }

+ 44 - 2
src/main/java/com/template/controller/SmartAttendanceController.java

@@ -1,14 +1,22 @@
 package com.template.controller;
 
 
+import com.seewo.open.sdk.DefaultSeewoClient;
+import com.seewo.open.sdk.SeewoClient;
+import com.seewo.open.sdk.auth.Account;
 import com.template.api.SmartAttendanceControllerAPI;
-import com.template.model.pojo.SmartAttendance;
+import com.template.config.SeewoConfig;
+import com.template.model.pojo.*;
 import com.template.model.result.CommonResult;
+import com.template.model.seewo.PersonalLeaveListSchoolPeriodRecordsParam;
+import com.template.model.seewo.PersonalLeaveListSchoolPeriodRecordsRequest;
+import com.template.model.seewo.PersonalLeaveListSchoolPeriodRecordsResult;
 import org.springframework.validation.BindingResult;
-import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+
 /**
  * <p>
  * 楼栋表 前端控制器
@@ -20,6 +28,9 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 public class SmartAttendanceController implements SmartAttendanceControllerAPI {
 
+    @Resource
+    private SeewoConfig seewoConfig;
+
     @Override
     public CommonResult insertSmartAttendance(SmartAttendance smartApply, BindingResult bindingResult) {
         return null;
@@ -39,5 +50,36 @@ public class SmartAttendanceController implements SmartAttendanceControllerAPI {
     public CommonResult deleteSmartAttendanceById(int id) {
         return null;
     }
+
+    @Override
+    public CommonResult queryLeaveRecords() {
+        //初始化客户端
+        SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+        PersonalLeaveListSchoolPeriodRecordsParam param = new PersonalLeaveListSchoolPeriodRecordsParam();
+        //请求体,MimeType为 application/json
+        PersonalLeaveListSchoolPeriodRecordsParam.RequestBody requestBody = PersonalLeaveListSchoolPeriodRecordsParam.RequestBody.builder()
+                .build();
+        param.setRequestBody(requestBody);
+        //query
+        PersonalLeaveListSchoolPeriodRecordsParam.Query query = PersonalLeaveListSchoolPeriodRecordsParam.Query.builder()
+                .schoolUid(seewoConfig.getSchoolId())//学校ID
+                .startDate("2024-01-05")//开始日期
+                .endDate("2024-01-05")//结束日期
+                .page(1)//当前页
+                .pageSize(20)//分页条数
+                .appId(seewoConfig.getAppId())
+                .build();
+        requestBody.setQuery(query);
+        param.setRequestBody(requestBody);
+        PersonalLeaveListSchoolPeriodRecordsRequest request = new PersonalLeaveListSchoolPeriodRecordsRequest(param);
+        System.out.println("入参:" +request);
+        //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+        //request.setServerUrl("https://openapi.test.seewo.com")
+        //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+        PersonalLeaveListSchoolPeriodRecordsResult result = seewoClient.invoke(request);
+        System.out.println("出参:" +result);
+
+        return CommonResult.ok("操作成功");
+    }
 }
 

+ 292 - 8
src/main/java/com/template/controller/SmartClassController.java

@@ -1,21 +1,38 @@
 package com.template.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.seewo.open.sdk.DefaultSeewoClient;
+import com.seewo.open.sdk.SeewoClient;
+import com.seewo.open.sdk.auth.Account;
 import com.template.api.SmartClassControllerAPI;
-import com.template.model.pojo.SmartClass;
-import com.template.model.pojo.SmartGrade;
+import com.template.common.utils.*;
+import com.template.config.ControlConfig;
+import com.template.config.SeewoConfig;
+import com.template.model.pojo.*;
+import com.template.model.request.insertSmartClassRequest;
+import com.template.model.request.updateClassRequest;
 import com.template.model.result.CommonResult;
-import com.template.model.vo.SemesterVo;
+import com.template.model.result.PageUtils;
+import com.template.model.seewo.*;
+import com.template.model.vo.*;
 import com.template.services.SmartClassService;
 import com.template.services.SmartGradeService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
 
+import static com.template.common.utils.AesTestOne.decrypt;
+
 /**
  * <p>
  * 楼栋表 前端控制器
@@ -27,8 +44,14 @@ import java.util.List;
 @RestController
 public class SmartClassController implements SmartClassControllerAPI {
 
+    @Resource
+    private SeewoConfig seewoConfig;
+    @Resource
+    private ControlConfig controlConfig;
     @Autowired
     private SmartClassService smartClassService;
+    @Autowired
+    private SmartGradeService smartGradeService;
 
     @Override
     public CommonResult insertSmartClass(SmartClass smartApply, BindingResult bindingResult) {
@@ -36,13 +59,68 @@ public class SmartClassController implements SmartClassControllerAPI {
     }
 
     @Override
-    public CommonResult updateSmartClassById(SmartClass ra, BindingResult bindingResult) {
-        return null;
+    public CommonResult updateSmartClassById(updateClassRequest ucr, BindingResult bindingResult) throws Exception {
+        if (bindingResult.hasErrors()) {
+            String st = paramUtils.getParamError(bindingResult);
+            return CommonResult.fail(st);
+        }
+
+        //数据ID是否有效
+        SmartClass oldData = smartClassService.querySmartClassById(ucr.getId());
+        if(oldData == null){
+            return CommonResult.fail("班级数据无效,更新失败");
+        }
+
+        //判断重复性
+        SmartClass existData = smartClassService.existSmartClassData(ucr.getName(), ucr.getClassNo());
+        if (existData != null && existData.getId().equals(ucr.getId())) {
+            return CommonResult.fail("该班级数据已在系统中存在,更新失败");
+        }
+
+        //region 修改百胜中的班级数据
+        String appId = controlConfig.getAppId();
+        String schoolno = controlConfig.getSchoolCode();
+        String timestamp = TimeExchange.DateNowTimeStamo();
+        String className = ucr.getName();
+        String appSecret = controlConfig.getAppSecret();
+        String url = "http://schoolopenapi.szymzh.com/openapi/classtab/update";
+
+        JSONObject jsonobject = new JSONObject();
+        jsonobject.put("appid", appId);
+        String str = "{\"classtab_no\":\"" + oldData.getBsClassNo() + "\",\"classtab_name\":\"" + oldData.getName() + "\"}";
+        String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
+        jsonobject.put("data", aesStr);
+        jsonobject.put("schoolno", schoolno);
+        jsonobject.put("timestamp", timestamp);
+        String md5Str = "appid=" + appId + "&data={\"classtab_no\":\"" + oldData.getBsClassNo() + "\",\"classtab_name\":\"" + oldData.getName() + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+        String sign = CommonUtil.MD5(md5Str);
+        //sign签名
+        jsonobject.put("sign", sign);
+
+        //返回的结果中 code为1表示成功
+        String result = RequestUtils.httpPost(url, jsonobject.toJSONString());
+
+        if (result.contains("更新成功")) {
+            oldData.setClassNo(ucr.getClassNo());
+            oldData.setName(ucr.getName());
+            int updateClass = smartClassService.updateSmartClass(oldData);
+
+            if(updateClass <= 0){
+                return CommonResult.fail("班级信息更新失败");
+            }
+        }else{
+            return CommonResult.fail("班级信息更新失败");
+        }
+        //endregion
+
+        return CommonResult.ok("班级信息更新成功");
     }
 
     @Override
     public CommonResult queryPageSmartClasss(int currentPage, int pageCount, String name) {
-        return null;
+        PageUtils<SmartClass> result = smartClassService.queryPageSmartClass(currentPage, pageCount, name);
+
+        return CommonResult.ok(result);
     }
 
     @Override
@@ -51,8 +129,8 @@ public class SmartClassController implements SmartClassControllerAPI {
     }
 
     @Override
-    public CommonResult querySmartClasss() {
-        List<SmartClass> datas = smartClassService.getSmartClasss();
+    public CommonResult querySmartClasss(int gradeId) {
+        List<SmartClass> datas = smartClassService.getSmartClassByGradeID(gradeId);
         List<SemesterVo> result = new ArrayList<>();
         for (SmartClass data : datas) {
             SemesterVo model = new SemesterVo();
@@ -62,5 +140,211 @@ public class SmartClassController implements SmartClassControllerAPI {
         }
         return CommonResult.ok(result);
     }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public CommonResult insertSmartClassToBaisheng(insertSmartClassRequest iscr, BindingResult bindingResult) throws Exception {
+        if (bindingResult.hasErrors()) {
+            String st = paramUtils.getParamError(bindingResult);
+            return CommonResult.fail(st);
+        }
+
+        //先查找年级编号对应的年级数据是否存在
+        SmartGrade grade = smartGradeService.querySmartGradeByBaisheng(iscr.getGradeNo());
+        if (grade == null) {
+            return CommonResult.fail("添加班级前,请先添加对应年级数据");
+        }
+
+        //判断重复性
+        int existCount = smartClassService.existSmartClass(iscr.getClassName(), grade.getId());
+        if (existCount > 0) {
+            return CommonResult.fail("该班级数据已在系统中存在,请勿重复添加");
+        }
+
+        String appId = controlConfig.getAppId();
+        String schoolno = controlConfig.getSchoolCode();
+        String timestamp = TimeExchange.DateNowTimeStamo();
+        String className = iscr.getClassName();
+        String gradeNo = iscr.getGradeNo();
+        String appSecret = controlConfig.getAppSecret();
+        String url = "http://schoolopenapi.szymzh.com/openapi/classtab/create";
+
+        JSONObject jsonobject = new JSONObject();
+        jsonobject.put("appid", appId);
+        String str = "{\"grade_no\":\"" + gradeNo + "\",\"classtab_name\":\"" + grade.getName() + className + "\"}";
+        String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
+        jsonobject.put("data", aesStr);
+        jsonobject.put("schoolno", schoolno);
+        jsonobject.put("timestamp", timestamp);
+
+        String md5Str = "appid=" + appId + "&data={\"grade_no\":\"" + gradeNo + "\",\"classtab_name\":\"" + grade.getName() + className + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+        String sign = CommonUtil.MD5(md5Str);
+        //sign签名
+        jsonobject.put("sign", sign);
+
+        //返回的结果中 code为1表示成功
+        String result = RequestUtils.httpPost(url, jsonobject.toJSONString());
+
+        if (result.contains("添加成功")) {
+
+            //region 将K12校区的班级数据初始化
+            //希沃班级传输特点:
+            //当前月份小于9月份就传当前年份 - 1 ;如果大于9月份就传当前年份
+            Integer nowMonth = Integer.valueOf(TimeExchange.getNowMonth());
+            //初始化客户端
+            SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+            OrganizationNodeServiceInitSchoolClassesParam kParam = new OrganizationNodeServiceInitSchoolClassesParam();
+            //响应体,MimeType为 application/json
+            OrganizationNodeServiceInitSchoolClassesParam.RequestBody kRequestBody = OrganizationNodeServiceInitSchoolClassesParam.RequestBody.builder()
+                    .build();
+            kParam.setRequestBody(kRequestBody);
+            //query
+            OrganizationNodeServiceInitSchoolClassesParam.Query kQuery = OrganizationNodeServiceInitSchoolClassesParam.Query.builder()
+                    .appId(seewoConfig.getAppId())
+                    .unitUid(seewoConfig.getSchoolId())
+                    .campusName("宜阳学校")
+                    .build();
+            kRequestBody.setQuery(kQuery);
+            //新增班级列表(最大200条)
+            OrganizationNodeServiceInitSchoolClassesParam.Object kClassList = OrganizationNodeServiceInitSchoolClassesParam.Object.builder()
+                    .stageName("初中")
+                    .gradeYear(nowMonth < 9 ? Integer.valueOf(TimeExchange.getYear()).intValue() - 1 : Integer.valueOf(TimeExchange.getYear()))
+                    .build();
+            kQuery.setClassList(java.util.Collections.singletonList(kClassList));
+            kParam.setRequestBody(kRequestBody);
+            OrganizationNodeServiceInitSchoolClassesRequest kRequest = new OrganizationNodeServiceInitSchoolClassesRequest(kParam);
+            System.out.println("入参:" + kRequest);
+            //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+            //request.setServerUrl("https://openapi.test.seewo.com")
+            //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+            OrganizationNodeServiceInitSchoolClassesResult kResult = seewoClient.invoke(kRequest);
+            System.out.println("出参:" + kResult);
+            //endregion
+
+
+            //region 将数据加入希沃系统中
+            //初始化客户端
+            //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+            ClassServiceBatchSaveClassParam param = new ClassServiceBatchSaveClassParam();
+            //请求体,MimeType为 application/json
+            ClassServiceBatchSaveClassParam.JSONRequestBody requestBody = ClassServiceBatchSaveClassParam.JSONRequestBody.builder()
+                    .build();
+            param.setRequestBody(requestBody);
+            //查询条件
+            ClassServiceBatchSaveClassParam.ClassSaveQuery query = ClassServiceBatchSaveClassParam.ClassSaveQuery.builder()
+                    .appId(seewoConfig.getAppId())
+                    .schoolUid(seewoConfig.getSchoolId())
+                    .build();
+            requestBody.setQuery(query);
+
+            //班级信息列表
+            ClassServiceBatchSaveClassParam.ClassInfo classList = ClassServiceBatchSaveClassParam.ClassInfo.builder()
+                    .stageCode("CodeSchoolStage_1")
+                    .clazz(iscr.getClassNo())
+                    .nickName(iscr.getClassName())
+                    .grade(grade.getGradeNo())
+                    .gradeYear(nowMonth < 9 ? Integer.valueOf(TimeExchange.getYear()).intValue() - 1 : Integer.valueOf(TimeExchange.getYear()))
+                    .build();
+            query.setClassList(java.util.Collections.singletonList(classList));
+            param.setRequestBody(requestBody);
+            ClassServiceBatchSaveClassRequest request = new ClassServiceBatchSaveClassRequest(param);
+            System.out.println("入参:" + request);
+            //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+            // request.setServerUrl("https://openapi.test.seewo.com")
+            //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+            ClassServiceBatchSaveClassResult xwResult = seewoClient.invoke(request);
+            System.out.println("出参:" + xwResult);
+
+            if (xwResult == null) {
+                return CommonResult.fail("希沃班级数据新增失败!");
+            }
+
+            if (!xwResult.getResponseBody().getCode().equals("000000")) {
+                return CommonResult.fail(xwResult.getResponseBody().getMessage());
+            }
+            //endregion
+
+            //希沃添加年级和班级数据是:存在就覆盖 不存在就新增
+            //要拿到希沃的年级Uid和班级Uid
+            String gradeUid = xwResult.getResponseBody().getData().get(0).getGradeUid();
+            String classUid = xwResult.getResponseBody().getData().get(0).getUid();
+
+            ObjectMapper objectMapper = new ObjectMapper();
+            BsClassVo classVo = objectMapper.readValue(result, BsClassVo.class);
+
+            // URL解码
+            String decodedUrl = URLDecoder.decode(classVo.getData(), "UTF-8");
+
+            BsClassNoVo classNo = objectMapper.readValue(decrypt(decodedUrl), BsClassNoVo.class);
+
+            if (classNo == null) {
+                return CommonResult.fail("百胜班级编号为空,新增失败");
+            }
+
+            SmartClass smartClass = new SmartClass();
+            smartClass.setGradeId(grade.getId());
+            smartClass.setClassUid(classUid);
+            smartClass.setName(iscr.getClassName());
+            smartClass.setClassNo(iscr.getClassNo());
+            smartClass.setBsClassNo(classNo.getClasstab_no());
+
+            grade.setGradeUid(gradeUid);
+
+            try {
+                int insertClass = smartClassService.insertSmartClass(smartClass);
+                if (insertClass <= 0) {
+                    throw new Exception("新增失败");
+                }
+
+                int updateGrade = smartGradeService.updateSmartGrade(grade);
+                if (updateGrade <= 0) {
+                    throw new Exception("新增失败");
+                }
+
+            } catch (Exception e) {
+                throw new Exception("新增失败");
+            }
+
+            return CommonResult.ok("新增成功");
+
+        }
+
+        return CommonResult.fail("操作失败");
+
+    }
+
+    @Override
+    public CommonResult initSchoolClasses() {
+        //初始化客户端
+        SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+        OrganizationNodeServiceInitSchoolClassesParam param = new OrganizationNodeServiceInitSchoolClassesParam();
+        //响应体,MimeType为 application/json
+        OrganizationNodeServiceInitSchoolClassesParam.RequestBody requestBody = OrganizationNodeServiceInitSchoolClassesParam.RequestBody.builder()
+                .build();
+        param.setRequestBody(requestBody);
+        //query
+        OrganizationNodeServiceInitSchoolClassesParam.Query query = OrganizationNodeServiceInitSchoolClassesParam.Query.builder()
+                .appId(seewoConfig.getAppId())
+                .unitUid(seewoConfig.getSchoolId())
+                .campusName("宜阳学校")
+                .build();
+        requestBody.setQuery(query);
+        //新增班级列表(最大200条)
+        OrganizationNodeServiceInitSchoolClassesParam.Object classList = OrganizationNodeServiceInitSchoolClassesParam.Object.builder()
+                .stageName("初中")
+                .gradeYear(2022)
+                .build();
+        query.setClassList(java.util.Collections.singletonList(classList));
+        param.setRequestBody(requestBody);
+        OrganizationNodeServiceInitSchoolClassesRequest request = new OrganizationNodeServiceInitSchoolClassesRequest(param);
+        System.out.println("入参:" + request);
+        //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+        //request.setServerUrl("https://openapi.test.seewo.com")
+        //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+        OrganizationNodeServiceInitSchoolClassesResult result = seewoClient.invoke(request);
+        System.out.println("出参:" + result);
+
+        return null;
+    }
 }
 

+ 92 - 4
src/main/java/com/template/controller/SmartDepartmentController.java

@@ -1,25 +1,35 @@
 package com.template.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.template.api.SmartDepartmentControllerAPI;
-import com.template.common.utils.paramUtils;
+import com.template.common.utils.*;
+import com.template.config.ControlConfig;
 import com.template.model.pojo.SmartDepartment;
 import com.template.model.request.insertDepartmentRequest;
 import com.template.model.request.updateDepartmentRequest;
 import com.template.model.result.CommonResult;
 import com.template.model.result.PageUtils;
-import com.template.model.vo.DepartmentTreeVo;
+import com.template.model.vo.*;
 import com.template.services.SmartDepartmentService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static com.template.common.utils.AesTestOne.decrypt;
+
 /**
  * <p>
  * 前端控制器
@@ -31,6 +41,9 @@ import java.util.stream.Collectors;
 @RestController
 public class SmartDepartmentController implements SmartDepartmentControllerAPI {
 
+    @Resource
+    private ControlConfig controlConfig;
+
     @Autowired
     private SmartDepartmentService smartDepartmentService;
 
@@ -42,7 +55,7 @@ public class SmartDepartmentController implements SmartDepartmentControllerAPI {
      * @return
      */
     @Override
-    public CommonResult insertSmartDepartment(insertDepartmentRequest smartDepartment, BindingResult bindingResult) {
+    public CommonResult insertSmartDepartment(insertDepartmentRequest smartDepartment, BindingResult bindingResult) throws Exception {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
             return CommonResult.fail(st);
@@ -59,6 +72,41 @@ public class SmartDepartmentController implements SmartDepartmentControllerAPI {
         sd.setParentId(smartDepartment.getParentId());
         sd.setName(smartDepartment.getName());
 
+        //region 百胜添加教师数据
+        String appId = controlConfig.getAppId();
+        String schoolno = controlConfig.getSchoolCode();
+        String timestamp = TimeExchange.DateNowTimeStamo();
+        String appSecret = controlConfig.getAppSecret();
+        String url = "http://schoolopenapi.szymzh.com/openapi/department/create";
+
+        JSONObject jsonobject = new JSONObject();
+        jsonobject.put("appid", appId);
+        String str = "{\"department_name\":\"" + smartDepartment.getName() + "\"}";
+        String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
+        jsonobject.put("data", aesStr);
+        jsonobject.put("schoolno", schoolno);
+        jsonobject.put("timestamp", timestamp);
+
+        String md5Str = "appid=" + appId + "&data={\"department_name\":\"" + smartDepartment.getName() + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+        String sign = CommonUtil.MD5(md5Str);
+        //sign签名
+        jsonobject.put("sign", sign);
+
+        //返回的结果中 code为1表示成功
+        String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString());
+
+        if (bsResult.contains("添加成功")) {
+            ObjectMapper objectMapper = new ObjectMapper();
+            BsDepartmentVo department = objectMapper.readValue(bsResult, BsDepartmentVo.class);
+
+            // URL解码
+            String decodedUrl = URLDecoder.decode(department.getData(), "UTF-8");
+
+            BsDepartmentNoVo departmentData = objectMapper.readValue(decrypt(decodedUrl), BsDepartmentNoVo.class);
+            sd.setBsDepartmentNo(departmentData.getDepartment_no());
+        }
+        //endregion
+
         int result = smartDepartmentService.insertSmartDepartment(sd);
 
         return result > 0 ? CommonResult.ok("添加成功") : CommonResult.fail("添加失败");
@@ -72,12 +120,17 @@ public class SmartDepartmentController implements SmartDepartmentControllerAPI {
      * @return
      */
     @Override
-    public CommonResult updateSmartDepartmentById(updateDepartmentRequest udr, BindingResult bindingResult) {
+    public CommonResult updateSmartDepartmentById(updateDepartmentRequest udr, BindingResult bindingResult) throws Exception {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
             return CommonResult.fail(st);
         }
 
+        SmartDepartment oldData = smartDepartmentService.getSmartById(udr.getId());
+        if(oldData == null){
+            return CommonResult.fail("部门数据无效,修改失败");
+        }
+
         SmartDepartment exist = smartDepartmentService.getSmartByName(udr.getName());
         if (exist != null && !exist.getId().equals(udr.getId())) {
             return CommonResult.fail(udr.getName() + "部门名称数据已存在,请勿重复添加!");
@@ -88,6 +141,41 @@ public class SmartDepartmentController implements SmartDepartmentControllerAPI {
         sd.setParentId(udr.getParentId());
         sd.setName(udr.getName());
 
+        //region 百胜添加教师数据
+        String appId = controlConfig.getAppId();
+        String schoolno = controlConfig.getSchoolCode();
+        String timestamp = TimeExchange.DateNowTimeStamo();
+        String appSecret = controlConfig.getAppSecret();
+        String url = "http://schoolopenapi.szymzh.com/openapi/department/update";
+
+        JSONObject jsonobject = new JSONObject();
+        jsonobject.put("appid", appId);
+        String str = "{\"department_no\":\"" + oldData.getBsDepartmentNo() + "\"department_name\":\"" + udr.getName() + "\"}";
+        String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
+        jsonobject.put("data", aesStr);
+        jsonobject.put("schoolno", schoolno);
+        jsonobject.put("timestamp", timestamp);
+
+        String md5Str = "appid=" + appId + "&data={\"department_no\":\"" + oldData.getBsDepartmentNo() + "\"department_name\":\"" + udr.getName() + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+        String sign = CommonUtil.MD5(md5Str);
+        //sign签名
+        jsonobject.put("sign", sign);
+
+        //返回的结果中 code为1表示成功
+        String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString());
+
+        if (bsResult.contains("添加成功")) {
+            ObjectMapper objectMapper = new ObjectMapper();
+            BsDepartmentVo department = objectMapper.readValue(bsResult, BsDepartmentVo.class);
+
+            // URL解码
+            String decodedUrl = URLDecoder.decode(department.getData(), "UTF-8");
+
+            BsDepartmentNoVo departmentData = objectMapper.readValue(decrypt(decodedUrl), BsDepartmentNoVo.class);
+            sd.setBsDepartmentNo(departmentData.getDepartment_no());
+        }
+        //endregion
+
         int result = smartDepartmentService.updateSmartDepartment(sd);
         return result > 0 ? CommonResult.ok("修改成功") : CommonResult.fail("修改失败");
     }

+ 141 - 5
src/main/java/com/template/controller/SmartGradeController.java

@@ -1,20 +1,34 @@
 package com.template.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.template.api.SmartGradeControllerAPI;
+import com.template.common.utils.*;
+import com.template.config.ControlConfig;
 import com.template.model.pojo.SmartGrade;
+import com.template.model.pojo.SmartSchool;
+import com.template.model.request.insertSmartGradeRequest;
+import com.template.model.request.updateSmartGradeRequest;
 import com.template.model.result.CommonResult;
+import com.template.model.result.PageUtils;
+import com.template.model.vo.BsGradeNoVo;
+import com.template.model.vo.BsGradeVo;
 import com.template.model.vo.SemesterVo;
 import com.template.services.SmartGradeService;
-import com.template.services.SmartIdentityService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
 
+import static com.template.common.utils.AesTestOne.decrypt;
+
 /**
  * <p>
  * 年级表 前端控制器
@@ -26,22 +40,81 @@ import java.util.List;
 @RestController
 public class SmartGradeController implements SmartGradeControllerAPI {
 
+    @Resource
+    private ControlConfig controlConfig;
     @Autowired
     private SmartGradeService smartGradeService;
 
     @Override
-    public CommonResult insertSmartGrade(SmartGrade smartApply, BindingResult bindingResult) {
+    public CommonResult insertSmartGrade(SmartGrade smartGrade, BindingResult bindingResult) {
         return null;
     }
 
     @Override
-    public CommonResult updateSmartGradeById(SmartGrade ra, BindingResult bindingResult) {
-        return null;
+    public CommonResult updateSmartGradeById(updateSmartGradeRequest usgr, BindingResult bindingResult) throws Exception {
+        if (bindingResult.hasErrors()) {
+            String st = paramUtils.getParamError(bindingResult);
+            return CommonResult.fail(st);
+        }
+
+        //数据ID是否有效
+        SmartGrade oldData = smartGradeService.querySmartGradeById(usgr.getId());
+        if(oldData == null){
+            return CommonResult.fail("年级数据无效,更新失败");
+        }
+
+        //判断重复性
+        SmartGrade existData = smartGradeService.existSmartGradeData(usgr.getGradeNo(), usgr.getGradeName());
+        if (existData != null && existData.getId().equals(usgr.getId())) {
+            return CommonResult.fail("该年级数据已在系统中存在,请勿重复添加");
+        }
+
+        //region 修改百胜中的年级数据
+        String appId = controlConfig.getAppId();
+        String schoolno = controlConfig.getSchoolCode();
+        String timestamp = TimeExchange.DateNowTimeStamo();
+        String gradeName = usgr.getGradeName();
+        String appSecret = controlConfig.getAppSecret();
+        String url = "http://schoolopenapi.szymzh.com/openapi/grade/update";
+
+        JSONObject jsonobject = new JSONObject();
+        jsonobject.put("appid", appId);
+        String str = "{\"grade_no\":\"" + oldData.getBsGradeNo() + "\",\"grade_name\":\"" + gradeName + "\"}";
+        String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
+        jsonobject.put("data", aesStr);
+        jsonobject.put("schoolno", schoolno);
+        jsonobject.put("timestamp", timestamp);
+
+        //appid=ymdd36ed157ac423e2&carNo=赣U123659&parkKey=wdcmq9rc&rand=9.94995525689689966&reserveEndTime=2023-12-22 20:12:10&reserveTime=2023-12-21 18:12:10&version=v1.0&50596cd243dc4547b4c05f01f8ea02a4
+        String md5Str = "appid=" + appId + "&data={\"grade_no\":\"" + oldData.getBsGradeNo() + "\",\"grade_name\":\"" + gradeName + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+        String sign = CommonUtil.MD5(md5Str);
+        //sign签名
+        jsonobject.put("sign", sign);
+
+        //返回的结果中 code为1表示成功
+        String result = RequestUtils.httpPost(url, jsonobject.toJSONString());
+
+        if (result.contains("更新成功")) {
+            oldData.setGradeNo(usgr.getGradeNo());
+            oldData.setName(usgr.getGradeName());
+            int updateGrade = smartGradeService.updateSmartGrade(oldData);
+
+            if(updateGrade <= 0){
+                return CommonResult.fail("年级信息更新失败");
+            }
+        }else{
+            return CommonResult.fail("年级信息更新失败");
+        }
+        //endregion
+
+        return CommonResult.ok("年级信息更新成功");
     }
 
     @Override
     public CommonResult queryPageSmartGrades(int currentPage, int pageCount, String name) {
-        return null;
+        PageUtils<SmartGrade> result = smartGradeService.queryPageSmartGrade(currentPage, pageCount, name);
+
+        return CommonResult.ok(result);
     }
 
     @Override
@@ -61,5 +134,68 @@ public class SmartGradeController implements SmartGradeControllerAPI {
         }
         return CommonResult.ok(result);
     }
+
+    @Override
+    public CommonResult insertSmartGradeToBaisheng(insertSmartGradeRequest isgr, BindingResult bindingResult) throws Exception {
+        if (bindingResult.hasErrors()) {
+            String st = paramUtils.getParamError(bindingResult);
+            return CommonResult.fail(st);
+        }
+
+        //判断重复性
+        int existCount = smartGradeService.existSmartGrade(isgr.getGradeNo(), isgr.getGradeName());
+        if (existCount > 0) {
+            return CommonResult.fail("该年级数据已在系统中存在,请勿重复添加");
+        }
+
+        String appId = controlConfig.getAppId();
+        String schoolno = controlConfig.getSchoolCode();
+        String timestamp = TimeExchange.DateNowTimeStamo();
+        String gradeName = isgr.getGradeName();
+        String appSecret = controlConfig.getAppSecret();
+        String url = "http://schoolopenapi.szymzh.com/openapi/grade/create";
+
+        JSONObject jsonobject = new JSONObject();
+        jsonobject.put("appid", appId);
+        String str = "{\"grade_name\":\"" + gradeName + "\"}";
+        String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
+        jsonobject.put("data", aesStr);
+        jsonobject.put("schoolno", schoolno);
+        jsonobject.put("timestamp", timestamp);
+
+        //appid=ymdd36ed157ac423e2&carNo=赣U123659&parkKey=wdcmq9rc&rand=9.94995525689689966&reserveEndTime=2023-12-22 20:12:10&reserveTime=2023-12-21 18:12:10&version=v1.0&50596cd243dc4547b4c05f01f8ea02a4
+        String md5Str = "appid=" + appId + "&data={\"grade_name\":\"" + gradeName + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+        String sign = CommonUtil.MD5(md5Str);
+        //sign签名
+        jsonobject.put("sign", sign);
+
+        //返回的结果中 code为1表示成功
+        String result = RequestUtils.httpPost(url, jsonobject.toJSONString());
+
+        if (result.contains("添加成功")) {
+            ObjectMapper objectMapper = new ObjectMapper();
+            BsGradeVo grade = objectMapper.readValue(result, BsGradeVo.class);
+
+            // URL解码
+            String decodedUrl = URLDecoder.decode(grade.getData(), "UTF-8");
+
+            BsGradeNoVo gradeNo = objectMapper.readValue(decrypt(decodedUrl), BsGradeNoVo.class);
+
+            SmartGrade smartGrade = new SmartGrade();
+            smartGrade.setGradeNo(isgr.getGradeNo());
+            smartGrade.setName(isgr.getGradeName());
+            smartGrade.setBsGradeNo(gradeNo.getGrade_no());
+
+            int insertResult = smartGradeService.insertSmartGrade(smartGrade);
+
+            return insertResult > 0 ? CommonResult.ok("添加成功") : CommonResult.fail("添加失败");
+
+        } else {
+            CommonResult.fail("添加失败");
+        }
+
+        return CommonResult.ok("添加成功");
+    }
+
 }
 

+ 22 - 4
src/main/java/com/template/controller/SmartIdentityController.java

@@ -9,6 +9,7 @@ import com.template.model.request.insertIdentityRequest;
 import com.template.model.request.updateIdentityRequest;
 import com.template.model.result.CommonResult;
 import com.template.model.result.PageUtils;
+import com.template.model.vo.SemesterVo;
 import com.template.services.SmartIdentityService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +17,7 @@ import org.springframework.validation.BindingResult;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -48,7 +50,7 @@ public class SmartIdentityController implements SmartIdentityControllerAPI {
         }
 
         SmartIdentity data = smartIdentityService.queryIdentityByName(smartIdentity.getName());
-        if(data != null){
+        if (data != null) {
             return CommonResult.fail("该身份已存在");
         }
 
@@ -75,14 +77,14 @@ public class SmartIdentityController implements SmartIdentityControllerAPI {
         }
 
         SmartIdentity oldData = smartIdentityService.getSmartById(sa.getId());
-        if(oldData == null){
+        if (oldData == null) {
             return CommonResult.fail("身份数据无效,修改失败");
         }
 
-        if(sa.getName() != null && !sa.getName().equals(oldData.getName())){
+        if (sa.getName() != null && !sa.getName().equals(oldData.getName())) {
             //查看是否存在相同身份的数据
             SmartIdentity data = smartIdentityService.queryIdentityByName(sa.getName());
-            if(data != null){
+            if (data != null) {
                 return CommonResult.fail("该身份已存在");
             }
         }
@@ -130,5 +132,21 @@ public class SmartIdentityController implements SmartIdentityControllerAPI {
 
         return result > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败");
     }
+
+    @Override
+    public CommonResult querySmartIdentitys() {
+
+        List<SmartIdentity> datas = smartIdentityService.list(null);
+
+        List<SemesterVo> result = new ArrayList<>();
+        for (SmartIdentity data : datas) {
+            SemesterVo model = new SemesterVo();
+            model.setId(data.getId());
+            model.setName(data.getName());
+            result.add(model);
+        }
+
+        return CommonResult.ok(result);
+    }
 }
 

+ 103 - 0
src/main/java/com/template/controller/SmartMenuController.java

@@ -0,0 +1,103 @@
+package com.template.controller;
+
+
+import com.template.api.SmartMenuControllerAPI;
+import com.template.common.utils.paramUtils;
+import com.template.model.pojo.SmartMenu;
+import com.template.model.pojo.SmartSchool;
+import com.template.model.request.insertMenuRequest;
+import com.template.model.request.updateMenuRequest;
+import com.template.model.result.CommonResult;
+import com.template.model.result.PageUtils;
+import com.template.services.SmartMenuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 应用管理 前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2024-01-16
+ */
+@RestController
+public class SmartMenuController implements SmartMenuControllerAPI {
+
+    @Autowired
+    private SmartMenuService smartMenuService;
+
+    @Override
+    public CommonResult insertSmartMenu(insertMenuRequest imr, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            String st = paramUtils.getParamError(bindingResult);
+            return CommonResult.fail(st);
+        }
+        //去重判断
+        SmartMenu existSm = smartMenuService.querySmartMenuByName(imr.getName(),imr.getRoute());
+        if(existSm != null){
+            return CommonResult.fail("系统中存在重复菜单,添加失败");
+        }
+
+        SmartMenu sm = new SmartMenu();
+        sm.setName(imr.getName());
+        sm.setRoute(imr.getRoute());
+
+        int result = smartMenuService.insertSmartMenu(sm);
+
+        return result > 0 ? CommonResult.ok("添加成功") : CommonResult.fail("添加失败");
+    }
+
+    @Override
+    public CommonResult updateSmartMenuById(updateMenuRequest umr, BindingResult bindingResult) throws Exception {
+        if (bindingResult.hasErrors()) {
+            String st = paramUtils.getParamError(bindingResult);
+            return CommonResult.fail(st);
+        }
+
+        if(umr.getId() == null){
+            return CommonResult.fail("数据ID不能为空");
+        }
+
+        SmartMenu oldData = smartMenuService.getSmartById(umr.getId());
+        if(oldData == null){
+            return CommonResult.fail("菜单基本信息无效,修改失败");
+        }
+
+        //去重判断
+        SmartMenu existSm = smartMenuService.querySmartMenuByName(umr.getName(),umr.getRoute());
+        if(existSm != null){
+            return CommonResult.fail("系统中存在重复菜单,修改失败");
+        }
+
+        oldData.setName(umr.getName() == null ? oldData.getName() : umr.getName());
+        oldData.setRoute(umr.getRoute() == null ? oldData.getRoute() : umr.getRoute());
+
+        int result = smartMenuService.updateSmartMenu(oldData);
+        return result > 0 ? CommonResult.ok("修改成功") : CommonResult.fail("修改失败");
+    }
+
+    @Override
+    public CommonResult queryPageSmartMenus(int currentPage, int pageCount, String name) {
+        PageUtils<SmartMenu> result = smartMenuService.queryPageSmartMenus(currentPage, pageCount, name);
+
+        return CommonResult.ok(result);
+    }
+
+    @Override
+    public CommonResult deleteSmartMenuById(int id) {
+        SmartMenu data = smartMenuService.getSmartById(id);
+
+        if(data == null){
+            return CommonResult.fail("当前数据不存在,删除失败!");
+        }
+
+        int result = smartMenuService.deleteSmartMenuById(id);
+
+        return result > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败");
+    }
+
+}
+

+ 13 - 6
src/main/java/com/template/controller/SmartScoreController.java

@@ -160,9 +160,12 @@ public class SmartScoreController implements SmartScoreControllerAPI {
                 data.setSemester(spv.getSemester());
                 data.setGrade(spv.getGrade());
                 data.setSchoolClass(spv.getSchoolClass());
-                data.setSubject(eSubjectStatu.stringOf(spv.getSubjectId()));
-                data.setExamType(eExamType.stringOf(spv.getExamType()));
+                data.setSubject(spv.getSubjectId());
+                data.setSubjectStr(eSubjectStatu.stringOf(spv.getSubjectId()));
+                data.setExamType(spv.getExamType());
+                data.setExamTypeStr(eExamType.stringOf(spv.getExamType()));
                 data.setName(spv.getName());
+                data.setUserId(spv.getUserId());
                 data.setCardNo(spv.getCardNo());
                 data.setScore(spv.getScore());
                 datas.add(data);
@@ -367,12 +370,12 @@ public class SmartScoreController implements SmartScoreControllerAPI {
 
         try{
             //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
-            for (int rowNum = 1;rowNum < sheetAt.getLastRowNum() + 1;rowNum++){
+            for (int rowNum = 0;rowNum < sheetAt.getLastRowNum();rowNum++){
 
                 HSSFRow row = sheetAt.getRow(rowNum);
 
                 //判断每一列单元格是否符合规则
-                if(rowNum == 1){
+                if(rowNum == 0){
                     String semester = dataFormatter.formatCellValue(row.getCell(0));//学期
                     if (!semester.equals("学期")) {
                         return CommonResult.fail("导入数据第一列为学期");
@@ -437,6 +440,8 @@ public class SmartScoreController implements SmartScoreControllerAPI {
                     Optional<SmartUser> user = users.stream().filter(e -> e.getCardNo().equals(cardNo)).findFirst();
                     if(user != null && user.isPresent()){
                         data.setUserId(user.get().getId());
+                    }else{
+                        return CommonResult.fail("当前系统中不存在"+name+"的学生信息,无法导入成绩");
                     }
                     data.setSubjectId(eSubjectStatu.integerOf(subject));
                     data.setExamType(eExamType.integerOf(examType));
@@ -474,12 +479,12 @@ public class SmartScoreController implements SmartScoreControllerAPI {
 
         try{
             //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
-            for (int rowNum = 1;rowNum < sheetAt.getLastRowNum() + 1;rowNum++){
+            for (int rowNum = 0;rowNum < sheetAt.getLastRowNum();rowNum++){
 
                 XSSFRow row = sheetAt.getRow(rowNum);
 
                 //判断每一列单元格是否符合规则
-                if(rowNum == 1){
+                if(rowNum == 0){
                     String semester = dataFormatter.formatCellValue(row.getCell(0));//学期
                     if (!semester.equals("学期")) {
                         return CommonResult.fail("导入数据第一列为学期");
@@ -544,6 +549,8 @@ public class SmartScoreController implements SmartScoreControllerAPI {
                     Optional<SmartUser> user = users.stream().filter(e -> e.getCardNo().equals(cardNo)).findFirst();
                     if(user != null && user.isPresent()){
                         data.setUserId(user.get().getId());
+                    }else{
+                        return CommonResult.fail("当前系统中不存在"+name+"的学生信息,无法导入成绩");
                     }
                     data.setSubjectId(eSubjectStatu.integerOf(subject));
                     data.setExamType(eExamType.integerOf(examType));

+ 679 - 33
src/main/java/com/template/controller/SmartUserController.java

@@ -1,29 +1,34 @@
 package com.template.controller;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.qcloud.cos.utils.IOUtils;
+import com.seewo.open.sdk.DefaultSeewoClient;
+import com.seewo.open.sdk.SeewoClient;
+import com.seewo.open.sdk.auth.Account;
 import com.template.api.SmartUserControllerAPI;
-import com.template.common.utils.ExcelUtils;
-import com.template.common.utils.FileUtils;
-import com.template.common.utils.paramUtils;
+import com.template.common.utils.*;
+import com.template.config.ControlConfig;
+import com.template.config.SeewoConfig;
 import com.template.model.enumModel.eFileType;
 import com.template.model.enumModel.eIdentityStatu;
 import com.template.model.enumModel.eLogOff;
 import com.template.model.enumModel.eSexStatu;
+import com.template.model.pojo.SmartClass;
 import com.template.model.pojo.SmartDepartment;
+import com.template.model.pojo.SmartGrade;
 import com.template.model.pojo.SmartUser;
 import com.template.model.request.changeDepartmentRequest;
 import com.template.model.request.insertSmartUserRequest;
 import com.template.model.request.updateSmartUserRequest;
+import com.template.model.request.useridsRequest;
 import com.template.model.result.CommonResult;
 import com.template.model.result.PageUtils;
-import com.template.model.vo.AffiliateUserVo;
-import com.template.model.vo.DepartmentTreeVo;
-import com.template.model.vo.UserVo;
-import com.template.services.SmartDepartmentService;
-import com.template.services.SmartUploadService;
-import com.template.services.SmartUserService;
+import com.template.model.seewo.*;
+import com.template.model.vo.*;
+import com.template.services.*;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
@@ -41,13 +46,19 @@ import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
+import java.lang.reflect.Array;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.nio.charset.Charset;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.zip.ZipInputStream;
 
+import static com.template.common.utils.AesTestOne.decrypt;
+
 /**
  * <p>
  * 前端控制器
@@ -59,27 +70,47 @@ import java.util.zip.ZipInputStream;
 @RestController
 public class SmartUserController implements SmartUserControllerAPI {
 
+    @Resource
+    private SeewoConfig seewoConfig;
+
+    @Resource
+    private ControlConfig controlConfig;
+
     @Autowired
     private SmartUserService smartUserService;
 
     @Autowired
+    private SmartGradeService smartGradeService;
+
+    @Autowired
+    private SmartClassService smartClassService;
+
+    @Autowired
     private SmartUploadService smartUploadService;
 
     @Autowired
     private SmartDepartmentService smartDepartmentService;
 
     @Override
-    public CommonResult logoffAccount(int id) {
-        SmartUser user = smartUserService.getSmartById(id);
-        if (user == null) {
-            return CommonResult.fail("用户信息已失效");
+    public CommonResult logoffAccount(useridsRequest ur, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            String st = paramUtils.getParamError(bindingResult);
+            return CommonResult.fail(st);
         }
 
-        user.setIsCancel(eLogOff.Logout.getValue());
+        int user = smartUserService.getSmartUserCountByIds(ur.getUserIds());
+        if (user != ur.getUserIds().size()) {
+            return CommonResult.fail("用户信息已失效");
+        }
 
-        int updateResult = smartUserService.updateSmartUser(user);
+//        for (:) {
+//
+//        }
+//        user.setIsCancel(eLogOff.Logout.getValue());
+//
+//        int updateResult = smartUserService.updateSmartUser(user);
 
-        return updateResult > 0 ? CommonResult.ok("注销成功") : CommonResult.fail("注销失败");
+        return 0 > 0 ? CommonResult.ok("注销成功") : CommonResult.fail("注销失败");
     }
 
     @Override
@@ -150,6 +181,7 @@ public class SmartUserController implements SmartUserControllerAPI {
         return resultBool ? CommonResult.ok("导入成功") : CommonResult.fail("导入失败");
     }
 
+
     /**
      * 批量导入用户信息
      * 以身份证号作为判断依据 如果存在重复数据就提示存在重复数据
@@ -257,7 +289,8 @@ public class SmartUserController implements SmartUserControllerAPI {
         XSSFWorkbook sheets = new XSSFWorkbook(inputStream);
 
         List<SmartDepartment> departments = smartDepartmentService.list(null);
-
+        List<SmartGrade> grades = smartGradeService.list(null); //年级
+        List<SmartClass> classs = smartClassService.list(null);//班级
         //读取第一张sheet
         XSSFSheet sheetAt = sheets.getSheetAt(0);
 
@@ -454,7 +487,23 @@ public class SmartUserController implements SmartUserControllerAPI {
                         user.setHeadImage(cellImage);
                         user.setDormitoryNumber(dormitoryNumber == null ? "" : dormitoryNumber);
                         user.setGrade(grade == null ? "" : grade);
-                        user.setSchoolClass(schoolClass == null ? "" : schoolClass);
+                        Optional<SmartGrade> oGrade = grades.stream().filter(e -> e.getName().equals(grade)).findFirst();
+
+                        if (oGrade != null && oGrade.isPresent()) {
+                            Integer gradeId = oGrade.get().getId();
+
+                            Optional<SmartClass> oClass = classs.stream().filter(e -> e.getName().equals(schoolClass) && e.getGradeId().equals(gradeId)).findFirst();
+
+                            if (oClass != null && oClass.isPresent()) {
+                                user.setSchoolClass(oClass.get().getId());
+                            } else {
+                                return CommonResult.fail(name + "的班级数据无效,导入失败");
+                            }
+
+                        } else {
+                            return CommonResult.fail(name + "的年级数据无效,导入失败");
+                        }
+
                         user.setCollege("");
                         user.setSpeciality("");
                         user.setCampus("");
@@ -498,6 +547,8 @@ public class SmartUserController implements SmartUserControllerAPI {
         HSSFWorkbook sheets = new HSSFWorkbook(inputStream);
 
         List<SmartDepartment> departments = smartDepartmentService.list(null);
+        List<SmartGrade> grades = smartGradeService.list(null); //年级
+        List<SmartClass> classs = smartClassService.list(null);//班级
 
         //读取第一张sheet
         HSSFSheet sheetAt = sheets.getSheetAt(0);
@@ -696,7 +747,22 @@ public class SmartUserController implements SmartUserControllerAPI {
                         user.setHeadImage(cellImage);
                         user.setDormitoryNumber(dormitoryNumber == null ? "" : dormitoryNumber);
                         user.setGrade(grade == null ? "" : grade);
-                        user.setSchoolClass(schoolClass == null ? "" : schoolClass);
+                        Optional<SmartGrade> oGrade = grades.stream().filter(e -> e.getName().equals(grade)).findFirst();
+
+                        if (oGrade != null && oGrade.isPresent()) {
+                            Integer gradeId = oGrade.get().getId();
+
+                            Optional<SmartClass> oClass = classs.stream().filter(e -> e.getName().equals(schoolClass) && e.getGradeId().equals(gradeId)).findFirst();
+
+                            if (oClass != null && oClass.isPresent()) {
+                                user.setSchoolClass(oClass.get().getId());
+                            } else {
+                                return CommonResult.fail(name + "的班级数据无效,导入失败");
+                            }
+
+                        } else {
+                            return CommonResult.fail(name + "的年级数据无效,导入失败");
+                        }
                         user.setCollege("");
                         user.setSpeciality("");
                         user.setCampus("");
@@ -725,7 +791,6 @@ public class SmartUserController implements SmartUserControllerAPI {
         return CommonResult.ok(result);
     }
 
-
     /**
      * 新增用户
      *
@@ -734,12 +799,18 @@ public class SmartUserController implements SmartUserControllerAPI {
      * @return
      */
     @Override
-    public CommonResult insertSmartUser(insertSmartUserRequest isur, BindingResult bindingResult) {
+    public CommonResult insertSmartUser(insertSmartUserRequest isur, BindingResult bindingResult) throws Exception {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
             return CommonResult.fail(st);
         }
 
+        //重复性判断
+        int existCount = smartUserService.querySmartUserByCardNo(isur.getCardNo());
+        if (existCount > 0) {
+            return CommonResult.fail("当前学号已存在,请勿重复添加");
+        }
+
         SmartUser su = new SmartUser();
         su.setCardNo(isur.getCardNo());
         su.setName(isur.getName());
@@ -764,6 +835,249 @@ public class SmartUserController implements SmartUserControllerAPI {
         su.setDuties(isur.getDuties());
         su.setIsCancel(eLogOff.Unlogout.getValue());
 
+        //region 人员信息加入到第三方api
+        //要将用户数据加入到希沃和百胜中
+        //希沃和百胜的老师、学生数据添加是不一样的,所以按身份添加
+        if (isur.getIdentityId().intValue() == eIdentityStatu.Parent.getValue()) {//家长
+            //拿到被关联学生的信息去获取对应的卡号
+            //有多个学生就循环学生
+            if (isur.getAffiliate() == null) {
+                return CommonResult.fail("被关联人不能为空");
+            }
+
+            if (isur.getAffiliate().size() <= 0) {
+                return CommonResult.fail("被关联人不能为空");
+            }
+
+            List<SmartUser> studentDatas = smartUserService.getSmartUserIds(isur.getAffiliate());
+
+            //region 希沃新增编辑学生家长信息
+            //学生与家长列表,最大100条
+            List<ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem> studentParents = new ArrayList<>();
+            for (SmartUser student : studentDatas) {
+                ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem students = ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem.builder()
+                        .studentCode(student.getCardNo())
+                        .build();
+                studentParents.add(students);
+
+                //家长列表,最多4个
+                ParentServiceBatchSaveOrUpdateParentsParam.ParentsItem parents = ParentServiceBatchSaveOrUpdateParentsParam.ParentsItem.builder()
+                        .name(isur.getName())
+                        .phone(isur.getPhone())
+                        .index(0)
+                        .build();
+
+                students.setParents(java.util.Collections.singletonList(parents));
+            }
+
+            //初始化客户端
+            SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+            ParentServiceBatchSaveOrUpdateParentsParam param = new ParentServiceBatchSaveOrUpdateParentsParam();
+            //响应体,MimeType为 application/json
+            ParentServiceBatchSaveOrUpdateParentsParam.RequestBody requestBody = ParentServiceBatchSaveOrUpdateParentsParam.RequestBody.builder()
+                    .build();
+            param.setRequestBody(requestBody);
+            //query
+            ParentServiceBatchSaveOrUpdateParentsParam.Query query = ParentServiceBatchSaveOrUpdateParentsParam.Query.builder()
+                    .appId(seewoConfig.getAppId())
+                    .schoolUid(seewoConfig.getSchoolId())
+                    .build();
+            requestBody.setQuery(query);
+            query.setStudentParents(studentParents);
+            param.setRequestBody(requestBody);
+            ParentServiceBatchSaveOrUpdateParentsRequest request = new ParentServiceBatchSaveOrUpdateParentsRequest(param);
+            System.out.println("入参:" + request);
+            //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+            //request.setServerUrl("https://openapi.test.seewo.com")
+            //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+            ParentServiceBatchSaveOrUpdateParentsResult result = seewoClient.invoke(request);
+            System.out.println("出参:" + result);
+            //endregion
+
+            if (result == null) {
+                return CommonResult.fail("希沃学生家长数据添加失败!");
+            }
+
+            if (!result.getResponseBody().getCode().equals("000000")) {
+                return CommonResult.fail(result.getResponseBody().getMessage());
+            }
+
+        } else if (isur.getIdentityId().intValue() == eIdentityStatu.Student.getValue()) {//学生
+            //获取班级Uid
+            SmartClass classData = smartClassService.getSmartClassById(isur.getSchoolClass());
+            if (classData == null) {
+                return CommonResult.fail("班级数据无效,新增失败");
+            }
+
+            //region 希沃新增学生信息
+            //初始化客户端
+            SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+            StudentServiceBatchSaveClassStudentsParam param = new StudentServiceBatchSaveClassStudentsParam();
+            //请求体,MimeType为 application/json
+            StudentServiceBatchSaveClassStudentsParam.JSONRequestBody requestBody = StudentServiceBatchSaveClassStudentsParam.JSONRequestBody.builder()
+                    .build();
+            param.setRequestBody(requestBody);
+            //查询条件
+            StudentServiceBatchSaveClassStudentsParam.StudentSaveQuery query = StudentServiceBatchSaveClassStudentsParam.StudentSaveQuery.builder()
+                    .appId(seewoConfig.getAppId())
+                    .schoolUid(seewoConfig.getSchoolId())
+                    .classUid(classData.getClassUid())
+                    .build();
+            requestBody.setQuery(query);
+            // 学生列表
+            StudentServiceBatchSaveClassStudentsParam.StudentInfo students = StudentServiceBatchSaveClassStudentsParam.StudentInfo.builder()
+                    .studentName(isur.getName())
+                    .studentCode(isur.getCardNo())
+                    .gender(isur.getSexId())
+                    .phone(isur.getPhone() == null ? "" : isur.getPhone())
+                    .build();
+            query.setStudents(java.util.Collections.singletonList(students));
+            query.setInPlaceOld(true);// 是否删除旧学生再保存
+            param.setRequestBody(requestBody);
+            StudentServiceBatchSaveClassStudentsRequest request = new StudentServiceBatchSaveClassStudentsRequest(param);
+            System.out.println("入参:" + request);
+            //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+            //request.setServerUrl("https://openapi.test.seewo.com")
+            //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+            StudentServiceBatchSaveClassStudentsResult result = seewoClient.invoke(request);
+            System.out.println("出参:" + result);
+
+            if (result == null) {
+                return CommonResult.fail("希沃学生数据新增失败!");
+            }
+
+            if (!result.getResponseBody().getCode().equals("000000")) {
+                return CommonResult.fail(result.getResponseBody().getMessage());
+            }
+
+            su.setXwStudentUid(result.getResponseBody().getData().get(0).getUserUid());
+            //endregion
+
+            //region 百胜新增学生信息
+            String appId = controlConfig.getAppId();
+            String schoolno = controlConfig.getSchoolCode();
+            String timestamp = TimeExchange.DateNowTimeStamo();
+            String appSecret = controlConfig.getAppSecret();
+            String url = "http://schoolopenapi.szymzh.com/openapi/student/create";
+
+            JSONObject jsonobject = new JSONObject();
+            jsonobject.put("appid", appId);
+            String str = "{\"student_name\":\"" + isur.getName() + "\",\"classtab_no\":\"" + classData.getBsClassNo() + "\",\"student_number\":\"" + isur.getCardNo() + "\",\"student_sex\":\"" + isur.getSexId() + "\",\"student_photo\":\"" + imageUtils.getBase64Url(isur.getHeadImage()) + "\"}";
+            String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
+            jsonobject.put("data", aesStr);
+            jsonobject.put("schoolno", schoolno);
+            jsonobject.put("timestamp", timestamp);
+
+            String md5Str = "appid=" + appId + "&data={\"student_name\":\"" + isur.getName() + "\",\"classtab_no\":\"" + classData.getBsClassNo() + "\",\"student_number\":\"" + isur.getCardNo() + "\",\"student_sex\":\"" + isur.getSexId() + "\",\"student_photo\":\"" + imageUtils.getBase64Url(isur.getHeadImage()) + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+            String sign = CommonUtil.MD5(md5Str);
+            //sign签名
+            jsonobject.put("sign", sign);
+
+            //返回的结果中 code为1表示成功
+            String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString());
+
+            if (bsResult.contains("添加成功")) {
+                ObjectMapper objectMapper = new ObjectMapper();
+                BsStudentVo grade = objectMapper.readValue(bsResult, BsStudentVo.class);
+
+                // URL解码
+                String decodedUrl = URLDecoder.decode(grade.getData(), "UTF-8");
+
+                BsStudentNoVo studentNo = objectMapper.readValue(decrypt(decodedUrl), BsStudentNoVo.class);
+                su.setBsStudentNo(studentNo.getStudent_no());
+            }
+            //endregion
+
+        } else if (isur.getIdentityId().intValue() == eIdentityStatu.Teacher.getValue()) {//老师
+
+            //region 希沃添加教师数据
+            //初始化客户端
+            SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+            TeacherServiceBatchSaveOrUpdateTeacherParam param = new TeacherServiceBatchSaveOrUpdateTeacherParam();
+            //请求体,MimeType为 application/json
+            TeacherServiceBatchSaveOrUpdateTeacherParam.JSONRequestBody requestBody = TeacherServiceBatchSaveOrUpdateTeacherParam.JSONRequestBody.builder()
+                    .build();
+            param.setRequestBody(requestBody);
+            //老师信息
+            TeacherServiceBatchSaveOrUpdateTeacherParam.SaveOrUpdateTeacherBatchQuery query = TeacherServiceBatchSaveOrUpdateTeacherParam.SaveOrUpdateTeacherBatchQuery.builder()
+                    .appId(seewoConfig.getAppId())
+                    .schoolUid(seewoConfig.getSchoolId())
+                    .build();
+            requestBody.setQuery(query);
+            // 老师列表
+            TeacherServiceBatchSaveOrUpdateTeacherParam.SaveOrUpdateTeacherQuery teachers = TeacherServiceBatchSaveOrUpdateTeacherParam.SaveOrUpdateTeacherQuery.builder()
+                    .account(isur.getPhone())//用户账号
+                    .name(isur.getName())//用户名字
+                    .accountType("phone")//账号类型 phone:手机号  email:邮箱
+                    .teacherCode(isur.getPhone())//教师工号
+                    .photoUrl(isur.getHeadImage())//图片链接
+                    .build();
+            query.setTeachers(java.util.Collections.singletonList(teachers));
+            param.setRequestBody(requestBody);
+            TeacherServiceBatchSaveOrUpdateTeacherRequest request = new TeacherServiceBatchSaveOrUpdateTeacherRequest(param);
+            System.out.println("入参:" + request);
+            //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+            //request.setServerUrl("https://openapi.test.seewo.com")
+            //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+            TeacherServiceBatchSaveOrUpdateTeacherResult result = seewoClient.invoke(request);
+            System.out.println("出参:" + result);
+
+            if (result == null) {
+                return CommonResult.fail("希沃教师数据新增失败!");
+            }
+
+            if (!result.getResponseBody().getCode().equals("000000")) {
+                return CommonResult.fail(result.getResponseBody().getMessage());
+            }
+
+            su.setXwTeacherCode(result.getResponseBody().getData().get(0).getTeacherCode());
+            //endregion
+
+            //region 百胜添加教师数据
+            SmartDepartment departmentData = smartDepartmentService.getSmartById(isur.getDepartmentId());
+            if (departmentData == null) {
+                return CommonResult.fail("部门数据无效,新增教师失败");
+            }
+
+            String departmentNo = departmentData.getBsDepartmentNo();//"DT1701845086538710";
+            String appId = controlConfig.getAppId();
+            String schoolno = controlConfig.getSchoolCode();
+            String timestamp = TimeExchange.DateNowTimeStamo();
+            String appSecret = controlConfig.getAppSecret();
+            String url = "http://schoolopenapi.szymzh.com/openapi/staff/create";
+
+            JSONObject jsonobject = new JSONObject();
+            jsonobject.put("appid", appId);
+            String str = "{\"staff_name\":\"" + isur.getName() + "\",\"department_no\":\"" + departmentNo + "\",\"stafft_number\":\"" + isur.getCardNo() + "\",\"staff_phone\":\"" + isur.getPhone() + "\",\"staff_sex\":\"" + isur.getSexId() + "\",\"staff_photo\":\"" + imageUtils.getBase64Url(isur.getHeadImage()) + "\"}";
+            String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
+            jsonobject.put("data", aesStr);
+            jsonobject.put("schoolno", schoolno);
+            jsonobject.put("timestamp", timestamp);
+
+            String md5Str = "appid=" + appId + "&data={\"staff_name\":\"" + isur.getName() + "\",\"department_no\":\"" + departmentNo + "\",\"stafft_number\":\"" + isur.getCardNo() + "\",\"staff_phone\":\"" + isur.getPhone() + "\",\"staff_sex\":\"" + isur.getSexId() + "\",\"staff_photo\":\"" + imageUtils.getBase64Url(isur.getHeadImage()) + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+            String sign = CommonUtil.MD5(md5Str);
+            //sign签名
+            jsonobject.put("sign", sign);
+
+            //返回的结果中 code为1表示成功
+            String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString());
+
+            if (bsResult.contains("添加成功")) {
+                ObjectMapper objectMapper = new ObjectMapper();
+                BsStaffVo staff = objectMapper.readValue(bsResult, BsStaffVo.class);
+
+                // URL解码
+                String decodedUrl = URLDecoder.decode(staff.getData(), "UTF-8");
+
+                BsStaffNoVo staffNo = objectMapper.readValue(decrypt(decodedUrl), BsStaffNoVo.class);
+                su.setBsStaffCode(staffNo.getStaff_no());
+            }
+            //endregion
+
+        }
+        //endregion
+
+        //最后都要把数据加入到数据库中
         int result = smartUserService.insertSmartUser(su);
 
         //新增用户得将用户信息通过接口推送到希沃、百胜
@@ -779,7 +1093,7 @@ public class SmartUserController implements SmartUserControllerAPI {
      * @return
      */
     @Override
-    public CommonResult updateSmartUserById(updateSmartUserRequest usur, BindingResult bindingResult) {
+    public CommonResult updateSmartUserById(updateSmartUserRequest usur, BindingResult bindingResult) throws Exception {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
             return CommonResult.fail(st);
@@ -787,7 +1101,6 @@ public class SmartUserController implements SmartUserControllerAPI {
 
         //更新的同时将百胜用户信息同步过去或者同步过来?
         SmartUser su = smartUserService.getSmartById(usur.getId());
-
         if (su == null) {
             CommonResult.fail("用户数据已失效,修改失败!");
         }
@@ -815,6 +1128,221 @@ public class SmartUserController implements SmartUserControllerAPI {
         su.setDuties(usur.getDuties());
         su.setIsCancel(eLogOff.Unlogout.getValue());
 
+        if (usur.getIdentityId().intValue() == eIdentityStatu.Parent.getValue()) {//家长
+            //拿到被关联学生的信息去获取对应的卡号
+            //有多个学生就循环学生
+            if (usur.getAffiliate() == null) {
+                return CommonResult.fail("被关联人不能为空");
+            }
+
+            if (usur.getAffiliate().size() <= 0) {
+                return CommonResult.fail("被关联人不能为空");
+            }
+
+            List<SmartUser> studentDatas = smartUserService.getSmartUserIds(usur.getAffiliate());
+
+            //region 希沃新增编辑学生家长信息
+            //学生与家长列表,最大100条
+            List<ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem> studentParents = new ArrayList<>();
+            for (SmartUser student : studentDatas) {
+                ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem students = ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem.builder()
+                        .studentCode(student.getCardNo())
+                        .build();
+                studentParents.add(students);
+
+                //家长列表,最多4个
+                ParentServiceBatchSaveOrUpdateParentsParam.ParentsItem parents = ParentServiceBatchSaveOrUpdateParentsParam.ParentsItem.builder()
+                        .name(usur.getName())
+                        .phone(usur.getPhone())
+                        .index(0)
+                        .build();
+
+                students.setParents(java.util.Collections.singletonList(parents));
+            }
+
+            //初始化客户端
+            SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+            ParentServiceBatchSaveOrUpdateParentsParam param = new ParentServiceBatchSaveOrUpdateParentsParam();
+            //响应体,MimeType为 application/json
+            ParentServiceBatchSaveOrUpdateParentsParam.RequestBody requestBody = ParentServiceBatchSaveOrUpdateParentsParam.RequestBody.builder()
+                    .build();
+            param.setRequestBody(requestBody);
+            //query
+            ParentServiceBatchSaveOrUpdateParentsParam.Query query = ParentServiceBatchSaveOrUpdateParentsParam.Query.builder()
+                    .appId(seewoConfig.getAppId())
+                    .schoolUid(seewoConfig.getSchoolId())
+                    .build();
+            requestBody.setQuery(query);
+            query.setStudentParents(studentParents);
+            param.setRequestBody(requestBody);
+            ParentServiceBatchSaveOrUpdateParentsRequest request = new ParentServiceBatchSaveOrUpdateParentsRequest(param);
+            System.out.println("入参:" + request);
+            //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+            //request.setServerUrl("https://openapi.test.seewo.com")
+            //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+            ParentServiceBatchSaveOrUpdateParentsResult result = seewoClient.invoke(request);
+            System.out.println("出参:" + result);
+
+            if (result == null) {
+                return CommonResult.fail("希沃学生家长数据更新失败!");
+            }
+
+            if (!result.getResponseBody().getCode().equals("000000")) {
+                return CommonResult.fail(result.getResponseBody().getMessage());
+            }
+            //endregion
+
+        } else if (usur.getIdentityId().intValue() == eIdentityStatu.Student.getValue()) {//学生
+
+            //region 更新希沃学生信息
+            //初始化客户端
+            SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+            StudentServiceUpdateStudentInfoParam param = new StudentServiceUpdateStudentInfoParam();
+            //响应体,MimeType为 application/json
+            StudentServiceUpdateStudentInfoParam.RequestBody requestBody = StudentServiceUpdateStudentInfoParam.RequestBody.builder()
+                    .build();
+            param.setRequestBody(requestBody);
+            //query
+            StudentServiceUpdateStudentInfoParam.Query query = StudentServiceUpdateStudentInfoParam.Query.builder()
+                    .appId(seewoConfig.getAppId())
+                    .schoolUid(seewoConfig.getSchoolId())
+                    .studentUid(su.getXwStudentUid())
+                    .studentCode(su.getCardNo())
+                    .studentName(su.getName())
+                    .build();
+            requestBody.setQuery(query);
+            param.setRequestBody(requestBody);
+            StudentServiceUpdateStudentInfoRequest request = new StudentServiceUpdateStudentInfoRequest(param);
+            System.out.println("入参:" + request);
+            //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+            //request.setServerUrl("https://openapi.test.seewo.com")
+            //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+            StudentServiceUpdateStudentInfoResult result = seewoClient.invoke(request);
+            System.out.println("出参:" + result);
+
+            if (result == null) {
+                return CommonResult.fail("希沃学生数据更新失败!");
+            }
+
+            if (!result.getResponseBody().getCode().equals("000000")) {
+                return CommonResult.fail(result.getResponseBody().getMessage());
+            }
+            //endregion
+
+            //region 更新百胜学生信息
+            String appId = controlConfig.getAppId();
+            String schoolno = controlConfig.getSchoolCode();
+            String timestamp = TimeExchange.DateNowTimeStamo();
+            String appSecret = controlConfig.getAppSecret();
+            String url = "http://schoolopenapi.szymzh.com/openapi/student/update";
+
+            JSONObject jsonobject = new JSONObject();
+            jsonobject.put("appid", appId);
+            String str = "{\"student_no\":\"" + su.getBsStudentNo() + "\",\"student_name\":\"" + su.getName() + "\",\"student_number\":\"" + su.getCardNo() + "\",\"student_sex\":\"" + su.getSexId() +"\",\"student_idcard\":\"" + su.getIdCard() + "\",\"student_photo\":\"" + imageUtils.getBase64Url(su.getHeadImage()) + "\"}";
+            String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
+            jsonobject.put("data", aesStr);
+            jsonobject.put("schoolno", schoolno);
+            jsonobject.put("timestamp", timestamp);
+
+            String md5Str = "appid=" + appId + "&data={\"student_no\":\"" + su.getBsStudentNo() + "\",\"student_name\":\"" + su.getName() + "\",\"student_number\":\"" + su.getCardNo() + "\",\"student_sex\":\"" + su.getSexId() +"\",\"student_idcard\":\"" + su.getIdCard() + "\",\"student_photo\":\"" + imageUtils.getBase64Url(su.getHeadImage()) + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+            String sign = CommonUtil.MD5(md5Str);
+            //sign签名
+            jsonobject.put("sign", sign);
+
+            //返回的结果中 code为1表示成功
+            String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString());
+
+            if (!bsResult.contains("更新成功")) {
+                return CommonResult.fail("百胜学生信息更新失败");
+            }
+            //endregion
+
+        } else if (usur.getIdentityId().intValue() == eIdentityStatu.Teacher.getValue()) {//教师
+            //region 希沃更新教师数据
+            //初始化客户端
+            SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+            TeacherServiceBatchSaveOrUpdateTeacherParam param = new TeacherServiceBatchSaveOrUpdateTeacherParam();
+            //请求体,MimeType为 application/json
+            TeacherServiceBatchSaveOrUpdateTeacherParam.JSONRequestBody requestBody = TeacherServiceBatchSaveOrUpdateTeacherParam.JSONRequestBody.builder()
+                    .build();
+            param.setRequestBody(requestBody);
+            //老师信息
+            TeacherServiceBatchSaveOrUpdateTeacherParam.SaveOrUpdateTeacherBatchQuery query = TeacherServiceBatchSaveOrUpdateTeacherParam.SaveOrUpdateTeacherBatchQuery.builder()
+                    .appId(seewoConfig.getAppId())
+                    .schoolUid(seewoConfig.getSchoolId())
+                    .build();
+            requestBody.setQuery(query);
+            // 老师列表
+            TeacherServiceBatchSaveOrUpdateTeacherParam.SaveOrUpdateTeacherQuery teachers = TeacherServiceBatchSaveOrUpdateTeacherParam.SaveOrUpdateTeacherQuery.builder()
+                    .account(su.getPhone())//用户账号
+                    .name(su.getName())//用户名字
+                    .accountType("phone")//账号类型 phone:手机号  email:邮箱
+                    .teacherCode("")//教师工号
+                    .photoUrl(su.getHeadImage())//图片链接
+                    .build();
+            query.setTeachers(java.util.Collections.singletonList(teachers));
+            param.setRequestBody(requestBody);
+            TeacherServiceBatchSaveOrUpdateTeacherRequest request = new TeacherServiceBatchSaveOrUpdateTeacherRequest(param);
+            System.out.println("入参:" + request);
+            //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
+            //request.setServerUrl("https://openapi.test.seewo.com")
+            //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+            TeacherServiceBatchSaveOrUpdateTeacherResult result = seewoClient.invoke(request);
+            System.out.println("出参:" + result);
+
+            if (result == null) {
+                return CommonResult.fail("希沃教师数据更新失败!");
+            }
+
+            if (!result.getResponseBody().getCode().equals("000000")) {
+                return CommonResult.fail(result.getResponseBody().getMessage());
+            }
+
+            su.setXwTeacherCode(result.getResponseBody().getData().get(0).getTeacherCode());
+            //endregion
+
+            //region 百胜更新教师数据
+            SmartDepartment departmentData = smartDepartmentService.getSmartById(su.getDepartmentId());
+            if (departmentData == null) {
+                return CommonResult.fail("部门数据无效,更新教师失败");
+            }
+
+            String departmentNo = departmentData.getBsDepartmentNo();
+            String appId = controlConfig.getAppId();
+            String schoolno = controlConfig.getSchoolCode();
+            String timestamp = TimeExchange.DateNowTimeStamo();
+            String appSecret = controlConfig.getAppSecret();
+            String url = "http://schoolopenapi.szymzh.com/openapi/staff/update";
+
+            JSONObject jsonobject = new JSONObject();
+            jsonobject.put("appid", appId);
+            String str = "{\"staff_no\":\"" + su.getBsStaffCode() + "\"staff_name\":\"" + su.getName() + "\",\"department_no\":\"" + departmentNo + "\",\"stafft_number\":\"" + su.getCardNo() + "\",\"staff_phone\":\"" + su.getPhone() + "\",\"staff_sex\":\"" + su.getSexId() + "\",\"staff_photo\":\"" + imageUtils.getBase64Url(su.getHeadImage()) + "\"}";
+            String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
+            jsonobject.put("data", aesStr);
+            jsonobject.put("schoolno", schoolno);
+            jsonobject.put("timestamp", timestamp);
+
+            String md5Str = "appid=" + appId + "&data={\"staff_no\":\"" + su.getBsStaffCode() + "\"staff_name\":\"" + su.getName() + "\",\"department_no\":\"" + departmentNo + "\",\"stafft_number\":\"" + su.getCardNo() + "\",\"staff_phone\":\"" + su.getPhone() + "\",\"staff_sex\":\"" + su.getSexId() + "\",\"staff_photo\":\"" + imageUtils.getBase64Url(su.getHeadImage()) + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+            String sign = CommonUtil.MD5(md5Str);
+            //sign签名
+            jsonobject.put("sign", sign);
+
+            //返回的结果中 code为1表示成功
+            String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString());
+
+            if (bsResult.contains("添加成功")) {
+                ObjectMapper objectMapper = new ObjectMapper();
+                BsStaffVo staff = objectMapper.readValue(bsResult, BsStaffVo.class);
+
+                // URL解码
+                String decodedUrl = URLDecoder.decode(staff.getData(), "UTF-8");
+
+                BsStaffNoVo staffNo = objectMapper.readValue(decrypt(decodedUrl), BsStaffNoVo.class);
+                su.setBsStaffCode(staffNo.getStaff_no());
+            }
+            //endregion
+        }
+
         int result = smartUserService.updateSmartUser(su);
         return result > 0 ? CommonResult.ok("修改成功") : CommonResult.fail("修改失败");
     }
@@ -835,12 +1363,54 @@ public class SmartUserController implements SmartUserControllerAPI {
         childDepartmentIds.add(departmentId);
         QueryDepartmentTreeRecords(departmentId, departments, childDepartmentIds);
 
-        if(departmentId == null){
+        if (departmentId == null) {
             childDepartmentIds = null;
         }
 
         PageUtils<UserVo> result = smartUserService.querySmartUserPages(currentPage, pageCount, childDepartmentIds, name);
 
+        if (result != null && result.getList() != null) {
+            List<Integer> studentIds = new ArrayList<>();
+            List<String> studentStrs = Arrays.asList(StringUtils.join(result.getList().stream().map(UserVo::getAffiliate).collect(Collectors.toList()), ",").split(","));
+            for (String studentStr : studentStrs) {
+                if(!ObjectUtils.isEmpty(studentStr)){
+                    studentIds.add(Integer.valueOf(studentStr));
+                }
+            }
+            List<SmartUser> students = smartUserService.getSmartUserByIds(studentIds);
+            List<SmartClass> classs = smartClassService.list(null);
+
+            for (UserVo data : result.getList()) {
+                data.setIdentity(eIdentityStatu.stringOf(data.getIdentityId()));
+                data.setSex(eSexStatu.stringOf(data.getSexId()));
+                Optional<SmartDepartment> departmentData = departments == null ? null : departments.stream().filter(e -> e.getId().equals(data.getDepartmentId())).findFirst();
+                if (departmentData != null && departmentData.isPresent()) {
+                    data.setDepartment(departmentData.get().getName());
+                }
+                Optional<SmartClass> nowClass = classs == null ? null : classs.stream().filter(e -> e.getId().equals(data.getSchoolClass())).findFirst();
+                if (nowClass != null && nowClass.isPresent()) {
+                    data.setClassStr(nowClass.get().getName());
+                }
+
+                List<AffiliateUserVo> datas = new ArrayList<>();
+                List<String> affiliates = Arrays.asList(data.getAffiliate().split(","));
+                for (String a : affiliates) {
+                    if(!ObjectUtils.isEmpty(a)){
+                        Optional<SmartUser> student = students.stream().filter(e -> e.getId().equals(Integer.valueOf(a))).findFirst();
+                        if (student != null && student.isPresent()) {
+                            AffiliateUserVo affiliate = new AffiliateUserVo();
+                            affiliate.setId(student.get().getId());
+                            affiliate.setName(student.get().getName());
+                            affiliate.setCardNo(student.get().getCardNo());
+                            affiliate.setDepartmentId(student.get().getDepartmentId());
+                            datas.add(affiliate);
+                        }
+                    }
+                }
+                data.setAffiliates(datas);
+            }
+        }
+
         return CommonResult.ok(result);
     }
 
@@ -893,7 +1463,7 @@ public class SmartUserController implements SmartUserControllerAPI {
             dataRow.createCell(5).setCellValue(eSexStatu.stringOf(user.getSexId()));
             //获取父级部门ID
             Optional<SmartDepartment> department = departments.stream().filter(e -> e.getId().equals(user.getDepartmentId())).findFirst();
-            if(department != null && department.isPresent()){
+            if (department != null && department.isPresent()) {
                 dataRow.createCell(6).setCellValue(QueryParentDepartments(department.get().getParentId(), departments, null));
             }
 
@@ -950,8 +1520,8 @@ public class SmartUserController implements SmartUserControllerAPI {
 
         Optional<SmartDepartment> data = lists.stream().filter(e -> e.getId().equals(parentID)).findFirst();
 
-        if(data != null && data.isPresent()){
-            departmentStr = departmentStr == null ? data.get().getName() : data.get().getName() + "/"+ departmentStr;
+        if (data != null && data.isPresent()) {
+            departmentStr = departmentStr == null ? data.get().getName() : data.get().getName() + "/" + departmentStr;
             QueryParentDepartments(data.get().getParentId(), lists, departmentStr);
         }
 
@@ -959,15 +1529,19 @@ public class SmartUserController implements SmartUserControllerAPI {
     }
 
     @Override
-    public CommonResult deleteSmartUserById(int id) {
+    public CommonResult deleteSmartUserById(useridsRequest ur, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            String st = paramUtils.getParamError(bindingResult);
+            return CommonResult.fail(st);
+        }
 
-        SmartUser data = smartUserService.getSmartById(id);
+        int data = smartUserService.getSmartUserCountByIds(ur.getUserIds());
 
-        if (data == null) {
-            return CommonResult.fail("当前数据不存在,删除失败!");
+        if (data != ur.getUserIds().size()) {
+            return CommonResult.fail("存在无效用户数据,删除失败!");
         }
 
-        int result = smartUserService.deleteSmartUserById(id);
+        int result = smartUserService.deleteSmartUserByIds(ur.getUserIds());
 
         return result > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败");
     }
@@ -980,7 +1554,79 @@ public class SmartUserController implements SmartUserControllerAPI {
 
     @Override
     public CommonResult downloadUserExcel() {
-        return CommonResult.ok("200","操作成功","https://wanzai-1306339220.cos.ap-shanghai.myqcloud.com/excelModel/人员信息表.xlsx");
+        return CommonResult.ok("200", "操作成功", "https://wanzai-1306339220.cos.ap-shanghai.myqcloud.com/excelModel/人员信息表.xlsx");
+    }
+
+    @Override
+    public CommonResult queryStudents(int userId) {
+
+        List<SmartUser> students = new ArrayList<>();
+        SmartUser user = smartUserService.getSmartById(userId);
+        if (user == null) {
+            return CommonResult.fail("用户信息为空,获取学生列表数据失败");
+        }
+
+        if (user.getAffiliate() == null) {
+            return CommonResult.ok(students);
+        }
+
+        List<Integer> affiliateIds = new ArrayList<>();
+        List<String> affiliates = Arrays.asList(user.getAffiliate().split(","));
+        for (String affiliate : affiliates) {
+            affiliateIds.add(Integer.valueOf(affiliate));
+        }
+
+        students = smartUserService.getSmartUserByIds(affiliateIds);
+
+        List<ParentOfStudentsVo> result = new ArrayList<>();
+        for (SmartUser student : students) {
+            ParentOfStudentsVo data = new ParentOfStudentsVo();
+            data.setId(student.getId());
+            data.setName(student.getName());
+            data.setCardNo(student.getCardNo());
+            data.setDepartmentId(student.getDepartmentId());
+            result.add(data);
+        }
+
+        return CommonResult.ok(result);
+    }
+
+    public static void main(String[] args) throws Exception {
+        //region 百胜新增学生信息
+        String image = "https://wanzai-1306339220.cos.ap-shanghai.myqcloud.com/out_www.yalijuda.com_%E5%8D%8E%E5%BF%97%E6%9D%B0%E3%80%9018279462576%E3%80%91_1h5oBWtHvG.jpg";
+        String appId = "sc5efc60f2bd373df9";
+        String schoolno = "SL1701743624375793";
+        String timestamp = "20240110090422121";//TimeExchange.DateNowTimeStamo();
+        String appSecret = "fe0d767a2a394d1b81ccda6fc0ce5ecc";
+        String url = "http://schoolopenapi.szymzh.com/openapi/student/create";
+
+        JSONObject jsonobject = new JSONObject();
+        jsonobject.put("appid", appId);
+        String str = "{\"student_name\":\"" + "李四" + "\",\"classtab_no\":\"" + "CS1704704260801286" + "\",\"student_number\":\"" + "A123457" + "\",\"student_sex\":\"" + 1 + "\",\"student_photo\":\"" + imageUtils.getBase64Url(image) + "\"}";
+        String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
+        jsonobject.put("data", aesStr);
+        jsonobject.put("schoolno", schoolno);
+        jsonobject.put("timestamp", timestamp);
+
+        String md5Str = "appid=" + appId + "&data={\"student_name\":\"" + "李四" + "\",\"classtab_no\":\"" + "CS1704704260801286" + "\",\"student_number\":\"" + "A123457" + "\",\"student_sex\":\"" + 1 + "\",\"student_photo\":\"" + imageUtils.getBase64Url(image) + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
+        String sign = CommonUtil.MD5(md5Str);
+        //sign签名
+        jsonobject.put("sign", sign);
+
+        //返回的结果中 code为1表示成功
+        String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString());
+        System.out.println(bsResult);
+        if (bsResult.contains("添加成功")) {
+            ObjectMapper objectMapper = new ObjectMapper();
+            BsStudentVo grade = objectMapper.readValue(bsResult, BsStudentVo.class);
+
+            // URL解码
+            String decodedUrl = URLDecoder.decode(grade.getData(), "UTF-8");
+
+            BsStudentNoVo studentNo = objectMapper.readValue(decrypt(decodedUrl), BsStudentNoVo.class);
+            String sdsd = "";
+        }
+        //endregion
     }
 }
 

+ 5 - 10
src/main/java/com/template/controller/SmartVisitorController.java

@@ -11,7 +11,6 @@ import com.template.common.utils.CommonUtil;
 import com.template.common.utils.RequestUtils;
 import com.template.common.utils.TimeExchange;
 import com.template.common.utils.paramUtils;
-import com.template.config.CosConfig;
 import com.template.config.ParkConfig;
 import com.template.config.SeewoConfig;
 import com.template.model.enumModel.eApproveStatu;
@@ -22,25 +21,21 @@ import com.template.model.request.otherAppointmentRequest;
 import com.template.model.request.parentsAppointmentRequest;
 import com.template.model.result.CommonResult;
 import com.template.model.result.PageUtils;
+import com.template.model.seewo.HomeSchoolServiceSendNoteToKidParam;
+import com.template.model.seewo.HomeSchoolServiceSendNoteToKidRequest;
+import com.template.model.seewo.HomeSchoolServiceSendNoteToKidResult;
 import com.template.model.vo.AffiliateUserVo;
 import com.template.model.vo.VisitorPageVo;
 import com.template.services.SmartUserService;
 import com.template.services.SmartVisitorService;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
-import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import java.io.*;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLConnection;
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -237,7 +232,7 @@ public class SmartVisitorController implements SmartVisitorControllerAPI {
     }
 
     @Override
-    public CommonResult appointmentPageRecord(int currentPage, int pageCount, int userId, int type) {
+    public CommonResult appointmentPageRecord(int currentPage, int pageCount, Integer userId, int type) {
         PageUtils<VisitorPageVo> result = smartVisitorService.smartVisitorPageByUserId(currentPage, pageCount, userId, type);
 
         return CommonResult.ok(result);
@@ -285,7 +280,7 @@ public class SmartVisitorController implements SmartVisitorControllerAPI {
                         String reserveEndTime = TimeExchange.DateToString(visitor.getVisitorDeadline(),"yyyy-MM-dd HH:mm:ss");
                         String version = "v1.0";
                         String appSecret = parkConfig.getAppSecret();
-                        String url = parkConfig.getUrl();
+                        String url = "http://openapi.szymzh.com/Api/Inform/Reservation";
 
                         JSONObject jsonobject = new JSONObject();
                         jsonobject.put("appid", appId);

+ 3 - 1
src/main/java/com/template/controller/WechatScanLoginController.java

@@ -91,8 +91,10 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
 				return "redirect:"+HttpParame.FRONT_URI+"/#/login?message=" + URLEncoder.encode("请勿非法进入", "UTF-8");
 			}
 			AccessToken access = wechatScanLoginService.getAccessToken(code);
+			System.out.println("access:"+access);
 			if (access != null) {
 				String openid = access.getOpenid();
+				System.out.println("openid: "+openid);
 				SmartUser user = wechatScanLoginService.selectByOpenid(openid);
 				if (user==null) {		/*不存在*/
 					return "redirect:"+HttpParame.FRONT_URI+"/#/login?message=" + URLEncoder.encode("请绑定信息", "UTF-8");
@@ -106,7 +108,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
 	}
 
 	/**
-	 * Title: bindingUserMac
+	 * Title: bindingUserMac2
 	 * Description: 跳转到绑定用户系统帐号页面
 	 * @return
 	 */

+ 16 - 13
src/main/java/com/template/core/JwtAuthenticationInterceptor.java

@@ -22,30 +22,33 @@ public class JwtAuthenticationInterceptor implements HandlerInterceptor {
 
     /**
      * preHandle:进入到控制器方法之前执行的内容
-     *     boolean:
-     *         true:可以继续执行控制器方法
-     *         false:拦截
+     * boolean:
+     * true:可以继续执行控制器方法
+     * false:拦截
      * posthandler:执行控制器方法之后执行的内容
      * afterCompletion:响应结束之前执行的内容
      *///说明
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
 
-        //region 检查是否有passtoken注释,有则跳过认证
-        //PassToken注解用在方法上面
-        HandlerMethod handlerMethod = (HandlerMethod) handler;
-        Method method = handlerMethod.getMethod();
-        if (method.isAnnotationPresent(PassToken.class)) {
-            PassToken passToken = method.getAnnotation(PassToken.class);
-            if (passToken.requeired()) {
-                return true;
+        if (handler instanceof HandlerMethod) {
+            //region 检查是否有passtoken注释,有则跳过认证
+            //PassToken注解用在方法上面
+            HandlerMethod handlerMethod = (HandlerMethod) handler;
+            Method method = handlerMethod.getMethod();
+            if (method.isAnnotationPresent(PassToken.class)) {
+                PassToken passToken = method.getAnnotation(PassToken.class);
+                if (passToken.requeired()) {
+                    return true;
+                }
             }
+            //endregion
         }
-        //endregion
+
 
         //冻结后无法操作系统
 
-        if(1 == 1){
+        if (1 == 1) {
             return true;
         }
 

+ 18 - 0
src/main/java/com/template/mapper/SmartMenuMapper.java

@@ -0,0 +1,18 @@
+package com.template.mapper;
+
+import com.template.model.pojo.SmartMenu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 应用管理 Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2024-01-16
+ */
+@Repository
+public interface SmartMenuMapper extends BaseMapper<SmartMenu> {
+
+}

+ 12 - 0
src/main/java/com/template/model/pojo/SmartAttendance.java

@@ -46,6 +46,18 @@ public class SmartAttendance implements Serializable {
     @ApiModelProperty(value = "考勤状态 准时:0 迟到:1 缺卡:3 请假:6 超时打卡:7")
     private Integer status;
 
+    @ApiModelProperty(value = "希沃用户ID")
+    private String userUid;
+
+    @ApiModelProperty(value = "希沃用户ID")
+    private String classUid;
+
+    @ApiModelProperty(value = "希沃用户名称")
+    private String xwUserName;
+
+    @ApiModelProperty(value = "希沃用户学号")
+    private String xwStudentCode;
+
     @ApiModelProperty(value = "创建时间")
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;

+ 3 - 0
src/main/java/com/template/model/pojo/SmartClass.java

@@ -46,6 +46,9 @@ public class SmartClass implements Serializable {
     @ApiModelProperty(value = "班级序号")
     private Integer classNo;
 
+    @ApiModelProperty(value = "百胜班级序号")
+    private String bsClassNo;
+
     @ApiModelProperty(value = "创建时间")
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;

+ 3 - 0
src/main/java/com/template/model/pojo/SmartDepartment.java

@@ -40,6 +40,9 @@ public class SmartDepartment implements Serializable {
     @ApiModelProperty(value = " 部门名称")
     private String name;
 
+    @ApiModelProperty(value = " 部门名称")
+    private String bsDepartmentNo;
+
     @ApiModelProperty(value = "创建时间")
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;

+ 11 - 1
src/main/java/com/template/model/pojo/SmartGrade.java

@@ -1,13 +1,17 @@
 package com.template.model.pojo;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+
 import java.util.Date;
+
 import com.baomidou.mybatisplus.annotation.Version;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableField;
+
 import java.io.Serializable;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -25,7 +29,7 @@ import lombok.experimental.Accessors;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-@ApiModel(value="SmartGrade对象", description="楼栋表")
+@ApiModel(value = "SmartGrade对象", description = "楼栋表")
 public class SmartGrade implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -40,6 +44,12 @@ public class SmartGrade implements Serializable {
     @ApiModelProperty(value = "年级序号")
     private Integer gradeNo;
 
+    @ApiModelProperty(value = "百胜年级编号")
+    private String bsGradeNo;
+
+    @ApiModelProperty(value = "年级UID")
+    private String gradeUid;
+
     @ApiModelProperty(value = "创建时间")
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;

+ 65 - 0
src/main/java/com/template/model/pojo/SmartMenu.java

@@ -0,0 +1,65 @@
+package com.template.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 应用管理
+ * </p>
+ *
+ * @author ceshi
+ * @since 2024-01-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SmartMenu对象", description="应用管理")
+public class SmartMenu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "菜单名称")
+    private String name;
+
+    @ApiModelProperty(value = "菜单路由")
+    private String route;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    @ApiModelProperty(value = "创建人员")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @ApiModelProperty(value = "更新人员")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @ApiModelProperty(value = "逻辑删除 未删除:0;删除:1")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleted;
+
+
+}

+ 3 - 0
src/main/java/com/template/model/pojo/SmartSchool.java

@@ -63,6 +63,9 @@ public class SmartSchool implements Serializable {
     @ApiModelProperty(value = "原始ID")
     private String originalId;
 
+    @ApiModelProperty(value = "百胜学校编号")
+    private String bsSchoolCode;
+
     @ApiModelProperty(value = "创建时间")
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;

+ 13 - 1
src/main/java/com/template/model/pojo/SmartUser.java

@@ -65,7 +65,7 @@ public class SmartUser implements Serializable {
     private String speciality;
 
     @ApiModelProperty(value = "班级")
-    private String schoolClass;
+    private Integer schoolClass;
 
     @ApiModelProperty(value = "校区")
     private String campus;
@@ -103,6 +103,18 @@ public class SmartUser implements Serializable {
     @ApiModelProperty(value = "微信openId")
     private String openId;
 
+    @ApiModelProperty(value = "希沃学生UID")
+    private String xwStudentUid;
+
+    @ApiModelProperty(value = "百胜学生编号")
+    private String bsStudentNo;
+
+    @ApiModelProperty(value = "希沃教师工号")
+    private String xwTeacherCode;
+
+    @ApiModelProperty(value = "百胜教师编号")
+    private String bsStaffCode;
+
     @ApiModelProperty(value = "创建时间")
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;

+ 29 - 0
src/main/java/com/template/model/request/insertMenuRequest.java

@@ -0,0 +1,29 @@
+package com.template.model.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/7 星期五 14:27
+ * @Description: com.repair.model.request
+ * @Version: 1.0
+ */
+@Data
+public class insertMenuRequest {
+
+    /**
+     * 班级名称
+     */
+    @NotBlank(message = "菜单名称不能为空")
+    private String name;
+
+    /**
+     * 班级序号
+     */
+    @NotBlank(message = "菜单路由不能为空")
+    private String route;
+
+}

+ 36 - 0
src/main/java/com/template/model/request/insertSmartClassRequest.java

@@ -0,0 +1,36 @@
+package com.template.model.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-12-04
+ */
+@Data
+public class insertSmartClassRequest {
+
+    /**
+     * 班级名称
+     */
+    @NotBlank(message = "班级名称不能为空")
+    private String className;
+
+    /**
+     * 年级编码
+     */
+    @NotBlank(message = "年级编码不能为空")
+    private String gradeNo;
+
+    /**
+     * 班级序号
+     */
+    @NotNull(message = "班级序号不能为空")
+    private Integer classNo;
+}

+ 30 - 0
src/main/java/com/template/model/request/insertSmartGradeRequest.java

@@ -0,0 +1,30 @@
+package com.template.model.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-12-04
+ */
+@Data
+public class insertSmartGradeRequest {
+
+    /**
+     * 年级名称
+     */
+    @NotBlank(message = "年级名称不能为空")
+    private String gradeName;
+
+    /**
+     * 年级序号
+     */
+    @NotNull(message = "年级序号不能为空")
+    private Integer gradeNo;
+}

+ 13 - 13
src/main/java/com/template/model/request/insertSmartUserRequest.java

@@ -72,31 +72,31 @@ public class insertSmartUserRequest {
     /**
      * 学院
      */
-    @NotBlank(message = "学院不能为空")
+    //@NotBlank(message = "学院不能为空")
     private String college;
 
     /**
      * 专业
      */
-    @NotBlank(message = "专业不能为空")
+    //@NotBlank(message = "专业不能为空")
     private String speciality;
 
     /**
      * 班级
      */
-    @NotBlank(message = "班级不能为空")
-    private String schoolClass;
+    @NotNull(message = "班级不能为空")
+    private Integer schoolClass;
 
     /**
      * 校区
      */
-    @NotBlank(message = "校区不能为空")
+    //@NotBlank(message = "校区不能为空")
     private String campus;
 
     /**
      * 宿舍号
       */
-    @NotBlank(message = "宿舍号不能为空")
+    //@NotBlank(message = "宿舍号不能为空")
     private String dormitoryNumber;
 
     /**
@@ -110,43 +110,43 @@ public class insertSmartUserRequest {
      * 被关联用户的ID
      * 多个用户用逗号隔开
      */
-    @NotEmpty(message = "关联人不能为空")
+    //@NotEmpty(message = "关联人不能为空")
     private List<String> affiliate;
 
     /**
      * 职称
      */
-    @NotBlank(message = "职称不能为空")
+    //@NotBlank(message = "职称不能为空")
     private String title;
 
     /**
      * 家庭住址
      */
-    @NotBlank(message = "家庭住址不能为空")
+    //@NotBlank(message = "家庭住址不能为空")
     private String address;
 
     /**
      * 民族
      */
-    @NotBlank(message = "民族不能为空")
+    //@NotBlank(message = "民族不能为空")
     private String nation;
 
     /**
      * 生源地不能为空
      */
-    @NotBlank(message = "生源地不能为空")
+    //@NotBlank(message = "生源地不能为空")
     private String ofStudent;
 
     /**
      * 毕业学校
      */
-    @NotBlank(message = "毕业学校不能为空")
+    //@NotBlank(message = "毕业学校不能为空")
     private String graduate;
 
     /**
      * 职务
      */
-    @NotBlank(message = "职务不能为空")
+    //@NotBlank(message = "职务不能为空")
     private String duties;
 
 }

+ 35 - 0
src/main/java/com/template/model/request/updateClassRequest.java

@@ -0,0 +1,35 @@
+package com.template.model.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/7 星期五 14:27
+ * @Description: com.repair.model.request
+ * @Version: 1.0
+ */
+@Data
+public class updateClassRequest {
+
+    /**
+     * 数据ID
+     */
+    @NotNull(message = "数据ID不能为空")
+    private Integer id;
+
+    /**
+     * 班级名称
+     */
+    @NotBlank(message = "班级名称不能为空")
+    private String name;
+
+    /**
+     * 班级序号
+     */
+    @NotNull(message = "班级序号不能为空")
+    private Integer classNo;
+
+}

+ 35 - 0
src/main/java/com/template/model/request/updateMenuRequest.java

@@ -0,0 +1,35 @@
+package com.template.model.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/7 星期五 14:27
+ * @Description: com.repair.model.request
+ * @Version: 1.0
+ */
+@Data
+public class updateMenuRequest {
+
+    /**
+     * 数据ID
+     */
+    @NotNull(message = "数据ID不能为空")
+    private Integer id;
+
+    /**
+     * 班级名称
+     */
+    @NotBlank(message = "菜单名称不能为空")
+    private String name;
+
+    /**
+     * 班级序号
+     */
+    @NotBlank(message = "菜单路由不能为空")
+    private String route;
+
+}

+ 36 - 0
src/main/java/com/template/model/request/updateSmartGradeRequest.java

@@ -0,0 +1,36 @@
+package com.template.model.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-12-04
+ */
+@Data
+public class updateSmartGradeRequest {
+
+    /**
+     * 年级ID
+     */
+    @NotNull(message = "年级ID不能为空")
+    private Integer id;
+
+    /**
+     * 年级名称
+     */
+    @NotBlank(message = "年级名称不能为空")
+    private String gradeName;
+
+    /**
+     * 年级序号
+     */
+    @NotNull(message = "年级序号不能为空")
+    private Integer gradeNo;
+}

+ 12 - 12
src/main/java/com/template/model/request/updateSmartUserRequest.java

@@ -78,31 +78,31 @@ public class updateSmartUserRequest {
     /**
      * 学院
      */
-    @NotBlank(message = "学院不能为空")
+    //@NotBlank(message = "学院不能为空")
     private String college;
 
     /**
      * 专业
      */
-    @NotBlank(message = "专业不能为空")
+    //@NotBlank(message = "专业不能为空")
     private String speciality;
 
     /**
      * 班级
      */
-    @NotBlank(message = "班级不能为空")
-    private String schoolClass;
+    @NotNull(message = "班级不能为空")
+    private Integer schoolClass;
 
     /**
      * 校区
      */
-    @NotBlank(message = "校区不能为空")
+    //@NotBlank(message = "校区不能为空")
     private String campus;
 
     /**
      * 宿舍号
       */
-    @NotBlank(message = "宿舍号不能为空")
+    //@NotBlank(message = "宿舍号不能为空")
     private String dormitoryNumber;
 
     /**
@@ -122,37 +122,37 @@ public class updateSmartUserRequest {
     /**
      * 职称
      */
-    @NotBlank(message = "职称不能为空")
+    //@NotBlank(message = "职称不能为空")
     private String title;
 
     /**
      * 家庭住址
      */
-    @NotBlank(message = "家庭住址不能为空")
+    //@NotBlank(message = "家庭住址不能为空")
     private String address;
 
     /**
      * 民族
      */
-    @NotBlank(message = "民族不能为空")
+    //@NotBlank(message = "民族不能为空")
     private String nation;
 
     /**
      * 生源地不能为空
      */
-    @NotBlank(message = "生源地不能为空")
+    //@NotBlank(message = "生源地不能为空")
     private String ofStudent;
 
     /**
      * 毕业学校
      */
-    @NotBlank(message = "毕业学校不能为空")
+    //@NotBlank(message = "毕业学校不能为空")
     private String graduate;
 
     /**
      * 职务
      */
-    @NotBlank(message = "职务不能为空")
+    //@NotBlank(message = "职务不能为空")
     private String duties;
 
 }

+ 20 - 0
src/main/java/com/template/model/request/useridsRequest.java

@@ -0,0 +1,20 @@
+package com.template.model.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 修改密码
+ */
+@Data
+public class useridsRequest {
+    /**
+     * 用户ID集合
+     */
+    @NotEmpty(message = "用户ID集合不能为空")
+    private List<Integer> userIds;
+
+
+}

+ 248 - 0
src/main/java/com/template/model/seewo/AttendanceRuleListEventByClazzParam.java

@@ -0,0 +1,248 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.ParameterPosition;
+
+/**
+ * seewo-open API: 【事件考勤】查询班级指定日期的考勤规则列表
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class AttendanceRuleListEventByClazzParam extends OpenApiParam {
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private RequestBody requestBody;
+
+
+    public RequestBody getRequestBody() {
+        return this.requestBody;
+    }
+
+    public void setRequestBody(RequestBody requestBody) {
+        this.requestBody = requestBody;
+    }
+
+    public static AttendanceRuleListEventByClazzParamBuilder builder(){
+        return new AttendanceRuleListEventByClazzParamBuilder();
+    }
+
+    public static class AttendanceRuleListEventByClazzParamBuilder{
+        private RequestBody requestBody;
+
+        public AttendanceRuleListEventByClazzParamBuilder requestBody(RequestBody requestBody){
+            this.requestBody = requestBody;
+            return this;
+        }
+
+        public AttendanceRuleListEventByClazzParam build(){
+            AttendanceRuleListEventByClazzParam param = new AttendanceRuleListEventByClazzParam();
+            param.setRequestBody(requestBody);
+            return param;
+        }
+    }
+
+    public static class RequestBody {
+        /**
+         * query
+         */
+        private Query query;
+
+        public Query getQuery() {
+            return this.query;
+        }
+
+        public void setQuery(Query query) {
+            this.query = query;
+        }
+
+
+        public static RequestBodyBuilder builder(){
+            return new RequestBodyBuilder();
+        }
+
+        public static class RequestBodyBuilder{
+            private Query query;
+
+            public RequestBodyBuilder query(Query query){
+                this.query = query;
+                return this;
+            }
+
+            public RequestBody build(){
+                RequestBody param = new RequestBody();
+                param.setQuery(query);
+                return param;
+            }
+        }
+    }
+
+    public static class Query {
+        /**
+         * appId
+         */
+        private String appId;
+        /**
+         * 学校ID
+         */
+        private String schoolUid;
+        /**
+         * 考勤日期
+         */
+        private String date;
+        /**
+         * 班级ID
+         */
+        private String classUid;
+        /**
+         * 年级序号
+         */
+        private Integer grade;
+        /**
+         * 班级序号
+         */
+        private Integer clazz;
+        /**
+         * page
+         */
+        private Integer page;
+        /**
+         * pageSize
+         */
+        private Integer pageSize;
+
+        public String getAppId() {
+            return this.appId;
+        }
+
+        public void setAppId(String appId) {
+            this.appId = appId;
+        }
+
+        public String getSchoolUid() {
+            return this.schoolUid;
+        }
+
+        public void setSchoolUid(String schoolUid) {
+            this.schoolUid = schoolUid;
+        }
+
+        public String getDate() {
+            return this.date;
+        }
+
+        public void setDate(String date) {
+            this.date = date;
+        }
+
+        public String getClassUid() {
+            return this.classUid;
+        }
+
+        public void setClassUid(String classUid) {
+            this.classUid = classUid;
+        }
+
+        public Integer getGrade() {
+            return this.grade;
+        }
+
+        public void setGrade(Integer grade) {
+            this.grade = grade;
+        }
+
+        public Integer getClazz() {
+            return this.clazz;
+        }
+
+        public void setClazz(Integer clazz) {
+            this.clazz = clazz;
+        }
+
+        public Integer getPage() {
+            return this.page;
+        }
+
+        public void setPage(Integer page) {
+            this.page = page;
+        }
+
+        public Integer getPageSize() {
+            return this.pageSize;
+        }
+
+        public void setPageSize(Integer pageSize) {
+            this.pageSize = pageSize;
+        }
+
+
+        public static QueryBuilder builder(){
+            return new QueryBuilder();
+        }
+
+        public static class QueryBuilder{
+            private String appId;
+            private String schoolUid;
+            private String date;
+            private String classUid;
+            private Integer grade;
+            private Integer clazz;
+            private Integer page;
+            private Integer pageSize;
+
+            public QueryBuilder appId(String appId){
+                this.appId = appId;
+                return this;
+            }
+            public QueryBuilder schoolUid(String schoolUid){
+                this.schoolUid = schoolUid;
+                return this;
+            }
+            public QueryBuilder date(String date){
+                this.date = date;
+                return this;
+            }
+            public QueryBuilder classUid(String classUid){
+                this.classUid = classUid;
+                return this;
+            }
+            public QueryBuilder grade(Integer grade){
+                this.grade = grade;
+                return this;
+            }
+            public QueryBuilder clazz(Integer clazz){
+                this.clazz = clazz;
+                return this;
+            }
+            public QueryBuilder page(Integer page){
+                this.page = page;
+                return this;
+            }
+            public QueryBuilder pageSize(Integer pageSize){
+                this.pageSize = pageSize;
+                return this;
+            }
+
+            public Query build(){
+                Query param = new Query();
+                param.setAppId(appId);
+                param.setSchoolUid(schoolUid);
+                param.setDate(date);
+                param.setClassUid(classUid);
+                param.setGrade(grade);
+                param.setClazz(clazz);
+                param.setPage(page);
+                param.setPageSize(pageSize);
+                return param;
+            }
+        }
+    }
+
+
+}

+ 35 - 0
src/main/java/com/template/model/seewo/AttendanceRuleListEventByClazzRequest.java

@@ -0,0 +1,35 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.OpenApiRequest;
+
+/**
+ * seewo-open API: 【事件考勤】查询班级指定日期的考勤规则列表
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class AttendanceRuleListEventByClazzRequest extends OpenApiRequest<AttendanceRuleListEventByClazzParam, AttendanceRuleListEventByClazzResult> {
+
+    public AttendanceRuleListEventByClazzRequest(AttendanceRuleListEventByClazzParam param) {
+        this();
+        setBizModel(param);
+    }
+
+    public AttendanceRuleListEventByClazzRequest() {
+        setServerUrl("https://openapi.seewo.com");
+        setPath("/seewo-yunban-api/attendance-rule/list-event-by-clazz");
+        setHttpMethod("POST");
+    }
+
+    public Class<AttendanceRuleListEventByClazzResult> getResponseClass() {
+        return AttendanceRuleListEventByClazzResult.class;
+    }
+
+    public Class<AttendanceRuleListEventByClazzParam> getDomainClass() {
+        return AttendanceRuleListEventByClazzParam.class;
+    }
+}
+

+ 206 - 0
src/main/java/com/template/model/seewo/AttendanceRuleListEventByClazzResult.java

@@ -0,0 +1,206 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiResult;
+import com.seewo.open.sdk.HttpResponse;
+
+/**
+ * seewo-open API: 【事件考勤】查询班级指定日期的考勤规则列表
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class AttendanceRuleListEventByClazzResult extends OpenApiResult {
+
+    public AttendanceRuleListEventByClazzResult(HttpResponse response) {
+        super(response);
+    }
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private ResponseBody responseBody;
+
+
+    public ResponseBody getResponseBody() {
+        return this.responseBody;
+    }
+
+    public void setResponseBody(ResponseBody responseBody) {
+        this.responseBody = responseBody;
+    }
+
+    public static class ResponseBody {
+        /**
+         * code
+         */
+        private String code;
+        /**
+         * message
+         */
+        private String message;
+        /**
+         * data
+         */
+        private Data data;
+
+        public String getCode() {
+            return this.code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getMessage() {
+            return this.message;
+        }
+
+        public void setMessage(String message) {
+            this.message = message;
+        }
+
+        public Data getData() {
+            return this.data;
+        }
+
+        public void setData(Data data) {
+            this.data = data;
+        }
+
+    }
+
+    public static class Data {
+        /**
+         * classUid
+         */
+        private String classUid;
+        /**
+         * className
+         */
+        private String className;
+        /**
+         * classType
+         */
+        private Integer classType;
+        /**
+         * events
+         */
+        private List<EventsItem> events;
+
+        public String getClassUid() {
+            return this.classUid;
+        }
+
+        public void setClassUid(String classUid) {
+            this.classUid = classUid;
+        }
+
+        public String getClassName() {
+            return this.className;
+        }
+
+        public void setClassName(String className) {
+            this.className = className;
+        }
+
+        public Integer getClassType() {
+            return this.classType;
+        }
+
+        public void setClassType(Integer classType) {
+            this.classType = classType;
+        }
+
+        public List<EventsItem> getEvents() {
+            return this.events;
+        }
+
+        public void setEvents(List<EventsItem> events) {
+            this.events = events;
+        }
+
+    }
+
+    public static class EventsItem {
+        /**
+         * ruleId
+         */
+        private String ruleId;
+        /**
+         * name
+         */
+        private String name;
+        /**
+         * attendType
+         */
+        private Integer attendType;
+        /**
+         * attendStartTime
+         */
+        private String attendStartTime;
+        /**
+         * attendLateTime
+         */
+        private String attendLateTime;
+        /**
+         * attendEndTime
+         */
+        private String attendEndTime;
+
+        public String getRuleId() {
+            return this.ruleId;
+        }
+
+        public void setRuleId(String ruleId) {
+            this.ruleId = ruleId;
+        }
+
+        public String getName() {
+            return this.name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public Integer getAttendType() {
+            return this.attendType;
+        }
+
+        public void setAttendType(Integer attendType) {
+            this.attendType = attendType;
+        }
+
+        public String getAttendStartTime() {
+            return this.attendStartTime;
+        }
+
+        public void setAttendStartTime(String attendStartTime) {
+            this.attendStartTime = attendStartTime;
+        }
+
+        public String getAttendLateTime() {
+            return this.attendLateTime;
+        }
+
+        public void setAttendLateTime(String attendLateTime) {
+            this.attendLateTime = attendLateTime;
+        }
+
+        public String getAttendEndTime() {
+            return this.attendEndTime;
+        }
+
+        public void setAttendEndTime(String attendEndTime) {
+            this.attendEndTime = attendEndTime;
+        }
+
+    }
+
+
+}
+

+ 1 - 3
src/main/java/com/template/model/pojo/AttendanceRuleListSchoolAttendRuleParam.java

@@ -1,8 +1,6 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
-import java.util.*;
 import com.seewo.open.sdk.OpenApiParam;
-import com.seewo.open.sdk.ParameterPosition;
 
 /**
  * seewo-open API: 【事件|课程】分页查询学校考勤规则信息

+ 1 - 3
src/main/java/com/template/model/pojo/AttendanceRuleListSchoolAttendRuleRequest.java

@@ -1,7 +1,5 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
-import java.util.*;
-import com.seewo.open.sdk.OpenApiParam;
 import com.seewo.open.sdk.OpenApiRequest;
 
 /**

+ 1 - 1
src/main/java/com/template/model/pojo/AttendanceRuleListSchoolAttendRuleResult.java

@@ -1,4 +1,4 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
 import java.util.*;
 import com.seewo.open.sdk.OpenApiResult;

+ 1 - 3
src/main/java/com/template/model/pojo/AttendanceServiceListAttendClassRecordsParam.java

@@ -1,8 +1,6 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
-import java.util.*;
 import com.seewo.open.sdk.OpenApiParam;
-import com.seewo.open.sdk.ParameterPosition;
 
 /**
  * seewo-open API: 【事件|课程】根据规则指定日期与班级查询考勤记录

+ 1 - 3
src/main/java/com/template/model/pojo/AttendanceServiceListAttendClassRecordsRequest.java

@@ -1,7 +1,5 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
-import java.util.*;
-import com.seewo.open.sdk.OpenApiParam;
 import com.seewo.open.sdk.OpenApiRequest;
 
 /**

+ 1 - 1
src/main/java/com/template/model/pojo/AttendanceServiceListAttendClassRecordsResult.java

@@ -1,4 +1,4 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
 import java.util.*;
 import com.seewo.open.sdk.OpenApiResult;

+ 336 - 0
src/main/java/com/template/model/seewo/ClassServiceBatchSaveClassParam.java

@@ -0,0 +1,336 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+
+/**
+ * seewo-open API: 批量新增班级
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class ClassServiceBatchSaveClassParam extends OpenApiParam {
+
+
+    /**
+     * 请求体,MimeType为 application/json
+     */
+
+    private JSONRequestBody requestBody;
+
+
+    public JSONRequestBody getRequestBody() {
+        return this.requestBody;
+    }
+
+    public void setRequestBody(JSONRequestBody requestBody) {
+        this.requestBody = requestBody;
+    }
+
+    public static ClassServiceBatchSaveClassParamBuilder builder(){
+        return new ClassServiceBatchSaveClassParamBuilder();
+    }
+
+    public static class ClassServiceBatchSaveClassParamBuilder{
+        private JSONRequestBody requestBody;
+
+        public ClassServiceBatchSaveClassParamBuilder requestBody(JSONRequestBody requestBody){
+            this.requestBody = requestBody;
+            return this;
+        }
+
+        public ClassServiceBatchSaveClassParam build(){
+            ClassServiceBatchSaveClassParam param = new ClassServiceBatchSaveClassParam();
+            param.setRequestBody(requestBody);
+            return param;
+        }
+    }
+
+    public static class JSONRequestBody {
+        /**
+         * 查询条件
+         */
+        private ClassSaveQuery query;
+
+        public ClassSaveQuery getQuery() {
+            return this.query;
+        }
+
+        public void setQuery(ClassSaveQuery query) {
+            this.query = query;
+        }
+
+
+        public static JSONRequestBodyBuilder builder(){
+            return new JSONRequestBodyBuilder();
+        }
+
+        public static class JSONRequestBodyBuilder{
+            private ClassSaveQuery query;
+
+            public JSONRequestBodyBuilder query(ClassSaveQuery query){
+                this.query = query;
+                return this;
+            }
+
+            public JSONRequestBody build(){
+                JSONRequestBody param = new JSONRequestBody();
+                param.setQuery(query);
+                return param;
+            }
+        }
+    }
+
+    public static class ClassSaveQuery {
+        /**
+         * appId
+         */
+        private String appId;
+        /**
+         * 学校ID
+         */
+        private String schoolUid;
+        /**
+         * 班级信息列表
+         */
+        private List<ClassInfo> classList;
+
+        public String getAppId() {
+            return this.appId;
+        }
+
+        public void setAppId(String appId) {
+            this.appId = appId;
+        }
+
+        public String getSchoolUid() {
+            return this.schoolUid;
+        }
+
+        public void setSchoolUid(String schoolUid) {
+            this.schoolUid = schoolUid;
+        }
+
+        public List<ClassInfo> getClassList() {
+            return this.classList;
+        }
+
+        public void setClassList(List<ClassInfo> classList) {
+            this.classList = classList;
+        }
+
+
+        public static ClassSaveQueryBuilder builder(){
+            return new ClassSaveQueryBuilder();
+        }
+
+        public static class ClassSaveQueryBuilder{
+            private String appId;
+            private String schoolUid;
+            private List<ClassInfo> classList;
+
+            public ClassSaveQueryBuilder appId(String appId){
+                this.appId = appId;
+                return this;
+            }
+            public ClassSaveQueryBuilder schoolUid(String schoolUid){
+                this.schoolUid = schoolUid;
+                return this;
+            }
+            public ClassSaveQueryBuilder classList(List<ClassInfo> classList){
+                this.classList = classList;
+                return this;
+            }
+
+            public ClassSaveQuery build(){
+                ClassSaveQuery param = new ClassSaveQuery();
+                param.setAppId(appId);
+                param.setSchoolUid(schoolUid);
+                param.setClassList(classList);
+                return param;
+            }
+        }
+    }
+
+    public static class ClassInfo {
+        /**
+         *  班级类型,1 行政班, 2 走班,默认1
+         */
+        private Integer type;
+        /**
+         * 学段:CodeSchoolStage_0小学,CodeSchoolStage_1初中,CodeSchoolStage_2高中,CodeSchoolStage_3自定义,CodeSchoolStage_4幼儿园
+         */
+        private String stageCode;
+        /**
+         *  年级序号
+         */
+        private Integer grade;
+        /**
+         *  学年
+         */
+        private Integer gradeYear;
+        /**
+         *  班级序号
+         */
+        private Integer clazz;
+        /**
+         * 班级名称,默认为年级+班级+‘班’
+         */
+        private String nickName;
+        /**
+         * 学院ID,大学学段时必须
+         */
+        private String departmentId;
+        /**
+         * 专业ID,大学学段时必须
+         */
+        private String majorId;
+        /**
+         * 年级ID,大学学段时必须
+         */
+        private String gradeId;
+
+        public Integer getType() {
+            return this.type;
+        }
+
+        public void setType(Integer type) {
+            this.type = type;
+        }
+
+        public String getStageCode() {
+            return this.stageCode;
+        }
+
+        public void setStageCode(String stageCode) {
+            this.stageCode = stageCode;
+        }
+
+        public Integer getGrade() {
+            return this.grade;
+        }
+
+        public void setGrade(Integer grade) {
+            this.grade = grade;
+        }
+
+        public Integer getGradeYear() {
+            return this.gradeYear;
+        }
+
+        public void setGradeYear(Integer gradeYear) {
+            this.gradeYear = gradeYear;
+        }
+
+        public Integer getClazz() {
+            return this.clazz;
+        }
+
+        public void setClazz(Integer clazz) {
+            this.clazz = clazz;
+        }
+
+        public String getNickName() {
+            return this.nickName;
+        }
+
+        public void setNickName(String nickName) {
+            this.nickName = nickName;
+        }
+
+        public String getDepartmentId() {
+            return this.departmentId;
+        }
+
+        public void setDepartmentId(String departmentId) {
+            this.departmentId = departmentId;
+        }
+
+        public String getMajorId() {
+            return this.majorId;
+        }
+
+        public void setMajorId(String majorId) {
+            this.majorId = majorId;
+        }
+
+        public String getGradeId() {
+            return this.gradeId;
+        }
+
+        public void setGradeId(String gradeId) {
+            this.gradeId = gradeId;
+        }
+
+
+        public static ClassInfoBuilder builder(){
+            return new ClassInfoBuilder();
+        }
+
+        public static class ClassInfoBuilder{
+            private Integer type;
+            private String stageCode;
+            private Integer grade;
+            private Integer gradeYear;
+            private Integer clazz;
+            private String nickName;
+            private String departmentId;
+            private String majorId;
+            private String gradeId;
+
+            public ClassInfoBuilder type(Integer type){
+                this.type = type;
+                return this;
+            }
+            public ClassInfoBuilder stageCode(String stageCode){
+                this.stageCode = stageCode;
+                return this;
+            }
+            public ClassInfoBuilder grade(Integer grade){
+                this.grade = grade;
+                return this;
+            }
+            public ClassInfoBuilder gradeYear(Integer gradeYear){
+                this.gradeYear = gradeYear;
+                return this;
+            }
+            public ClassInfoBuilder clazz(Integer clazz){
+                this.clazz = clazz;
+                return this;
+            }
+            public ClassInfoBuilder nickName(String nickName){
+                this.nickName = nickName;
+                return this;
+            }
+            public ClassInfoBuilder departmentId(String departmentId){
+                this.departmentId = departmentId;
+                return this;
+            }
+            public ClassInfoBuilder majorId(String majorId){
+                this.majorId = majorId;
+                return this;
+            }
+            public ClassInfoBuilder gradeId(String gradeId){
+                this.gradeId = gradeId;
+                return this;
+            }
+
+            public ClassInfo build(){
+                ClassInfo param = new ClassInfo();
+                param.setType(type);
+                param.setStageCode(stageCode);
+                param.setGrade(grade);
+                param.setGradeYear(gradeYear);
+                param.setClazz(clazz);
+                param.setNickName(nickName);
+                param.setDepartmentId(departmentId);
+                param.setMajorId(majorId);
+                param.setGradeId(gradeId);
+                return param;
+            }
+        }
+    }
+
+
+}

+ 33 - 0
src/main/java/com/template/model/seewo/ClassServiceBatchSaveClassRequest.java

@@ -0,0 +1,33 @@
+package com.template.model.seewo;
+
+import com.seewo.open.sdk.OpenApiRequest;
+
+/**
+ * seewo-open API: 批量新增班级
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class ClassServiceBatchSaveClassRequest extends OpenApiRequest<ClassServiceBatchSaveClassParam, ClassServiceBatchSaveClassResult> {
+
+    public ClassServiceBatchSaveClassRequest(ClassServiceBatchSaveClassParam param) {
+        this();
+        setBizModel(param);
+    }
+
+    public ClassServiceBatchSaveClassRequest() {
+        setServerUrl("https://openapi.seewo.com");
+        setPath("/seewo-yunban-api/class-service/batch-save-class");
+        setHttpMethod("POST");
+    }
+
+    public Class<ClassServiceBatchSaveClassResult> getResponseClass() {
+        return ClassServiceBatchSaveClassResult.class;
+    }
+
+    public Class<ClassServiceBatchSaveClassParam> getDomainClass() {
+        return ClassServiceBatchSaveClassParam.class;
+    }
+}
+

+ 262 - 0
src/main/java/com/template/model/seewo/ClassServiceBatchSaveClassResult.java

@@ -0,0 +1,262 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiResult;
+import com.seewo.open.sdk.HttpResponse;
+
+/**
+ * seewo-open API: 批量新增班级
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class ClassServiceBatchSaveClassResult extends OpenApiResult {
+
+    public ClassServiceBatchSaveClassResult(HttpResponse response) {
+        super(response);
+    }
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private JSONResponseBody responseBody;
+
+
+    public JSONResponseBody getResponseBody() {
+        return this.responseBody;
+    }
+
+    public void setResponseBody(JSONResponseBody responseBody) {
+        this.responseBody = responseBody;
+    }
+
+    public static class JSONResponseBody {
+        /**
+         *
+         */
+        private String code;
+        /**
+         *
+         */
+        private String message;
+        /**
+         *
+         */
+        private List<ClassInfoDto> data;
+
+        public String getCode() {
+            return this.code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getMessage() {
+            return this.message;
+        }
+
+        public void setMessage(String message) {
+            this.message = message;
+        }
+
+        public List<ClassInfoDto> getData() {
+            return this.data;
+        }
+
+        public void setData(List<ClassInfoDto> data) {
+            this.data = data;
+        }
+
+    }
+
+    public static class ClassInfoDto {
+        /**
+         *  班级ID
+         */
+        private String uid;
+        /**
+         *  组织id
+         */
+        private String schoolUid;
+        /**
+         *  班级类型,1 普通班, 2 走班;
+         */
+        private Integer type;
+        /**
+         *  学段信息
+         */
+        private String stageCode;
+        /**
+         *  学段UID
+         */
+        private String stageUid;
+        /**
+         *  学段名
+         */
+        private String stageName;
+        /**
+         *  年级,如7年级
+         */
+        private Integer grade;
+        /**
+         *  年级UID
+         */
+        private String gradeUid;
+        /**
+         *  年级的届数,例如2017届
+         */
+        private Integer gradeYear;
+        /**
+         *  班级
+         */
+        private Integer clazz;
+        /**
+         *  班级别名
+         */
+        private String nickName;
+        /**
+         *  是否为毕业班
+         */
+        private Boolean isGraduate;
+        /**
+         *  部门UID 高教版
+         */
+        private String departmentId;
+        /**
+         *  专业ID 高教版
+         */
+        private String majorId;
+        /**
+         *  年级ID 高教版
+         */
+        private String gradeId;
+
+        public String getUid() {
+            return this.uid;
+        }
+
+        public void setUid(String uid) {
+            this.uid = uid;
+        }
+
+        public String getSchoolUid() {
+            return this.schoolUid;
+        }
+
+        public void setSchoolUid(String schoolUid) {
+            this.schoolUid = schoolUid;
+        }
+
+        public Integer getType() {
+            return this.type;
+        }
+
+        public void setType(Integer type) {
+            this.type = type;
+        }
+
+        public String getStageCode() {
+            return this.stageCode;
+        }
+
+        public void setStageCode(String stageCode) {
+            this.stageCode = stageCode;
+        }
+
+        public String getStageUid() {
+            return this.stageUid;
+        }
+
+        public void setStageUid(String stageUid) {
+            this.stageUid = stageUid;
+        }
+
+        public String getStageName() {
+            return this.stageName;
+        }
+
+        public void setStageName(String stageName) {
+            this.stageName = stageName;
+        }
+
+        public Integer getGrade() {
+            return this.grade;
+        }
+
+        public void setGrade(Integer grade) {
+            this.grade = grade;
+        }
+
+        public String getGradeUid() {
+            return this.gradeUid;
+        }
+
+        public void setGradeUid(String gradeUid) {
+            this.gradeUid = gradeUid;
+        }
+
+        public Integer getGradeYear() {
+            return this.gradeYear;
+        }
+
+        public void setGradeYear(Integer gradeYear) {
+            this.gradeYear = gradeYear;
+        }
+
+        public Integer getClazz() {
+            return this.clazz;
+        }
+
+        public void setClazz(Integer clazz) {
+            this.clazz = clazz;
+        }
+
+        public String getNickName() {
+            return this.nickName;
+        }
+
+        public void setNickName(String nickName) {
+            this.nickName = nickName;
+        }
+
+        public Boolean getIsGraduate() {
+            return this.isGraduate;
+        }
+
+        public void setIsGraduate(Boolean isGraduate) {
+            this.isGraduate = isGraduate;
+        }
+
+        public String getDepartmentId() {
+            return this.departmentId;
+        }
+
+        public void setDepartmentId(String departmentId) {
+            this.departmentId = departmentId;
+        }
+
+        public String getMajorId() {
+            return this.majorId;
+        }
+
+        public void setMajorId(String majorId) {
+            this.majorId = majorId;
+        }
+
+        public String getGradeId() {
+            return this.gradeId;
+        }
+
+        public void setGradeId(String gradeId) {
+            this.gradeId = gradeId;
+        }
+
+    }
+
+
+}
+

+ 1 - 3
src/main/java/com/template/model/pojo/HomeSchoolServiceSendNoteToKidParam.java

@@ -1,8 +1,6 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
-import java.util.*;
 import com.seewo.open.sdk.OpenApiParam;
-import com.seewo.open.sdk.ParameterPosition;
 
 /**
  * seewo-open API: 家长或老师发送留言给学生

+ 1 - 3
src/main/java/com/template/model/pojo/HomeSchoolServiceSendNoteToKidRequest.java

@@ -1,7 +1,5 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
-import java.util.*;
-import com.seewo.open.sdk.OpenApiParam;
 import com.seewo.open.sdk.OpenApiRequest;
 
 /**

+ 1 - 1
src/main/java/com/template/model/pojo/HomeSchoolServiceSendNoteToKidResult.java

@@ -1,4 +1,4 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
 import java.util.*;
 import com.seewo.open.sdk.OpenApiResult;

+ 1 - 1
src/main/java/com/template/model/pojo/OrgClassOpenSeewoUcOpenV1ClassFullParam.java

@@ -1,4 +1,4 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
 import com.seewo.open.sdk.OpenApiParam;
 

+ 1 - 3
src/main/java/com/template/model/pojo/OrgClassOpenSeewoUcOpenV1ClassFullRequest.java

@@ -1,7 +1,5 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
-import java.util.*;
-import com.seewo.open.sdk.OpenApiParam;
 import com.seewo.open.sdk.OpenApiRequest;
 
 /**

+ 1 - 1
src/main/java/com/template/model/pojo/OrgClassOpenSeewoUcOpenV1ClassFullResult.java

@@ -1,4 +1,4 @@
-package com.template.model.pojo;
+package com.template.model.seewo;
 
 import java.util.*;
 import com.seewo.open.sdk.OpenApiResult;

+ 283 - 0
src/main/java/com/template/model/seewo/OrganizationNodeServiceInitSchoolClassesParam.java

@@ -0,0 +1,283 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.ParameterPosition;
+
+/**
+ * seewo-open API: 批量初始化K12班级
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class OrganizationNodeServiceInitSchoolClassesParam extends OpenApiParam {
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private RequestBody requestBody;
+
+
+    public RequestBody getRequestBody() {
+        return this.requestBody;
+    }
+
+    public void setRequestBody(RequestBody requestBody) {
+        this.requestBody = requestBody;
+    }
+
+    public static OrganizationNodeServiceInitSchoolClassesParamBuilder builder(){
+        return new OrganizationNodeServiceInitSchoolClassesParamBuilder();
+    }
+
+    public static class OrganizationNodeServiceInitSchoolClassesParamBuilder{
+        private RequestBody requestBody;
+
+        public OrganizationNodeServiceInitSchoolClassesParamBuilder requestBody(RequestBody requestBody){
+            this.requestBody = requestBody;
+            return this;
+        }
+
+        public OrganizationNodeServiceInitSchoolClassesParam build(){
+            OrganizationNodeServiceInitSchoolClassesParam param = new OrganizationNodeServiceInitSchoolClassesParam();
+            param.setRequestBody(requestBody);
+            return param;
+        }
+    }
+
+    public static class RequestBody {
+        /**
+         * query
+         */
+        private Query query;
+
+        public Query getQuery() {
+            return this.query;
+        }
+
+        public void setQuery(Query query) {
+            this.query = query;
+        }
+
+
+        public static RequestBodyBuilder builder(){
+            return new RequestBodyBuilder();
+        }
+
+        public static class RequestBodyBuilder{
+            private Query query;
+
+            public RequestBodyBuilder query(Query query){
+                this.query = query;
+                return this;
+            }
+
+            public RequestBody build(){
+                RequestBody param = new RequestBody();
+                param.setQuery(query);
+                return param;
+            }
+        }
+    }
+
+    public static class Query {
+        /**
+         * appId
+         */
+        private String appId;
+        /**
+         * 学校ID
+         */
+        private String unitUid;
+        /**
+         * 校区名称,名字不能超过20位
+         */
+        private String campusName;
+        /**
+         * 新增班级列表(最大200条)
+         */
+        private List<Object> classList;
+
+        public String getAppId() {
+            return this.appId;
+        }
+
+        public void setAppId(String appId) {
+            this.appId = appId;
+        }
+
+        public String getUnitUid() {
+            return this.unitUid;
+        }
+
+        public void setUnitUid(String unitUid) {
+            this.unitUid = unitUid;
+        }
+
+        public String getCampusName() {
+            return this.campusName;
+        }
+
+        public void setCampusName(String campusName) {
+            this.campusName = campusName;
+        }
+
+        public List<Object> getClassList() {
+            return this.classList;
+        }
+
+        public void setClassList(List<Object> classList) {
+            this.classList = classList;
+        }
+
+
+        public static QueryBuilder builder(){
+            return new QueryBuilder();
+        }
+
+        public static class QueryBuilder{
+            private String appId;
+            private String unitUid;
+            private String campusName;
+            private List<Object> classList;
+
+            public QueryBuilder appId(String appId){
+                this.appId = appId;
+                return this;
+            }
+            public QueryBuilder unitUid(String unitUid){
+                this.unitUid = unitUid;
+                return this;
+            }
+            public QueryBuilder campusName(String campusName){
+                this.campusName = campusName;
+                return this;
+            }
+            public QueryBuilder classList(List<Object> classList){
+                this.classList = classList;
+                return this;
+            }
+
+            public Query build(){
+                Query param = new Query();
+                param.setAppId(appId);
+                param.setUnitUid(unitUid);
+                param.setCampusName(campusName);
+                param.setClassList(classList);
+                return param;
+            }
+        }
+    }
+
+    public static class Object {
+        /**
+         * 学段名称 : 幼儿园、小学、初中、高中
+         */
+        private String stageName;
+        /**
+         * 入学年份,例如2017届,为2000至2117 -优先 (入学年份与年级必填一个)
+         */
+        private Integer gradeYear;
+        /**
+         * 年级:小学~高中 : 1-12 幼儿园:30 托班:31 小班:32 中班:33 大班:34
+         */
+        private Integer grade;
+        /**
+         * 班级名称
+         */
+        private String className;
+        /**
+         * 班级序号 1-50,比如:  一年级1班 clazz:1
+         */
+        private Integer clazz;
+
+        public String getStageName() {
+            return this.stageName;
+        }
+
+        public void setStageName(String stageName) {
+            this.stageName = stageName;
+        }
+
+        public Integer getGradeYear() {
+            return this.gradeYear;
+        }
+
+        public void setGradeYear(Integer gradeYear) {
+            this.gradeYear = gradeYear;
+        }
+
+        public Integer getGrade() {
+            return this.grade;
+        }
+
+        public void setGrade(Integer grade) {
+            this.grade = grade;
+        }
+
+        public String getClassName() {
+            return this.className;
+        }
+
+        public void setClassName(String className) {
+            this.className = className;
+        }
+
+        public Integer getClazz() {
+            return this.clazz;
+        }
+
+        public void setClazz(Integer clazz) {
+            this.clazz = clazz;
+        }
+
+
+        public static ObjectBuilder builder(){
+            return new ObjectBuilder();
+        }
+
+        public static class ObjectBuilder{
+            private String stageName;
+            private Integer gradeYear;
+            private Integer grade;
+            private String className;
+            private Integer clazz;
+
+            public ObjectBuilder stageName(String stageName){
+                this.stageName = stageName;
+                return this;
+            }
+            public ObjectBuilder gradeYear(Integer gradeYear){
+                this.gradeYear = gradeYear;
+                return this;
+            }
+            public ObjectBuilder grade(Integer grade){
+                this.grade = grade;
+                return this;
+            }
+            public ObjectBuilder className(String className){
+                this.className = className;
+                return this;
+            }
+            public ObjectBuilder clazz(Integer clazz){
+                this.clazz = clazz;
+                return this;
+            }
+
+            public Object build(){
+                Object param = new Object();
+                param.setStageName(stageName);
+                param.setGradeYear(gradeYear);
+                param.setGrade(grade);
+                param.setClassName(className);
+                param.setClazz(clazz);
+                return param;
+            }
+        }
+    }
+
+
+}

+ 35 - 0
src/main/java/com/template/model/seewo/OrganizationNodeServiceInitSchoolClassesRequest.java

@@ -0,0 +1,35 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.OpenApiRequest;
+
+/**
+ * seewo-open API: 批量初始化K12班级
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class OrganizationNodeServiceInitSchoolClassesRequest extends OpenApiRequest<OrganizationNodeServiceInitSchoolClassesParam, OrganizationNodeServiceInitSchoolClassesResult> {
+
+    public OrganizationNodeServiceInitSchoolClassesRequest(OrganizationNodeServiceInitSchoolClassesParam param) {
+        this();
+        setBizModel(param);
+    }
+
+    public OrganizationNodeServiceInitSchoolClassesRequest() {
+        setServerUrl("https://openapi.seewo.com");
+        setPath("/seewo-yunban-api/organization-node-service/init-school-classes");
+        setHttpMethod("POST");
+    }
+
+    public Class<OrganizationNodeServiceInitSchoolClassesResult> getResponseClass() {
+        return OrganizationNodeServiceInitSchoolClassesResult.class;
+    }
+
+    public Class<OrganizationNodeServiceInitSchoolClassesParam> getDomainClass() {
+        return OrganizationNodeServiceInitSchoolClassesParam.class;
+    }
+}
+

+ 66 - 0
src/main/java/com/template/model/seewo/OrganizationNodeServiceInitSchoolClassesResult.java

@@ -0,0 +1,66 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiResult;
+import com.seewo.open.sdk.HttpResponse;
+
+/**
+ * seewo-open API: 批量初始化K12班级
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class OrganizationNodeServiceInitSchoolClassesResult extends OpenApiResult {
+
+    public OrganizationNodeServiceInitSchoolClassesResult(HttpResponse response) {
+        super(response);
+    }
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private ResponseBody responseBody;
+
+
+    public ResponseBody getResponseBody() {
+        return this.responseBody;
+    }
+
+    public void setResponseBody(ResponseBody responseBody) {
+        this.responseBody = responseBody;
+    }
+
+    public static class ResponseBody {
+        /**
+         * code
+         */
+        private String code;
+        /**
+         * message
+         */
+        private String message;
+
+        public String getCode() {
+            return this.code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getMessage() {
+            return this.message;
+        }
+
+        public void setMessage(String message) {
+            this.message = message;
+        }
+
+    }
+
+
+}
+

+ 282 - 0
src/main/java/com/template/model/seewo/ParentServiceBatchSaveOrUpdateParentsParam.java

@@ -0,0 +1,282 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.ParameterPosition;
+
+/**
+ * seewo-open API: 批量添加或更新学生家长
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class ParentServiceBatchSaveOrUpdateParentsParam extends OpenApiParam {
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private RequestBody requestBody;
+
+
+    public RequestBody getRequestBody() {
+        return this.requestBody;
+    }
+
+    public void setRequestBody(RequestBody requestBody) {
+        this.requestBody = requestBody;
+    }
+
+    public static ParentServiceBatchSaveOrUpdateParentsParamBuilder builder(){
+        return new ParentServiceBatchSaveOrUpdateParentsParamBuilder();
+    }
+
+    public static class ParentServiceBatchSaveOrUpdateParentsParamBuilder{
+        private RequestBody requestBody;
+
+        public ParentServiceBatchSaveOrUpdateParentsParamBuilder requestBody(RequestBody requestBody){
+            this.requestBody = requestBody;
+            return this;
+        }
+
+        public ParentServiceBatchSaveOrUpdateParentsParam build(){
+            ParentServiceBatchSaveOrUpdateParentsParam param = new ParentServiceBatchSaveOrUpdateParentsParam();
+            param.setRequestBody(requestBody);
+            return param;
+        }
+    }
+
+    public static class RequestBody {
+        /**
+         * query
+         */
+        private Query query;
+
+        public Query getQuery() {
+            return this.query;
+        }
+
+        public void setQuery(Query query) {
+            this.query = query;
+        }
+
+
+        public static RequestBodyBuilder builder(){
+            return new RequestBodyBuilder();
+        }
+
+        public static class RequestBodyBuilder{
+            private Query query;
+
+            public RequestBodyBuilder query(Query query){
+                this.query = query;
+                return this;
+            }
+
+            public RequestBody build(){
+                RequestBody param = new RequestBody();
+                param.setQuery(query);
+                return param;
+            }
+        }
+    }
+
+    public static class Query {
+        /**
+         * appId
+         */
+        private String appId;
+        /**
+         * 学校ID
+         */
+        private String schoolUid;
+        /**
+         * 学生与家长列表,最大100条
+         */
+        private List<StudentParentsItem> studentParents;
+
+        public String getAppId() {
+            return this.appId;
+        }
+
+        public void setAppId(String appId) {
+            this.appId = appId;
+        }
+
+        public String getSchoolUid() {
+            return this.schoolUid;
+        }
+
+        public void setSchoolUid(String schoolUid) {
+            this.schoolUid = schoolUid;
+        }
+
+        public List<StudentParentsItem> getStudentParents() {
+            return this.studentParents;
+        }
+
+        public void setStudentParents(List<StudentParentsItem> studentParents) {
+            this.studentParents = studentParents;
+        }
+
+
+        public static QueryBuilder builder(){
+            return new QueryBuilder();
+        }
+
+        public static class QueryBuilder{
+            private String appId;
+            private String schoolUid;
+            private List<StudentParentsItem> studentParents;
+
+            public QueryBuilder appId(String appId){
+                this.appId = appId;
+                return this;
+            }
+            public QueryBuilder schoolUid(String schoolUid){
+                this.schoolUid = schoolUid;
+                return this;
+            }
+            public QueryBuilder studentParents(List<StudentParentsItem> studentParents){
+                this.studentParents = studentParents;
+                return this;
+            }
+
+            public Query build(){
+                Query param = new Query();
+                param.setAppId(appId);
+                param.setSchoolUid(schoolUid);
+                param.setStudentParents(studentParents);
+                return param;
+            }
+        }
+    }
+
+    public static class StudentParentsItem {
+        /**
+         * 学生学号
+         */
+        private String studentCode;
+        /**
+         * 家长列表,最多4个
+         */
+        private List<ParentsItem> parents;
+
+        public String getStudentCode() {
+            return this.studentCode;
+        }
+
+        public void setStudentCode(String studentCode) {
+            this.studentCode = studentCode;
+        }
+
+        public List<ParentsItem> getParents() {
+            return this.parents;
+        }
+
+        public void setParents(List<ParentsItem> parents) {
+            this.parents = parents;
+        }
+
+
+        public static StudentParentsItemBuilder builder(){
+            return new StudentParentsItemBuilder();
+        }
+
+        public static class StudentParentsItemBuilder{
+            private String studentCode;
+            private List<ParentsItem> parents;
+
+            public StudentParentsItemBuilder studentCode(String studentCode){
+                this.studentCode = studentCode;
+                return this;
+            }
+            public StudentParentsItemBuilder parents(List<ParentsItem> parents){
+                this.parents = parents;
+                return this;
+            }
+
+            public StudentParentsItem build(){
+                StudentParentsItem param = new StudentParentsItem();
+                param.setStudentCode(studentCode);
+                param.setParents(parents);
+                return param;
+            }
+        }
+    }
+
+    public static class ParentsItem {
+        /**
+         * 名字
+         */
+        private String name;
+        /**
+         * 手机号
+         */
+        private String phone;
+        /**
+         * 位置,取值0-3,会替换对应位置的数据
+         */
+        private Integer index;
+
+        public String getName() {
+            return this.name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getPhone() {
+            return this.phone;
+        }
+
+        public void setPhone(String phone) {
+            this.phone = phone;
+        }
+
+        public Integer getIndex() {
+            return this.index;
+        }
+
+        public void setIndex(Integer index) {
+            this.index = index;
+        }
+
+
+        public static ParentsItemBuilder builder(){
+            return new ParentsItemBuilder();
+        }
+
+        public static class ParentsItemBuilder{
+            private String name;
+            private String phone;
+            private Integer index;
+
+            public ParentsItemBuilder name(String name){
+                this.name = name;
+                return this;
+            }
+            public ParentsItemBuilder phone(String phone){
+                this.phone = phone;
+                return this;
+            }
+            public ParentsItemBuilder index(Integer index){
+                this.index = index;
+                return this;
+            }
+
+            public ParentsItem build(){
+                ParentsItem param = new ParentsItem();
+                param.setName(name);
+                param.setPhone(phone);
+                param.setIndex(index);
+                return param;
+            }
+        }
+    }
+
+
+}

+ 35 - 0
src/main/java/com/template/model/seewo/ParentServiceBatchSaveOrUpdateParentsRequest.java

@@ -0,0 +1,35 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.OpenApiRequest;
+
+/**
+ * seewo-open API: 批量添加或更新学生家长
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class ParentServiceBatchSaveOrUpdateParentsRequest extends OpenApiRequest<ParentServiceBatchSaveOrUpdateParentsParam, ParentServiceBatchSaveOrUpdateParentsResult> {
+
+    public ParentServiceBatchSaveOrUpdateParentsRequest(ParentServiceBatchSaveOrUpdateParentsParam param) {
+        this();
+        setBizModel(param);
+    }
+
+    public ParentServiceBatchSaveOrUpdateParentsRequest() {
+        setServerUrl("https://openapi.seewo.com");
+        setPath("/seewo-yunban-api/parent-service/batch-save-or-update-parents");
+        setHttpMethod("POST");
+    }
+
+    public Class<ParentServiceBatchSaveOrUpdateParentsResult> getResponseClass() {
+        return ParentServiceBatchSaveOrUpdateParentsResult.class;
+    }
+
+    public Class<ParentServiceBatchSaveOrUpdateParentsParam> getDomainClass() {
+        return ParentServiceBatchSaveOrUpdateParentsParam.class;
+    }
+}
+

+ 66 - 0
src/main/java/com/template/model/seewo/ParentServiceBatchSaveOrUpdateParentsResult.java

@@ -0,0 +1,66 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiResult;
+import com.seewo.open.sdk.HttpResponse;
+
+/**
+ * seewo-open API: 批量添加或更新学生家长
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class ParentServiceBatchSaveOrUpdateParentsResult extends OpenApiResult {
+
+    public ParentServiceBatchSaveOrUpdateParentsResult(HttpResponse response) {
+        super(response);
+    }
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private ResponseBody responseBody;
+
+
+    public ResponseBody getResponseBody() {
+        return this.responseBody;
+    }
+
+    public void setResponseBody(ResponseBody responseBody) {
+        this.responseBody = responseBody;
+    }
+
+    public static class ResponseBody {
+        /**
+         * code
+         */
+        private String code;
+        /**
+         * message
+         */
+        private String message;
+
+        public String getCode() {
+            return this.code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getMessage() {
+            return this.message;
+        }
+
+        public void setMessage(String message) {
+            this.message = message;
+        }
+
+    }
+
+
+}
+

+ 210 - 0
src/main/java/com/template/model/seewo/PersonalLeaveListSchoolPeriodRecordsParam.java

@@ -0,0 +1,210 @@
+package com.template.model.seewo;
+
+import com.seewo.open.sdk.OpenApiParam;
+
+/**
+ * seewo-open API: 查询学校阶段内的请假记录
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class PersonalLeaveListSchoolPeriodRecordsParam extends OpenApiParam {
+
+
+    /**
+     * 请求体,MimeType为 application/json
+     */
+
+    private RequestBody requestBody;
+
+
+    public RequestBody getRequestBody() {
+        return this.requestBody;
+    }
+
+    public void setRequestBody(RequestBody requestBody) {
+        this.requestBody = requestBody;
+    }
+
+    public static PersonalLeaveListSchoolPeriodRecordsParamBuilder builder(){
+        return new PersonalLeaveListSchoolPeriodRecordsParamBuilder();
+    }
+
+    public static class PersonalLeaveListSchoolPeriodRecordsParamBuilder{
+        private RequestBody requestBody;
+
+        public PersonalLeaveListSchoolPeriodRecordsParamBuilder requestBody(RequestBody requestBody){
+            this.requestBody = requestBody;
+            return this;
+        }
+
+        public PersonalLeaveListSchoolPeriodRecordsParam build(){
+            PersonalLeaveListSchoolPeriodRecordsParam param = new PersonalLeaveListSchoolPeriodRecordsParam();
+            param.setRequestBody(requestBody);
+            return param;
+        }
+    }
+
+    public static class RequestBody {
+        /**
+         * query
+         */
+        private Query query;
+
+        public Query getQuery() {
+            return this.query;
+        }
+
+        public void setQuery(Query query) {
+            this.query = query;
+        }
+
+
+        public static RequestBodyBuilder builder(){
+            return new RequestBodyBuilder();
+        }
+
+        public static class RequestBodyBuilder{
+            private Query query;
+
+            public RequestBodyBuilder query(Query query){
+                this.query = query;
+                return this;
+            }
+
+            public RequestBody build(){
+                RequestBody param = new RequestBody();
+                param.setQuery(query);
+                return param;
+            }
+        }
+    }
+
+    public static class Query {
+        /**
+         * 学校ID
+         */
+        private String schoolUid;
+        /**
+         * 开始日期 yyyy-MM-dd
+         */
+        private String startDate;
+        /**
+         * 结束日期 yyyy-MM-dd
+         */
+        private String endDate;
+        /**
+         * 当前页
+         */
+        private Integer page;
+        /**
+         * 分页条数
+         */
+        private Integer pageSize;
+        /**
+         * appid
+         */
+        private String appId;
+
+        public String getSchoolUid() {
+            return this.schoolUid;
+        }
+
+        public void setSchoolUid(String schoolUid) {
+            this.schoolUid = schoolUid;
+        }
+
+        public String getStartDate() {
+            return this.startDate;
+        }
+
+        public void setStartDate(String startDate) {
+            this.startDate = startDate;
+        }
+
+        public String getEndDate() {
+            return this.endDate;
+        }
+
+        public void setEndDate(String endDate) {
+            this.endDate = endDate;
+        }
+
+        public Integer getPage() {
+            return this.page;
+        }
+
+        public void setPage(Integer page) {
+            this.page = page;
+        }
+
+        public Integer getPageSize() {
+            return this.pageSize;
+        }
+
+        public void setPageSize(Integer pageSize) {
+            this.pageSize = pageSize;
+        }
+
+        public String getAppId() {
+            return this.appId;
+        }
+
+        public void setAppId(String appId) {
+            this.appId = appId;
+        }
+
+
+        public static QueryBuilder builder(){
+            return new QueryBuilder();
+        }
+
+        public static class QueryBuilder{
+            private String schoolUid;
+            private String startDate;
+            private String endDate;
+            private Integer page;
+            private Integer pageSize;
+            private String appId;
+
+            public QueryBuilder schoolUid(String schoolUid){
+                this.schoolUid = schoolUid;
+                return this;
+            }
+            public QueryBuilder startDate(String startDate){
+                this.startDate = startDate;
+                return this;
+            }
+            public QueryBuilder endDate(String endDate){
+                this.endDate = endDate;
+                return this;
+            }
+            public QueryBuilder page(Integer page){
+                this.page = page;
+                return this;
+            }
+            public QueryBuilder pageSize(Integer pageSize){
+                this.pageSize = pageSize;
+                return this;
+            }
+            public QueryBuilder appId(String appId){
+                this.appId = appId;
+                return this;
+            }
+
+            public Query build(){
+                Query param = new Query();
+                param.setSchoolUid(schoolUid);
+                param.setStartDate(startDate);
+                param.setEndDate(endDate);
+                param.setPage(page);
+                param.setPageSize(pageSize);
+                param.setAppId(appId);
+                return param;
+            }
+        }
+    }
+
+
+}

+ 33 - 0
src/main/java/com/template/model/seewo/PersonalLeaveListSchoolPeriodRecordsRequest.java

@@ -0,0 +1,33 @@
+package com.template.model.seewo;
+
+import com.seewo.open.sdk.OpenApiRequest;
+
+/**
+ * seewo-open API: 查询学校阶段内的请假记录
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class PersonalLeaveListSchoolPeriodRecordsRequest extends OpenApiRequest<PersonalLeaveListSchoolPeriodRecordsParam, PersonalLeaveListSchoolPeriodRecordsResult> {
+
+    public PersonalLeaveListSchoolPeriodRecordsRequest(PersonalLeaveListSchoolPeriodRecordsParam param) {
+        this();
+        setBizModel(param);
+    }
+
+    public PersonalLeaveListSchoolPeriodRecordsRequest() {
+        setServerUrl("https://openapi.seewo.com");
+        setPath("/seewo-yunban-api/personal-leave/list-school-period-records");
+        setHttpMethod("POST");
+    }
+
+    public Class<PersonalLeaveListSchoolPeriodRecordsResult> getResponseClass() {
+        return PersonalLeaveListSchoolPeriodRecordsResult.class;
+    }
+
+    public Class<PersonalLeaveListSchoolPeriodRecordsParam> getDomainClass() {
+        return PersonalLeaveListSchoolPeriodRecordsParam.class;
+    }
+}
+

+ 302 - 0
src/main/java/com/template/model/seewo/PersonalLeaveListSchoolPeriodRecordsResult.java

@@ -0,0 +1,302 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiResult;
+import com.seewo.open.sdk.HttpResponse;
+
+/**
+ * seewo-open API: 查询学校阶段内的请假记录
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class PersonalLeaveListSchoolPeriodRecordsResult extends OpenApiResult {
+
+    public PersonalLeaveListSchoolPeriodRecordsResult(HttpResponse response) {
+        super(response);
+    }
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private ResponseBody responseBody;
+
+
+    public ResponseBody getResponseBody() {
+        return this.responseBody;
+    }
+
+    public void setResponseBody(ResponseBody responseBody) {
+        this.responseBody = responseBody;
+    }
+
+    public static class ResponseBody {
+        /**
+         * code
+         */
+        private String code;
+        /**
+         * message
+         */
+        private String message;
+        /**
+         * data
+         */
+        private Data data;
+
+        public String getCode() {
+            return this.code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getMessage() {
+            return this.message;
+        }
+
+        public void setMessage(String message) {
+            this.message = message;
+        }
+
+        public Data getData() {
+            return this.data;
+        }
+
+        public void setData(Data data) {
+            this.data = data;
+        }
+
+    }
+
+    public static class Data {
+        /**
+         * 分页条数
+         */
+        private Integer pageSize;
+        /**
+         * 当前页
+         */
+        private Integer page;
+        /**
+         * 总条数
+         */
+        private Integer totalCount;
+        /**
+         * result
+         */
+        private List<Object> result;
+
+        public Integer getPageSize() {
+            return this.pageSize;
+        }
+
+        public void setPageSize(Integer pageSize) {
+            this.pageSize = pageSize;
+        }
+
+        public Integer getPage() {
+            return this.page;
+        }
+
+        public void setPage(Integer page) {
+            this.page = page;
+        }
+
+        public Integer getTotalCount() {
+            return this.totalCount;
+        }
+
+        public void setTotalCount(Integer totalCount) {
+            this.totalCount = totalCount;
+        }
+
+        public List<Object> getResult() {
+            return this.result;
+        }
+
+        public void setResult(List<Object> result) {
+            this.result = result;
+        }
+
+    }
+
+    public static class Object {
+        /**
+         * 请假记录的唯一ID
+         */
+        private String uid;
+        /**
+         * 请假人ID
+         */
+        private String userUid;
+        /**
+         * 请假人姓名
+         */
+        private String userName;
+        /**
+         * 请假类型:0事假,1病假
+         */
+        private Integer type;
+        /**
+         * 请假原因
+         */
+        private String reason;
+        /**
+         * 开始时间 yyyy-MM-dd HH:mm:ss
+         */
+        private String startTime;
+        /**
+         * 结束时间 yyyy-MM-dd HH:mm:ss
+         */
+        private String endTime;
+        /**
+         * 附件列表,最多5个
+         */
+        private List<String> attachments;
+        /**
+         * 发请人ID
+         */
+        private String applyUserUid;
+        /**
+         * 发请人名字
+         */
+        private String applyUserName;
+        /**
+         * 发请人手机号
+         */
+        private String applyUserPhone;
+        /**
+         * 发起时间 yyyy-MM-dd HH:mm:ss
+         */
+        private String createTime;
+        /**
+         * 请假审核状态:1未审核,2未通过,3已通过,4已撤销
+         */
+        private Integer leaveStatus;
+        /**
+         * 请假审核被拒绝理由
+         */
+        private String refuseReason;
+
+        public String getUid() {
+            return this.uid;
+        }
+
+        public void setUid(String uid) {
+            this.uid = uid;
+        }
+
+        public String getUserUid() {
+            return this.userUid;
+        }
+
+        public void setUserUid(String userUid) {
+            this.userUid = userUid;
+        }
+
+        public String getUserName() {
+            return this.userName;
+        }
+
+        public void setUserName(String userName) {
+            this.userName = userName;
+        }
+
+        public Integer getType() {
+            return this.type;
+        }
+
+        public void setType(Integer type) {
+            this.type = type;
+        }
+
+        public String getReason() {
+            return this.reason;
+        }
+
+        public void setReason(String reason) {
+            this.reason = reason;
+        }
+
+        public String getStartTime() {
+            return this.startTime;
+        }
+
+        public void setStartTime(String startTime) {
+            this.startTime = startTime;
+        }
+
+        public String getEndTime() {
+            return this.endTime;
+        }
+
+        public void setEndTime(String endTime) {
+            this.endTime = endTime;
+        }
+
+        public List<String> getAttachments() {
+            return this.attachments;
+        }
+
+        public void setAttachments(List<String> attachments) {
+            this.attachments = attachments;
+        }
+
+        public String getApplyUserUid() {
+            return this.applyUserUid;
+        }
+
+        public void setApplyUserUid(String applyUserUid) {
+            this.applyUserUid = applyUserUid;
+        }
+
+        public String getApplyUserName() {
+            return this.applyUserName;
+        }
+
+        public void setApplyUserName(String applyUserName) {
+            this.applyUserName = applyUserName;
+        }
+
+        public String getApplyUserPhone() {
+            return this.applyUserPhone;
+        }
+
+        public void setApplyUserPhone(String applyUserPhone) {
+            this.applyUserPhone = applyUserPhone;
+        }
+
+        public String getCreateTime() {
+            return this.createTime;
+        }
+
+        public void setCreateTime(String createTime) {
+            this.createTime = createTime;
+        }
+
+        public Integer getLeaveStatus() {
+            return this.leaveStatus;
+        }
+
+        public void setLeaveStatus(Integer leaveStatus) {
+            this.leaveStatus = leaveStatus;
+        }
+
+        public String getRefuseReason() {
+            return this.refuseReason;
+        }
+
+        public void setRefuseReason(String refuseReason) {
+            this.refuseReason = refuseReason;
+        }
+
+    }
+
+
+}
+

+ 283 - 0
src/main/java/com/template/model/seewo/StudentLeaveStudentLeaveRequestHandlerParam.java

@@ -0,0 +1,283 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+
+/**
+ * seewo-open API: 学生请假申请与查询api
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2024-1-4
+ */
+public class StudentLeaveStudentLeaveRequestHandlerParam extends OpenApiParam {
+
+
+    /**
+     * 请求体,MimeType为 application/json
+     */
+
+    private JSONRequestBody requestBody;
+
+
+    public JSONRequestBody getRequestBody() {
+        return this.requestBody;
+    }
+
+    public void setRequestBody(JSONRequestBody requestBody) {
+        this.requestBody = requestBody;
+    }
+
+    public static StudentLeaveStudentLeaveRequestHandlerParamBuilder builder(){
+        return new StudentLeaveStudentLeaveRequestHandlerParamBuilder();
+    }
+
+    public static class StudentLeaveStudentLeaveRequestHandlerParamBuilder{
+        private JSONRequestBody requestBody;
+
+        public StudentLeaveStudentLeaveRequestHandlerParamBuilder requestBody(JSONRequestBody requestBody){
+            this.requestBody = requestBody;
+            return this;
+        }
+
+        public StudentLeaveStudentLeaveRequestHandlerParam build(){
+            StudentLeaveStudentLeaveRequestHandlerParam param = new StudentLeaveStudentLeaveRequestHandlerParam();
+            param.setRequestBody(requestBody);
+            return param;
+        }
+    }
+
+    public static class JSONRequestBody {
+        /**
+         * 请求参数
+         */
+        private StudentLeaveQuery dto;
+
+        public StudentLeaveQuery getDto() {
+            return this.dto;
+        }
+
+        public void setDto(StudentLeaveQuery dto) {
+            this.dto = dto;
+        }
+
+
+        public static JSONRequestBodyBuilder builder(){
+            return new JSONRequestBodyBuilder();
+        }
+
+        public static class JSONRequestBodyBuilder{
+            private StudentLeaveQuery dto;
+
+            public JSONRequestBodyBuilder dto(StudentLeaveQuery dto){
+                this.dto = dto;
+                return this;
+            }
+
+            public JSONRequestBody build(){
+                JSONRequestBody param = new JSONRequestBody();
+                param.setDto(dto);
+                return param;
+            }
+        }
+    }
+
+    public static class StudentLeaveQuery {
+        /**
+         * 学校UID
+         */
+        private String schoolUid;
+        /**
+         * 学生ID
+         */
+        private String userId;
+        /**
+         * 开始日期
+         */
+        private String startDate;
+        /**
+         * 结束日期
+         */
+        private String endDate;
+        /**
+         * 开始时间
+         */
+        private String startTime;
+        /**
+         * 结束时间
+         */
+        private String endTime;
+        /**
+         * 请假类型:0事假,1病假
+         */
+        private Integer type;
+        /**
+         * 请假原因
+         */
+        private String reason;
+        /**
+         * 附件列表:url字符串列表
+         */
+        private List<String> attachments;
+        /**
+         * 申请请假applyForLeave;获取学校请假记录列表getSchoolPeriodLeaveRecords
+         */
+        private String method;
+
+        public String getSchoolUid() {
+            return this.schoolUid;
+        }
+
+        public void setSchoolUid(String schoolUid) {
+            this.schoolUid = schoolUid;
+        }
+
+        public String getUserId() {
+            return this.userId;
+        }
+
+        public void setUserId(String userId) {
+            this.userId = userId;
+        }
+
+        public String getStartDate() {
+            return this.startDate;
+        }
+
+        public void setStartDate(String startDate) {
+            this.startDate = startDate;
+        }
+
+        public String getEndDate() {
+            return this.endDate;
+        }
+
+        public void setEndDate(String endDate) {
+            this.endDate = endDate;
+        }
+
+        public String getStartTime() {
+            return this.startTime;
+        }
+
+        public void setStartTime(String startTime) {
+            this.startTime = startTime;
+        }
+
+        public String getEndTime() {
+            return this.endTime;
+        }
+
+        public void setEndTime(String endTime) {
+            this.endTime = endTime;
+        }
+
+        public Integer getType() {
+            return this.type;
+        }
+
+        public void setType(Integer type) {
+            this.type = type;
+        }
+
+        public String getReason() {
+            return this.reason;
+        }
+
+        public void setReason(String reason) {
+            this.reason = reason;
+        }
+
+        public List<String> getAttachments() {
+            return this.attachments;
+        }
+
+        public void setAttachments(List<String> attachments) {
+            this.attachments = attachments;
+        }
+
+        public String getMethod() {
+            return this.method;
+        }
+
+        public void setMethod(String method) {
+            this.method = method;
+        }
+
+
+        public static StudentLeaveQueryBuilder builder(){
+            return new StudentLeaveQueryBuilder();
+        }
+
+        public static class StudentLeaveQueryBuilder{
+            private String schoolUid;
+            private String userId;
+            private String startDate;
+            private String endDate;
+            private String startTime;
+            private String endTime;
+            private Integer type;
+            private String reason;
+            private List<String> attachments;
+            private String method;
+
+            public StudentLeaveQueryBuilder schoolUid(String schoolUid){
+                this.schoolUid = schoolUid;
+                return this;
+            }
+            public StudentLeaveQueryBuilder userId(String userId){
+                this.userId = userId;
+                return this;
+            }
+            public StudentLeaveQueryBuilder startDate(String startDate){
+                this.startDate = startDate;
+                return this;
+            }
+            public StudentLeaveQueryBuilder endDate(String endDate){
+                this.endDate = endDate;
+                return this;
+            }
+            public StudentLeaveQueryBuilder startTime(String startTime){
+                this.startTime = startTime;
+                return this;
+            }
+            public StudentLeaveQueryBuilder endTime(String endTime){
+                this.endTime = endTime;
+                return this;
+            }
+            public StudentLeaveQueryBuilder type(Integer type){
+                this.type = type;
+                return this;
+            }
+            public StudentLeaveQueryBuilder reason(String reason){
+                this.reason = reason;
+                return this;
+            }
+            public StudentLeaveQueryBuilder attachments(List<String> attachments){
+                this.attachments = attachments;
+                return this;
+            }
+            public StudentLeaveQueryBuilder method(String method){
+                this.method = method;
+                return this;
+            }
+
+            public StudentLeaveQuery build(){
+                StudentLeaveQuery param = new StudentLeaveQuery();
+                param.setSchoolUid(schoolUid);
+                param.setUserId(userId);
+                param.setStartDate(startDate);
+                param.setEndDate(endDate);
+                param.setStartTime(startTime);
+                param.setEndTime(endTime);
+                param.setType(type);
+                param.setReason(reason);
+                param.setAttachments(attachments);
+                param.setMethod(method);
+                return param;
+            }
+        }
+    }
+
+
+}

+ 33 - 0
src/main/java/com/template/model/seewo/StudentLeaveStudentLeaveRequestHandlerRequest.java

@@ -0,0 +1,33 @@
+package com.template.model.seewo;
+
+import com.seewo.open.sdk.OpenApiRequest;
+
+/**
+ * seewo-open API: 学生请假申请与查询api
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2024-1-4
+ */
+public class StudentLeaveStudentLeaveRequestHandlerRequest extends OpenApiRequest<StudentLeaveStudentLeaveRequestHandlerParam, StudentLeaveStudentLeaveRequestHandlerResult> {
+
+    public StudentLeaveStudentLeaveRequestHandlerRequest(StudentLeaveStudentLeaveRequestHandlerParam param) {
+        this();
+        setBizModel(param);
+    }
+
+    public StudentLeaveStudentLeaveRequestHandlerRequest() {
+        setServerUrl("https://openapi.seewo.com");
+        setPath("/mis-attendance-api/student-leave/student-leave-request-handler");
+        setHttpMethod("POST");
+    }
+
+    public Class<StudentLeaveStudentLeaveRequestHandlerResult> getResponseClass() {
+        return StudentLeaveStudentLeaveRequestHandlerResult.class;
+    }
+
+    public Class<StudentLeaveStudentLeaveRequestHandlerParam> getDomainClass() {
+        return StudentLeaveStudentLeaveRequestHandlerParam.class;
+    }
+}
+

+ 178 - 0
src/main/java/com/template/model/seewo/StudentLeaveStudentLeaveRequestHandlerResult.java

@@ -0,0 +1,178 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiResult;
+import com.seewo.open.sdk.HttpResponse;
+
+/**
+ * seewo-open API: 学生请假申请与查询api
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2024-1-4
+ */
+public class StudentLeaveStudentLeaveRequestHandlerResult extends OpenApiResult {
+
+    public StudentLeaveStudentLeaveRequestHandlerResult(HttpResponse response) {
+        super(response);
+    }
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private JSONResponseBody responseBody;
+
+
+    public JSONResponseBody getResponseBody() {
+        return this.responseBody;
+    }
+
+    public void setResponseBody(JSONResponseBody responseBody) {
+        this.responseBody = responseBody;
+    }
+
+    public static class JSONResponseBody {
+        /**
+         * 返回码
+         */
+        private String code;
+        /**
+         * 错误信息
+         */
+        private String message;
+        /**
+         * 业务数据
+         */
+        private List<StudentLeaveRecordResult> data;
+
+        public String getCode() {
+            return this.code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getMessage() {
+            return this.message;
+        }
+
+        public void setMessage(String message) {
+            this.message = message;
+        }
+
+        public List<StudentLeaveRecordResult> getData() {
+            return this.data;
+        }
+
+        public void setData(List<StudentLeaveRecordResult> data) {
+            this.data = data;
+        }
+
+    }
+
+    public static class StudentLeaveRecordResult {
+        /**
+         * 用户ID
+         */
+        private String userUid;
+        /**
+         * 学生姓名
+         */
+        private String userName;
+        /**
+         * 请假类型:0事假,1病假
+         */
+        private Integer type;
+        /**
+         * 请假原因
+         */
+        private String reason;
+        /**
+         * 开始时间
+         */
+        private String startTime;
+        /**
+         * 结束时间
+         */
+        private String endTime;
+        /**
+         * 附件列表
+         */
+        private List<String> attachments;
+        /**
+         * 请假申请时间
+         */
+        private String createTime;
+
+        public String getUserUid() {
+            return this.userUid;
+        }
+
+        public void setUserUid(String userUid) {
+            this.userUid = userUid;
+        }
+
+        public String getUserName() {
+            return this.userName;
+        }
+
+        public void setUserName(String userName) {
+            this.userName = userName;
+        }
+
+        public Integer getType() {
+            return this.type;
+        }
+
+        public void setType(Integer type) {
+            this.type = type;
+        }
+
+        public String getReason() {
+            return this.reason;
+        }
+
+        public void setReason(String reason) {
+            this.reason = reason;
+        }
+
+        public String getStartTime() {
+            return this.startTime;
+        }
+
+        public void setStartTime(String startTime) {
+            this.startTime = startTime;
+        }
+
+        public String getEndTime() {
+            return this.endTime;
+        }
+
+        public void setEndTime(String endTime) {
+            this.endTime = endTime;
+        }
+
+        public List<String> getAttachments() {
+            return this.attachments;
+        }
+
+        public void setAttachments(List<String> attachments) {
+            this.attachments = attachments;
+        }
+
+        public String getCreateTime() {
+            return this.createTime;
+        }
+
+        public void setCreateTime(String createTime) {
+            this.createTime = createTime;
+        }
+
+    }
+
+
+}
+

+ 318 - 0
src/main/java/com/template/model/seewo/StudentServiceBatchSaveClassStudentsParam.java

@@ -0,0 +1,318 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.ParameterPosition;
+
+/**
+ * seewo-open API: 批量添加班级学生
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class StudentServiceBatchSaveClassStudentsParam extends OpenApiParam {
+
+
+    /**
+     * 请求体,MimeType为 application/json
+     */
+
+    private JSONRequestBody requestBody;
+
+
+    public JSONRequestBody getRequestBody() {
+        return this.requestBody;
+    }
+
+    public void setRequestBody(JSONRequestBody requestBody) {
+        this.requestBody = requestBody;
+    }
+
+    public static StudentServiceBatchSaveClassStudentsParamBuilder builder(){
+        return new StudentServiceBatchSaveClassStudentsParamBuilder();
+    }
+
+    public static class StudentServiceBatchSaveClassStudentsParamBuilder{
+        private JSONRequestBody requestBody;
+
+        public StudentServiceBatchSaveClassStudentsParamBuilder requestBody(JSONRequestBody requestBody){
+            this.requestBody = requestBody;
+            return this;
+        }
+
+        public StudentServiceBatchSaveClassStudentsParam build(){
+            StudentServiceBatchSaveClassStudentsParam param = new StudentServiceBatchSaveClassStudentsParam();
+            param.setRequestBody(requestBody);
+            return param;
+        }
+    }
+
+    public static class JSONRequestBody {
+        /**
+         * 查询条件
+         */
+        private StudentSaveQuery query;
+
+        public StudentSaveQuery getQuery() {
+            return this.query;
+        }
+
+        public void setQuery(StudentSaveQuery query) {
+            this.query = query;
+        }
+
+
+        public static JSONRequestBodyBuilder builder(){
+            return new JSONRequestBodyBuilder();
+        }
+
+        public static class JSONRequestBodyBuilder{
+            private StudentSaveQuery query;
+
+            public JSONRequestBodyBuilder query(StudentSaveQuery query){
+                this.query = query;
+                return this;
+            }
+
+            public JSONRequestBody build(){
+                JSONRequestBody param = new JSONRequestBody();
+                param.setQuery(query);
+                return param;
+            }
+        }
+    }
+
+    public static class StudentSaveQuery {
+        /**
+         *  appId
+         */
+        private String appId;
+        /**
+         * 希沃学校ID
+         */
+        private String schoolUid;
+        /**
+         *  希沃班级ID
+         */
+        private String classUid;
+        /**
+         *  学生列表
+         */
+        private List<StudentInfo> students;
+        /**
+         *  是否删除旧学生再保存
+         */
+        private boolean inPlaceOld;
+
+        public String getAppId() {
+            return this.appId;
+        }
+
+        public void setAppId(String appId) {
+            this.appId = appId;
+        }
+
+        public String getSchoolUid() {
+            return this.schoolUid;
+        }
+
+        public void setSchoolUid(String schoolUid) {
+            this.schoolUid = schoolUid;
+        }
+
+        public String getClassUid() {
+            return this.classUid;
+        }
+
+        public void setClassUid(String classUid) {
+            this.classUid = classUid;
+        }
+
+        public List<StudentInfo> getStudents() {
+            return this.students;
+        }
+
+        public void setStudents(List<StudentInfo> students) {
+            this.students = students;
+        }
+
+        public boolean getInPlaceOld() {
+            return this.inPlaceOld;
+        }
+
+        public void setInPlaceOld(boolean inPlaceOld) {
+            this.inPlaceOld = inPlaceOld;
+        }
+
+
+        public static StudentSaveQueryBuilder builder(){
+            return new StudentSaveQueryBuilder();
+        }
+
+        public static class StudentSaveQueryBuilder{
+            private String appId;
+            private String schoolUid;
+            private String classUid;
+            private List<StudentInfo> students;
+            private boolean inPlaceOld;
+
+            public StudentSaveQueryBuilder appId(String appId){
+                this.appId = appId;
+                return this;
+            }
+            public StudentSaveQueryBuilder schoolUid(String schoolUid){
+                this.schoolUid = schoolUid;
+                return this;
+            }
+            public StudentSaveQueryBuilder classUid(String classUid){
+                this.classUid = classUid;
+                return this;
+            }
+            public StudentSaveQueryBuilder students(List<StudentInfo> students){
+                this.students = students;
+                return this;
+            }
+            public StudentSaveQueryBuilder inPlaceOld(boolean inPlaceOld){
+                this.inPlaceOld = inPlaceOld;
+                return this;
+            }
+
+            public StudentSaveQuery build(){
+                StudentSaveQuery param = new StudentSaveQuery();
+                param.setAppId(appId);
+                param.setSchoolUid(schoolUid);
+                param.setClassUid(classUid);
+                param.setStudents(students);
+                param.setInPlaceOld(inPlaceOld);
+                return param;
+            }
+        }
+    }
+
+    public static class StudentInfo {
+        /**
+         * 姓名
+         */
+        private String studentName;
+        /**
+         * 学号
+         */
+        private String studentCode;
+        /**
+         *  性别 1男2女
+         */
+        private Integer gender;
+        /**
+         *  一卡通卡号
+         */
+        private String cardNo;
+        /**
+         * 手机号
+         */
+        private String phone;
+
+        public String getStudentName() {
+            return this.studentName;
+        }
+
+        public void setStudentName(String studentName) {
+            this.studentName = studentName;
+        }
+
+        public String getStudentCode() {
+            return this.studentCode;
+        }
+
+        public void setStudentCode(String studentCode) {
+            this.studentCode = studentCode;
+        }
+
+        public Integer getGender() {
+            return this.gender;
+        }
+
+        public void setGender(Integer gender) {
+            this.gender = gender;
+        }
+
+        public String getCardNo() {
+            return this.cardNo;
+        }
+
+        public void setCardNo(String cardNo) {
+            this.cardNo = cardNo;
+        }
+
+        public String getPhone() {
+            return this.phone;
+        }
+
+        public void setPhone(String phone) {
+            this.phone = phone;
+        }
+
+
+        public static StudentInfoBuilder builder(){
+            return new StudentInfoBuilder();
+        }
+
+        public static class StudentInfoBuilder{
+            private String studentName;
+            private String studentCode;
+            private Integer gender;
+            private String cardNo;
+            private String phone;
+
+            public StudentInfoBuilder studentName(String studentName){
+                this.studentName = studentName;
+                return this;
+            }
+            public StudentInfoBuilder studentCode(String studentCode){
+                this.studentCode = studentCode;
+                return this;
+            }
+            public StudentInfoBuilder gender(Integer gender){
+                this.gender = gender;
+                return this;
+            }
+            public StudentInfoBuilder cardNo(String cardNo){
+                this.cardNo = cardNo;
+                return this;
+            }
+            public StudentInfoBuilder phone(String phone){
+                this.phone = phone;
+                return this;
+            }
+
+            public StudentInfo build(){
+                StudentInfo param = new StudentInfo();
+                param.setStudentName(studentName);
+                param.setStudentCode(studentCode);
+                param.setGender(gender);
+                param.setCardNo(cardNo);
+                param.setPhone(phone);
+                return param;
+            }
+        }
+    }
+
+    public static class Boolean {
+
+
+        public static BooleanBuilder builder(){
+            return new BooleanBuilder();
+        }
+
+        public static class BooleanBuilder{
+
+
+            public Boolean build(){
+                Boolean param = new Boolean();
+                return param;
+            }
+        }
+    }
+
+
+}

+ 35 - 0
src/main/java/com/template/model/seewo/StudentServiceBatchSaveClassStudentsRequest.java

@@ -0,0 +1,35 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.OpenApiRequest;
+
+/**
+ * seewo-open API: 批量添加班级学生
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class StudentServiceBatchSaveClassStudentsRequest extends OpenApiRequest<StudentServiceBatchSaveClassStudentsParam, StudentServiceBatchSaveClassStudentsResult> {
+
+    public StudentServiceBatchSaveClassStudentsRequest(StudentServiceBatchSaveClassStudentsParam param) {
+        this();
+        setBizModel(param);
+    }
+
+    public StudentServiceBatchSaveClassStudentsRequest() {
+        setServerUrl("https://openapi.seewo.com");
+        setPath("/seewo-yunban-api/student-service/batch-save-class-students");
+        setHttpMethod("POST");
+    }
+
+    public Class<StudentServiceBatchSaveClassStudentsResult> getResponseClass() {
+        return StudentServiceBatchSaveClassStudentsResult.class;
+    }
+
+    public Class<StudentServiceBatchSaveClassStudentsParam> getDomainClass() {
+        return StudentServiceBatchSaveClassStudentsParam.class;
+    }
+}
+

+ 206 - 0
src/main/java/com/template/model/seewo/StudentServiceBatchSaveClassStudentsResult.java

@@ -0,0 +1,206 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiResult;
+import com.seewo.open.sdk.HttpResponse;
+
+/**
+ * seewo-open API: 批量添加班级学生
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class StudentServiceBatchSaveClassStudentsResult extends OpenApiResult {
+
+    public StudentServiceBatchSaveClassStudentsResult(HttpResponse response) {
+        super(response);
+    }
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private JSONResponseBody responseBody;
+
+
+    public JSONResponseBody getResponseBody() {
+        return this.responseBody;
+    }
+
+    public void setResponseBody(JSONResponseBody responseBody) {
+        this.responseBody = responseBody;
+    }
+
+    public static class JSONResponseBody {
+        /**
+         *
+         */
+        private String code;
+        /**
+         *
+         */
+        private String message;
+        /**
+         *
+         */
+        private List<StudentInfoDto> data;
+
+        public String getCode() {
+            return this.code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getMessage() {
+            return this.message;
+        }
+
+        public void setMessage(String message) {
+            this.message = message;
+        }
+
+        public List<StudentInfoDto> getData() {
+            return this.data;
+        }
+
+        public void setData(List<StudentInfoDto> data) {
+            this.data = data;
+        }
+
+    }
+
+    public static class StudentInfoDto {
+        /**
+         *  用户ID
+         */
+        private String userUid;
+        /**
+         *  用户名
+         */
+        private String userName;
+        /**
+         *  学号
+         */
+        private String studentCode;
+        /**
+         *  性别
+         */
+        private Integer gender;
+        /**
+         *  头像
+         */
+        private String photoUrl;
+        /**
+         *  卡号
+         */
+        private String cardId;
+        /**
+         *  家长信息
+         */
+        private List<ParentInfoDto> parents;
+
+        public String getUserUid() {
+            return this.userUid;
+        }
+
+        public void setUserUid(String userUid) {
+            this.userUid = userUid;
+        }
+
+        public String getUserName() {
+            return this.userName;
+        }
+
+        public void setUserName(String userName) {
+            this.userName = userName;
+        }
+
+        public String getStudentCode() {
+            return this.studentCode;
+        }
+
+        public void setStudentCode(String studentCode) {
+            this.studentCode = studentCode;
+        }
+
+        public Integer getGender() {
+            return this.gender;
+        }
+
+        public void setGender(Integer gender) {
+            this.gender = gender;
+        }
+
+        public String getPhotoUrl() {
+            return this.photoUrl;
+        }
+
+        public void setPhotoUrl(String photoUrl) {
+            this.photoUrl = photoUrl;
+        }
+
+        public String getCardId() {
+            return this.cardId;
+        }
+
+        public void setCardId(String cardId) {
+            this.cardId = cardId;
+        }
+
+        public List<ParentInfoDto> getParents() {
+            return this.parents;
+        }
+
+        public void setParents(List<ParentInfoDto> parents) {
+            this.parents = parents;
+        }
+
+    }
+
+    public static class ParentInfoDto {
+        /**
+         *  家长名
+         */
+        private String name;
+        /**
+         *  家长号码
+         */
+        private String phone;
+        /**
+         *
+         */
+        private Integer index;
+
+        public String getName() {
+            return this.name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getPhone() {
+            return this.phone;
+        }
+
+        public void setPhone(String phone) {
+            this.phone = phone;
+        }
+
+        public Integer getIndex() {
+            return this.index;
+        }
+
+        public void setIndex(Integer index) {
+            this.index = index;
+        }
+
+    }
+
+
+}
+

+ 354 - 0
src/main/java/com/template/model/seewo/StudentServiceUpdateStudentInfoParam.java

@@ -0,0 +1,354 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.ParameterPosition;
+
+/**
+ * seewo-open API: 更新学生信息
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class StudentServiceUpdateStudentInfoParam extends OpenApiParam {
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private RequestBody requestBody;
+
+
+    public RequestBody getRequestBody() {
+        return this.requestBody;
+    }
+
+    public void setRequestBody(RequestBody requestBody) {
+        this.requestBody = requestBody;
+    }
+
+    public static StudentServiceUpdateStudentInfoParamBuilder builder(){
+        return new StudentServiceUpdateStudentInfoParamBuilder();
+    }
+
+    public static class StudentServiceUpdateStudentInfoParamBuilder{
+        private RequestBody requestBody;
+
+        public StudentServiceUpdateStudentInfoParamBuilder requestBody(RequestBody requestBody){
+            this.requestBody = requestBody;
+            return this;
+        }
+
+        public StudentServiceUpdateStudentInfoParam build(){
+            StudentServiceUpdateStudentInfoParam param = new StudentServiceUpdateStudentInfoParam();
+            param.setRequestBody(requestBody);
+            return param;
+        }
+    }
+
+    public static class RequestBody {
+        /**
+         * query
+         */
+        private Query query;
+
+        public Query getQuery() {
+            return this.query;
+        }
+
+        public void setQuery(Query query) {
+            this.query = query;
+        }
+
+
+        public static RequestBodyBuilder builder(){
+            return new RequestBodyBuilder();
+        }
+
+        public static class RequestBodyBuilder{
+            private Query query;
+
+            public RequestBodyBuilder query(Query query){
+                this.query = query;
+                return this;
+            }
+
+            public RequestBody build(){
+                RequestBody param = new RequestBody();
+                param.setQuery(query);
+                return param;
+            }
+        }
+    }
+
+    public static class Query {
+        /**
+         * appId
+         */
+        private String appId;
+        /**
+         * schoolUid
+         */
+        private String schoolUid;
+        /**
+         * studentUid
+         */
+        private String studentUid;
+        /**
+         * studentCode
+         */
+        private String studentCode;
+        /**
+         * studentName
+         */
+        private String studentName;
+        /**
+         * cards
+         */
+        private List<CardsItem> cards;
+        /**
+         * parents
+         */
+        private List<ParentsItem> parents;
+
+        public String getAppId() {
+            return this.appId;
+        }
+
+        public void setAppId(String appId) {
+            this.appId = appId;
+        }
+
+        public String getSchoolUid() {
+            return this.schoolUid;
+        }
+
+        public void setSchoolUid(String schoolUid) {
+            this.schoolUid = schoolUid;
+        }
+
+        public String getStudentUid() {
+            return this.studentUid;
+        }
+
+        public void setStudentUid(String studentUid) {
+            this.studentUid = studentUid;
+        }
+
+        public String getStudentCode() {
+            return this.studentCode;
+        }
+
+        public void setStudentCode(String studentCode) {
+            this.studentCode = studentCode;
+        }
+
+        public String getStudentName() {
+            return this.studentName;
+        }
+
+        public void setStudentName(String studentName) {
+            this.studentName = studentName;
+        }
+
+        public List<CardsItem> getCards() {
+            return this.cards;
+        }
+
+        public void setCards(List<CardsItem> cards) {
+            this.cards = cards;
+        }
+
+        public List<ParentsItem> getParents() {
+            return this.parents;
+        }
+
+        public void setParents(List<ParentsItem> parents) {
+            this.parents = parents;
+        }
+
+
+        public static QueryBuilder builder(){
+            return new QueryBuilder();
+        }
+
+        public static class QueryBuilder{
+            private String appId;
+            private String schoolUid;
+            private String studentUid;
+            private String studentCode;
+            private String studentName;
+            private List<CardsItem> cards;
+            private List<ParentsItem> parents;
+
+            public QueryBuilder appId(String appId){
+                this.appId = appId;
+                return this;
+            }
+            public QueryBuilder schoolUid(String schoolUid){
+                this.schoolUid = schoolUid;
+                return this;
+            }
+            public QueryBuilder studentUid(String studentUid){
+                this.studentUid = studentUid;
+                return this;
+            }
+            public QueryBuilder studentCode(String studentCode){
+                this.studentCode = studentCode;
+                return this;
+            }
+            public QueryBuilder studentName(String studentName){
+                this.studentName = studentName;
+                return this;
+            }
+            public QueryBuilder cards(List<CardsItem> cards){
+                this.cards = cards;
+                return this;
+            }
+            public QueryBuilder parents(List<ParentsItem> parents){
+                this.parents = parents;
+                return this;
+            }
+
+            public Query build(){
+                Query param = new Query();
+                param.setAppId(appId);
+                param.setSchoolUid(schoolUid);
+                param.setStudentUid(studentUid);
+                param.setStudentCode(studentCode);
+                param.setStudentName(studentName);
+                param.setCards(cards);
+                param.setParents(parents);
+                return param;
+            }
+        }
+    }
+
+    public static class CardsItem {
+        /**
+         * type
+         */
+        private Integer type;
+        /**
+         * cardId
+         */
+        private String cardId;
+
+        public Integer getType() {
+            return this.type;
+        }
+
+        public void setType(Integer type) {
+            this.type = type;
+        }
+
+        public String getCardId() {
+            return this.cardId;
+        }
+
+        public void setCardId(String cardId) {
+            this.cardId = cardId;
+        }
+
+
+        public static CardsItemBuilder builder(){
+            return new CardsItemBuilder();
+        }
+
+        public static class CardsItemBuilder{
+            private Integer type;
+            private String cardId;
+
+            public CardsItemBuilder type(Integer type){
+                this.type = type;
+                return this;
+            }
+            public CardsItemBuilder cardId(String cardId){
+                this.cardId = cardId;
+                return this;
+            }
+
+            public CardsItem build(){
+                CardsItem param = new CardsItem();
+                param.setType(type);
+                param.setCardId(cardId);
+                return param;
+            }
+        }
+    }
+
+    public static class ParentsItem {
+        /**
+         * showIndex
+         */
+        private Integer index;
+        /**
+         * parentName
+         */
+        private String name;
+        /**
+         * parentPhone
+         */
+        private String phone;
+
+        public Integer getIndex() {
+            return this.index;
+        }
+
+        public void setIndex(Integer index) {
+            this.index = index;
+        }
+
+        public String getName() {
+            return this.name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getPhone() {
+            return this.phone;
+        }
+
+        public void setPhone(String phone) {
+            this.phone = phone;
+        }
+
+
+        public static ParentsItemBuilder builder(){
+            return new ParentsItemBuilder();
+        }
+
+        public static class ParentsItemBuilder{
+            private Integer index;
+            private String name;
+            private String phone;
+
+            public ParentsItemBuilder index(Integer index){
+                this.index = index;
+                return this;
+            }
+            public ParentsItemBuilder name(String name){
+                this.name = name;
+                return this;
+            }
+            public ParentsItemBuilder phone(String phone){
+                this.phone = phone;
+                return this;
+            }
+
+            public ParentsItem build(){
+                ParentsItem param = new ParentsItem();
+                param.setIndex(index);
+                param.setName(name);
+                param.setPhone(phone);
+                return param;
+            }
+        }
+    }
+
+
+}

+ 35 - 0
src/main/java/com/template/model/seewo/StudentServiceUpdateStudentInfoRequest.java

@@ -0,0 +1,35 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.OpenApiRequest;
+
+/**
+ * seewo-open API: 更新学生信息
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class StudentServiceUpdateStudentInfoRequest extends OpenApiRequest<StudentServiceUpdateStudentInfoParam, StudentServiceUpdateStudentInfoResult> {
+
+    public StudentServiceUpdateStudentInfoRequest(StudentServiceUpdateStudentInfoParam param) {
+        this();
+        setBizModel(param);
+    }
+
+    public StudentServiceUpdateStudentInfoRequest() {
+        setServerUrl("https://openapi.seewo.com");
+        setPath("/seewo-yunban-api/student-service/update-student-info");
+        setHttpMethod("POST");
+    }
+
+    public Class<StudentServiceUpdateStudentInfoResult> getResponseClass() {
+        return StudentServiceUpdateStudentInfoResult.class;
+    }
+
+    public Class<StudentServiceUpdateStudentInfoParam> getDomainClass() {
+        return StudentServiceUpdateStudentInfoParam.class;
+    }
+}
+

+ 66 - 0
src/main/java/com/template/model/seewo/StudentServiceUpdateStudentInfoResult.java

@@ -0,0 +1,66 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiResult;
+import com.seewo.open.sdk.HttpResponse;
+
+/**
+ * seewo-open API: 更新学生信息
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class StudentServiceUpdateStudentInfoResult extends OpenApiResult {
+
+    public StudentServiceUpdateStudentInfoResult(HttpResponse response) {
+        super(response);
+    }
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private ResponseBody responseBody;
+
+
+    public ResponseBody getResponseBody() {
+        return this.responseBody;
+    }
+
+    public void setResponseBody(ResponseBody responseBody) {
+        this.responseBody = responseBody;
+    }
+
+    public static class ResponseBody {
+        /**
+         * code
+         */
+        private String code;
+        /**
+         * message
+         */
+        private String message;
+
+        public String getCode() {
+            return this.code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getMessage() {
+            return this.message;
+        }
+
+        public void setMessage(String message) {
+            this.message = message;
+        }
+
+    }
+
+
+}
+

+ 267 - 0
src/main/java/com/template/model/seewo/TeacherServiceBatchSaveOrUpdateTeacherParam.java

@@ -0,0 +1,267 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.ParameterPosition;
+
+/**
+ * seewo-open API: 批量添加或更新老师
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class TeacherServiceBatchSaveOrUpdateTeacherParam extends OpenApiParam {
+
+
+    /**
+     * 请求体,MimeType为 application/json
+     */
+
+    private JSONRequestBody requestBody;
+
+
+    public JSONRequestBody getRequestBody() {
+        return this.requestBody;
+    }
+
+    public void setRequestBody(JSONRequestBody requestBody) {
+        this.requestBody = requestBody;
+    }
+
+    public static TeacherServiceBatchSaveOrUpdateTeacherParamBuilder builder(){
+        return new TeacherServiceBatchSaveOrUpdateTeacherParamBuilder();
+    }
+
+    public static class TeacherServiceBatchSaveOrUpdateTeacherParamBuilder{
+        private JSONRequestBody requestBody;
+
+        public TeacherServiceBatchSaveOrUpdateTeacherParamBuilder requestBody(JSONRequestBody requestBody){
+            this.requestBody = requestBody;
+            return this;
+        }
+
+        public TeacherServiceBatchSaveOrUpdateTeacherParam build(){
+            TeacherServiceBatchSaveOrUpdateTeacherParam param = new TeacherServiceBatchSaveOrUpdateTeacherParam();
+            param.setRequestBody(requestBody);
+            return param;
+        }
+    }
+
+    public static class JSONRequestBody {
+        /**
+         * 老师信息
+         */
+        private SaveOrUpdateTeacherBatchQuery query;
+
+        public SaveOrUpdateTeacherBatchQuery getQuery() {
+            return this.query;
+        }
+
+        public void setQuery(SaveOrUpdateTeacherBatchQuery query) {
+            this.query = query;
+        }
+
+
+        public static JSONRequestBodyBuilder builder(){
+            return new JSONRequestBodyBuilder();
+        }
+
+        public static class JSONRequestBodyBuilder{
+            private SaveOrUpdateTeacherBatchQuery query;
+
+            public JSONRequestBodyBuilder query(SaveOrUpdateTeacherBatchQuery query){
+                this.query = query;
+                return this;
+            }
+
+            public JSONRequestBody build(){
+                JSONRequestBody param = new JSONRequestBody();
+                param.setQuery(query);
+                return param;
+            }
+        }
+    }
+
+    public static class SaveOrUpdateTeacherBatchQuery {
+        /**
+         * appId
+         */
+        private String appId;
+        /**
+         *  希沃学校uid
+         */
+        private String schoolUid;
+        /**
+         *  老师列表
+         */
+        private List<SaveOrUpdateTeacherQuery> teachers;
+
+        public String getAppId() {
+            return this.appId;
+        }
+
+        public void setAppId(String appId) {
+            this.appId = appId;
+        }
+
+        public String getSchoolUid() {
+            return this.schoolUid;
+        }
+
+        public void setSchoolUid(String schoolUid) {
+            this.schoolUid = schoolUid;
+        }
+
+        public List<SaveOrUpdateTeacherQuery> getTeachers() {
+            return this.teachers;
+        }
+
+        public void setTeachers(List<SaveOrUpdateTeacherQuery> teachers) {
+            this.teachers = teachers;
+        }
+
+
+        public static SaveOrUpdateTeacherBatchQueryBuilder builder(){
+            return new SaveOrUpdateTeacherBatchQueryBuilder();
+        }
+
+        public static class SaveOrUpdateTeacherBatchQueryBuilder{
+            private String appId;
+            private String schoolUid;
+            private List<SaveOrUpdateTeacherQuery> teachers;
+
+            public SaveOrUpdateTeacherBatchQueryBuilder appId(String appId){
+                this.appId = appId;
+                return this;
+            }
+            public SaveOrUpdateTeacherBatchQueryBuilder schoolUid(String schoolUid){
+                this.schoolUid = schoolUid;
+                return this;
+            }
+            public SaveOrUpdateTeacherBatchQueryBuilder teachers(List<SaveOrUpdateTeacherQuery> teachers){
+                this.teachers = teachers;
+                return this;
+            }
+
+            public SaveOrUpdateTeacherBatchQuery build(){
+                SaveOrUpdateTeacherBatchQuery param = new SaveOrUpdateTeacherBatchQuery();
+                param.setAppId(appId);
+                param.setSchoolUid(schoolUid);
+                param.setTeachers(teachers);
+                return param;
+            }
+        }
+    }
+
+    public static class SaveOrUpdateTeacherQuery {
+        /**
+         *  用户账号(手机号/邮箱)
+         */
+        private String account;
+        /**
+         *  用户名字
+         */
+        private String name;
+        /**
+         * 账号类型
+phone - 手机号
+email - 邮箱
+         */
+        private String accountType;
+        /**
+         *  教师工号
+         */
+        private String teacherCode;
+        /**
+         *
+         */
+        private String photoUrl;
+
+        public String getAccount() {
+            return this.account;
+        }
+
+        public void setAccount(String account) {
+            this.account = account;
+        }
+
+        public String getName() {
+            return this.name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getAccountType() {
+            return this.accountType;
+        }
+
+        public void setAccountType(String accountType) {
+            this.accountType = accountType;
+        }
+
+        public String getTeacherCode() {
+            return this.teacherCode;
+        }
+
+        public void setTeacherCode(String teacherCode) {
+            this.teacherCode = teacherCode;
+        }
+
+        public String getPhotoUrl() {
+            return this.photoUrl;
+        }
+
+        public void setPhotoUrl(String photoUrl) {
+            this.photoUrl = photoUrl;
+        }
+
+
+        public static SaveOrUpdateTeacherQueryBuilder builder(){
+            return new SaveOrUpdateTeacherQueryBuilder();
+        }
+
+        public static class SaveOrUpdateTeacherQueryBuilder{
+            private String account;
+            private String name;
+            private String accountType;
+            private String teacherCode;
+            private String photoUrl;
+
+            public SaveOrUpdateTeacherQueryBuilder account(String account){
+                this.account = account;
+                return this;
+            }
+            public SaveOrUpdateTeacherQueryBuilder name(String name){
+                this.name = name;
+                return this;
+            }
+            public SaveOrUpdateTeacherQueryBuilder accountType(String accountType){
+                this.accountType = accountType;
+                return this;
+            }
+            public SaveOrUpdateTeacherQueryBuilder teacherCode(String teacherCode){
+                this.teacherCode = teacherCode;
+                return this;
+            }
+            public SaveOrUpdateTeacherQueryBuilder photoUrl(String photoUrl){
+                this.photoUrl = photoUrl;
+                return this;
+            }
+
+            public SaveOrUpdateTeacherQuery build(){
+                SaveOrUpdateTeacherQuery param = new SaveOrUpdateTeacherQuery();
+                param.setAccount(account);
+                param.setName(name);
+                param.setAccountType(accountType);
+                param.setTeacherCode(teacherCode);
+                param.setPhotoUrl(photoUrl);
+                return param;
+            }
+        }
+    }
+
+
+}

+ 35 - 0
src/main/java/com/template/model/seewo/TeacherServiceBatchSaveOrUpdateTeacherRequest.java

@@ -0,0 +1,35 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.OpenApiRequest;
+
+/**
+ * seewo-open API: 批量添加或更新老师
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class TeacherServiceBatchSaveOrUpdateTeacherRequest extends OpenApiRequest<TeacherServiceBatchSaveOrUpdateTeacherParam, TeacherServiceBatchSaveOrUpdateTeacherResult> {
+
+    public TeacherServiceBatchSaveOrUpdateTeacherRequest(TeacherServiceBatchSaveOrUpdateTeacherParam param) {
+        this();
+        setBizModel(param);
+    }
+
+    public TeacherServiceBatchSaveOrUpdateTeacherRequest() {
+        setServerUrl("https://openapi.seewo.com");
+        setPath("/seewo-yunban-api/teacher-service/batch-save-or-update-teacher");
+        setHttpMethod("POST");
+    }
+
+    public Class<TeacherServiceBatchSaveOrUpdateTeacherResult> getResponseClass() {
+        return TeacherServiceBatchSaveOrUpdateTeacherResult.class;
+    }
+
+    public Class<TeacherServiceBatchSaveOrUpdateTeacherParam> getDomainClass() {
+        return TeacherServiceBatchSaveOrUpdateTeacherParam.class;
+    }
+}
+

+ 154 - 0
src/main/java/com/template/model/seewo/TeacherServiceBatchSaveOrUpdateTeacherResult.java

@@ -0,0 +1,154 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiResult;
+import com.seewo.open.sdk.HttpResponse;
+
+/**
+ * seewo-open API: 批量添加或更新老师
+ *
+ *
+ * @author auto create
+ * @since 2.0.1 2023-12-19
+ */
+public class TeacherServiceBatchSaveOrUpdateTeacherResult extends OpenApiResult {
+
+    public TeacherServiceBatchSaveOrUpdateTeacherResult(HttpResponse response) {
+        super(response);
+    }
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private JSONResponseBody responseBody;
+
+
+    public JSONResponseBody getResponseBody() {
+        return this.responseBody;
+    }
+
+    public void setResponseBody(JSONResponseBody responseBody) {
+        this.responseBody = responseBody;
+    }
+
+    public static class JSONResponseBody {
+        /**
+         *
+         */
+        private String code;
+        /**
+         *
+         */
+        private String message;
+        /**
+         *
+         */
+        private List<TeacherBaseInfoDto> data;
+
+        public String getCode() {
+            return this.code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getMessage() {
+            return this.message;
+        }
+
+        public void setMessage(String message) {
+            this.message = message;
+        }
+
+        public List<TeacherBaseInfoDto> getData() {
+            return this.data;
+        }
+
+        public void setData(List<TeacherBaseInfoDto> data) {
+            this.data = data;
+        }
+
+    }
+
+    public static class TeacherBaseInfoDto {
+        /**
+         *  用户ID
+         */
+        private String uid;
+        /**
+         *  手机帐号
+         */
+        private String phone;
+        /**
+         *  教师工号
+         */
+        private String teacherCode;
+        /**
+         *  邮箱
+         */
+        private String email;
+        /**
+         *  1男,2女
+         */
+        private String gender;
+        /**
+         *  用户名
+         */
+        private String realName;
+
+        public String getUid() {
+            return this.uid;
+        }
+
+        public void setUid(String uid) {
+            this.uid = uid;
+        }
+
+        public String getPhone() {
+            return this.phone;
+        }
+
+        public void setPhone(String phone) {
+            this.phone = phone;
+        }
+
+        public String getTeacherCode() {
+            return this.teacherCode;
+        }
+
+        public void setTeacherCode(String teacherCode) {
+            this.teacherCode = teacherCode;
+        }
+
+        public String getEmail() {
+            return this.email;
+        }
+
+        public void setEmail(String email) {
+            this.email = email;
+        }
+
+        public String getGender() {
+            return this.gender;
+        }
+
+        public void setGender(String gender) {
+            this.gender = gender;
+        }
+
+        public String getRealName() {
+            return this.realName;
+        }
+
+        public void setRealName(String realName) {
+            this.realName = realName;
+        }
+
+    }
+
+
+}
+

+ 16 - 0
src/main/java/com/template/model/vo/BsClassNoVo.java

@@ -0,0 +1,16 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/5 星期五 14:53
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class BsClassNoVo {
+
+    private String classtab_no;
+
+}

+ 26 - 0
src/main/java/com/template/model/vo/BsClassVo.java

@@ -0,0 +1,26 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/5 星期五 14:53
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class BsClassVo {
+
+    private String resultcode;
+
+    private String msg;
+
+    private String appid;
+
+    private String timestamp;
+
+    private String data;
+
+    private String sign;
+
+}

+ 17 - 0
src/main/java/com/template/model/vo/BsDepartmentNoVo.java

@@ -0,0 +1,17 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/5 星期五 14:53
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class BsDepartmentNoVo {
+
+    //部门编号
+    private String department_no;
+
+}

+ 26 - 0
src/main/java/com/template/model/vo/BsDepartmentVo.java

@@ -0,0 +1,26 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/5 星期五 14:53
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class BsDepartmentVo {
+
+    private String resultcode;
+
+    private String msg;
+
+    private String appid;
+
+    private String timestamp;
+
+    private String data;
+
+    private String sign;
+
+}

+ 16 - 0
src/main/java/com/template/model/vo/BsGradeNoVo.java

@@ -0,0 +1,16 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/5 星期五 14:53
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class BsGradeNoVo {
+
+    private String grade_no;
+
+}

+ 26 - 0
src/main/java/com/template/model/vo/BsGradeVo.java

@@ -0,0 +1,26 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/5 星期五 14:53
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class BsGradeVo {
+
+    private String resultcode;
+
+    private String msg;
+
+    private String appid;
+
+    private String timestamp;
+
+    private String data;
+
+    private String sign;
+
+}

+ 19 - 0
src/main/java/com/template/model/vo/BsStaffNoVo.java

@@ -0,0 +1,19 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/5 星期五 14:53
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class BsStaffNoVo {
+
+    /**
+     * 员工编号
+     */
+    private String staff_no;
+
+}

+ 26 - 0
src/main/java/com/template/model/vo/BsStaffVo.java

@@ -0,0 +1,26 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/5 星期五 14:53
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class BsStaffVo {
+
+    private String resultcode;
+
+    private String msg;
+
+    private String appid;
+
+    private String timestamp;
+
+    private String data;
+
+    private String sign;
+
+}

+ 16 - 0
src/main/java/com/template/model/vo/BsStudentNoVo.java

@@ -0,0 +1,16 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/5 星期五 14:53
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class BsStudentNoVo {
+
+    private String student_no;
+
+}

+ 26 - 0
src/main/java/com/template/model/vo/BsStudentVo.java

@@ -0,0 +1,26 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/1/5 星期五 14:53
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class BsStudentVo {
+
+    private String resultcode;
+
+    private String msg;
+
+    private String appid;
+
+    private String timestamp;
+
+    private String data;
+
+    private String sign;
+
+}

+ 27 - 0
src/main/java/com/template/model/vo/GradeListVo.java

@@ -0,0 +1,27 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/12/4 星期一 15:57
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class GradeListVo {
+    /**
+     * 数据ID
+     */
+    private Integer id;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 百胜年级编号
+     */
+    private String gradeNo;
+}

+ 1 - 1
src/main/java/com/template/model/vo/GradeVo.java

@@ -28,7 +28,7 @@ public class GradeVo {
     /**
      * 班级
      */
-    private String schoolClass;
+    private Integer schoolClass;
 
     /**
      * 学号

+ 32 - 0
src/main/java/com/template/model/vo/ParentOfStudentsVo.java

@@ -0,0 +1,32 @@
+package com.template.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/12/4 星期一 15:57
+ * @Description: com.template.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class ParentOfStudentsVo {
+    /**
+     * 学生数据ID
+     */
+    private Integer id;
+
+    /**
+     * 学生名称
+     */
+    private String name;
+
+    /**
+     * 编号
+     */
+    private String cardNo;
+
+    /**
+     * 部门ID
+     */
+    private Integer departmentId;
+}

+ 5 - 0
src/main/java/com/template/model/vo/ScorePageVo.java

@@ -46,6 +46,11 @@ public class ScorePageVo {
     private String name;
 
     /**
+     * 用户ID
+     */
+    private Integer userId;
+
+    /**
      * 学号
      */
     private String cardNo;

+ 17 - 2
src/main/java/com/template/model/vo/ScoreVo.java

@@ -31,14 +31,24 @@ public class ScoreVo {
     private String schoolClass;
 
     /**
+     * 学科ID
+     */
+    private Integer subject;
+
+    /**
      * 学科
      */
-    private String subject;
+    private String subjectStr;
+
+    /**
+     * 考试类型ID
+     */
+    private Integer examType;
 
     /**
      * 考试类型
      */
-    private String examType;
+    private String examTypeStr;
 
     /**
      * 姓名
@@ -46,6 +56,11 @@ public class ScoreVo {
     private String name;
 
     /**
+     * 用户ID
+     */
+    private Integer userId;
+
+    /**
      * 学号
      */
     private String cardNo;

+ 0 - 0
src/main/java/com/template/model/vo/UserVo.java


Некоторые файлы не были показаны из-за большого количества измененных файлов