LoginController.java 15 KB

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