package com.template.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; import com.seewo.open.sdk.DefaultSeewoClient; import com.seewo.open.sdk.SeewoClient; import com.seewo.open.sdk.auth.Account; import com.template.annotation.DESRespondSecret; import com.template.api.SmartClassControllerAPI; import com.template.common.utils.*; import com.template.config.ControlConfig; import com.template.config.SeewoConfig; import com.template.model.pojo.*; import com.template.model.request.insertSmartClassRequest; import com.template.model.request.updateClassRequest; import com.template.model.result.CommonResult; import com.template.model.result.PageUtils; import com.template.model.seewo.*; import com.template.model.vo.*; import com.template.services.SmartClassService; import com.template.services.SmartGradeService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.time.LocalDate; import java.time.Year; import java.util.ArrayList; import java.util.List; import java.util.Optional; import static com.template.common.utils.AesTestOne.decrypt; /** *

* 楼栋表 前端控制器 *

* * @author ceshi * @since 2023-12-25 */ @RestController //返回参数加密注解 @DESRespondSecret public class SmartClassController implements SmartClassControllerAPI { private static Logger logger = LoggerFactory.getLogger(SmartClassController.class); @Resource private SeewoConfig seewoConfig; @Resource private ControlConfig controlConfig; @Autowired private SmartClassService smartClassService; @Autowired private SmartGradeService smartGradeService; @Override @DESRespondSecret(validated = true) public CommonResult insertSmartClass(SmartClass smartApply, BindingResult bindingResult) { return null; } @Override @DESRespondSecret(validated = true) public CommonResult queryPageSmartClasss(int currentPage, int pageCount, String name) { PageUtils result = smartClassService.queryPageSmartClass(currentPage, pageCount, name); PageUtils datas = new PageUtils(null, result.getTotalCount(), result.getPageSize(), result.getCurrPage()); if (result != null && result.getList().size() > 0) { List grades = smartGradeService.getSmartGrades(); List pages = new ArrayList<>(); for (SmartClass data : result.getList()) { SmartClassPageVo pageData = new SmartClassPageVo(); pageData.setId(data.getId()); pageData.setGradeId(data.getGradeId()); Optional grade = grades.stream().filter(e -> e.getId().equals(data.getGradeId())).findFirst(); if (grade != null && grade.isPresent()) { pageData.setGradeStr(grade.get().getName()); } pageData.setClassUid(data.getClassUid()); pageData.setName(data.getName()); pageData.setClassNo(data.getClassNo()); pageData.setBsClassNo(data.getBsClassNo()); pages.add(pageData); } datas = new PageUtils(pages, result.getTotalCount(), result.getPageSize(), result.getCurrPage()); } return CommonResult.ok(datas); } @Override @DESRespondSecret(validated = true) public CommonResult deleteSmartClassById(int id) { return null; } @Override @DESRespondSecret(validated = true) public CommonResult querySmartClasss(int gradeId) { List datas = smartClassService.getSmartClassByGradeID(gradeId); List result = new ArrayList<>(); for (SmartClass data : datas) { SemesterVo model = new SemesterVo(); model.setId(data.getId()); model.setName(data.getName()); result.add(model); } return CommonResult.ok(result); } @Override @Transactional(rollbackFor = {Exception.class}) public CommonResult insertSmartClassToBaisheng(insertSmartClassRequest iscr, BindingResult bindingResult) throws Exception { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } //先查找年级编号对应的年级数据是否存在 SmartGrade grade = smartGradeService.querySmartGradeByBaisheng(iscr.getGradeNo()); if (grade == null) { return CommonResult.fail("添加班级前,请先添加对应年级数据"); } //判断重复性 int existCount = smartClassService.existSmartClass(iscr.getClassName(), grade.getId()); if (existCount > 0) { return CommonResult.fail("该班级数据已在系统中存在,请勿重复添加"); } String appId = controlConfig.getAppId(); String schoolno = controlConfig.getSchoolCode(); String timestamp = TimeExchange.DateNowTimeStamo(); String className = iscr.getClassName(); String gradeNo = iscr.getGradeNo(); String appSecret = controlConfig.getAppSecret(); String url = controlConfig.getUrl() + "classtab/create"; JSONObject jsonobject = new JSONObject(); jsonobject.put("appid", appId); String str = "{\"grade_no\":\"" + gradeNo + "\",\"classtab_name\":\"" + grade.getName() + className + "\"}"; String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "UTF-8"); jsonobject.put("data", aesStr); jsonobject.put("schoolno", schoolno); jsonobject.put("timestamp", timestamp); String md5Str = "appid=" + appId + "&data={\"grade_no\":\"" + gradeNo + "\",\"classtab_name\":\"" + grade.getName() + className + "\"}" + "&schoolno=" + schoolno + "×tamp=" + timestamp + "&key=" + appSecret; String sign = CommonUtil.MD5(md5Str); //sign签名 jsonobject.put("sign", sign); //返回的结果中 code为1表示成功 String result = RequestUtils.httpPost(url, jsonobject.toJSONString()); if (result.contains("添加成功")) { //希沃班级传输特点: //当前月份小于9月份就传当前年份 - 1 ;如果大于9月份就传当前年份 Integer nowMonth = Integer.valueOf(TimeExchange.getNowMonth()); //初始化客户端 SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); //region 将K12校区的班级数据初始化 K12Class(seewoClient, grade.getGradeNo(),nowMonth); //endregion //region 将数据加入希沃系统中 CommonResult saveClass = SeewoInsertOrUpdateClass(seewoClient, iscr.getClassNo(), iscr.getClassName(), grade.getGradeNo(), nowMonth); if (!saveClass.isSuccess()) { return CommonResult.fail(saveClass.getMessage()); } //endregion //希沃添加年级和班级数据是:存在就覆盖 不存在就新增 //要拿到希沃的年级Uid和班级Uid String gradeUid = saveClass.getData()[0]; String classUid = saveClass.getData()[1]; ObjectMapper objectMapper = new ObjectMapper(); BsClassVo classVo = objectMapper.readValue(result, BsClassVo.class); // URL解码 String decodedUrl = URLDecoder.decode(classVo.getData(), "UTF-8"); BsClassNoVo classNo = objectMapper.readValue(decrypt(decodedUrl, controlConfig.getAppSecret()), BsClassNoVo.class); if (classNo == null) { return CommonResult.fail("百胜班级编号为空,新增失败"); } SmartClass smartClass = new SmartClass(); smartClass.setGradeId(grade.getId()); smartClass.setClassUid(classUid); smartClass.setName(iscr.getClassName()); smartClass.setClassNo(iscr.getClassNo()); smartClass.setBsClassNo(classNo.getClasstab_no()); grade.setGradeUid(gradeUid); try { int insertClass = smartClassService.insertSmartClass(smartClass); if (insertClass <= 0) { throw new Exception("新增失败"); } int updateGrade = smartGradeService.updateSmartGrade(grade); if (updateGrade <= 0) { throw new Exception("新增失败"); } } catch (Exception e) { throw new Exception("新增失败"); } return CommonResult.ok("新增成功"); } return CommonResult.fail("操作失败"); } @Override @DESRespondSecret(validated = true) public CommonResult updateSmartClassById(updateClassRequest ucr, BindingResult bindingResult) throws Exception { if (bindingResult.hasErrors()) { String st = paramUtils.getParamError(bindingResult); return CommonResult.fail(st); } //数据ID是否有效 SmartClass oldData = smartClassService.querySmartClassById(ucr.getId()); if (oldData == null) { return CommonResult.fail("班级数据无效,更新失败"); } //判断重复性 SmartClass existData = smartClassService.existSmartClassData(oldData.getGradeId(), ucr.getName(), ucr.getClassNo()); if (existData != null && !existData.getId().equals(ucr.getId())) { return CommonResult.fail("该班级数据已在系统中存在,更新失败"); } //先查找年级编号对应的年级数据是否存在 SmartGrade grade = smartGradeService.querySmartGradeById(oldData.getGradeId()); if (grade == null) { return CommonResult.fail("添加班级前,请先添加对应年级数据"); } //region 修改百胜中的班级数据 String appId = controlConfig.getAppId(); String schoolno = controlConfig.getSchoolCode(); String timestamp = TimeExchange.DateNowTimeStamo(); String className = ucr.getName(); String appSecret = controlConfig.getAppSecret(); String url = controlConfig.getUrl() + "classtab/update"; JSONObject jsonobject = new JSONObject(); jsonobject.put("appid", appId); String str = "{\"classtab_no\":\"" + oldData.getBsClassNo() + "\",\"classtab_name\":\"" + className + "\"}"; 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={\"classtab_no\":\"" + oldData.getBsClassNo() + "\",\"classtab_name\":\"" + className + "\"}" + "&schoolno=" + schoolno + "×tamp=" + timestamp + "&key=" + appSecret; String sign = CommonUtil.MD5(md5Str); //sign签名 jsonobject.put("sign", sign); //返回的结果中 code为1表示成功 String result = RequestUtils.httpPost(url, jsonobject.toJSONString()); if (result.contains("更新成功")) { //region 更新希沃班级 //希沃班级传输特点: //当前月份小于9月份就传当前年份 - 1 ;如果大于9月份就传当前年份 Integer nowMonth = Integer.valueOf(TimeExchange.getNowMonth()); //初始化客户端 SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); //region 将K12校区的班级数据初始化 if (oldData.getClassUid() == null) { K12Class(seewoClient, grade.getGradeNo(),nowMonth); } //endregion //region 将数据加入希沃系统中 CommonResult saveClass = SeewoInsertOrUpdateClass(seewoClient, ucr.getClassNo(), ucr.getName(), grade.getGradeNo(), nowMonth); if (!saveClass.isSuccess()) { return CommonResult.fail(saveClass.getMessage()); } //endregion //endregion grade.setGradeUid(saveClass.getData()[0]); oldData.setClassUid(saveClass.getData()[1]); oldData.setClassNo(ucr.getClassNo()); oldData.setName(ucr.getName()); int updateClass = smartClassService.updateSmartClass(oldData); if (updateClass <= 0) { return CommonResult.fail("班级信息更新失败"); } int updateGrade = smartGradeService.updateSmartGrade(grade); if (updateGrade <= 0) { throw new Exception("新增失败"); } } else { return CommonResult.fail("班级信息更新失败"); } //endregion return CommonResult.ok("班级信息更新成功"); } //region 新增更新希沃班级 //K12班级 private void K12Class(SeewoClient seewoClient, Integer gradeNo, Integer nowMonth) { OrganizationNodeServiceInitSchoolClassesParam kParam = new OrganizationNodeServiceInitSchoolClassesParam(); //响应体,MimeType为 application/json OrganizationNodeServiceInitSchoolClassesParam.RequestBody kRequestBody = OrganizationNodeServiceInitSchoolClassesParam.RequestBody.builder() .build(); kParam.setRequestBody(kRequestBody); //query OrganizationNodeServiceInitSchoolClassesParam.Query kQuery = OrganizationNodeServiceInitSchoolClassesParam.Query.builder() .appId(seewoConfig.getAppId()) .unitUid(seewoConfig.getSchoolId()) .campusName("宜阳学校") .build(); kRequestBody.setQuery(kQuery); //新增班级列表(最大200条) OrganizationNodeServiceInitSchoolClassesParam.Object kClassList = OrganizationNodeServiceInitSchoolClassesParam.Object.builder() .stageName("初中") .gradeYear(ClassYear.getAdmissionYear(gradeNo, Year.now().getValue(), LocalDate.now())) .build(); kQuery.setClassList(java.util.Collections.singletonList(kClassList)); kParam.setRequestBody(kRequestBody); OrganizationNodeServiceInitSchoolClassesRequest kRequest = new OrganizationNodeServiceInitSchoolClassesRequest(kParam); logger.info("入参:" + kRequest); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 OrganizationNodeServiceInitSchoolClassesResult kResult = seewoClient.invoke(kRequest); logger.info("出参:" + kResult); } //新增班级和年级 public CommonResult SeewoInsertOrUpdateClass(SeewoClient seewoClient, Integer classNo, String className, Integer gradeNo, Integer nowMonth) { String[] result = new String[2]; //初始化客户端 //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); ClassServiceBatchSaveClassParam param = new ClassServiceBatchSaveClassParam(); //请求体,MimeType为 application/json ClassServiceBatchSaveClassParam.JSONRequestBody requestBody = ClassServiceBatchSaveClassParam.JSONRequestBody.builder() .build(); param.setRequestBody(requestBody); //查询条件 ClassServiceBatchSaveClassParam.ClassSaveQuery query = ClassServiceBatchSaveClassParam.ClassSaveQuery.builder() .appId(seewoConfig.getAppId()) .schoolUid(seewoConfig.getSchoolId()) .build(); requestBody.setQuery(query); //班级信息列表 ClassServiceBatchSaveClassParam.ClassInfo classList = ClassServiceBatchSaveClassParam.ClassInfo.builder() .stageCode("CodeSchoolStage_1") .clazz(classNo) .nickName(className) .grade(gradeNo) .gradeYear(ClassYear.getAdmissionYear(gradeNo, Year.now().getValue(), LocalDate.now())) .build(); query.setClassList(java.util.Collections.singletonList(classList)); param.setRequestBody(requestBody); ClassServiceBatchSaveClassRequest request = new ClassServiceBatchSaveClassRequest(param); logger.info("入参:" + request); logger.info("入参body:" + JSON.toJSON(requestBody)); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: // request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 ClassServiceBatchSaveClassResult xwResult = seewoClient.invoke(request); logger.info("出参:" + xwResult); if (xwResult == null) { return CommonResult.fail("希沃班级数据新增失败!"); } if (!xwResult.getResponseBody().getCode().equals("000000")) { return CommonResult.fail(xwResult.getResponseBody().getMessage()); } String gradeUid = xwResult.getResponseBody().getData().get(0).getGradeUid(); String classUid = xwResult.getResponseBody().getData().get(0).getUid(); result[0] = gradeUid; result[1] = classUid; return CommonResult.ok(result); } //endregion @Override @DESRespondSecret(validated = true) public CommonResult initSchoolClasses() { //初始化客户端 SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret())); OrganizationNodeServiceInitSchoolClassesParam param = new OrganizationNodeServiceInitSchoolClassesParam(); //响应体,MimeType为 application/json OrganizationNodeServiceInitSchoolClassesParam.RequestBody requestBody = OrganizationNodeServiceInitSchoolClassesParam.RequestBody.builder() .build(); param.setRequestBody(requestBody); //query OrganizationNodeServiceInitSchoolClassesParam.Query query = OrganizationNodeServiceInitSchoolClassesParam.Query.builder() .appId(seewoConfig.getAppId()) .unitUid(seewoConfig.getSchoolId()) .campusName("宜阳学校") .build(); requestBody.setQuery(query); //新增班级列表(最大200条) OrganizationNodeServiceInitSchoolClassesParam.Object classList = OrganizationNodeServiceInitSchoolClassesParam.Object.builder() .stageName("初中") .gradeYear(2022) .build(); query.setClassList(java.util.Collections.singletonList(classList)); param.setRequestBody(requestBody); OrganizationNodeServiceInitSchoolClassesRequest request = new OrganizationNodeServiceInitSchoolClassesRequest(param); logger.info("入参:" + request); //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如: //request.setServerUrl("https://openapi.test.seewo.com") //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法 OrganizationNodeServiceInitSchoolClassesResult result = seewoClient.invoke(request); logger.info("出参:" + result); return null; } }