SmartDepartmentController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  4. import com.fasterxml.jackson.core.JsonProcessingException;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.template.annotation.DESRespondSecret;
  7. import com.template.api.SmartDepartmentControllerAPI;
  8. import com.template.common.utils.*;
  9. import com.template.config.ControlConfig;
  10. import com.template.model.pojo.SmartDepartment;
  11. import com.template.model.request.insertDepartmentRequest;
  12. import com.template.model.request.updateDepartmentRequest;
  13. import com.template.model.result.CommonResult;
  14. import com.template.model.result.PageUtils;
  15. import com.template.model.vo.*;
  16. import com.template.services.SmartDepartmentService;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.validation.BindingResult;
  19. import org.springframework.web.bind.annotation.RestController;
  20. import javax.annotation.Resource;
  21. import java.io.UnsupportedEncodingException;
  22. import java.net.URLDecoder;
  23. import java.net.URLEncoder;
  24. import java.util.ArrayList;
  25. import java.util.List;
  26. import java.util.stream.Collectors;
  27. import static com.template.common.utils.AesTestOne.decrypt;
  28. /**
  29. * <p>
  30. * 前端控制器
  31. * </p>
  32. *
  33. * @author ceshi
  34. * @since 2023-12-04
  35. */
  36. @RestController
  37. //返回参数加密注解
  38. @DESRespondSecret
  39. public class SmartDepartmentController implements SmartDepartmentControllerAPI {
  40. @Resource
  41. private ControlConfig controlConfig;
  42. @Autowired
  43. private SmartDepartmentService smartDepartmentService;
  44. /**
  45. * 新增部门
  46. *
  47. * @param smartDepartment 部门数据
  48. * @param bindingResult
  49. * @return
  50. */
  51. @Override
  52. @DESRespondSecret(validated = true)
  53. public CommonResult insertSmartDepartment(insertDepartmentRequest smartDepartment, BindingResult bindingResult) throws Exception {
  54. if (bindingResult.hasErrors()) {
  55. String st = paramUtils.getParamError(bindingResult);
  56. return CommonResult.fail(st);
  57. }
  58. //新增的时候判断是否存在重复部门名称数据
  59. int exist = smartDepartmentService.existDataByName(smartDepartment.getName());
  60. if (exist > 0) {
  61. return CommonResult.fail(smartDepartment.getName() + "部门名称数据已存在,请勿重复添加!");
  62. }
  63. SmartDepartment sd = new SmartDepartment();
  64. sd.setParentId(smartDepartment.getParentId());
  65. sd.setName(smartDepartment.getName());
  66. //region 百胜添加教师数据
  67. String appId = controlConfig.getAppId();
  68. String schoolno = controlConfig.getSchoolCode();
  69. String timestamp = TimeExchange.DateNowTimeStamo();
  70. String appSecret = controlConfig.getAppSecret();
  71. String url = controlConfig.getUrl() + "department/create";
  72. JSONObject jsonobject = new JSONObject();
  73. jsonobject.put("appid", appId);
  74. String str = "{\"department_name\":\"" + smartDepartment.getName() + "\"}";
  75. String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "UTF-8");
  76. jsonobject.put("data", aesStr);
  77. jsonobject.put("schoolno", schoolno);
  78. jsonobject.put("timestamp", timestamp);
  79. String md5Str = "appid=" + appId + "&data={\"department_name\":\"" + smartDepartment.getName() + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
  80. String sign = CommonUtil.MD5(md5Str);
  81. //sign签名
  82. jsonobject.put("sign", sign);
  83. //返回的结果中 code为1表示成功
  84. String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString());
  85. if (bsResult.contains("添加成功")) {
  86. ObjectMapper objectMapper = new ObjectMapper();
  87. BsDepartmentVo department = objectMapper.readValue(bsResult, BsDepartmentVo.class);
  88. // URL解码
  89. String decodedUrl = URLDecoder.decode(department.getData(), "UTF-8");
  90. BsDepartmentNoVo departmentData = objectMapper.readValue(decrypt(decodedUrl, controlConfig.getAppSecret()), BsDepartmentNoVo.class);
  91. sd.setBsDepartmentNo(departmentData.getDepartment_no());
  92. }
  93. //endregion
  94. int result = smartDepartmentService.insertSmartDepartment(sd);
  95. return result > 0 ? CommonResult.ok("添加成功") : CommonResult.fail("添加失败");
  96. }
  97. /**
  98. * 更新部门
  99. *
  100. * @param udr 部门数据
  101. * @param bindingResult
  102. * @return
  103. */
  104. @Override
  105. @DESRespondSecret(validated = true)
  106. public CommonResult updateSmartDepartmentById(updateDepartmentRequest udr, BindingResult bindingResult) throws Exception {
  107. if (bindingResult.hasErrors()) {
  108. String st = paramUtils.getParamError(bindingResult);
  109. return CommonResult.fail(st);
  110. }
  111. SmartDepartment oldData = smartDepartmentService.getSmartById(udr.getId());
  112. if (oldData == null) {
  113. return CommonResult.fail("部门数据无效,修改失败");
  114. }
  115. SmartDepartment exist = smartDepartmentService.getSmartByName(udr.getName());
  116. if (exist != null && !exist.getId().equals(udr.getId())) {
  117. return CommonResult.fail(udr.getName() + "部门名称数据已存在,请勿重复添加!");
  118. }
  119. SmartDepartment sd = new SmartDepartment();
  120. sd.setId(udr.getId());
  121. sd.setParentId(udr.getParentId());
  122. sd.setName(udr.getName());
  123. //region 百胜添加教师数据
  124. String appId = controlConfig.getAppId();
  125. String schoolno = controlConfig.getSchoolCode();
  126. String timestamp = TimeExchange.DateNowTimeStamo();
  127. String appSecret = controlConfig.getAppSecret();
  128. String url = controlConfig.getUrl() + "department/update";
  129. JSONObject jsonobject = new JSONObject();
  130. jsonobject.put("appid", appId);
  131. String str = "{\"department_no\":\"" + oldData.getBsDepartmentNo() + "\"department_name\":\"" + udr.getName() + "\"}";
  132. String aesStr = URLEncoder.encode(AesTestOne.encrypt(str, controlConfig.getAppSecret()), "UTF-8");
  133. jsonobject.put("data", aesStr);
  134. jsonobject.put("schoolno", schoolno);
  135. jsonobject.put("timestamp", timestamp);
  136. String md5Str = "appid=" + appId + "&data={\"department_no\":\"" + oldData.getBsDepartmentNo() + "\"department_name\":\"" + udr.getName() + "\"}" + "&schoolno=" + schoolno + "&timestamp=" + timestamp + "&key=" + appSecret;
  137. String sign = CommonUtil.MD5(md5Str);
  138. //sign签名
  139. jsonobject.put("sign", sign);
  140. //返回的结果中 code为1表示成功
  141. String bsResult = RequestUtils.httpPost(url, jsonobject.toJSONString());
  142. if (bsResult.contains("添加成功")) {
  143. ObjectMapper objectMapper = new ObjectMapper();
  144. BsDepartmentVo department = objectMapper.readValue(bsResult, BsDepartmentVo.class);
  145. // URL解码
  146. String decodedUrl = URLDecoder.decode(department.getData(), "UTF-8");
  147. BsDepartmentNoVo departmentData = objectMapper.readValue(decrypt(decodedUrl, controlConfig.getAppSecret()), BsDepartmentNoVo.class);
  148. sd.setBsDepartmentNo(departmentData.getDepartment_no());
  149. }
  150. //endregion
  151. int result = smartDepartmentService.updateSmartDepartment(sd);
  152. return result > 0 ? CommonResult.ok("修改成功") : CommonResult.fail("修改失败");
  153. }
  154. /**
  155. * 部门分页数据查询
  156. *
  157. * @param currentPage 当前页数
  158. * @param pageCount 一页数据条数
  159. * @param name 查询名称
  160. * @return
  161. */
  162. @Override
  163. @DESRespondSecret(validated = true)
  164. public CommonResult queryPageSmartDepartments(int currentPage, int pageCount, String name) {
  165. PageUtils<SmartDepartment> result = smartDepartmentService.queryPageSmartDepartments(currentPage, pageCount, name);
  166. return CommonResult.ok(result);
  167. }
  168. @Override
  169. @DESRespondSecret(validated = true)
  170. public CommonResult deleteSmartDepartmentById(int id) {
  171. SmartDepartment data = smartDepartmentService.getSmartById(id);
  172. if (data == null) {
  173. return CommonResult.fail("当前数据不存在,删除失败!");
  174. }
  175. int result = smartDepartmentService.deleteSmartDepartmentById(id);
  176. return result > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败");
  177. }
  178. /**
  179. * 根据部门名称查询部门树形图结构数据
  180. *
  181. * @param name 部门名称
  182. * @return
  183. */
  184. @Override
  185. @DESRespondSecret(validated = true)
  186. public CommonResult queryDepartmentTree(String name) {
  187. List<SmartDepartment> result = smartDepartmentService.getSmartsByName(name);
  188. List<SmartDepartment> zeroResult = result.stream().filter(e -> e.getParentId().intValue() == 0).collect(Collectors.toList());
  189. List<DepartmentTreeVo> departments = new ArrayList<>();
  190. if (ObjectUtils.isEmpty(name)) {
  191. for (SmartDepartment data : zeroResult) {
  192. DepartmentTreeVo newData = new DepartmentTreeVo().builder()
  193. .id(data.getId())
  194. .name(data.getName())
  195. .parentId(data.getParentId())
  196. .build();
  197. List<DepartmentTreeVo> departmentTrees = QueryDepartmentTreeRecords(newData.getId(), result);
  198. newData.setChildren(departmentTrees);
  199. departments.add(newData);
  200. }
  201. } else {
  202. for (SmartDepartment data : result) {
  203. DepartmentTreeVo newData = new DepartmentTreeVo().builder()
  204. .id(data.getId())
  205. .name(data.getName())
  206. .parentId(data.getParentId())
  207. .build();
  208. departments.add(newData);
  209. }
  210. }
  211. return CommonResult.ok(departments);
  212. }
  213. /**
  214. * 根据父级ID获取树形数据
  215. *
  216. * @param parentID 父级ID
  217. * @param lists 数据集合
  218. * @return
  219. */
  220. private List<DepartmentTreeVo> QueryDepartmentTreeRecords(Integer parentID, List<SmartDepartment> lists) {
  221. List<DepartmentTreeVo> newTrees = new ArrayList<>();
  222. List<SmartDepartment> datas = lists.stream().filter(e -> e.getParentId().equals(parentID)).collect(Collectors.toList());
  223. for (SmartDepartment data : datas) {
  224. DepartmentTreeVo item = DepartmentTreeVo.builder()
  225. .id(data.getId())
  226. .parentId(parentID)
  227. .name(data.getName())
  228. .build();
  229. List<DepartmentTreeVo> news = QueryDepartmentTreeRecords(item.getId(), lists);
  230. if (news == null || news.size() == 0) {
  231. newTrees.add(item);
  232. continue;
  233. } else {
  234. item.setChildren(news);
  235. newTrees.add(item);
  236. }
  237. }
  238. return newTrees;
  239. }
  240. }