SmartClassController.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  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.annotation.DESRespondSecret;
  8. import com.template.api.SmartClassControllerAPI;
  9. import com.template.common.utils.*;
  10. import com.template.config.ControlConfig;
  11. import com.template.config.SeewoConfig;
  12. import com.template.model.pojo.*;
  13. import com.template.model.request.insertSmartClassRequest;
  14. import com.template.model.request.updateClassRequest;
  15. import com.template.model.result.CommonResult;
  16. import com.template.model.result.PageUtils;
  17. import com.template.model.seewo.*;
  18. import com.template.model.vo.*;
  19. import com.template.services.SmartClassService;
  20. import com.template.services.SmartGradeService;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import org.springframework.validation.BindingResult;
  24. import org.springframework.web.bind.annotation.RestController;
  25. import javax.annotation.Resource;
  26. import java.io.UnsupportedEncodingException;
  27. import java.net.URLDecoder;
  28. import java.net.URLEncoder;
  29. import java.util.ArrayList;
  30. import java.util.List;
  31. import java.util.Optional;
  32. import static com.template.common.utils.AesTestOne.decrypt;
  33. /**
  34. * <p>
  35. * 楼栋表 前端控制器
  36. * </p>
  37. *
  38. * @author ceshi
  39. * @since 2023-12-25
  40. */
  41. @RestController
  42. //返回参数加密注解
  43. @DESRespondSecret
  44. public class SmartClassController implements SmartClassControllerAPI {
  45. @Resource
  46. private SeewoConfig seewoConfig;
  47. @Resource
  48. private ControlConfig controlConfig;
  49. @Autowired
  50. private SmartClassService smartClassService;
  51. @Autowired
  52. private SmartGradeService smartGradeService;
  53. @Override
  54. @DESRespondSecret(validated = true)
  55. public CommonResult insertSmartClass(SmartClass smartApply, BindingResult bindingResult) {
  56. return null;
  57. }
  58. @Override
  59. @DESRespondSecret(validated = true)
  60. public CommonResult updateSmartClassById(updateClassRequest ucr, BindingResult bindingResult) throws Exception {
  61. if (bindingResult.hasErrors()) {
  62. String st = paramUtils.getParamError(bindingResult);
  63. return CommonResult.fail(st);
  64. }
  65. //数据ID是否有效
  66. SmartClass oldData = smartClassService.querySmartClassById(ucr.getId());
  67. if (oldData == null) {
  68. return CommonResult.fail("班级数据无效,更新失败");
  69. }
  70. //判断重复性
  71. SmartClass existData = smartClassService.existSmartClassData(oldData.getGradeId(), ucr.getName(), ucr.getClassNo());
  72. if (existData != null && !existData.getId().equals(ucr.getId())) {
  73. return CommonResult.fail("该班级数据已在系统中存在,更新失败");
  74. }
  75. //region 修改百胜中的班级数据
  76. String appId = controlConfig.getAppId();
  77. String schoolno = controlConfig.getSchoolCode();
  78. String timestamp = TimeExchange.DateNowTimeStamo();
  79. String className = ucr.getName();
  80. String appSecret = controlConfig.getAppSecret();
  81. String url = controlConfig.getUrl() + "classtab/update";
  82. JSONObject jsonobject = new JSONObject();
  83. jsonobject.put("appid", appId);
  84. String str = "{\"classtab_no\":\"" + oldData.getBsClassNo() + "\",\"classtab_name\":\"" + oldData.getName() + "\"}";
  85. String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "UTF-8");
  86. jsonobject.put("data", aesStr);
  87. jsonobject.put("schoolno", schoolno);
  88. jsonobject.put("timestamp", timestamp);
  89. String md5Str = "appid=" + appId + "&data={\"classtab_no\":\"" + oldData.getBsClassNo() + "\",\"classtab_name\":\"" + oldData.getName() + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
  90. String sign = CommonUtil.MD5(md5Str);
  91. //sign签名
  92. jsonobject.put("sign", sign);
  93. //返回的结果中 code为1表示成功
  94. String result = RequestUtils.httpPost(url, jsonobject.toJSONString());
  95. if (result.contains("更新成功")) {
  96. oldData.setClassNo(ucr.getClassNo());
  97. oldData.setName(ucr.getName());
  98. int updateClass = smartClassService.updateSmartClass(oldData);
  99. if (updateClass <= 0) {
  100. return CommonResult.fail("班级信息更新失败");
  101. }
  102. } else {
  103. return CommonResult.fail("班级信息更新失败");
  104. }
  105. //endregion
  106. return CommonResult.ok("班级信息更新成功");
  107. }
  108. @Override
  109. @DESRespondSecret(validated = true)
  110. public CommonResult queryPageSmartClasss(int currentPage, int pageCount, String name) {
  111. PageUtils<SmartClass> result = smartClassService.queryPageSmartClass(currentPage, pageCount, name);
  112. PageUtils<SmartClassPageVo> datas = new PageUtils<SmartClassPageVo>(null, result.getTotalCount(), result.getPageSize(), result.getCurrPage());
  113. if (result != null && result.getList().size() > 0) {
  114. List<SmartGrade> grades = smartGradeService.getSmartGrades();
  115. List<SmartClassPageVo> pages = new ArrayList<>();
  116. for (SmartClass data : result.getList()) {
  117. SmartClassPageVo pageData = new SmartClassPageVo();
  118. pageData.setId(data.getId());
  119. pageData.setGradeId(data.getGradeId());
  120. Optional<SmartGrade> grade = grades.stream().filter(e -> e.getId().equals(data.getGradeId())).findFirst();
  121. if (grade != null && grade.isPresent()) {
  122. pageData.setGradeStr(grade.get().getName());
  123. }
  124. pageData.setClassUid(data.getClassUid());
  125. pageData.setName(data.getName());
  126. pageData.setClassNo(data.getClassNo());
  127. pageData.setBsClassNo(data.getBsClassNo());
  128. pages.add(pageData);
  129. }
  130. datas = new PageUtils<SmartClassPageVo>(pages, result.getTotalCount(), result.getPageSize(), result.getCurrPage());
  131. }
  132. return CommonResult.ok(datas);
  133. }
  134. @Override
  135. @DESRespondSecret(validated = true)
  136. public CommonResult deleteSmartClassById(int id) {
  137. return null;
  138. }
  139. @Override
  140. @DESRespondSecret(validated = true)
  141. public CommonResult querySmartClasss(int gradeId) {
  142. List<SmartClass> datas = smartClassService.getSmartClassByGradeID(gradeId);
  143. List<SemesterVo> result = new ArrayList<>();
  144. for (SmartClass data : datas) {
  145. SemesterVo model = new SemesterVo();
  146. model.setId(data.getId());
  147. model.setName(data.getName());
  148. result.add(model);
  149. }
  150. return CommonResult.ok(result);
  151. }
  152. @Override
  153. @Transactional(rollbackFor = {Exception.class})
  154. public CommonResult insertSmartClassToBaisheng(insertSmartClassRequest iscr, BindingResult bindingResult) throws Exception {
  155. if (bindingResult.hasErrors()) {
  156. String st = paramUtils.getParamError(bindingResult);
  157. return CommonResult.fail(st);
  158. }
  159. //先查找年级编号对应的年级数据是否存在
  160. SmartGrade grade = smartGradeService.querySmartGradeByBaisheng(iscr.getGradeNo());
  161. if (grade == null) {
  162. return CommonResult.fail("添加班级前,请先添加对应年级数据");
  163. }
  164. //判断重复性
  165. int existCount = smartClassService.existSmartClass(iscr.getClassName(), grade.getId());
  166. if (existCount > 0) {
  167. return CommonResult.fail("该班级数据已在系统中存在,请勿重复添加");
  168. }
  169. String appId = controlConfig.getAppId();
  170. String schoolno = controlConfig.getSchoolCode();
  171. String timestamp = TimeExchange.DateNowTimeStamo();
  172. String className = iscr.getClassName();
  173. String gradeNo = iscr.getGradeNo();
  174. String appSecret = controlConfig.getAppSecret();
  175. String url = controlConfig.getUrl() + "classtab/create";
  176. JSONObject jsonobject = new JSONObject();
  177. jsonobject.put("appid", appId);
  178. String str = "{\"grade_no\":\"" + gradeNo + "\",\"classtab_name\":\"" + grade.getName() + className + "\"}";
  179. String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "UTF-8");
  180. jsonobject.put("data", aesStr);
  181. jsonobject.put("schoolno", schoolno);
  182. jsonobject.put("timestamp", timestamp);
  183. String md5Str = "appid=" + appId + "&data={\"grade_no\":\"" + gradeNo + "\",\"classtab_name\":\"" + grade.getName() + className + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
  184. String sign = CommonUtil.MD5(md5Str);
  185. //sign签名
  186. jsonobject.put("sign", sign);
  187. //返回的结果中 code为1表示成功
  188. String result = RequestUtils.httpPost(url, jsonobject.toJSONString());
  189. if (result.contains("添加成功")) {
  190. //region 将K12校区的班级数据初始化
  191. //希沃班级传输特点:
  192. //当前月份小于9月份就传当前年份 - 1 ;如果大于9月份就传当前年份
  193. Integer nowMonth = Integer.valueOf(TimeExchange.getNowMonth());
  194. //初始化客户端
  195. SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
  196. OrganizationNodeServiceInitSchoolClassesParam kParam = new OrganizationNodeServiceInitSchoolClassesParam();
  197. //响应体,MimeType为 application/json
  198. OrganizationNodeServiceInitSchoolClassesParam.RequestBody kRequestBody = OrganizationNodeServiceInitSchoolClassesParam.RequestBody.builder()
  199. .build();
  200. kParam.setRequestBody(kRequestBody);
  201. //query
  202. OrganizationNodeServiceInitSchoolClassesParam.Query kQuery = OrganizationNodeServiceInitSchoolClassesParam.Query.builder()
  203. .appId(seewoConfig.getAppId())
  204. .unitUid(seewoConfig.getSchoolId())
  205. .campusName("宜阳学校")
  206. .build();
  207. kRequestBody.setQuery(kQuery);
  208. //新增班级列表(最大200条)
  209. OrganizationNodeServiceInitSchoolClassesParam.Object kClassList = OrganizationNodeServiceInitSchoolClassesParam.Object.builder()
  210. .stageName("初中")
  211. .gradeYear(nowMonth < 9 ? Integer.valueOf(TimeExchange.getYear()).intValue() - 1 : Integer.valueOf(TimeExchange.getYear()))
  212. .build();
  213. kQuery.setClassList(java.util.Collections.singletonList(kClassList));
  214. kParam.setRequestBody(kRequestBody);
  215. OrganizationNodeServiceInitSchoolClassesRequest kRequest = new OrganizationNodeServiceInitSchoolClassesRequest(kParam);
  216. System.out.println("入参:" + kRequest);
  217. //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
  218. //request.setServerUrl("https://openapi.test.seewo.com")
  219. //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
  220. OrganizationNodeServiceInitSchoolClassesResult kResult = seewoClient.invoke(kRequest);
  221. System.out.println("出参:" + kResult);
  222. //endregion
  223. //region 将数据加入希沃系统中
  224. //初始化客户端
  225. //SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
  226. ClassServiceBatchSaveClassParam param = new ClassServiceBatchSaveClassParam();
  227. //请求体,MimeType为 application/json
  228. ClassServiceBatchSaveClassParam.JSONRequestBody requestBody = ClassServiceBatchSaveClassParam.JSONRequestBody.builder()
  229. .build();
  230. param.setRequestBody(requestBody);
  231. //查询条件
  232. ClassServiceBatchSaveClassParam.ClassSaveQuery query = ClassServiceBatchSaveClassParam.ClassSaveQuery.builder()
  233. .appId(seewoConfig.getAppId())
  234. .schoolUid(seewoConfig.getSchoolId())
  235. .build();
  236. requestBody.setQuery(query);
  237. //班级信息列表
  238. ClassServiceBatchSaveClassParam.ClassInfo classList = ClassServiceBatchSaveClassParam.ClassInfo.builder()
  239. .stageCode("CodeSchoolStage_1")
  240. .clazz(iscr.getClassNo())
  241. .nickName(iscr.getClassName())
  242. .grade(grade.getGradeNo())
  243. .gradeYear(nowMonth < 9 ? Integer.valueOf(TimeExchange.getYear()).intValue() - 1 : Integer.valueOf(TimeExchange.getYear()))
  244. .build();
  245. query.setClassList(java.util.Collections.singletonList(classList));
  246. param.setRequestBody(requestBody);
  247. ClassServiceBatchSaveClassRequest request = new ClassServiceBatchSaveClassRequest(param);
  248. System.out.println("入参:" + request);
  249. //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
  250. // request.setServerUrl("https://openapi.test.seewo.com")
  251. //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
  252. ClassServiceBatchSaveClassResult xwResult = seewoClient.invoke(request);
  253. System.out.println("出参:" + xwResult);
  254. if (xwResult == null) {
  255. return CommonResult.fail("希沃班级数据新增失败!");
  256. }
  257. if (!xwResult.getResponseBody().getCode().equals("000000")) {
  258. return CommonResult.fail(xwResult.getResponseBody().getMessage());
  259. }
  260. //endregion
  261. //希沃添加年级和班级数据是:存在就覆盖 不存在就新增
  262. //要拿到希沃的年级Uid和班级Uid
  263. String gradeUid = xwResult.getResponseBody().getData().get(0).getGradeUid();
  264. String classUid = xwResult.getResponseBody().getData().get(0).getUid();
  265. ObjectMapper objectMapper = new ObjectMapper();
  266. BsClassVo classVo = objectMapper.readValue(result, BsClassVo.class);
  267. // URL解码
  268. String decodedUrl = URLDecoder.decode(classVo.getData(), "UTF-8");
  269. BsClassNoVo classNo = objectMapper.readValue(decrypt(decodedUrl, controlConfig.getAppSecret()), BsClassNoVo.class);
  270. if (classNo == null) {
  271. return CommonResult.fail("百胜班级编号为空,新增失败");
  272. }
  273. SmartClass smartClass = new SmartClass();
  274. smartClass.setGradeId(grade.getId());
  275. smartClass.setClassUid(classUid);
  276. smartClass.setName(iscr.getClassName());
  277. smartClass.setClassNo(iscr.getClassNo());
  278. smartClass.setBsClassNo(classNo.getClasstab_no());
  279. grade.setGradeUid(gradeUid);
  280. try {
  281. int insertClass = smartClassService.insertSmartClass(smartClass);
  282. if (insertClass <= 0) {
  283. throw new Exception("新增失败");
  284. }
  285. int updateGrade = smartGradeService.updateSmartGrade(grade);
  286. if (updateGrade <= 0) {
  287. throw new Exception("新增失败");
  288. }
  289. } catch (Exception e) {
  290. throw new Exception("新增失败");
  291. }
  292. return CommonResult.ok("新增成功");
  293. }
  294. return CommonResult.fail("操作失败");
  295. }
  296. @Override
  297. @DESRespondSecret(validated = true)
  298. public CommonResult insertTestClassToXw(insertSmartClassRequest iscr, BindingResult bindingResult) throws Exception {
  299. if (bindingResult.hasErrors()) {
  300. String st = paramUtils.getParamError(bindingResult);
  301. return CommonResult.fail(st);
  302. }
  303. //先查找年级编号对应的年级数据是否存在
  304. SmartGrade grade = smartGradeService.querySmartGradeByBaisheng(iscr.getGradeNo());
  305. if (grade == null) {
  306. return CommonResult.fail("添加班级前,请先添加对应年级数据");
  307. }
  308. //判断重复性
  309. int existCount = smartClassService.existSmartClass(iscr.getClassName(), grade.getId());
  310. if (existCount > 0) {
  311. return CommonResult.fail("该班级数据已在系统中存在,请勿重复添加");
  312. }
  313. //希沃班级传输特点:
  314. //当前月份小于9月份就传当前年份 - 1 ;如果大于9月份就传当前年份
  315. Integer nowMonth = Integer.valueOf(TimeExchange.getNowMonth());
  316. //region 将数据加入希沃系统中
  317. //初始化客户端
  318. SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
  319. ClassServiceBatchSaveClassParam param = new ClassServiceBatchSaveClassParam();
  320. //请求体,MimeType为 application/json
  321. ClassServiceBatchSaveClassParam.JSONRequestBody requestBody = ClassServiceBatchSaveClassParam.JSONRequestBody.builder()
  322. .build();
  323. param.setRequestBody(requestBody);
  324. //查询条件
  325. ClassServiceBatchSaveClassParam.ClassSaveQuery query = ClassServiceBatchSaveClassParam.ClassSaveQuery.builder()
  326. .appId(seewoConfig.getAppId())
  327. .schoolUid(seewoConfig.getSchoolId())
  328. .build();
  329. requestBody.setQuery(query);
  330. //班级信息列表
  331. ClassServiceBatchSaveClassParam.ClassInfo classList = ClassServiceBatchSaveClassParam.ClassInfo.builder()
  332. .stageCode("CodeSchoolStage_1")
  333. .clazz(iscr.getClassNo())
  334. .nickName(iscr.getClassName())
  335. .grade(grade.getGradeNo())
  336. .gradeYear(nowMonth < 9 ? Integer.valueOf(TimeExchange.getYear()).intValue() - 1 : Integer.valueOf(TimeExchange.getYear()))
  337. .build();
  338. query.setClassList(java.util.Collections.singletonList(classList));
  339. param.setRequestBody(requestBody);
  340. ClassServiceBatchSaveClassRequest request = new ClassServiceBatchSaveClassRequest(param);
  341. System.out.println("入参:" + request);
  342. //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
  343. // request.setServerUrl("https://openapi.test.seewo.com")
  344. //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
  345. ClassServiceBatchSaveClassResult xwResult = seewoClient.invoke(request);
  346. System.out.println("出参:" + xwResult);
  347. if (xwResult == null) {
  348. return CommonResult.fail("希沃班级数据新增失败!");
  349. }
  350. if (!xwResult.getResponseBody().getCode().equals("000000")) {
  351. return CommonResult.fail(xwResult.getResponseBody().getMessage());
  352. }
  353. //endregion
  354. //希沃添加年级和班级数据是:存在就覆盖 不存在就新增
  355. //要拿到希沃的年级Uid和班级Uid
  356. String gradeUid = xwResult.getResponseBody().getData().get(0).getGradeUid();
  357. String classUid = xwResult.getResponseBody().getData().get(0).getUid();
  358. SmartClass smartClass = new SmartClass();
  359. smartClass.setGradeId(grade.getId());
  360. smartClass.setClassUid(classUid);
  361. smartClass.setName(iscr.getClassName());
  362. smartClass.setClassNo(iscr.getClassNo());
  363. smartClass.setBsClassNo("bs");
  364. grade.setGradeUid(gradeUid);
  365. try {
  366. int insertClass = smartClassService.insertSmartClass(smartClass);
  367. if (insertClass <= 0) {
  368. throw new Exception("新增失败");
  369. }
  370. int updateGrade = smartGradeService.updateSmartGrade(grade);
  371. if (updateGrade <= 0) {
  372. throw new Exception("新增失败");
  373. }
  374. } catch (Exception e) {
  375. throw new Exception("新增失败");
  376. }
  377. return CommonResult.ok("新增成功");
  378. }
  379. @Override
  380. @DESRespondSecret(validated = true)
  381. public CommonResult initSchoolClasses() {
  382. //初始化客户端
  383. SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
  384. OrganizationNodeServiceInitSchoolClassesParam param = new OrganizationNodeServiceInitSchoolClassesParam();
  385. //响应体,MimeType为 application/json
  386. OrganizationNodeServiceInitSchoolClassesParam.RequestBody requestBody = OrganizationNodeServiceInitSchoolClassesParam.RequestBody.builder()
  387. .build();
  388. param.setRequestBody(requestBody);
  389. //query
  390. OrganizationNodeServiceInitSchoolClassesParam.Query query = OrganizationNodeServiceInitSchoolClassesParam.Query.builder()
  391. .appId(seewoConfig.getAppId())
  392. .unitUid(seewoConfig.getSchoolId())
  393. .campusName("宜阳学校")
  394. .build();
  395. requestBody.setQuery(query);
  396. //新增班级列表(最大200条)
  397. OrganizationNodeServiceInitSchoolClassesParam.Object classList = OrganizationNodeServiceInitSchoolClassesParam.Object.builder()
  398. .stageName("初中")
  399. .gradeYear(2022)
  400. .build();
  401. query.setClassList(java.util.Collections.singletonList(classList));
  402. param.setRequestBody(requestBody);
  403. OrganizationNodeServiceInitSchoolClassesRequest request = new OrganizationNodeServiceInitSchoolClassesRequest(param);
  404. System.out.println("入参:" + request);
  405. //如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
  406. //request.setServerUrl("https://openapi.test.seewo.com")
  407. //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
  408. OrganizationNodeServiceInitSchoolClassesResult result = seewoClient.invoke(request);
  409. System.out.println("出参:" + result);
  410. return null;
  411. }
  412. }