com.greenline.guahao.web.module.home.controllers.vip.taikang.TaiKangController.java Source code

Java tutorial

Introduction

Here is the source code for com.greenline.guahao.web.module.home.controllers.vip.taikang.TaiKangController.java

Source

/*
 * Project: min-portal-web-home
 * 
 * File Created at 2014-5-13
 * 
 * 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.vip.taikang;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.greenline.common.util.DESUtil;
import com.greenline.common.util.MD5Util;
import com.greenline.guahao.biz.common.BizConstants;
import com.greenline.guahao.biz.enums.CertTypEnum;
import com.greenline.guahao.biz.manager.externalfastlogin.ExternalFastLoginManager;
import com.greenline.guahao.biz.manager.externalfastlogin.dataobject.UserFastLoginDO;
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.LoginResult;
import com.greenline.guahao.web.module.common.annotation.MethodRemark;
import com.greenline.guahao.web.module.common.constants.GlobalConstants;
import com.greenline.guahao.web.module.common.utils.CommonUtils;
import com.greenline.guahao.web.module.common.utils.IpUtil;
import com.greenline.guahao.web.module.common.utils.UserUtil;
import com.greenline.guahao.web.module.home.controllers.InitHomeContentProcess;
import com.greenline.guahao.web.module.home.controllers.pub.orderremind.OrderRemindProcessor;

/**
 * @Type TaiKangController
 * @Desc ?
 * @author alex
 * @date 2014-5-13
 * @Version V1.0
 */
@Controller
@RequestMapping("/vip/taikang")
public class TaiKangController {

    private static final Log logger = LogFactory.getLog(TaiKangController.class);

    /**
     * ?id
     */
    private static final String PARTNER_ID_TAIKANG = "taikang999000000";

    /**
     * DES
     */
    private static final String URL_ENCODE_KEY = "123$%^789@guahaocom";

    /**
     * ??key
     */
    private static final String SIGN_DES_KEY = "12SqqsRfflliiiaooii9999@#";

    /**
     * ?PC
     */
    private static final String LOGIN_TYPE_PC = "pc";

    @Resource
    private InitHomeContentProcess initHomeContentProcess;
    @Resource
    private HttpServletRequest request;
    @Resource
    private ExternalFastLoginManager externalFastLoginManager;
    @Resource
    private UserManager userManager;
    @Resource
    private OrderRemindProcessor orderRemindProcessor;

    public String loginTest(ModelMap model,
            @RequestParam(value = "extUserId", required = false, defaultValue = "88888887") String extUserId,
            @RequestParam(value = "name", required = false, defaultValue = "?") String name,
            @RequestParam(value = "idcard", required = false, defaultValue = "211422196406103817") String idcard,
            @RequestParam(value = "email", required = false, defaultValue = "") String email,
            @RequestParam(value = "mobile", required = false, defaultValue = "") String mobile,
            @RequestParam(value = "sex", required = false, defaultValue = "") String sex) {
        String info = "id=" + extUserId + ",name=" + name + ",idcard=" + idcard + ",email=" + email + ",mobile="
                + mobile + ",sex=" + sex;
        String encodeInfo = DESUtil.DESEncode(info, URL_ENCODE_KEY);
        String timestamp = new SimpleDateFormat("yyMMddHHmmss").format(new Date());
        String sign = MD5Util.getMD5Format(info + timestamp + MD5Util.getMD5Format(SIGN_DES_KEY));
        model.put("uri", "/vip/taikang/login");
        model.put("partnerid", PARTNER_ID_TAIKANG);
        model.put("type", LOGIN_TYPE_PC);
        model.put("info", encodeInfo);
        model.put("sign", sign);
        model.put("timestamp", timestamp);
        return "vip/test_taikang_login";
    }

