HpUserService.java 108 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350
  1. /**
  2. * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
  3. */
  4. package com.jeeplus.modules.sys.service;
  5. import com.google.common.collect.Lists;
  6. import com.jeeplus.common.config.Global;
  7. import com.jeeplus.common.json.AjaxJson;
  8. import com.jeeplus.common.oss.OSSClientUtil;
  9. import com.jeeplus.common.sms.SMS253Utils;
  10. import com.jeeplus.common.sms.SMSConst;
  11. import com.jeeplus.common.utils.CacheUtils;
  12. import com.jeeplus.common.utils.StringUtils;
  13. import com.jeeplus.common.utils.api.OtherException;
  14. import com.jeeplus.core.persistence.Page;
  15. import com.jeeplus.core.service.CrudService;
  16. import com.jeeplus.modules.dpenterprise.entity.DpEnterpriseAuthentication;
  17. import com.jeeplus.modules.dpenterprise.service.DpEnterpriseAuthenticationService;
  18. import com.jeeplus.modules.dpposition.service.DpPositionService;
  19. import com.jeeplus.modules.hpmessage.entity.HpMessage;
  20. import com.jeeplus.modules.hpmessage.service.HpMessageService;
  21. import com.jeeplus.modules.hpuser.entity.HpApplyPosition;
  22. import com.jeeplus.modules.hpuser.entity.HpResume;
  23. import com.jeeplus.modules.hpuser.entity.HpResumeWorkExperience;
  24. import com.jeeplus.modules.hpuser.entity.HpUserContact;
  25. import com.jeeplus.modules.hpuser.mapper.HpApplyPositionMapper;
  26. import com.jeeplus.modules.hpuser.service.HpApplyPositionService;
  27. import com.jeeplus.modules.hpuser.service.HpResumeService;
  28. import com.jeeplus.modules.hpuser.service.HpResumeWorkExperienceService;
  29. import com.jeeplus.modules.hpuser.service.HpUserContactService;
  30. import com.jeeplus.modules.sys.entity.HpMember;
  31. import com.jeeplus.modules.sys.entity.HpUser;
  32. import com.jeeplus.modules.sys.entity.WxInformation;
  33. import com.jeeplus.modules.sys.mapper.HpUserMapper;
  34. import com.jeeplus.modules.sys.wxUtils.*;
  35. import com.jeeplus.modules.tools.utils.TwoDimensionCode;
  36. import com.jeeplus.modules.utils.AppLoginsEnum;
  37. import net.sf.json.JSONObject;
  38. import org.springframework.beans.factory.annotation.Autowired;
  39. import org.springframework.stereotype.Service;
  40. import org.springframework.transaction.annotation.Transactional;
  41. import org.springframework.web.multipart.MultipartFile;
  42. import org.springframework.web.multipart.MultipartHttpServletRequest;
  43. import org.springframework.web.multipart.commons.CommonsMultipartResolver;
  44. import javax.imageio.ImageIO;
  45. import javax.imageio.stream.ImageOutputStream;
  46. import javax.servlet.http.HttpServletRequest;
  47. import javax.servlet.http.HttpServletResponse;
  48. import java.awt.image.BufferedImage;
  49. import java.io.ByteArrayInputStream;
  50. import java.io.ByteArrayOutputStream;
  51. import java.io.IOException;
  52. import java.io.InputStream;
  53. import java.util.*;
  54. /**
  55. * 开心用户Service
  56. *
  57. * @author zwq
  58. * @version 2019-03-20
  59. */
  60. @Service
  61. @Transactional(readOnly = true)
  62. public class HpUserService extends CrudService<HpUserMapper, HpUser> {
  63. @Autowired
  64. private HpResumeWorkExperienceService hpResumeWorkExperienceService;
  65. @Autowired
  66. private HpResumeService hpResumeService;
  67. @Autowired
  68. private HpUserContactService hpUserContactService;
  69. @Autowired
  70. private HpMessageService hpMessageService;
  71. @Autowired
  72. private WxInformationService wxInformationService;
  73. @Autowired
  74. private DpEnterpriseAuthenticationService dpEnterpriseAuthenticationService;
  75. @Autowired
  76. private HpMemberService hpMemberService;
  77. @Autowired
  78. private HpApplyPositionMapper hpApplyPositionMapper;
  79. private static final String APP_USER = "appUser";
  80. private static final String APP_USERMSG = "appUserMsg";
  81. private static final String MINA_USERMSG = "minaUserMsg";
  82. public HpUser get(String id) {
  83. return super.get(id);
  84. }
  85. public List<HpUser> findList(HpUser hpUser) {
  86. return super.findList(hpUser);
  87. }
  88. public Page<HpUser> findPage(Page<HpUser> page, HpUser hpUser) {
  89. return super.findPage(page, hpUser);
  90. }
  91. @Transactional(readOnly = false)
  92. public void save(HpUser hpUser) {
  93. super.save(hpUser);
  94. }
  95. @Transactional(readOnly = false)
  96. public void saveChat(HpUser hpUser) {
  97. super.save(hpUser);
  98. HpUserContact hpUserContact = new HpUserContact();
  99. hpUserContact.setHpUser(hpUser);
  100. hpUserContact.setContactContent(hpUser.getContactContent());
  101. hpUserContact.setContactStatus(hpUser.getContactStatus());
  102. hpUserContact.setContactTime(hpUser.getContactTime());
  103. hpUserContact.setContactUser(hpUser.getContactPerson());
  104. hpUserContactService.save(hpUserContact);
  105. }
  106. @Transactional(readOnly = false)
  107. public void delete(HpUser hpUser) {
  108. super.delete(hpUser);
  109. }
  110. public List<HpUser> findByUnionId(String unionId) {
  111. return mapper.findByUnionId(unionId);
  112. }
  113. private List<HpUser> findByWxOpenId(String openId) {
  114. return mapper.findByWxOpenId(openId);
  115. }
  116. private List<HpUser> findByMinaOpenId(String openId) {
  117. return mapper.findByMinaOpenId(openId);
  118. }
  119. private List<HpUser> findByPhone(HpUser hpUser) {
  120. return mapper.findByPhone(hpUser);
  121. }
  122. /**
  123. * 注册发送手机验证码
  124. */
  125. public Map<String, Object> sendMobileCode(HashMap<String, String> hashMap) throws OtherException {
  126. Map<String, Object> returnMap = new HashMap<String, Object>();
  127. String mobile = hashMap.get("phone");
  128. if (StringUtils.isNotEmpty(mobile)) {
  129. try {
  130. Random random = new Random();
  131. String code = "";
  132. for (int i = 0; i < 6; i++) {
  133. code += random.nextInt(10);
  134. }
  135. HashMap<String, String> hashMaps = new HashMap<String, String>();
  136. hashMaps.put("phone", mobile);// 手机号码
  137. hashMaps.put("msg", "亲爱的用户,您的验证码是" + code + ",如非本人操作请忽略!");
  138. returnMap = SMS253Utils.sendSms(hashMaps);
  139. if (SMSConst.OKCode.equals(returnMap.get("success"))) {
  140. returnMap.put("code", code);
  141. //将获取到的验证码存到redis中
  142. CacheUtils.put(APP_USER, mobile, code);
  143. }
  144. } catch (Exception e) {
  145. throw new OtherException("10000", "系统内部错误!");
  146. }
  147. }
  148. return returnMap;
  149. }
  150. /**
  151. * 手机号登录
  152. *
  153. * @param requestMap
  154. * @return
  155. */
  156. @Transactional(readOnly = false)
  157. public Map<String, Object> getLoginApp(Map<String, String> requestMap) {
  158. Map<String, Object> returnMap = new HashMap<String, Object>();
  159. String mobile = requestMap.get("phone");
  160. String clientId = requestMap.get("client_id");
  161. HpUser hpUser = new HpUser();
  162. HpUser hpUser1 = new HpUser();
  163. hpUser.setPhone(mobile);
  164. //查询是否存在本条数据
  165. List<HpUser> hpUserList = this.findByPhone(hpUser);
  166. //如果存在则更新
  167. if (hpUserList != null && hpUserList.size() > 0) {
  168. hpUser1 = hpUserList.get(0);
  169. hpUser1.setLoginTime(new Date());
  170. hpUser1.setClientId(clientId);
  171. //如果登录方式不包含app,则添加
  172. if (!hpUser1.getLoginType().contains(AppLoginsEnum.APP.getType())) {
  173. String loginType = hpUser1.getLoginType() + "," + AppLoginsEnum.APP.getType();
  174. hpUser1.setLoginType(loginType);
  175. }
  176. if (StringUtils.isBlank(hpUser1.getUserToken())) {
  177. //用户token作为请求的标准
  178. long t1 = System.currentTimeMillis();
  179. String timestamp = String.valueOf(t1);
  180. String user_token = Md5Encrypt.md5(hpUser1.getId() + timestamp);
  181. hpUser1.setUserToken(user_token);
  182. }
  183. this.save(hpUser1);
  184. returnMap.put("hpUser", hpUser1);
  185. } else {
  186. hpUser.setRegisterType(AppLoginsEnum.AppRegisterEnum.R_APP.getRegistType());
  187. hpUser.setLoginType(AppLoginsEnum.APP.getType());
  188. hpUser.setLoginTime(new Date());
  189. hpUser.setAuthenticationStatus(0);
  190. hpUser.setContactStatus(0);
  191. hpUser.setUserType("0");
  192. hpUser.setClientId(clientId);
  193. hpUser.setUseFlag(false);
  194. this.save(hpUser);
  195. hpUser1 = this.get(hpUser.getId());
  196. //用户token作为请求的标准
  197. long t1 = System.currentTimeMillis();
  198. String timestamp = String.valueOf(t1);
  199. String user_token = Md5Encrypt.md5(hpUser1.getId() + timestamp);
  200. hpUser1.setUserToken(user_token);
  201. String qrcode = makeUserQrCode(hpUser1);
  202. hpUser1.setQrCode(qrcode);
  203. this.save(hpUser1);
  204. returnMap.put("hpUser", hpUser1);
  205. }
  206. //返回用户简历信息
  207. List<HpResume> hpResumeList = hpResumeService.findListByUserId(hpUser1.getId());
  208. if (hpResumeList != null && hpResumeList.size() > 0) {
  209. HpResume hpResume = hpResumeList.get(0);
  210. List<HpResumeWorkExperience> hpResumeWorkExperienceList = hpResumeWorkExperienceService.findListByResumeId(hpResume.getId());
  211. hpResume.setHpResumeWorkExperienceList(hpResumeWorkExperienceList);
  212. if (StringUtils.isNotBlank(hpResume.getHeadImg())) {
  213. hpResume.setHeadImg(Global.getAliyunUrl() + hpResume.getHeadImg());
  214. }
  215. returnMap.put("userResume", hpResume);
  216. }
  217. DpEnterpriseAuthentication dpEnterpriseAuthentication = dpEnterpriseAuthenticationService.findCompanyByuserId(hpUser1.getId());
  218. returnMap.put("dpEnterpriseAuthentication", dpEnterpriseAuthentication);
  219. //清除redis缓存的验证码
  220. CacheUtils.remove(APP_USER, mobile);
  221. return returnMap;
  222. }
  223. /**
  224. * app微信授权登录
  225. *
  226. * @param requestMap
  227. * @return
  228. */
  229. @Transactional(readOnly = false)
  230. public Map<String, Object> wxLogin(Map<String, String> requestMap) {
  231. Map<String, Object> returnMap = new HashMap<String, Object>();
  232. HpUser hpUser = new HpUser();
  233. String code = requestMap.get("code");
  234. String clientId = requestMap.get("client_id");
  235. //只有一个code的时候,获取用户凭证
  236. JSONObject result = TokenUtil.getAccessToken(code);
  237. String openId = result.getString("openid");
  238. String accessToken = result.getString("access_token");
  239. String unionId = result.getString("unionid");
  240. String refreshToken = result.getString("refresh_token");
  241. int access_token_endtime = (int) (System.currentTimeMillis() / 1000) + Constants.WX_ACCESS_TOKEN_AGE;
  242. logger.info("time======" + access_token_endtime);
  243. if (StringUtils.isNotBlank(openId)) {
  244. //查询数据库中是否存在此条数据,同一个用户在同一平台下unionId相同
  245. List<HpUser> list = Lists.newArrayList();
  246. if (StringUtils.isNotBlank(unionId)) {
  247. list = this.findByUnionId(unionId);
  248. }
  249. //查询数据库是否存在相同的wxopenid
  250. List<HpUser> list1 = this.findByWxOpenId(openId);
  251. //已存在用户
  252. if ((list != null && list.size() > 0) || (list1 != null && list1.size() > 0)) {
  253. if (list != null && list.size() > 0) {
  254. hpUser = list.get(0);
  255. if (StringUtils.isBlank(hpUser.getWxOpenid())) {
  256. hpUser.setWxOpenid(openId);
  257. }
  258. } else {
  259. hpUser = list1.get(0);
  260. if (StringUtils.isBlank(hpUser.getUnionid())) {
  261. hpUser.setUnionid(unionId);
  262. }
  263. }
  264. //用户存在手机号
  265. if (StringUtils.isNotBlank(hpUser.getPhone())) {
  266. //如果登录方式不包含微信授权,则添加
  267. if (!hpUser.getLoginType().contains(AppLoginsEnum.WX_AUTH.getType())) {
  268. String loginType = hpUser.getLoginType() + "," + AppLoginsEnum.WX_AUTH.getType();
  269. hpUser.setLoginType(loginType);
  270. }
  271. if (StringUtils.isBlank(hpUser.getUserToken())) {
  272. //用户token作为请求的标准
  273. long t1 = System.currentTimeMillis();
  274. String timestamp = String.valueOf(t1);
  275. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  276. hpUser.setUserToken(user_token);
  277. }
  278. if (StringUtils.isBlank(hpUser.getUserType())) {
  279. hpUser.setUserType("0");
  280. }
  281. //通过openid和用户access_token获取用户信息
  282. JSONObject wxuser = TokenUtil.getWxuser(accessToken, openId);
  283. // 获取对象中的数据
  284. String nickname = wxuser.getString("nickname");
  285. String sex = wxuser.getString("sex");
  286. String avatar = wxuser.getString("headimgurl");
  287. String province = wxuser.getString("province");
  288. String city = wxuser.getString("city");
  289. String country = wxuser.getString("country");
  290. hpUser.setLoginTime(new Date());
  291. hpUser.setNickName(nickname);
  292. hpUser.setGender(sex);
  293. hpUser.setHeadImgUrl(avatar);
  294. hpUser.setProvince(province);
  295. hpUser.setCity(city);
  296. hpUser.setCoutry(country);
  297. hpUser.setClientId(clientId);
  298. hpUser.setAccessToken(accessToken);
  299. hpUser.setRefreshToken(refreshToken);
  300. hpUser.setAccessTokenEndtime(access_token_endtime);
  301. this.save(hpUser);
  302. returnMap.put("hpUser", hpUser);
  303. //返回用户简历信息
  304. List<HpResume> hpResumeList = hpResumeService.findListByUserId(hpUser.getId());
  305. if (hpResumeList != null && hpResumeList.size() > 0) {
  306. HpResume hpResume = hpResumeList.get(0);
  307. List<HpResumeWorkExperience> hpResumeWorkExperienceList = hpResumeWorkExperienceService.findListByResumeId(hpResume.getId());
  308. hpResume.setHpResumeWorkExperienceList(hpResumeWorkExperienceList);
  309. if (StringUtils.isNotBlank(hpResume.getHeadImg())) {
  310. hpResume.setHeadImg(Global.getAliyunUrl() + hpResume.getHeadImg());
  311. }
  312. returnMap.put("userResume", hpResume);
  313. }
  314. DpEnterpriseAuthentication dpEnterpriseAuthentication = dpEnterpriseAuthenticationService.findCompanyByuserId(hpUser.getId());
  315. returnMap.put("dpEnterpriseAuthentication", dpEnterpriseAuthentication);
  316. } else {
  317. CacheUtils.put(APP_USERMSG, unionId + openId, result);
  318. returnMap.put("success", "1014");
  319. returnMap.put("openId", openId);
  320. returnMap.put("unionId", unionId);
  321. }
  322. } else {
  323. //新增是没有手机号的,不去判断
  324. //将授权信息暂存redis
  325. CacheUtils.put(APP_USERMSG, unionId + openId, result);
  326. returnMap.put("success", "1014");
  327. returnMap.put("openId", openId);
  328. returnMap.put("unionId", unionId);
  329. }
  330. } else {
  331. returnMap.put("success", "1010");
  332. }
  333. return returnMap;
  334. }
  335. /**
  336. * app微信授权登录后绑定手机号
  337. *
  338. * @param requestMap
  339. * @return
  340. */
  341. @Transactional(readOnly = false)
  342. public Map<String, Object> wxPhone(Map<String, String> requestMap) {
  343. Map<String, Object> returnMap = new HashMap<String, Object>();
  344. HpUser hpUser = new HpUser();
  345. HpUser hpUser1 = new HpUser();
  346. String phone = requestMap.get("phone");
  347. String clientId = requestMap.get("client_id");
  348. String openId = requestMap.get("openId");
  349. String unionId = requestMap.get("unionId");
  350. if (StringUtils.isNotBlank(openId)) {
  351. //查询数据库中是否存在此条数据,同一个用户在同一平台下unionId相同
  352. List<HpUser> list = this.findByUnionId(unionId);
  353. //查询数据库是否存在相同的wxopenid
  354. List<HpUser> list1 = this.findByWxOpenId(openId);
  355. //已存在用户
  356. if ((list != null && list.size() > 0) || (list1 != null && list1.size() > 0)) {
  357. if (list != null && list.size() > 0) {
  358. hpUser = list.get(0);
  359. if (StringUtils.isBlank(hpUser.getWxOpenid())) {
  360. hpUser.setWxOpenid(openId);
  361. }
  362. } else {
  363. hpUser = list1.get(0);
  364. if (StringUtils.isBlank(hpUser.getUnionid())) {
  365. hpUser.setUnionid(unionId);
  366. }
  367. }
  368. if (StringUtils.isNotBlank(phone)) {
  369. hpUser.setPhone(phone);
  370. //判断手机号是否存在
  371. List<HpUser> hpUserList = this.findByPhone(hpUser);
  372. if (hpUserList != null && hpUserList.size() > 0) {
  373. returnMap.put("success", "1007");
  374. return returnMap;
  375. }
  376. }
  377. //如果登录方式不包含微信授权,则添加
  378. if (!hpUser.getLoginType().contains(AppLoginsEnum.WX_AUTH.getType())) {
  379. String loginType = hpUser.getLoginType() + "," + AppLoginsEnum.WX_AUTH.getType();
  380. hpUser.setLoginType(loginType);
  381. }
  382. if (StringUtils.isBlank(hpUser.getUserToken())) {
  383. //用户token作为请求的标准
  384. long t1 = System.currentTimeMillis();
  385. String timestamp = String.valueOf(t1);
  386. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  387. hpUser.setUserToken(user_token);
  388. }
  389. if (StringUtils.isBlank(hpUser.getUserType())) {
  390. hpUser.setUserType("0");
  391. }
  392. } else {
  393. //绑不绑定手机号
  394. //绑定的情况
  395. if (StringUtils.isNotBlank(phone)) {
  396. //判断手机号是否已存在
  397. hpUser.setPhone(phone);
  398. //查询是否存在本条数据
  399. List<HpUser> hpUserList = this.findByPhone(hpUser);
  400. if (hpUserList != null && hpUserList.size() > 0) {
  401. //手机号已存在
  402. hpUser = hpUserList.get(0);
  403. //判断这条数据是否存在opneid或者unionid
  404. if (StringUtils.isNotBlank(hpUser.getUnionid()) && StringUtils.isNotBlank(hpUser.getWxOpenid())) {
  405. if (!openId.equals(hpUser.getWxOpenid()) && !unionId.equals(hpUser.getUnionid())) {
  406. //如果opneid和unionid不相同,则手机号已被其他账号绑定
  407. returnMap.put("success", "1007");
  408. return returnMap;
  409. }
  410. }
  411. //如果登录方式不包含微信授权,则添加
  412. if (!hpUser.getLoginType().contains(AppLoginsEnum.WX_AUTH.getType())) {
  413. String loginType = hpUser.getLoginType() + "," + AppLoginsEnum.WX_AUTH.getType();
  414. hpUser.setLoginType(loginType);
  415. }
  416. if (StringUtils.isBlank(hpUser.getUserToken())) {
  417. //用户token作为请求的标准
  418. long t1 = System.currentTimeMillis();
  419. String timestamp = String.valueOf(t1);
  420. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  421. hpUser.setUserToken(user_token);
  422. }
  423. if (StringUtils.isBlank(hpUser.getUserType())) {
  424. hpUser.setUserType("0");
  425. }
  426. hpUser.setUnionid(unionId);
  427. hpUser.setWxOpenid(openId);
  428. } else {
  429. //新用户
  430. hpUser1.setRegisterType(AppLoginsEnum.AppRegisterEnum.R_WX_AUTH.getRegistType());
  431. hpUser1.setLoginType(AppLoginsEnum.WX_AUTH.getType());
  432. hpUser1.setWxOpenid(openId);
  433. hpUser1.setUnionid(unionId);
  434. hpUser1.setAuthenticationStatus(0);
  435. hpUser1.setContactStatus(0);
  436. hpUser1.setUserType("0");
  437. hpUser1.setUseFlag(false);
  438. this.save(hpUser1);
  439. hpUser = this.get(hpUser1.getId());
  440. //用户token作为请求的标准
  441. long t1 = System.currentTimeMillis();
  442. String timestamp = String.valueOf(t1);
  443. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  444. hpUser.setUserToken(user_token);
  445. String qrcode = makeUserQrCode(hpUser);
  446. hpUser.setQrCode(qrcode);
  447. }
  448. } else {
  449. //新用户
  450. hpUser1.setRegisterType(AppLoginsEnum.AppRegisterEnum.R_WX_AUTH.getRegistType());
  451. hpUser1.setLoginType(AppLoginsEnum.WX_AUTH.getType());
  452. hpUser1.setWxOpenid(openId);
  453. hpUser1.setUnionid(unionId);
  454. hpUser1.setAuthenticationStatus(0);
  455. hpUser1.setContactStatus(0);
  456. hpUser1.setUserType("0");
  457. hpUser1.setUseFlag(false);
  458. this.save(hpUser1);
  459. hpUser = this.get(hpUser1.getId());
  460. //用户token作为请求的标准
  461. long t1 = System.currentTimeMillis();
  462. String timestamp = String.valueOf(t1);
  463. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  464. hpUser.setUserToken(user_token);
  465. String qrcode = makeUserQrCode(hpUser);
  466. hpUser.setQrCode(qrcode);
  467. }
  468. }
  469. JSONObject result = (JSONObject) CacheUtils.get(APP_USERMSG, unionId + openId);
  470. String accessToken = result.getString("access_token");
  471. String refreshToken = result.getString("refresh_token");
  472. int access_token_endtime = (int) (System.currentTimeMillis() / 1000) + Constants.WX_ACCESS_TOKEN_AGE;
  473. //通过openid和用户access_token获取用户信息
  474. JSONObject wxuser = TokenUtil.getWxuser(accessToken, openId);
  475. // 获取对象中的数据
  476. String nickname = wxuser.getString("nickname");
  477. String sex = wxuser.getString("sex");
  478. String avatar = wxuser.getString("headimgurl");
  479. String province = wxuser.getString("province");
  480. String city = wxuser.getString("city");
  481. String country = wxuser.getString("country");
  482. if (StringUtils.isNotBlank(phone)) {
  483. hpUser.setPhone(phone);
  484. }
  485. hpUser.setLoginTime(new Date());
  486. hpUser.setNickName(nickname);
  487. hpUser.setGender(sex);
  488. hpUser.setHeadImgUrl(avatar);
  489. hpUser.setProvince(province);
  490. hpUser.setCity(city);
  491. hpUser.setCoutry(country);
  492. hpUser.setClientId(clientId);
  493. hpUser.setAccessToken(accessToken);
  494. hpUser.setRefreshToken(refreshToken);
  495. hpUser.setAccessTokenEndtime(access_token_endtime);
  496. this.save(hpUser);
  497. returnMap.put("hpUser", hpUser);
  498. //清除微信授权时缓存的用户授权信息
  499. CacheUtils.remove(APP_USERMSG, unionId + openId);
  500. //清除redis缓存的验证码
  501. CacheUtils.remove(APP_USER, phone);
  502. //返回用户简历信息
  503. List<HpResume> hpResumeList = hpResumeService.findListByUserId(hpUser.getId());
  504. if (hpResumeList != null && hpResumeList.size() > 0) {
  505. HpResume hpResume = hpResumeList.get(0);
  506. List<HpResumeWorkExperience> hpResumeWorkExperienceList = hpResumeWorkExperienceService.findListByResumeId(hpResume.getId());
  507. hpResume.setHpResumeWorkExperienceList(hpResumeWorkExperienceList);
  508. if (StringUtils.isNotBlank(hpResume.getHeadImg())) {
  509. hpResume.setHeadImg(Global.getAliyunUrl() + hpResume.getHeadImg());
  510. }
  511. returnMap.put("userResume", hpResume);
  512. }
  513. DpEnterpriseAuthentication dpEnterpriseAuthentication = dpEnterpriseAuthenticationService.findCompanyByuserId(hpUser.getId());
  514. returnMap.put("dpEnterpriseAuthentication", dpEnterpriseAuthentication);
  515. } else {
  516. returnMap.put("success", "1010");
  517. }
  518. return returnMap;
  519. }
  520. /**
  521. * 日常获取app微信授权用户信息
  522. *
  523. * @param requestMap
  524. * @return
  525. */
  526. @Transactional(readOnly = false)
  527. public Map<String, Object> getUserInfo(Map<String, String> requestMap) {
  528. Map<String, Object> returnMap = new HashMap<String, Object>();
  529. String userId = requestMap.get("user_id");
  530. String userToken = requestMap.get("user_token");
  531. String loginType = requestMap.get("login_type"); //手机登录标志(默认:1)
  532. JSONObject json_object = new JSONObject();
  533. String errcode = "";
  534. //验证用户合法性
  535. if (TokenUtil.validateToken(userId, userToken)) {
  536. //日常获取用户access_token
  537. HpUser hpUser1 = this.get(userId);
  538. //手机用户
  539. if (StringUtils.isNotBlank(loginType)) {
  540. if ("1".equals(loginType)) {
  541. returnMap.put("hpUser", hpUser1);
  542. return returnMap;
  543. }
  544. }
  545. if (StringUtils.isBlank(hpUser1.getUnionid()) && StringUtils.isBlank(hpUser1.getWxOpenid())) {
  546. //手机用户
  547. returnMap.put("hpUser", hpUser1);
  548. return returnMap;
  549. }
  550. HpUser hpUser = this.get(userId);
  551. json_object = TokenUtil.getDayAccessToken(userId);
  552. //不为空,则为微信授权
  553. if (json_object != null) {
  554. //判断是否存在errcode键
  555. if (json_object.containsKey("errcode")) {
  556. errcode = json_object.getString("errcode");
  557. }
  558. //当刷新access_token如果存在errcode且不等于0,则认为refreshToken已过期
  559. if (StringUtils.isNotBlank(errcode) && !"0".equals(errcode)) {
  560. returnMap.put("success", "1013");
  561. return returnMap;
  562. } else {
  563. //获取用户最新信息
  564. String accessToken = json_object.getString("access_token");
  565. JSONObject wxuser = TokenUtil.getWxuser(accessToken, userId);
  566. //更新用户access_token信息
  567. String nickname = wxuser.getString("nickname");
  568. String sex = wxuser.getString("sex");
  569. String avatar = wxuser.getString("headimgurl");
  570. String province = wxuser.getString("province");
  571. String city = wxuser.getString("city");
  572. String country = wxuser.getString("country");
  573. hpUser.setNickName(nickname);
  574. hpUser.setGender(sex);
  575. hpUser.setHeadImgUrl(avatar);
  576. hpUser.setProvince(province);
  577. hpUser.setCity(city);
  578. hpUser.setCoutry(country);
  579. hpUser.setAccessToken(json_object.getString("access_token"));
  580. //如果包含refresh_token,说明是刷新了access_token
  581. if (json_object.containsKey("refresh_token")) {
  582. hpUser.setRefreshToken(json_object.getString("refresh_token"));
  583. hpUser.setAccessTokenEndtime((int) (System.currentTimeMillis() / 1000) + Constants.WX_ACCESS_TOKEN_AGE);
  584. }
  585. this.save(hpUser);
  586. }
  587. }
  588. returnMap.put("hpUser", hpUser);
  589. } else {
  590. returnMap.put("success", "1004");
  591. }
  592. return returnMap;
  593. }
  594. /********************小程序授权************************/
  595. /**
  596. * 小程序授权登录
  597. *
  598. * @param requestMap
  599. * @return
  600. */
  601. @Transactional(readOnly = false)
  602. public Map<String, Object> minaLogin(Map<String, String> requestMap) {
  603. Map<String, Object> returnMap = new HashMap<String, Object>();
  604. String code = requestMap.get("code");
  605. //通过小程序code获取用户openId
  606. JSONObject result = TokenUtil.minaGetSession(code);
  607. //返回成功时,不返回errcode
  608. if (result != null && !result.containsKey("errcode") && result.containsKey("openid")) {
  609. String openId = result.getString("openid");
  610. String sessionKey = result.getString("session_key");
  611. returnMap.put("openId", openId);
  612. returnMap.put("sessionKey", sessionKey);
  613. } else {
  614. returnMap.put("success", "1005");
  615. returnMap.put("errmsg", result.getString("errmsg"));
  616. }
  617. return returnMap;
  618. }
  619. /**
  620. * 保存小程序用户信息
  621. *
  622. * @param requestMap
  623. * @return
  624. */
  625. @Transactional(readOnly = false)
  626. public Map<String, Object> saveMinaInfo(Map<String, String> requestMap) {
  627. Map<String, Object> returnMap = new HashMap<String, Object>();
  628. String encryptedData = requestMap.get("encryptedData");
  629. String iv = requestMap.get("iv");
  630. String openId = requestMap.get("openid");
  631. String sessionKey = requestMap.get("session_key");
  632. if (StringUtils.isBlank(encryptedData) || StringUtils.isBlank(iv)) {
  633. returnMap.put("success", 1005);
  634. return returnMap;
  635. }
  636. //微信加密信息:解密,获取用户信息
  637. JSONObject json = this.decodeWxData(encryptedData, iv, sessionKey);
  638. HpUser hpUser = new HpUser();
  639. HpUser hpUser1 = new HpUser();
  640. if (json != null && !json.containsKey("errcode")) {
  641. String unionId = json.getString("unionId");
  642. logger.info("openid===============================" + openId);
  643. logger.info("unioniD===============================" + unionId);
  644. if (StringUtils.isNotBlank(openId)) {
  645. //获取小程序accsee_token
  646. // String token = getMinaAccessToken();
  647. //查询数据库中是否存在此条数据,同一个用户在同一平台下unionId相同
  648. List<HpUser> list = new ArrayList<>();
  649. if (StringUtils.isNotBlank(unionId)) {
  650. list = this.findByUnionId(unionId);
  651. }
  652. //查询数据库是否存在相同的minaopenid
  653. List<HpUser> list1 = this.findByMinaOpenId(openId);
  654. //如果存在
  655. if ((list != null && list.size() > 0) || (list1 != null && list1.size() > 0)) {
  656. if (list != null && list.size() > 0) {
  657. hpUser1 = list.get(0);
  658. if (StringUtils.isBlank(hpUser1.getMinaOpenid())) {
  659. hpUser1.setMinaOpenid(openId);
  660. }
  661. } else {
  662. hpUser1 = list1.get(0);
  663. if (StringUtils.isBlank(hpUser1.getUnionid())) {
  664. hpUser1.setUnionid(unionId);
  665. }
  666. }
  667. //如果登录方式不包含小程序授权,则添加
  668. if (!hpUser1.getLoginType().contains(AppLoginsEnum.MINA.getType())) {
  669. String loginType = hpUser1.getLoginType() + "," + AppLoginsEnum.MINA.getType();
  670. hpUser1.setLoginType(loginType);
  671. }
  672. if (StringUtils.isBlank(hpUser1.getUserToken())) {
  673. //用户token作为请求的标准
  674. long t1 = System.currentTimeMillis();
  675. String timestamp = String.valueOf(t1);
  676. String user_token = Md5Encrypt.md5(hpUser1.getId() + timestamp);
  677. hpUser1.setUserToken(user_token);
  678. }
  679. if (StringUtils.isBlank(hpUser1.getUserType())) {
  680. hpUser1.setUserType("0");
  681. }
  682. //sessionkey需要刷新
  683. hpUser1.setMinaSessionKey(sessionKey);
  684. } else {
  685. hpUser.setRegisterType(AppLoginsEnum.AppRegisterEnum.R_MINA.getRegistType());
  686. hpUser.setLoginType(AppLoginsEnum.MINA.getType());
  687. hpUser.setAuthenticationStatus(0);
  688. hpUser.setContactStatus(0);
  689. hpUser.setUserType("0");
  690. hpUser.setUseFlag(false);
  691. hpUser.setMinaOpenid(openId);
  692. hpUser.setMinaSessionKey(sessionKey);
  693. hpUser.setUnionid(unionId);
  694. this.save(hpUser);
  695. hpUser1 = this.get(hpUser.getId());
  696. //用户token作为请求的标准
  697. long t1 = System.currentTimeMillis();
  698. String timestamp = String.valueOf(t1);
  699. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  700. hpUser1.setUserToken(user_token);
  701. String qrcode = makeUserQrCode(hpUser1);
  702. hpUser1.setQrCode(qrcode);
  703. }
  704. String nickName = json.getString("nickName");
  705. String gender = json.getString("gender");
  706. String avatarUrl = json.getString("avatarUrl");
  707. String country = json.getString("country");
  708. String province = json.getString("province");
  709. String city = json.getString("city");
  710. hpUser1.setNickName(nickName);
  711. hpUser1.setGender(gender);
  712. hpUser1.setHeadImgUrl(avatarUrl);
  713. hpUser1.setCoutry(country);
  714. hpUser1.setProvince(province);
  715. hpUser1.setCity(city);
  716. hpUser1.setLoginTime(new Date());
  717. List<HpResume> hpResumeList = hpResumeService.findListByUserId(hpUser1.getId());
  718. if (hpResumeList != null && hpResumeList.size() > 0) {
  719. hpUser1.setBirthYear(hpResumeList.get(0).getBirthYear());
  720. }
  721. this.save(hpUser1);
  722. returnMap.put("hpUser", hpUser1);
  723. } else {
  724. returnMap.put("success", "1010");
  725. }
  726. }
  727. return returnMap;
  728. }
  729. /**
  730. * 检查小程序用户手机号存不存在
  731. *
  732. * @param requestMap
  733. * @return
  734. */
  735. public Map<String, Object> checkPhone(Map<String, String> requestMap) {
  736. Map<String, Object> returnMap = new HashMap<String, Object>();
  737. String userId = requestMap.get("user_id");
  738. String userToken = requestMap.get("user_token");
  739. //验证用户合法性
  740. if (TokenUtil.validateToken(userId, userToken)) {
  741. HpUser hpUser = this.get(userId);
  742. //用户没有手机号
  743. if (StringUtils.isBlank(hpUser.getPhone())) {
  744. returnMap.put("success", "1020");
  745. }
  746. } else {
  747. returnMap.put("success", "1004");
  748. }
  749. return returnMap;
  750. }
  751. /**
  752. * 保存小程序用户手机号
  753. *
  754. * @param requestMap
  755. * @return
  756. */
  757. @Transactional(readOnly = false)
  758. public Map<String, Object> saveMinaPhone(Map<String, String> requestMap) {
  759. Map<String, Object> returnMap = new HashMap<String, Object>();
  760. String encryptedData = requestMap.get("encryptedData");
  761. String iv = requestMap.get("iv");
  762. String userId = requestMap.get("user_id");
  763. String userToken = requestMap.get("user_token");
  764. //验证用户合法性
  765. if (TokenUtil.validateToken(userId, userToken)) {
  766. if (StringUtils.isBlank(encryptedData) || StringUtils.isBlank(iv)) {
  767. returnMap.put("success", 1005);
  768. return returnMap;
  769. }
  770. //微信加密信息:解密
  771. JSONObject json = this.decodeWxDataFormUserId(encryptedData, iv, userId);
  772. HpUser hpUser = this.get(userId);
  773. if (json != null && !json.containsKey("errcode")) {
  774. String phoneNumber = json.getString("phoneNumber");
  775. hpUser.setPhone(phoneNumber);
  776. //查询是否存在本条数据
  777. List<HpUser> hpUserList = this.findByPhone(hpUser);
  778. if (hpUserList != null && hpUserList.size() > 0) {
  779. //手机号已存在
  780. HpUser hpUser1 = hpUserList.get(0);
  781. //判断这条数据是否存在opneid或者unionid
  782. if (!hpUser.getMinaOpenid().equals(hpUser1.getMinaOpenid()) && !hpUser.getUnionid().equals(hpUser1.getUnionid())) {
  783. //如果opneid和unionid不相同,则手机号已被其他账号绑定
  784. returnMap.put("success", "1007");
  785. return returnMap;
  786. }
  787. }
  788. this.save(hpUser);
  789. }
  790. returnMap.put("hpUser", hpUser);
  791. } else {
  792. returnMap.put("success", "1004");
  793. }
  794. return returnMap;
  795. }
  796. /**
  797. * 小程序上传图片
  798. *
  799. * @param request
  800. * @return
  801. */
  802. public Map<String, Object> saveImgUp(HttpServletRequest request) {
  803. Map<String, Object> returnMap = new HashMap<String, Object>();
  804. String userId = request.getParameter("user_id");
  805. String userToken = request.getParameter("user_token");
  806. //验证用户合法性
  807. if (TokenUtil.validateToken(userId, userToken)) {
  808. String type = request.getParameter("up_type");
  809. HpUser hpUser = this.get(userId);
  810. String path = "/hpuser/index";
  811. if (StringUtils.isNotBlank(type)) {
  812. switch (type) {
  813. case "0":
  814. //基本资料
  815. path = "/hpuser/resume";
  816. break;
  817. case "1":
  818. //身份证正面
  819. path = "/hpuser/idcard/front";
  820. break;
  821. case "2":
  822. //身份证反面
  823. path = "/hpuser/idcard/back";
  824. break;
  825. case "3":
  826. //手持身份证
  827. path = "/hpuser/idcard/hold";
  828. break;
  829. }
  830. }
  831. //头像上传调用
  832. try {
  833. if (request instanceof MultipartHttpServletRequest) {
  834. AjaxJson j = webupload(request, "file", hpUser, path);
  835. if (j.isSuccess()) {
  836. returnMap.put("imgUrl", j.getBody().get("url"));
  837. } else {
  838. logger.info("wpload========" + j.getMsg());
  839. }
  840. } else {
  841. logger.info("wpnonono========没有文件上传");
  842. }
  843. } catch (IOException e) {
  844. e.printStackTrace();
  845. }
  846. } else {
  847. returnMap.put("success", "1004");
  848. }
  849. return returnMap;
  850. }
  851. /**
  852. * 微信加密信息:解密
  853. *
  854. * @param encryptedData
  855. * @param iv
  856. * @param sessionKey
  857. * @return
  858. */
  859. private JSONObject decodeWxData(String encryptedData, String iv, String sessionKey) {
  860. JSONObject jsonObject = null;
  861. if (StringUtils.isNotBlank(sessionKey)) {
  862. jsonObject = Util.decodeWxData(encryptedData, iv, sessionKey);
  863. }
  864. return jsonObject;
  865. }
  866. /**
  867. * 微信加密信息:解密
  868. *
  869. * @param encryptedData
  870. * @param iv
  871. * @param userId
  872. * @return
  873. */
  874. private JSONObject decodeWxDataFormUserId(String encryptedData, String iv, String userId) {
  875. String sessionKey = this.getSessionKey(userId);
  876. JSONObject jsonObject = null;
  877. if (StringUtils.isNotBlank(sessionKey)) {
  878. jsonObject = Util.decodeWxData(encryptedData, iv, sessionKey);
  879. }
  880. return jsonObject;
  881. }
  882. /**
  883. * 获取小程序用户sessionkey
  884. *
  885. * @param userId
  886. * @return
  887. */
  888. private String getSessionKey(String userId) {
  889. return mapper.getSessionKey(userId);
  890. }
  891. /**
  892. * 认证用户
  893. *
  894. * @param hpUser
  895. */
  896. @Transactional(readOnly = false)
  897. public void approve(HpUser hpUser) {
  898. mapper.approve(hpUser);
  899. //推送消息
  900. HpMessage hpMessage = new HpMessage();
  901. hpMessage.setHpUser(hpUser);
  902. String message = "";
  903. if (hpUser.getAuthenticationStatus() == 3) {
  904. message = "已通过";
  905. } else if (hpUser.getAuthenticationStatus() == 2) {
  906. message = "未通过";
  907. }
  908. hpMessage.setContent("您的身份审核" + message);
  909. hpMessage.setIsRead(false);
  910. hpMessage.setType(1);
  911. hpMessage.setMessageTime(new Date());
  912. hpMessageService.save(hpMessage);
  913. }
  914. @Transactional(readOnly = false)
  915. public void deleteByLogic(HpUser hpUser) {
  916. mapper.deleteByLogic(hpUser);
  917. }
  918. /**
  919. * 生成用户二维码
  920. *
  921. * @param hpUser
  922. * @return
  923. */
  924. private String makeUserQrCode(HpUser hpUser) {
  925. //生成用户二维码,使用登录名
  926. String realPath = Global.USERFILES_BASE_URL + "/qrcode/appuser/" + hpUser.getId() + "/";
  927. String name = hpUser.getId() + ".png"; //encoderImgId此处二维码的图片名
  928. JSONObject jsonObject = new JSONObject();
  929. jsonObject.put("id", hpUser.getId());
  930. String content = jsonObject.toString();
  931. //执行生成二维码
  932. BufferedImage bufImg = TwoDimensionCode.qRCodeCommon(content, "png", 2);
  933. bufImg.flush();
  934. ByteArrayOutputStream bs = new ByteArrayOutputStream();
  935. ImageOutputStream imOut;
  936. InputStream is = null;
  937. try {
  938. imOut = ImageIO.createImageOutputStream(bs);
  939. ImageIO.write(bufImg, "png", imOut);
  940. is = new ByteArrayInputStream(bs.toByteArray());
  941. } catch (IOException e) {
  942. e.printStackTrace();
  943. }
  944. //保存到oss
  945. OSSClientUtil ossUtil = new OSSClientUtil();
  946. ossUtil.uploadFile2OSS(is, realPath, name);
  947. return "/" + realPath + name;
  948. }
  949. /**
  950. * 获取小程序全局Access_Token验证凭证
  951. *
  952. * @return
  953. */
  954. @Transactional(readOnly = false)
  955. public String getMinaAccessToken() {
  956. String url = Constants.ACCESS_TOKEN_URL.replace("APPID", WxAppParamsEnum.PARAMS_APPLETS_JOB.getAppId())
  957. .replace("APPSECRET", WxAppParamsEnum.PARAMS_APPLETS_JOB.getAppSecret());
  958. JSONObject json_object = null;
  959. WxInformation wxInformation = new WxInformation();
  960. List<WxInformation> wxInformationList = wxInformationService.findList(wxInformation);
  961. //如果已经存在小程序授权信息
  962. if (wxInformationList != null && wxInformationList.size() > 0) {
  963. WxInformation wxInformation1 = wxInformationList.get(0);
  964. int access_token_endtime = wxInformation1.getAccessTokenTime();
  965. //如果授权access_token过期,则重新获取
  966. if ((int) (System.currentTimeMillis() / 1000) >= access_token_endtime) {
  967. json_object = WxCommonUtil.httpsRequest(url, "GET", null);
  968. //并更新微信授权信息
  969. String token = json_object.getString("access_token");
  970. wxInformation1.setAccessToken(token);
  971. //access_token的到期时间(当前时间+2小时)
  972. wxInformation1.setAccessTokenTime((int) (System.currentTimeMillis() / 1000) + Constants.WX_ACCESS_TOKEN_AGE);
  973. wxInformationService.save(wxInformation1);
  974. }
  975. return wxInformation1.getAccessToken();
  976. }
  977. //新增
  978. json_object = WxCommonUtil.httpsRequest(url, "GET", null);
  979. if (json_object != null) {
  980. String token = json_object.getString("access_token");
  981. //保存微信授权信息
  982. wxInformation.setAccessToken(token);
  983. //access_token的到期时间(当前时间+2小时)
  984. wxInformation.setAccessTokenTime((int) (System.currentTimeMillis() / 1000) + Constants.WX_ACCESS_TOKEN_AGE);
  985. wxInformationService.save(wxInformation);
  986. return token;
  987. }
  988. return null;
  989. }
  990. /**
  991. * 小程序上传图片
  992. *
  993. * @param request
  994. * @param param
  995. * @param hpUser
  996. * @param uploadPath
  997. * @return
  998. * @throws IllegalStateException
  999. * @throws IOException
  1000. */
  1001. public AjaxJson webupload(HttpServletRequest request, String param, HpUser hpUser, String uploadPath) throws IllegalStateException, IOException {
  1002. AjaxJson j = new AjaxJson();
  1003. //创建一个通用的多部分解析器.
  1004. CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
  1005. //设置编码
  1006. commonsMultipartResolver.setDefaultEncoding("utf-8");
  1007. //判断 request 是否有文件上传,即多部分请求(multipart/form-data类型判定)
  1008. if (commonsMultipartResolver.isMultipart(request)) {
  1009. try {
  1010. MultipartHttpServletRequest mulReq = (MultipartHttpServletRequest) request;
  1011. MultipartFile file = mulReq.getFile(param);
  1012. if (file == null) {
  1013. j.setMsg("上传照片为空。");
  1014. j.setSuccess(false);
  1015. return j;
  1016. }
  1017. OSSClientUtil ossUtil = new OSSClientUtil();
  1018. //获取当前年月
  1019. Calendar cal = Calendar.getInstance();
  1020. int year = cal.get(Calendar.YEAR);
  1021. int month = cal.get(Calendar.MONTH) + 1;
  1022. String fileDir = Global.USERFILES_BASE_URL + uploadPath + "/" + hpUser.getId() + "/" + year + "/" + month + "/";
  1023. // 判断文件是否为空
  1024. if (!file.isEmpty()) {
  1025. String filePath = ossUtil.uploadImg2OSS(file, fileDir);
  1026. logger.info("lu" + filePath);
  1027. j.put("url", filePath);
  1028. j.setMsg("上传成功");
  1029. j.setSuccess(true);
  1030. }
  1031. } catch (Exception e) {
  1032. j.setMsg("上传失败" + e.getMessage());
  1033. j.setSuccess(false);
  1034. logger.error(e.getMessage());
  1035. }
  1036. } else {
  1037. j.setMsg("上传照片不能为空。");
  1038. j.setSuccess(false);
  1039. }
  1040. return j;
  1041. }
  1042. public Page<HpUser> findUserPage(Page<HpUser> hpUserPage, HpUser hpUser) {
  1043. dataRuleFilter(hpUser);
  1044. hpUser.setPage(hpUserPage);
  1045. hpUserPage.setList(mapper.findUserList(hpUser));
  1046. return hpUserPage;
  1047. }
  1048. /**=========================新版登录接口===============================================*/
  1049. /**
  1050. * 手机号登录
  1051. *
  1052. * @param requestMap
  1053. * @return
  1054. */
  1055. @Transactional(readOnly = false)
  1056. public Map<String, Object> getLoginApp_new(Map<String, String> requestMap) {
  1057. Map<String, Object> returnMap = new HashMap<String, Object>();
  1058. String mobile = requestMap.get("phone");
  1059. String clientId = requestMap.get("client_id");
  1060. HpUser hpUser = new HpUser();
  1061. HpUser hpUser1 = new HpUser();
  1062. String userIds = ""; //废弃的userid集
  1063. hpUser.setPhone(mobile);
  1064. //查询是否存在本条数据
  1065. List<HpUser> hpUserList = this.findByPhone_new(hpUser);
  1066. //如果存在则更新
  1067. if (hpUserList != null && hpUserList.size() > 0) {
  1068. //如果该用户有多条记录,则提示选择一条用户,其余则遗弃不再使用
  1069. List list = new ArrayList();
  1070. if (hpUserList.size() > 1) {
  1071. for (int i = 0; i < hpUserList.size(); i++) {
  1072. Map map = getUserLists(hpUserList.get(i));
  1073. HpResume hpResume = (HpResume) map.get("hpResume");
  1074. //以简历是否存在作为判断该账号下是否存在数据的标准
  1075. if (hpResume == null) {
  1076. //没有简历,该条用户记录自动被视为放弃,数据绑定到另外的用户上
  1077. if (i == 0) {
  1078. HpUser hpUserOth = hpUserList.get(1);
  1079. HpUser hpUserOld = hpUserList.get(0);
  1080. hpUser1 = changeHpUserData(hpUserOth, hpUserOld);
  1081. userIds = hpUserOld.getId();
  1082. } else {
  1083. HpUser hpUserOth = hpUserList.get(0);
  1084. HpUser hpUserOld = hpUserList.get(1);
  1085. hpUser1 = changeHpUserData(hpUserOth, hpUserOld);
  1086. userIds = hpUserOld.getId();
  1087. }
  1088. break;
  1089. } else {
  1090. list.add(map);
  1091. }
  1092. }
  1093. } else {
  1094. hpUser1 = hpUserList.get(0);
  1095. }
  1096. //如果数据list大小相同,则存在重复
  1097. if (list.size() == hpUserList.size()) {
  1098. returnMap.put("userList", list);
  1099. returnMap.put("success", "2009");
  1100. return returnMap;
  1101. }
  1102. hpUser1.setLoginTime(new Date());
  1103. hpUser1.setClientId(clientId);
  1104. //如果登录方式不包含app,则添加
  1105. if (!hpUser1.getLoginType().contains(AppLoginsEnum.APP.getType())) {
  1106. String loginType = hpUser1.getLoginType() + "," + AppLoginsEnum.APP.getType();
  1107. hpUser1.setLoginType(loginType);
  1108. }
  1109. if (StringUtils.isBlank(hpUser1.getUserToken())) {
  1110. //用户token作为请求的标准
  1111. long t1 = System.currentTimeMillis();
  1112. String timestamp = String.valueOf(t1);
  1113. String user_token = Md5Encrypt.md5(hpUser1.getId() + timestamp);
  1114. hpUser1.setUserToken(user_token);
  1115. }
  1116. this.save(hpUser1);
  1117. } else {
  1118. hpUser.setRegisterType(AppLoginsEnum.AppRegisterEnum.R_APP.getRegistType());
  1119. hpUser.setLoginType(AppLoginsEnum.APP.getType());
  1120. hpUser.setLoginTime(new Date());
  1121. hpUser.setAuthenticationStatus(0);
  1122. hpUser.setContactStatus(0);
  1123. hpUser.setUserType("0");
  1124. hpUser.setClientId(clientId);
  1125. hpUser.setUseFlag(false);
  1126. this.save(hpUser);
  1127. hpUser1 = this.get(hpUser.getId());
  1128. //用户token作为请求的标准
  1129. long t1 = System.currentTimeMillis();
  1130. String timestamp = String.valueOf(t1);
  1131. String user_token = Md5Encrypt.md5(hpUser1.getId() + timestamp);
  1132. hpUser1.setUserToken(user_token);
  1133. String qrcode = makeUserQrCode(hpUser1);
  1134. hpUser1.setQrCode(qrcode);
  1135. this.save(hpUser1);
  1136. }
  1137. returnMap.put("hpUser", hpUser1);
  1138. //判断member表是否存在该手机号用户
  1139. HpMember hpMember = checkMember(hpUser1, mobile, userIds);
  1140. returnMap.put("hpMember", hpMember);
  1141. //返回用户简历信息
  1142. HpResume hpResume = this.getResume(hpMember);
  1143. returnMap.put("userResume", hpResume);
  1144. //返回用户的企业信息
  1145. DpEnterpriseAuthentication dpEnterpriseAuthentication = this.getDpEnterpriseAuthentication(hpMember);
  1146. returnMap.put("dpEnterpriseAuthentication", dpEnterpriseAuthentication);
  1147. //清除redis缓存的验证码
  1148. CacheUtils.remove(APP_USER, mobile);
  1149. return returnMap;
  1150. }
  1151. /**
  1152. * 登录获取用户的企业信息
  1153. *
  1154. * @param hpMember
  1155. * @return
  1156. */
  1157. private DpEnterpriseAuthentication getDpEnterpriseAuthentication(HpMember hpMember) {
  1158. DpEnterpriseAuthentication dpEnterpriseAuthentication = dpEnterpriseAuthenticationService.findCompanyByMemberId(hpMember.getId());
  1159. return dpEnterpriseAuthentication;
  1160. }
  1161. /**
  1162. * 登录获取用户简历信息
  1163. *
  1164. * @param hpMember
  1165. * @return
  1166. */
  1167. private HpResume getResume(HpMember hpMember) {
  1168. HpResume hpResume = new HpResume();
  1169. List<HpResume> hpResumeList = hpResumeService.findListByMemberId(hpMember.getId());
  1170. if (hpResumeList != null && hpResumeList.size() > 0) {
  1171. hpResume = hpResumeList.get(0);
  1172. List<HpResumeWorkExperience> hpResumeWorkExperienceList = hpResumeWorkExperienceService.findListByResumeId(hpResume.getId());
  1173. hpResume.setHpResumeWorkExperienceList(hpResumeWorkExperienceList);
  1174. if (StringUtils.isNotBlank(hpResume.getHeadImg())) {
  1175. hpResume.setHeadImg(Global.getAliyunUrl() + hpResume.getHeadImg());
  1176. }
  1177. }
  1178. return hpResume;
  1179. }
  1180. /**
  1181. * 通过手机号查询用户信息(逻辑删除的不算在内)
  1182. *
  1183. * @param hpUser
  1184. * @return
  1185. */
  1186. private List<HpUser> findByPhone_new(HpUser hpUser) {
  1187. return mapper.findByPhone_new(hpUser);
  1188. }
  1189. /**
  1190. * 用户重复时
  1191. * 变更用户数据到另一个用户上
  1192. *
  1193. * @param hpUserOth
  1194. * @param hpUserOld
  1195. * @return
  1196. */
  1197. private HpUser changeHpUserData(HpUser hpUserOth, HpUser hpUserOld) {
  1198. if (StringUtils.isNotBlank(hpUserOth.getUnionid()) &&
  1199. (StringUtils.isNotBlank(hpUserOth.getWxOpenid())
  1200. || StringUtils.isNotBlank(hpUserOth.getMinaOpenid()))) {
  1201. } else {
  1202. if (StringUtils.isNotBlank(hpUserOld.getUnionid())) {
  1203. hpUserOld.setId(hpUserOth.getId());
  1204. return hpUserOld;
  1205. }
  1206. }
  1207. return hpUserOth;
  1208. }
  1209. /**
  1210. * 获取用户多条信息集合
  1211. *
  1212. * @param hpUser2
  1213. * @return
  1214. */
  1215. public Map getUserLists(HpUser hpUser2) {
  1216. Map map = new HashMap();
  1217. //返回用户简历信息
  1218. List<HpResume> hpResumeList = hpResumeService.findListByUserId(hpUser2.getId());
  1219. HpResume hpResume = new HpResume();
  1220. if (hpResumeList != null && hpResumeList.size() > 0) {
  1221. hpResume = hpResumeList.get(0);
  1222. List<HpResumeWorkExperience> hpResumeWorkExperienceList = hpResumeWorkExperienceService.findListByResumeId(hpResume.getId());
  1223. hpResume.setHpResumeWorkExperienceList(hpResumeWorkExperienceList);
  1224. if (StringUtils.isNotBlank(hpResume.getHeadImg())) {
  1225. hpResume.setHeadImg(Global.getAliyunUrl() + hpResume.getHeadImg());
  1226. }
  1227. }
  1228. HpApplyPosition hpApplyPosition = new HpApplyPosition();
  1229. hpApplyPosition.setHpUser(hpUser2);
  1230. List<HpApplyPosition> applyPositionList = hpApplyPositionMapper.findUserOldList(hpApplyPosition);
  1231. map.put("hpUser", hpUser2);
  1232. map.put("hpResume", hpResume);
  1233. map.put("applySize", applyPositionList.size());
  1234. return map;
  1235. }
  1236. /**
  1237. * 判断member表是否存在该手机号用户
  1238. */
  1239. @Transactional(readOnly = false)
  1240. public HpMember checkMember(HpUser hpUser1, String mobile, String userIds) {
  1241. HpMember hpMember = new HpMember();
  1242. hpMember.setPhone(mobile);
  1243. List<HpMember> hpMemberList = hpMemberService.findListByPhone(hpMember);
  1244. if (hpMemberList != null && hpMemberList.size() > 0) {
  1245. hpMember = hpMemberList.get(0);
  1246. } else {
  1247. //新增member用户
  1248. hpMember.setHpUser(hpUser1);
  1249. hpMember.setAuthenticationStatus(hpUser1.getAuthenticationStatus());
  1250. hpMember.setIdCardBack(hpUser1.getIdCardBack());
  1251. hpMember.setIdCardFront(hpUser1.getIdCardFront());
  1252. hpMember.setIdCardHold(hpUser1.getIdCardHold());
  1253. hpMember.setIdCardNumber(hpUser1.getIdCardNumber());
  1254. hpMember.setRealName(hpUser1.getRealName());
  1255. hpMember.setMemberType(0);
  1256. hpMember.setContactStatus(0);
  1257. if (StringUtils.isNotBlank(hpUser1.getBirthYear())) {
  1258. hpMember.setBirthYear(Integer.parseInt(hpUser1.getBirthYear()));
  1259. }
  1260. if (StringUtils.isNotBlank(hpUser1.getGender())) {
  1261. hpMember.setGender(Integer.parseInt(hpUser1.getGender()));
  1262. }
  1263. hpMemberService.save(hpMember);
  1264. //将业务表跟member表信息关联
  1265. hpMemberService.mergeInfo(hpUser1.getId(), userIds, hpMember.getId());
  1266. }
  1267. return hpMember;
  1268. }
  1269. /**
  1270. * 选择用户信息
  1271. *
  1272. * @param requestMap
  1273. * @return
  1274. */
  1275. @Transactional(readOnly = false)
  1276. public Map<String, Object> selectInfo(Map<String, String> requestMap) {
  1277. Map<String, Object> returnMap = new HashMap<String, Object>();
  1278. String userId = requestMap.get("user_id");//选择的用户id
  1279. String phone = requestMap.get("phone");
  1280. String userIds = requestMap.get("userIds");//废弃的用户id集
  1281. String loginType = requestMap.get("login_type"); //0:小程序;1:微信授权;2:手机号
  1282. HpUser hpUser = this.get(userId);
  1283. //没有微信unionid等信息则从废弃的数据里获取
  1284. if (StringUtils.isBlank(hpUser.getUnionid())) {
  1285. String[] userIdArray = userIds.split(",");
  1286. for (int i = 0; i < userIdArray.length; i++) {
  1287. HpUser hpUser1 = this.get(userIdArray[i]);
  1288. if (StringUtils.isNotBlank(hpUser1.getUnionid())) {
  1289. hpUser.setUnionid(hpUser1.getUnionid());
  1290. }
  1291. if (StringUtils.isNotBlank(hpUser1.getWxOpenid())) {
  1292. hpUser.setWxOpenid(hpUser1.getWxOpenid());
  1293. }
  1294. if (StringUtils.isNotBlank(hpUser1.getMinaOpenid())) {
  1295. hpUser.setMinaOpenid(hpUser1.getMinaOpenid());
  1296. }
  1297. }
  1298. }
  1299. //如果没有accesstoken等信息
  1300. if (StringUtils.isBlank(hpUser.getAccessToken())) {
  1301. String[] userIdArray = userIds.split(",");
  1302. for (int i = 0; i < userIdArray.length; i++) {
  1303. HpUser hpUser1 = this.get(userIdArray[i]);
  1304. if (StringUtils.isNotBlank(hpUser1.getAccessToken())) {
  1305. hpUser.setAccessToken(hpUser1.getAccessToken());
  1306. }
  1307. if (hpUser1.getAccessTokenEndtime() != null) {
  1308. hpUser.setAccessTokenEndtime(hpUser1.getAccessTokenEndtime());
  1309. }
  1310. if (StringUtils.isNotBlank(hpUser1.getRefreshToken())) {
  1311. hpUser.setRefreshToken(hpUser1.getRefreshToken());
  1312. }
  1313. }
  1314. }
  1315. //如果没有小程序SessionKey信息
  1316. if (StringUtils.isBlank(hpUser.getMinaSessionKey())) {
  1317. String[] userIdArray = userIds.split(",");
  1318. for (int i = 0; i < userIdArray.length; i++) {
  1319. HpUser hpUser1 = this.get(userIdArray[i]);
  1320. if (StringUtils.isNotBlank(hpUser1.getMinaSessionKey())) {
  1321. hpUser.setMinaSessionKey(hpUser1.getMinaSessionKey());
  1322. }
  1323. }
  1324. }
  1325. //更新用户信息
  1326. switch (loginType) {
  1327. case "0":
  1328. //如果登录方式不包含小程序授权,则添加
  1329. if (!hpUser.getLoginType().contains(AppLoginsEnum.MINA.getType())) {
  1330. String loginType1 = hpUser.getLoginType() + "," + AppLoginsEnum.MINA.getType();
  1331. hpUser.setLoginType(loginType1);
  1332. }
  1333. break;
  1334. case "1":
  1335. //如果登录方式不包含微信授权,则添加
  1336. if (!hpUser.getLoginType().contains(AppLoginsEnum.WX_AUTH.getType())) {
  1337. String loginType1 = hpUser.getLoginType() + "," + AppLoginsEnum.WX_AUTH.getType();
  1338. hpUser.setLoginType(loginType1);
  1339. }
  1340. break;
  1341. case "2":
  1342. //如果登录方式不包含app,则添加
  1343. if (!hpUser.getLoginType().contains(AppLoginsEnum.APP.getType())) {
  1344. String loginType1 = hpUser.getLoginType() + "," + AppLoginsEnum.APP.getType();
  1345. hpUser.setLoginType(loginType1);
  1346. }
  1347. break;
  1348. }
  1349. if (StringUtils.isBlank(hpUser.getUserToken())) {
  1350. //用户token作为请求的标准
  1351. long t1 = System.currentTimeMillis();
  1352. String timestamp = String.valueOf(t1);
  1353. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  1354. hpUser.setUserToken(user_token);
  1355. }
  1356. if (StringUtils.isBlank(hpUser.getUserType())) {
  1357. hpUser.setUserType("0");
  1358. }
  1359. this.save(hpUser);
  1360. //合并用户信息
  1361. HpMember hpMember = checkMember(hpUser, phone, userIds);
  1362. returnMap.put("hpUser", hpUser);
  1363. returnMap.put("hpMember", hpMember);
  1364. //返回用户简历信息
  1365. HpResume hpResume = this.getResume(hpMember);
  1366. returnMap.put("userResume", hpResume);
  1367. //返回用户的企业信息
  1368. DpEnterpriseAuthentication dpEnterpriseAuthentication = this.getDpEnterpriseAuthentication(hpMember);
  1369. returnMap.put("dpEnterpriseAuthentication", dpEnterpriseAuthentication);
  1370. return returnMap;
  1371. }
  1372. /**
  1373. * app微信授权登录
  1374. *
  1375. * @param requestMap
  1376. * @return
  1377. */
  1378. @Transactional(readOnly = false)
  1379. public Map<String, Object> wxLogin_new(Map<String, String> requestMap) {
  1380. Map<String, Object> returnMap = new HashMap<String, Object>();
  1381. HpUser hpUser = new HpUser();
  1382. String code = requestMap.get("code");
  1383. String clientId = requestMap.get("client_id");
  1384. //只有一个code的时候,获取用户凭证
  1385. JSONObject result = TokenUtil.getAccessToken(code);
  1386. String openId = result.getString("openid");
  1387. String accessToken = result.getString("access_token");
  1388. String unionId = result.getString("unionid");
  1389. String refreshToken = result.getString("refresh_token");
  1390. int access_token_endtime = (int) (System.currentTimeMillis() / 1000) + Constants.WX_ACCESS_TOKEN_AGE;
  1391. logger.info("time======" + access_token_endtime);
  1392. String userIds = ""; //废弃的userid集
  1393. if (StringUtils.isNotBlank(openId)) {
  1394. //查询数据库中是否存在此条数据,同一个用户在同一平台下unionId相同
  1395. List<HpUser> list = Lists.newArrayList();
  1396. if (StringUtils.isNotBlank(unionId)) {
  1397. list = this.findByUnionId_new(unionId);
  1398. }
  1399. //查询数据库是否存在相同的wxopenid
  1400. List<HpUser> list1 = this.findByWxOpenId_new(openId);
  1401. //已存在用户
  1402. if ((list != null && list.size() > 0) || (list1 != null && list1.size() > 0)) {
  1403. if (list != null && list.size() > 0) {
  1404. hpUser = list.get(0);
  1405. if (StringUtils.isBlank(hpUser.getWxOpenid())) {
  1406. hpUser.setWxOpenid(openId);
  1407. }
  1408. } else {
  1409. hpUser = list1.get(0);
  1410. if (StringUtils.isBlank(hpUser.getUnionid())) {
  1411. hpUser.setUnionid(unionId);
  1412. }
  1413. }
  1414. //用户存在手机号
  1415. if (StringUtils.isNotBlank(hpUser.getPhone())) {
  1416. //查询是否存在本条数据
  1417. List<HpUser> hpUserList = this.findByPhone_new(hpUser);
  1418. //如果该用户有多条记录,则提示选择一条用户,其余则遗弃不再使用
  1419. List list2 = new ArrayList();
  1420. if (hpUserList.size() > 1) {
  1421. for (int i = 0; i < hpUserList.size(); i++) {
  1422. Map map = getUserLists(hpUserList.get(i));
  1423. HpResume hpResume = (HpResume) map.get("hpResume");
  1424. //以简历是否存在作为判断该账号下是否存在数据的标准
  1425. if (hpResume == null) {
  1426. //没有简历,该条用户记录自动被视为放弃,数据绑定到另外的用户上
  1427. if (i == 0) {
  1428. HpUser hpUserOth = hpUserList.get(1);
  1429. HpUser hpUserOld = hpUserList.get(0);
  1430. hpUser = changeHpUserData(hpUserOth, hpUserOld);
  1431. userIds = hpUserOld.getId();
  1432. } else {
  1433. HpUser hpUserOth = hpUserList.get(0);
  1434. HpUser hpUserOld = hpUserList.get(1);
  1435. hpUser = changeHpUserData(hpUserOth, hpUserOld);
  1436. userIds = hpUserOld.getId();
  1437. }
  1438. break;
  1439. } else {
  1440. list2.add(map);
  1441. }
  1442. }
  1443. }
  1444. //如果登录方式不包含微信授权,则添加
  1445. if (!hpUser.getLoginType().contains(AppLoginsEnum.WX_AUTH.getType())) {
  1446. String loginType = hpUser.getLoginType() + "," + AppLoginsEnum.WX_AUTH.getType();
  1447. hpUser.setLoginType(loginType);
  1448. }
  1449. if (StringUtils.isBlank(hpUser.getUserToken())) {
  1450. //用户token作为请求的标准
  1451. long t1 = System.currentTimeMillis();
  1452. String timestamp = String.valueOf(t1);
  1453. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  1454. hpUser.setUserToken(user_token);
  1455. }
  1456. if (StringUtils.isBlank(hpUser.getUserType())) {
  1457. hpUser.setUserType("0");
  1458. }
  1459. //通过openid和用户access_token获取用户信息
  1460. JSONObject wxuser = TokenUtil.getWxuser(accessToken, openId);
  1461. // 获取对象中的数据
  1462. String nickname = wxuser.getString("nickname");
  1463. String sex = wxuser.getString("sex");
  1464. String avatar = wxuser.getString("headimgurl");
  1465. String province = wxuser.getString("province");
  1466. String city = wxuser.getString("city");
  1467. String country = wxuser.getString("country");
  1468. hpUser.setLoginTime(new Date());
  1469. hpUser.setNickName(nickname);
  1470. hpUser.setGender(sex);
  1471. hpUser.setHeadImgUrl(avatar);
  1472. hpUser.setProvince(province);
  1473. hpUser.setCity(city);
  1474. hpUser.setCoutry(country);
  1475. hpUser.setClientId(clientId);
  1476. hpUser.setAccessToken(accessToken);
  1477. hpUser.setRefreshToken(refreshToken);
  1478. hpUser.setAccessTokenEndtime(access_token_endtime);
  1479. this.save(hpUser);
  1480. if (list2.size() == hpUserList.size()) {
  1481. returnMap.put("userList", list2);
  1482. returnMap.put("success", "2009");
  1483. return returnMap;
  1484. }
  1485. returnMap.put("hpUser", hpUser);
  1486. //判断member表是否存在该手机号用户
  1487. HpMember hpMember = checkMember(hpUser, hpUser.getPhone(), userIds);
  1488. returnMap.put("hpMember", hpMember);
  1489. //返回用户简历信息
  1490. HpResume hpResume = this.getResume(hpMember);
  1491. returnMap.put("userResume", hpResume);
  1492. //返回用户的企业信息
  1493. DpEnterpriseAuthentication dpEnterpriseAuthentication = this.getDpEnterpriseAuthentication(hpMember);
  1494. returnMap.put("dpEnterpriseAuthentication", dpEnterpriseAuthentication);
  1495. } else {
  1496. CacheUtils.put(APP_USERMSG, unionId + openId, result);
  1497. returnMap.put("success", "1014");
  1498. returnMap.put("openId", openId);
  1499. returnMap.put("unionId", unionId);
  1500. }
  1501. } else {
  1502. //新增是没有手机号的,不去判断
  1503. //将授权信息暂存redis
  1504. CacheUtils.put(APP_USERMSG, unionId + openId, result);
  1505. returnMap.put("success", "1014");
  1506. returnMap.put("openId", openId);
  1507. returnMap.put("unionId", unionId);
  1508. }
  1509. } else {
  1510. returnMap.put("success", "1010");
  1511. }
  1512. return returnMap;
  1513. }
  1514. private List<HpUser> findByWxOpenId_new(String openId) {
  1515. return mapper.findByWxOpenId_new(openId);
  1516. }
  1517. private List<HpUser> findByUnionId_new(String unionId) {
  1518. return mapper.findByUnionId_new(unionId);
  1519. }
  1520. /**
  1521. * app微信授权登录后绑定手机号
  1522. *
  1523. * @param requestMap
  1524. * @return
  1525. */
  1526. @Transactional(readOnly = false)
  1527. public Map<String, Object> wxPhone_new(Map<String, String> requestMap) {
  1528. Map<String, Object> returnMap = new HashMap<String, Object>();
  1529. HpUser hpUser = new HpUser();
  1530. HpUser hpUser1 = new HpUser();
  1531. String phone = requestMap.get("phone");
  1532. String clientId = requestMap.get("client_id");
  1533. String openId = requestMap.get("openId");
  1534. String unionId = requestMap.get("unionId");
  1535. String userIds = "";
  1536. if (StringUtils.isNotBlank(openId)) {
  1537. //查询数据库中是否存在此条数据,同一个用户在同一平台下unionId相同
  1538. List<HpUser> list = this.findByUnionId_new(unionId);
  1539. //查询数据库是否存在相同的wxopenid
  1540. List<HpUser> list1 = this.findByWxOpenId_new(openId);
  1541. List list2 = new ArrayList();
  1542. List<HpUser> hpUserList = new ArrayList<>();
  1543. //已存在用户
  1544. if ((list != null && list.size() > 0) || (list1 != null && list1.size() > 0)) {
  1545. if (list != null && list.size() > 0) {
  1546. hpUser = list.get(0);
  1547. if (StringUtils.isBlank(hpUser.getWxOpenid())) {
  1548. hpUser.setWxOpenid(openId);
  1549. }
  1550. } else {
  1551. hpUser = list1.get(0);
  1552. if (StringUtils.isBlank(hpUser.getUnionid())) {
  1553. hpUser.setUnionid(unionId);
  1554. }
  1555. }
  1556. hpUser.setPhone(phone);
  1557. //判断手机号是否存在
  1558. hpUserList = this.findByPhone_new(hpUser);
  1559. hpUserList.add(hpUser);//将当前准备绑定手机号的用户添加到该集合去做合并处理
  1560. if (hpUserList != null && hpUserList.size() > 0) {
  1561. //如果该用户有多条记录,则提示选择一条用户,其余则遗弃不再使用
  1562. if (hpUserList.size() > 1) {
  1563. for (int i = 0; i < hpUserList.size(); i++) {
  1564. Map map = getUserLists(hpUserList.get(i));
  1565. HpResume hpResume = (HpResume) map.get("hpResume");
  1566. if (hpResume == null) {
  1567. //没有简历,该条用户记录自动被视为放弃,数据绑定到另外的用户上
  1568. if (i == 0) {
  1569. HpUser hpUserOth = hpUserList.get(1);
  1570. HpUser hpUserOld = hpUserList.get(0);
  1571. hpUser = changeHpUserData(hpUserOth, hpUserOld);
  1572. userIds = hpUserOld.getId();
  1573. } else {
  1574. HpUser hpUserOth = hpUserList.get(0);
  1575. HpUser hpUserOld = hpUserList.get(1);
  1576. hpUser = changeHpUserData(hpUserOth, hpUserOld);
  1577. userIds = hpUserOld.getId();
  1578. }
  1579. break;
  1580. } else {
  1581. list2.add(map);
  1582. }
  1583. }
  1584. } else {
  1585. hpUser = hpUserList.get(0);
  1586. }
  1587. if (StringUtils.isBlank(hpUser.getWxOpenid())) {
  1588. hpUser.setWxOpenid(openId);
  1589. }
  1590. if (StringUtils.isBlank(hpUser.getUnionid())) {
  1591. hpUser.setUnionid(unionId);
  1592. }
  1593. }
  1594. //如果登录方式不包含微信授权,则添加
  1595. if (!hpUser.getLoginType().contains(AppLoginsEnum.WX_AUTH.getType())) {
  1596. String loginType = hpUser.getLoginType() + "," + AppLoginsEnum.WX_AUTH.getType();
  1597. hpUser.setLoginType(loginType);
  1598. }
  1599. if (StringUtils.isBlank(hpUser.getUserToken())) {
  1600. //用户token作为请求的标准
  1601. long t1 = System.currentTimeMillis();
  1602. String timestamp = String.valueOf(t1);
  1603. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  1604. hpUser.setUserToken(user_token);
  1605. }
  1606. if (StringUtils.isBlank(hpUser.getUserType())) {
  1607. hpUser.setUserType("0");
  1608. }
  1609. } else {
  1610. //绑不绑定手机号
  1611. //绑定的情况
  1612. if (StringUtils.isNotBlank(phone)) {
  1613. //判断手机号是否已存在
  1614. hpUser.setPhone(phone);
  1615. //查询是否存在本条数据
  1616. hpUserList = this.findByPhone_new(hpUser);
  1617. if (hpUserList != null && hpUserList.size() > 0) {
  1618. //如果该用户有多条记录,则提示选择一条用户,其余则遗弃不再使用
  1619. if (hpUserList.size() > 1) {
  1620. for (int i = 0; i < hpUserList.size(); i++) {
  1621. Map map = getUserLists(hpUserList.get(i));
  1622. HpResume hpResume = (HpResume) map.get("hpResume");
  1623. if (hpResume == null) {
  1624. //没有简历,该条用户记录自动被视为放弃,数据绑定到另外的用户上
  1625. if (i == 0) {
  1626. HpUser hpUserOth = hpUserList.get(1);
  1627. HpUser hpUserOld = hpUserList.get(0);
  1628. hpUser = changeHpUserData(hpUserOth, hpUserOld);
  1629. userIds = hpUserOld.getId();
  1630. } else {
  1631. HpUser hpUserOth = hpUserList.get(0);
  1632. HpUser hpUserOld = hpUserList.get(1);
  1633. hpUser = changeHpUserData(hpUserOth, hpUserOld);
  1634. userIds = hpUserOld.getId();
  1635. }
  1636. break;
  1637. } else {
  1638. list2.add(map);
  1639. }
  1640. }
  1641. } else {
  1642. //手机号已存在
  1643. hpUser = hpUserList.get(0);
  1644. }
  1645. //如果登录方式不包含微信授权,则添加
  1646. if (!hpUser.getLoginType().contains(AppLoginsEnum.WX_AUTH.getType())) {
  1647. String loginType = hpUser.getLoginType() + "," + AppLoginsEnum.WX_AUTH.getType();
  1648. hpUser.setLoginType(loginType);
  1649. }
  1650. if (StringUtils.isBlank(hpUser.getUserToken())) {
  1651. //用户token作为请求的标准
  1652. long t1 = System.currentTimeMillis();
  1653. String timestamp = String.valueOf(t1);
  1654. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  1655. hpUser.setUserToken(user_token);
  1656. }
  1657. if (StringUtils.isBlank(hpUser.getUserType())) {
  1658. hpUser.setUserType("0");
  1659. }
  1660. hpUser.setUnionid(unionId);
  1661. hpUser.setWxOpenid(openId);
  1662. } else {
  1663. //新用户
  1664. hpUser1.setRegisterType(AppLoginsEnum.AppRegisterEnum.R_WX_AUTH.getRegistType());
  1665. hpUser1.setLoginType(AppLoginsEnum.WX_AUTH.getType());
  1666. hpUser1.setWxOpenid(openId);
  1667. hpUser1.setUnionid(unionId);
  1668. hpUser1.setAuthenticationStatus(0);
  1669. hpUser1.setContactStatus(0);
  1670. hpUser1.setUserType("0");
  1671. hpUser1.setUseFlag(false);
  1672. this.save(hpUser1);
  1673. hpUser = this.get(hpUser1.getId());
  1674. //用户token作为请求的标准
  1675. long t1 = System.currentTimeMillis();
  1676. String timestamp = String.valueOf(t1);
  1677. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  1678. hpUser.setUserToken(user_token);
  1679. String qrcode = makeUserQrCode(hpUser);
  1680. hpUser.setQrCode(qrcode);
  1681. }
  1682. }
  1683. }
  1684. JSONObject result = (JSONObject) CacheUtils.get(APP_USERMSG, unionId + openId);
  1685. String accessToken = result.getString("access_token");
  1686. String refreshToken = result.getString("refresh_token");
  1687. int access_token_endtime = (int) (System.currentTimeMillis() / 1000) + Constants.WX_ACCESS_TOKEN_AGE;
  1688. //通过openid和用户access_token获取用户信息
  1689. JSONObject wxuser = TokenUtil.getWxuser(accessToken, openId);
  1690. // 获取对象中的数据
  1691. String nickname = wxuser.getString("nickname");
  1692. String sex = wxuser.getString("sex");
  1693. String avatar = wxuser.getString("headimgurl");
  1694. String province = wxuser.getString("province");
  1695. String city = wxuser.getString("city");
  1696. String country = wxuser.getString("country");
  1697. if (StringUtils.isNotBlank(phone)) {
  1698. hpUser.setPhone(phone);
  1699. }
  1700. hpUser.setLoginTime(new Date());
  1701. hpUser.setNickName(nickname);
  1702. hpUser.setGender(sex);
  1703. hpUser.setHeadImgUrl(avatar);
  1704. hpUser.setProvince(province);
  1705. hpUser.setCity(city);
  1706. hpUser.setCoutry(country);
  1707. hpUser.setClientId(clientId);
  1708. hpUser.setAccessToken(accessToken);
  1709. hpUser.setRefreshToken(refreshToken);
  1710. hpUser.setAccessTokenEndtime(access_token_endtime);
  1711. this.save(hpUser);
  1712. if (list2.size() == hpUserList.size()) {
  1713. returnMap.put("userList", list2);
  1714. returnMap.put("success", "2009");
  1715. return returnMap;
  1716. }
  1717. returnMap.put("hpUser", hpUser);
  1718. //判断member表是否存在该手机号用户
  1719. HpMember hpMember = checkMember(hpUser, phone, userIds);
  1720. returnMap.put("hpMember", hpMember);
  1721. //清除微信授权时缓存的用户授权信息
  1722. CacheUtils.remove(APP_USERMSG, unionId + openId);
  1723. //清除redis缓存的验证码
  1724. CacheUtils.remove(APP_USER, phone);
  1725. //返回用户简历信息
  1726. HpResume hpResume = this.getResume(hpMember);
  1727. returnMap.put("userResume", hpResume);
  1728. //返回用户的企业信息
  1729. DpEnterpriseAuthentication dpEnterpriseAuthentication = this.getDpEnterpriseAuthentication(hpMember);
  1730. returnMap.put("dpEnterpriseAuthentication", dpEnterpriseAuthentication);
  1731. } else {
  1732. returnMap.put("success", "1010");
  1733. }
  1734. return returnMap;
  1735. }
  1736. /**
  1737. * 用户合并时,逻辑删除
  1738. */
  1739. public void deleteByUserId(String userid) {
  1740. mapper.deleteByUserId(userid);
  1741. }
  1742. /**
  1743. * 日常获取app微信授权用户信息
  1744. *
  1745. * @param requestMap
  1746. * @return
  1747. */
  1748. @Transactional(readOnly = false)
  1749. public Map<String, Object> getUserInfo_new(Map<String, String> requestMap) {
  1750. Map<String, Object> returnMap = new HashMap<String, Object>();
  1751. String userId = requestMap.get("user_id");
  1752. String userToken = requestMap.get("user_token");
  1753. String loginType = requestMap.get("login_type"); //手机登录标志(默认:1)
  1754. String memberId = requestMap.get("member_id");
  1755. JSONObject json_object = new JSONObject();
  1756. String errcode = "";
  1757. //验证用户是否处于登录态
  1758. if (TokenUtil.validateLogin(memberId, userId)) {
  1759. //验证用户合法性
  1760. if (TokenUtil.validateToken(userId, userToken)) {
  1761. HpUser hpUser = this.get(userId);
  1762. HpMember hpMember = hpMemberService.getAPI(memberId);
  1763. //手机用户
  1764. if (StringUtils.isNotBlank(loginType)) {
  1765. if ("1".equals(loginType)) {
  1766. returnMap.put("hpUser", hpUser);
  1767. returnMap.put("hpMember", hpMember);
  1768. return returnMap;
  1769. }
  1770. }
  1771. if (StringUtils.isBlank(hpUser.getUnionid()) && StringUtils.isBlank(hpUser.getWxOpenid())) {
  1772. //手机用户
  1773. returnMap.put("hpUser", hpUser);
  1774. returnMap.put("hpMember", hpMember);
  1775. return returnMap;
  1776. }
  1777. //日常获取用户access_token
  1778. json_object = TokenUtil.getDayAccessToken(userId);
  1779. //不为空,则为微信授权
  1780. if (json_object != null) {
  1781. //判断是否存在errcode键
  1782. if (json_object.containsKey("errcode")) {
  1783. errcode = json_object.getString("errcode");
  1784. }
  1785. //当刷新access_token如果存在errcode且不等于0,则认为refreshToken已过期
  1786. if (StringUtils.isNotBlank(errcode) && !"0".equals(errcode)) {
  1787. returnMap.put("success", "1013");
  1788. return returnMap;
  1789. } else {
  1790. //获取用户最新信息
  1791. String accessToken = json_object.getString("access_token");
  1792. JSONObject wxuser = TokenUtil.getWxuser(accessToken, userId);
  1793. //更新用户access_token信息
  1794. String nickname = wxuser.getString("nickname");
  1795. String sex = wxuser.getString("sex");
  1796. String avatar = wxuser.getString("headimgurl");
  1797. String province = wxuser.getString("province");
  1798. String city = wxuser.getString("city");
  1799. String country = wxuser.getString("country");
  1800. hpUser.setNickName(nickname);
  1801. hpUser.setGender(sex);
  1802. hpUser.setHeadImgUrl(avatar);
  1803. hpUser.setProvince(province);
  1804. hpUser.setCity(city);
  1805. hpUser.setCoutry(country);
  1806. hpUser.setAccessToken(json_object.getString("access_token"));
  1807. //如果包含refresh_token,说明是刷新了access_token
  1808. if (json_object.containsKey("refresh_token")) {
  1809. hpUser.setRefreshToken(json_object.getString("refresh_token"));
  1810. hpUser.setAccessTokenEndtime((int) (System.currentTimeMillis() / 1000) + Constants.WX_ACCESS_TOKEN_AGE);
  1811. }
  1812. this.save(hpUser);
  1813. }
  1814. }
  1815. returnMap.put("hpUser", hpUser);
  1816. returnMap.put("hpMember", hpMember);
  1817. } else {
  1818. returnMap.put("success", "1004");
  1819. }
  1820. } else {
  1821. returnMap.put("success", "2010");
  1822. }
  1823. return returnMap;
  1824. }
  1825. /**
  1826. * 自发布切换身份
  1827. */
  1828. public Map<String, Object> changeIdentity(Map<String, String> requestMap, HttpServletRequest request, HttpServletResponse response) {
  1829. Map<String, Object> returnMap = new HashMap<String, Object>();
  1830. String userId = requestMap.get("user_id");
  1831. String userToken = requestMap.get("user_token");
  1832. String memberId = requestMap.get("member_id");
  1833. //验证登录态
  1834. if (TokenUtil.validateLogin(memberId, userId)) {
  1835. //验证用户合法性
  1836. if (TokenUtil.validateToken(userId, userToken)) {
  1837. String userType = requestMap.get("user_type"); //1:招聘者 0:找工作
  1838. HpMember hpMember = hpMemberService.get(memberId);
  1839. if ("1".equals(userType)) {
  1840. DpEnterpriseAuthentication dpEnterpriseAuthentication = dpEnterpriseAuthenticationService.findCompanyByMemberId(memberId);
  1841. returnMap.put("dpEnterpriseAuthentication", dpEnterpriseAuthentication);
  1842. } else if ("0".equals(userType)) {
  1843. HpResume hpResume = hpResumeService.findResumeByMemberId(memberId);
  1844. returnMap.put("hpResume", hpResume);
  1845. }
  1846. returnMap.put("hpMember", hpMember);
  1847. } else {
  1848. returnMap.put("success", "1004");
  1849. }
  1850. } else {
  1851. returnMap.put("success", "2010");
  1852. }
  1853. return returnMap;
  1854. }
  1855. /********************小程序授权************************/
  1856. /**
  1857. * 小程序授权登录
  1858. *
  1859. * @param requestMap
  1860. * @return
  1861. */
  1862. @Transactional(readOnly = false)
  1863. public Map<String, Object> minaLogin_new(Map<String, String> requestMap) {
  1864. Map<String, Object> returnMap = new HashMap<String, Object>();
  1865. String code = requestMap.get("code");
  1866. //通过小程序code获取用户openId
  1867. JSONObject result = TokenUtil.minaGetSession(code);
  1868. //返回成功时,不返回errcode
  1869. if (result != null && !result.containsKey("errcode") && result.containsKey("openid")) {
  1870. String openId = result.getString("openid");
  1871. String sessionKey = result.getString("session_key");
  1872. returnMap.put("openId", openId);
  1873. returnMap.put("sessionKey", sessionKey);
  1874. } else {
  1875. returnMap.put("success", "1005");
  1876. returnMap.put("errmsg", result.getString("errmsg"));
  1877. }
  1878. return returnMap;
  1879. }
  1880. /**
  1881. * 保存小程序用户信息
  1882. *
  1883. * @param requestMap
  1884. * @return
  1885. */
  1886. @Transactional(readOnly = false)
  1887. public Map<String, Object> saveMinaInfo_new(Map<String, String> requestMap) {
  1888. Map<String, Object> returnMap = new HashMap<String, Object>();
  1889. String encryptedData = requestMap.get("encryptedData");
  1890. String iv = requestMap.get("iv");
  1891. String openId = requestMap.get("openid");
  1892. String sessionKey = requestMap.get("session_key");
  1893. String userIds = "";
  1894. if (StringUtils.isBlank(encryptedData) || StringUtils.isBlank(iv)) {
  1895. returnMap.put("success", 1005);
  1896. return returnMap;
  1897. }
  1898. //微信加密信息:解密,获取用户信息
  1899. JSONObject json = this.decodeWxData(encryptedData, iv, sessionKey);
  1900. HpUser hpUser1 = new HpUser();
  1901. if (json != null && !json.containsKey("errcode")) {
  1902. String unionId = json.getString("unionId");
  1903. logger.info("openid===============================" + openId);
  1904. logger.info("unioniD===============================" + unionId);
  1905. if (StringUtils.isNotBlank(openId)) {
  1906. //查询数据库中是否存在此条数据,同一个用户在同一平台下unionId相同
  1907. List<HpUser> list = new ArrayList<>();
  1908. if (StringUtils.isNotBlank(unionId)) {
  1909. list = this.findByUnionId_new(unionId);
  1910. }
  1911. //查询数据库是否存在相同的minaopenid
  1912. List<HpUser> list1 = this.findByMinaOpenId_new(openId);
  1913. //如果存在
  1914. if ((list != null && list.size() > 0) || (list1 != null && list1.size() > 0)) {
  1915. if (list != null && list.size() > 0) {
  1916. hpUser1 = list.get(0);
  1917. if (StringUtils.isBlank(hpUser1.getMinaOpenid())) {
  1918. hpUser1.setMinaOpenid(openId);
  1919. }
  1920. } else {
  1921. hpUser1 = list1.get(0);
  1922. if (StringUtils.isBlank(hpUser1.getUnionid())) {
  1923. hpUser1.setUnionid(unionId);
  1924. }
  1925. }
  1926. //用户存在手机号
  1927. if (StringUtils.isNotBlank(hpUser1.getPhone())) {
  1928. //查询是否存在本条数据
  1929. List<HpUser> hpUserList = this.findByPhone_new(hpUser1);
  1930. //如果该用户有多条记录,则提示选择一条用户,其余则遗弃不再使用
  1931. List list2 = new ArrayList();
  1932. if (hpUserList.size() > 1) {
  1933. for (int i = 0; i < hpUserList.size(); i++) {
  1934. Map map = getUserLists(hpUserList.get(i));
  1935. HpResume hpResume = (HpResume) map.get("hpResume");
  1936. //以简历是否存在作为判断该账号下是否存在数据的标准
  1937. if (hpResume == null) {
  1938. //没有简历,该条用户记录自动被视为放弃,数据绑定到另外的用户上
  1939. if (i == 0) {
  1940. HpUser hpUserOth = hpUserList.get(1);
  1941. HpUser hpUserOld = hpUserList.get(0);
  1942. hpUser1 = changeHpUserData(hpUserOth, hpUserOld);
  1943. userIds = hpUserOld.getId();
  1944. } else {
  1945. HpUser hpUserOth = hpUserList.get(0);
  1946. HpUser hpUserOld = hpUserList.get(1);
  1947. hpUser1 = changeHpUserData(hpUserOth, hpUserOld);
  1948. userIds = hpUserOld.getId();
  1949. }
  1950. break;
  1951. } else {
  1952. list2.add(map);
  1953. }
  1954. }
  1955. }
  1956. //如果登录方式不包含小程序授权,则添加
  1957. if (!hpUser1.getLoginType().contains(AppLoginsEnum.MINA.getType())) {
  1958. String loginType = hpUser1.getLoginType() + "," + AppLoginsEnum.MINA.getType();
  1959. hpUser1.setLoginType(loginType);
  1960. }
  1961. if (StringUtils.isBlank(hpUser1.getUserToken())) {
  1962. //用户token作为请求的标准
  1963. long t1 = System.currentTimeMillis();
  1964. String timestamp = String.valueOf(t1);
  1965. String user_token = Md5Encrypt.md5(hpUser1.getId() + timestamp);
  1966. hpUser1.setUserToken(user_token);
  1967. }
  1968. if (StringUtils.isBlank(hpUser1.getUserType())) {
  1969. hpUser1.setUserType("0");
  1970. }
  1971. //sessionkey需要刷新
  1972. hpUser1.setMinaSessionKey(sessionKey);
  1973. String nickName = json.getString("nickName");
  1974. String gender = json.getString("gender");
  1975. String avatarUrl = json.getString("avatarUrl");
  1976. String country = json.getString("country");
  1977. String province = json.getString("province");
  1978. String city = json.getString("city");
  1979. hpUser1.setNickName(nickName);
  1980. hpUser1.setGender(gender);
  1981. hpUser1.setHeadImgUrl(avatarUrl);
  1982. hpUser1.setCoutry(country);
  1983. hpUser1.setProvince(province);
  1984. hpUser1.setCity(city);
  1985. hpUser1.setLoginTime(new Date());
  1986. this.save(hpUser1);
  1987. if (list2.size() == hpUserList.size()) {
  1988. returnMap.put("userList", list2);
  1989. returnMap.put("success", "2009");
  1990. return returnMap;
  1991. }
  1992. returnMap.put("hpUser", hpUser1);
  1993. //判断member表是否存在该手机号用户
  1994. HpMember hpMember = checkMember(hpUser1, hpUser1.getPhone(), userIds);
  1995. returnMap.put("hpMember", hpMember);
  1996. } else {
  1997. CacheUtils.put(MINA_USERMSG, unionId + openId, json);
  1998. returnMap.put("success", "1014");
  1999. returnMap.put("openId", openId);
  2000. returnMap.put("unionId", unionId);
  2001. returnMap.put("sessionKey", sessionKey);
  2002. }
  2003. } else {
  2004. CacheUtils.put(MINA_USERMSG, unionId + openId, json);
  2005. returnMap.put("success", "1014");
  2006. returnMap.put("openId", openId);
  2007. returnMap.put("unionId", unionId);
  2008. returnMap.put("sessionKey", sessionKey);
  2009. }
  2010. } else {
  2011. returnMap.put("success", "1010");
  2012. }
  2013. }
  2014. return returnMap;
  2015. }
  2016. private List<HpUser> findByMinaOpenId_new(String openId) {
  2017. return mapper.findByMinaOpenId_new(openId);
  2018. }
  2019. /**
  2020. * 保存小程序用户手机号
  2021. *
  2022. * @param requestMap
  2023. * @return
  2024. */
  2025. @Transactional(readOnly = false)
  2026. public Map<String, Object> saveMinaPhone_new(Map<String, String> requestMap) {
  2027. Map<String, Object> returnMap = new HashMap<String, Object>();
  2028. HpUser hpUser = new HpUser();
  2029. HpUser hpUser1 = new HpUser();
  2030. String phone = requestMap.get("phone");
  2031. String openId = requestMap.get("openId");
  2032. String unionId = requestMap.get("unionId");
  2033. String sessionKey = requestMap.get("sessionKey");
  2034. String userIds = "";
  2035. if (StringUtils.isNotBlank(openId)) {
  2036. //查询数据库中是否存在此条数据,同一个用户在同一平台下unionId相同
  2037. List<HpUser> list = this.findByUnionId_new(unionId);
  2038. //查询数据库是否存在相同的minaopenid
  2039. List<HpUser> list1 = this.findByMinaOpenId_new(openId);
  2040. List list2 = new ArrayList();
  2041. List<HpUser> hpUserList = new ArrayList<>();
  2042. //已存在用户
  2043. if ((list != null && list.size() > 0) || (list1 != null && list1.size() > 0)) {
  2044. if (list != null && list.size() > 0) {
  2045. hpUser = list.get(0);
  2046. if (StringUtils.isBlank(hpUser.getMinaOpenid())) {
  2047. hpUser.setMinaOpenid(openId);
  2048. }
  2049. } else {
  2050. hpUser = list1.get(0);
  2051. if (StringUtils.isBlank(hpUser.getUnionid())) {
  2052. hpUser.setUnionid(unionId);
  2053. }
  2054. }
  2055. hpUser.setPhone(phone);
  2056. //判断手机号是否存在
  2057. hpUserList = this.findByPhone_new(hpUser);
  2058. hpUserList.add(hpUser);//将当前准备绑定手机号的用户添加到该集合去做合并处理
  2059. if (hpUserList != null && hpUserList.size() > 0) {
  2060. //如果该用户有多条记录,则提示选择一条用户,其余则遗弃不再使用
  2061. if (hpUserList.size() > 1) {
  2062. for (int i = 0; i < hpUserList.size(); i++) {
  2063. Map map = getUserLists(hpUserList.get(i));
  2064. HpResume hpResume = (HpResume) map.get("hpResume");
  2065. if (hpResume == null) {
  2066. //没有简历,该条用户记录自动被视为放弃,数据绑定到另外的用户上
  2067. if (i == 0) {
  2068. HpUser hpUserOth = hpUserList.get(1);
  2069. HpUser hpUserOld = hpUserList.get(0);
  2070. hpUser = changeHpUserData(hpUserOth, hpUserOld);
  2071. userIds = hpUserOld.getId();
  2072. } else {
  2073. HpUser hpUserOth = hpUserList.get(0);
  2074. HpUser hpUserOld = hpUserList.get(1);
  2075. hpUser = changeHpUserData(hpUserOth, hpUserOld);
  2076. userIds = hpUserOld.getId();
  2077. }
  2078. break;
  2079. } else {
  2080. list2.add(map);
  2081. }
  2082. }
  2083. } else {
  2084. hpUser = hpUserList.get(0);
  2085. }
  2086. if (StringUtils.isBlank(hpUser.getMinaOpenid())) {
  2087. hpUser.setMinaOpenid(openId);
  2088. }
  2089. if (StringUtils.isBlank(hpUser.getUnionid())) {
  2090. hpUser.setUnionid(unionId);
  2091. }
  2092. }
  2093. //如果登录方式不包含小程序授权,则添加
  2094. if (!hpUser.getLoginType().contains(AppLoginsEnum.MINA.getType())) {
  2095. String loginType = hpUser.getLoginType() + "," + AppLoginsEnum.MINA.getType();
  2096. hpUser.setLoginType(loginType);
  2097. }
  2098. if (StringUtils.isBlank(hpUser.getUserToken())) {
  2099. //用户token作为请求的标准
  2100. long t1 = System.currentTimeMillis();
  2101. String timestamp = String.valueOf(t1);
  2102. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  2103. hpUser.setUserToken(user_token);
  2104. }
  2105. if (StringUtils.isBlank(hpUser.getUserType())) {
  2106. hpUser.setUserType("0");
  2107. }
  2108. } else {
  2109. //绑不绑定手机号
  2110. //绑定的情况
  2111. if (StringUtils.isNotBlank(phone)) {
  2112. //判断手机号是否已存在
  2113. hpUser.setPhone(phone);
  2114. //查询是否存在本条数据
  2115. hpUserList = this.findByPhone_new(hpUser);
  2116. if (hpUserList != null && hpUserList.size() > 0) {
  2117. //如果该用户有多条记录,则提示选择一条用户,其余则遗弃不再使用
  2118. if (hpUserList.size() > 1) {
  2119. for (int i = 0; i < hpUserList.size(); i++) {
  2120. Map map = getUserLists(hpUserList.get(i));
  2121. HpResume hpResume = (HpResume) map.get("hpResume");
  2122. if (hpResume == null) {
  2123. //没有简历,该条用户记录自动被视为放弃,数据绑定到另外的用户上
  2124. if (i == 0) {
  2125. HpUser hpUserOth = hpUserList.get(1);
  2126. HpUser hpUserOld = hpUserList.get(0);
  2127. hpUser = changeHpUserData(hpUserOth, hpUserOld);
  2128. userIds = hpUserOld.getId();
  2129. } else {
  2130. HpUser hpUserOth = hpUserList.get(0);
  2131. HpUser hpUserOld = hpUserList.get(1);
  2132. hpUser = changeHpUserData(hpUserOth, hpUserOld);
  2133. userIds = hpUserOld.getId();
  2134. }
  2135. break;
  2136. } else {
  2137. list2.add(map);
  2138. }
  2139. }
  2140. } else {
  2141. //手机号已存在
  2142. hpUser = hpUserList.get(0);
  2143. }
  2144. //如果登录方式不包含小程序授权,则添加
  2145. if (!hpUser.getLoginType().contains(AppLoginsEnum.MINA.getType())) {
  2146. String loginType = hpUser.getLoginType() + "," + AppLoginsEnum.MINA.getType();
  2147. hpUser.setLoginType(loginType);
  2148. }
  2149. if (StringUtils.isBlank(hpUser.getUserToken())) {
  2150. //用户token作为请求的标准
  2151. long t1 = System.currentTimeMillis();
  2152. String timestamp = String.valueOf(t1);
  2153. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  2154. hpUser.setUserToken(user_token);
  2155. }
  2156. if (StringUtils.isBlank(hpUser.getUserType())) {
  2157. hpUser.setUserType("0");
  2158. }
  2159. hpUser.setUnionid(unionId);
  2160. hpUser.setMinaOpenid(openId);
  2161. } else {
  2162. //新用户
  2163. hpUser1.setRegisterType(AppLoginsEnum.AppRegisterEnum.R_MINA.getRegistType());
  2164. hpUser1.setLoginType(AppLoginsEnum.MINA.getType());
  2165. hpUser1.setMinaOpenid(openId);
  2166. hpUser1.setUnionid(unionId);
  2167. hpUser1.setAuthenticationStatus(0);
  2168. hpUser1.setContactStatus(0);
  2169. hpUser1.setUserType("0");
  2170. hpUser1.setUseFlag(false);
  2171. this.save(hpUser1);
  2172. hpUser = this.get(hpUser1.getId());
  2173. //用户token作为请求的标准
  2174. long t1 = System.currentTimeMillis();
  2175. String timestamp = String.valueOf(t1);
  2176. String user_token = Md5Encrypt.md5(hpUser.getId() + timestamp);
  2177. hpUser.setUserToken(user_token);
  2178. String qrcode = makeUserQrCode(hpUser);
  2179. hpUser.setQrCode(qrcode);
  2180. }
  2181. }
  2182. }
  2183. //获取redis缓存的用户信息
  2184. JSONObject json = (JSONObject) CacheUtils.get(MINA_USERMSG, unionId + openId);
  2185. String nickName = json.getString("nickName");
  2186. String gender = json.getString("gender");
  2187. String avatarUrl = json.getString("avatarUrl");
  2188. String country = json.getString("country");
  2189. String province = json.getString("province");
  2190. String city = json.getString("city");
  2191. if (StringUtils.isNotBlank(phone)) {
  2192. hpUser.setPhone(phone);
  2193. }
  2194. hpUser.setLoginTime(new Date());
  2195. hpUser.setNickName(nickName);
  2196. hpUser.setGender(gender);
  2197. hpUser.setHeadImgUrl(avatarUrl);
  2198. hpUser.setProvince(province);
  2199. hpUser.setCity(city);
  2200. hpUser.setCoutry(country);
  2201. hpUser.setMinaSessionKey(sessionKey);
  2202. this.save(hpUser);
  2203. if (list2.size() == hpUserList.size()) {
  2204. returnMap.put("userList", list2);
  2205. returnMap.put("success", "2009");
  2206. return returnMap;
  2207. }
  2208. returnMap.put("hpUser", hpUser);
  2209. //判断member表是否存在该手机号用户
  2210. HpMember hpMember = checkMember(hpUser, phone, userIds);
  2211. returnMap.put("hpMember", hpMember);
  2212. //清除小程序授权时缓存的用户授权信息
  2213. CacheUtils.remove(MINA_USERMSG, unionId + openId);
  2214. //清除redis缓存的验证码
  2215. CacheUtils.remove(APP_USER, phone);
  2216. } else {
  2217. returnMap.put("success", "1010");
  2218. }
  2219. return returnMap;
  2220. }
  2221. /**
  2222. * 小程序上传图片
  2223. *
  2224. * @param request
  2225. * @return
  2226. */
  2227. public Map<String, Object> saveImgUp_new(HttpServletRequest request) {
  2228. Map<String, Object> returnMap = new HashMap<String, Object>();
  2229. String userId = request.getParameter("user_id");
  2230. String userToken = request.getParameter("user_token");
  2231. String memberId = request.getParameter("member_id");
  2232. //验证用户是否处于登录态
  2233. if (TokenUtil.validateLogin(memberId, userId)) {
  2234. //验证用户合法性
  2235. if (TokenUtil.validateToken(userId, userToken)) {
  2236. String type = request.getParameter("up_type");
  2237. HpUser hpUser = this.get(userId);
  2238. String path = "/hpuser/index";
  2239. if (StringUtils.isNotBlank(type)) {
  2240. switch (type) {
  2241. case "0":
  2242. //基本资料
  2243. path = "/hpuser/resume";
  2244. break;
  2245. case "1":
  2246. //身份证正面
  2247. path = "/hpuser/idcard/front";
  2248. break;
  2249. case "2":
  2250. //身份证反面
  2251. path = "/hpuser/idcard/back";
  2252. break;
  2253. case "3":
  2254. //手持身份证
  2255. path = "/hpuser/idcard/hold";
  2256. break;
  2257. }
  2258. }
  2259. //头像上传调用
  2260. try {
  2261. if (request instanceof MultipartHttpServletRequest) {
  2262. AjaxJson j = webupload(request, "file", hpUser, path);
  2263. if (j.isSuccess()) {
  2264. returnMap.put("imgUrl", j.getBody().get("url"));
  2265. } else {
  2266. logger.info("wpload========" + j.getMsg());
  2267. }
  2268. } else {
  2269. logger.info("wpnonono========没有文件上传");
  2270. }
  2271. } catch (IOException e) {
  2272. e.printStackTrace();
  2273. }
  2274. } else {
  2275. returnMap.put("success", "1004");
  2276. }
  2277. } else {
  2278. returnMap.put("success", "2010");
  2279. }
  2280. return returnMap;
  2281. }
  2282. }