AppletLoginController.java 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  5. import com.fasterxml.jackson.core.type.TypeReference;
  6. import com.fasterxml.jackson.databind.ObjectMapper;
  7. import com.template.annotation.PassToken;
  8. import com.template.api.AppletLoginControllerAPI;
  9. import com.template.common.utils.AesUtils;
  10. import com.template.common.utils.HttpsClient;
  11. import com.template.common.utils.JWTUtil;
  12. import com.template.model.pojo.Admin;
  13. import com.template.model.pojo.AdminMenu;
  14. import com.template.model.pojo.PermissionSetting;
  15. import com.template.model.pojo.Users;
  16. import com.template.model.result.CommonResult;
  17. import com.template.services.AdminMenuService;
  18. import com.template.services.AdminService;
  19. import com.template.services.PermissionSettingService;
  20. import com.template.services.UsersService;
  21. import lombok.extern.slf4j.Slf4j;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.http.HttpEntity;
  24. import org.springframework.http.HttpHeaders;
  25. import org.springframework.http.MediaType;
  26. import org.springframework.http.ResponseEntity;
  27. import org.springframework.stereotype.Controller;
  28. import org.springframework.web.client.RestTemplate;
  29. import java.io.UnsupportedEncodingException;
  30. import java.net.URLEncoder;
  31. import java.util.HashMap;
  32. import java.util.Map;
  33. @Slf4j
  34. @Controller
  35. public class AppletLoginController implements AppletLoginControllerAPI {
  36. @Autowired
  37. UsersService usersService;
  38. @Autowired
  39. AdminService adminService;
  40. @Autowired
  41. AdminMenuService adminMenuService;
  42. @Autowired
  43. PermissionSettingService permissionSettingService;
  44. @Override
  45. @PassToken
  46. public String weixiaoAuth(String wxcode, String state) throws UnsupportedEncodingException {
  47. // 先获取wxcode
  48. log.info("wxcode参数=======>>>>wxcode: "+wxcode);
  49. log.info("state参数=======>>>>state: "+state);
  50. String tokenUrl = "https://open.wecard.qq.com/connect/oauth2/token";
  51. Map<String, String> tokenParams = new HashMap<>();
  52. tokenParams.put("wxcode", wxcode);
  53. tokenParams.put("app_key", "4FD5599032819781");
  54. tokenParams.put("app_secret", "0174DFB98063A612526C6B69F941E14A");
  55. tokenParams.put("grant_type", "authorization_code");
  56. tokenParams.put("redirect_uri", state); // 该地址需要与发起授权地址保持一直
  57. try {
  58. // wecode换取token
  59. RestTemplate client = new RestTemplate();
  60. HttpHeaders headers = new HttpHeaders();
  61. headers.setContentType(MediaType.APPLICATION_JSON);
  62. HttpEntity<Map<String, String>> request = new HttpEntity<>(tokenParams, headers);
  63. //ResponseEntity<String> tokenResponse = client.postForEntity(tokenUrl, tokenParams, String.class);(需要加头部)
  64. ResponseEntity<String> tokenResponse = client.postForEntity(tokenUrl, request, String.class);
  65. ObjectMapper mapper = new ObjectMapper();
  66. Map<String, Object> jsonMap = mapper.readValue(tokenResponse.getBody(), new TypeReference<Map<String, Object>>() {
  67. });
  68. String accessToken = (String) jsonMap.get("access_token");
  69. log.info("access_token参数=======>>>>accessToken: "+accessToken);
  70. // token换取用户信息
  71. String userInfoUrl = "https://open.wecard.qq.com/connect/oauth/get-user-info";
  72. Map<String, String> userInfoParam = new HashMap<>();
  73. userInfoParam.put("access_token", accessToken);
  74. log.info("请求地址=======>>>>userInfoUrl: "+userInfoUrl);
  75. log.info("请求参数=======>>>>userInfoParam: "+userInfoParam);
  76. // ResponseEntity<String> userInfoResponse = client.postForEntity(userInfoUrl, userInfoParam, String.class);(需要加头部)
  77. HttpEntity<Map<String, String>> request2 = new HttpEntity<>(userInfoParam, headers);
  78. ResponseEntity<String> userInfoResponse = client.postForEntity(userInfoUrl, request2, String.class);
  79. log.info("请求返回值=======>>>>userInfoUrl: "+userInfoResponse);
  80. Map<String, Object> userInfoMap = mapper.readValue(userInfoResponse.getBody(), new TypeReference<Map<String, Object>>() {
  81. });
  82. //
  83. // 身份证
  84. String idCard = userInfoMap.get("id_card").toString();
  85. System.out.println("idCard = " + idCard);
  86. // 用户姓名
  87. String name = userInfoMap.get("name").toString();
  88. String encodeName = URLEncoder.encode(name,"utf-8");
  89. System.out.println("encodeName = " + encodeName);
  90. // 身份职称
  91. String identityTitle = userInfoMap.get("identity_type").toString();
  92. // 用户电子卡号/学工号
  93. String cardNumber = userInfoMap.get("card_number").toString();
  94. System.out.println("cardNumber = " + cardNumber);
  95. // 手机号
  96. String telephone = userInfoMap.get("telephone").toString();
  97. String headImage = userInfoMap.get("head_image").toString();
  98. // 判断账号是否以添加,
  99. LambdaQueryWrapper<Users> wrapperU=new LambdaQueryWrapper<>();
  100. wrapperU.eq(Users::getCardNumber,cardNumber);
  101. Users users = usersService.getOne(wrapperU);
  102. String token = JWTUtil.getUsersToken(cardNumber);
  103. String adminId="";
  104. String adminMenuId="";
  105. String adminMenuName="";
  106. String usersId="";
  107. String manager="0";
  108. if (ObjectUtils.isNotEmpty(users)) {
  109. usersId = String.valueOf(users.getId());
  110. // 通过用户id找到管理端用户id和角色id
  111. LambdaQueryWrapper<Admin> wrapperA=new LambdaQueryWrapper<>();
  112. wrapperA.eq(Admin::getUsersId,usersId);
  113. Admin admin = adminService.getOne(wrapperA);
  114. // 通过用户找到管理端用户和管理端角色,有则返回,没有则不返回
  115. if (ObjectUtils.isNotEmpty(admin)) {
  116. adminId = String.valueOf(admin.getId());
  117. adminMenuId = admin.getAdminMenuId();
  118. AdminMenu adminMenu = adminMenuService.getById(adminMenuId);
  119. if (ObjectUtils.isNotEmpty(adminMenu)) {
  120. adminMenuName = adminMenu.getName();
  121. }
  122. // 判断是否是管理员
  123. PermissionSetting permissionSetting = permissionSettingService.getById(adminMenuId);
  124. if (ObjectUtils.isNotEmpty(permissionSetting)) {
  125. // 判断该用户是否拥有权限
  126. // 判断该用户是否拥有权限
  127. String processManagement = permissionSetting.getProcessManagement();
  128. if (processManagement.equals("0")) {
  129. manager="1";
  130. }else if (processManagement.contains("3")&&processManagement.contains("4")&&processManagement.contains("5")){
  131. manager="1";
  132. }
  133. }
  134. }
  135. users.setDepartment(identityTitle);
  136. users.setUserName(name);
  137. users.setIdCard(idCard);
  138. users.setCardNumber(cardNumber);
  139. users.setPhone(telephone);
  140. users.setHeadImage(headImage);
  141. usersService.updateById(users);
  142. }else {
  143. Users users1 = new Users();
  144. users1.setDepartment(identityTitle);
  145. users1.setUserName(name);
  146. users1.setIdCard(idCard);
  147. users1.setCardNumber(cardNumber);
  148. users1.setPhone(telephone);
  149. users1.setHeadImage(headImage);
  150. usersService.save(users1);
  151. usersId=String.valueOf(users1.getId());
  152. }
  153. String user_head = AesUtils.encrypt(adminId);
  154. // System.out.println("重定向路径=" + "redirect:"+ "https://chtech.ncjti.edu.cn/hotel/h5/#/?token="+token+"&adminId="+adminId+"&adminMenuId="+adminMenuId+"&adminMenuName="+adminMenuName+"&usersId="+usersId+"&user_head="+user_head);
  155. return "redirect:"+ "https://chtech.ncjti.edu.cn/hotel/h5/#/?token="+token+"&adminId="+adminId+"&adminMenuId="+adminMenuId+"&adminMenuName="+adminMenuName+"&usersId="+usersId+"&user_head="+user_head+"&name="+encodeName+"&telephone="+telephone+"&department="+identityTitle+"&manager="+manager;
  156. // return "redirect:"+ "http://192.168.161.33:8000/hotel/h5/?token="+token+"&adminId="+adminId+"&adminMenuId="+adminMenuId+"&adminMenuName="+adminMenuName+"&usersId="+usersId+"&user_head="+user_head+"&name="+encodeName+"&telephone="+telephone+"&department="+identityTitle+"&manager="+manager;
  157. } catch (Exception e) {
  158. e.printStackTrace();
  159. return "redirect:" + "https://chtech.ncjti.edu.cn/hotel/h5/#/error/?errorMsg=" + URLEncoder.encode("获取用户信息失败", "utf-8");
  160. // return "redirect:" + "http://192.168.161.33:8000/hotel/h5/#/error/?errorMsg=" + URLEncoder.encode("获取用户信息失败", "utf-8");
  161. }
  162. }
  163. @Override
  164. public CommonResult getOpenid(String code) throws Exception {
  165. String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + "wxd87cbe1db0437303" + "&secret=" + "18e17f97e674e1c03fc255f12d12ca4d" + "&code=" + code + "&grant_type=authorization_code";
  166. String s = HttpsClient.httpsRequestReturnString(url, "GET", "");
  167. JSONObject jsonObject = JSONObject.parseObject(s);
  168. return CommonResult.ok(jsonObject);
  169. // System.out.println("jsonObject = " + jsonObject);
  170. // if (!jsonObject.containsKey("openid")) {
  171. // return CommonResult.fail("code有误");
  172. // }
  173. // String openid = jsonObject.getString("openid");
  174. // System.out.println("openid = " + openid);
  175. // return CommonResult.ok(jsonObject);
  176. }
  177. }