RegisterController.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. package com.jeeplus.modules.sys.web;
  2. import com.easemob.server.example.api.impl.EasemobIMUsers;
  3. import com.jeeplus.common.config.Global;
  4. import com.jeeplus.common.json.AjaxJson;
  5. import com.jeeplus.common.utils.EncrypeUtil;
  6. import com.jeeplus.common.utils.JedisUtils;
  7. import com.jeeplus.common.utils.StringUtils;
  8. import com.jeeplus.common.web.BaseController;
  9. import com.jeeplus.modules.sys.dao.UserDao;
  10. import com.jeeplus.modules.sys.entity.SystemConfig;
  11. import com.jeeplus.modules.sys.entity.User;
  12. import com.jeeplus.modules.sys.service.OfficeService;
  13. import com.jeeplus.modules.sys.service.SystemConfigService;
  14. import com.jeeplus.modules.sys.service.SystemService;
  15. import com.jeeplus.modules.sys.utils.UserUtils;
  16. import com.jeeplus.modules.utils.ErrorCode;
  17. import net.sf.json.JSONObject;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Controller;
  20. import org.springframework.ui.Model;
  21. import org.springframework.web.bind.annotation.ModelAttribute;
  22. import org.springframework.web.bind.annotation.RequestMapping;
  23. import org.springframework.web.bind.annotation.RequestParam;
  24. import org.springframework.web.bind.annotation.ResponseBody;
  25. import org.springframework.web.servlet.mvc.support.RedirectAttributes;
  26. import redis.clients.jedis.Jedis;
  27. import javax.servlet.http.HttpServletRequest;
  28. import javax.servlet.http.HttpServletResponse;
  29. import java.util.List;
  30. /**
  31. * 用户Controller
  32. * @author jeeplus
  33. * @version 2013-8-29
  34. */
  35. @Controller
  36. @RequestMapping(value = "${adminPath}/sys/register")
  37. public class RegisterController extends BaseController {
  38. @Autowired
  39. private SystemConfigService systemConfigService;
  40. @Autowired
  41. private SystemService systemService;
  42. @Autowired
  43. private OfficeService officeService;
  44. @Autowired
  45. private UserDao userDao;
  46. @ModelAttribute
  47. public User get(@RequestParam(required=false) String id) {
  48. if (StringUtils.isNotBlank(id)){
  49. return systemService.getUser(id);
  50. }else{
  51. return new User();
  52. }
  53. }
  54. @RequestMapping(value = {"index",""})
  55. public String register(User user, Model model) {
  56. return "modules/sys/register";
  57. }
  58. @RequestMapping(value = "registerUser")
  59. public String registerUser( HttpServletRequest request,HttpServletResponse response, boolean mobileLogin, String randomCode, User user, Model model, RedirectAttributes redirectAttributes) {
  60. Jedis jedis = null;
  61. try {
  62. jedis = JedisUtils.getResource();
  63. String mobile = user.getMobile();
  64. String name = user.getName();
  65. String password = EncrypeUtil.encrypeString(user.getPassword(),"UTF-8");
  66. AjaxJson j = new AjaxJson();
  67. //验证手机号是否已经注册
  68. if (userDao.findUniqueByProperty("mobile", user.getMobile()) != null) {
  69. // 如果是手机登录,则返回JSON字符串
  70. if (mobileLogin) {
  71. j.setSuccess(false);
  72. j.setErrorCode("1");
  73. j.setMsg("手机号已经被使用!");
  74. return renderString(response, j.getJsonStr());
  75. } else {
  76. addMessage(model, "手机号已经被使用!");
  77. return register(user, model);
  78. }
  79. }
  80. /*if (!randomCode.equals(jedis.get(mobile)) || !"1".equals(jedis.get("1"))) {
  81. String message= "验证码验证失败!";
  82. j.setSuccess(false);
  83. j.setMsg(message);
  84. j.setErrorCode(ErrorCode.code_1011);
  85. }*/
  86. // 清除验证码
  87. //request.getSession().getServletContext().removeAttribute(mobile);
  88. jedis.del(mobile);
  89. String url = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort();
  90. String contextPath = request.getContextPath();
  91. j = systemService.registerUser(mobile,randomCode,name,password,contextPath,url);
  92. addMessage(redirectAttributes, j.getMsg());
  93. } catch (Exception e) {
  94. //logger.error("getActiveSessions", e);
  95. AjaxJson j = new AjaxJson();
  96. String message= "验证码验证失败,注册失败!";
  97. j.setSuccess(false);
  98. j.setMsg(message);
  99. j.setErrorCode(ErrorCode.code_1011);
  100. } finally {
  101. JedisUtils.returnResource(jedis);
  102. }
  103. /*AjaxJson j = new AjaxJson();
  104. long time = System.currentTimeMillis();
  105. String name = user.getName();
  106. try {
  107. //验证手机号是否已经注册
  108. if (userDao.findUniqueByProperty("mobile", user.getMobile()) != null) {
  109. // 如果是手机登录,则返回JSON字符串
  110. if (mobileLogin) {
  111. j.setSuccess(false);
  112. j.setErrorCode("1");
  113. j.setMsg("手机号已经被使用!");
  114. return renderString(response, j.getJsonStr());
  115. } else {
  116. addMessage(model, "手机号已经被使用!");
  117. return register(user, model);
  118. }
  119. }
  120. //验证用户是否已经注册
  121. if(userDao.findUniqueByProperty("login_name", user.getLoginName()) != null){
  122. // 如果是手机登录,则返回JSON字符串
  123. if (mobileLogin){
  124. AjaxJson j = new AjaxJson();
  125. j.setSuccess(false);
  126. j.setErrorCode("2");
  127. j.setMsg("用户名已经被注册!");
  128. return renderString(response, j.getJsonStr());
  129. }else{
  130. addMessage(model, "用户名已经被注册!");
  131. return register(user, model);
  132. }
  133. }
  134. //验证短信内容
  135. if (!randomCode.equals(request.getSession().getServletContext().getAttribute(user.getMobile()))) {
  136. // 如果是手机登录,则返回JSON字符串
  137. if (mobileLogin) {
  138. j.setSuccess(false);
  139. j.setErrorCode("3");
  140. j.setMsg("手机验证码不正确!");
  141. return renderString(response, j.getJsonStr());
  142. } else {
  143. addMessage(model, "手机验证码不正确!");
  144. return register(user, model);
  145. }
  146. }
  147. *//*
  148. /// 修正引用赋值问题,不知道为何,Company和Office引用的一个实例地址,修改了一个,另外一个跟着修改。
  149. List<Dict> dictList = DictUtils.getDictList("defalut_role");
  150. Dict dict = dictList.get(0);
  151. Role role = systemService.getRole(dict.getValue());
  152. *//* String officeCode = "1000";
  153. if(roleName.equals("patient")){
  154. officeCode = "1001";
  155. }
  156. Office office = officeService.getByCode(officeCode);*//*
  157. // 密码MD5加密
  158. String password = EncrypeUtil.encrypeString(user.getPassword(), "UTF-8");
  159. user.setPasswordRemake(password);
  160. user.setPassword(SystemService.entryptPassword(password));
  161. user.setLoginName(user.getMobile());
  162. // 岗位数据有效性验证,过滤不在授权内的岗位
  163. List<Role> roleList = Lists.newArrayList();
  164. roleList.add(role);
  165. user.setRoleList(roleList);
  166. *//*
  167. //保存机构
  168. user.setCompany(office);
  169. user.setOffice(office);
  170. *//*
  171. // 生成用户二维码,使用登录名
  172. String realPath = Global.getUserfilesBaseDir() + Global.USERFILES_BASE_URL +time+ "/qrcode/";
  173. FileUtils.createDirectory(realPath);
  174. String picName = time + ".png"; // encoderImgId此处二维码的图片名
  175. String filePath = realPath + picName; // 存放路径
  176. TwoDimensionCode.encoderQRCode(user.getLoginName(), filePath, "png");// 执行生成二维码
  177. user.setQrCode(request.getContextPath() + Global.USERFILES_BASE_URL +time+ "/qrcode/" + picName);
  178. if (user.getQrCode()!=null && !user.getQrCode().equals("")){
  179. InputStream inputStream = null;
  180. HttpURLConnection httpURLConnection;
  181. try {
  182. URL url = new URL(request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+ user.getQrCode());
  183. httpURLConnection = (HttpURLConnection) url.openConnection();
  184. // 设置网络连接超时时间
  185. httpURLConnection.setConnectTimeout(3000);
  186. // 设置应用程序要从网络连接读取数据
  187. httpURLConnection.setDoInput(true);
  188. httpURLConnection.setRequestMethod("GET");
  189. int responseCode = httpURLConnection.getResponseCode();
  190. if (responseCode == 200) {
  191. // 从服务器返回一个输入流
  192. inputStream = httpURLConnection.getInputStream();
  193. }
  194. OSSClientUtil ossUtil =new OSSClientUtil();
  195. String[] arr = user.getQrCode().split("/");
  196. String qrCodeName = System.currentTimeMillis()+arr[arr.length-1];
  197. ossUtil.uploadFile2OSS(inputStream, Global.getRqcode(),qrCodeName);
  198. user.setQrCode(Global.getAliyunUrl()+"/"+ Global.getRqcode() + qrCodeName);
  199. } catch (MalformedURLException e) {
  200. e.printStackTrace();
  201. } catch (IOException e) {
  202. e.printStackTrace();
  203. } finally {
  204. inputStream.close();
  205. }
  206. }
  207. String realPathPhoto = Global.getUserfilesBaseDir() + Global.USERFILES_BASE_URL +time+ "/img/";
  208. FileUtils.createDirectory(realPathPhoto);
  209. String picNamePhoto =time + ".png"; // encoderImgId此处二维码的图片名
  210. String filePathPhoto = realPathPhoto + picNamePhoto; // 存放路径
  211. //FontImageUtil.createImage(name.substring(0, 1), new Font("宋体", Font.BOLD, 100), new File(filePathPhoto), 200, 200);
  212. WordToPic.TextToPic(name.substring(name.length()-2>0?name.length()-2:0,name.length()),200, 200, 55, filePathPhoto);
  213. user.setPhoto(request.getContextPath() + Global.USERFILES_BASE_URL + time + "/img/"+picNamePhoto);
  214. if (user.getPhoto()!=null && !user.getPhoto().equals("")){
  215. InputStream inputStream = null;
  216. HttpURLConnection httpURLConnection;
  217. try {
  218. URL url = new URL(request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+ user.getPhoto());
  219. httpURLConnection = (HttpURLConnection) url.openConnection();
  220. // 设置网络连接超时时间
  221. httpURLConnection.setConnectTimeout(3000);
  222. // 设置应用程序要从网络连接读取数据
  223. httpURLConnection.setDoInput(true);
  224. httpURLConnection.setRequestMethod("GET");
  225. int responseCode = httpURLConnection.getResponseCode();
  226. if (responseCode == 200) {
  227. // 从服务器返回一个输入流
  228. inputStream = httpURLConnection.getInputStream();
  229. }
  230. OSSClientUtil ossUtil =new OSSClientUtil();
  231. String[] arr = user.getPhoto().split("/");
  232. String photoName = time+arr[arr.length-1];
  233. ossUtil.uploadFile2OSS(inputStream, Global.getPhoto(),photoName);
  234. user.setPhoto(Global.getAliyunUrl() + "/" + Global.getPhoto() + photoName);
  235. } catch (MalformedURLException e) {
  236. e.printStackTrace();
  237. } catch (IOException e) {
  238. e.printStackTrace();
  239. } finally {
  240. inputStream.close();
  241. }
  242. }
  243. // 保存用户信息
  244. // 清除当前用户缓存
  245. if (user.getLoginName().equals(UserUtils.getUser().getLoginName())) {
  246. UserUtils.clearCache();
  247. //UserUtils.getCacheMap().clear();
  248. }
  249. request.getSession().getServletContext().removeAttribute(user.getMobile());//清除验证码
  250. //环信注册
  251. RegisterUsers users = new RegisterUsers();
  252. io.swagger.client.model.User user1 = new io.swagger.client.model.User().username(user.getId()).password(password);
  253. users.add(user1);
  254. Object result = easemobIMUsers.createNewIMUserSingle(users);
  255. Nickname nickname = new Nickname();
  256. nickname.setNickname(user.getName());
  257. easemobIMUsers.modifyIMUserNickNameWithAdminToken(user.getId(), nickname);
  258. logger.info(result.toString());
  259. addMessage(redirectAttributes, "注册用户'" + user.getLoginName() + "'成功");
  260. }catch (Exception e){
  261. e.printStackTrace();
  262. userDao.delete(user);
  263. }*/
  264. return "redirect:" + adminPath + "/login";
  265. }
  266. /**
  267. * 获取验证码
  268. * @param request
  269. * @param response
  270. * @param mobile
  271. * @param model
  272. * @param redirectAttributes
  273. * @return
  274. */
  275. @RequestMapping(value = "getRegisterCode")
  276. @ResponseBody
  277. public AjaxJson getRegisterCode(HttpServletRequest request,HttpServletResponse response, String mobile,String type,
  278. Model model, RedirectAttributes redirectAttributes) {
  279. SystemConfig config = systemConfigService.get("1");
  280. AjaxJson j = new AjaxJson();
  281. //验证手机号是否已经注册
  282. if(userDao.findUniqueByProperty("mobile", mobile) == null||("resetPassword").equals(type)){
  283. String randomCode = String.valueOf((int) (Math.random() * 9000 + 1000));
  284. System.out.println(randomCode);
  285. // String result = UserUtils.sendRandomCode(config.getSmsName(),config.getSmsPassword(), mobile, randomCode);
  286. String result = null;
  287. Jedis jedis = null;
  288. try{
  289. if(("2").equals(Global.getCodeType())){
  290. //调用工具类返回结果
  291. result = UserUtils.sendRandomCodes(mobile, randomCode);
  292. JSONObject jsonObj = JSONObject.fromObject(result);
  293. String statusCode = jsonObj.getString("statusCode");
  294. //if (result.contains("Success") && result.contains("ok")) {
  295. if (("000000").equals(statusCode)) {
  296. j.setSuccess(true);
  297. j.setErrorCode("-1");
  298. j.setMsg("短信发送成功!");
  299. //存放验证码
  300. jedis = JedisUtils.getResource();
  301. jedis.set(mobile, randomCode);
  302. jedis.setex(mobile, 300, randomCode);
  303. //request.getSession().getServletContext().setAttribute(mobile, randomCode);
  304. }else{
  305. j.setSuccess(false);
  306. j.setErrorCode("2");
  307. //j.setMsg("短信发送失败,错误代码:"+result+",请联系管理员。");
  308. j.setMsg("短信发送失败,错误代码:101,请联系管理员。");
  309. j.put("ErrorXml",result);
  310. }
  311. }else{
  312. //调用工具类返回结果
  313. result = UserUtils.sendRandomCode(mobile, randomCode);
  314. if (result.contains("Success") && result.contains("ok")) {
  315. j.setSuccess(true);
  316. j.setErrorCode("-1");
  317. j.setMsg("短信发送成功!");
  318. //存放验证码
  319. jedis = JedisUtils.getResource();
  320. jedis.set(mobile, randomCode);
  321. jedis.setex(mobile, 300, randomCode);
  322. //request.getSession().getServletContext().setAttribute(mobile, randomCode);
  323. }else{
  324. j.setSuccess(false);
  325. j.setErrorCode("2");
  326. //j.setMsg("短信发送失败,错误代码:"+result+",请联系管理员。");
  327. j.setMsg("短信发送失败,错误代码:101,请联系管理员。");
  328. j.put("ErrorXml",result);
  329. }
  330. }
  331. }catch (Exception e){
  332. e.printStackTrace();
  333. logger.info("5");
  334. j.setSuccess(false);
  335. j.setErrorCode("101");
  336. j.setMsg("短信发送失败!");
  337. }
  338. finally {
  339. JedisUtils.returnResource(jedis);
  340. }
  341. return j;
  342. }else{
  343. return null ;
  344. }
  345. /* } catch (IOException e) {
  346. j.setSuccess(false);
  347. j.setErrorCode("3");
  348. j.setMsg("因未知原因导致短信发送失败,请联系管理员。");
  349. }
  350. //验证手机号是否已经注册
  351. if(userDao.findUniqueByProperty("mobile", mobile) != null){
  352. j.setSuccess(false);
  353. j.setErrorCode("1");
  354. j.setMsg("手机号已经被使用!");
  355. return j;
  356. }*/
  357. }
  358. /**
  359. * web端ajax验证手机验证码是否正确
  360. */
  361. @ResponseBody
  362. @RequestMapping(value = "validateMobileCode")
  363. public boolean validateMobileCode(HttpServletRequest request,
  364. String mobile, String randomCode) {
  365. Jedis jedis = null;
  366. try {
  367. jedis = JedisUtils.getResource();
  368. String randomCode1 = jedis.get(mobile);
  369. logger.info("-----"+randomCode1);
  370. if (randomCode.equals(randomCode1)) {
  371. return true;
  372. } else {
  373. return false;
  374. }
  375. } catch (Exception e) {
  376. logger.error("getActiveSessions", e);
  377. return false;
  378. } finally {
  379. JedisUtils.returnResource(jedis);
  380. }
  381. /*if (randomCode.equals(request.getSession().getServletContext().getAttribute(mobile))) {
  382. return true;
  383. } else {
  384. return false;
  385. }*/
  386. }
  387. /**
  388. * web端ajax验证密码是否正确
  389. */
  390. @ResponseBody
  391. @RequestMapping(value = "validatePassword")
  392. public String validatePassword(HttpServletRequest request,
  393. String password, String loginName) {
  394. // User user1 = new User();
  395. // user1.setName(loginName);
  396. // List<User> list = userDao.getByName(user1);
  397. // if(list != null && list.size()>1){
  398. // return "cf";
  399. // }
  400. User user = UserUtils.getByLoginName(loginName);
  401. if (user ==null || org.apache.commons.lang3.StringUtils.isBlank(user.getId())){
  402. return "false";
  403. }
  404. //password = SystemService.encrypeString(password);
  405. if (SystemService.validatePassword(password, user.getPassword())) {
  406. return "true";
  407. } else {
  408. return "false";
  409. }
  410. }
  411. @ResponseBody
  412. @RequestMapping(value = "users")
  413. public String validateUser(HttpServletRequest request,
  414. String password, String loginName) {
  415. User user1 = new User();
  416. user1.setName(loginName);
  417. List<User> list = userDao.getByName(user1);
  418. if(list != null && list.size()>1){
  419. return "false";
  420. } else {
  421. return "true";
  422. }
  423. }
  424. }