LoginController.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. package com.huimv.receive.controller;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import cn.hutool.http.HttpUtil;
  4. import com.alibaba.fastjson.JSON;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.baomidou.mybatisplus.extension.api.R;
  8. import com.fasterxml.jackson.annotation.JsonFormat;
  9. import com.huimv.receive.common.exception.ExceptionEnum;
  10. import com.huimv.receive.common.exception.MiException;
  11. import com.huimv.receive.common.token.TokenSign;
  12. import com.huimv.receive.common.utils.*;
  13. import com.huimv.receive.entity.SysAccountMultilevel;
  14. import com.huimv.receive.entity.dto.WeCahtVo;
  15. import com.huimv.receive.service.ILoginService;
  16. import com.huimv.receive.service.ISysAccountMultilevelService;
  17. import com.huimv.receive.session.AccessToken;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.data.redis.core.RedisTemplate;
  20. import org.springframework.http.ResponseEntity;
  21. import org.springframework.web.bind.annotation.*;
  22. import org.springframework.web.client.RestTemplate;
  23. import org.springframework.web.multipart.MultipartFile;
  24. import javax.servlet.http.HttpServletRequest;
  25. import javax.servlet.http.HttpServletResponse;
  26. import java.io.IOException;
  27. import java.util.Date;
  28. import java.util.HashMap;
  29. import java.util.Map;
  30. import java.util.concurrent.TimeUnit;
  31. @RestController
  32. @RequestMapping(value = "/admin/my")
  33. @CrossOrigin
  34. public class LoginController {
  35. @Autowired
  36. ILoginService iLoginService;
  37. @Autowired
  38. private ISysAccountMultilevelService accountMultilevelService;
  39. @Autowired
  40. private UploadImage uploadImage;
  41. @RequestMapping("/test")
  42. public String logout() {
  43. return "线上服务器1";
  44. }
  45. @RequestMapping("/logout")
  46. public Result logout(@RequestParam(name = "accountName", required = true) String accountName, @RequestParam(name = "password", required = true) String password) {
  47. return iLoginService.logout();
  48. }
  49. @Autowired
  50. private RedisTemplate<String, String> redisTemplate;
  51. @GetMapping("/send")
  52. public void createImg(HttpServletRequest request, HttpServletResponse response) {
  53. try {
  54. //设置响应类型,告诉浏览器输出的内容为图片
  55. response.setContentType("image/jpeg");
  56. //设置响应头信息,告诉浏览器不要缓存此内容
  57. response.setHeader("Pragma", "No-cache");
  58. response.setHeader("Cache-Control", "no-cache");
  59. response.setDateHeader("Expire", 0);
  60. VerifyUtil randomValidateCode = new VerifyUtil();
  61. //输出验证码图片
  62. String code = randomValidateCode.getRandcode(request, response);
  63. System.out.println(code);
  64. //将生成的随机验证码存放到redis中
  65. String remoteHost = request.getRemoteHost();
  66. redisTemplate.opsForValue().set(remoteHost, code, 300, TimeUnit.SECONDS);
  67. } catch (Exception e) {
  68. System.out.println("获取验证码异常:" + e);
  69. throw new MiException(ExceptionEnum.VERIFCATION_FAID);
  70. }
  71. }
  72. //登录-多牧场
  73. @PostMapping(value = "/loginMultilevel")
  74. public Result loginMultilevel(HttpServletRequest req, @RequestBody Map<String, String> map) {
  75. String accountName = map.get("accountName");
  76. String password = map.get("password");
  77. // String code = map.get("code");
  78. String remoteHost = req.getRemoteHost();
  79. // String redisCode = redisTemplate.opsForValue().get(remoteHost);
  80. // if (redisCode == null) {
  81. // return new Result(10005,"验证码过期,点击刷新",false);
  82. // }
  83. // if (!redisCode.equals(code.toUpperCase())) {
  84. // return new Result(10006,"验证码错误,登录失败",false);
  85. // }
  86. // 未对密码加密
  87. Result result = iLoginService.loginMultilevel(accountName, password);
  88. if (result.getCode() == 10000) {
  89. SysAccountMultilevel accountEntity = (SysAccountMultilevel) result.getData();
  90. Integer id = accountEntity.getId();
  91. IpTools.getRemoteHost(req);
  92. AccessToken accessToken = new AccessToken();
  93. accessToken.setCreated(new Date());
  94. accessToken.setAccountName(accountName);
  95. accessToken.setFarmId(accountEntity.getFarmIds());
  96. String token = TokenSign.sign(accountName, id, accountEntity.getFarmIds(), null, null);
  97. accessToken.setToken(token);
  98. accessToken.setId(id);
  99. accessToken.setLoginIp(remoteHost);
  100. accessToken.setType(accountEntity.getType());
  101. Integer lastFarmId = accountEntity.getLastFarmId();
  102. if (ObjectUtil.isEmpty(lastFarmId)) {
  103. lastFarmId = Integer.parseInt(accountEntity.getFarmIds().split(",")[0]);
  104. }
  105. accessToken.setLastFarmId(lastFarmId);
  106. accessToken.setUserName(accountEntity.getUserName());
  107. return new Result(ResultCode.SUCCESS, accessToken);
  108. }
  109. return result;
  110. }
  111. //测试-token
  112. @PostMapping(value = "/getToken")
  113. public String getToken(HttpServletRequest req) {
  114. String token = TokenSign.sign("superadmin", 1, null, null, null);
  115. return token;
  116. }
  117. @RequestMapping("/logoutClient")
  118. public Result logoutClient(HttpServletRequest req, @RequestBody Map<String, String> map) {
  119. String accountName = map.get("accountName");
  120. String password = map.get("password");
  121. String remoteHost = req.getRemoteHost();
  122. Result result = iLoginService.loginMultilevel(accountName, password);
  123. if (result.getCode() == 10000) {
  124. SysAccountMultilevel data = (SysAccountMultilevel) result.getData();
  125. AccessToken accessToken = new AccessToken();
  126. accessToken.setSysAccountMultilevel(data);
  127. accessToken.setAccountName(accountName);
  128. accessToken.setUserName(data.getUserName());
  129. accessToken.setFarmId(data.getFarmIds());
  130. accessToken.setType(data.getType());
  131. accessToken.setId(data.getId());
  132. String token = TokenSign.sign(data.getUserName(), data.getId(), data.getFarmIds(), data.getWorkLocationType(), data.getType());
  133. accessToken.setToken(token);
  134. Integer lastFarmId = data.getLastFarmId();
  135. if (ObjectUtil.isEmpty(lastFarmId)) {
  136. lastFarmId = Integer.parseInt(data.getFarmIds().split(",")[0]);
  137. }
  138. accessToken.setLastFarmId(lastFarmId);
  139. accessToken.setLoginIp(remoteHost);
  140. return new Result(ResultCode.SUCCESS, accessToken);
  141. } else {
  142. return result;
  143. }
  144. }
  145. /* @RequestMapping("/logoutWeChat")
  146. public Result logoutWeChat(HttpServletRequest req, @RequestBody Map<String, String> map) {
  147. String remark = map.get("remark");
  148. QueryWrapper<SysAccountMultilevel> queryWrapper = new QueryWrapper<>();
  149. queryWrapper.eq("account", remark);
  150. SysAccountMultilevel one = accountMultilevelService.getOne(queryWrapper);
  151. AccessToken accessToken = new AccessToken();
  152. if (ObjectUtil.isEmpty(one)) {
  153. SysAccountMultilevel accountMultilevel = new SysAccountMultilevel();
  154. accountMultilevel.setAccount(remark);
  155. accountMultilevel.setFarmIds("25");
  156. accountMultilevel.setColor("");
  157. accountMultilevel.setMode(true);
  158. accountMultilevel.setUserName("访客");
  159. accountMultilevel.setType(7);
  160. accountMultilevelService.save(accountMultilevel);
  161. QueryWrapper<SysAccountMultilevel> queryWrapper1 = new QueryWrapper<>();
  162. queryWrapper1.eq("account", remark);
  163. SysAccountMultilevel one1 = accountMultilevelService.getOne(queryWrapper1);
  164. accessToken.setAccountName(remark);
  165. accessToken.setUserName("访客");
  166. accessToken.setFarmId("25");
  167. accessToken.setType(7);
  168. accessToken.setId(one1.getId());
  169. String token = TokenSign.sign(remark, one1.getId(), one1.getFarmIds(), null,7);
  170. accessToken.setToken(token);
  171. } else {
  172. accessToken.setAccountName(one.getUserName());
  173. accessToken.setUserName("访客");
  174. accessToken.setFarmId("25");
  175. accessToken.setType(7);
  176. accessToken.setId(one.getId());
  177. String token = TokenSign.sign(remark, one.getId(), one.getFarmIds(), one.getWorkLocationId(),7);
  178. accessToken.setToken(token);
  179. }
  180. return new Result(ResultCode.SUCCESS,accessToken);
  181. * String accountName = map.get("accountName");
  182. String password = map.get("password");
  183. String remoteHost = req.getRemoteHost();
  184. Result result = iLoginService.loginMultilevel(accountName, password);
  185. if (result.getCode() == 10000) {
  186. SysAccountMultilevel data = (SysAccountMultilevel) result.getData();
  187. AccessToken accessToken = new AccessToken();
  188. accessToken.setAccountName(accountName);
  189. accessToken.setUserName(data.getUserName());
  190. accessToken.setFarmId(data.getFarmIds());
  191. accessToken.setType(data.getType());
  192. accessToken.setId(data.getId());
  193. String token = TokenSign.sign(accountName,data.getId(),data.getFarmIds(),data.getWorkLocationId());
  194. accessToken.setToken(token);
  195. Integer lastFarmId = data.getLastFarmId();
  196. if (ObjectUtil.isEmpty(lastFarmId)){
  197. lastFarmId = Integer.parseInt(data.getFarmIds().split(",")[0]);
  198. }
  199. accessToken.setLastFarmId(lastFarmId);
  200. accessToken.setLoginIp(remoteHost);
  201. return new Result(ResultCode.SUCCESS,accessToken);
  202. } else {
  203. return result;
  204. }*//*
  205. }*/
  206. @GetMapping("/logoutWeChat")
  207. public Result logoutWeChat(HttpServletRequest req, @RequestParam String jsCode) {
  208. String remoteHost = req.getRemoteHost();
  209. Map<String, Object> paramsMap = new HashMap<>();
  210. paramsMap.put("appid", "wxa28e45fe5cb10ff1");
  211. paramsMap.put("secret", "c16e584ec6e69fd35edd98ec21ec5e94");
  212. paramsMap.put("js_code", jsCode);
  213. paramsMap.put("grant_type", "authorization_code");
  214. String result = HttpUtil.get("https://api.weixin.qq.com/sns/jscode2session", paramsMap);
  215. System.out.println(result);
  216. JSONObject jsonObject = JSON.parseObject(result);
  217. System.out.println(jsonObject);
  218. String openid = (String) jsonObject.get("openid");
  219. String sessionKey = (String) jsonObject.get("session_key");
  220. System.out.println("拿到了openid" + openid);
  221. System.out.println("拿到了sessionKey" + sessionKey);
  222. QueryWrapper<SysAccountMultilevel> queryWrapper = new QueryWrapper<>();
  223. queryWrapper.eq("wechat_id", openid);
  224. SysAccountMultilevel data = accountMultilevelService.getOne(queryWrapper);
  225. WeCahtVo weCahtVo = new WeCahtVo();
  226. weCahtVo.setOpenId(openid);
  227. weCahtVo.setSessionKey(sessionKey);
  228. if (ObjectUtil.isEmpty(data)) {
  229. return new Result(ResultCode.FAIL, weCahtVo);
  230. } else {
  231. AccessToken accessToken = new AccessToken();
  232. accessToken.setSysAccountMultilevel(data);
  233. accessToken.setAccountName(data.getAccount());
  234. accessToken.setUserName(data.getUserName());
  235. accessToken.setFarmId(data.getFarmIds());
  236. accessToken.setType(data.getType());
  237. accessToken.setId(data.getId());
  238. String token = TokenSign.sign(data.getUserName(), data.getId(), data.getFarmIds(), data.getWorkLocationType(), 7);
  239. accessToken.setToken(token);
  240. Integer lastFarmId = data.getLastFarmId();
  241. if (ObjectUtil.isEmpty(lastFarmId)) {
  242. lastFarmId = Integer.parseInt(data.getFarmIds().split(",")[0]);
  243. }
  244. accessToken.setLastFarmId(lastFarmId);
  245. accessToken.setLoginIp(remoteHost);
  246. return new Result(ResultCode.SUCCESS, accessToken);
  247. }
  248. }
  249. @GetMapping("/logWeChatGetPhone")
  250. public Result logWeChatGetPhone(HttpServletRequest req, @RequestParam String jsCode) {
  251. String access_token ="";
  252. if ( !redisTemplate.hasKey("weChatGetPhone") || redisTemplate.getExpire("weChatGetPhone") ==null || redisTemplate.getExpire("weChatGetPhone") <=0){
  253. String result = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?appid=wxa28e45fe5cb10ff1&secret=c16e584ec6e69fd35edd98ec21ec5e94&grant_type=client_credential");
  254. System.out.println(result);
  255. JSONObject jsonObject = JSON.parseObject(result);
  256. access_token = (String) jsonObject.get("access_token");
  257. redisTemplate.opsForValue().set("weChatGetPhone",access_token);
  258. redisTemplate.expire("weChatGetPhone",7200,TimeUnit.SECONDS);
  259. }else {
  260. access_token = redisTemplate.opsForValue().get("weChatGetPhone");
  261. }
  262. RestTemplate restTemplate = new RestTemplate();
  263. Map<String, Object> paramsMap = new HashMap<>();
  264. paramsMap.put("code", jsCode);
  265. ResponseEntity<String> stringResponseEntity = restTemplate.postForEntity("https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + access_token, paramsMap, String.class);
  266. System.out.println(stringResponseEntity.getBody());
  267. return new Result(ResultCode.SUCCESS,JSON.parseObject(stringResponseEntity.getBody()));
  268. }
  269. @PostMapping("/register")
  270. public Result addAdmission(HttpServletRequest req, @RequestParam("userName") String userName,
  271. @RequestParam("phone") String phone,
  272. @RequestParam("workName") String workName,
  273. @RequestParam("papersType") String papersType,
  274. @RequestParam("papersCode") String papersCode,
  275. @RequestParam(value = "imgUrl", required = false) MultipartFile imgUrl,
  276. @RequestParam("openId") String openId) throws IOException {
  277. String remoteHost = req.getRemoteHost();
  278. QueryWrapper<SysAccountMultilevel> queryWrapper = new QueryWrapper<>();
  279. queryWrapper.eq("phone", phone).or().eq("papers_code", papersCode);
  280. if (ObjectUtil.isNotEmpty(accountMultilevelService.getOne(queryWrapper))) {
  281. return new Result(10001, "该手机号或身份证号已被使用!", false);
  282. }
  283. if (!PhoneNumberValidator.isValidPhoneNumber(phone)) {
  284. return new Result(10001, "手机号格式错误!", false);
  285. }
  286. if (papersType.equals("0")) {
  287. if (!IDCardValidator.isValidIDCard(papersCode)) {
  288. return new Result(10001, "身份证号格式错误!", false);
  289. }
  290. }
  291. SysAccountMultilevel sysAccountMultilevel = new SysAccountMultilevel();
  292. sysAccountMultilevel.setUserName(userName);
  293. sysAccountMultilevel.setPapersCode(papersCode);
  294. sysAccountMultilevel.setPhone(phone);
  295. sysAccountMultilevel.setAccount(phone);
  296. sysAccountMultilevel.setPid(0);
  297. sysAccountMultilevel.setPids("0");
  298. sysAccountMultilevel.setPassword("123456");
  299. sysAccountMultilevel.setWorkName(workName);
  300. sysAccountMultilevel.setAccountStatus(1);
  301. sysAccountMultilevel.setFarmIds("25");
  302. sysAccountMultilevel.setLastFarmId(25);
  303. sysAccountMultilevel.setPapersType(papersType);
  304. sysAccountMultilevel.setWechatId(openId);
  305. sysAccountMultilevel.setType(7);
  306. String imageCom = uploadImage.getImageCom(imgUrl);
  307. if (imageCom.equals("上传失败")) {
  308. return new Result(10001, "图片上传失败!", false);
  309. }
  310. sysAccountMultilevel.setImgUrl(imageCom);
  311. accountMultilevelService.save(sysAccountMultilevel);
  312. AccessToken accessToken = new AccessToken();
  313. accessToken.setSysAccountMultilevel(sysAccountMultilevel);
  314. accessToken.setAccountName(sysAccountMultilevel.getAccount());
  315. accessToken.setUserName(sysAccountMultilevel.getUserName());
  316. accessToken.setFarmId(sysAccountMultilevel.getFarmIds());
  317. accessToken.setType(sysAccountMultilevel.getType());
  318. accessToken.setId(sysAccountMultilevel.getId());
  319. String token = TokenSign.sign(sysAccountMultilevel.getUserName(), sysAccountMultilevel.getId(), sysAccountMultilevel.getFarmIds(), sysAccountMultilevel.getWorkLocationType(), sysAccountMultilevel.getType());
  320. accessToken.setToken(token);
  321. Integer lastFarmId = sysAccountMultilevel.getLastFarmId();
  322. if (ObjectUtil.isEmpty(lastFarmId)) {
  323. lastFarmId = Integer.parseInt(sysAccountMultilevel.getFarmIds().split(",")[0]);
  324. }
  325. accessToken.setLastFarmId(lastFarmId);
  326. accessToken.setLoginIp(remoteHost);
  327. return new Result(ResultCode.SUCCESS, accessToken);
  328. }
  329. }