package com.template.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.fasterxml.jackson.core.JsonProcessingException; 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.annotation.DESRespondSecret; import com.template.api.SmartUserControllerAPI; import com.template.common.utils.*; import com.template.config.ControlConfig; import com.template.config.SeewoConfig; import com.template.model.enumModel.*; import com.template.model.pojo.*; import com.template.model.request.*; import com.template.model.result.CommonResult; import com.template.model.result.PageUtils; 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; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestParam; 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.net.URLDecoder; import java.net.URLEncoder; import java.nio.charset.Charset; import java.time.LocalDate; import java.time.Year; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.zip.ZipInputStream; import static com.template.common.utils.AesTestOne.decrypt; /** *

* 前端控制器 *

* * @author ceshi * @since 2023-12-04 */ @RestController //返回参数加密注解 @DESRespondSecret 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 SmartDutiesService smartDutiesService; @Autowired private SmartDepartmentService smartDepartmentService; @Autowired private SmartIdentityService smartIdentityService; @Autowired private SmartTimeGroupService smartTimeGroupService; @Autowired private SmartAuthorityService smartAuthorityService; @Autowired private SmartFamilyIndexService smartFamilyIndexService; private static Logger logger = LoggerFactory.getLogger(SmartUserController.class); @Override @DESRespondSecret(validated = true) public CommonResult logoffAccount(useridsRequest ur, BindingResult bindingResult) { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } int user = smartUserService.getSmartUserCountByIds(ur.getUserIds()); if (user != ur.getUserIds().size()) { return CommonResult.fail("用户信息已失效"); } // for (:) { // // } // user.setIsCancel(eLogOff.Logout.getValue()); // // int updateResult = smartUserService.updateSmartUser(user); return 0 > 0 ? CommonResult.ok("注销成功") : CommonResult.fail("注销失败"); } @Override @DESRespondSecret(validated = true) public CommonResult changeDepartment(changeDepartmentRequest cdr, BindingResult bindingResult) { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } List users = smartUserService.getSmartUserByIds(cdr.getUserIds()); if (users == null) { return CommonResult.fail("用户信息无效,移动失败!"); } if (users.size() != cdr.getUserIds().size()) { return CommonResult.fail("存在无效用户数据,移动失败!"); } for (SmartUser user : users) { user.setDepartmentId(cdr.getDepartmentId()); } boolean result = smartUserService.updateUserBatchById(users); return result ? CommonResult.ok("移动成功") : CommonResult.fail("移动失败"); } @Override public CommonResult importExcelUserBsno(MultipartFile excelFile) throws IOException { //先解析excel如果excel不满足格式就提示错误信息 避免提前占用带宽上传头像 if (excelFile.isEmpty() || excelFile.getSize() == 0) { return CommonResult.fail("压缩包中的excel文件不能为空"); } List result = new ArrayList<>(); String ContentType = excelFile.getContentType(); InputStream inputStream = excelFile.getInputStream(); if (ContentType.equals(eFileType.Xlsx.getValue())) { CommonResult> resultData = readBsXlsx(inputStream); if (!resultData.isSuccess()) { return resultData; } result = resultData.getData(); if (result == null) { return CommonResult.fail("文档内容为空,导入失败"); } } else { return CommonResult.fail("用户导入只支持Xlsx"); } List gradeIds = result.stream().map(SmartUser::getGrade).distinct().collect(Collectors.toList()); if (gradeIds != null && gradeIds.size() > 0) { List users = smartUserService.queryStudentsByGrade(gradeIds); for (SmartUser user : users) { Optional resultData = result.stream().filter(e -> e.getCardNo().equals(user.getCardNo()) && e.getName().equals(user.getName())).findFirst(); if (resultData != null && resultData.isPresent()) { user.setBsStudentNo(resultData.get().getBsStudentNo()); } } if (users != null && users.size() > 0) { boolean insertData = smartUserService.updateUserBatchById(users); if (!insertData) { return CommonResult.fail("导入失败"); } } } return CommonResult.ok("导入成功"); } /** * Xlsx文件读取方法ss * * @param inputStream 文件流 * @return * @throws IOException */ private CommonResult> readBsXlsx(InputStream inputStream) throws IOException { List users = new ArrayList<>(); List idCards = new ArrayList<>(); List cardNos = new ArrayList<>(); XSSFWorkbook sheets = new XSSFWorkbook(inputStream); List grades = smartGradeService.list(null); //年级 //读取第一张sheet XSSFSheet sheetAt = sheets.getSheetAt(0); DataFormatter dataFormatter = new DataFormatter(); try { for (int rowNum = 0; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) { XSSFRow row = sheetAt.getRow(rowNum); if (row != null) { //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。 //所以先使用setCellType()方法先将该单元格的类型设置为STRING //然后poi会根据字符串读取它 //标题 校验 if (rowNum == 0) { String schoolClass = dataFormatter.formatCellValue(row.getCell(0));//年级 if (!schoolClass.equals("年级")) { return CommonResult.fail("导入数据第一列为年级"); } String cardNo = dataFormatter.formatCellValue(row.getCell(3));//学号 if (!cardNo.equals("学号")) { return CommonResult.fail("导入数据第四列为学号"); } String name = dataFormatter.formatCellValue(row.getCell(4));//姓名 if (!name.equals("姓名")) { return CommonResult.fail("导入数据第五列为姓名"); } String sex = dataFormatter.formatCellValue(row.getCell(5));//学生编码 if (!sex.equals("学生编码")) { return CommonResult.fail("导入数据第六列为学生编码"); } } else { SmartUser user = new SmartUser(); String name = dataFormatter.formatCellValue(row.getCell(4)); if (ObjectUtils.isEmpty(name)) { return CommonResult.fail("第" + (rowNum + 1) + "条数据的姓名不能为空"); } String schoolGrade = dataFormatter.formatCellValue(row.getCell(0));//年级 if (ObjectUtils.isEmpty(schoolGrade)) { return CommonResult.fail(name + "的年级不能为空"); } String cardNo = dataFormatter.formatCellValue(row.getCell(3));//学号 if (ObjectUtils.isEmpty(cardNo)) { return CommonResult.fail(name + "的学号不能为空"); } //学号重复判断 if (!ObjectUtils.isEmpty(cardNo)) { cardNos.add(cardNo); } if (cardNos.stream().distinct().count() != cardNos.size()) { return CommonResult.fail("导入的Excel中," + name + "的学号:" + cardNo + "存在重复数据"); } String studentNo = dataFormatter.formatCellValue(row.getCell(5));//学生编码 if (ObjectUtils.isEmpty(studentNo)) { return CommonResult.fail(name + "的学生编码不能为空"); } Optional oGrade = grades.stream().filter(e -> e.getName().equals(schoolGrade)).findFirst(); if (oGrade != null && oGrade.isPresent()) { Integer gradeId = oGrade.get().getId(); user.setGrade(String.valueOf(gradeId)); } else { return CommonResult.fail(name + "的年级数据无效,导入失败"); } user.setName(name); user.setBsStudentNo(studentNo); user.setCardNo(cardNo); users.add(user); } } } } catch (Exception e) { return CommonResult.fail("请按模板格式导入数据"); } return CommonResult.ok(users); } @Override @DESRespondSecret(validated = true) public CommonResult importExcelUsers(MultipartFile excelFile, String headImage) throws Exception { List result = new ArrayList<>(); int useXw = 1; int useBs = 1; //先解析excel如果excel不满足格式就提示错误信息 避免提前占用带宽上传头像 if (excelFile.isEmpty() || excelFile.getSize() == 0) { return CommonResult.fail("压缩包中的excel文件不能为空"); } String ContentType = excelFile.getContentType(); InputStream inputStream = excelFile.getInputStream(); //xls格式文件 if (ContentType.equals(eFileType.Xls.getValue())) { CommonResult> resultData = readXls(inputStream); if (!resultData.isSuccess()) { return resultData; } result = resultData.getData(); } else if (ContentType.equals(eFileType.Xlsx.getValue())) { CommonResult> resultData = readXlsx(inputStream); if (!resultData.isSuccess()) { return resultData; } result = resultData.getData(); } else { return CommonResult.fail("用户导入只支持Xls、Xlsx"); } List uploadImages = Arrays.asList(headImage.split(",")); for (SmartUser user : result) { Optional image = uploadImages == null ? null : uploadImages.stream().filter(e -> e.equals("https://wanzai-1306339220.cos.ap-shanghai.myqcloud.com/" + user.getHeadImage())).findFirst(); if (image != null && image.isPresent()) { user.setHeadImage(image.get()); } else { if (user.getIdentityId().equals(eIdentityStatu.Student.getValue()) || user.getIdentityId().equals(eIdentityStatu.Teacher.getValue())) { return CommonResult.fail(user.getName() + "头像不存在,导入失败"); } } } //region 将数据加入第三方 List studentDatas = result.stream().filter(e -> e.getIdentityId().intValue() == eIdentityStatu.Student.getValue()).collect(Collectors.toList()); if (studentDatas != null && studentDatas.size() > 0) { //判断是否存在重复数据 List cardNos = studentDatas.stream().map(SmartUser::getCardNo).collect(Collectors.toList()); if (cardNos == null) { return CommonResult.fail("文档内容为空,导入失败"); } if (cardNos.size() <= 0) { return CommonResult.fail("文档内容为空,导入失败"); } List existUsers = smartUserService.querySmartUserByCardNos(cardNos); if (existUsers != null && existUsers.size() > 0) { String names = StringUtils.join(existUsers.stream().map(SmartUser::getName).collect(Collectors.toList()), ","); return CommonResult.fail("系统中已存在" + names + "的信息数据,请勿重复导入"); } //获取班级Uid List classDatas = smartClassService.getSmartClasss(); if (classDatas == null) { return CommonResult.fail("班级数据无效,新增失败"); } List gradeDatas = smartGradeService.getSmartGrades(); if (gradeDatas == null) { return CommonResult.fail("年级数据无效,新增失败"); } HashMap> seewoDatas = new HashMap<>(); List photoList = new ArrayList<>(); for (SmartUser student : studentDatas) { PhotoServiceSavePhotosParam.ThirdSavePhotoQuery photo = new PhotoServiceSavePhotosParam.ThirdSavePhotoQuery(); photo.setPhotoUrl(student.getHeadImage()); photo.setUserCode(student.getCardNo()); photoList.add(photo); //region 学生参数必填判断:年级、班级 if (student.getGrade() == null) { return CommonResult.fail("学生年级不能为空"); } if (student.getSchoolClass() == null) { return CommonResult.fail("学生班级不能为空"); } //endregion Optional oClassData = classDatas.stream().filter(e -> e.getId().equals(student.getSchoolClass())).findFirst(); if (oClassData == null) { return CommonResult.fail("班级数据无效,新增失败"); } Optional oGradeData = gradeDatas.stream().filter(e -> e.getId().intValue() == Integer.valueOf(student.getGrade())).findFirst(); if (oGradeData == null) { return CommonResult.fail("年级数据无效,新增失败"); } SmartClass classData = oClassData.get(); SmartGrade gradeData = oGradeData.get(); //region 凑希沃参数 if (useXw == 1) { if (!seewoDatas.containsKey(classData.getClassUid())) { seewoDatas.put(classData.getClassUid(), new ArrayList<>()); } StudentServiceBatchSaveClassStudentsParam.StudentInfo studentSeewo = StudentServiceBatchSaveClassStudentsParam.StudentInfo.builder() .studentName(student.getName()) .studentCode(student.getCardNo()) .gender(student.getSexId()) .phone(student.getPhone() == null ? "" : student.getPhone()) .build(); seewoDatas.get(classData.getClassUid()).add(studentSeewo); } //endregion //region 百胜新增学生信息 if (useBs == 1) { /** * 学生数据的有效期是到毕业年份的8月31日 */ String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); String endTime = queryGraduationYear(gradeData.getGradeNo()); CommonResult insertBsStudent = bsInsertStudent(student.getName(), student.getCardNo(), student.getSexId(), student.getHeadImage(), student.getTimeGroupId(), classData.getBsClassNo(), startTime, endTime); if (!insertBsStudent.isSuccess()) { return CommonResult.fail(insertBsStudent.getMessage()); } student.setBsStudentNo(insertBsStudent.getData()); } //endregion } if (useXw == 1) { //初始化客户端 SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); List seewoResultDatas = new ArrayList<>(); for (Map.Entry> entry : seewoDatas.entrySet()) { String classUid = entry.getKey(); CommonResult> insertStudents = SeewoInsertBatchStudent(seewoClient, entry.getValue(), classUid); if (!insertStudents.isSuccess()) { return CommonResult.fail(insertStudents.getMessage()); } seewoResultDatas.addAll(insertStudents.getData()); } for (SmartUser student : studentDatas) { Optional seewoResultData = seewoResultDatas.stream().filter(e -> e.getStudentCode().equals(student.getCardNo())).findFirst(); if (seewoResultData != null && seewoResultData.isPresent()) { student.setXwStudentUid(seewoResultData.get().getUserUid()); } } } if (studentDatas != null && studentDatas.size() > 0) { //批量存储学生信息 boolean resultBool = smartUserService.saveBatch(studentDatas); if (!resultBool) { return CommonResult.fail("导入失败"); } List familyIndexs = new ArrayList<>(); //region 希沃新增编辑学生家长信息 if (useXw == 1) { int num = (int) Math.ceil((double) studentDatas.size() / 100); for (int count = 1; count <= num; count++) { int startIndex = (count - 1) * 100; int endIndex = count * 100; if (count == num) { endIndex = startIndex + (studentDatas.size() % 100); } List currentStudentDatas = studentDatas.subList(startIndex, endIndex);//结尾不包含下标100 //学生与家长列表,最大100条 List studentParents = new ArrayList<>(); for (SmartUser student : currentStudentDatas) { ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem students = ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem.builder() .studentCode(student.getCardNo()) .build(); List parentDatas = result.stream().filter(e -> e.getIdentityId().intValue() == eIdentityStatu.Parent.getValue() && e.getAffiliate().equals(student.getCardNo())).collect(Collectors.toList()); List parents = new ArrayList<>(); int i = 0; for (SmartUser parent : parentDatas) { SmartFamilyIndex familyIndex = new SmartFamilyIndex(); familyIndex.setParentPhone(parent.getPhone()); familyIndex.setStudentNo(student.getCardNo()); familyIndex.setIndexData(i); familyIndexs.add(familyIndex); ParentServiceBatchSaveOrUpdateParentsParam.ParentsItem data = ParentServiceBatchSaveOrUpdateParentsParam.ParentsItem.builder() .name(parent.getName()) .phone(parent.getPhone()) .index(i) .build(); parents.add(data); ++i; } if (parents != null && parents.size() > 0) { studentParents.add(students); //家长列表,最多4个 students.setParents(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); String jsonString = JSON.toJSONString(request); logger.info("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 ParentServiceBatchSaveOrUpdateParentsResult parentResult = seewoClient.invoke(request); logger.info("出参:" + parentResult); if (parentResult == null) { return CommonResult.fail("希沃学生家长数据添加失败!"); } if (!parentResult.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(parentResult.getResponseBody().getMessage()); } } } //endregion if (familyIndexs != null && familyIndexs.size() > 0) { boolean insertBatch = smartFamilyIndexService.saveBatch(familyIndexs); if (!insertBatch) { return CommonResult.fail("导入失败!"); } } } //endregion List parents = result.stream().filter(e -> e.getIdentityId().intValue() == eIdentityStatu.Parent.getValue()).collect(Collectors.toList()); //双胞胎家长 List newParents = new ArrayList<>(); if (cardNos != null && cardNos.size() > 0) { List students = smartUserService.querySmartUserByCardNos(cardNos); for (SmartUser parent : parents) { Optional student = students.stream().filter(e -> e.getCardNo().equals(parent.getAffiliate())).findFirst(); if (student != null && student.isPresent()) { //先查找是否存在 Optional newData = newParents.stream().filter(e -> e.getName().equals(parent.getName()) && e.getPhone().equals(parent.getPhone()) && e.getShip().equals(parent.getShip())).findFirst(); if (newData != null && newData.isPresent()) { String affiliate = newData.get().getAffiliate() + "," + student.get().getId(); newData.get().setAffiliate(affiliate); } else { SmartUser newParent = new SmartUser(); newParent.setName(parent.getName()); newParent.setDepartmentId(parent.getDepartmentId()); newParent.setPhone(parent.getPhone()); newParent.setIdentityId(parent.getIdentityId()); newParent.setSexId(parent.getSexId()); newParent.setIsCancel(parent.getIsCancel()); newParent.setAffiliate(String.valueOf(student.get().getId())); newParent.setShip(parent.getShip()); newParents.add(newParent); } } } if (newParents != null && newParents.size() > 0) { //批量存储家长信息 boolean resultBool = smartUserService.saveBatch(newParents); if (!resultBool) { return CommonResult.fail("导入失败!"); } } //region 最后上传学生图片 这样能保证图片上传失败也不影响数据导入 if (useXw == 1) { SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); int num = (int) Math.ceil((double) photoList.size() / 1000); for (int count = 1; count <= num; count++) { int startIndex = (count - 1) * 1000; int endIndex = count * 1000; if (count == num) { endIndex = startIndex + (photoList.size() % 1000); } List currentPhotoList = photoList.subList(startIndex, endIndex);//结尾不包含下标1000 CommonResult photoResult = SeewoInsertBatchPhoto(seewoClient, currentPhotoList, eSeewoUserType.Student.getValue()); if (!photoResult.isSuccess()) { return photoResult; } } } //endregion } } else { List teacherDatas = result.stream().filter(e -> e.getIdentityId().intValue() == eIdentityStatu.Teacher.getValue()).collect(Collectors.toList()); //判断是否存在重复数据 List cardNos = teacherDatas.stream().map(SmartUser::getCardNo).collect(Collectors.toList()); if (cardNos == null) { return CommonResult.fail("文档内容为空,导入失败"); } if (cardNos.size() <= 0) { return CommonResult.fail("文档内容为空,导入失败"); } List existUsers = smartUserService.querySmartUserByCardNos(cardNos); if (existUsers != null && existUsers.size() > 0) { String names = StringUtils.join(existUsers.stream().map(SmartUser::getName).collect(Collectors.toList()), ","); return CommonResult.fail("系统中已存在" + names + "的信息数据,请勿重复导入"); } //获取班级Uid List classDatas = smartClassService.getSmartClasss(); List departmentDatas = smartDepartmentService.list(null); //region //region 希沃添加教师数据 if (useXw == 1) { //初始化客户端 SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); //上传图片 List photoList = new ArrayList<>(); // 老师列表 List teachers = new ArrayList<>(); for (SmartUser teacher : teacherDatas) { TeacherServiceBatchSaveOrUpdateTeacherParam.SaveOrUpdateTeacherQuery teacherData = TeacherServiceBatchSaveOrUpdateTeacherParam.SaveOrUpdateTeacherQuery.builder() .account(teacher.getPhone())//用户账号 .name(teacher.getName())//用户名字 .accountType("phone")//账号类型 phone:手机号 email:邮箱 .teacherCode(teacher.getCardNo())//教师工号 .photoUrl(teacher.getHeadImage())//图片链接 .build(); teachers.add(teacherData); PhotoServiceSavePhotosParam.ThirdSavePhotoQuery photo = new PhotoServiceSavePhotosParam.ThirdSavePhotoQuery(); photo.setPhotoUrl(teacher.getHeadImage()); photo.setUserCode(teacher.getPhone()); photoList.add(photo); } CommonResult> insertTeacher = SeewoInsertBatchTeacher(seewoClient, teachers); if (!insertTeacher.isSuccess()) { return CommonResult.fail(insertTeacher.getMessage()); } CommonResult insertPhotoResult = SeewoInsertBatchPhoto(seewoClient, photoList, eSeewoUserType.Teacher.getValue()); if (!insertPhotoResult.isSuccess()) { return insertPhotoResult; } for (SmartUser teacher : teacherDatas) { if (teacher.getDuties().intValue() == eDuties.ClassTeacher.getValue()) { Optional oClass = classDatas.stream().filter(e -> e.getId().equals(teacher.getSchoolClass())).findFirst(); if (oClass != null && oClass.isPresent()) { //获取班级Uid //region 将班主任推送到希沃 if (useXw == 1) { CommonResult pushMaster = SeewoPushMaster(seewoClient, teacher.getPhone(), oClass.get().getClassUid()); if (!pushMaster.isSuccess()) { return CommonResult.fail(pushMaster.getMessage()); } } //endregion } else { return CommonResult.fail(teacher.getName() + "班级数据无效,导入失败"); } } } } //endregion //region 百胜添加教师数据 if (useBs == 1) { for (SmartUser teacher : teacherDatas) { Optional oDepartment = departmentDatas.stream().filter(e -> e.getId().equals(teacher.getDepartmentId())).findFirst(); if (!(oDepartment != null && oDepartment.isPresent())) { return CommonResult.fail(teacher.getName() + "的部门数据无效,导入失败"); } /** * 教师数据的有效期是20年 */ String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); String endTime = TimeExchange.addYear(20); if (ObjectUtils.isEmpty(teacher.getBsStaffCode())) { CommonResult insertBsTeacher = bsInsertTeacher(teacher, oDepartment.get().getBsDepartmentNo(), startTime, endTime); if (!insertBsTeacher.isSuccess()) { return CommonResult.fail(insertBsTeacher.getMessage()); } teacher.setBsStaffCode(insertBsTeacher.getData()); } else { CommonResult bsUpdateTeacher = updateBsTeacher(teacher, oDepartment.get().getBsDepartmentNo(), startTime, endTime); if (!bsUpdateTeacher.isSuccess()) { return CommonResult.fail(bsUpdateTeacher.getMessage()); } teacher.setBsStaffCode(bsUpdateTeacher.getData()); } } } //endregion if (teacherDatas != null && teacherDatas.size() > 0) { //批量存储老师信息 boolean resultBool = smartUserService.saveBatch(teacherDatas); if (!resultBool) { return CommonResult.fail("导入失败"); } } } return CommonResult.ok("导入成功"); } @Override public CommonResult importExcelFamilys(MultipartFile excelFile) throws Exception { //先解析excel如果excel不满足格式就提示错误信息 避免提前占用带宽上传头像 if (excelFile.isEmpty() || excelFile.getSize() == 0) { return CommonResult.fail("压缩包中的excel文件不能为空"); } String ContentType = excelFile.getContentType(); InputStream inputStream = excelFile.getInputStream(); List result = new ArrayList<>(); CommonResult> resultData = readFamilyXlsx(inputStream); if (!resultData.isSuccess()) { return resultData; } result = resultData.getData(); boolean insertBatch = smartFamilyIndexService.saveBatch(result); return insertBatch ? CommonResult.ok("操作成功") : CommonResult.fail("操作失败"); } /** * Xlsx文件读取方法 * * @param inputStream 文件流 * @return * @throws IOException */ private CommonResult> readFamilyXlsx(InputStream inputStream) throws IOException { List result = new ArrayList<>(); XSSFWorkbook sheets = new XSSFWorkbook(inputStream); //读取第一张sheet XSSFSheet sheetAt = sheets.getSheetAt(0); DataFormatter dataFormatter = new DataFormatter(); try { for (int rowNum = 1; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) { XSSFRow row = sheetAt.getRow(rowNum); if (row != null) { //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。 //所以先使用setCellType()方法先将该单元格的类型设置为STRING //然后poi会根据字符串读取它 //标题 校验 if (rowNum < 3) { //不做校验处理了 } else { String cardNo = dataFormatter.formatCellValue(row.getCell(4));//学号 if (ObjectUtils.isEmpty(cardNo)) { continue; } String phone1 = dataFormatter.formatCellValue(row.getCell(10));//手机号1 if (!ObjectUtils.isEmpty(phone1)) { SmartFamilyIndex index = new SmartFamilyIndex(); index.setStudentNo(cardNo); index.setParentPhone(phone1); index.setIndexData(0); result.add(index); } String phone2 = dataFormatter.formatCellValue(row.getCell(12));//手机号1 if (!ObjectUtils.isEmpty(phone1)) { SmartFamilyIndex index = new SmartFamilyIndex(); index.setStudentNo(cardNo); index.setParentPhone(phone1); index.setIndexData(1); result.add(index); } } } } } catch (Exception e) { return CommonResult.fail("请按模板格式导入数据"); } return CommonResult.ok(result); } //endregion //region 批量更新用户 /** * 只更新 姓名 班级 时间组 * * @param excelFile excel文件 * @return * @throws IOException */ @Override public CommonResult importExcelUpdateUsers(MultipartFile excelFile) throws Exception { List result = new ArrayList<>(); int useXw = 1; int useBs = 1; //先解析excel如果excel不满足格式就提示错误信息 避免提前占用带宽上传头像 if (excelFile.isEmpty() || excelFile.getSize() == 0) { return CommonResult.fail("excel文件不能为空"); } String ContentType = excelFile.getContentType(); InputStream inputStream = excelFile.getInputStream(); //xls格式文件 if (ContentType.equals(eFileType.Xls.getValue())) { CommonResult> resultData = readUpdateXls(inputStream); if (!resultData.isSuccess()) { return resultData; } result = resultData.getData(); } else if (ContentType.equals(eFileType.Xlsx.getValue())) { CommonResult> resultData = readUpdateXlsx(inputStream); if (!resultData.isSuccess()) { return resultData; } result = resultData.getData(); } else { return CommonResult.fail("用户导入只支持Xls、Xlsx"); } //获取导入学生的相关数据 List cardNos = result.stream().map(SmartUser::getCardNo).collect(Collectors.toList()); if (cardNos == null) { return CommonResult.fail("文档内容为空,批量更新失败"); } List grades = smartGradeService.list(null); List studentDatas = smartUserService.querySmartUserByCardNos(cardNos); List classes = smartClassService.list(null); List updateStudent = new ArrayList<>(); for (SmartUser studentData : result) { Optional oldStudent = studentDatas.stream().filter(e -> e.getCardNo().equals(studentData.getCardNo())).findFirst(); if (oldStudent != null && oldStudent.isPresent()) { oldStudent.get().setName(studentData.getName());//姓名 oldStudent.get().setSchoolClass(studentData.getSchoolClass());//班级 oldStudent.get().setGrade(studentData.getGrade());//可能会变年级 oldStudent.get().setTimeGroupId(studentData.getTimeGroupId());//时间组 updateStudent.add(oldStudent.get()); Optional oGrade = grades.stream().filter(e -> String.valueOf(e.getId()).equals(studentData.getGrade())).findFirst(); if (oGrade != null && oGrade.isPresent()) { Optional oClass = classes.stream().filter(e -> e.getId().equals(studentData.getSchoolClass())).findFirst(); if (oClass != null && oClass.isPresent()) { if (useXw == 1) { SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); CommonResult updateSwStudent = SeewoUpdateStudent(seewoClient, oldStudent.get()); if (!updateSwStudent.isSuccess()) { return CommonResult.fail(updateSwStudent.getMessage()); } } if (useBs == 1) { /** * 学生数据的有效期是到毕业年份的8月31日 */ String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); String endTime = queryGraduationYear(oGrade.get().getGradeNo()); CommonResult updateBsStudent = bsEUpdateStudent(oldStudent.get(), oClass.get().getBsClassNo(), startTime, endTime); if (!updateBsStudent.isSuccess()) { return CommonResult.fail(updateBsStudent.getMessage()); } } } else { return CommonResult.fail("学号为:" + studentData.getCardNo() + "的" + studentData.getName() + "的班级数据无效,无法进行更新操作"); } } else { return CommonResult.fail("学号为:" + studentData.getCardNo() + "的" + studentData.getName() + "的年级数据无效,无法进行更新操作"); } } else { return CommonResult.fail("学号为:" + studentData.getCardNo() + "的" + studentData.getName() + "的数据在系统中不存在,无法进行更新操作"); } } if (updateStudent != null && updateStudent.size() > 0) { boolean updateBatch = smartUserService.updateUserBatchById(updateStudent); if (!updateBatch) { return CommonResult.fail("系统批量更新出错,导入失败"); } } return CommonResult.ok("导入成功"); } /** * Xls文件读取方法 * * @param inputStream 文件流 * @return * @throws IOException */ private CommonResult> readUpdateXls(InputStream inputStream) throws IOException { List result = new ArrayList<>(); HSSFWorkbook sheets = new HSSFWorkbook(inputStream); List classs = smartClassService.list(null);//班级 List timeGroups = smartTimeGroupService.queryTimeGroups();//时间组 //读取第一张sheet HSSFSheet sheetAt = sheets.getSheetAt(0); DataFormatter dataFormatter = new DataFormatter(); try { for (int rowNum = 1; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) { HSSFRow row = sheetAt.getRow(rowNum); if (row != null) { //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。 //所以先使用setCellType()方法先将该单元格的类型设置为STRING //然后poi会根据字符串读取它 //标题 校验 if (rowNum == 1) { String xwNo = dataFormatter.formatCellValue(row.getCell(1));//希沃编号 if (!xwNo.equals("希沃编号")) { return CommonResult.fail("导入数据第二列为希沃编号"); } String bsNo = dataFormatter.formatCellValue(row.getCell(2));//百胜编号 if (!bsNo.equals("百胜编号")) { return CommonResult.fail("导入数据第三列为百胜编号"); } String cardNo = dataFormatter.formatCellValue(row.getCell(3));//学号 if (!cardNo.equals("学号")) { return CommonResult.fail("导入数据第四列为学号"); } String name = dataFormatter.formatCellValue(row.getCell(4));//姓名 if (!name.equals("姓名")) { return CommonResult.fail("导入数据第五列为姓名"); } String schoolClass = dataFormatter.formatCellValue(row.getCell(5));//班级 if (!schoolClass.equals("班级")) { return CommonResult.fail("导入数据第六列为班级"); } String group = dataFormatter.formatCellValue(row.getCell(6));//时间组 if (!group.equals("时间组")) { return CommonResult.fail("导入数据第七列为时间组"); } } else { SmartUser user = new SmartUser(); String name = dataFormatter.formatCellValue(row.getCell(4));//姓名 if (ObjectUtils.isEmpty(name)) { return CommonResult.fail("第" + (rowNum) + "条数据的名称不能为空"); } String xwNo = dataFormatter.formatCellValue(row.getCell(1));//希沃编号 if (ObjectUtils.isEmpty(xwNo)) { return CommonResult.fail(name + "的希沃编号不能为空"); } String bsNo = dataFormatter.formatCellValue(row.getCell(2));//百胜编号 if (ObjectUtils.isEmpty(bsNo)) { return CommonResult.fail(name + "的百胜编号不能为空"); } String cardNo = dataFormatter.formatCellValue(row.getCell(3));//学号 if (ObjectUtils.isEmpty(cardNo)) { return CommonResult.fail(name + "的学号不能为空"); } String schoolClass = dataFormatter.formatCellValue(row.getCell(5));//班级 if (ObjectUtils.isEmpty(schoolClass)) { return CommonResult.fail(name + "的班级不能为空"); } String group = dataFormatter.formatCellValue(row.getCell(6));//时间组 if (ObjectUtils.isEmpty(group)) { return CommonResult.fail(name + "的时间组不能为空"); } user.setCardNo(cardNo == null ? "" : cardNo); user.setName(name == null ? "" : name); user.setIdentityId(eIdentityStatu.Student.getValue()); Optional oClass = classs.stream().filter(e -> e.getName().equals(schoolClass)).findFirst(); if (oClass != null && oClass.isPresent()) { user.setSchoolClass(oClass.get().getId()); user.setGrade(String.valueOf(oClass.get().getGradeId())); } else { return CommonResult.fail(name + "的班级数据无效,导入失败"); } Optional oGroup = timeGroups.stream().filter(e -> e.getName().equals(group)).findFirst(); if (oGroup != null && oGroup.isPresent()) { user.setTimeGroupId(oGroup.get().getId()); } result.add(user); } } } } catch (Exception e) { return CommonResult.fail("请按模板格式导入数据"); } return CommonResult.ok(result); } /** * Xlsx文件读取方法 * * @param inputStream 文件流 * @return * @throws IOException */ private CommonResult> readUpdateXlsx(InputStream inputStream) throws IOException { List result = new ArrayList<>(); XSSFWorkbook sheets = new XSSFWorkbook(inputStream); List classs = smartClassService.list(null);//班级 List timeGroups = smartTimeGroupService.queryTimeGroups();//时间组 //读取第一张sheet XSSFSheet sheetAt = sheets.getSheetAt(0); DataFormatter dataFormatter = new DataFormatter(); try { for (int rowNum = 1; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) { XSSFRow row = sheetAt.getRow(rowNum); if (row != null) { //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。 //所以先使用setCellType()方法先将该单元格的类型设置为STRING //然后poi会根据字符串读取它 //标题 校验 if (rowNum == 1) { String xwNo = dataFormatter.formatCellValue(row.getCell(1));//希沃编号 if (!xwNo.equals("希沃编号")) { return CommonResult.fail("导入数据第二列为希沃编号"); } String bsNo = dataFormatter.formatCellValue(row.getCell(2));//百胜编号 if (!bsNo.equals("百胜编号")) { return CommonResult.fail("导入数据第三列为百胜编号"); } String cardNo = dataFormatter.formatCellValue(row.getCell(3));//学号 if (!cardNo.equals("学号")) { return CommonResult.fail("导入数据第四列为学号"); } String name = dataFormatter.formatCellValue(row.getCell(4));//姓名 if (!name.equals("姓名")) { return CommonResult.fail("导入数据第五列为姓名"); } String schoolClass = dataFormatter.formatCellValue(row.getCell(5));//班级 if (!schoolClass.equals("班级")) { return CommonResult.fail("导入数据第六列为班级"); } String group = dataFormatter.formatCellValue(row.getCell(6));//时间组 if (!group.equals("时间组")) { return CommonResult.fail("导入数据第七列为时间组"); } } else { SmartUser user = new SmartUser(); String name = dataFormatter.formatCellValue(row.getCell(4));//姓名 if (ObjectUtils.isEmpty(name)) { return CommonResult.fail("第" + (rowNum) + "条数据的名称不能为空"); } String xwNo = dataFormatter.formatCellValue(row.getCell(1));//希沃编号 if (ObjectUtils.isEmpty(xwNo)) { return CommonResult.fail(name + "的希沃编号不能为空"); } String bsNo = dataFormatter.formatCellValue(row.getCell(2));//百胜编号 if (ObjectUtils.isEmpty(bsNo)) { return CommonResult.fail(name + "的百胜编号不能为空"); } String cardNo = dataFormatter.formatCellValue(row.getCell(3));//学号 if (ObjectUtils.isEmpty(cardNo)) { return CommonResult.fail(name + "的学号不能为空"); } String schoolClass = dataFormatter.formatCellValue(row.getCell(5));//班级 if (ObjectUtils.isEmpty(schoolClass)) { return CommonResult.fail(name + "的班级不能为空"); } String group = dataFormatter.formatCellValue(row.getCell(6));//时间组 if (ObjectUtils.isEmpty(group)) { return CommonResult.fail(name + "的时间组不能为空"); } user.setCardNo(cardNo == null ? "" : cardNo); user.setName(name == null ? "" : name); user.setIdentityId(eIdentityStatu.Student.getValue()); Optional oClass = classs.stream().filter(e -> e.getName().equals(schoolClass)).findFirst(); if (oClass != null && oClass.isPresent()) { user.setSchoolClass(oClass.get().getId()); user.setGrade(String.valueOf(oClass.get().getGradeId())); } else { return CommonResult.fail(name + "的班级数据无效,导入失败"); } Optional oGroup = timeGroups.stream().filter(e -> e.getName().equals(group)).findFirst(); if (oGroup != null && oGroup.isPresent()) { user.setTimeGroupId(oGroup.get().getId()); } result.add(user); } } } } catch (Exception e) { return CommonResult.fail("请按模板格式导入数据"); } return CommonResult.ok(result); } //endregion /** * 批量导入用户信息 * 以身份证号作为判断依据 如果存在重复数据就提示存在重复数据 * 开发流程:建议先去拿到excel中的所有数据的身份证号去数据库中找一遍是否存在重复数据 * 如果不存在重复数据就把附件文件夹中的附件文件上传到cos服务器上 * 然后手动拼接一个人脸照片文件地址存入对应的数据中 * * @param zipFile zip压缩包 * @return */ @Override @DESRespondSecret(validated = true) public CommonResult importZipUsers(MultipartFile zipFile) throws IOException { List result = new ArrayList<>(); MultipartFile excelFile = null; List multipartFileHashMap = new ArrayList<>(); String excelStr = null; if (zipFile != null) { //解压压缩文件并上传文件 ByteArrayOutputStream byteOut = null; ZipInputStream zipIn = null; try { java.util.zip.ZipEntry zipEntry = null; zipIn = new ZipInputStream(zipFile.getInputStream(), Charset.forName("GBK")); while ((zipEntry = zipIn.getNextEntry()) != null) { String fileName = zipEntry.getName(); if (fileName.contains("人脸照片") && (fileName.endsWith(".jpg") || fileName.endsWith(".png") || fileName.endsWith(".jpeg"))) { byteOut = new ByteArrayOutputStream(); IOUtils.copy(zipIn, byteOut); InputStream inputStream = new ByteArrayInputStream(byteOut.toByteArray()); MultipartFile multipartFile = FileUtils.getMultipartFile(inputStream, fileName); multipartFileHashMap.add(multipartFile); } else if (fileName.contains("人员信息采集表") && (fileName.endsWith(".xlsx") || fileName.endsWith(".xls"))) { excelStr = fileName.endsWith(".xlsx") ? "xlsx" : "xls"; byteOut = new ByteArrayOutputStream(); IOUtils.copy(zipIn, byteOut); InputStream inputStream = new ByteArrayInputStream(byteOut.toByteArray()); excelFile = FileUtils.getMultipartFile(inputStream, fileName); } } } catch (Exception e) { e.printStackTrace(); } finally { if (byteOut != null) { byteOut.close(); } if (zipIn != null) { zipIn.close(); } } } //先解析excel如果excel不满足格式就提示错误信息 避免提前占用带宽上传头像 if (excelFile.isEmpty() || excelFile.getSize() == 0) { return CommonResult.fail("压缩包中的excel文件不能为空"); } String ContentType = excelFile.getContentType(); InputStream inputStream = excelFile.getInputStream(); //xls格式文件 if (excelStr.equals("xls")) { CommonResult> resultData = readXls(inputStream); if (!resultData.isSuccess()) { return resultData; } result = resultData.getData(); } else if (excelStr.equals("xlsx")) { CommonResult> resultData = readXlsx(inputStream); if (!resultData.isSuccess()) { return resultData; } result = resultData.getData(); } else { return CommonResult.fail("用户导入只支持Xls、Xlsx"); } //cos上传 返回图片地址 String uploadResult = smartUploadService.upload(multipartFileHashMap.toArray(new MultipartFile[0])); List uploadImages = Arrays.asList(uploadResult.split(",")); for (SmartUser user : result) { Optional headImage = uploadImages == null ? null : uploadImages.stream().filter(e -> e.equals("https://wanzai-1306339220.cos.ap-shanghai.myqcloud.com/headImage/" + user.getHeadImage())).findFirst(); if (headImage != null && headImage.isPresent()) { user.setHeadImage(headImage.get()); } } //批量存储用户信息 boolean resultBool = smartUserService.saveBatch(result); return resultBool ? CommonResult.ok("导入成功") : CommonResult.fail("导入失败"); } @Override public CommonResult insertSmartUserPhoto() throws JsonProcessingException { Integer userType = eSeewoUserType.Student.getValue(); SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); List students = smartUserService.queryStudentDatas(); List photoList = new ArrayList<>(); for (SmartUser student : students) { PhotoServiceSavePhotosParam.ThirdSavePhotoQuery photo = new PhotoServiceSavePhotosParam.ThirdSavePhotoQuery(); photo.setPhotoUrl(student.getHeadImage()); photo.setUserCode(student.getCardNo()); photoList.add(photo); } int num = (int) Math.ceil((double) photoList.size() / 1000); for (int count = 1; count <= num; count++) { int startIndex = (count - 1) * 1000; int endIndex = count * 1000; if (count == num) { endIndex = startIndex + (photoList.size() % 1000); } List currentPhotoList = photoList.subList(startIndex, endIndex);//结尾不包含下标1000 CommonResult result = SeewoInsertBatchPhoto(seewoClient, currentPhotoList, userType); if (!result.isSuccess()) { return result; } } return CommonResult.ok("图片上传成功"); } /** * Xlsx文件读取方法ss * * @param inputStream 文件流 * @return * @throws IOException */ private CommonResult> readXlsx(InputStream inputStream) throws IOException { List idCards = new ArrayList<>(); List cardNos = new ArrayList<>(); List result = new ArrayList<>(); XSSFWorkbook sheets = new XSSFWorkbook(inputStream); List departments = smartDepartmentService.list(null); List grades = smartGradeService.list(null); //年级 List classs = smartClassService.list(null);//班级 List timeGroups = smartTimeGroupService.queryTimeGroups();//时间组 //读取第一张sheet XSSFSheet sheetAt = sheets.getSheetAt(0); DataFormatter dataFormatter = new DataFormatter(); //region 判断是老师还是学生导入 boolean isTeacher = false; XSSFRow checkRow = sheetAt.getRow(0); if (checkRow != null) { String firstCow = dataFormatter.formatCellValue(checkRow.getCell(0));//第一列 学生是年级 老师是 学校名称 if (firstCow.equals("学校名称")) { isTeacher = true; } } //endregion try { for (int rowNum = 0; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) { XSSFRow row = sheetAt.getRow(rowNum); if (row != null) { if (!isTeacher) { //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。 //所以先使用setCellType()方法先将该单元格的类型设置为STRING //然后poi会根据字符串读取它 //标题 校验 if (rowNum == 0) { String schoolGrade = dataFormatter.formatCellValue(row.getCell(0));//年级 if (!schoolGrade.equals("年级")) { return CommonResult.fail("导入数据第一列为年级"); } String schoolClass = dataFormatter.formatCellValue(row.getCell(1));//班级 if (!schoolClass.equals("班级")) { return CommonResult.fail("导入数据第一列为班级"); } String cardNo = dataFormatter.formatCellValue(row.getCell(2));//学号 if (!cardNo.equals("学号")) { return CommonResult.fail("导入数据第二列为学号"); } String name = dataFormatter.formatCellValue(row.getCell(3));//姓名 if (!name.equals("姓名")) { return CommonResult.fail("导入数据第三列为姓名"); } String sex = dataFormatter.formatCellValue(row.getCell(4));//性别 if (!sex.equals("性别")) { return CommonResult.fail("导入数据第四列为性别"); } String nation = dataFormatter.formatCellValue(row.getCell(5));//民族 if (!nation.equals("民族")) { return CommonResult.fail("导入数据第五列为民族"); } String cardId = dataFormatter.formatCellValue(row.getCell(6));//身份证 if (!cardId.equals("身份证")) { return CommonResult.fail("导入数据第六列为身份证"); } String headImage = dataFormatter.formatCellValue(row.getCell(7));//照片 if (!headImage.equals("照片")) { return CommonResult.fail("导入数据第七列为照片"); } String timeGroup = dataFormatter.formatCellValue(row.getCell(8));//常规时间组 if (!timeGroup.equals("常规时间组")) { return CommonResult.fail("导入数据第八列为常规时间组"); } String address = dataFormatter.formatCellValue(row.getCell(9));//住址 if (!address.equals("住址")) { return CommonResult.fail("导入数据第九列为住址"); } String phone = dataFormatter.formatCellValue(row.getCell(10));//联系电话 if (!phone.equals("联系电话")) { return CommonResult.fail("导入数据第十列为联系电话"); } String family = dataFormatter.formatCellValue(row.getCell(11));//家属 if (!family.equals("家属")) { return CommonResult.fail("导入数据第十一列为家属"); } String familyShip = dataFormatter.formatCellValue(row.getCell(12));//家属与本人关系 if (!familyShip.equals("家属与本人关系")) { return CommonResult.fail("导入数据第十二列为家属与本人关系"); } String phoneTwo = dataFormatter.formatCellValue(row.getCell(13));//联系电话2 if (!phoneTwo.equals("联系电话2")) { return CommonResult.fail("导入数据第十三列为联系电话2"); } String familyTwo = dataFormatter.formatCellValue(row.getCell(14));//家属2 if (!familyTwo.equals("家属2")) { return CommonResult.fail("导入数据第十四列为家属2"); } String familyShipTwo = dataFormatter.formatCellValue(row.getCell(15));//家属与本人关系2 if (!familyShipTwo.equals("家属与本人关系2")) { return CommonResult.fail("导入数据第十五列为家属与本人关系2"); } } else { SmartUser user = new SmartUser(); String name = dataFormatter.formatCellValue(row.getCell(3)); // if (ObjectUtils.isEmpty(name)) { // return CommonResult.fail("第" + (rowNum + 1) + "条数据的名称不能为空"); // } if (ObjectUtils.isEmpty(name)) { continue; } String schoolGrade = dataFormatter.formatCellValue(row.getCell(0));//年级 if (ObjectUtils.isEmpty(schoolGrade)) { return CommonResult.fail(name + "的年级不能为空"); } String schoolClass = dataFormatter.formatCellValue(row.getCell(1));//班级 if (ObjectUtils.isEmpty(schoolClass)) { return CommonResult.fail(name + "的班级不能为空"); } //不判断重复性 因为会出现双胞胎 String phone = dataFormatter.formatCellValue(row.getCell(10)); // if (!ObjectUtils.isEmpty(phone)) { // phones.add(phone); // } // if (phones.stream().distinct().count() != phones.size()) { // return CommonResult.fail("导入的Excel中,联系电话:" + phone + "存在重复数据"); // } //性别是否为空判断 String sex = dataFormatter.formatCellValue(row.getCell(4)); if (ObjectUtils.isEmpty(sex)) { return CommonResult.fail(name + "的性别不能为空"); } //家庭住址是否为空判断 String address = dataFormatter.formatCellValue(row.getCell(9)); //民族是否为空判断 String nation = dataFormatter.formatCellValue(row.getCell(5)); if (ObjectUtils.isEmpty(nation)) { return CommonResult.fail(name + "的民族不能为空"); } //部门是否为空判断 String department = dataFormatter.formatCellValue(row.getCell(1)).replace("年级", "") + "学生"; if (ObjectUtils.isEmpty(department)) { return CommonResult.fail(name + "的部门不能为空"); } Integer departmentId = null; Optional departModel = departments.stream().filter(e -> e.getName().equals(department)).findFirst(); if (departModel != null && departModel.isPresent()) { departmentId = departModel.get().getId(); } else { departmentId = 1; } //学号重复判断 String cardNo = dataFormatter.formatCellValue(row.getCell(2)); if (!ObjectUtils.isEmpty(cardNo)) { cardNos.add(cardNo); } if (cardNos.stream().distinct().count() != cardNos.size()) { return CommonResult.fail("导入的Excel中," + name + "的学号:" + cardNo + "存在重复数据"); } //身份证重复判断 String idCard = dataFormatter.formatCellValue(row.getCell(6)); if (!ObjectUtils.isEmpty(idCard)) { idCards.add(idCard); } if (idCards.stream().distinct().count() != idCards.size()) { return CommonResult.fail("导入的Excel中," + name + "的身份证号:" + idCard + "存在重复数据"); } user.setCardNo(cardNo == null ? "" : cardNo); user.setName(name == null ? "" : name); user.setIdentityId(eIdentityStatu.Student.getValue()); user.setIdCard(idCard == null ? "" : idCard); user.setSexId(sex == null ? eSexStatu.Man.getValue() : eSexStatu.integerOf(sex)); user.setDepartmentId(departmentId); String cellImage = dataFormatter.formatCellValue(row.getCell(7)); user.setHeadImage(cellImage); user.setDormitoryNumber(""); String grade = schoolGrade == null ? "" : schoolGrade; Optional oGrade = grades.stream().filter(e -> e.getName().equals(grade)).findFirst(); if (oGrade != null && oGrade.isPresent()) { Integer gradeId = oGrade.get().getId(); user.setGrade(String.valueOf(gradeId)); Optional 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(""); user.setPhone(""); user.setAffiliate(""); user.setTitle(""); user.setAddress(address == null ? "" : address); user.setNation(nation == null ? "" : nation); user.setOfStudent(""); user.setGraduate(""); user.setDuties(null); String timeGroup = dataFormatter.formatCellValue(row.getCell(8)); Optional groupData = timeGroups.stream().filter(e -> e.getName().equals(timeGroup)).findFirst(); if (groupData != null && groupData.isPresent()) { user.setTimeGroupId(groupData.get().getId()); } else { user.setTimeGroupId(0); } user.setIsCancel(eLogOff.Unlogout.getValue()); result.add(user); //部门是否为空判断 String familyDepartment = dataFormatter.formatCellValue(row.getCell(1)).replace("年级", "") + "家长"; Integer familyDepartmentId = null; Optional familyDepartModel = departments.stream().filter(e -> e.getName().equals(familyDepartment)).findFirst(); if (familyDepartModel != null && familyDepartModel.isPresent()) { familyDepartmentId = familyDepartModel.get().getId(); } else { familyDepartmentId = 16; } //region 家属 if (!ObjectUtils.isEmpty(phone)) { if (phone.length() != 11) { return CommonResult.fail(name + "的学生家长手机号长度不符合标准"); } SmartUser familyOne = new SmartUser(); String family = dataFormatter.formatCellValue(row.getCell(11));//家属 familyOne.setName(!ObjectUtils.isEmpty(family) ? family : "家长"); familyOne.setDepartmentId(familyDepartmentId); familyOne.setPhone(phone); familyOne.setIdentityId(eIdentityStatu.Parent.getValue()); familyOne.setSexId(eSexStatu.Man.getValue()); familyOne.setIsCancel(eLogOff.Unlogout.getValue()); familyOne.setAffiliate(user.getCardNo()); String familyShip = dataFormatter.formatCellValue(row.getCell(12));//家属与本人关系 familyOne.setShip(familyShip == null ? "其他" : familyShip); result.add(familyOne); } String phoneTwo = dataFormatter.formatCellValue(row.getCell(13));//联系电话2 if (!ObjectUtils.isEmpty(phoneTwo)) { if (phoneTwo.length() != 11) { return CommonResult.fail(name + "的学生家长手机号长度不符合标准"); } SmartUser familyTwo = new SmartUser(); String familyNameTwo = dataFormatter.formatCellValue(row.getCell(14));//家属2 familyTwo.setName(!ObjectUtils.isEmpty(familyNameTwo) ? familyNameTwo : "家长"); familyTwo.setDepartmentId(familyDepartmentId); familyTwo.setPhone(phoneTwo == null ? "" : phoneTwo); familyTwo.setIdentityId(eIdentityStatu.Parent.getValue()); familyTwo.setSexId(eSexStatu.Man.getValue()); familyTwo.setIsCancel(eLogOff.Unlogout.getValue()); familyTwo.setAffiliate(user.getCardNo()); String familyShipTwo = dataFormatter.formatCellValue(row.getCell(15));//家属与本人关系2 familyTwo.setShip(familyShipTwo == null ? "其他" : familyShipTwo); result.add(familyTwo); } //endregion //希沃不允许一个学生家长的两个手机号重复 所以做一个重复性判断 if (!ObjectUtils.isEmpty(phone) && !ObjectUtils.isEmpty(dataFormatter.formatCellValue(row.getCell(13)))) { if (phone.equals(dataFormatter.formatCellValue(row.getCell(13)))) { return CommonResult.fail(name + "的学生家长手机号不可重复"); } } //endregion } } else { //教师导入 //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。 //所以先使用setCellType()方法先将该单元格的类型设置为STRING //然后poi会根据字符串读取它 //标题 校验 if (rowNum == 0) { String schoolName = dataFormatter.formatCellValue(row.getCell(0));//学校名称 if (!schoolName.equals("学校名称")) { return CommonResult.fail("导入数据第一列为学校名称"); } String departmentNo = dataFormatter.formatCellValue(row.getCell(1));//部门编码 if (!departmentNo.equals("部门编码")) { return CommonResult.fail("导入数据第二列为部门编码"); } String departmentName = dataFormatter.formatCellValue(row.getCell(2));//部门名称 if (!departmentName.equals("部门名称")) { return CommonResult.fail("导入数据第三列为部门名称"); } String teacherNo = dataFormatter.formatCellValue(row.getCell(3));//教师编码 if (!teacherNo.equals("教师编码")) { return CommonResult.fail("导入数据第四列为教师编码"); } String name = dataFormatter.formatCellValue(row.getCell(4));//姓名 if (!name.equals("姓名")) { return CommonResult.fail("导入数据第五列为姓名"); } String sex = dataFormatter.formatCellValue(row.getCell(5));//性别 if (!sex.equals("性别")) { return CommonResult.fail("导入数据第六列为性别"); } String phone = dataFormatter.formatCellValue(row.getCell(6));//联系电话 if (!phone.equals("联系电话")) { return CommonResult.fail("导入数据第七列为联系电话"); } String schoolClass = dataFormatter.formatCellValue(row.getCell(7));//管理班级 if (!schoolClass.equals("管理班级")) { return CommonResult.fail("导入数据第八列为身份证"); } String nation = dataFormatter.formatCellValue(row.getCell(8));//民族 if (!nation.equals("民族")) { return CommonResult.fail("导入数据第九列为民族"); } String card = dataFormatter.formatCellValue(row.getCell(9));//身份证 if (!card.equals("身份证(允许为空)")) { return CommonResult.fail("导入数据第十列为身份证"); } String photo = dataFormatter.formatCellValue(row.getCell(10));//照片 if (!photo.equals("照片")) { return CommonResult.fail("导入数据第十一列为照片"); } String timeGroup = dataFormatter.formatCellValue(row.getCell(11));//常规时间组 if (!timeGroup.equals("常规时间组")) { return CommonResult.fail("导入数据第十二列为常规时间组"); } String address = dataFormatter.formatCellValue(row.getCell(12));//住址 if (!address.equals("住址")) { return CommonResult.fail("导入数据第十三列为住址"); } } else { SmartUser user = new SmartUser(); user.setIdentityId(eIdentityStatu.Teacher.getValue()); String name = dataFormatter.formatCellValue(row.getCell(4));//姓名 if (ObjectUtils.isEmpty(name)) { continue; } user.setName(name); String sex = dataFormatter.formatCellValue(row.getCell(5));//性别 user.setSexId(sex == null ? eSexStatu.Man.getValue() : eSexStatu.integerOf(sex)); String departmentName = dataFormatter.formatCellValue(row.getCell(2));//部门名称 if (ObjectUtils.isEmpty(departmentName)) { return CommonResult.fail(name + "的部门名称不能为空"); } String departmentNo = dataFormatter.formatCellValue(row.getCell(1));//部门编码 if (ObjectUtils.isEmpty(departmentNo)) { return CommonResult.fail(name + "的部门编码不能为空"); } Optional oDepartment = departments.stream().filter(e -> e.getBsDepartmentNo().equals(departmentNo)).findFirst(); if (!(oDepartment != null && oDepartment.isPresent())) { return CommonResult.fail(departmentName + "部门数据在系统中不存在"); } user.setDepartmentId(oDepartment.get().getId()); if (departmentName.equals("班主任")) { String schoolClass = dataFormatter.formatCellValue(row.getCell(7));//班级 if (ObjectUtils.isEmpty(schoolClass)) { return CommonResult.fail(name + "的管理班级不能为空"); } //班级和年级 Optional oClass = classs.stream().filter(e -> e.getName().equals(schoolClass)).findFirst(); if (!(oClass != null && oClass.isPresent())) { return CommonResult.fail(schoolClass + "的班级数据在系统中不存在"); } user.setSchoolClass(oClass.get().getId()); user.setGrade(String.valueOf(oClass.get().getGradeId())); user.setDuties(eDuties.ClassTeacher.getValue()); } else { user.setDuties(5);//任课老师 } String teacherNo = dataFormatter.formatCellValue(row.getCell(3));//教师编码 if (!ObjectUtils.isEmpty(teacherNo)) { user.setBsStaffCode(teacherNo); } String phone = dataFormatter.formatCellValue(row.getCell(6));//联系电话 if (ObjectUtils.isEmpty(phone)) { return CommonResult.fail(name + "的手机号不能为空"); } user.setCardNo(phone); user.setPhone(phone); user.setXwTeacherCode(phone); String nation = dataFormatter.formatCellValue(row.getCell(8));//民族 if (!ObjectUtils.isEmpty(nation)) { user.setNation(nation); } String card = dataFormatter.formatCellValue(row.getCell(9));//身份证 if (!ObjectUtils.isEmpty(card)) { user.setIdCard(card); } String photo = dataFormatter.formatCellValue(row.getCell(10));//照片 if (!ObjectUtils.isEmpty(photo)) { user.setHeadImage(photo); } String timeGroup = dataFormatter.formatCellValue(row.getCell(11));//常规时间组 if (!ObjectUtils.isEmpty(timeGroup)) { Optional groupData = timeGroups.stream().filter(e -> e.getName().equals(timeGroup)).findFirst(); if (groupData != null && groupData.isPresent()) { user.setTimeGroupId(groupData.get().getId()); } } String address = dataFormatter.formatCellValue(row.getCell(12));//住址 if (!ObjectUtils.isEmpty(address)) { user.setAddress(address); } user.setIsCancel(eLogOff.Unlogout.getValue()); result.add(user); } } } } } catch (Exception e) { return CommonResult.fail("请按模板格式导入数据"); } return CommonResult.ok(result); } /** * Xls文件读取方法 * * @param inputStream 文件流 * @return * @throws IOException */ private CommonResult> readXls(InputStream inputStream) throws IOException { List idCards = new ArrayList<>(); List cardNos = new ArrayList<>(); List result = new ArrayList<>(); HSSFWorkbook sheets = new HSSFWorkbook(inputStream); List departments = smartDepartmentService.list(null); List grades = smartGradeService.list(null); //年级 List classs = smartClassService.list(null);//班级 List timeGroups = smartTimeGroupService.queryTimeGroups();//时间组 //读取第一张sheet HSSFSheet sheetAt = sheets.getSheetAt(0); DataFormatter dataFormatter = new DataFormatter(); //region 判断是老师还是学生导入 boolean isTeacher = false; HSSFRow checkRow = sheetAt.getRow(0); if (checkRow != null) { String firstCow = dataFormatter.formatCellValue(checkRow.getCell(0));//第一列 学生是年级 老师是 学校名称 if (firstCow.equals("学校名称")) { isTeacher = true; } } //endregion try { for (int rowNum = 0; rowNum < sheetAt.getLastRowNum() + 1; rowNum++) { HSSFRow row = sheetAt.getRow(rowNum); if (row != null) { if (!isTeacher) { //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。 //所以先使用setCellType()方法先将该单元格的类型设置为STRING //然后poi会根据字符串读取它 //标题 校验 if (rowNum == 0) { String schoolGrade = dataFormatter.formatCellValue(row.getCell(0));//年级 if (!schoolGrade.equals("年级")) { return CommonResult.fail("导入数据第一列为年级"); } String schoolClass = dataFormatter.formatCellValue(row.getCell(1));//班级 if (!schoolClass.equals("班级")) { return CommonResult.fail("导入数据第一列为班级"); } String cardNo = dataFormatter.formatCellValue(row.getCell(2));//学号 if (!cardNo.equals("学号")) { return CommonResult.fail("导入数据第二列为学号"); } String name = dataFormatter.formatCellValue(row.getCell(3));//姓名 if (!name.equals("姓名")) { return CommonResult.fail("导入数据第三列为姓名"); } String sex = dataFormatter.formatCellValue(row.getCell(4));//性别 if (!sex.equals("性别")) { return CommonResult.fail("导入数据第四列为性别"); } String nation = dataFormatter.formatCellValue(row.getCell(5));//民族 if (!nation.equals("民族")) { return CommonResult.fail("导入数据第五列为民族"); } String cardId = dataFormatter.formatCellValue(row.getCell(6));//身份证 if (!cardId.equals("身份证")) { return CommonResult.fail("导入数据第六列为身份证"); } String headImage = dataFormatter.formatCellValue(row.getCell(7));//照片 if (!headImage.equals("照片")) { return CommonResult.fail("导入数据第七列为照片"); } String timeGroup = dataFormatter.formatCellValue(row.getCell(8));//常规时间组 if (!timeGroup.equals("常规时间组")) { return CommonResult.fail("导入数据第八列为常规时间组"); } String address = dataFormatter.formatCellValue(row.getCell(9));//住址 if (!address.equals("住址")) { return CommonResult.fail("导入数据第九列为住址"); } String phone = dataFormatter.formatCellValue(row.getCell(10));//联系电话 if (!phone.equals("联系电话")) { return CommonResult.fail("导入数据第十列为联系电话"); } String family = dataFormatter.formatCellValue(row.getCell(11));//家属 if (!family.equals("家属")) { return CommonResult.fail("导入数据第十一列为家属"); } String familyShip = dataFormatter.formatCellValue(row.getCell(12));//家属与本人关系 if (!familyShip.equals("家属与本人关系")) { return CommonResult.fail("导入数据第十二列为家属与本人关系"); } String phoneTwo = dataFormatter.formatCellValue(row.getCell(13));//联系电话2 if (!phoneTwo.equals("联系电话2")) { return CommonResult.fail("导入数据第十三列为联系电话2"); } String familyTwo = dataFormatter.formatCellValue(row.getCell(14));//家属2 if (!familyTwo.equals("家属2")) { return CommonResult.fail("导入数据第十四列为家属2"); } String familyShipTwo = dataFormatter.formatCellValue(row.getCell(15));//家属与本人关系2 if (!familyShipTwo.equals("家属与本人关系2")) { return CommonResult.fail("导入数据第十五列为家属与本人关系2"); } } else { SmartUser user = new SmartUser(); String name = dataFormatter.formatCellValue(row.getCell(3)); // if (ObjectUtils.isEmpty(name)) { // return CommonResult.fail("第" + (rowNum + 1) + "条数据的名称不能为空"); // } if (ObjectUtils.isEmpty(name)) { continue; } String schoolGrade = dataFormatter.formatCellValue(row.getCell(0));//年级 if (ObjectUtils.isEmpty(schoolGrade)) { return CommonResult.fail(name + "的年级不能为空"); } String schoolClass = dataFormatter.formatCellValue(row.getCell(1));//班级 if (ObjectUtils.isEmpty(schoolClass)) { return CommonResult.fail(name + "的班级不能为空"); } //不判断重复性 因为会出现双胞胎 String phone = dataFormatter.formatCellValue(row.getCell(10)); // if (!ObjectUtils.isEmpty(phone)) { // phones.add(phone); // } // if (phones.stream().distinct().count() != phones.size()) { // return CommonResult.fail("导入的Excel中,联系电话:" + phone + "存在重复数据"); // } //性别是否为空判断 String sex = dataFormatter.formatCellValue(row.getCell(4)); if (ObjectUtils.isEmpty(sex)) { return CommonResult.fail(name + "的性别不能为空"); } //家庭住址是否为空判断 String address = dataFormatter.formatCellValue(row.getCell(9)); //民族是否为空判断 String nation = dataFormatter.formatCellValue(row.getCell(5)); if (ObjectUtils.isEmpty(nation)) { return CommonResult.fail(name + "的民族不能为空"); } //部门是否为空判断 String department = dataFormatter.formatCellValue(row.getCell(1)).replace("年级", "") + "学生"; if (ObjectUtils.isEmpty(department)) { return CommonResult.fail(name + "的部门不能为空"); } Integer departmentId = null; Optional departModel = departments.stream().filter(e -> e.getName().equals(department)).findFirst(); if (departModel != null && departModel.isPresent()) { departmentId = departModel.get().getId(); } else { departmentId = 1; } //学号重复判断 String cardNo = dataFormatter.formatCellValue(row.getCell(2)); if (!ObjectUtils.isEmpty(cardNo)) { cardNos.add(cardNo); } if (cardNos.stream().distinct().count() != cardNos.size()) { return CommonResult.fail("导入的Excel中," + name + "的学号:" + cardNo + "存在重复数据"); } //身份证重复判断 String idCard = dataFormatter.formatCellValue(row.getCell(6)); if (!ObjectUtils.isEmpty(idCard)) { idCards.add(idCard); } if (idCards.stream().distinct().count() != idCards.size()) { return CommonResult.fail("导入的Excel中," + name + "的身份证号:" + idCard + "存在重复数据"); } user.setCardNo(cardNo == null ? "" : cardNo); user.setName(name == null ? "" : name); user.setIdentityId(eIdentityStatu.Student.getValue()); user.setIdCard(idCard == null ? "" : idCard); user.setSexId(sex == null ? eSexStatu.Man.getValue() : eSexStatu.integerOf(sex)); user.setDepartmentId(departmentId); String cellImage = dataFormatter.formatCellValue(row.getCell(7)); user.setHeadImage(cellImage); user.setDormitoryNumber(""); String grade = schoolGrade == null ? "" : schoolGrade; Optional oGrade = grades.stream().filter(e -> e.getName().equals(grade)).findFirst(); if (oGrade != null && oGrade.isPresent()) { Integer gradeId = oGrade.get().getId(); user.setGrade(String.valueOf(gradeId)); Optional 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(""); user.setPhone(""); user.setAffiliate(""); user.setTitle(""); user.setAddress(address == null ? "" : address); user.setNation(nation == null ? "" : nation); user.setOfStudent(""); user.setGraduate(""); user.setDuties(null); String timeGroup = dataFormatter.formatCellValue(row.getCell(8)); Optional groupData = timeGroups.stream().filter(e -> e.getName().equals(timeGroup)).findFirst(); if (groupData != null && groupData.isPresent()) { user.setTimeGroupId(groupData.get().getId()); } else { user.setTimeGroupId(0); } user.setIsCancel(eLogOff.Unlogout.getValue()); result.add(user); //部门是否为空判断 String familyDepartment = dataFormatter.formatCellValue(row.getCell(1)).replace("年级", "") + "家长"; Integer familyDepartmentId = null; Optional familyDepartModel = departments.stream().filter(e -> e.getName().equals(familyDepartment)).findFirst(); if (familyDepartModel != null && familyDepartModel.isPresent()) { familyDepartmentId = familyDepartModel.get().getId(); } else { familyDepartmentId = 16; } //region 家属 if (!ObjectUtils.isEmpty(phone)) { if (phone.length() != 11) { return CommonResult.fail(name + "的学生家长手机号长度不符合标准"); } SmartUser familyOne = new SmartUser(); String family = dataFormatter.formatCellValue(row.getCell(11));//家属 familyOne.setName(!ObjectUtils.isEmpty(family) ? family : "家长"); familyOne.setDepartmentId(familyDepartmentId); familyOne.setPhone(phone); familyOne.setIdentityId(eIdentityStatu.Parent.getValue()); familyOne.setSexId(eSexStatu.Man.getValue()); familyOne.setIsCancel(eLogOff.Unlogout.getValue()); familyOne.setAffiliate(user.getCardNo()); String familyShip = dataFormatter.formatCellValue(row.getCell(12));//家属与本人关系 familyOne.setShip(familyShip == null ? "其他" : familyShip); result.add(familyOne); } String phoneTwo = dataFormatter.formatCellValue(row.getCell(13));//联系电话2 if (!ObjectUtils.isEmpty(phoneTwo)) { if (phoneTwo.length() != 11) { return CommonResult.fail(name + "的学生家长手机号长度不符合标准"); } SmartUser familyTwo = new SmartUser(); String familyNameTwo = dataFormatter.formatCellValue(row.getCell(14));//家属2 familyTwo.setName(!ObjectUtils.isEmpty(familyNameTwo) ? familyNameTwo : "家长"); familyTwo.setDepartmentId(familyDepartmentId); familyTwo.setPhone(phoneTwo == null ? "" : phoneTwo); familyTwo.setIdentityId(eIdentityStatu.Parent.getValue()); familyTwo.setSexId(eSexStatu.Man.getValue()); familyTwo.setIsCancel(eLogOff.Unlogout.getValue()); familyTwo.setAffiliate(user.getCardNo()); String familyShipTwo = dataFormatter.formatCellValue(row.getCell(15));//家属与本人关系2 familyTwo.setShip(familyShipTwo == null ? "其他" : familyShipTwo); result.add(familyTwo); } //endregion //希沃不允许一个学生家长的两个手机号重复 所以做一个重复性判断 if (!ObjectUtils.isEmpty(phone) && !ObjectUtils.isEmpty(dataFormatter.formatCellValue(row.getCell(13)))) { if (phone.equals(dataFormatter.formatCellValue(row.getCell(13)))) { return CommonResult.fail(name + "的学生家长手机号不可重复"); } } //endregion } } else { //教师导入 //使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。 //所以先使用setCellType()方法先将该单元格的类型设置为STRING //然后poi会根据字符串读取它 //标题 校验 if (rowNum == 0) { String schoolName = dataFormatter.formatCellValue(row.getCell(0));//学校名称 if (!schoolName.equals("学校名称")) { return CommonResult.fail("导入数据第一列为学校名称"); } String departmentNo = dataFormatter.formatCellValue(row.getCell(1));//部门编码 if (!departmentNo.equals("部门编码")) { return CommonResult.fail("导入数据第二列为部门编码"); } String departmentName = dataFormatter.formatCellValue(row.getCell(2));//部门名称 if (!departmentName.equals("部门名称")) { return CommonResult.fail("导入数据第三列为部门名称"); } String teacherNo = dataFormatter.formatCellValue(row.getCell(3));//教师编码 if (!teacherNo.equals("教师编码")) { return CommonResult.fail("导入数据第四列为教师编码"); } String name = dataFormatter.formatCellValue(row.getCell(4));//姓名 if (!name.equals("姓名")) { return CommonResult.fail("导入数据第五列为姓名"); } String sex = dataFormatter.formatCellValue(row.getCell(5));//性别 if (!sex.equals("性别")) { return CommonResult.fail("导入数据第六列为性别"); } String phone = dataFormatter.formatCellValue(row.getCell(6));//联系电话 if (!phone.equals("联系电话")) { return CommonResult.fail("导入数据第七列为联系电话"); } String schoolClass = dataFormatter.formatCellValue(row.getCell(7));//管理班级 if (!schoolClass.equals("管理班级")) { return CommonResult.fail("导入数据第八列为身份证"); } String nation = dataFormatter.formatCellValue(row.getCell(8));//民族 if (!nation.equals("民族")) { return CommonResult.fail("导入数据第九列为民族"); } String card = dataFormatter.formatCellValue(row.getCell(9));//身份证 if (!card.equals("身份证(允许为空)")) { return CommonResult.fail("导入数据第十列为身份证"); } String photo = dataFormatter.formatCellValue(row.getCell(10));//照片 if (!photo.equals("照片")) { return CommonResult.fail("导入数据第十一列为照片"); } String timeGroup = dataFormatter.formatCellValue(row.getCell(11));//常规时间组 if (!timeGroup.equals("常规时间组")) { return CommonResult.fail("导入数据第十二列为常规时间组"); } String address = dataFormatter.formatCellValue(row.getCell(12));//住址 if (!address.equals("住址")) { return CommonResult.fail("导入数据第十三列为住址"); } } else { SmartUser user = new SmartUser(); user.setIdentityId(eIdentityStatu.Teacher.getValue()); String name = dataFormatter.formatCellValue(row.getCell(4));//姓名 if (ObjectUtils.isEmpty(name)) { continue; } user.setName(name); String sex = dataFormatter.formatCellValue(row.getCell(5));//性别 user.setSexId(sex == null ? eSexStatu.Man.getValue() : eSexStatu.integerOf(sex)); String departmentName = dataFormatter.formatCellValue(row.getCell(2));//部门名称 if (ObjectUtils.isEmpty(departmentName)) { return CommonResult.fail(name + "的部门名称不能为空"); } String departmentNo = dataFormatter.formatCellValue(row.getCell(1));//部门编码 if (ObjectUtils.isEmpty(departmentNo)) { return CommonResult.fail(name + "的部门编码不能为空"); } Optional oDepartment = departments.stream().filter(e -> e.getBsDepartmentNo().equals(departmentNo)).findFirst(); if (!(oDepartment != null && oDepartment.isPresent())) { return CommonResult.fail(departmentName + "部门数据在系统中不存在"); } user.setDepartmentId(oDepartment.get().getId()); if (departmentName.equals("班主任")) { String schoolClass = dataFormatter.formatCellValue(row.getCell(7));//班级 if (ObjectUtils.isEmpty(schoolClass)) { return CommonResult.fail(name + "的管理班级不能为空"); } //班级和年级 Optional oClass = classs.stream().filter(e -> e.getName().equals(schoolClass)).findFirst(); if (!(oClass != null && oClass.isPresent())) { return CommonResult.fail(schoolClass + "的班级数据在系统中不存在"); } user.setSchoolClass(oClass.get().getId()); user.setGrade(String.valueOf(oClass.get().getGradeId())); user.setDuties(eDuties.ClassTeacher.getValue()); } else { user.setDuties(5);//任课老师 } String teacherNo = dataFormatter.formatCellValue(row.getCell(3));//教师编码 if (!ObjectUtils.isEmpty(teacherNo)) { user.setBsStaffCode(teacherNo); } String phone = dataFormatter.formatCellValue(row.getCell(6));//联系电话 if (ObjectUtils.isEmpty(phone)) { return CommonResult.fail(name + "的手机号不能为空"); } user.setCardNo(phone); user.setPhone(phone); user.setXwTeacherCode(phone); String nation = dataFormatter.formatCellValue(row.getCell(8));//民族 if (!ObjectUtils.isEmpty(nation)) { user.setNation(nation); } String card = dataFormatter.formatCellValue(row.getCell(9));//身份证 if (!ObjectUtils.isEmpty(card)) { user.setIdCard(card); } String photo = dataFormatter.formatCellValue(row.getCell(10));//照片 if (!ObjectUtils.isEmpty(photo)) { user.setHeadImage(photo); } String timeGroup = dataFormatter.formatCellValue(row.getCell(11));//常规时间组 if (!ObjectUtils.isEmpty(timeGroup)) { Optional groupData = timeGroups.stream().filter(e -> e.getName().equals(timeGroup)).findFirst(); if (groupData != null && groupData.isPresent()) { user.setTimeGroupId(groupData.get().getId()); } } String address = dataFormatter.formatCellValue(row.getCell(12));//住址 if (!ObjectUtils.isEmpty(address)) { user.setAddress(address); } user.setIsCancel(eLogOff.Unlogout.getValue()); result.add(user); } } } } } catch (Exception e) { return CommonResult.fail("请按模板格式导入数据"); } return CommonResult.ok(result); } @Override @DESRespondSecret(validated = true) public CommonResult timeGroups() throws Exception { List result = new ArrayList<>(); //region 获取百胜的时间组 String appId = controlConfig.getAppId(); String schoolno = controlConfig.getSchoolCode(); String timestamp = TimeExchange.DateNowTimeStamo(); String appSecret = controlConfig.getAppSecret(); String url = controlConfig.getUrl() + "timegroup/searchtimegroup"; JSONObject jsonobject = new JSONObject(); jsonobject.put("appid", appId); String str = "{\"pageindex\":\"" + 1 + "\",\"pagesize\":\"" + 20 + "\"}"; String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "UTF-8"); jsonobject.put("data", aesStr); jsonobject.put("schoolno", schoolno); jsonobject.put("timestamp", timestamp); String md5Str = "appid=" + appId + "&data={\"pageindex\":\"" + 1 + "\",\"pagesize\":\"" + 20 + "\"}" + "&schoolno=" + schoolno + "×tamp=" + timestamp + "&key=" + appSecret; String sign = CommonUtil.MD5(md5Str); //sign签名 jsonobject.put("sign", sign); //返回的结果中 code为1表示成功 String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString()); ObjectMapper objectMapper = new ObjectMapper(); BsTimeGroupVo bsDataResult = objectMapper.readValue(bsResult, BsTimeGroupVo.class); if (!bsResult.contains("查询成功")) { return CommonResult.fail(bsDataResult.getMsg()); } // URL解码 String decodedUrl = URLDecoder.decode(bsDataResult.getData(), "UTF-8"); BsTimeGroupNoVo timeGroupNos = objectMapper.readValue(decrypt(decodedUrl, controlConfig.getAppSecret()), BsTimeGroupNoVo.class); //endregion List groups = smartTimeGroupService.queryTimeGroups(); List newGroups = new ArrayList<>(); List oldGroups = new ArrayList<>(); if (timeGroupNos.getData() != null) { for (BsTimeGroupNoListVo timeGroup : timeGroupNos.getData()) { Optional oGroup = groups == null ? null : groups.stream().filter(e -> e.getBsno().equals(timeGroup.getTg_no())).findFirst(); if (oGroup != null && oGroup.isPresent()) { SmartTimeGroup oldData = new SmartTimeGroup(); oldData.setId(oGroup.get().getId()); oldData.setBsno(timeGroup.getTg_no()); oldData.setName(timeGroup.getTg_name()); oldData.setRemark(timeGroup.getTg_remark()); oldGroups.add(oldData); } else { SmartTimeGroup newData = new SmartTimeGroup(); newData.setBsno(timeGroup.getTg_no()); newData.setName(timeGroup.getTg_name()); newData.setRemark(timeGroup.getTg_remark()); newGroups.add(newData); } } } if (oldGroups != null && oldGroups.size() > 0) { boolean updateGroup = smartTimeGroupService.updateSmartTimeGroups(oldGroups); if (!updateGroup) { return CommonResult.fail("获取时间组失败"); } } if (newGroups != null && newGroups.size() > 0) { boolean insertGroup = smartTimeGroupService.insertSmartTimeGroups(newGroups); if (!insertGroup) { return CommonResult.fail("获取时间组失败"); } } //oldData集合不在newDatas集合中的内容 List newDatas = oldGroups.stream().map(SmartTimeGroup::getId).collect(Collectors.toList()); List oldDatas = groups.stream().map(SmartTimeGroup::getId).collect(Collectors.toList()); List deleteIds = oldDatas.stream().filter(item -> !newDatas.contains(item)).collect(Collectors.toList());//需要删除的id if (deleteIds.size() > 0) { int deleted = smartTimeGroupService.deletedTimeGroupByIds(deleteIds); if (deleted <= 0) { throw new Exception("获取时间组失败!"); } } List groupDatas = smartTimeGroupService.queryTimeGroups(); for (SmartTimeGroup groupData : groupDatas) { TimeGroupVo data = new TimeGroupVo(); data.setId(groupData.getId()); data.setName(groupData.getName()); data.setRemark(groupData.getRemark()); result.add(data); } return CommonResult.ok(result); } /** * 新增用户 * * @param isur 用户数据 * @param bindingResult * @return */ @Override @DESRespondSecret(validated = true) public CommonResult insertSmartUser(insertSmartUserRequest isur, BindingResult bindingResult) throws Exception { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } int useBs = 1; int useXw = 1; //重复性判断 int existCount = smartUserService.querySmartUserByCardNo(isur.getCardNo()); if (existCount > 0) { return CommonResult.fail("当前学号已存在,请勿重复添加"); } SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); SmartUser su = new SmartUser(); su.setTimeGroupId(isur.getTimeGroupId()); su.setCardNo(isur.getCardNo()); su.setName(isur.getName()); su.setIdentityId(isur.getIdentityId()); su.setIdCard(isur.getIdCard()); su.setSexId(isur.getSexId()); su.setDepartmentId(isur.getDepartmentId()); su.setHeadImage(isur.getHeadImage()); su.setGrade(isur.getGrade()); su.setCollege(isur.getCollege()); su.setSpeciality(isur.getSpeciality()); su.setSchoolClass(isur.getSchoolClass()); su.setCampus(isur.getCampus()); su.setDormitoryNumber(isur.getDormitoryNumber()); su.setPhone(isur.getPhone()); su.setAffiliate(StringUtils.join(isur.getAffiliate(), ",")); su.setTitle(isur.getTitle()); su.setAddress(isur.getAddress()); su.setNation(isur.getNation()); su.setOfStudent(isur.getOfStudent()); su.setGraduate(isur.getGraduate()); su.setDuties(isur.getDuties()); su.setIsCancel(eLogOff.Unlogout.getValue()); //region 人员信息加入到第三方api //要将用户数据加入到希沃和百胜中 //希沃和百胜的老师、学生数据添加是不一样的,所以按身份添加 if (isur.getIdentityId().intValue() == eIdentityStatu.Parent.getValue()) {//家长 //region 家长参数必填判断:手机号 if (isur.getPhone() == null) { return CommonResult.fail("家长手机号不能为空"); } //endregion //拿到被关联学生的信息去获取对应的卡号 //有多个学生就循环学生 if (isur.getAffiliate() == null) { return CommonResult.fail("被关联人不能为空"); } if (isur.getAffiliate().size() <= 0) { return CommonResult.fail("被关联人不能为空"); } List studentDatas = smartUserService.getSmartUserIds(isur.getAffiliate()); //region 希沃新增编辑学生家长信息 if (useXw == 1) { CommonResult insertOrUpdateStudent = insertOrUpdateStudentParent(seewoClient, studentDatas, isur.getName(), isur.getPhone(), true); if (!insertOrUpdateStudent.isSuccess()) { return CommonResult.fail(insertOrUpdateStudent.getMessage()); } } //endregion } else if (isur.getIdentityId().intValue() == eIdentityStatu.Student.getValue()) {//学生 //region 学生参数必填判断:年级、班级 if (isur.getGrade() == null) { return CommonResult.fail("学生年级不能为空"); } if (isur.getSchoolClass() == null) { return CommonResult.fail("学生班级不能为空"); } //endregion //获取班级Uid SmartClass classData = smartClassService.getSmartClassById(isur.getSchoolClass()); if (classData == null) { return CommonResult.fail("班级数据无效,新增失败"); } SmartGrade gradeData = smartGradeService.querySmartGradeById(Integer.valueOf(isur.getGrade())); if (gradeData == null) { return CommonResult.fail("年级数据无效,新增失败"); } //region 希沃新增学生信息 if (useXw == 1) { CommonResult insertStudent = SeewoInsertStudent(seewoClient, isur.getName(), isur.getCardNo(), isur.getSexId(), isur.getPhone(), classData.getClassUid()); if (!insertStudent.isSuccess()) { return CommonResult.fail(insertStudent.getMessage()); } su.setXwStudentUid(insertStudent.getData()); //上传图片 List photoList = new ArrayList<>(); PhotoServiceSavePhotosParam.ThirdSavePhotoQuery photo = new PhotoServiceSavePhotosParam.ThirdSavePhotoQuery(); photo.setPhotoUrl(su.getHeadImage()); photo.setUserCode(su.getCardNo()); photoList.add(photo); CommonResult result = SeewoInsertBatchPhoto(seewoClient, photoList, eSeewoUserType.Student.getValue()); if (!result.isSuccess()) { return result; } } //endregion //region 百胜新增学生信息 if (useBs == 1) { /** * 学生数据的有效期是到毕业年份的8月31日 */ String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); String endTime = queryGraduationYear(gradeData.getGradeNo()); CommonResult insertBsStudent = bsInsertStudent(isur.getName(), isur.getCardNo(), isur.getSexId(), isur.getHeadImage(), isur.getTimeGroupId(), classData.getBsClassNo(), startTime, endTime); if (!insertBsStudent.isSuccess()) { return CommonResult.fail(insertBsStudent.getMessage()); } su.setBsStudentNo(insertBsStudent.getData()); } //endregion } else if (isur.getIdentityId().intValue() == eIdentityStatu.Teacher.getValue()) {//老师 //region 老师参数必填判断:职称、手机号 if (isur.getTitle() == null) { return CommonResult.fail("老师职称不能为空"); } if (isur.getPhone() == null) { return CommonResult.fail("老师手机号不能为空"); } //endregion //region 希沃添加教师数据 if (useXw == 1) { CommonResult insertTeacher = SeewoInsertTeacher(seewoClient, isur.getPhone(), isur.getName(), isur.getHeadImage()); if (!insertTeacher.isSuccess()) { return CommonResult.fail(insertTeacher.getMessage()); } su.setXwTeacherCode(insertTeacher.getData()); //上传图片 List photoList = new ArrayList<>(); PhotoServiceSavePhotosParam.ThirdSavePhotoQuery photo = new PhotoServiceSavePhotosParam.ThirdSavePhotoQuery(); photo.setPhotoUrl(su.getHeadImage()); photo.setUserCode(su.getPhone()); photoList.add(photo); CommonResult result = SeewoInsertBatchPhoto(seewoClient, photoList, eSeewoUserType.Teacher.getValue()); if (!result.isSuccess()) { return result; } } //endregion if (isur.getDuties().intValue() == eDuties.ClassTeacher.getValue()) { //获取班级Uid SmartClass classData = smartClassService.getSmartClassById(isur.getSchoolClass()); if (classData == null) { return CommonResult.fail("班级数据无效,新增失败"); } //region 将班主任推送到希沃 if (useXw == 1) { CommonResult pushMaster = SeewoPushMaster(seewoClient, isur.getPhone(), classData.getClassUid()); if (!pushMaster.isSuccess()) { return CommonResult.fail(pushMaster.getMessage()); } } //endregion } SmartDepartment departmentData = smartDepartmentService.getSmartById(isur.getDepartmentId()); if (departmentData == null) { return CommonResult.fail("部门数据无效,新增教师失败"); } String departmentNo = departmentData.getBsDepartmentNo();//"DT1701845086538710"; if (departmentNo == null) { return CommonResult.fail("百胜部门编号为空,新增教师失败"); } //region 百胜添加教师数据 if (useBs == 1) { /** * 教师数据的有效期是20年 */ String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); String endTime = TimeExchange.addYear(20); CommonResult insertBsTeacher = bsInsertTeacher(su, departmentNo, startTime, endTime); if (!insertBsTeacher.isSuccess()) { return CommonResult.fail(insertBsTeacher.getMessage()); } su.setBsStaffCode(insertBsTeacher.getData()); } //endregion } //endregion //最后都要把数据加入到数据库中 int result = smartUserService.insertSmartUser(su); //新增用户得将用户信息通过接口推送到希沃、百胜 return result > 0 ? CommonResult.ok("添加成功") : CommonResult.fail("添加失败"); } /** * 更新用户 * * @param usur 更新用户数据 * @param bindingResult * @return */ @Override @DESRespondSecret(validated = true) public CommonResult updateSmartUserById(updateSmartUserRequest usur, BindingResult bindingResult) throws Exception { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } //region 参数判断 if (usur.getIdentityId().intValue() == eIdentityStatu.Student.getValue()) { if (usur.getTimeGroupId() == null) { return CommonResult.fail("学生时间组不能为空"); } if (usur.getCardNo() == null) { return CommonResult.fail("学生编号不能为空"); } if (usur.getHeadImage() == null) { return CommonResult.fail("学生人脸照片不能为空"); } } //endregion int useXw = 1; int useBs = 1; //更新的同时将百胜用户信息同步过去或者同步过来? SmartUser su = smartUserService.getSmartById(usur.getId()); if (su == null) { return CommonResult.fail("用户数据已失效,修改失败!"); } //是否转换身份 boolean changeIdentity = false; Integer oldIdentity = null; String oldAffiliate = su.getAffiliate(); Integer oldSchoolClass = su.getSchoolClass(); String oldStaffNo = su.getBsStaffCode(); String oldCardNo = su.getCardNo(); if (usur.getIdentityId().intValue() != su.getIdentityId().intValue()) { changeIdentity = true; oldIdentity = su.getIdentityId().intValue(); } SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); su.setTimeGroupId(usur.getTimeGroupId()); su.setCardNo(usur.getCardNo()); su.setName(usur.getName()); su.setIdentityId(usur.getIdentityId()); su.setIdCard(usur.getIdCard()); su.setSexId(usur.getSexId()); su.setDepartmentId(usur.getDepartmentId()); su.setHeadImage(usur.getHeadImage()); su.setGrade(usur.getGrade()); su.setCollege(usur.getCollege()); su.setSpeciality(usur.getSpeciality()); su.setSchoolClass(usur.getSchoolClass()); su.setCampus(usur.getCampus()); su.setDormitoryNumber(usur.getDormitoryNumber()); su.setPhone(usur.getPhone()); su.setAffiliate(StringUtils.join(usur.getAffiliate(), ",")); su.setTitle(usur.getTitle()); su.setAddress(usur.getAddress()); su.setNation(usur.getNation()); su.setOfStudent(usur.getOfStudent()); su.setGraduate(usur.getGraduate()); 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 studentDatas = smartUserService.getSmartUserIds(usur.getAffiliate()); if (!changeIdentity) { //region 希沃新增编辑学生家长信息 if (useXw == 1) { //学生与家长列表,最大100条 CommonResult insertOrUpdateResult = insertOrUpdateStudentParent(seewoClient, studentDatas, usur.getName(), usur.getPhone(), false); if (!insertOrUpdateResult.isSuccess()) { return CommonResult.fail(insertOrUpdateResult.getMessage()); } } //endregion } else { if (oldIdentity.intValue() == eIdentityStatu.Student.getValue()) { //region 希沃删除学生 //获取班级Uid SmartClass classData = smartClassService.getSmartClassById(oldSchoolClass); if (classData == null) { return CommonResult.fail("班级数据无效,更新失败"); } if (useXw == 1) { CommonResult deleteStudent = SeewoDeleteStudent(seewoClient, classData.getClassUid(), oldCardNo); if (!deleteStudent.isSuccess()) { return CommonResult.fail(deleteStudent.getMessage()); } } //endregion //region 百胜删除学生 if (useBs == 1) { CommonResult deleteBsStudent = bsDeleteStudent(su); if (!deleteBsStudent.isSuccess()) { return CommonResult.fail(deleteBsStudent.getMessage()); } } //endregion } else if (oldIdentity.intValue() == eIdentityStatu.Teacher.getValue()) { //获取班级Uid SmartClass classData = smartClassService.getSmartClassById(oldSchoolClass); if (classData == null) { return CommonResult.fail("班级数据无效,更新失败"); } //region 希沃删除教师 if (useXw == 1) { CommonResult deleteTeacher = SeewoDeleteTeacher(seewoClient, su.getPhone()); if (!deleteTeacher.isSuccess()) { return CommonResult.fail(deleteTeacher.getMessage()); } } //endregion //region 希沃删除班主任 if (useXw == 1) { CommonResult deleteTeacherMaster = SeewoDeleteTeacherMaster(seewoClient, classData.getClassUid(), su.getPhone()); if (deleteTeacherMaster.isSuccess()) { return CommonResult.fail(deleteTeacherMaster.getMessage()); } } //endregion //region 百胜删除教师 if (useBs == 1) { CommonResult bsDeleteTeacher = bsDeleteTeacher(oldStaffNo); if (!bsDeleteTeacher.isSuccess()) { return CommonResult.fail(bsDeleteTeacher.getMessage()); } } //endregion } //region 希沃新增编辑学生家长信息 if (useXw == 1) { List indexs = smartFamilyIndexService.querySmartFamilyByCardNo(su.getCardNo()); if (indexs != null && indexs.size() >= 4) { return CommonResult.fail("绑定失败,希沃学生家长最多绑定四个家长"); } CommonResult insertOrUpdate = insertOrUpdateStudentParent(seewoClient, studentDatas, su.getName(), su.getPhone(), true); if (!insertOrUpdate.isSuccess()) { return CommonResult.fail(insertOrUpdate.getMessage()); } } //endregion } } else if (usur.getIdentityId().intValue() == eIdentityStatu.Student.getValue()) {//学生 //region 年级和班级不能为空 if (usur.getGrade() == null) { return CommonResult.fail("学生年级不能为空"); } if (usur.getSchoolClass() == null) { return CommonResult.fail("学生班级不能为空"); } //endregion //获取班级Uid SmartClass classData = smartClassService.getSmartClassById(su.getSchoolClass()); if (classData == null) { return CommonResult.fail("班级数据无效,更新失败"); } //获取年级Uid SmartGrade gradeData = smartGradeService.querySmartGradeById(Integer.valueOf(su.getGrade())); if (gradeData == null) { return CommonResult.fail("年级数据无效,新增失败"); } if (!changeIdentity) { //region 更新希沃学生信息 if (useXw == 1) { CommonResult updateStudent = SeewoUpdateStudent(seewoClient, su); if (!updateStudent.isSuccess()) { if (updateStudent.getMessage().equals("学生不存在")) { CommonResult insertStudent = SeewoInsertStudent(seewoClient, su.getName(), su.getCardNo(), su.getSexId(), su.getPhone(), classData.getClassUid()); if (!insertStudent.isSuccess()) { return CommonResult.fail(insertStudent.getMessage()); } } } //上传图片 List photoList = new ArrayList<>(); PhotoServiceSavePhotosParam.ThirdSavePhotoQuery photo = new PhotoServiceSavePhotosParam.ThirdSavePhotoQuery(); photo.setPhotoUrl(su.getHeadImage()); photo.setUserCode(su.getCardNo()); photoList.add(photo); CommonResult result = SeewoInsertBatchPhoto(seewoClient, photoList, eSeewoUserType.Student.getValue()); if (!result.isSuccess()) { return result; } } //endregion //region 更新百胜学生信息 if (useBs == 1) { /** * 学生数据的有效期是到毕业年份的8月31日 */ String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); String endTime = queryGraduationYear(gradeData.getGradeNo()); CommonResult updateBsStudent = bsUpdateStudent(su, startTime, endTime); if (!updateBsStudent.isSuccess()) { if (updateBsStudent.getMessage().equals("人员不存在或已删除")) { //region 百胜新增学生信息 CommonResult insertBsStudent = bsInsertStudent(usur.getName(), usur.getCardNo(), usur.getSexId(), usur.getHeadImage(), usur.getTimeGroupId(), classData.getBsClassNo(), startTime, endTime); if (!insertBsStudent.isSuccess()) { return CommonResult.fail(insertBsStudent.getMessage()); } su.setBsStudentNo(insertBsStudent.getData()); //endregion } else { return CommonResult.fail(updateBsStudent.getMessage()); } } } //endregion } else { //region 希沃新增学生信息 if (useXw == 1) { CommonResult insertStudent = SeewoInsertStudent(seewoClient, su.getName(), su.getCardNo(), su.getSexId(), su.getPhone(), classData.getClassUid()); if (!insertStudent.isSuccess()) { return CommonResult.fail(insertStudent.getMessage()); } else { su.setXwStudentUid(insertStudent.getData()); } //上传图片 List photoList = new ArrayList<>(); PhotoServiceSavePhotosParam.ThirdSavePhotoQuery photo = new PhotoServiceSavePhotosParam.ThirdSavePhotoQuery(); photo.setPhotoUrl(su.getHeadImage()); photo.setUserCode(su.getCardNo()); photoList.add(photo); CommonResult result = SeewoInsertBatchPhoto(seewoClient, photoList, eSeewoUserType.Student.getValue()); if (!result.isSuccess()) { return result; } } //endregion //region 百胜新增学生信息 if (useBs == 1) { /** * 学生数据的有效期是到毕业年份的8月31日 */ String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); String endTime = queryGraduationYear(gradeData.getGradeNo()); CommonResult insertBsStudent = bsInsertStudent(su.getName(), su.getCardNo(), su.getSexId(), su.getHeadImage(), su.getTimeGroupId(), classData.getBsClassNo(), startTime, endTime); if (insertBsStudent.isSuccess()) { su.setBsStudentNo(insertBsStudent.getData()); } else { //region 希沃删除学生 //百胜数据插入失败后需要把已插入到希沃的数据删除 CommonResult deleteStudent = SeewoDeleteStudent(seewoClient, classData.getClassUid(), oldCardNo); if (!deleteStudent.isSuccess()) { return CommonResult.fail(deleteStudent.getMessage()); } //endregion return CommonResult.fail("切换身份后," + insertBsStudent.getMessage() + ",百胜无法插入学生数据"); } } //endregion if (oldIdentity.intValue() == eIdentityStatu.Parent.getValue()) { List studentDatas = smartUserService.getSmartUserIds(Arrays.asList(oldAffiliate.split(","))); //region 希沃删除原有的家长关系 if (useXw == 1) { CommonResult deleteResult = deleteOldParentShip(seewoClient, studentDatas, su.getPhone()); if (!deleteResult.isSuccess()) { return CommonResult.fail(deleteResult.getMessage()); } smartFamilyIndexService.deleteSmartFamilyByPhone(su.getPhone()); } //endregion } else if (oldIdentity.intValue() == eIdentityStatu.Teacher.getValue()) { //获取班级Uid SmartClass oldClassData = smartClassService.getSmartClassById(oldSchoolClass); if (oldClassData == null) { return CommonResult.fail("班级数据无效,更新失败"); } //region 希沃删除教师 if (useXw == 1) { CommonResult deleteTeacher = SeewoDeleteTeacher(seewoClient, su.getPhone()); if (!deleteTeacher.isSuccess()) { return CommonResult.fail(deleteTeacher.getMessage()); } } //endregion //region 希沃删除班主任 if (useXw == 1) { CommonResult deleteMaster = SeewoDeleteTeacherMaster(seewoClient, oldClassData.getClassUid(), su.getPhone()); if (!deleteMaster.isSuccess()) { return CommonResult.fail(deleteMaster.getMessage()); } } //endregion //region 百胜删除教师 if (useBs == 1) { CommonResult deleteBsTeacher = bsDeleteTeacher(oldStaffNo); if (!deleteBsTeacher.isSuccess()) { return CommonResult.fail(deleteBsTeacher.getMessage()); } } //endregion } } } else if (usur.getIdentityId().intValue() == eIdentityStatu.Teacher.getValue()) {//教师 if (!changeIdentity) { //region 希沃更新教师数据 if (useXw == 1) { CommonResult updateTeacher = SeewoUpdateTeacher(seewoClient, su.getPhone(), su.getName(), su.getHeadImage()); if (!updateTeacher.isSuccess()) { return CommonResult.fail(updateTeacher.getMessage()); } su.setXwTeacherCode(updateTeacher.getData()); //上传图片 List photoList = new ArrayList<>(); PhotoServiceSavePhotosParam.ThirdSavePhotoQuery photo = new PhotoServiceSavePhotosParam.ThirdSavePhotoQuery(); photo.setPhotoUrl(su.getHeadImage()); photo.setUserCode(su.getPhone()); photoList.add(photo); CommonResult result = SeewoInsertBatchPhoto(seewoClient, photoList, eSeewoUserType.Teacher.getValue()); if (!result.isSuccess()) { return result; } } //endregion SmartDepartment departmentData = smartDepartmentService.getSmartById(su.getDepartmentId()); if (departmentData == null) { return CommonResult.fail("部门数据无效,更新教师失败"); } String departmentNo = departmentData.getBsDepartmentNo(); if (departmentNo == null) { return CommonResult.fail("百胜部门编号为空,新增教师失败"); } //region 百胜更新教师数据 if (useBs == 1) { /** * 教师数据的有效期是20年 */ String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); String endTime = TimeExchange.addYear(20); CommonResult bsUpdateTeacher = updateBsTeacher(su, departmentNo, startTime, endTime); if (!bsUpdateTeacher.isSuccess()) { return CommonResult.fail(bsUpdateTeacher.getMessage()); } su.setBsStaffCode(bsUpdateTeacher.getData()); } //endregion } else { if (oldIdentity.intValue() == eIdentityStatu.Parent.getValue()) { List studentDatas = smartUserService.getSmartUserIds(Arrays.asList(oldAffiliate.split(","))); //region 希沃删除原有的家长关系 if (useXw == 1) { CommonResult deleteOldShip = deleteOldParentShip(seewoClient, studentDatas, su.getPhone()); if (!deleteOldShip.isSuccess()) { return CommonResult.fail(deleteOldShip.getMessage()); } smartFamilyIndexService.deleteSmartFamilyByPhone(su.getPhone()); } //endregion } else if (oldIdentity.intValue() == eIdentityStatu.Student.getValue()) { //获取班级Uid SmartClass classData = smartClassService.getSmartClassById(oldSchoolClass); if (classData == null) { return CommonResult.fail("班级数据无效,更新失败"); } //region 希沃删除学生 if (useXw == 1) { CommonResult deleteStudent = SeewoDeleteStudent(seewoClient, classData.getClassUid(), oldCardNo); if (!deleteStudent.isSuccess()) { return CommonResult.fail(deleteStudent.getMessage()); } } //endregion //region 百胜删除学生 if (useBs == 1) { CommonResult deleteBsStudent = bsDeleteStudent(su); if (!deleteBsStudent.isSuccess()) { return CommonResult.fail(deleteBsStudent.getMessage()); } } //endregion } //region 希沃添加教师数据 if (useXw == 1) { CommonResult insertTeacher = SeewoInsertTeacher(seewoClient, su.getPhone(), su.getName(), su.getHeadImage()); if (!insertTeacher.isSuccess()) { return CommonResult.fail(insertTeacher.getMessage()); } su.setXwTeacherCode(insertTeacher.getData()); //上传图片 List photoList = new ArrayList<>(); PhotoServiceSavePhotosParam.ThirdSavePhotoQuery photo = new PhotoServiceSavePhotosParam.ThirdSavePhotoQuery(); photo.setPhotoUrl(su.getHeadImage()); photo.setUserCode(su.getPhone()); photoList.add(photo); CommonResult result = SeewoInsertBatchPhoto(seewoClient, photoList, eSeewoUserType.Teacher.getValue()); if (!result.isSuccess()) { return result; } } //endregion if (su.getDuties().intValue() == eDuties.ClassTeacher.getValue()) { //获取班级Uid SmartClass classData = smartClassService.getSmartClassById(su.getSchoolClass()); if (classData == null) { return CommonResult.fail("班级数据无效,新增失败"); } //region 将班主任推送到希沃 if (useXw == 1) { CommonResult pushMaster = SeewoPushMaster(seewoClient, su.getPhone(), classData.getClassUid()); if (!pushMaster.isSuccess()) { return CommonResult.fail(pushMaster.getMessage()); } } //endregion } SmartDepartment departmentData = smartDepartmentService.getSmartById(su.getDepartmentId()); if (departmentData == null) { return CommonResult.fail("部门数据无效,新增教师失败"); } String departmentNo = departmentData.getBsDepartmentNo();//"DT1701845086538710"; if (departmentNo == null) { return CommonResult.fail("百胜部门编号为空,新增教师失败"); } //region 百胜添加教师数据 if (useBs == 1) { /** * 教师数据的有效期是20年 */ String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); String endTime = TimeExchange.addYear(20); CommonResult insertBsTeacher = bsInsertTeacher(su, departmentNo, startTime, endTime); if (!insertBsTeacher.isSuccess()) { return CommonResult.fail(insertBsTeacher.getMessage()); } su.setBsStaffCode(insertBsTeacher.getData()); } //endregion } } int result = smartUserService.updateSmartUser(su); return result > 0 ? CommonResult.ok("修改成功") : CommonResult.fail("修改失败"); } //region 希沃增删改查方法 //希沃批量上传头像 如果当前用户已存在图片 会进行覆盖 public CommonResult SeewoInsertBatchPhoto(SeewoClient seewoClient, List photoList, Integer userType) throws JsonProcessingException { //region 希沃上传第三方图片信息 //初始化客户端 //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); PhotoServiceSavePhotosParam param = new PhotoServiceSavePhotosParam(); //请求体,MimeType为 application/json PhotoServiceSavePhotosParam.JSONRequestBody requestBody = PhotoServiceSavePhotosParam.JSONRequestBody.builder() .build(); param.setRequestBody(requestBody); // PhotoServiceSavePhotosParam.ThirdSavePhotoBatchQuery query = PhotoServiceSavePhotosParam.ThirdSavePhotoBatchQuery.builder() .appId(seewoConfig.getAppId()) .unitUid(seewoConfig.getSchoolId()) .userType(userType) .build(); requestBody.setQuery(query); // 图片保存列表 query.setPhotoList(photoList); PhotoServiceSavePhotosRequest request = new PhotoServiceSavePhotosRequest(param); // 该接口需要数据权限,请将授权资源id替换至下方,请妥善保管好授权资源id,避免泄露 // permissionId位置: 控制台 -> 应用详情 -> 我申请的 -> 已通过的接口 -> 调用范围 -> 审批信息 中查看授权资源的「学校id」或「区域id」 //request.setPermissionId(seewoConfig.getSchoolId()); logger.info("入参:" + request); logger.info("入参:" + JSON.toJSON(request)); //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 PhotoServiceSavePhotosResult result = seewoClient.invoke(request); logger.info("出参:" + result); ObjectMapper objectMapper = new ObjectMapper(); XwBodyVo xwResult = objectMapper.readValue(result.getBody(), XwBodyVo.class); if (!xwResult.getCode().equals("000000")) { return CommonResult.fail(result.getMessage()); } //endregion return CommonResult.ok("200", "图片添加成功"); } //region 希沃批量新增学生信息 public CommonResult> SeewoInsertBatchStudent (SeewoClient seewoClient, List students, String classUid) { //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(classUid) .build(); requestBody.setQuery(query); // 学生列表 query.setStudents(students); query.setInPlaceOld(false);// 是否删除旧学生再保存 param.setRequestBody(requestBody); StudentServiceBatchSaveClassStudentsRequest request = new StudentServiceBatchSaveClassStudentsRequest(param); logger.info("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 StudentServiceBatchSaveClassStudentsResult result = seewoClient.invoke(request); logger.info("出参:" + result); if (result == null) { return CommonResult.fail("希沃学生数据新增失败!"); } if (!result.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(result.getResponseBody().getMessage()); } return CommonResult.ok("200", "添加成功", result.getResponseBody().getData()); //endregion } //endregion //region 希沃新增学生信息 public CommonResult SeewoInsertStudent(SeewoClient seewoClient, String name, String cardNo, Integer sexId, String Phone, String classUid) { //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(classUid) .build(); requestBody.setQuery(query); // 学生列表 StudentServiceBatchSaveClassStudentsParam.StudentInfo students = StudentServiceBatchSaveClassStudentsParam.StudentInfo.builder() .studentName(name) .studentCode(cardNo) .gender(sexId) .phone(Phone == null ? "" : Phone) .build(); query.setStudents(java.util.Collections.singletonList(students)); query.setInPlaceOld(false);// 是否删除旧学生再保存 param.setRequestBody(requestBody); StudentServiceBatchSaveClassStudentsRequest request = new StudentServiceBatchSaveClassStudentsRequest(param); logger.info("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 StudentServiceBatchSaveClassStudentsResult result = seewoClient.invoke(request); logger.info("出参:" + result); if (result == null) { return CommonResult.fail("希沃学生数据新增失败!"); } if (!result.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(result.getResponseBody().getMessage()); } return CommonResult.ok("200", "添加成功", result.getResponseBody().getData().get(0).getUserUid()); //endregion } //endregion //region 希沃更新学生信息 public CommonResult SeewoUpdateStudent(SeewoClient seewoClient, SmartUser su) { //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); logger.info("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 StudentServiceUpdateStudentInfoResult result = seewoClient.invoke(request); logger.info("出参:" + result); if (result == null) { return CommonResult.fail("希沃学生数据更新失败!"); } if (!result.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(result.getResponseBody().getMessage()); } return CommonResult.ok("更新成功"); //endregion } //endregion //region 希沃删除学生 public CommonResult SeewoDeleteStudent(SeewoClient seewoClient, String ClassUid, String CardNo) { //初始化客户端 //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); StudentServiceRemoveClassStudentsParam deleteParam = new StudentServiceRemoveClassStudentsParam(); //请求体,MimeType为 application/json StudentServiceRemoveClassStudentsParam.JSONRequestBody deleteRequestBody = StudentServiceRemoveClassStudentsParam.JSONRequestBody.builder() .build(); deleteParam.setRequestBody(deleteRequestBody); //查询条件 StudentServiceRemoveClassStudentsParam.UnbindStudentQuery deleteQuery = StudentServiceRemoveClassStudentsParam.UnbindStudentQuery.builder() .appId(seewoConfig.getAppId()) .schoolUid(seewoConfig.getSchoolId()) .classUid(ClassUid) .studentCodes(java.util.Collections.singletonList(CardNo)) .build(); deleteRequestBody.setQuery(deleteQuery); deleteParam.setRequestBody(deleteRequestBody); StudentServiceRemoveClassStudentsRequest deleteRequest = new StudentServiceRemoveClassStudentsRequest(deleteParam); logger.info("入参:" + deleteRequest); //如果想要调用沙箱环境,请通过设置 deleteRequest 对象的 serverUrl 属性,如: //deleteRequest.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 StudentServiceRemoveClassStudentsResult deleteResult = seewoClient.invoke(deleteRequest); logger.info("出参:" + deleteResult); if (deleteResult == null) { return CommonResult.fail("希沃删除学生数据失败!"); } if (!deleteResult.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(deleteResult.getResponseBody().getMessage()); } return CommonResult.ok("删除成功"); } //endregion //region 希沃添加老师数据 //老师数据会根据手机号判断新增不新增 //手机号相同的情况下更新不新增 public CommonResult SeewoInsertTeacher(SeewoClient seewoClient, String phone, String name, String headImage) { //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(phone)//用户账号 .name(name)//用户名字 .accountType("phone")//账号类型 phone:手机号 email:邮箱 .teacherCode(phone)//教师工号 .photoUrl(headImage)//图片链接 .build(); query.setTeachers(java.util.Collections.singletonList(teachers)); param.setRequestBody(requestBody); TeacherServiceBatchSaveOrUpdateTeacherRequest request = new TeacherServiceBatchSaveOrUpdateTeacherRequest(param); logger.info("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 TeacherServiceBatchSaveOrUpdateTeacherResult result = seewoClient.invoke(request); logger.info("出参:" + result); if (result == null) { return CommonResult.fail("希沃教师数据新增失败!"); } if (!result.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(result.getResponseBody().getMessage()); } String teacherCode = phone; if (result.getResponseBody().getData() != null && result.getResponseBody().getData().size() > 0) { teacherCode = result.getResponseBody().getData().get(0).getTeacherCode(); } return CommonResult.ok("200", "操作成功", teacherCode); //endregion } //endregion //region 希沃批量添加老师数据 //老师数据会根据手机号判断新增不新增 //手机号相同的情况下更新不新增 public CommonResult> SeewoInsertBatchTeacher(SeewoClient seewoClient, List teachers) { //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); query.setTeachers(teachers); param.setRequestBody(requestBody); TeacherServiceBatchSaveOrUpdateTeacherRequest request = new TeacherServiceBatchSaveOrUpdateTeacherRequest(param); logger.info("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 TeacherServiceBatchSaveOrUpdateTeacherResult result = seewoClient.invoke(request); logger.info("出参:" + result); if (result == null) { return CommonResult.fail("希沃教师数据新增失败!"); } if (!result.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(result.getResponseBody().getMessage()); } if (result.getResponseBody().getData() != null && result.getResponseBody().getData().size() > 0) { return CommonResult.ok("200", "操作成功", result.getResponseBody().getData()); } return CommonResult.ok("200", "操作成功", null); //endregion } //endregion //region 希沃更新教师 public CommonResult SeewoUpdateTeacher(SeewoClient seewoClient, String phone, String name, String headImage) { //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(phone)//用户账号 .name(name)//用户名字 .accountType("phone")//账号类型 phone:手机号 email:邮箱 .teacherCode(phone)//教师工号 .photoUrl(headImage)//图片链接 .build(); query.setTeachers(java.util.Collections.singletonList(teachers)); param.setRequestBody(requestBody); TeacherServiceBatchSaveOrUpdateTeacherRequest request = new TeacherServiceBatchSaveOrUpdateTeacherRequest(param); logger.info("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 TeacherServiceBatchSaveOrUpdateTeacherResult result = seewoClient.invoke(request); logger.info("出参:" + result); if (result == null) { return CommonResult.fail("希沃教师数据更新失败!"); } if (!result.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(result.getResponseBody().getMessage()); } String teacherCode = phone; if (result.getResponseBody().getData() != null && result.getResponseBody().getData().size() > 0) { teacherCode = result.getResponseBody().getData().get(0).getTeacherCode(); } return CommonResult.ok("200", "操作成功", teacherCode); //endregion } //endregion //region 希沃删除教师 public CommonResult SeewoDeleteTeacher(SeewoClient seewoClient, String phone) { //region 希沃删除教师 //初始化客户端 //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); TeacherServiceBatchRemoveTeachersParam param = new TeacherServiceBatchRemoveTeachersParam(); //响应体,MimeType为 application/json TeacherServiceBatchRemoveTeachersParam.RequestBody requestBody = TeacherServiceBatchRemoveTeachersParam.RequestBody.builder() .build(); param.setRequestBody(requestBody); //query TeacherServiceBatchRemoveTeachersParam.Query query = TeacherServiceBatchRemoveTeachersParam.Query.builder() .appId(seewoConfig.getAppId()) .schoolUid(seewoConfig.getSchoolId()) .phones(java.util.Collections.singletonList(phone)) .build(); requestBody.setQuery(query); param.setRequestBody(requestBody); TeacherServiceBatchRemoveTeachersRequest request = new TeacherServiceBatchRemoveTeachersRequest(param); logger.info("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 TeacherServiceBatchRemoveTeachersResult result = seewoClient.invoke(request); logger.info("出参:" + result); if (result == null) { return CommonResult.fail("希沃教师数据删除失败!"); } if (!result.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(result.getResponseBody().getMessage()); } return CommonResult.ok("删除成功"); //endregion } //endregion //region 希沃删除班主任 public CommonResult SeewoDeleteTeacherMaster(SeewoClient seewoClient, String classUid, String phone) { //region 希沃删除班主任 //初始化客户端 //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); TeacherServiceBatchRemoveClassMastersParam mastersParam = new TeacherServiceBatchRemoveClassMastersParam(); //响应体,MimeType为 application/json TeacherServiceBatchRemoveClassMastersParam.RequestBody mastersRequestBody = TeacherServiceBatchRemoveClassMastersParam.RequestBody.builder() .build(); mastersParam.setRequestBody(mastersRequestBody); //query TeacherServiceBatchRemoveClassMastersParam.Query mastersQuery = TeacherServiceBatchRemoveClassMastersParam.Query.builder() .appId(seewoConfig.getAppId()) .schoolUid(seewoConfig.getSchoolId()) .classUid(classUid) .userPhones(java.util.Collections.singletonList(phone)) .build(); mastersRequestBody.setQuery(mastersQuery); mastersParam.setRequestBody(mastersRequestBody); TeacherServiceBatchRemoveClassMastersRequest mastersRequest = new TeacherServiceBatchRemoveClassMastersRequest(mastersParam); logger.info("入参:" + mastersRequest); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 TeacherServiceBatchRemoveClassMastersResult masterResult = seewoClient.invoke(mastersRequest); logger.info("出参:" + masterResult); if (masterResult == null) { return CommonResult.fail("希沃教师数据删除失败!"); } if (!masterResult.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(masterResult.getResponseBody().getMessage()); } return CommonResult.ok("删除成功"); //endregion } //endregion //region 希沃推送班主任 public CommonResult SeewoPushMaster(SeewoClient seewoClient, String phone, String classUid) { //region 将班主任推送到希沃 //初始化客户端 //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); TeacherServiceBatchSetClassMastersParam teacherClassParam = new TeacherServiceBatchSetClassMastersParam(); //响应体,MimeType为 application/json TeacherServiceBatchSetClassMastersParam.RequestBody teacherClassRequestBody = TeacherServiceBatchSetClassMastersParam.RequestBody.builder() .build(); teacherClassParam.setRequestBody(teacherClassRequestBody); //query List teacherPhones = new ArrayList<>(); teacherPhones.add(phone); TeacherServiceBatchSetClassMastersParam.Query teacherClassQuery = TeacherServiceBatchSetClassMastersParam.Query.builder() .appId(seewoConfig.getAppId()) .schoolUid(seewoConfig.getSchoolId()) .classUid(classUid) .userPhones(teacherPhones) .build(); teacherClassRequestBody.setQuery(teacherClassQuery); teacherClassParam.setRequestBody(teacherClassRequestBody); TeacherServiceBatchSetClassMastersRequest teacherClassRequest = new TeacherServiceBatchSetClassMastersRequest(teacherClassParam); logger.info("入参:" + teacherClassRequest); //如果想要调用沙箱环境,请通过设置 teacherClassRequest 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 TeacherServiceBatchSetClassMastersResult teacherClassResult = seewoClient.invoke(teacherClassRequest); logger.info("出参:" + teacherClassResult); if (teacherClassResult == null) { return CommonResult.fail("希沃教师数据新增失败!"); } if (!teacherClassResult.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(teacherClassResult.getResponseBody().getMessage()); } return CommonResult.ok("添加成功"); //endregion } //endregion //region 希沃新增编辑学生家长信息 public CommonResult insertOrUpdateStudentParent(SeewoClient seewoClient, List studentDatas, String name, String phone, boolean isInsert) { //region 希沃新增编辑学生家长信息 //学生与家长列表,最大100条 List studentParents = new ArrayList<>(); List insertIndexs = new ArrayList<>(); for (SmartUser student : studentDatas) { int index = 0; if (isInsert) { List indexs = smartFamilyIndexService.querySmartFamilyByCardNo(student.getCardNo()); if (indexs != null && indexs.size() >= 4) { return CommonResult.fail("绑定失败,希沃学生家长最多绑定四个家长"); } if (indexs != null) { for (SmartFamilyIndex data : indexs) { if (data.getIndexData().intValue() == index && index < 3) { index++; continue; } else { break; } } } SmartFamilyIndex insertFamily = new SmartFamilyIndex(); insertFamily.setParentPhone(phone); insertFamily.setStudentNo(student.getCardNo()); insertFamily.setIndexData(index); insertIndexs.add(insertFamily); } else { SmartFamilyIndex familyIndex = smartFamilyIndexService.queryFamilyByPhoneCardNo(phone, student.getCardNo()); if (familyIndex == null) { List indexs = smartFamilyIndexService.querySmartFamilyByCardNo(student.getCardNo()); if (indexs != null && indexs.size() >= 4) { return CommonResult.fail("绑定失败,希沃学生家长最多绑定四个家长"); } if (indexs != null) { for (SmartFamilyIndex data : indexs) { if (data.getIndexData().intValue() == index && index < 3) { index++; continue; } else { break; } } } SmartFamilyIndex insertFamily = new SmartFamilyIndex(); insertFamily.setParentPhone(phone); insertFamily.setStudentNo(student.getCardNo()); insertFamily.setIndexData(index); insertIndexs.add(insertFamily); } else { familyIndex.setStudentNo(student.getCardNo()); familyIndex.setParentPhone(phone); index = familyIndex.getIndexData(); int updateFamily = smartFamilyIndexService.updateSmartFamily(familyIndex); if (updateFamily <= 0) { return CommonResult.fail("绑定失败"); } } } ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem students = ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem.builder() .studentCode(student.getCardNo()) .build(); studentParents.add(students); //家长列表,最多4个 ParentServiceBatchSaveOrUpdateParentsParam.ParentsItem parents = ParentServiceBatchSaveOrUpdateParentsParam.ParentsItem.builder() .name(name) .phone(phone) .index(index) .build(); students.setParents(java.util.Collections.singletonList(parents)); } if (insertIndexs != null && insertIndexs.size() > 0) { smartFamilyIndexService.saveBatch(insertIndexs); } //初始化客户端 //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); logger.info("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 ParentServiceBatchSaveOrUpdateParentsResult result = seewoClient.invoke(request); logger.info("出参:" + result); if (result == null) { return CommonResult.fail("希沃学生家长数据更新失败!"); } if (!result.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(result.getResponseBody().getMessage()); } return CommonResult.ok("新增成功"); //endregion } //endregion //region 希沃删除学生原有的家长关系 public CommonResult deleteOldStudentParentShip(SeewoClient seewoClient, String cardNo, List phones) throws JsonProcessingException { //region 删除原有的家长关系 //初始化客户端 //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); ParentServiceRemoveStudentParentConditionParam deleteOldFamilyParam = new ParentServiceRemoveStudentParentConditionParam(); //请求体,MimeType为 application/json ParentServiceRemoveStudentParentConditionParam.JSONRequestBody deleteOldFamilyRequestBody = ParentServiceRemoveStudentParentConditionParam.JSONRequestBody.builder() .build(); deleteOldFamilyParam.setRequestBody(deleteOldFamilyRequestBody); // ParentServiceRemoveStudentParentConditionParam.ThirdRemoveStudentParentQuery deleteOldFamilyquery = ParentServiceRemoveStudentParentConditionParam.ThirdRemoveStudentParentQuery.builder() .appId(seewoConfig.getAppId()) .schoolUid(seewoConfig.getSchoolId()) //.studentCodes(java.util.Collections.singletonList(cardNo))//传卡号会把该学生的家长都删掉 .parentPhones(phones) .build(); deleteOldFamilyRequestBody.setQuery(deleteOldFamilyquery); deleteOldFamilyParam.setRequestBody(deleteOldFamilyRequestBody); ParentServiceRemoveStudentParentConditionRequest deleteOldFamilyRequest = new ParentServiceRemoveStudentParentConditionRequest(deleteOldFamilyParam); logger.info("入参:" + deleteOldFamilyRequest); //如果想要调用沙箱环境,请通过设置 deleteOldFamilyRequest 对象的 serverUrl 属性,如: //deleteOldFamilyRequest.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 ParentServiceRemoveStudentParentConditionResult deleteOldFamilyResult = seewoClient.invoke(deleteOldFamilyRequest); logger.info("出参:" + deleteOldFamilyResult); if (deleteOldFamilyResult == null) { return CommonResult.fail("希沃家长数据删除失败!"); } if (deleteOldFamilyResult.getResponseBody().getResult() == null) { ObjectMapper objectMapper = new ObjectMapper(); XwBodyVo result = objectMapper.readValue(deleteOldFamilyResult.getBody(), XwBodyVo.class); if (!result.getCode().equals("000000")) { return CommonResult.fail(result.getMessage()); } } else { if (!deleteOldFamilyResult.getResponseBody().getResult().getCode().equals("000000")) { return CommonResult.fail(deleteOldFamilyResult.getResponseBody().getResult().getMessage()); } } return CommonResult.ok("删除成功"); //endregion } //endregion //region 希沃删除原有的家长关系 public CommonResult deleteOldParentShip(SeewoClient seewoClient, List studentDatas, String phone) throws JsonProcessingException { //region 删除原有的家长关系 //初始化客户端 //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); ParentServiceRemoveStudentParentConditionParam deleteOldFamilyParam = new ParentServiceRemoveStudentParentConditionParam(); //请求体,MimeType为 application/json ParentServiceRemoveStudentParentConditionParam.JSONRequestBody deleteOldFamilyRequestBody = ParentServiceRemoveStudentParentConditionParam.JSONRequestBody.builder() .build(); deleteOldFamilyParam.setRequestBody(deleteOldFamilyRequestBody); // ParentServiceRemoveStudentParentConditionParam.ThirdRemoveStudentParentQuery deleteOldFamilyquery = ParentServiceRemoveStudentParentConditionParam.ThirdRemoveStudentParentQuery.builder() .appId(seewoConfig.getAppId()) .schoolUid(seewoConfig.getSchoolId()) //.studentCodes(studentDatas.stream().map(SmartUser::getCardNo).collect(Collectors.toList()))//不能传卡号 传了卡号会把该学生的家长都删掉 .parentPhones(java.util.Collections.singletonList(phone)) .build(); deleteOldFamilyRequestBody.setQuery(deleteOldFamilyquery); deleteOldFamilyParam.setRequestBody(deleteOldFamilyRequestBody); ParentServiceRemoveStudentParentConditionRequest deleteOldFamilyRequest = new ParentServiceRemoveStudentParentConditionRequest(deleteOldFamilyParam); logger.info("入参:" + deleteOldFamilyRequest); logger.info("入参:" + JSON.toJSON(deleteOldFamilyRequest)); //如果想要调用沙箱环境,请通过设置 deleteOldFamilyRequest 对象的 serverUrl 属性,如: //deleteOldFamilyRequest.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 ParentServiceRemoveStudentParentConditionResult deleteOldFamilyResult = seewoClient.invoke(deleteOldFamilyRequest); logger.info("出参:" + deleteOldFamilyResult); if (deleteOldFamilyResult == null) { return CommonResult.fail("希沃家长数据删除失败!"); } if (deleteOldFamilyResult.getResponseBody().getResult() == null) { ObjectMapper objectMapper = new ObjectMapper(); XwBodyVo result = objectMapper.readValue(deleteOldFamilyResult.getBody(), XwBodyVo.class); if (!result.getCode().equals("000000")) { return CommonResult.fail(result.getMessage()); } } else { if (!deleteOldFamilyResult.getResponseBody().getResult().getCode().equals("000000")) { return CommonResult.fail(deleteOldFamilyResult.getResponseBody().getResult().getMessage()); } } return CommonResult.ok("删除成功"); //endregion } //endregion //endregion //region 百胜增删改查方法 //region 百胜更新学生信息 给批量导入用的 public CommonResult bsEUpdateStudent(SmartUser su, String bsClassNo, String startDate, String endDate) throws Exception { //region 更新百胜学生信息 String appId = controlConfig.getAppId(); String schoolno = controlConfig.getSchoolCode(); String timestamp = TimeExchange.DateNowTimeStamo(); String appSecret = controlConfig.getAppSecret(); String url = controlConfig.getUrl() + "student/update"; String bsGroupNo = eGroupTime(su.getTimeGroupId()); JSONObject jsonobject = new JSONObject(); jsonobject.put("appid", appId); String str = "{\"student_no\":\"" + su.getBsStudentNo() + "\",\"student_name\":\"" + su.getName() + "\",\"classtab_no\":\"" + bsClassNo + "\",\"student_number\":\"" + su.getCardNo() + "\",\"student_sex\":\"" + su.getSexId() + "\",\"student_idcard\":\"" + su.getIdCard() + "\",\"student_photo\":\"" + imageUtils.getBase64Url(su.getHeadImage()) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"student_tgno\":\"" + bsGroupNo + "\"}"; String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "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() + "\",\"classtab_no\":\"" + bsClassNo + "\",\"student_number\":\"" + su.getCardNo() + "\",\"student_sex\":\"" + su.getSexId() + "\",\"student_idcard\":\"" + su.getIdCard() + "\",\"student_photo\":\"" + imageUtils.getBase64Url(su.getHeadImage()) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"student_tgno\":\"" + bsGroupNo + "\"}" + "&schoolno=" + schoolno + "×tamp=" + timestamp + "&key=" + appSecret; String sign = CommonUtil.MD5(md5Str); //sign签名 jsonobject.put("sign", sign); //返回的结果中 code为1表示成功 String bsResult = RequestUtils.httpPosts(url, jsonobject.toJSONString()); ObjectMapper objectMapper = new ObjectMapper(); BsClassVo result = objectMapper.readValue(bsResult, BsClassVo.class); if (!bsResult.contains("更新成功")) { return CommonResult.fail(result.getMsg()); } return CommonResult.ok("更新成功"); //endregion } //endregion //region 百胜更新学生信息 给设置时间组接口用的 public CommonResult bsTUpdateStudent(SmartUser su, String bsClassNo, String startDate, String endDate) throws Exception { //region 更新百胜学生信息 String appId = controlConfig.getAppId(); String schoolno = controlConfig.getSchoolCode(); String timestamp = TimeExchange.DateNowTimeStamo(); String appSecret = controlConfig.getAppSecret(); String url = controlConfig.getUrl() + "student/update"; String bsGroupNo = eGroupTime(su.getTimeGroupId()); JSONObject jsonobject = new JSONObject(); jsonobject.put("appid", appId); String str = "{\"student_no\":\"" + su.getBsStudentNo() + "\",\"student_name\":\"" + su.getName() + "\",\"classtab_no\":\"" + bsClassNo + "\",\"student_number\":\"" + su.getCardNo() + "\",\"student_sex\":\"" + su.getSexId() + "\",\"student_idcard\":\"" + su.getIdCard() + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"student_tgno\":\"" + bsGroupNo + "\"}"; String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "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() + "\",\"classtab_no\":\"" + bsClassNo + "\",\"student_number\":\"" + su.getCardNo() + "\",\"student_sex\":\"" + su.getSexId() + "\",\"student_idcard\":\"" + su.getIdCard() + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"student_tgno\":\"" + bsGroupNo + "\"}" + "&schoolno=" + schoolno + "×tamp=" + timestamp + "&key=" + appSecret; String sign = CommonUtil.MD5(md5Str); //sign签名 jsonobject.put("sign", sign); //返回的结果中 code为1表示成功 String bsResult = RequestUtils.httpPosts(url, jsonobject.toJSONString()); ObjectMapper objectMapper = new ObjectMapper(); BsClassVo result = objectMapper.readValue(bsResult, BsClassVo.class); if (!bsResult.contains("更新成功")) { return CommonResult.fail(result.getMsg()); } return CommonResult.ok("更新成功"); //endregion } //endregion //region 百胜更新学生信息 public CommonResult bsUpdateStudent(SmartUser su, String startDate, String endDate) throws Exception { //region 更新百胜学生信息 String appId = controlConfig.getAppId(); String schoolno = controlConfig.getSchoolCode(); String timestamp = TimeExchange.DateNowTimeStamo(); String appSecret = controlConfig.getAppSecret(); String url = controlConfig.getUrl() + "student/update"; String bsGroupNo = eGroupTime(su.getTimeGroupId()); 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()) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"student_tgno\":\"" + bsGroupNo + "\"}"; String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "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()) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"student_tgno\":\"" + bsGroupNo + "\"}" + "&schoolno=" + schoolno + "×tamp=" + timestamp + "&key=" + appSecret; String sign = CommonUtil.MD5(md5Str); //sign签名 jsonobject.put("sign", sign); //返回的结果中 code为1表示成功 String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString()); ObjectMapper objectMapper = new ObjectMapper(); BsClassVo result = objectMapper.readValue(bsResult, BsClassVo.class); if (!bsResult.contains("更新成功")) { return CommonResult.fail(result.getMsg()); } return CommonResult.ok("更新成功"); //endregion } //endregion //region 百胜新增学生 public CommonResult bsInsertStudent(String name, String cardNo, Integer sexId, String headImage, Integer timeGroupId, String bsClassNo, String startDate, String endDate) throws Exception { //region 百胜新增学生信息 String appId = controlConfig.getAppId(); String schoolno = controlConfig.getSchoolCode(); String timestamp = TimeExchange.DateNowTimeStamo(); String appSecret = controlConfig.getAppSecret(); String url = controlConfig.getUrl() + "student/create"; String bsGroupNo = eGroupTime(timeGroupId); JSONObject jsonobject = new JSONObject(); jsonobject.put("appid", appId); String str = "{\"student_name\":\"" + name + "\",\"classtab_no\":\"" + bsClassNo + "\",\"student_number\":\"" + cardNo + "\",\"student_sex\":\"" + sexId + "\",\"student_photo\":\"" + imageUtils.getBase64Url(headImage) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"student_tgno\":\"" + bsGroupNo + "\"}"; String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "UTF-8"); jsonobject.put("data", aesStr); jsonobject.put("schoolno", schoolno); jsonobject.put("timestamp", timestamp); String md5Str = "appid=" + appId + "&data={\"student_name\":\"" + name + "\",\"classtab_no\":\"" + bsClassNo + "\",\"student_number\":\"" + cardNo + "\",\"student_sex\":\"" + sexId + "\",\"student_photo\":\"" + imageUtils.getBase64Url(headImage) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"student_tgno\":\"" + bsGroupNo + "\"}" + "&schoolno=" + schoolno + "×tamp=" + timestamp + "&key=" + appSecret; String sign = CommonUtil.MD5(md5Str); //sign签名 jsonobject.put("sign", sign); //返回的结果中 code为1表示成功 String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString()); ObjectMapper objectMapper = new ObjectMapper(); BsStudentVo grade = objectMapper.readValue(bsResult, BsStudentVo.class); if (!bsResult.contains("添加成功")) { return CommonResult.fail(grade.getMsg()); } // URL解码 String decodedUrl = URLDecoder.decode(grade.getData(), "UTF-8"); BsStudentNoVo studentNo = objectMapper.readValue(decrypt(decodedUrl, controlConfig.getAppSecret()), BsStudentNoVo.class); return CommonResult.ok("200", "新增成功", studentNo.getStudent_no()); //endregion } //endregion @Override public CommonResult testDeleteUserById(int userId) throws Exception { SmartUser user = smartUserService.getSmartById(userId); bsDeleteStudent(user); return CommonResult.ok(); } //region 百胜删除学生 public CommonResult bsDeleteStudent(SmartUser su) throws Exception { //region 百胜删除学生 String appId = controlConfig.getAppId(); String schoolno = controlConfig.getSchoolCode(); String timestamp = TimeExchange.DateNowTimeStamo(); String appSecret = controlConfig.getAppSecret(); String url = controlConfig.getUrl() + "student/delete"; JSONObject jsonobject = new JSONObject(); jsonobject.put("appid", appId); String str = "{\"student_no\":\"" + su.getBsStudentNo() + "\"}"; String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "UTF-8"); jsonobject.put("data", aesStr); jsonobject.put("schoolno", schoolno); jsonobject.put("timestamp", timestamp); String md5Str = "appid=" + appId + "&data={\"student_no\":\"" + su.getBsStudentNo() + "\"}" + "&schoolno=" + schoolno + "×tamp=" + timestamp + "&key=" + appSecret; String sign = CommonUtil.MD5(md5Str); //sign签名 jsonobject.put("sign", sign); //返回的结果中 code为1表示成功 String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString()); ObjectMapper objectMapper = new ObjectMapper(); BsDeleteStudentVo result = objectMapper.readValue(bsResult, BsDeleteStudentVo.class); if (!bsResult.contains("删除学生成功")) { return CommonResult.fail(result.getMsg()); } return CommonResult.ok("操作成功"); //endregion } //endregion //region 百胜添加教师 public CommonResult bsInsertTeacher(SmartUser su, String departmentNo, String startDate, String endDate) throws Exception { //region 百胜添加教师数据 String appId = controlConfig.getAppId(); String schoolno = controlConfig.getSchoolCode(); String timestamp = TimeExchange.DateNowTimeStamo(); String appSecret = controlConfig.getAppSecret(); String url = controlConfig.getUrl() + "staff/create"; String bsGroupNo = eGroupTime(su.getTimeGroupId()); JSONObject jsonobject = new JSONObject(); jsonobject.put("appid", appId); String str = "{\"staff_name\":\"" + su.getName() + "\",\"department_no\":\"" + departmentNo + "\",\"staff_number\":\"" + su.getCardNo() + "\",\"staff_phone\":\"" + su.getPhone() + "\",\"staff_sex\":\"" + su.getSexId() + "\",\"staff_photo\":\"" + imageUtils.getBase64Url(su.getHeadImage()) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"staff_tgno\":\"" + bsGroupNo + "\"}"; String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "UTF-8"); jsonobject.put("data", aesStr); jsonobject.put("schoolno", schoolno); jsonobject.put("timestamp", timestamp); String md5Str = "appid=" + appId + "&data={\"staff_name\":\"" + su.getName() + "\",\"department_no\":\"" + departmentNo + "\",\"staff_number\":\"" + su.getCardNo() + "\",\"staff_phone\":\"" + su.getPhone() + "\",\"staff_sex\":\"" + su.getSexId() + "\",\"staff_photo\":\"" + imageUtils.getBase64Url(su.getHeadImage()) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"staff_tgno\":\"" + bsGroupNo + "\"}" + "&schoolno=" + schoolno + "×tamp=" + timestamp + "&key=" + appSecret; String sign = CommonUtil.MD5(md5Str); //sign签名 jsonobject.put("sign", sign); //返回的结果中 code为1表示成功 String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString()); ObjectMapper objectMapper = new ObjectMapper(); BsStaffVo staff = objectMapper.readValue(bsResult, BsStaffVo.class); if (!bsResult.contains("添加成功")) { return CommonResult.fail(staff.getMsg()); } // URL解码 String decodedUrl = URLDecoder.decode(staff.getData(), "UTF-8"); BsStaffNoVo staffNo = objectMapper.readValue(decrypt(decodedUrl, controlConfig.getAppSecret()), BsStaffNoVo.class); su.setBsStaffCode(staffNo.getStaff_no()); return CommonResult.ok("200", "新增成功", staffNo.getStaff_no()); //endregion } //endregion //region 百胜更新教师 public CommonResult updateBsTeacher(SmartUser su, String departmentNo, String startDate, String endDate) throws Exception { //region 百胜更新教师数据 String appId = controlConfig.getAppId(); String schoolno = controlConfig.getSchoolCode(); String timestamp = TimeExchange.DateNowTimeStamo(); String appSecret = controlConfig.getAppSecret(); String url = controlConfig.getUrl() + "staff/update"; String bsGroupNo = eGroupTime(su.getTimeGroupId()); JSONObject jsonobject = new JSONObject(); jsonobject.put("appid", appId); String str = "{\"staff_no\":\"" + su.getBsStaffCode() + "\",\"staff_name\":\"" + su.getName() + "\",\"department_no\":\"" + departmentNo + "\",\"staff_number\":\"" + su.getCardNo() + "\",\"staff_phone\":\"" + su.getPhone() + "\",\"staff_sex\":\"" + su.getSexId() + "\",\"staff_photo\":\"" + imageUtils.getBase64Url(su.getHeadImage()) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"staff_tgno\":\"" + bsGroupNo + "\"}"; String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "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 + "\",\"staff_number\":\"" + su.getCardNo() + "\",\"staff_phone\":\"" + su.getPhone() + "\",\"staff_sex\":\"" + su.getSexId() + "\",\"staff_photo\":\"" + imageUtils.getBase64Url(su.getHeadImage()) + "\",\"student_startdate\":\"" + startDate + "\",\"student_effdate\":\"" + endDate + "\",\"staff_tgno\":\"" + bsGroupNo + "\"}" + "&schoolno=" + schoolno + "×tamp=" + timestamp + "&key=" + appSecret; String sign = CommonUtil.MD5(md5Str); //sign签名 jsonobject.put("sign", sign); //返回的结果中 code为1表示成功 String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString()); ObjectMapper objectMapper = new ObjectMapper(); BsStaffVo staff = objectMapper.readValue(bsResult, BsStaffVo.class); if (!bsResult.contains("更新成功")) { return CommonResult.fail(staff.getMsg()); } // URL解码 String decodedUrl = URLDecoder.decode(staff.getData(), "UTF-8"); BsStaffNoVo staffNo = objectMapper.readValue(decrypt(decodedUrl, controlConfig.getAppSecret()), BsStaffNoVo.class); return CommonResult.ok("200", "操作成功", staffNo.getStaff_no()); //endregion } //endregion //region百胜删除教师 public CommonResult bsDeleteTeacher(String staffNo) throws Exception { //region 百胜删除教师 String appId = controlConfig.getAppId(); String schoolno = controlConfig.getSchoolCode(); String timestamp = TimeExchange.DateNowTimeStamo(); String appSecret = controlConfig.getAppSecret(); String url = controlConfig.getUrl() + "staff/delete"; JSONObject jsonobject = new JSONObject(); jsonobject.put("appid", appId); String str = "{\"staff_no\":\"" + staffNo + "\"}"; String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "UTF-8"); jsonobject.put("data", aesStr); jsonobject.put("schoolno", schoolno); jsonobject.put("timestamp", timestamp); String md5Str = "appid=" + appId + "&data={\"staff_no\":\"" + staffNo + "\"}" + "&schoolno=" + schoolno + "×tamp=" + timestamp + "&key=" + appSecret; String sign = CommonUtil.MD5(md5Str); //sign签名 jsonobject.put("sign", sign); //返回的结果中 code为1表示成功 String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString()); ObjectMapper objectMapper = new ObjectMapper(); BsDeleteStudentVo result = objectMapper.readValue(bsResult, BsDeleteStudentVo.class); if (!bsResult.contains("删除员工成功")) { return CommonResult.fail(result.getMsg()); } return CommonResult.ok("删除成功"); //endregion } //endregion //endregion /** * 用户分页数据查询 * * @param currentPage 当前页数 * @param pageCount 一页数据条数 * @param departmentId 部门ID * @return */ @Override @DESRespondSecret(validated = true) public CommonResult queryPageSmartUser(int currentPage, int pageCount, Integer departmentId, String name, String userhead) { //region 角色判断 String userID = AesUtils.decrypt(userhead); SmartUser operateData = smartUserService.getSmartById(Integer.valueOf(userID)); if (operateData == null) { return CommonResult.fail("用户信息不合法,无法查看"); } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_id", operateData.getId()); List authorities = smartAuthorityService.getAuthorByKey(queryWrapper); if (authorities == null) { return CommonResult.fail("当前用户权限不足,无法查看对应部门数据"); } if (authorities.size() <= 0) { return CommonResult.fail("当前用户权限不足,无法查看对应部门数据"); } List viewAuthors = new ArrayList<>();//部门查看权限 List manageAuthors = new ArrayList<>();//部门管理权限 for (SmartAuthority author : authorities) { List views = org.springframework.util.StringUtils.hasText(author.getDepartmentView().trim()) ? Arrays.asList(author.getDepartmentView().trim().split(",")) : new ArrayList<>(); if (views != null && views.size() > 0) { viewAuthors.addAll(views); } List manages = org.springframework.util.StringUtils.hasText(author.getDepartmentManage().trim()) ? Arrays.asList(author.getDepartmentManage().trim().split(",")) : new ArrayList<>(); if (manages != null && manages.size() > 0) { manageAuthors.addAll(manages); } } List AllAuths = new ArrayList<>(); AllAuths.addAll(viewAuthors); AllAuths.addAll(manageAuthors); AllAuths = AllAuths.stream().distinct().collect(Collectors.toList()); //endregion //获取该部门下的所有子级部门ID List childDepartmentIds = new ArrayList<>(); List departments = smartDepartmentService.list(null); childDepartmentIds.add(departmentId); QueryDepartmentTreeRecords(departmentId, departments, childDepartmentIds); if (departmentId == null) { childDepartmentIds = null; } List authDepartments = new ArrayList<>(); for (Integer child : childDepartmentIds) { if (AllAuths.contains(String.valueOf(child))) { authDepartments.add(child); } } PageUtils result = smartUserService.querySmartUserPages(currentPage, pageCount, authDepartments, name); if (result != null && result.getList() != null) { List studentIds = new ArrayList<>(); List 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 students = studentIds != null && studentIds.size() > 0 ? smartUserService.getSmartUserByIds(studentIds) : new ArrayList<>(); List classs = smartClassService.list(null); List idnetitys = smartIdentityService.list(null); for (UserVo data : result.getList()) { data.setTimeGroupName(eGroupTime(data.getTimeGroupId())); Optional identityData = idnetitys.stream().filter(e -> e.getId().equals(data.getIdentityId())).findFirst(); if (identityData != null && identityData.isPresent()) { data.setIdentity(identityData.get().getName()); } data.setSex(eSexStatu.stringOf(data.getSexId())); Optional 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 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 datas = new ArrayList<>(); if (data.getAffiliate() != null) { List affiliates = Arrays.asList(data.getAffiliate().split(",")); for (String a : affiliates) { if (!ObjectUtils.isEmpty(a)) { Optional 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); } @Override @DESRespondSecret(validated = false) public void smartUserExport(HttpServletResponse response, Integer departmentId, String name, String userhead) { //region 角色判断 String userID = AesUtils.decrypt(userhead); SmartUser operateData = smartUserService.getSmartById(Integer.valueOf(userID)); if (operateData != null) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_id", operateData.getId()); List authorities = smartAuthorityService.getAuthorByKey(queryWrapper); if (authorities != null && authorities.size() > 0) { List viewAuthors = new ArrayList<>();//部门查看权限 List manageAuthors = new ArrayList<>();//部门管理权限 for (SmartAuthority author : authorities) { List views = org.springframework.util.StringUtils.hasText(author.getDepartmentView().trim()) ? Arrays.asList(author.getDepartmentView().trim().split(",")) : new ArrayList<>(); if (views != null && views.size() > 0) { viewAuthors.addAll(views); } List manages = org.springframework.util.StringUtils.hasText(author.getDepartmentManage().trim()) ? Arrays.asList(author.getDepartmentManage().trim().split(",")) : new ArrayList<>(); if (manages != null && manages.size() > 0) { manageAuthors.addAll(manages); } } List AllAuths = new ArrayList<>(); AllAuths.addAll(viewAuthors); AllAuths.addAll(manageAuthors); AllAuths = AllAuths.stream().distinct().collect(Collectors.toList()); //endregion //获取该部门下的所有子级部门ID List childDepartmentIds = new ArrayList<>(); List departments = smartDepartmentService.list(null); childDepartmentIds.add(departmentId); QueryDepartmentTreeRecords(departmentId, departments, childDepartmentIds); if (departmentId == null) { childDepartmentIds = null; } List authDepartments = new ArrayList<>(); for (Integer child : childDepartmentIds) { if (AllAuths.contains(String.valueOf(child))) { authDepartments.add(child); } } List users = smartUserService.querySmartUsers(authDepartments, name); List affiliates = new ArrayList<>(); List affiliateStr = users.stream().map(SmartUser::getAffiliate).collect(Collectors.toList()); for (String datas : affiliateStr) { String[] dataArray = datas.split(","); for (int i = 0; i < dataArray.length; i++) { affiliates.add(dataArray[i]); } } List affiliateDatas = smartUserService.getSmartUserIds(affiliates); List dutieIds = users != null && users.size() > 0 ? users.stream().map(SmartUser::getDuties).collect(Collectors.toList()) : null; //职务数据 List duties = dutieIds != null && dutieIds.size() > 0 ? smartDutiesService.queryDutiesByIds(dutieIds) : null; //年级 List grades = smartGradeService.list(null); //班级 List classes = smartClassService.list(null); //导出 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("用户信息管理"); Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("序号"); headerRow.createCell(1).setCellValue("学号"); headerRow.createCell(2).setCellValue("姓名"); headerRow.createCell(3).setCellValue("身份"); headerRow.createCell(4).setCellValue("身份证号"); headerRow.createCell(5).setCellValue("性别"); headerRow.createCell(6).setCellValue("部门"); headerRow.createCell(7).setCellValue("人脸"); headerRow.createCell(8).setCellValue("年级"); headerRow.createCell(9).setCellValue("学院"); headerRow.createCell(10).setCellValue("专业"); headerRow.createCell(11).setCellValue("班级"); headerRow.createCell(12).setCellValue("校区"); headerRow.createCell(13).setCellValue("宿舍号"); headerRow.createCell(14).setCellValue("手机号"); headerRow.createCell(15).setCellValue("关联人"); headerRow.createCell(16).setCellValue("职称"); headerRow.createCell(17).setCellValue("家庭住址"); headerRow.createCell(18).setCellValue("民族"); headerRow.createCell(19).setCellValue("生源地"); headerRow.createCell(20).setCellValue("毕业学校"); headerRow.createCell(21).setCellValue("职务"); for (int i = 0; i < users.size(); i++) { SmartUser user = users.get(i); Row dataRow = sheet.createRow(i + 1); dataRow.createCell(0).setCellValue(i + 1);//序号 dataRow.createCell(1).setCellValue(user.getCardNo());//学号 dataRow.createCell(2).setCellValue(user.getName());//姓名 dataRow.createCell(3).setCellValue(eIdentityStatu.stringOf(user.getIdentityId()));//身份 dataRow.createCell(4).setCellValue(user.getIdCard());//身份证号 dataRow.createCell(5).setCellValue(eSexStatu.stringOf(user.getSexId()));//性别 //获取父级部门ID Optional department = departments.stream().filter(e -> e.getId().equals(user.getDepartmentId())).findFirst(); if (department != null && department.isPresent()) { dataRow.createCell(6).setCellValue(QueryParentDepartments(department.get().getParentId(), departments, null));//部门 } dataRow.createCell(7).setCellValue(user.getHeadImage() == null ? "" : user.getHeadImage());//人脸 String grade = ""; Optional gradeData = grades == null ? null : grades.stream().filter(e -> e.getId().toString().equals(user.getGrade())).findFirst(); if (gradeData != null && gradeData.isPresent()) { grade = gradeData.get().getName(); } dataRow.createCell(8).setCellValue(grade);//年级 dataRow.createCell(9).setCellValue(user.getCollege() == null ? "" : user.getCollege());//学院 dataRow.createCell(10).setCellValue(user.getSpeciality() == null ? "" : user.getSpeciality());//专业 String classStr = ""; Optional classData = classes == null ? null : classes.stream().filter(e -> e.getId().equals(user.getSchoolClass())).findFirst(); if (classData != null && classData.isPresent()) { classStr = classData.get().getName(); } dataRow.createCell(11).setCellValue(classStr);//班级 dataRow.createCell(12).setCellValue(user.getCampus() == null ? "" : user.getCampus());//校区 dataRow.createCell(13).setCellValue(user.getDormitoryNumber() == null ? "" : user.getDormitoryNumber());//宿舍号 dataRow.createCell(14).setCellValue(user.getPhone() == null ? "" : user.getPhone());//手机号 List affiliateCellStrs = new ArrayList<>(); if (user.getAffiliate() != null && affiliateDatas != null) { String[] affArrayStr = user.getAffiliate().split(","); for (int j = 0; j < affArrayStr.length; j++) { String affArrayIndex = affArrayStr[j]; Optional affUser = affiliateDatas.stream().filter(e -> e.getId().toString().equals(affArrayIndex)).findFirst(); if (affUser != null && affUser.isPresent()) { affiliateCellStrs.add(affUser.get().getName()); } } } dataRow.createCell(15).setCellValue(StringUtils.join(affiliateCellStrs, ","));//关联人 dataRow.createCell(16).setCellValue(user.getTitle() == null ? "" : user.getTitle());//职称 dataRow.createCell(17).setCellValue(user.getAddress() == null ? "" : user.getAddress());//家庭住址 dataRow.createCell(18).setCellValue(user.getNation() == null ? "" : user.getNation());//民族 dataRow.createCell(19).setCellValue(user.getOfStudent() == null ? "" : user.getOfStudent());//生源地 dataRow.createCell(20).setCellValue(user.getGraduate() == null ? "" : user.getGraduate());//毕业学校 String dutieStr = ""; if (duties != null && duties.size() > 0 && user.getDuties() != null) { Optional oduty = duties.stream().filter(e -> e.getId().equals(user.getDuties())).findFirst(); if (oduty != null && oduty.isPresent()) { dutieStr = oduty.get().getName(); } } dataRow.createCell(21).setCellValue(dutieStr);//职务 } // 将工作簿写入文件 ExcelUtils.excelDownload(workbook, "用户信息.xlsx", response); } } } /** * 根据父级ID获取树形数据 * * @param parentID 父级ID * @param lists 数据集合 * @return */ private List QueryDepartmentTreeRecords(Integer parentID, List lists, List departmentIds) { List newTrees = new ArrayList<>(); List datas = lists.stream().filter(e -> e.getParentId().equals(parentID)).collect(Collectors.toList()); for (SmartDepartment data : datas) { departmentIds.add(data.getId()); QueryDepartmentTreeRecords(data.getId(), lists, departmentIds); } return newTrees; } /** * 根据父级ID获取父级数据 * * @param parentID 子级ID * @param lists 数据集合 * @return */ private String QueryParentDepartments(Integer parentID, List lists, String departmentStr) { Optional 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; departmentStr = QueryParentDepartments(data.get().getParentId(), lists, departmentStr); } return departmentStr; } @Override @DESRespondSecret(validated = true) public CommonResult deleteSmartUserByIdOld(useridsRequest ur, BindingResult bindingResult) throws Exception { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } List users = smartUserService.getSmartUserByIds(ur.getUserIds()); if (users.size() != ur.getUserIds().size()) { return CommonResult.fail("存在无效用户数据,删除失败!"); } SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); for (SmartUser user : users) { if (user.getIdentityId().intValue() == eIdentityStatu.Parent.getValue()) { List studentIds = Arrays.asList(user.getAffiliate().split(",")); List studentDatas = smartUserService.getSmartUserIds(studentIds); //region 删除原有的家长关系 CommonResult deleteResult = deleteOldParentShip(seewoClient, studentDatas, user.getPhone()); if (!deleteResult.isSuccess()) { return CommonResult.fail(deleteResult.getMessage()); } //endregion } else if (user.getIdentityId().intValue() == eIdentityStatu.Student.getValue()) { //查找家长 List parents = smartUserService.getAffiliateList(user.getId()); //获取班级Uid SmartClass classData = smartClassService.getSmartClassById(user.getSchoolClass()); if (classData == null) { return CommonResult.fail("班级数据无效,更新失败"); } //region 百胜删除学生 CommonResult deleteBsStudent = bsDeleteStudent(user); if (!deleteBsStudent.isSuccess()) { return CommonResult.fail(deleteBsStudent.getMessage()); } //endregion //region 希沃删除学生 CommonResult deleteStudent = SeewoDeleteStudent(seewoClient, classData.getClassUid(), user.getCardNo()); if (!deleteStudent.isSuccess()) { return CommonResult.fail(deleteStudent.getMessage()); } //endregion if (parents != null) { //region 删除原有的家长关系 CommonResult deleteResult = deleteOldStudentParentShip(seewoClient, user.getCardNo(), parents.stream().map(SmartUser::getPhone).collect(Collectors.toList())); if (!deleteResult.isSuccess()) { return CommonResult.fail(deleteResult.getMessage()); } //endregion } } else if (user.getIdentityId().intValue() == eIdentityStatu.Teacher.getValue()) { //region 希沃删除教师 CommonResult deleteTeacher = SeewoDeleteTeacher(seewoClient, user.getPhone()); if (!deleteTeacher.isSuccess()) { return CommonResult.fail(deleteTeacher.getMessage()); } //endregion if (user.getDuties().intValue() == eDuties.ClassTeacher.getValue()) { if (user.getSchoolClass() == null) { return CommonResult.fail("班级数据无效,删除失败"); } //获取班级Uid SmartClass classData = smartClassService.getSmartClassById(user.getSchoolClass()); if (classData == null) { return CommonResult.fail("班级数据无效,删除失败"); } //region 希沃删除班主任 if (user.getDuties().intValue() == eDuties.ClassTeacher.getValue()) { CommonResult deleteTeacherMaster = SeewoDeleteTeacherMaster(seewoClient, classData.getClassUid(), user.getPhone()); if (deleteTeacherMaster.isSuccess()) { return CommonResult.fail(deleteTeacherMaster.getMessage()); } } //endregion } //region 百胜删除教师 CommonResult bsDeleteTeacher = bsDeleteTeacher(user.getBsStaffCode()); if (!bsDeleteTeacher.isSuccess()) { return CommonResult.fail(bsDeleteTeacher.getMessage()); } //endregion } } int result = smartUserService.deleteSmartUserByIds(ur.getUserIds()); return result > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败"); } @Override public CommonResult deleteSmartUserById(useridsRequest ur, BindingResult bindingResult) throws Exception { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } List users = smartUserService.getSmartUserByIds(ur.getUserIds()); if (users.size() != ur.getUserIds().size()) { return CommonResult.fail("存在无效用户数据,删除失败!"); } //先删除咱自己数据库里的用户数据 int result = smartUserService.deleteSmartUserByIds(ur.getUserIds()); if (result <= 0) { return CommonResult.fail("删除失败"); } List deleteUsers = new ArrayList<>(); SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); for (SmartUser user : users) { deleteUserVo deleteUser = new deleteUserVo(); deleteUser.setId(user.getId()); if (user.getIdentityId().intValue() == eIdentityStatu.Parent.getValue()) { List studentIds = Arrays.asList(user.getAffiliate().split(",")); List studentDatas = smartUserService.getSmartUserIds(studentIds); //region 删除原有的家长关系 CommonResult deleteResult = deleteOldParentShip(seewoClient, studentDatas, user.getPhone()); if (!deleteResult.isSuccess()) { String reason = (deleteUser.getReason() == null ? "" : deleteUser.getReason()) + "希沃删除家长关系失败:" + deleteResult.getMessage() + ";"; deleteUser.setReason(reason); //return CommonResult.fail(deleteResult.getMessage()); } //endregion //删除家长 根据家长手机号删除下标数据 smartFamilyIndexService.deleteSmartFamilyByPhone(user.getPhone()); } else if (user.getIdentityId().intValue() == eIdentityStatu.Student.getValue()) { //查找家长 List parents = smartUserService.getAffiliateList(user.getId()); //获取班级Uid SmartClass classData = smartClassService.getSmartClassById(user.getSchoolClass()); if (classData == null) { String reason = (deleteUser.getReason() == null ? "" : deleteUser.getReason()) + "班级数据无效,百胜删除学生失败;"; deleteUser.setReason(reason); //return CommonResult.fail("班级数据无效,更新失败"); } //region 百胜删除学生 CommonResult deleteBsStudent = bsDeleteStudent(user); if (!deleteBsStudent.isSuccess()) { String reason = (deleteUser.getReason() == null ? "" : deleteUser.getReason()) + "百胜删除学生失败;" + deleteBsStudent.getMessage() + ";"; deleteUser.setReason(reason); //return CommonResult.fail(deleteBsStudent.getMessage()); } //endregion //region 希沃删除学生 CommonResult deleteStudent = SeewoDeleteStudent(seewoClient, classData.getClassUid(), user.getCardNo()); if (!deleteStudent.isSuccess()) { String reason = (deleteUser.getReason() == null ? "" : deleteUser.getReason()) + "希沃删除学生失败;" + deleteStudent.getMessage() + ";"; ; deleteUser.setReason(reason); //return CommonResult.fail(deleteStudent.getMessage()); } //endregion if (parents != null) { //region 删除原有的家长关系 CommonResult deleteResult = deleteOldStudentParentShip(seewoClient, user.getCardNo(), parents.stream().map(SmartUser::getPhone).collect(Collectors.toList())); if (!deleteResult.isSuccess()) { String reason = (deleteUser.getReason() == null ? "" : deleteUser.getReason()) + "希沃删除家长关系失败;" + deleteResult.getMessage() + ";"; ; deleteUser.setReason(reason); //return CommonResult.fail(deleteResult.getMessage()); } //endregion //删除学生 根据学生学号删除下标数据 smartFamilyIndexService.deleteSmartFamilyByCardNo(user.getCardNo()); } } else if (user.getIdentityId().intValue() == eIdentityStatu.Teacher.getValue()) { if (user.getDuties().intValue() == eDuties.ClassTeacher.getValue()) { if (user.getSchoolClass() == null) { String reason = (deleteUser.getReason() == null ? "" : deleteUser.getReason()) + "班级数据无效,希沃删除班主任失败;"; deleteUser.setReason(reason); } else { //获取班级Uid SmartClass classData = smartClassService.getSmartClassById(user.getSchoolClass()); if (classData == null) { String reason = (deleteUser.getReason() == null ? "" : deleteUser.getReason()) + "班级数据无效,希沃删除教师失败;"; deleteUser.setReason(reason); //return CommonResult.fail("班级数据无效,更新失败"); } //region 希沃删除班主任 CommonResult deleteTeacherMaster = SeewoDeleteTeacherMaster(seewoClient, classData.getClassUid(), user.getPhone()); if (!deleteTeacherMaster.isSuccess()) { String reason = (deleteUser.getReason() == null ? "" : deleteUser.getReason()) + "希沃删除班主任失败;" + deleteTeacherMaster.getMessage() + ";"; deleteUser.setReason(reason); //return CommonResult.fail(deleteTeacherMaster.getMessage()); } //endregion } } //region 希沃删除教师 CommonResult deleteTeacher = SeewoDeleteTeacher(seewoClient, user.getPhone()); if (!deleteTeacher.isSuccess()) { String reason = (deleteUser.getReason() == null ? "" : deleteUser.getReason()) + "百胜删除老师失败;" + deleteTeacher.getMessage() + ";"; deleteUser.setReason(reason); //return CommonResult.fail(deleteTeacher.getMessage()); } //endregion //region 百胜删除教师 CommonResult bsDeleteTeacher = bsDeleteTeacher(user.getBsStaffCode()); if (!bsDeleteTeacher.isSuccess()) { String reason = (deleteUser.getReason() == null ? "" : deleteUser.getReason()) + "百胜删除老师失败;" + bsDeleteTeacher.getMessage() + ";"; deleteUser.setReason(reason); //return CommonResult.fail(bsDeleteTeacher.getMessage()); } //endregion } if (deleteUser.getReason() != null) { deleteUsers.add(deleteUser); } } if (deleteUsers != null && deleteUsers.size() > 0) { int deleteUser = smartUserService.deleteUserBatch(deleteUsers); return deleteUser > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败"); } return CommonResult.ok("删除成功"); } @Override @DESRespondSecret(validated = true) public CommonResult queryAffiliateUserById(int id) { List result = smartUserService.queryAffiliateUserById(id); if (result != null && result.size() > 0) { List departments = smartDepartmentService.list(null); for (AffiliateUserVo data : result) { //获取父级部门ID Optional department = departments.stream().filter(e -> e.getId().equals(data.getDepartmentId())).findFirst(); if (department != null && department.isPresent()) { String departmentName = QueryParentDepartments(department.get().getParentId(), departments, null); data.setDepartmentName(departmentName); } } } return CommonResult.ok(result); } @Override @DESRespondSecret(validated = true) public CommonResult downloadUserExcel() { return CommonResult.ok("200", "操作成功", "https://wanzai-1306339220.cos.ap-shanghai.myqcloud.com/excelModel/人员信息表.xlsx"); } @Override @DESRespondSecret(validated = true) public CommonResult downloadTeacherExcel() { return CommonResult.ok("200", "操作成功", "https://wanzai-1306339220.cos.ap-shanghai.myqcloud.com/excelModel/教师信息表.xlsx"); } @Override @DESRespondSecret(validated = true) public CommonResult downloadUpdateUserExcel() { return CommonResult.ok("200", "操作成功", "https://wanzai-1306339220.cos.ap-shanghai.myqcloud.com/excelModel/更新信息表.xlsx"); } @Override @DESRespondSecret(validated = true) public CommonResult queryStudents(int userId) { List students = new ArrayList<>(); SmartUser user = smartUserService.getSmartById(userId); if (user == null) { return CommonResult.fail("用户信息为空,获取学生列表数据失败"); } if (user.getAffiliate() == null) { return CommonResult.ok(students); } List affiliateIds = new ArrayList<>(); List affiliates = Arrays.asList(user.getAffiliate().split(",")); for (String affiliate : affiliates) { affiliateIds.add(Integer.valueOf(affiliate)); } students = smartUserService.getSmartUserByIds(affiliateIds); List 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); } @Override @DESRespondSecret(validated = true) public CommonResult queryInfoData(int id) { SmartUser su = smartUserService.getSmartById(id); if (su == null) { return CommonResult.fail("用户信息失效,获取用户信息失败"); } //部门数据集合 List departments = smartDepartmentService.list(null); WechatUserVo userData = new WechatUserVo(); userData.setId(su.getId()); userData.setCardNo(su.getCardNo()); userData.setTimeGroupId(su.getTimeGroupId()); userData.setName(su.getName()); userData.setIdentityId(su.getIdentityId()); userData.setIdCard(su.getIdCard()); userData.setSexId(su.getSexId()); userData.setDepartmentId(su.getDepartmentId()); Optional department = departments.stream().filter(e -> e.getId().equals(su.getDepartmentId())).findFirst(); if (department != null && department.isPresent()) { String departmentName = QueryParentDepartments(department.get().getParentId(), departments, null); userData.setDepartmentName(departmentName == null ? "" : departmentName + "/" + department.get().getName()); } userData.setHeadImage(su.getHeadImage()); userData.setGrade(su.getGrade()); userData.setCollege(su.getCollege()); userData.setSpeciality(su.getSpeciality()); userData.setSchoolClass(su.getSchoolClass()); userData.setCampus(su.getCampus()); userData.setDormitoryNumber(su.getDormitoryNumber()); userData.setPhone(su.getPhone()); userData.setAffiliate(su.getAffiliate()); //查找关联人 if (su.getIdentityId().intValue() == eIdentityStatu.Student.getValue()) {//学生 List parents = smartUserService.queryAffiliateParents(su.getId()); if (parents != null && parents.size() > 0) { String affiliateStr = StringUtils.join(parents.stream().map(AffiliateParentVo::getName).collect(Collectors.toList()), ","); userData.setAffiliateName(affiliateStr); } } else if (su.getIdentityId().intValue() == eIdentityStatu.Parent.getValue()) {//家长 if (su.getAffiliate() != null) { List affiliates = Arrays.asList(su.getAffiliate().split(",")); List childs = smartUserService.getSmartUserIds(affiliates); String affiliateStr = StringUtils.join(childs.stream().map(SmartUser::getName).collect(Collectors.toList()), ","); userData.setAffiliateName(affiliateStr); } } //关联人名称用逗号隔开 userData.setTitle(su.getTitle()); userData.setAddress(su.getAddress()); userData.setNation(su.getNation()); userData.setOfStudent(su.getOfStudent()); userData.setGraduate(su.getGraduate()); userData.setDuties(su.getDuties()); userData.setIsPush(su.getIsPush()); userData.setIsCancel(su.getIsCancel()); userData.setOpenId(su.getOpenId()); userData.setXOpenId(su.getXOpenId()); userData.setGzhOpenId(su.getGzhOpenId()); userData.setXwStudentUid(su.getXwStudentUid()); userData.setBsStudentNo(su.getBsStudentNo()); userData.setXwTeacherCode(su.getXwTeacherCode()); userData.setBsStaffCode(su.getBsStaffCode()); return CommonResult.ok(userData); } @Override @DESRespondSecret(validated = true) public CommonResult bindStudent(bindStudentRequest bsr, BindingResult bindingResult) { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } SmartUser parentUser = smartUserService.getSmartById(bsr.getUserId()); if (parentUser == null) { return CommonResult.fail("当前用户信息无效,绑定失败!"); } if (parentUser.getIdentityId().intValue() != eIdentityStatu.Parent.getValue()) { return CommonResult.fail("当前用户身份无法进行绑定操作"); } //查找是否存在学生数据 SmartUser studentUser = smartUserService.queryUserInfo(bsr.getName(), bsr.getCardNo(), bsr.getIdCard()); if (studentUser == null) { return CommonResult.fail("当前学生不存在,绑定失败!"); } //判断是否已绑定过 if (parentUser.getAffiliate() == null) { parentUser.setAffiliate(String.valueOf(studentUser.getId())); } else { List newAffiliates = new ArrayList<>(); List affiliates = Arrays.asList(parentUser.getAffiliate().split(",")); long existCount = affiliates.stream().filter(e -> e.equals(String.valueOf(studentUser.getId()))).count(); if (existCount > 0) { return CommonResult.fail("当前学生信息已绑定过,请勿重复操作!"); } parentUser.setAffiliate(parentUser.getAffiliate() + "," + studentUser.getId()); } List indexs = smartFamilyIndexService.querySmartFamilyByCardNo(studentUser.getCardNo()); if (indexs != null && indexs.size() >= 4) { return CommonResult.fail("绑定失败,希沃学生家长最多绑定四个家长"); } int index = 0; if (indexs != null) { for (SmartFamilyIndex data : indexs) { if (data.getIndexData().intValue() == index && index < 3) { index++; continue; } else { break; } } } //region 新增希沃学生家长信息 //初始化客户端 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); //学生与家长列表,最大100条 ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem studentParents = ParentServiceBatchSaveOrUpdateParentsParam.StudentParentsItem.builder() .studentCode(studentUser.getCardNo()) .build(); query.setStudentParents(java.util.Collections.singletonList(studentParents)); //家长列表,最多4个 ParentServiceBatchSaveOrUpdateParentsParam.ParentsItem parents = ParentServiceBatchSaveOrUpdateParentsParam.ParentsItem.builder() .name(parentUser.getName()) .phone(parentUser.getPhone()) .index(index) .build(); studentParents.setParents(java.util.Collections.singletonList(parents)); param.setRequestBody(requestBody); ParentServiceBatchSaveOrUpdateParentsRequest request = new ParentServiceBatchSaveOrUpdateParentsRequest(param); logger.info("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 ParentServiceBatchSaveOrUpdateParentsResult result = seewoClient.invoke(request); logger.info("出参:" + result); if (result == null) { return CommonResult.fail("希沃学生家长数据添加失败!"); } if (!result.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(result.getResponseBody().getMessage()); } //endregion int updateResult = smartUserService.updateSmartUser(parentUser); return updateResult > 0 ? CommonResult.ok("绑定成功") : CommonResult.fail("绑定失败"); } @Override public CommonResult queryUserData(int id) { SmartUserVo user = smartUserService.querySmartUserById(id); return CommonResult.ok(user); } @Override public CommonResult queryUserDeletePage(int currentPage, int pageCount) { PageUtils result = smartUserService.queryUserDeletePage(currentPage, pageCount); List departments = smartDepartmentService.list(null); for (UserDeleteVo data : result.getList()) { data.setIdentityStr(eIdentityStatu.stringOf(data.getIdentityId()));//身份 //获取父级部门ID Optional department = departments.stream().filter(e -> e.getId().equals(data.getDepartmentId())).findFirst(); if (department != null && department.isPresent()) { String departmentName = QueryParentDepartments(department.get().getParentId(), departments, null); data.setDepartmentStr(departmentName); } } return CommonResult.ok(result); } @Override public CommonResult queryClassUser(int userId, String keyWord) { SmartUser userData = smartUserService.getSmartById(userId); if (userData == null) { return CommonResult.fail("未查到用户信息,获取失败"); } if (userData.getSchoolClass() == null) { return CommonResult.fail("当前用户所在班级为空,获取失败"); } SmartClass classData = smartClassService.getSmartClassById(userData.getSchoolClass()); if (classData == null) { return CommonResult.fail("班级数据为空,获取失败"); } List departments = smartDepartmentService.list(null); if (departments == null) { return CommonResult.fail("部门数据为空,获取失败"); } //查找部门名称 String departmentName = classData.getName().replace("年级", "") + "学生"; Optional department = departments.stream().filter(e -> e.getName().equals(departmentName)).findFirst(); if (!(department != null && department.isPresent())) { return CommonResult.fail("部门数据为空,获取失败"); } String departmentStr = QueryParentDepartments(department.get().getParentId(), departments, null); ClassUserVo result = new ClassUserVo(); result.setClassId(userData.getSchoolClass()); result.setName(departmentStr); List userDetails = new ArrayList<>(); //region 用户明细集合数据 List users = smartUserService.queryUsersByClass(userData.getSchoolClass()); if (users != null && users.size() > 0) { List timeGroups = smartTimeGroupService.list(null); for (SmartUser user : users) { ClassUserDetailVo userDetail = new ClassUserDetailVo(); userDetail.setId(user.getId()); userDetail.setName(user.getName()); userDetail.setCardNo(user.getCardNo()); Optional timeGroup = timeGroups.stream().filter(e -> e.getId().equals(user.getTimeGroupId())).findFirst(); if (timeGroup != null && timeGroup.isPresent()) { userDetail.setTimeGroup(timeGroup.get().getName()); } userDetails.add(userDetail); } if (!ObjectUtils.isEmpty(keyWord)) { userDetails = userDetails.stream().filter(e -> (e.getName() != null && e.getName().contains(keyWord)) || (e.getTimeGroup() != null && e.getTimeGroup().contains(keyWord))).collect(Collectors.toList()); } } //endregion result.setUserDetails(userDetails); return CommonResult.ok(result); } @Override public CommonResult setUserTimeGroup(setUserTimeGroupRequest isur, BindingResult bindingResult) throws Exception { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } logger.info("批量设置时间组1" + TimeExchange.getDateMillS()); SmartTimeGroup timeGroup = smartTimeGroupService.queryTimeGroupById(isur.getTimeGroupId()); if (timeGroup == null) { return CommonResult.fail("时间组数据无效,批量同步时间组失败!"); } logger.info("批量设置时间组2" + TimeExchange.getDateMillS()); //region 批量更新百胜学生的时间组 List users = smartUserService.getSmartUserByIds(isur.getIds()); if (users == null) { return CommonResult.fail("用户数据无效,批量同步时间组失败!"); } logger.info("批量设置时间组3" + TimeExchange.getDateMillS()); List grades = smartGradeService.list(null); List classes = smartClassService.list(null); logger.info("批量设置时间组4" + TimeExchange.getDateMillS()); for (SmartUser user : users) { user.setTimeGroupId(isur.getTimeGroupId()); Optional oGrade = grades.stream().filter(e -> e.getId().equals(Integer.valueOf(user.getGrade()))).findFirst(); if (!(oGrade != null && oGrade.isPresent())) { return CommonResult.fail("年级数据无效,批量同步时间组失败!"); } Optional oClass = classes.stream().filter(e -> e.getId().equals(user.getSchoolClass())).findFirst(); if (!(oClass != null && oClass.isPresent())) { return CommonResult.fail("班级数据无效,批量同步时间组失败!"); } // 开始时间 long stime = System.currentTimeMillis(); logger.info("开始循环调用百胜一次:" + TimeExchange.getDateMillS()); /** * 学生数据的有效期是到毕业年份的8月31日 */ String startTime = TimeExchange.DateToString(new Date(), "yyyy-MM-dd HH:mm:ss"); String endTime = queryGraduationYear(oGrade.get().getGradeNo()); CommonResult updateBsStudent = bsTUpdateStudent(user, oClass.get().getBsClassNo(), startTime, endTime); if (!updateBsStudent.isSuccess()) { return CommonResult.fail(updateBsStudent.getMessage()); } // 结束时间 long etime = System.currentTimeMillis(); // 计算执行时间 System.out.printf("结束循环调用百胜一次,执行时长:%d 毫秒.", (etime - stime)); //endregion } logger.info("循环结束:" + TimeExchange.getDateMillS()); //region 批量更新学生数据 boolean updateBatch = smartUserService.updateUserBatchById(users); logger.info("存储结束:" + TimeExchange.getDateMillS()); return updateBatch ? CommonResult.ok("批量同步成功") : CommonResult.fail("批量同步失败"); } public String eGroupTime(Integer id) { SmartTimeGroup result = smartTimeGroupService.queryTimeGroupById(id); return result == null ? "" : result.getBsno(); } public Integer eGroupTime(String name) { SmartTimeGroup result = smartTimeGroupService.queryTimeGroupByName(name); return result == null ? 0 : result.getId(); } /** * 根据年级查询毕业年份 * * @return */ public String queryGraduationYear(int grade) { String endTime = ""; int endYear = Year.now().getValue(); // 获取当前年份 LocalDate currentDate = LocalDate.now(); switch (grade) { case 7: if (currentDate.getMonthValue() < 9) { endYear = endYear + 2; } else { endYear = endYear + 3; } break; case 8: if (currentDate.getMonthValue() < 9) { endYear = endYear + 1; } else { endYear = endYear + 2; } break; case 9: break; default: break; } endTime = endYear + "-08-31 23:59:59"; return endTime; } }