com.greenline.guahao.web.module.home.controllers.mobile.user.MobileUserController.java Source code

Java tutorial

Introduction

Here is the source code for com.greenline.guahao.web.module.home.controllers.mobile.user.MobileUserController.java

Source

/**
 * 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;
    }

}