package com.sp2p.action.front;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.hehenian.biz.common.account.dataobject.AccountUserDo;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.sp2p.constants.IConstants;
import com.sp2p.service.BBSRegisterService;
import com.sp2p.service.BeVipService;
import com.sp2p.service.CellPhoneService;
import com.sp2p.service.HomeInfoSettingService;
import com.sp2p.service.RecommendUserService;
import com.sp2p.service.UserService;
import com.sp2p.service.admin.AdminService;
import com.sp2p.service.admin.RelationService;
import com.shove.Convert;
import com.shove.data.DataException;
import com.shove.security.Encrypt;
import com.shove.util.SqlInfusion;
import com.shove.web.util.JSONUtils;
/**
* 跳转到手机注册页面
* @author Administrator
*
*/
@SuppressWarnings("serial")
public class CellPhoneAction extends BaseFrontAction{
public static Log log = LogFactory.getLog(BaseFrontAction.class);
private UserService userService;
private RelationService relationService;
private HomeInfoSettingService homeInfoSettingService;
private RecommendUserService recommendUserService;
private CellPhoneService cellPhoneService;
private BeVipService beVipService;
private BBSRegisterService bbsRegisterService;
private AdminService adminService;
public void setBeVipService(BeVipService beVipService) {
this.beVipService = beVipService;
}
public void setCellPhoneService(CellPhoneService cellPhoneService) {
this.cellPhoneService = cellPhoneService;
}
public void setRecommendUserService(RecommendUserService recommendUserService) {
this.recommendUserService = recommendUserService;
}
public void setHomeInfoSettingService(
HomeInfoSettingService homeInfoSettingService) {
this.homeInfoSettingService = homeInfoSettingService;
}
public void setRelationService(RelationService relationService) {
this.relationService = relationService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public String cellPhoneinit(){
session().setAttribute("DEMO", IConstants.ISDEMO);
return SUCCESS;
}
public String cellPhonereginit(){
String cellphone = SqlInfusion.FilteSqlInfusion(request().getParameter("cp"));
request().setAttribute("cellphone", cellphone);
return SUCCESS;
}
public String cellPhoneregsinit() throws IOException{
String cellphone = SqlInfusion.FilteSqlInfusion(paramMap.get("cellphone"));
String pageId = SqlInfusion.FilteSqlInfusion(paramMap.get("pageId")); // 验证码
String code = (String) session().getAttribute(pageId + "_checkCode");
String _code = SqlInfusion.FilteSqlInfusion(paramMap.get("code").toString().trim());
if (code == null || !_code.equals(code)) {
JSONUtils.printStr("2");//2为验证码错误
return null;
}
if(StringUtils.isBlank(cellphone)){
JSONUtils.printStr("3");//3为手机验证码为空
return null;
}
try {
Map<String,String> phonemap = beVipService.queryIsPhoneonUser(cellphone);
Map<String,String> cellMap = cellPhoneService.queryCellPhone(cellphone);
if(phonemap!= null || cellMap !=null){ //判断手机号码是都否存在
JSONUtils.printStr("5");//5为 手机号码已存在
return null;
}
} catch (SQLException e) {
log.error(e);
e.printStackTrace();
JSONUtils.printStr("2");//
return null;
} catch (DataException e) {
log.error(e);
e.printStackTrace();
JSONUtils.printStr("2");//
return null;
}
request().setAttribute("cellphone", cellphone);
JSONUtils.printStr("1");//1通过校验
return null;
}
/***
* 手机注册
* @return
* @throws Exception
*/
public String cellreginfo() throws Exception{
JSONObject obj = new JSONObject();
//判断手机验证码是否正确 start
/**
* 判定用户是否已存在记录
*/
//验证手机的唯一性
String cellphone = SqlInfusion.FilteSqlInfusion(paramMap.get("cellphone"));
Map<String,String> phonemap = null;
Map<String,String> cellMap = null;
try{
phonemap = beVipService.queryIsPhoneonUser(cellphone);
cellMap = cellPhoneService.queryCellPhone(cellphone);
if(phonemap!=null &&cellMap!=null ){
obj.put("mailAddress", "手机已存在");
JSONUtils.printObject(obj);
return null;
}
if(phonemap==null){
String phonecode=null;
try {
Object obje=session().getAttribute("phone");
if(obje!=null){
phonecode=obje.toString();
}else{
if ("2".equals(IConstants.ISDEMO)) {
obj.put("mailAddress", "请输入正确的验证码");
JSONUtils.printObject(obj);
return null;
}
}
} catch (Exception e) {
e.printStackTrace();
}
if(phonecode!=null){
if(!phonecode.trim().equals(cellphone.trim())){
obj.put("mailAddress", "与获取验证码手机号不一致");
JSONUtils.printObject(obj);
return null;
}
}
if (!"1".equals(IConstants.ISDEMO)) {
//验证码
String vilidataNum = SqlInfusion.FilteSqlInfusion(paramMap.get("cellcode"));
if(StringUtils.isBlank(vilidataNum)){
obj.put("mailAddress","请填写验证码");
JSONUtils.printObject(obj);
return null;
}
String randomCode=null;
Object objec=session().getAttribute("randomCode");
if(objec!=null){
randomCode=objec.toString();
}else{
obj.put("mailAddress","请输入正确的验证码");
JSONUtils.printObject(obj);
return null;
}
if(randomCode!=null){
if(!randomCode.trim().equals(vilidataNum.trim())){
obj.put("mailAddress","请输入正确的验证码");
JSONUtils.printObject(obj);
return null;
}
}
}
}
String userName = SqlInfusion.FilteSqlInfusion(paramMap.get("userName")); // 用户名
if(userName.length()<2||userName.length()>20){
obj.put("mailAddress", "18");
JSONUtils.printObject(obj);
return null;
}
if(StringUtils.isBlank(userName)){
obj.put("mailAddress", "13");
JSONUtils.printObject(obj);
return null;
}
//验证用户名木含有特殊字符串处理第一个字符不可以是下划线开始 ^[^@\/\'\\\"#$%&\^\*]+$
if (userName.replaceAll("^[\u4E00-\u9FA5A-Za-z0-9_]+$", "").length()!=0) {
obj.put("mailAddress", "20");
JSONUtils.printObject(obj);
return null;
}
//判断第一个字符串不能使以下划线开头的
String fristChar = userName.substring(0,1);
if(fristChar.equals("_")){
obj.put("mailAddress", "21");
JSONUtils.printObject(obj);
return null;
}
String password = SqlInfusion.FilteSqlInfusion(paramMap.get("password")); // 用户密码
String md5Password =password;
if(StringUtils.isBlank(password)){
obj.put("mailAddress", "14");
JSONUtils.printObject(obj);
return null;
}
String confirmPassword = SqlInfusion.FilteSqlInfusion(paramMap.get("confirmPassword")); // 用户密码
if(StringUtils.isBlank(confirmPassword)){
obj.put("mailAddress", "15");
JSONUtils.printObject(obj);
return null;
}
String refferee = SqlInfusion.FilteSqlInfusion(paramMap.get("refferee"));
@SuppressWarnings("unused")
String param = SqlInfusion.FilteSqlInfusion(paramMap.get("param")); //邀请好友链接携带的参数
Map<String,Object> map = null;
long recommendUserId = -1;
if(StringUtils.isNotBlank(refferee)){
Map<String,String> userIdMap = userService.queryIdByUser(refferee);//根据用户查询用户明细
if(userIdMap != null){
recommendUserId = Convert.strToLong(userIdMap.get("id"), -1);
}
map = relationService.isPromoter(refferee);
if(map==null){
refferee = null;
}
if(userIdMap==null&&map==null){
obj.put("mailAddress", "5");
JSONUtils.printObject(obj);
return null;
}
}
// 判断密码是否一致
if (!password.equals(confirmPassword)) {
obj.put("mailAddress", "1");
JSONUtils.printObject(obj);
return null;
}
Long userId = -1L;
Long result = userService.isExistEmailORUserName(null, userName);
boolean isExist = adminService.isExistUserName(userName);
if (result > 0 || isExist) { // 用户名重复
obj.put("mailAddress", "2");
JSONUtils.printObject(obj);
return null;
}
int typelen = -1;
Map<String,String> lenMap = null;
lenMap = userService.querymaterialsauthtypeCount(); //查询证件类型主表有多少种类型
if(lenMap!=null&&lenMap.size()>0){
typelen = Convert.strToInt(lenMap.get("cccc"), -1);
// 调用service
if(typelen!=-1){
//判断是否使用了加密字符串
if ("1".equals(IConstants.ENABLED_PASS)){
md5Password = com.shove.security.Encrypt.MD5(md5Password.trim());
}else{
md5Password = com.shove.security.Encrypt.MD5(md5Password.trim()+IConstants.PASS_KEY);
}
userId = cellPhoneService.usercellRegister(cellphone, userName, md5Password,
refferee,map,typelen);//注册用户 和 初始化图片资料
}
}
if (userId < 0) { // 注册失败
obj.put("mailAddress", "4");
JSONUtils.printObject(obj);
return null;
} else {
//添加通知默认方法
homeInfoSettingService.addNotes(userId, true, false, false);
homeInfoSettingService.addNotesSetting(userId, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false);
//====
obj.put("mailAddress", "注册成功");//注册成功
JSONUtils.printObject(obj);
}
//修改之前的推荐
try {
if(recommendUserId>0){//判断是否为空
List<Map<String,Object>> list = recommendUserService.queryRecommendUser(null, userId, null);//查询用户是否已经存在关系了。
if(list!=null&&list.size()>0){//判断之前是否已经有关系了。
return null;
}
recommendUserService.addRecommendUser(userId, recommendUserId);
}
} catch (Exception e) {
log.error(e);
e.printStackTrace();
}
AccountUserDo user = new AccountUserDo();
user.setUsername(userName);
user.setPassword(password);
user.setEmail("default@163.com");
bbsRegisterService.doRegisterByAsynchronousMode(user);
}catch (Exception e) {
obj.put("mailAddress", "16");
JSONUtils.printObject(obj);
e.printStackTrace();
throw e;
}
return null;
}
public String cellphoneforgetinit(){
String cellphone = SqlInfusion.FilteSqlInfusion(request().getParameter("cp"));
request().setAttribute("cellphone",cellphone );
String key = Encrypt.encryptSES(cellphone+"-"+new Date().getTime()+"",IConstants.BBS_SES_KEY);
String sign = Encrypt.MD5(key+IConstants.BBS_SES_KEY).substring(0,10)+key;
request().setAttribute("sign",sign);
return SUCCESS;
}
/**
* 通过手机更改用户登录密码
* @return
* @throws IOException
*/
public String cellphoneforgetinfo() throws IOException{
JSONObject obj = new JSONObject();
String sign = SqlInfusion.FilteSqlInfusion(paramMap.get("cellphone"));
String mdKey = sign.substring(0,10);
String mdValue = sign.substring(10,sign.length());
String mdCompare = Encrypt.MD5(mdValue+IConstants.BBS_SES_KEY).substring(0,10);
String valAll = Encrypt.decryptSES(mdValue, IConstants.BBS_SES_KEY);
if(!mdKey.equals(mdCompare)){
JSONUtils.printStr("签名错误");
return null;
}
String[] keys = valAll.split("-");
String cellphone = keys[0].toString();
String dateTime = keys[1].toString();
long curTime = new Date().getTime();
// 当用户点击注册时间大于于1分钟
if (curTime - Long.valueOf(dateTime) >= 60 * 1000) {
obj.put("mailAddress", "已超时");
JSONUtils.printObject(obj);
return null;
}
String phonecode=null;
try {
Object obje=session().getAttribute("phone");
if(obje!=null){
phonecode=obje.toString();
}else{
obj.put("mailAddress", "请输入正确的验证码");
JSONUtils.printObject(obj);
return null;
}
} catch (Exception e) {
e.printStackTrace();
}
if(phonecode!=null){
if(!phonecode.trim().equals(cellphone.trim())){
obj.put("mailAddress", "与获取验证码手机号不一致");
JSONUtils.printObject(obj);
return null;
}
}
//验证码
String vilidataNum = SqlInfusion.FilteSqlInfusion(paramMap.get("cellcode"));
if(StringUtils.isBlank(vilidataNum)){
obj.put("mailAddress","请填写验证码");
JSONUtils.printObject(obj);
return null;
}
String randomCode=null;
Object objec=session().getAttribute("randomCode");
if(objec!=null){
randomCode=objec.toString();
}else{
obj.put("mailAddress","请输入正确的验证码");
JSONUtils.printObject(obj);
return null;
}
if(randomCode!=null){
if(!randomCode.trim().equals(vilidataNum.trim())){
obj.put("mailAddress","请输入正确的验证码");
JSONUtils.printObject(obj);
return null;
}
}
String password = SqlInfusion.FilteSqlInfusion(paramMap.get("password")); // 用户密码
if(StringUtils.isBlank(password)){
obj.put("mailAddress", "1");
JSONUtils.printObject(obj);
return null;
}
//控制长度
if(password.length()<6||password.length()>20){
obj.put("mailAddress", "2");
JSONUtils.printObject(obj);
return null;
}
String confirmPassword = SqlInfusion.FilteSqlInfusion(paramMap.get("confirmPassword")); // 用户密码
if(StringUtils.isBlank(confirmPassword)){
obj.put("mailAddress", "3");
JSONUtils.printObject(obj);
return null;
}
//检查用户是否存在通过手机号码]
Map<String,String> phonemap = null;
try {
phonemap = beVipService.queryIsPhoneonUser(cellphone);
} catch (SQLException e1) {
e1.printStackTrace();
} catch (DataException e1) {
e1.printStackTrace();
}
if(phonemap==null){
obj.put("mailAddress", "6");
JSONUtils.printObject(obj);
return null;
}
Long resutl = -1L;
try {
resutl = cellPhoneService.updatepasswordBycellphone(cellphone, password);
if(resutl<=0){
obj.put("mailAddress", "4");
JSONUtils.printObject(obj);
return null;
}else{
obj.put("mailAddress", "5");
JSONUtils.printObject(obj);
AccountUserDo user = this.getUser();
bbsRegisterService.doUpdatePwdByAsynchronousMode(user.getUsername(),password, password,2);
return null;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public void setBbsRegisterService(BBSRegisterService bbsRegisterService) {
this.bbsRegisterService = bbsRegisterService;
}
public void setAdminService(AdminService adminService) {
this.adminService = adminService;
}
}