    /**
     * ?,partnerid=taikang999000000,info=DES(id=1132132,name=??,idcard=
     * 330303198301253193
     * ,email=gg@gmail.com,mobile=13456758654,sex=1),timestamp
     * =yyMMddHHmmsss,type=pc,sign=MD5(info+
     * timestamp+MD5(descKey))descKey=12SqqsRfflliiiaooii9999@#
     * 
     * @param model
     * @return String
     */
    @RequestMapping(value = "/login")
    @MethodRemark(value = "remark=??")
    public String fastLogin(ModelMap model, HttpServletResponse response) {
        String partnerid = request.getParameter("partnerid");
        String type = request.getParameter("type");
        String info = request.getParameter("info");
        String sign = request.getParameter("sign");
        String timestamp = request.getParameter("timestamp");
        if (!PARTNER_ID_TAIKANG.equals(partnerid) || !LOGIN_TYPE_PC.equals(type)) {
            // ?
            logger.error("??partneridtype.url=" + getPostUrl());
            return CommonUtils.goErrorPage(model, "");
        }

        // ?
        if (StringUtils.isBlank(info)) {
            // ?
            logger.error("??.url=" + getPostUrl());
            return CommonUtils.goErrorPage(model, "");
        }

        // info
        String userInfo = DESUtil.DESDecode(info, URL_ENCODE_KEY);
        // ??
        String mySign = MD5Util.getMD5Format(userInfo + timestamp + MD5Util.getMD5Format(SIGN_DES_KEY));
        if (!mySign.equals(sign)) {
            // ??
            logger.error("???.url=" + getPostUrl());
            return CommonUtils.goErrorPage(model, "");
        }

        // ??
        String[] users = userInfo.split(",");
        if (null == users || users.length != 6) {
            // ??6??
            logger.error("??.url=" + getPostUrl());
            return CommonUtils.goErrorPage(model, "");
        } else {
            // idname
            if (null == users[0].split("=") || users[0].split("=").length != 2
                    || StringUtils.isBlank(users[0].split("=")[1])) {
                // id
                logger.error("??id.url=" + getPostUrl());
                return CommonUtils.goErrorPage(model, "");
            }
            if (null == users[1].split("=") || users[1].split("=").length != 2
                    || StringUtils.isBlank(users[1].split("=")[1])) {
                // name
                logger.error("??name.url=" + getPostUrl());
                return CommonUtils.goErrorPage(model, "");
            }
            String[] idcard = users[2].split("=");
            if (null == idcard || idcard.length != 2 || StringUtils.isBlank(idcard[1])) {
                // ?
                logger.error("??idcard.url=" + getPostUrl());
                return CommonUtils.goErrorPage(model, "");
            }
        }

        try {
            // 6,id????
            UserFastLoginDO userFastLoginDO = this.setLoginDO(users);
            // ?
            boolean flag = canFastLogin(userFastLoginDO);
            if (!flag) {
                // 
                logger.info(".url=" + getPostUrl());
                return CommonUtils.goErrorPage(model, "");
            } else { // ?
                orderRemindProcessor.pushCustomerIdToCookieAfterLogin(); // ??
                return GlobalConstants.REDIRECT_PER + "/vip";
            }
        } catch (Exception e) {
            logger.error(".url=" + getPostUrl(), e);
            return CommonUtils.goErrorPage(model, "");
        }
    }

    /**
     * ??
     * 
     * @return String
     */
    private String getPostUrl() {
        String partnerid = request.getParameter("partnerid");
        String type = request.getParameter("type");
        String info = request.getParameter("info");
        String sign = request.getParameter("sign");
        String timestamp = request.getParameter("timestamp");
        String url = CommonUtils.getServerNameAndPort(request);
        return url + "?partnerid=" + partnerid + "&type=" + type + "&info=" + info + "&sign=" + sign + "&timestamp="
                + timestamp;
    }

    /**
     * 
     * 
     * @param users
     * @return UserFastLoginDO
     */
    private UserFastLoginDO setLoginDO(String[] users) {
        UserFastLoginDO userFastLoginDO = new UserFastLoginDO();
        String id = users[0].split("=")[1];
        String name = users[1].split("=")[1];
        if (id.length() > 64) {
            userFastLoginDO.setUserId(id.substring(0, 64));
        } else {
            userFastLoginDO.setUserId(id);
        }
        if (name.length() > 50) {
            userFastLoginDO.setRealName(name.substring(0, 50));
        } else {
            userFastLoginDO.setRealName(name);
        }

        if (null != users[2].split("=") && users[2].split("=").length == 2) {
            // ?
            String idcard = users[2].split("=")[1];
            userFastLoginDO.setCertType(CertTypEnum.IDCARD.getValue());
            userFastLoginDO.setCertNo(idcard);
        }
        if (null != users[3].split("=") && users[3].split("=").length == 2) {
            // 
            String email = users[3].split("=")[1];
            userFastLoginDO.setEmail(email);
        }
        if (null != users[4].split("=") && users[4].split("=").length == 2) {
            // 
            String mobile = users[4].split("=")[1];
            userFastLoginDO.setMobile(mobile);
        }
        if (null != users[5].split("=") && users[5].split("=").length == 2) {
            // 
            String sex = users[5].split("=")[1];
            if (StringUtils.isNumeric(sex)) {
                userFastLoginDO.setSex(Integer.valueOf(sex));
            }
        }

        return userFastLoginDO;
    }

    /**
     * 
     * 
     * @param userId
     * @param source
     * @return boolean
     */
    private boolean canFastLogin(UserFastLoginDO userFastLoginDO) {
        LoginResult r = fastLogin(userFastLoginDO);
        if (r.isLoginSuccess()) {
            UserDO userDO = r.getUserDO();
            userDO.setPartnerId(PARTNER_ID_TAIKANG);
            // ??
            UserUtil.writeUserCookie(request, userDO, -1);
            logger.info("?");
            return Boolean.TRUE;
        } else {
            logger.error("?:" + r.getErrorMsg());
            return Boolean.FALSE;
        }
    }

    /**
     * ?
     * 
     * @param userFastLoginDO
     * @return LoginResult
     */
    private LoginResult fastLogin(UserFastLoginDO userFastLoginDO) {
        userFastLoginDO.setAppId(BizConstants.VIP_TAIKANG_NAME);
        userFastLoginDO.setLoginId(userFastLoginDO.getAppId() + "_" + userFastLoginDO.getUserId());
        // ?????
        userFastLoginDO.setPwd(userFastLoginDO.getUserId() + CommonUtils.createRandomPassword());
        userFastLoginDO.setIp(IpUtil.getIpAddr(request));
        userFastLoginDO.setLocation("");
        userFastLoginDO.setSource(BizConstants.VIP_TAIKANG_SOURCE_ID);
        return externalFastLoginManager.externalFastLogin(userFastLoginDO);
    }
}