LoginController.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  4. import com.google.gson.Gson;
  5. import com.google.gson.reflect.TypeToken;
  6. import com.template.annotation.PassToken;
  7. import com.template.api.LoginControllerAPI;
  8. import com.template.common.utils.*;
  9. import com.template.config.WxAuthorConfig;
  10. import com.template.config.WxOpenidConfig;
  11. import com.template.model.enumModel.eIdentityTypeStatu;
  12. import com.template.model.enumModel.eSchool;
  13. import com.template.model.enumModel.eStatu;
  14. import com.template.model.pojo.*;
  15. import com.template.model.request.*;
  16. import com.template.model.result.CommonResult;
  17. import com.template.model.result.Wx_user;
  18. import com.template.model.vo.*;
  19. import com.template.services.*;
  20. import io.swagger.annotations.ApiModelProperty;
  21. import org.apache.commons.io.IOUtils;
  22. import org.slf4j.Logger;
  23. import org.slf4j.LoggerFactory;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.boot.configurationprocessor.json.JSONObject;
  26. import org.springframework.transaction.annotation.Transactional;
  27. import org.springframework.util.StringUtils;
  28. import org.springframework.validation.BindingResult;
  29. import org.springframework.web.bind.annotation.RequestBody;
  30. import org.springframework.web.bind.annotation.RestController;
  31. import javax.annotation.Resource;
  32. import javax.imageio.ImageIO;
  33. import javax.servlet.ServletOutputStream;
  34. import javax.servlet.http.HttpServletResponse;
  35. import java.awt.image.BufferedImage;
  36. import java.io.IOException;
  37. import java.net.URLEncoder;
  38. import java.util.*;
  39. /**
  40. * @Author: binguo
  41. * @Date: 2023/7/5 星期三 9:28
  42. * @Description: com.template.controller
  43. * @Version: 1.0
  44. */
  45. @RestController
  46. public class LoginController implements LoginControllerAPI {
  47. @Autowired
  48. private WxOpenidConfig wxOpenidConfig;
  49. @Resource
  50. private WelcomeAccountService welcomeAccountService;
  51. @Resource
  52. private WelcomeStudentService welcomeStudentService;
  53. @Resource
  54. private WelcomeOrgService welcomeOrgService;
  55. @Resource
  56. private WelcomeFamilyService welcomeFamilyService;
  57. @Resource
  58. private WelcomeAccompanyService welcomeAccompanyService;
  59. @Resource
  60. private WelcomeArriveSettingService welcomeArriveSettingService;
  61. private static Logger logger = LoggerFactory.getLogger(LoginController.class);
  62. /**
  63. * 查看系统版本号
  64. *
  65. * @return
  66. */
  67. @Override
  68. @PassToken
  69. public CommonResult queryReduce() {
  70. return CommonResult.ok("当前系统版本为:1V");
  71. }
  72. /**
  73. * 登录接口
  74. *
  75. * @param loginRequest account 账号
  76. * password 密码
  77. * @return
  78. */
  79. @Override
  80. @PassToken
  81. public CommonResult Login(@RequestBody loginRequest loginRequest, BindingResult bindingResult) {
  82. if (loginRequest == null) {
  83. return CommonResult.fail("请传递参数");
  84. }
  85. if (bindingResult.hasErrors()) {
  86. String st = paramUtils.getParamError(bindingResult);
  87. return CommonResult.fail(st);
  88. }
  89. WelcomeAccount result = welcomeAccountService.getDataByAccount(loginRequest.getAccount());
  90. if (result == null) {
  91. return CommonResult.fail("账号不存在");
  92. }
  93. String encPassword = AesUtils.encrypt(loginRequest.getPassword());
  94. if (!encPassword.equals(result.getPassword())) {
  95. return CommonResult.fail("密码错误");
  96. }
  97. TokenDateVo tokenDate = JWTUtil.getToken("", result.getId(), null);
  98. String token = tokenDate == null ? "" : tokenDate.getToken();
  99. Date expireTime = tokenDate == null ? new Date() : tokenDate.getExpireTime();
  100. LoginVO login = new LoginVO();
  101. login.setToken(token);
  102. login.setTokenTtl(TimeExchange.DateToString(expireTime, "yyyy-MM-dd HH:mm:ss"));
  103. login.setUserName(result.getName());
  104. return CommonResult.ok("200", "登录成功", login);
  105. }
  106. /**
  107. * 修改密码
  108. *
  109. * @param cpr oldPassword 旧密码
  110. * newPassword 新密码
  111. * confirmPassword 确认密码
  112. * @param userId
  113. * @param bindingResult
  114. * @return
  115. */
  116. @Override
  117. @Transactional(rollbackFor = {Exception.class})
  118. public CommonResult ChangePassword(String userId, changePasswordRequest cpr, BindingResult bindingResult) throws Exception {
  119. ChangePasswordVO results = new ChangePasswordVO();
  120. if (bindingResult.hasErrors()) {
  121. String st = paramUtils.getParamError(bindingResult);
  122. return CommonResult.fail(st);
  123. }
  124. WelcomeAccount result = welcomeAccountService.getManageById(userId);
  125. if (result == null) {
  126. return CommonResult.fail("账号不存在");
  127. }
  128. if (!AesUtils.encrypt(cpr.getOldPassword()).equals(result.getPassword())) {
  129. return CommonResult.fail("原密码错误!");
  130. }
  131. result.setPassword(AesUtils.encrypt(cpr.getNewPassword()));
  132. int updateData = welcomeAccountService.updateWelcomeAccount(result);
  133. return updateData > 0 ? CommonResult.ok("修改成功") : CommonResult.fail("修改失败");
  134. }
  135. @Override
  136. @PassToken
  137. @Transactional(rollbackFor = {Exception.class})
  138. public CommonResult Openid(String wxcode, String urlstr, String state, HttpServletResponse response) throws Exception {
  139. logger.info("微校授权:" + wxcode + ";redirect_uri:" + urlstr + ";H5:" + state);
  140. System.out.println("微校授权:" + wxcode);
  141. Gson gson = new Gson();
  142. String tokenUrl = "https://open.wecard.qq.com/connect/oauth2/token";
  143. Map<String, String> tokenParams = new HashMap<>();
  144. tokenParams.put("wxcode", wxcode);
  145. tokenParams.put("app_key", wxOpenidConfig.getAppid());
  146. tokenParams.put("app_secret", wxOpenidConfig.getAppkey());
  147. tokenParams.put("grant_type", wxOpenidConfig.getGranttype());
  148. tokenParams.put("redirect_uri", state); // H5
  149. // wecode换取token
  150. String respon = HttpsClient.post(tokenUrl, tokenParams);
  151. System.out.println("微校授权2:" + respon);
  152. if (!StringUtils.hasText(respon)) {
  153. System.out.println("微校授权异常信息:respon为空" + respon);
  154. return CommonResult.fail("微校授权异常信息");
  155. }
  156. HashMap<String, Object> tokenMap = gson.fromJson(respon, new TypeToken<HashMap<String, Object>>() {
  157. }.getType());
  158. String accessToken = (String) tokenMap.get("access_token");
  159. // token换取用户信息
  160. String userInfoUrl = "https://open.wecard.qq.com/connect/oauth/get-user-info";
  161. Map<String, String> userInfoParam = new HashMap<>();
  162. userInfoParam.put("access_token", accessToken);
  163. String userinfo = HttpsClient.post(userInfoUrl, userInfoParam);
  164. String card_number = null;
  165. String user_name = null;
  166. String phone = null;
  167. String college = null;
  168. int idenType = 0;
  169. int gender = 0;
  170. String profession = null;
  171. String campus = null;
  172. String id_card = null;
  173. String classStr = null;
  174. System.out.println("微校授权获取用户信息:" + userinfo);
  175. Wx_user userinfos = gson.fromJson(userinfo, new TypeToken<Wx_user>() {
  176. }.getType());
  177. System.out.println("微校授权获取用户信息类别:" + userinfos.getIdentity_type());
  178. try {
  179. card_number = userinfos.getCard_number();
  180. user_name = userinfos.getName();
  181. phone = userinfos.getTelephone();
  182. college = userinfos.getCollege();
  183. classStr = userinfos.getClassStr();
  184. idenType = userinfos.getIdentity_type() == 1 || userinfos.getIdentity_type() == 6 ? 1 : 2;//1:学生 2:非学生
  185. gender = userinfos.getGender();
  186. profession = userinfos.getProfession();
  187. campus = userinfos.getCampus();
  188. id_card = userinfos.getId_card();
  189. } catch (Exception e) {
  190. System.out.println("微校授权异常信息:" + e.getMessage());
  191. response.sendRedirect(wxOpenidConfig.getIp() + "/#/pages/404/404/?message=" + URLEncoder.encode("获取用户信息失败", "UTF-8"));
  192. return CommonResult.fail(e.getMessage());
  193. }
  194. if (card_number == null || card_number.equals("")) {
  195. response.sendRedirect(wxOpenidConfig.getIp() + "/#/pages/404/404/?message=" + URLEncoder.encode("获取用户信息失败", "UTF-8"));
  196. return CommonResult.fail("卡号为空,授权失败");
  197. }
  198. //根据卡号查询repair_user表中的用户信息
  199. WelcomeStudent student = welcomeStudentService.getDataByIdcard(id_card);
  200. //取消授权的身份验证 谁都能进
  201. //if (identity_type != 4 && user == null) {
  202. // return CommonResult.fail("非法权限,授权失败");
  203. //}
  204. System.out.println("微校授权校区:" + campus);
  205. Integer studentId = 0;
  206. if (student == null) {
  207. System.out.println("微校授权失败,学生信息新增异常:" + user_name + "" + card_number);
  208. response.sendRedirect(wxOpenidConfig.getIp() + "/#/pages/404/404/?message=" + URLEncoder.encode("用户在系统中不存在,请联系管理员", "UTF-8"));
  209. throw new Exception("微校授权失败!");
  210. // try {
  211. // student = new WelcomeStudent();
  212. // student.setAdmissNum(card_number);
  213. // student.setName(user_name);
  214. // student.setPhone(phone);
  215. // student.setSchool(campus);
  216. // student.setSchoolId(campus == null ? 0 : eSchool.stringOf(campus));
  217. // student.setSex(gender == 1 ? "男" : "女");
  218. // student.setCollege(college);
  219. // student.setMajor(profession);
  220. // student.setIdenType(idenType);
  221. // student.setClassstr(classStr);
  222. // student.setCardId(id_card);//身份证号
  223. // int num = welcomeStudentService.insertWelcomeStudent(student);
  224. // if (num <= 0) {
  225. // System.out.println("微校授权失败,学生信息新增异常:" + user_name + "" + card_number);
  226. // response.sendRedirect(wxOpenidConfig.getIp() + "/#/pages/404/404/?message=" + URLEncoder.encode("用户新增异常", "UTF-8"));
  227. // throw new Exception("微校授权失败!");
  228. // }
  229. // studentId = num;
  230. // } catch (Exception e) {
  231. // System.out.println("微校授权异常信息:" + e.getMessage());
  232. // response.sendRedirect(wxOpenidConfig.getIp() + "/#/pages/404/404/?message=" + URLEncoder.encode("获取用户信息失败", "UTF-8"));
  233. // throw new Exception("微校授权失败!");
  234. // }
  235. } else {
  236. //更新微校获取的年纪信息
  237. student.setAdmissNum(card_number);
  238. student.setName(user_name);
  239. student.setPhone(phone);
  240. student.setSchool(campus);
  241. student.setSchoolId(campus == null ? 0 : eSchool.stringOf(campus));
  242. student.setSex(gender == 1 ? "男" : "女");
  243. // student.setCollege(college);
  244. // student.setMajor(profession);
  245. student.setIdenType(idenType);
  246. //student.setClassstr(classStr);
  247. student.setCardId(id_card);//身份证号
  248. int num = welcomeStudentService.updateWelcomeStudent(student);
  249. if (num <= 0) {
  250. System.out.println("微校授权失败,用户信息新增异常:" + user_name + "" + card_number);
  251. response.sendRedirect(wxOpenidConfig.getIp() + "/#/pages/404/404/?message=" + URLEncoder.encode("用户更新异常", "UTF-8"));
  252. throw new Exception("微校授权失败!");
  253. }
  254. studentId = student.getId();
  255. }
  256. wxLoginVo wlv = new wxLoginVo();
  257. List<WelcomeOrg> orgs = welcomeOrgService.queryDatas(college, profession, classStr);
  258. if (orgs != null && orgs.size() > 0) {
  259. for (WelcomeOrg org : orgs) {
  260. if (org.getName().equals(college)) {
  261. wlv.setCollegeId(org.getId());
  262. wlv.setCollege(college);
  263. }
  264. if (org.getName().equals(profession)) {
  265. wlv.setMajorId(org.getId());
  266. wlv.setMajor(profession);
  267. }
  268. if (org.getName().equals(classStr)) {
  269. wlv.setClassstrId(org.getId());
  270. wlv.setClassstr(classStr);
  271. }
  272. }
  273. }
  274. wlv.setId(studentId);
  275. wlv.setAdmissNum(card_number);
  276. wlv.setName(user_name);
  277. wlv.setPicture(student.getPicture());
  278. wlv.setCardId(id_card);
  279. if(StringUtils.hasText(id_card)){
  280. if(StringUtils.hasText(student.getSex())){
  281. wlv.setSex(student.getSex());
  282. }else{
  283. String sex = StrUtils.getGender(id_card);
  284. wlv.setSex(sex);
  285. }
  286. //家庭成员
  287. List<FamilyVo> fvs = new ArrayList<>();
  288. List<WelcomeFamily> familys = welcomeFamilyService.getManageByCardId(student.getCardId());
  289. if (familys != null && familys.size() > 0) {
  290. for (WelcomeFamily wf : familys) {
  291. FamilyVo fv = new FamilyVo();
  292. fv.setId(wf.getId());
  293. fv.setFamilyShip(wf.getFamilyShip());
  294. fv.setName(wf.getName());
  295. fv.setPhone(wf.getPhone());
  296. fv.setWorkUnit(wf.getWorkUnit());
  297. fvs.add(fv);
  298. }
  299. }
  300. wlv.setFvs(fvs);
  301. //陪同人员
  302. List<AccompanyVo> avs = new ArrayList<>();
  303. List<WelcomeAccompany> accompanys = welcomeAccompanyService.getManageByCardId(student.getCardId());
  304. if (accompanys != null && accompanys.size() > 0) {
  305. for (WelcomeAccompany ac : accompanys) {
  306. AccompanyVo av = new AccompanyVo();
  307. av.setId(ac.getId());
  308. av.setName(ac.getName());
  309. av.setPhone(ac.getPhone());
  310. avs.add(av);
  311. }
  312. }
  313. wlv.setAvs(avs);
  314. //时间段
  315. List<ArriveTimeVo> atvs = new ArrayList<>();
  316. List<WelcomeArriveSetting> wass = welcomeArriveSettingService.queryCheckDatas();
  317. if (wass != null && wass.size() > 0) {
  318. for (WelcomeArriveSetting was : wass) {
  319. ArriveTimeVo atv = new ArriveTimeVo();
  320. atv.setId(was.getId());
  321. atv.setStartTime(was.getStartTime());
  322. atv.setEndTime(was.getEndTime());
  323. atv.setTimeStr(was.getStartTime() + "-" + was.getEndTime());
  324. atv.setIsCheck((student.getArriveTimeId() != null && was.getId().equals(student.getArriveTimeId())) ? 1 : 0);
  325. atvs.add(atv);
  326. }
  327. }
  328. wlv.setAtvs(atvs);
  329. }
  330. wlv.setSchool(campus);
  331. wlv.setSchoolId(campus == null ? 0 : eSchool.stringOf(campus));
  332. //籍贯
  333. wlv.setOprovinceId(student.getOprovinceId());
  334. wlv.setOprovince(student.getOprovince());
  335. wlv.setOcityId(student.getOcityId());
  336. wlv.setOcity(student.getOcity());
  337. wlv.setOdistrictId(student.getOdistrictId());
  338. wlv.setOdistrict(student.getOdistrict());
  339. wlv.setProvinceId(student.getProvinceId());
  340. wlv.setProvince(student.getProvince());
  341. wlv.setCityId(student.getCityId());
  342. wlv.setCity(student.getCity());
  343. wlv.setDistrictId(student.getDistrictId());
  344. wlv.setDistrict(student.getDistrict());
  345. wlv.setPhone(student.getPhone().replace("(+86)", ""));
  346. wlv.setCollege(college == null ? "微校获取不到院校" : college);
  347. long expired = 1000 * 60 * 60 * 24 * 365;
  348. TokenDateVo token = JWTUtil.getToken(id_card, student.getId(), expired);
  349. wlv.setToken(token.getToken());
  350. System.out.println("微校授权成功:" + user_name + "" + card_number);
  351. response.sendRedirect(wxOpenidConfig.getIp() + "/#/pages/index/index/?urlstr=" + urlstr + "&token=" + token.getToken() + "&type=" + idenType);
  352. return CommonResult.ok(wlv);
  353. }
  354. @Override
  355. @PassToken
  356. public CommonResult mobileLogin(mobileLoginRequest mlr, BindingResult bindingResult) {
  357. if (mlr == null) {
  358. return CommonResult.fail("请传递参数");
  359. }
  360. if (bindingResult.hasErrors()) {
  361. String st = paramUtils.getParamError(bindingResult);
  362. return CommonResult.fail(st);
  363. }
  364. WelcomeStudent student = welcomeStudentService.getDataByIdcardOrNum(mlr.getAdmissNum(), mlr.getCardId());
  365. if (student == null) {
  366. return CommonResult.fail("录取号或身份证错误,登录失败!");
  367. }
  368. if(StringUtils.hasText(student.getCardId())){
  369. if(StringUtils.hasText(student.getSex())){
  370. student.setSex(student.getSex());
  371. }else{
  372. String sex =StrUtils.getGender(student.getCardId());
  373. student.setSex(sex);
  374. }
  375. }
  376. //家庭成员
  377. List<FamilyVo> fvs = new ArrayList<>();
  378. List<WelcomeFamily> familys = welcomeFamilyService.getManageByCardId(student.getCardId());
  379. if (familys != null && familys.size() > 0) {
  380. for (WelcomeFamily wf : familys) {
  381. FamilyVo fv = new FamilyVo();
  382. fv.setId(wf.getId());
  383. fv.setFamilyShip(wf.getFamilyShip());
  384. fv.setName(wf.getName());
  385. fv.setPhone(wf.getPhone());
  386. fv.setWorkUnit(wf.getWorkUnit());
  387. fvs.add(fv);
  388. }
  389. }
  390. student.setFvs(fvs);
  391. //陪同人员
  392. List<AccompanyVo> avs = new ArrayList<>();
  393. List<WelcomeAccompany> accompanys = welcomeAccompanyService.getManageByCardId(student.getCardId());
  394. if (accompanys != null && accompanys.size() > 0) {
  395. for (WelcomeAccompany ac : accompanys) {
  396. AccompanyVo av = new AccompanyVo();
  397. av.setId(ac.getId());
  398. av.setName(ac.getName());
  399. av.setPhone(ac.getPhone());
  400. avs.add(av);
  401. }
  402. }
  403. student.setAvs(avs);
  404. //时间段
  405. List<ArriveTimeVo> atvs = new ArrayList<>();
  406. List<WelcomeArriveSetting> wass = welcomeArriveSettingService.queryCheckDatas();
  407. if (wass != null && wass.size() > 0) {
  408. for (WelcomeArriveSetting was : wass) {
  409. ArriveTimeVo atv = new ArriveTimeVo();
  410. atv.setId(was.getId());
  411. atv.setStartTime(was.getStartTime());
  412. atv.setEndTime(was.getEndTime());
  413. atv.setTimeStr(was.getStartTime() + "-" + was.getEndTime());
  414. atv.setIsCheck((student.getArriveTimeId() != null && was.getId().equals(student.getArriveTimeId())) ? 1 : 0);
  415. atvs.add(atv);
  416. }
  417. }
  418. student.setAtvs(atvs);
  419. long expired = 1000 * 60 * 60 * 24 * 365;
  420. TokenDateVo token = JWTUtil.getToken(student.getCardId(), student.getId(), expired);
  421. student.setToken(token.getToken());
  422. return CommonResult.ok(student);
  423. }
  424. @Override
  425. @PassToken
  426. public CommonResult writeCarInfo() {
  427. com.alibaba.fastjson.JSONObject json = new com.alibaba.fastjson.JSONObject();
  428. String ukey = "6VMZEC5C6HZM7EO8";
  429. com.alibaba.fastjson.JSONObject datas = new com.alibaba.fastjson.JSONObject();
  430. datas.put("car_number", "赣A0AY39");
  431. datas.put("begin_time", "2025-06-16 10:00:00");
  432. datas.put("end_time", "2025-06-16 18:00:00");
  433. datas.put("mobile", "18279193722");
  434. // 生成带签名的字符串并使用MD5生成签名,然后转大写
  435. String sign = datas.toJSONString() + "key=" + ukey;
  436. sign = CreateSign1.MD5(sign).toUpperCase();
  437. json.put("service_name", "visitor_sync");
  438. json.put("sign", sign);
  439. json.put("park_id", "10033845");
  440. json.put("data", datas);
  441. String msg = HttpsClient.sendJson("http://istparking.sciseetech.com/public/visitor/do", json);
  442. return CommonResult.ok(msg);
  443. }
  444. @Override
  445. public CommonResult payResult(payResultRequest mlr) {
  446. logger.info("支付回调信息,mlr参数:" + JSON.toJSON(mlr));
  447. return CommonResult.ok();
  448. }
  449. }