LoginService.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717
  1. package com.wechat.service;
  2. import java.io.UnsupportedEncodingException;
  3. import java.net.URLEncoder;
  4. import java.util.*;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7. import javax.annotation.Resource;
  8. import javax.servlet.http.Cookie;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import org.apache.commons.beanutils.BeanUtils;
  12. import org.apache.commons.collections.CollectionUtils;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.beans.factory.annotation.Value;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import com.alibaba.fastjson.JSONObject;
  20. import com.auth0.jwt.JWT;
  21. import com.auth0.jwt.JWTVerifier;
  22. import com.auth0.jwt.algorithms.Algorithm;
  23. import com.auth0.jwt.interfaces.Claim;
  24. import com.auth0.jwt.interfaces.DecodedJWT;
  25. import com.beust.jcommander.internal.Maps;
  26. import com.beust.jcommander.internal.Sets;
  27. import com.wechat.common.CommonHelper;
  28. import com.wechat.common.Constants;
  29. import com.wechat.common.utils.MailUtil;
  30. import com.wechat.common.utils.Md5Utils;
  31. import com.wechat.common.utils.StringsUtils;
  32. import com.wechat.dao.MdeCooperationMsgDao;
  33. import com.wechat.dao.MdeJobAdvertisedDao;
  34. import com.wechat.dao.MdeUserDao;
  35. import com.wechat.global.CustomException;
  36. import com.wechat.global.base.dao.RedisWithExpiryTimeDao;
  37. import com.wechat.global.message.InfoMsg;
  38. import com.wechat.model.dbEntity.MdeCooperationMsg;
  39. import com.wechat.model.dbEntity.MdeJobAdvertised;
  40. import com.wechat.model.dbEntity.MdeUser;
  41. import com.wechat.model.dto.AdImageDto;
  42. import com.wechat.model.dto.AuzUserInfoDto;
  43. import com.wechat.model.dto.LinkedInTokenDto;
  44. import com.wechat.model.dto.LinkedUserInfo;
  45. import com.wechat.model.requestDto.LoginByPasswordReq;
  46. import com.wechat.model.requestDto.LoginResp;
  47. import com.wechat.model.requestDto.PositionSearchReq;
  48. import com.wechat.model.requestDto.UserInfoDto;
  49. import com.wechat.model.requestDto.UserInfoWithOpenidDto;
  50. import com.wechat.model.responseDto.ResultEntity;
  51. @Service
  52. public class LoginService {
  53. @Resource
  54. private AuthorizedService authorizedService;
  55. @Autowired
  56. private CommonHelper commonHelper;
  57. @Autowired
  58. private MdeUserService mdeUserService;
  59. @Autowired
  60. private MdeWorkExperienceService mdeWorkExperienceService;
  61. // @Autowired
  62. // private RedisWithExpiryTimeDao captchaRedisDao;
  63. @Resource
  64. private CommonService commonService;
  65. @Autowired
  66. private MdeJobAdvertisedDao mdeJobAdvertisedDao;
  67. @Autowired
  68. private MdeCooperationMsgDao mdeCooperationMsgDao;
  69. @Autowired
  70. private RedisWithExpiryTimeDao redisWithExpiryTimeDao;
  71. @Autowired
  72. private MailUtil mailUtil;
  73. @Autowired
  74. private MdeUserDao mdeUserDao;
  75. private Logger log = LoggerFactory.getLogger(getClass());
  76. @Value("#{configProperties['url.base']}")
  77. private String urlBase;
  78. @Value("#{configProperties['auditor_email_address']}")
  79. private String auditorEmail;
  80. /**
  81. * 用户登录
  82. * @param req
  83. * @param resp
  84. * @param loginReq
  85. * @return
  86. */
  87. public ResultEntity<UserInfoDto> login(MdeUser mdeUser, LoginByPasswordReq loginReq, HttpServletResponse resp) {
  88. ResultEntity<UserInfoDto> rest = new ResultEntity<UserInfoDto>();
  89. // 允许登录 0.允许
  90. if (!"0".equals(mdeUser.getAllowFlag())) {
  91. return new ResultEntity<>(InfoMsg.ERROR_ILLEGAL_OPERATION_ERROR);
  92. }
  93. // 审核状态 2.通过
  94. if (!"2".equals(mdeUser.getCheckStatus())) {
  95. return new ResultEntity<>(InfoMsg.ERROR_CHECKSTATUS_ERROR);
  96. }
  97. // 登录成功
  98. String userCode = mdeUser.getUserCode();
  99. //微信端静默登陆的情况下 绑定用户信息
  100. String code = loginReq.getCode();
  101. if(!StringsUtils.isEmpty(code))
  102. {
  103. MdeUser bindingUser = new MdeUser();
  104. bindingUser.setUserCode(userCode);
  105. //登录来源0.pc 1.移动端
  106. //获取用户微信信息
  107. AuzUserInfoDto auzUserInfoDto = authorizedService.getUserInfoDetail(code, "1");
  108. bindingUser.setUnionId(auzUserInfoDto.getUnionid());
  109. bindingUser.setOpenId(auzUserInfoDto.getOpenid());
  110. //绑定
  111. mdeUserService.bindInfo(bindingUser);
  112. }
  113. // 设置cookies
  114. commonService.setLoginCookies(resp,userCode,mdeUser.getIdentityFlag(),mdeUser.getCreateDate());
  115. UserInfoDto userDto = new UserInfoDto();
  116. try {
  117. commonService.addDomainUrlLogin(mdeUser); // 头像拼接域名
  118. // 同名属性赋值
  119. BeanUtils.copyProperties(userDto, mdeUser);
  120. } catch (Exception e) {
  121. log.error("*************登陆同名属性赋值出错************************",e);
  122. return new ResultEntity<UserInfoDto>(InfoMsg.ERROR_LOGIN_MISS);
  123. }
  124. // 查询该用户的工作履历记录
  125. int workExperienceCount = mdeWorkExperienceService.findByUserCodeCount(userCode);
  126. userDto.setWorkExperienceCount(workExperienceCount);
  127. rest.setResult(userDto);
  128. return rest;
  129. }
  130. /**
  131. * 验证用户登陆信息
  132. * @param req
  133. * @param resp
  134. * @param loginReq
  135. * @return
  136. */
  137. public ResultEntity<MdeUser> checkPassword(LoginByPasswordReq loginReq) {
  138. ResultEntity<MdeUser> rest = new ResultEntity<MdeUser>();
  139. //获取用户登陆信息
  140. String userName = loginReq.getUserName();
  141. String password = loginReq.getPassword();
  142. // md5加密
  143. password = Md5Utils.EncoderPassword(password);
  144. // 从redis中 获取登录密码错误记录 (5次尝试机会)
  145. String loginErrorKey = userName.toLowerCase();
  146. int passwordErrorRecord = commonService.selectLoginPasswordErrorRecord(loginErrorKey);
  147. if (passwordErrorRecord >= 5) {
  148. rest.setMsg(InfoMsg.ERROR_LOGINPASSWORDERRORRECORD_ERROR);
  149. } else {
  150. // 查询该用户是否存在
  151. MdeUser mdeUser = mdeUserService.findByUserName(userName);
  152. // 该用户不存在
  153. if (mdeUser == null) {
  154. if(checkMail(userName)) {
  155. rest.setMsg(InfoMsg.ERROR_ENTERPRISE_USER_NOTEXIST);
  156. }else {
  157. rest.setMsg(InfoMsg.ERROR_PERSON_USER_NOTEXIST);
  158. }
  159. } else {
  160. // 用户名和密码不一致
  161. if (!password.equals(mdeUser.getPassword())) {
  162. passwordErrorRecord += 1;
  163. // 密码错误次数存入redis
  164. commonService.insertLoginPasswordRecord(loginErrorKey, String.valueOf(passwordErrorRecord));
  165. if (passwordErrorRecord == 2) {
  166. rest.setMsg(InfoMsg.EERROE_SURPLUSCOUNT_ERROR);
  167. } else {
  168. rest.setMsg(InfoMsg.ERROR_LOGIN);
  169. }
  170. } else {
  171. // 清缓存 redis
  172. redisWithExpiryTimeDao.delete("passwordErrorRecord" + loginErrorKey);
  173. }
  174. rest.setResult(mdeUser);
  175. }
  176. }
  177. return rest;
  178. }
  179. /**
  180. * 邮箱验证
  181. *
  182. * @param userName
  183. * @return
  184. */
  185. public boolean checkMail(String mail) {
  186. boolean flag = false;
  187. try {
  188. String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
  189. Pattern regex = Pattern.compile(check);
  190. Matcher matcher = regex.matcher(mail);
  191. flag = matcher.matches();
  192. } catch (Exception e) {
  193. log.info(e.getMessage());
  194. return flag;
  195. }
  196. return flag;
  197. }
  198. /**
  199. *领英第三方登录
  200. *
  201. * @param userName
  202. * @return
  203. */
  204. public ResultEntity<UserInfoWithOpenidDto> loginByLinkedInCode(HttpServletRequest request, HttpServletResponse response,
  205. String code) throws Exception {
  206. UserInfoWithOpenidDto userDto = new UserInfoWithOpenidDto();
  207. // 获取令牌 access_token
  208. LinkedInTokenDto linkedInTokenDto = authorizedService.getLinkedInTokenDto(code);
  209. if (linkedInTokenDto == null) {
  210. return new ResultEntity<UserInfoWithOpenidDto>(InfoMsg.ERROR_AUZ_FAILED);
  211. }
  212. // 根据access_token 获取用户信息
  213. LinkedUserInfo linkedUserInfo = authorizedService.getLinkedUserInfo(linkedInTokenDto);
  214. if (linkedUserInfo == null) {
  215. return new ResultEntity<UserInfoWithOpenidDto>(InfoMsg.ERROR_AUZ_FAILED);
  216. }
  217. // 根据linkedId查询用户
  218. MdeUser mdeUser = mdeUserService.findByLinkedId(linkedUserInfo.getId());
  219. if (mdeUser != null) {
  220. // 允许登录 0.允许
  221. if (!"0".equals(mdeUser.getAllowFlag())) {
  222. return new ResultEntity<>(InfoMsg.ERROR_ILLEGAL_OPERATION_ERROR);
  223. }
  224. // 审核状态 2.通过
  225. if (!"2".equals(mdeUser.getCheckStatus())) {
  226. return new ResultEntity<>(InfoMsg.ERROR_CHECKSTATUS_ERROR);
  227. }
  228. String userCode = mdeUser.getUserCode();
  229. // 设置cookies
  230. commonService.setLoginCookies(response,userCode,mdeUser.getIdentityFlag(),mdeUser.getCreateDate());
  231. // 头像拼接域名
  232. commonService.addDomainUrlLogin(mdeUser);
  233. //相同属性复制
  234. BeanUtils.copyProperties(userDto, mdeUser);
  235. //清除敏感信息
  236. userDto.cleanInfo();
  237. // 查询该用户的工作履历记录
  238. int workExperienceCount = mdeWorkExperienceService.findByUserCodeCount(userCode);
  239. userDto.setWorkExperienceCount(workExperienceCount);
  240. //记录登陆历史
  241. commonService.addLoginHis(request,userCode);
  242. return new ResultEntity<UserInfoWithOpenidDto>(InfoMsg.SUCCESS_REQUEST, userDto);
  243. } else {
  244. userDto.setLinkedInId(linkedUserInfo.getId());
  245. // code=1 跳到绑定页面
  246. return new ResultEntity<>(InfoMsg.ERROR_BINDING_ERROR, userDto);
  247. }
  248. }
  249. /**
  250. *微信第三方登录
  251. *
  252. * @param userName
  253. * @return
  254. */
  255. public ResultEntity<UserInfoWithOpenidDto> loginByWechatCode(HttpServletRequest request, HttpServletResponse response,
  256. String code, String loginModel) {
  257. ResultEntity<UserInfoWithOpenidDto> restEnty = new ResultEntity<UserInfoWithOpenidDto>();
  258. UserInfoWithOpenidDto userDto = new UserInfoWithOpenidDto();
  259. AuzUserInfoDto auzUserInfoDto = authorizedService.getUserInfoDetail(code, loginModel);
  260. if (auzUserInfoDto == null) {
  261. restEnty.setMsg(InfoMsg.ERROR_AUZ_FAILED);
  262. } else {
  263. // 根据UnionId查询用户
  264. MdeUser mdeUser = mdeUserService.findByUnionId(auzUserInfoDto.getUnionid());
  265. //微信登陆共通处理
  266. restEnty = loginByWechatBase(response,auzUserInfoDto.getUnionid(),auzUserInfoDto.getOpenid(),"",loginModel,mdeUser);
  267. if (InfoMsg.SUCCESS_REQUEST.getCode().equals(restEnty.getCode())) {
  268. //正常处理的场合
  269. userDto = restEnty.getResult();
  270. //记录登陆历史
  271. commonService.addLoginHis(request,userDto.getUserCode());
  272. } else if(InfoMsg.ERROR_BINDING_ERROR.getCode().equals(restEnty.getCode())){
  273. //未绑定的情况下
  274. userDto.setCity(auzUserInfoDto.getCity());
  275. userDto.setCountry(auzUserInfoDto.getCountry());
  276. userDto.setProvince(auzUserInfoDto.getProvince());
  277. userDto.setWechHeadImage(auzUserInfoDto.getHeadimgurl());
  278. userDto.setUnionid(auzUserInfoDto.getUnionid());
  279. if ("1".equals(loginModel)) {
  280. // 手机端登录
  281. userDto.setOpenId(auzUserInfoDto.getOpenid()); // 手机端登录存储 (微信模板信息推送需要)
  282. }
  283. restEnty.setResult(userDto);
  284. }
  285. }
  286. return restEnty;
  287. }
  288. /**
  289. *微信第三方登录 基础处理
  290. *
  291. * @param loginModel 1:移动端 0:PC端
  292. * @return
  293. */
  294. public ResultEntity<UserInfoWithOpenidDto> loginByWechatBase(HttpServletResponse response, String unionId, String openid, String miniOpenid,String loginModel,MdeUser mdeUser) {
  295. ResultEntity<UserInfoWithOpenidDto> restEnty = new ResultEntity<UserInfoWithOpenidDto>();
  296. if (mdeUser != null) {
  297. // 允许登录 0.允许
  298. if (!"0".equals(mdeUser.getAllowFlag())) {
  299. restEnty.setMsg(InfoMsg.ERROR_ILLEGAL_OPERATION_ERROR);
  300. } else if (!"2".equals(mdeUser.getCheckStatus())) {
  301. // 审核状态 2.通过
  302. restEnty.setMsg(InfoMsg.ERROR_CHECKSTATUS_ERROR);
  303. } else {
  304. UserInfoWithOpenidDto userDto = new UserInfoWithOpenidDto();
  305. String userCode = mdeUser.getUserCode();
  306. // 设置cookies
  307. commonService.setLoginCookies(response,userCode,mdeUser.getIdentityFlag(),mdeUser.getCreateDate());
  308. try {
  309. // 头像拼接域名
  310. commonService.addDomainUrlLogin(mdeUser);
  311. //相同属性copy
  312. BeanUtils.copyProperties(userDto, mdeUser);
  313. //清除敏感信息
  314. userDto.cleanInfo();
  315. } catch (Exception e) {
  316. log.info(e.getMessage());
  317. }
  318. // 移动端 更新openId
  319. if (loginModel.equals("1")) {
  320. // 绑定信息
  321. if (!StringsUtils.isEmpty(unionId)) {
  322. //微信登陆,去除领英影响
  323. mdeUser.setLinkedinId(null);
  324. mdeUser.setUnionId(unionId);
  325. mdeUser.setOpenId(openid);
  326. mdeUser.setOpenIdMini(miniOpenid);
  327. mdeUserService.bindInfo(mdeUser);
  328. }
  329. }
  330. // 查询该用户的工作履历记录
  331. int workExperienceCount = mdeWorkExperienceService.findByUserCodeCount(userCode);
  332. userDto.setWorkExperienceCount(workExperienceCount);
  333. restEnty.setResult(userDto);
  334. }
  335. } else {
  336. //未绑定
  337. restEnty.setMsg(InfoMsg.ERROR_BINDING_ERROR);
  338. }
  339. return restEnty;
  340. }
  341. // 解除微信第三方登录
  342. public ResultEntity<UserInfoDto> unBindingWechatCode(String code, String loginModel) {
  343. AuzUserInfoDto auzUserInfoDto = authorizedService.getUserInfoDetail(code, loginModel);
  344. if (auzUserInfoDto == null) {
  345. return new ResultEntity<UserInfoDto>(InfoMsg.ERROR_AUZ_FAILED);
  346. } else {
  347. UserInfoWithOpenidDto userDto = new UserInfoWithOpenidDto();
  348. userDto.setCity(auzUserInfoDto.getCity());
  349. userDto.setCountry(auzUserInfoDto.getCountry());
  350. userDto.setProvince(auzUserInfoDto.getProvince());
  351. userDto.setWechHeadImage(auzUserInfoDto.getHeadimgurl());
  352. userDto.setUnionid(auzUserInfoDto.getUnionid());
  353. if (loginModel.equals("1")) {
  354. // 手机端登录
  355. userDto.setOpenId(auzUserInfoDto.getOpenid()); // 手机端登录存储 (微信模板信息推送需要)
  356. }
  357. return new ResultEntity<>(InfoMsg.SUCCESS_REQUEST, userDto);
  358. }
  359. }
  360. /**
  361. * 绑定账号
  362. *
  363. * @param req
  364. * @param resp
  365. * @param jo
  366. * @return
  367. */
  368. @Transactional
  369. public ResultEntity<UserInfoDto> binDingAccount(HttpServletRequest req, HttpServletResponse resp, JSONObject jo) {
  370. if (StringsUtils.isEmpty(jo.getString("type"))) {
  371. return new ResultEntity<UserInfoDto>(InfoMsg.ERROR_Type_MISS);
  372. }
  373. String userName = jo.getString("userName");
  374. String password = jo.getString("password");
  375. if (StringsUtils.isEmpty(userName) || StringsUtils.isEmpty(password)) {
  376. return new ResultEntity<UserInfoDto>(InfoMsg.ERROR_LOGIN);
  377. }
  378. MdeUser mdeUser = mdeUserService.findByUserName(userName);
  379. // 判断用户名是否存在
  380. if (mdeUser == null) {
  381. if(checkMail(userName)) {
  382. return new ResultEntity<UserInfoDto>(InfoMsg.ERROR_ENTERPRISE_USER_NOTEXIST);
  383. }else {
  384. return new ResultEntity<UserInfoDto>(InfoMsg.ERROR_PERSON_USER_NOTEXIST);
  385. }
  386. }
  387. // md5 加密
  388. password = Md5Utils.EncoderPassword(password);
  389. // 比较密码是否相同,否则绑定失败
  390. if (!mdeUser.getPassword().equals(password)) {
  391. return new ResultEntity<UserInfoDto>(InfoMsg.ERROR_LOGIN);
  392. }
  393. String loginRestJson = jo.getString("result");
  394. if (StringsUtils.isEmpty(loginRestJson)) {
  395. return new ResultEntity<>(InfoMsg.ERROR_PARAMS_ERROR);
  396. }
  397. LoginResp loginResp = JSONObject.parseObject(loginRestJson, LoginResp.class);
  398. String userCode = mdeUser.getUserCode();
  399. if ("0".equals(jo.getString("type"))) {
  400. if (StringsUtils.isEmpty(loginResp.getUnionId())) {
  401. return new ResultEntity<UserInfoDto>(InfoMsg.ERROR_PARAMS_ERROR);
  402. }
  403. // 获取第三方用户信息
  404. mdeUser.setOpenId(StringsUtils.isEmpty(loginResp.getOpenId()) ? "" : loginResp.getOpenId());
  405. mdeUser.setUnionId(loginResp.getUnionId());
  406. //微信登陆,去除领英影响
  407. mdeUser.setLinkedinId(null);
  408. mdeUserService.bindInfo(mdeUser);
  409. } else {
  410. // 参数验证
  411. if (StringsUtils.isEmpty(loginResp.getLinkedInId())) {
  412. return new ResultEntity<UserInfoDto>(InfoMsg.ERROR_PARAMS_ERROR);
  413. }
  414. // 先解绑领英
  415. // 去除微信影响
  416. mdeUser.setUnionId(null);
  417. mdeUserService.unbind(mdeUser);
  418. // 领英绑定
  419. mdeUser.setLinkedinId(loginResp.getLinkedInId());
  420. mdeUserService.update(mdeUser);
  421. }
  422. // 查询该用户的工作履历记录
  423. int workExperienceCount = mdeWorkExperienceService.findByUserCodeCount(mdeUser.getUserCode());
  424. UserInfoDto userDto = new UserInfoDto();
  425. try {
  426. // 头像拼接域名
  427. commonService.addDomainUrlLogin(mdeUser);
  428. // 同名属性赋值
  429. BeanUtils.copyProperties(userDto, mdeUser);
  430. } catch (Exception e) {
  431. log.info(e.getMessage());
  432. }
  433. userDto.setWorkExperienceCount(workExperienceCount);
  434. // 设置cookies
  435. commonService.setLoginCookies(resp,userCode,mdeUser.getIdentityFlag(),mdeUser.getCreateDate());
  436. //记录登陆历史
  437. commonService.addLoginHis(req,userCode);
  438. return new ResultEntity<UserInfoDto>(InfoMsg.SUCCESS_REQUEST, userDto);
  439. }
  440. /**
  441. * 职位检索
  442. *
  443. * @param searchReq
  444. * @return
  445. */
  446. public ResultEntity<Map<String, Object>> searchJob(PositionSearchReq searchReq) {
  447. // 搜索关键词为空 返回空分页对象
  448. Map<String, Object> maps = Maps.newHashMap();
  449. List<MdeJobAdvertised> list = null;
  450. if (StringsUtils.isEmpty(searchReq.getKeyWord())) {
  451. return new ResultEntity<>(InfoMsg.SUCCESS_REQUEST);
  452. }
  453. // 拆分关键词
  454. // Map<String, Object> param = keyWordSplit(searchReq.getKeyWord());
  455. Map<String, Object> param = new HashMap<>(1);
  456. param.put("keyWord",searchReq.getKeyWord());
  457. list = mdeJobAdvertisedDao.searchJobNotLogin(param);
  458. // 隐藏酒店名称前三位
  459. // List<MdeJobAdvertised> mdeJobAdvertisedList =
  460. // hideHotelName(searchJob.getResultList());
  461. // searchJob.setResultList(mdeJobAdvertisedList);
  462. maps.put("page", list);
  463. maps.put("recommentHotels", commonService.getNotLoginRecommentHotels()); // 推荐酒店
  464. maps.put("recommentJobs", commonService.getNotLoginRecommentJobs());
  465. return new ResultEntity<>(InfoMsg.SUCCESS_REQUEST, maps);
  466. }
  467. /**
  468. * 合作伙伴
  469. *
  470. * @param mdeCooperationMsg
  471. * @param lang
  472. * @return
  473. */
  474. @Transactional
  475. public InfoMsg cooperate(MdeCooperationMsg mdeCooperationMsg, String lang) {
  476. try {
  477. mdeCooperationMsgDao.insert(mdeCooperationMsg);
  478. String message = "有媒体/合作伙伴【"+mdeCooperationMsg.getCompanyName()+"】给您留下了信息,请您查看!";
  479. commonService.sendNoticeEmail(message, commonService.getNoticeEmailAdds(),"媒体/合作伙伴");
  480. } catch (Exception e) {
  481. log.info("新增合作伙伴失败" + e.getMessage());
  482. throw new CustomException(InfoMsg.ERROR_INSERT_ERROR);
  483. }
  484. return InfoMsg.SUCCESS_REQUEST;
  485. }
  486. /**
  487. * 企业用户 邮箱激活认证
  488. *
  489. * @param activationToken
  490. * @param userCode
  491. * @return
  492. */
  493. @Transactional(readOnly = false)
  494. public void activationEnterprise(String activationToken, String userCode, HttpServletResponse resp) {
  495. String messageCn = ""; // 中文
  496. String messageEn = ""; // 英文
  497. String token = redisWithExpiryTimeDao.select(activationToken);
  498. if (StringsUtils.isEmpty(userCode) || StringsUtils.isEmpty(activationToken)) {
  499. messageCn = "验证失败,请重新验证或发送邮件联系我们!";
  500. messageEn = "Verification failed. Please try again or drop an email to us.";
  501. } else if (StringsUtils.isEmpty(token)) {
  502. messageCn = "验证信息已过期,请重新注册!";
  503. messageEn = "Verification is expired. Please try again.";
  504. } else {
  505. // token 非法 return
  506. DecodedJWT jwt;
  507. try {
  508. JWTVerifier verifier = JWT.require(Algorithm.HMAC512(Constants.TOKEN_KEY)).build();
  509. jwt = verifier.verify(activationToken);
  510. Map<String, Claim> map = jwt.getClaims();
  511. String hiddenUserCode = map.get(Constants.ACTIVATION_TOKEN).asString();
  512. // 验证token是否被篡改
  513. if (StringsUtils.isEqual(userCode, hiddenUserCode)) {
  514. MdeUser mdeUser = mdeUserDao.getInfoById(userCode);
  515. // 增加用户状态判断 为待激活
  516. if(mdeUser.getCheckStatus().equals("4")) {
  517. mdeUser.setUserCode(userCode);
  518. mdeUser.setCheckStatus("1"); // 待审核
  519. mdeUser.setUpdateDate(new Date());
  520. // 更新企业审核状态
  521. mdeUserService.update(mdeUser);
  522. // 链接 过期时间5天
  523. redisWithExpiryTimeDao.insertDay(activationToken, "true", 5);
  524. messageCn = "验证通过,请等待人工审核!";// Verification passed. Please wait for the manual check.
  525. messageEn = "Verification passed. Please wait for the manual check.";
  526. // 通知邮件, 验证通过后发送给 管理人员
  527. StringBuffer buf = new StringBuffer("企业用户:");
  528. buf.append(mdeUser.getName());
  529. buf.append(",注册邮箱:" + mdeUser.getUserName());
  530. buf.append(",联系人:" + mdeUser.getEntContacts());
  531. buf.append(",联系方式:" + mdeUser.getEntPhone());
  532. buf.append(",激活完成待审核!");
  533. mailUtil.sendCodeMail(buf.toString(), auditorEmail);
  534. // 企业激活成功 发送邮件通知管理人员
  535. commonService.sendNoticeEmail(buf.toString(), commonService.getNoticeEmailAdds(),"新企业用户已经完成注册");
  536. }else {
  537. messageCn = "验证已通过";// Verification passed. Please wait for the manual check.
  538. messageEn = "Verification passed.";
  539. }
  540. } else {
  541. messageCn = "验证失败,请重新验证或发送邮件联系我们!";
  542. messageEn = "Verification failed. Please try again or drop an email to us.";
  543. }
  544. } catch (Exception exception) {
  545. messageCn = "验证失败,请重新验证或发送邮件联系我们!";
  546. messageEn = "Verification failed. Please try again or drop an email to us.";
  547. }
  548. }
  549. try {
  550. String cncode = URLEncoder.encode(messageCn, "utf-8");
  551. Cookie cookieCn = new Cookie("messageCn", cncode);
  552. cookieCn.setPath("/");
  553. resp.addCookie(cookieCn);
  554. String encode = URLEncoder.encode(messageEn, "utf-8");// 不使用该编码,会出现 java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
  555. Cookie cookieEn = new Cookie("messageEn", encode);
  556. cookieEn.setPath("/");
  557. resp.addCookie(cookieEn);
  558. } catch (UnsupportedEncodingException e) {
  559. e.printStackTrace();
  560. }
  561. }
  562. public ResultEntity<Map<String, Object>> getLoginInitImage(String type) {
  563. if (StringsUtils.isEmpty(type)) {
  564. return new ResultEntity<>(InfoMsg.ERROR_TYPE_ERROR);
  565. }
  566. Map<String, Object> maps = Maps.newHashMap();
  567. List<AdImageDto> adImage = commonService.getAdImages(Constants.PC_LOGIN_BROADCAST); // 登录页广告 轮播图
  568. AdImageDto backImage = null;
  569. if (type.equals("0")) {
  570. // pc
  571. List<AdImageDto> adImages = commonService.getAdImages(Constants.PC_LOGIN_BG); // pc登录背景图
  572. if (CollectionUtils.isNotEmpty(adImages)) {
  573. backImage = adImages.get(0);
  574. }
  575. } else if (type.equals("1")) {
  576. // 手机端
  577. List<AdImageDto> adImages = commonService.getAdImages(Constants.SJ_LOGIN_BG); // 手机登录背景图
  578. backImage = adImages.get(0);
  579. }
  580. maps.put("adImage", adImage);
  581. if (backImage != null) {
  582. maps.put("backImage", backImage.getImageUrl());
  583. } else {
  584. maps.put("backImage", "");
  585. }
  586. return new ResultEntity<>(InfoMsg.SUCCESS_REQUEST, maps);
  587. }
  588. /**
  589. * 关键词拆分
  590. *
  591. * @param keyWord
  592. * @return
  593. */
  594. private Map<String, Object> keyWordSplit(String keyWord) {
  595. Map<String, Object> map = Maps.newHashMap();
  596. Set<String> set = Sets.newHashSet();
  597. List<String> split = Arrays.asList(keyWord.trim().split(" "));
  598. if (CollectionUtils.isEmpty(split)) {
  599. map.put("keyWord", keyWord);
  600. } else {
  601. for (String string : split) {
  602. set.add(string);
  603. }
  604. map.put("keyWord", set);
  605. }
  606. return map;
  607. }
  608. /**
  609. * 隐藏酒店名称(前三位*)
  610. *
  611. * @param list
  612. * @return
  613. */
  614. // private List<MdeJobAdvertised> hideHotelName(List<MdeJobAdvertised> list) {
  615. // for (MdeJobAdvertised mdeJobAdvertised : list) {
  616. // String publisherName = mdeJobAdvertised.getPublisherName();
  617. // if (StringsUtils.isNotEmpty(publisherName)) {
  618. // if (publisherName.trim().length()>=3) {
  619. // mdeJobAdvertised.setPublisherName(publisherName.replace(publisherName.substring(0,
  620. // 3), "***"));;
  621. // } else if (publisherName.trim().length()==2) {
  622. // mdeJobAdvertised.setPublisherName(publisherName.replace(publisherName.substring(0,
  623. // 2), "**"));;
  624. // } else if (publisherName.trim().length()==1) {
  625. // mdeJobAdvertised.setPublisherName(publisherName.replace(publisherName.substring(0,
  626. // 1), "*"));;
  627. // } else {
  628. // mdeJobAdvertised.setPublisherName(publisherName);
  629. // }
  630. // }
  631. // }
  632. // return list;
  633. // }
  634. }