SmartClassController.java 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.seewo.open.sdk.DefaultSeewoClient;
  5. import com.seewo.open.sdk.SeewoClient;
  6. import com.seewo.open.sdk.auth.Account;
  7. import com.template.api.SmartClassControllerAPI;
  8. import com.template.common.utils.*;
  9. import com.template.config.ControlConfig;
  10. import com.template.config.SeewoConfig;
  11. import com.template.model.pojo.*;
  12. import com.template.model.request.insertSmartClassRequest;
  13. import com.template.model.result.CommonResult;
  14. import com.template.model.seewo.ClassServiceBatchSaveClassParam;
  15. import com.template.model.seewo.ClassServiceBatchSaveClassRequest;
  16. import com.template.model.seewo.ClassServiceBatchSaveClassResult;
  17. import com.template.model.vo.*;
  18. import com.template.services.SmartClassService;
  19. import com.template.services.SmartGradeService;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import org.springframework.validation.BindingResult;
  23. import org.springframework.web.bind.annotation.RestController;
  24. import javax.annotation.Resource;
  25. import java.net.URLDecoder;
  26. import java.net.URLEncoder;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. import static com.template.common.utils.AesTestOne.decrypt;
  30. /**
  31. * <p>
  32. * 楼栋表 前端控制器
  33. * </p>
  34. *
  35. * @author ceshi
  36. * @since 2023-12-25
  37. */
  38. @RestController
  39. public class SmartClassController implements SmartClassControllerAPI {
  40. @Resource
  41. private SeewoConfig seewoConfig;
  42. @Resource
  43. private ControlConfig controlConfig;
  44. @Autowired
  45. private SmartClassService smartClassService;
  46. @Autowired
  47. private SmartGradeService smartGradeService;
  48. @Override
  49. public CommonResult insertSmartClass(SmartClass smartApply, BindingResult bindingResult) {
  50. return null;
  51. }
  52. @Override
  53. public CommonResult updateSmartClassById(SmartClass ra, BindingResult bindingResult) {
  54. return null;
  55. }
  56. @Override
  57. public CommonResult queryPageSmartClasss(int currentPage, int pageCount, String name) {
  58. return null;
  59. }
  60. @Override
  61. public CommonResult deleteSmartClassById(int id) {
  62. return null;
  63. }
  64. @Override
  65. public CommonResult querySmartClasss(int gradeId) {
  66. List<SmartClass> datas = smartClassService.getSmartClassByGradeID(gradeId);
  67. List<SemesterVo> result = new ArrayList<>();
  68. for (SmartClass data : datas) {
  69. SemesterVo model = new SemesterVo();
  70. model.setId(data.getId());
  71. model.setName(data.getName());
  72. result.add(model);
  73. }
  74. return CommonResult.ok(result);
  75. }
  76. @Override
  77. @Transactional(rollbackFor = {Exception.class})
  78. public CommonResult insertSmartClassToBaisheng(insertSmartClassRequest iscr, BindingResult bindingResult) throws Exception {
  79. if (bindingResult.hasErrors()) {
  80. String st = paramUtils.getParamError(bindingResult);
  81. return CommonResult.fail(st);
  82. }
  83. //先查找年级编号对应的年级数据是否存在
  84. SmartGrade grade = smartGradeService.querySmartGradeByBaisheng(iscr.getGradeNo());
  85. if (grade == null) {
  86. return CommonResult.fail("添加班级前,请先添加对应年级数据");
  87. }
  88. //判断重复性
  89. int existCount = smartClassService.existSmartClass(iscr.getClassName(), grade.getId());
  90. if (existCount > 0) {
  91. return CommonResult.fail("该班级数据已在系统中存在,请勿重复添加");
  92. }
  93. String appId = controlConfig.getAppId();
  94. String schoolno = controlConfig.getSchoolCode();
  95. String timestamp = TimeExchange.DateNowTimeStamo();
  96. String className = iscr.getClassName();
  97. String gradeNo = iscr.getGradeNo();
  98. String appSecret = controlConfig.getAppSecret();
  99. String url = "http://schoolopenapi.szymzh.com/openapi/classtab/create";
  100. JSONObject jsonobject = new JSONObject();
  101. jsonobject.put("appid", appId);
  102. String str = "{\"grade_no\":\"" + gradeNo + "\",\"classtab_name\":\"" + grade.getName() + className + "\"}";
  103. String aesStr = URLEncoder.encode(AesTestOne.encrypt(str), "UTF-8");
  104. jsonobject.put("data", aesStr);
  105. jsonobject.put("schoolno", schoolno);
  106. jsonobject.put("timestamp", timestamp);
  107. String md5Str = "appid=" + appId + "&data={\"grade_no\":\"" + gradeNo + "\",\"classtab_name\":\"" + grade.getName() + className + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
  108. String sign = CommonUtil.MD5(md5Str);
  109. //sign签名
  110. jsonobject.put("sign", sign);
  111. //返回的结果中 code为1表示成功
  112. String result = RequestUtils.httpPost(url, jsonobject.toJSONString());
  113. if (result.contains("添加成功")) {
  114. //将数据加入希沃系统中
  115. //初始化客户端
  116. SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
  117. ClassServiceBatchSaveClassParam param = new ClassServiceBatchSaveClassParam();
  118. //请求体,MimeType为 application/json
  119. ClassServiceBatchSaveClassParam.JSONRequestBody requestBody = ClassServiceBatchSaveClassParam.JSONRequestBody.builder()
  120. .build();
  121. param.setRequestBody(requestBody);
  122. //查询条件
  123. ClassServiceBatchSaveClassParam.ClassSaveQuery query = ClassServiceBatchSaveClassParam.ClassSaveQuery.builder()
  124. .appId(seewoConfig.getAppId())
  125. .schoolUid(seewoConfig.getSchoolId())
  126. .build();
  127. requestBody.setQuery(query);
  128. //班级信息列表
  129. ClassServiceBatchSaveClassParam.ClassInfo classList = ClassServiceBatchSaveClassParam.ClassInfo.builder()
  130. .stageCode("CodeSchoolStage_1")
  131. .clazz(iscr.getClassNo())
  132. .nickName(iscr.getClassName())
  133. .grade(grade.getGradeNo())
  134. .gradeYear(2024)
  135. .build();
  136. query.setClassList(java.util.Collections.singletonList(classList));
  137. param.setRequestBody(requestBody);
  138. ClassServiceBatchSaveClassRequest request = new ClassServiceBatchSaveClassRequest(param);
  139. System.out.println("入参:" + request);
  140. //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
  141. // request.setServerUrl("https://openapi.test.seewo.com")
  142. //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
  143. ClassServiceBatchSaveClassResult xwResult = seewoClient.invoke(request);
  144. System.out.println("出参:" + xwResult);
  145. if (xwResult == null) {
  146. return CommonResult.fail("希沃班级数据新增失败!");
  147. }
  148. if (!xwResult.getResponseBody().getCode().equals("000000")) {
  149. return CommonResult.fail(xwResult.getResponseBody().getMessage());
  150. }
  151. //希沃添加年级和班级数据是:存在就覆盖 不存在就新增
  152. //要拿到希沃的年级Uid和班级Uid
  153. String gradeUid = xwResult.getResponseBody().getData().get(0).getGradeUid();
  154. String classUid = xwResult.getResponseBody().getData().get(0).getUid();
  155. ObjectMapper objectMapper = new ObjectMapper();
  156. BsClassVo classVo = objectMapper.readValue(result, BsClassVo.class);
  157. // URL解码
  158. String decodedUrl = URLDecoder.decode(classVo.getData(), "UTF-8");
  159. BsClassNoVo classNo = objectMapper.readValue(decrypt(decodedUrl), BsClassNoVo.class);
  160. if (classNo == null) {
  161. return CommonResult.fail("百胜班级编号为空,新增失败");
  162. }
  163. SmartClass smartClass = new SmartClass();
  164. smartClass.setGradeId(grade.getId());
  165. smartClass.setClassUid(classUid);
  166. smartClass.setName(iscr.getClassName());
  167. smartClass.setClassNo(iscr.getClassNo());
  168. smartClass.setBsClassNo(classNo.getClasstab_no());
  169. grade.setGradeUid(gradeUid);
  170. try {
  171. int insertClass = smartClassService.insertSmartClass(smartClass);
  172. if (insertClass <= 0) {
  173. throw new Exception("新增失败");
  174. }
  175. int updateGrade = smartGradeService.updateSmartGrade(grade);
  176. if (updateGrade <= 0) {
  177. throw new Exception("新增失败");
  178. }
  179. } catch (Exception e) {
  180. throw new Exception("新增失败");
  181. }
  182. return CommonResult.ok("新增成功");
  183. }
  184. return CommonResult.fail("操作失败");
  185. }
  186. }