com.mysoft.b2b.basicsystem.settings.provider.VerifyCodeServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.mysoft.b2b.basicsystem.settings.provider.VerifyCodeServiceImpl.java

Source

/**
 * Copyright mysoft Limited (c) 2014. All rights reserved.
 * This software is proprietary to and embodies the confidential
 * technology of mysoft Limited. Possession, use, or copying
 * of this software and media is authorized only pursuant to a
 * valid written license from mysoft or an authorized sublicensor.
 */
package com.mysoft.b2b.basicsystem.settings.provider;

import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mysoft.b2b.basicsystem.settings.api.VerifyCode;
import com.mysoft.b2b.basicsystem.settings.api.VerifyCodeService;
import com.mysoft.b2b.basicsystem.settings.mapper.VerifyCodeMapper;
import com.mysoft.b2b.basicsystem.settings.util.VerifyCodeHelper;
import com.mysoft.b2b.bizsupport.api.IdGenerationService;

/**
 * chengp: Change to the actual description of this class
 * @version   Revision History
 * <pre>
 * Author     Version       Date        Changes
 * chengp    1.0           2014813     Created
 *
 * </pre>
 * @since b2b 2.0.0
 */
@Service("verifyCodeService")
public class VerifyCodeServiceImpl implements VerifyCodeService {
    private static final Log log = LogFactory.getLog(VerifyCodeServiceImpl.class);
    @Autowired
    private VerifyCodeMapper verifyCodeMapper;

    @Autowired
    private IdGenerationService idGenerationService;

    @Override
    public VerifyCode insertOrUpdateVerifyCode(VerifyCode verifyCode) {
        if (verifyCode != null) {
            if (StringUtils.isEmpty(verifyCode.getVerifyCodeId())) {
                VerifyCode oldVerifyCode = this.getVerifyCode(verifyCode);
                if (oldVerifyCode == null) {
                    verifyCode
                            .setVerifyCodeId(idGenerationService.getNextId("b2b_parameter.sysp_verify_code") + "");
                    verifyCodeMapper.insertVerifyCode(verifyCode);
                } else {
                    verifyCode.setVerifyCodeId(oldVerifyCode.getVerifyCodeId());
                    verifyCodeMapper.updateVerifyCode(verifyCode);
                }
            } else {
                verifyCodeMapper.updateVerifyCode(verifyCode);
            }
        }
        return verifyCode;
    }

    /** 4???token???????????
     * @param token IP????
     * @param codeType ??1 ???2  ???
     * @param validTime ????
     * @return
     */
    public VerifyCode generateVerifyCode(String token, int codeType, int validTime) {
        if (StringUtils.isEmpty(token)) {
            return null;
        }
        //1,token??DB?
        VerifyCode verifyCode = new VerifyCode();
        Date now = new Date();
        verifyCode.setToken(token);
        VerifyCode olderVerifyCode = getVerifyCode(verifyCode);
        //2,DB?token??,
        if (olderVerifyCode == null) {
            String code = getVerifyCodeStr(codeType, 4);
            verifyCode.setCreatedTime(now);
            verifyCode.setStatus(0);
            verifyCode.setCode(code);
            verifyCode.setLastValidatedTime(DateUtils.addMinutes(now, validTime));
            verifyCode.setVerifyCodeId(idGenerationService.getNextId("b2b_parameter.sysp_verify_code") + "");
            verifyCodeMapper.insertVerifyCode(verifyCode);
            return verifyCode;
        }
        //3,DB???????
        if (olderVerifyCode != null && olderVerifyCode.getLastValidatedTime().before(new Date())) {
            String code = getVerifyCodeStr(codeType, 4);
            olderVerifyCode.setCode(code);
        }
        //4,DB????????????
        olderVerifyCode.setLastValidatedTime(DateUtils.addMinutes(now, validTime));
        verifyCodeMapper.updateVerifyCode(olderVerifyCode);
        return olderVerifyCode;
    }

    /**
    * ??? 
    */
    private void updateSysCode(VerifyCode verifyCode, int status) {
        if (null == verifyCode) {
            return;
        }
        if (1 != status) {
            verifyCode.setErrorTimes(verifyCode.getErrorTimes() + 1);
        }
        verifyCode.setStatus(status);
        insertOrUpdateVerifyCode(verifyCode);
    }

    /**???0  ??  1???2: ?? 3??? 4 5 ??
     * @param token
     * @param code
     * @return
     */
    public Integer checkVerifyCode(String token, String code) {
        if (StringUtils.isEmpty(code)) {
            return 0;
        }
        VerifyCode verifyCode = new VerifyCode();
        verifyCode.setToken(token);
        VerifyCode verifyCode1 = getVerifyCode(verifyCode);
        try {
            if (null != verifyCode1) {
                if (verifyCode1.getLastValidatedTime().before(new Date())) {
                    //??
                    updateSysCode(verifyCode1, 3);
                    return 1;
                }
                if (!verifyCode1.getCode().equalsIgnoreCase(StringUtils.trimToEmpty(code))) {
                    //??
                    updateSysCode(verifyCode1, 2);
                    return 2;
                }
            } else {
                return 3;
            }
        } catch (Exception e) {
            log.error("???" + e);
            return 4;
        }
        updateSysCode(verifyCode1, 1);
        return 5;
    }

    @Override
    public void deleteVerifyCode(String verifyCodeId) {
        verifyCodeMapper.deleteVerifyCode(verifyCodeId);
    }

    @Override
    public VerifyCode getVerifyCode(VerifyCode verifyCode) {
        VerifyCode result = null;
        if (verifyCode != null) {
            List<VerifyCode> list = null;
            if (StringUtils.isNotEmpty(verifyCode.getVerifyCodeId())) {
                list = verifyCodeMapper.getVerifyCode(verifyCode);
            } else if (StringUtils.isNotEmpty(verifyCode.getToken())) {
                list = verifyCodeMapper.getVerifyCode(verifyCode);
                if (list != null && list.size() > 1) {
                    for (int i = 1, j = list.size(); i < j; i++) {
                        this.deleteVerifyCode(list.get(i).getVerifyCodeId());
                    }
                }
            } else {
                //do nothing
            }
            result = (list == null || list.size() == 0) ? null : list.get(0);
        } else {
            //do nothing
        }
        return result;
    }

    @Override
    public String getVerifyCodeStr(int type, int length) {
        if (type == VERIFY_CODE) {
            return VerifyCodeHelper.getInstance().getVerifyCode(length);
        } else {
            return VerifyCodeHelper.getInstance().getVerifyCodeOnlyNum(length);
        }
    }

}