Java tutorial
/** * Project: guahao-portal-web-home * * File Created at 2012-11-23 * * Copyright 2012 Greenline.com Corporation Limited. * All rights reserved. * * This software is the confidential and proprietary information of * Greenline Company. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Greenline.com. */ package com.greenline.guahao.web.module.home.controllers.mobile.user; import java.net.URLDecoder; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import com.alipay.api.response.AlipayUserUserinfoShareResponse; import com.greenline.common.util.DESUtil; import com.greenline.common.util.RegexUtil; import com.greenline.guahao.biz.manager.hrs.ExpertManager; import com.greenline.guahao.biz.manager.user.UserManager; import com.greenline.guahao.biz.manager.user.dataobject.UserDO; import com.greenline.guahao.biz.manager.user.result.UserResult; import com.greenline.guahao.biz.util.BizCommonUtils; import com.greenline.guahao.web.module.common.annotation.MethodRemark; import com.greenline.guahao.web.module.common.constants.EncodeKeyConstants; import com.greenline.guahao.web.module.common.constants.GlobalConstants; import com.greenline.guahao.web.module.common.constants.MobileConstants; import com.greenline.guahao.web.module.common.constants.MobileMsgConstants; import com.greenline.guahao.web.module.common.cookie.CookieUser; import com.greenline.guahao.web.module.common.cookie.UserCookieUtil; import com.greenline.guahao.web.module.common.enums.DomainIndexEnum; import com.greenline.guahao.web.module.common.json.BaseJsonObject; import com.greenline.guahao.web.module.common.utils.UserUtil; import com.greenline.guahao.web.module.home.validator.user.ModifyPwValidator; import com.greenline.guahao.web.module.home.vo.user.ModifyPasswordVO; /** * @Type UserController * @Desc html5contrller * @author jianyun.zheng * @date 2012-11-23 * @Version V1.0 */ @Controller public class MobileUserController { private static final Log logger = LogFactory.getLog(MobileUserController.class); @Resource private HttpServletRequest request; @Resource private UserManager userManager; @Resource private ExpertManager expertManager; @Resource private MobileUserProcess mobileUserProcess; /** * html5?? * * @param model * @return String */ @MethodRemark(value = "remark=html5??,method=get") @RequestMapping(value = MobileConstants.M_MODIFY_PWD_PATH, method = RequestMethod.GET) public String modifyPwd(ModelMap model) { // ?cookieuserId Long cuserId = UserCookieUtil.getUserId(request); UserDO userDO = userManager.findUserByUserId(cuserId); model.put("userId", DESUtil.DESEncode(cuserId.toString(), EncodeKeyConstants.USER_ENCODE_KEY)); model.put("modifypwd", new ModifyPasswordVO()); if (userDO.getReg_type() == 3 && userDO.getLoginId().startsWith("alipay_") && userDO.getLoginId().substring(7, userDO.getLoginId().length()).length() == 16) { return MobileConstants.M_BIND_USER; } else { return MobileConstants.M_MODIFY_PWD; } } /** * html5??? * * @param model * @param userId * @param modifypwd * @param result * @return String */ @MethodRemark(value = "remark=html5???,method=post") @RequestMapping(value = MobileConstants.M_MODIFY_PWD_PATH, method = RequestMethod.POST) public String doModifyPwd(ModelMap model, @RequestParam("userId") String userId, @ModelAttribute("modifypwd") ModifyPasswordVO modifypwd, BindingResult result) { // ?cookieuserId Long cuserId = UserCookieUtil.getUserId(request); String loginId = UserCookieUtil.getLoginId(request); String decodeUserId = DESUtil.DESDecode(userId, EncodeKeyConstants.USER_ENCODE_KEY); if (StringUtils.isBlank(modifypwd.getLoginId())) { boolean hasError = Boolean.FALSE; // ModifyPwValidator pwdvalid = new ModifyPwValidator(); pwdvalid.validate(modifypwd, result); if (result.hasErrors()) { hasError = Boolean.TRUE; model.put("hasError", hasError); model.put("userId", userId); return MobileConstants.M_MODIFY_PWD; } // userId if (!hasError && (StringUtils.isBlank(decodeUserId) || !decodeUserId.equals(cuserId.toString()))) { hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.USERID_ERROR); } // ???? if (!hasError) { if (modifypwd.getNewPassword().equals(loginId)) { hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.LOGINID_EQ_PWD); } } if (!hasError) { // ? String resultMsg = userManager.modifyPassword(loginId, modifypwd.getOldPassword(), modifypwd.getNewPassword()); if (StringUtils.isNotBlank(resultMsg)) { model.put("message", resultMsg); } else { model.put("title", MobileMsgConstants.M_MODIFY_PWD_SUC); model.put("toUrl", MobileConstants.M_USERCENTER_PATH); model.put("toTitle", ""); return MobileConstants.M_SUCCESS; } } else { model.put("hasError", hasError); model.put("userId", userId); return MobileConstants.M_MODIFY_PWD; } } else { boolean hasError = Boolean.FALSE; // userId if (!hasError && (StringUtils.isBlank(decodeUserId) || !decodeUserId.equals(cuserId.toString()))) { hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.USERID_ERROR); } // ???? if (!hasError) { if (modifypwd.getNewPassword().equals(loginId)) { hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.LOGINID_EQ_PWD); } } if (!hasError) { // ??? boolean flag = Boolean.TRUE; if (flag && StringUtils.isBlank(modifypwd.getNewPassword())) { model.put("message", "??"); flag = Boolean.FALSE; } if (flag && StringUtils.isBlank(modifypwd.getReNewPassword())) { model.put("message", "??"); flag = Boolean.FALSE; } if (flag && !modifypwd.getReNewPassword().equals(modifypwd.getNewPassword())) { model.put("message", "??"); flag = Boolean.FALSE; } if (StringUtils.isNotBlank(modifypwd.getLoginId())) { boolean isExistDoctorLogin = expertManager.isExistDoctorLogin(modifypwd.getLoginId()); if (flag && isExistDoctorLogin) { model.put("message", "??"); flag = Boolean.FALSE; } } else { model.put("message", "???"); flag = Boolean.FALSE; } if (!flag) { hasError = Boolean.TRUE; model.put("hasError", hasError); model.put("userId", userId); model.put("modifypwd", modifypwd); model.put("loginId", modifypwd.getLoginId()); return MobileConstants.M_BIND_USER; } UserDO userDO = new UserDO(); userDO.setLoginId(modifypwd.getLoginId()); userDO.setPassword(modifypwd.getNewPassword()); userDO.setUserId(cuserId); UserResult r = userManager.updateUser(userDO); if (r.isSystemError()) { hasError = Boolean.TRUE; model.put("hasError", hasError); model.put("message", r.getResponseDesc()); model.put("userId", userId); model.put("modifypwd", modifypwd); return MobileConstants.M_BIND_USER; } else { boolean isSucess = userManager.resetPassword(modifypwd.getLoginId(), modifypwd.getNewPassword()); if (isSucess) { // ?cookie CookieUser cuser = UserCookieUtil.getUserCookie(request); cuser.setLoginId(modifypwd.getLoginId()); UserCookieUtil.write(request, cuser); model.put("title", ""); model.put("toUrl", MobileConstants.M_USERCENTER_PATH); model.put("toTitle", ""); return MobileConstants.M_SUCCESS; } else { hasError = Boolean.TRUE; model.put("hasError", hasError); model.put("message", r.getResponseDesc()); model.put("userId", userId); model.put("modifypwd", modifypwd); return MobileConstants.M_BIND_USER; } } } else { hasError = Boolean.TRUE; model.put("hasError", hasError); model.put("userId", userId); model.put("modifypwd", modifypwd); return MobileConstants.M_BIND_USER; } } return null; } /** * html5? * * @param model * @return String */ @MethodRemark(value = "remark=html5?,method=get") @RequestMapping(value = MobileConstants.M_USERCENTER_PATH, method = RequestMethod.GET) public String userCenter(ModelMap model) { Long cuserId = UserCookieUtil.getUserId(request);// ?cookieuserId UserDO userDO = userManager.findUserByUserId(cuserId); if (null == userDO) { model.put("message", ""); logger.error("cuserId=" + cuserId + "?"); return MobileConstants.M_ERROR; } // ???? if (UserUtil.isUserProfileImperfection(userDO)) { String accessToken = UserCookieUtil.getAccessToken(request); if (StringUtils.isNotBlank(accessToken) && DomainIndexEnum.ZFB.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM)) && userDO.getReg_type() == 3) { // accessToken??? AlipayUserUserinfoShareResponse userInfo = mobileUserProcess.getAlipayUserInfo(accessToken); if (null != userInfo && StringUtils.isNotBlank(userInfo.getCertNo()) && StringUtils.isNotBlank(userInfo.getMobile()) && StringUtils.isNotBlank(userInfo.getRealName())) { UserDO updateDO = new UserDO(); if (RegexUtil.isIdCard(StringUtils.trim(userInfo.getCertNo()))) { // ?? UserResult certNoResult = userManager.valiCertNo(cuserId, userInfo.getCertNo(), userDO.getReg_type()); if (!(certNoResult != null && certNoResult.getUserDO() != null)) { // ?? UserResult mobileResult = userManager.valiMobileNo(cuserId, userInfo.getMobile(), userDO.getReg_type()); if (!(mobileResult != null && mobileResult.getUserDO() != null)) { updateDO.setUserId(userDO.getUserId()); updateDO.setCertNo(userInfo.getCertNo()); updateDO.setUserName(userInfo.getRealName()); updateDO.setMobile(userInfo.getMobile()); updateDO.setBindMobile(1); updateDO.setReg_type(userDO.getReg_type()); BaseJsonObject msgJson = mobileUserProcess.updateUser(updateDO); if (!msgJson.getHasError()) { userDO = userManager.findUserByUserId(cuserId); logger.error("alipay app update user info success at user center.userid=" + userDO.getUserId() + ",accessToken=" + accessToken); } } } } } } } if (userDO.getReg_type() == 3 && userDO.getLoginId().startsWith("alipay_") && userDO.getLoginId().substring(7, userDO.getLoginId().length()).length() == 16) { model.put("html5alipay", true); } if (StringUtils.isNotBlank(userDO.getCertNo()) && "15".equals(String.valueOf(userDO.getCertNo().length()))) { model.put("firstGenerationCert", true); } model.put("isPingan", DomainIndexEnum.PINGAN.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("isZFB", DomainIndexEnum.ZFB.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("isM58", DomainIndexEnum.M58.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("isXM", DomainIndexEnum.XIAO_MI.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("userInfo", userDO); model.put("hasUpdate", UserUtil.isUserProfileImperfection(userDO)); return MobileConstants.M_USERCENTER; } /** * html5?? * * @param model * @param target * @return String */ @MethodRemark(value = "remark=html5??,method=get") @RequestMapping(value = MobileConstants.M_USERINFO_PATH, method = RequestMethod.GET) public String userPofile(ModelMap model, String target) { Long cuserId = UserCookieUtil.getUserId(request);// ?cookieuserId UserDO userDO = userManager.findUserByUserId(cuserId); Object mobile = request.getParameter("mobile"); if (null != mobile) { userDO.setMobile((String) mobile); } if (null == userDO) { return MobileConstants.M_ERROR; } model.put("userInfo", userDO); // ???? if (StringUtils.isNotBlank(target)) { model.put("target", target); } model.put("isZFB", DomainIndexEnum.ZFB.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("isM58", DomainIndexEnum.M58.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("isXM", DomainIndexEnum.XIAO_MI.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); return MobileConstants.M_USERINFO; } /** * html5??? * * @param model * @param userDO * @return String */ @MethodRemark(value = "remark=html5???,method=post") @RequestMapping(value = MobileConstants.M_USERINFO_UPDATE_PATH, method = RequestMethod.POST) public String fillInfo(ModelMap model, @ModelAttribute("userInfo") UserDO userDO) { Long cuserId = UserCookieUtil.getUserId(request);// ?cookieuserId boolean hasError = (null == userDO.getUserId()); if (!hasError && !userDO.getUserId().equals(cuserId)) { UserCookieUtil.logout(request); hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.USER_ERRO); } if (hasError) { return MobileConstants.M_ERROR; } if (!hasError && StringUtils.isBlank(userDO.getUserName())) { hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.USER_NAME_MUST); } if (!RegexUtil.isIdCard(StringUtils.trim(userDO.getCertNo()))) { hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.USER_CERNO_ERROR); model.put("certNoError", Boolean.TRUE); } if (userDO.getReg_type() != 1) { if (!RegexUtil.isMobile(StringUtils.trim(userDO.getMobile()))) { model.put("mobileError", Boolean.TRUE); hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.USER_MOBILE_ERROR); } } if (!BizCommonUtils.isAllChinese(userDO.getUserName())) { model.put("nameError", Boolean.TRUE); hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.USER_USERNAME_ERROR); } if (!hasError) { // ?? UserResult ur = userManager.valiCertNo(cuserId, userDO.getCertNo(), userDO.getReg_type()); if (ur != null && ur.getUserDO() != null) { hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.USER_CERNO_USERED); model.put("certNoError", Boolean.TRUE); } } if (!hasError) { // ? UserResult ur = userManager.valiMobileNo(cuserId, userDO.getMobile(), userDO.getReg_type()); if (ur != null && ur.getUserDO() != null) { hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.USER_MOBILENO_USERED); model.put("mobileError", Boolean.TRUE); } } if (!hasError) { UserDO updateDO = new UserDO(); updateDO.setUserId(userDO.getUserId()); updateDO.setCertNo(userDO.getCertNo()); updateDO.setUserName(userDO.getUserName()); if (userDO.getReg_type() != 1) { updateDO.setMobile(userDO.getMobile()); } updateDO.setReg_type(userDO.getReg_type()); BaseJsonObject msgJson = mobileUserProcess.updateUser(updateDO); hasError = msgJson.getHasError(); if (hasError) { model.put("message", msgJson.getMessage()); } } String target = request.getParameter("target"); if (hasError) { UserDO user = userManager.findUserByUserId(cuserId); if (null != user) { userDO.setLoginId(user.getLoginId()); } model.put("target", target); model.put("userInfo", userDO); model.put("hasError", hasError); if ("1".equals(request.getParameter("pageId"))) { model.put("hasUpdate", UserUtil.isUserProfileImperfection(user)); model.put("isZFB", DomainIndexEnum.ZFB.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("isM58", DomainIndexEnum.M58.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("isXM", DomainIndexEnum.XIAO_MI.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); return MobileConstants.M_USERCENTER; } model.put("isZFB", DomainIndexEnum.ZFB.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("isM58", DomainIndexEnum.M58.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("isXM", DomainIndexEnum.XIAO_MI.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); // ? return MobileConstants.M_USERINFO; } else { if (StringUtils.isNotBlank(target)) { try { return GlobalConstants.REDIRECT_PER + URLDecoder.decode(target, GlobalConstants.CHARSET_UTF8); } catch (Exception e) { } } model.put("title", MobileMsgConstants.M_UPDATE_USER_INFO_SUC); model.put("toUrl", MobileConstants.M_USERCENTER_PATH); model.put("toTitle", ""); return MobileConstants.M_SUCCESS; } } /** * ?? * * @param userDO * @param code * @param result * @return OperationJsonObject * @throws Exception */ @MethodRemark(value = "remark=??") @RequestMapping(value = "/mobile/b/fristCertToTwo") public String fristCertUpdateTwo(HttpServletRequest request, ModelMap model) throws Exception { Long cuserId = UserCookieUtil.getUserId(request);// ?cookieuserId UserDO userDO = userManager.findUserByUserId(cuserId); if (null == userDO) { model.put("message", ""); logger.error("cuserId=" + cuserId + "?"); return MobileConstants.M_ERROR; } if (StringUtils.isNotBlank(userDO.getCertNo()) && "15".equals(String.valueOf(userDO.getCertNo().length()))) { String certno = UserUtil.getEighteenIDCard(userDO.getCertNo()); model.put("certno", certno); } else { model.put("message", "???"); return MobileConstants.M_ERROR; } return MobileConstants.M_UPDATE_CERTNO; } /** * ?? * * @param userDO * @param code * @param result * @return OperationJsonObject * @throws Exception */ @MethodRemark(value = "remark=??") @RequestMapping(value = "/mobile/b/updateCertNO") public String updateCertNO(HttpServletRequest request, ModelMap model, @ModelAttribute("userInfo") UserDO user) throws Exception { Long cuserId = UserCookieUtil.getUserId(request);// ?cookieuserId UserDO userDO = userManager.findUserByUserId(cuserId); boolean hasError = false; if (null == userDO) { model.put("message", ""); logger.error("cuserId=" + cuserId + "?"); return MobileConstants.M_ERROR; } if (StringUtils.isNotBlank(userDO.getCertNo()) && "15".equals(String.valueOf(userDO.getCertNo().length()))) { if (!RegexUtil.isIdCard(StringUtils.trim(user.getCertNo()))) { hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.USER_CERNO_ERROR); } if (!hasError) { String certNO = UserUtil.getEighteenIDCard(userDO.getCertNo()); if (StringUtils.isNotBlank(certNO) && certNO.equals(user.getCertNo())) { // ?? UserResult ur = userManager.valiCertNo(cuserId, user.getCertNo(), userDO.getReg_type()); if (ur != null && ur.getUserDO() != null) { hasError = Boolean.TRUE; model.put("message", MobileMsgConstants.USER_CERNO_USERED); } } else { hasError = Boolean.TRUE; model.put("message", "???"); } } if (!hasError) { // certno user.setUserId(cuserId); user.setCertType("1"); UserResult r = userManager.modifyUserCertNO(user); if (r.isSystemError()) { hasError = Boolean.TRUE; model.put("message", r.getResponseDesc()); } } if (hasError) { return MobileConstants.M_UPDATE_CERTNO; } } if (userDO.getReg_type() == 3 && userDO.getLoginId().startsWith("alipay_") && userDO.getLoginId().substring(7, userDO.getLoginId().length()).length() == 16) { model.put("html5alipay", true); } userDO.setCertNo(user.getCertNo()); model.put("isPingan", DomainIndexEnum.PINGAN.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("isZFB", DomainIndexEnum.ZFB.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("isM58", DomainIndexEnum.M58.equals(request.getAttribute(GlobalConstants.DOMAIN_ENUM))); model.put("userInfo", userDO); model.put("hasUpdate", UserUtil.isUserProfileImperfection(userDO)); return MobileConstants.M_USERCENTER; } }