LoginController.java 15 KB

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