Browse Source

账户管理-手机验证

liusw 8 years ago
parent
commit
3a88af439f

+ 137 - 3
src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.common.account.controller;
 package com.uas.platform.b2c.common.account.controller;
 
 
 import com.uas.message.mail.service.MailService;
 import com.uas.message.mail.service.MailService;
+import com.uas.message.sms.service.SmsService;
 import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.account.model.UserInfo;
 import com.uas.platform.b2c.common.account.model.UserInfo;
@@ -13,6 +14,7 @@ import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.util.StringUtil;
 import com.uas.platform.core.util.encry.Md5Utils;
 import com.uas.platform.core.util.encry.Md5Utils;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,7 +52,7 @@ public class UserController {
 	private MailService mailService;
 	private MailService mailService;
 
 
 	@Autowired
 	@Autowired
-	private MessageConf messageConf;
+	private SmsService smsService;
 
 
 	private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
 	private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
 
 
@@ -149,7 +151,7 @@ public class UserController {
 	}
 	}
 
 
 	/**
 	/**
-	 * 发送验证码
+	 * 发送邮箱验证码
 	 *
 	 *
 	 * @param newUserEmail 用户输入新邮箱地址
 	 * @param newUserEmail 用户输入新邮箱地址
 	 */
 	 */
@@ -164,7 +166,7 @@ public class UserController {
 			String checkCode = String.valueOf((int)((Math.random()*9+1)*100000));
 			String checkCode = String.valueOf((int)((Math.random()*9+1)*100000));
 			data.put("checkcode", checkCode);
 			data.put("checkcode", checkCode);
 			try {
 			try {
-				//mailService.send("a4c45a22-436a-430c-9667-4edfd7d04a27", newUserEmail, data);
+				mailService.send("a4c45a22-436a-430c-9667-4edfd7d04a27", newUserEmail, data);
 				session.setAttribute("checkCode",checkCode);
 				session.setAttribute("checkCode",checkCode);
 				session.setAttribute("checkTime",new Date().getTime());
 				session.setAttribute("checkTime",new Date().getTime());
 				return new ResponseEntity<>(HttpStatus.OK);
 				return new ResponseEntity<>(HttpStatus.OK);
@@ -244,6 +246,125 @@ public class UserController {
 			throw new IllegalOperatorException("新邮箱地址不能为空");
 			throw new IllegalOperatorException("新邮箱地址不能为空");
 	}
 	}
 
 
+	/**
+	 * 验证原手机号输入是否正确
+	 * @param userTel
+	 * @return
+	 */
+	@RequestMapping(value = "/checkUserTel", method = RequestMethod.GET)
+	public ResponseEntity<String> checkUserTel(String userTel) {
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(userTel)) {
+			boolean result = user.getUserTel().equals(userTel);
+			if (result) {
+				return new ResponseEntity<>(HttpStatus.OK);
+			}
+			assert logger != null;
+			logger.log("用户信息", "验证用户手机,UU:" + user.getUserUU());
+		}
+		return new ResponseEntity<>(HttpStatus.EXPECTATION_FAILED);
+	}
+
+	/**
+	 * 发送手机验证码
+	 *
+	 * @param newUserTel 用户输入新手机号
+	 */
+	@RequestMapping(value = "/sendTelCheckCode", method = RequestMethod.GET)
+	public ResponseEntity<String> sendTelCheckCode(String newUserTel,HttpServletRequest request) {
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(newUserTel)) {
+			HttpSession session = request.getSession();
+			//页面Token校验
+			String pageToken = (String)session.getAttribute("pageToken");
+			if(pageToken == null || pageToken.equals("")){
+				throw new IllegalOperatorException("页面信息获取失败!");
+			}
+			String checkCode = String.valueOf((int)((Math.random()*9+1)*100000));
+			System.out.println(checkCode);
+			try {
+				smsService.send("1eba04ae-f3d9-4105-ad32-0196309fabb3", newUserTel, new Object[] { checkCode });
+				session.setAttribute("telCheckCode",checkCode);
+				session.setAttribute("telCheckTime",new Date().getTime());
+				return new ResponseEntity<>(HttpStatus.OK);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+			assert logger != null;
+			logger.log("用户信息", "发送手机验证码,UU:" + user.getUserUU());
+		}
+		return new ResponseEntity<>(HttpStatus.EXPECTATION_FAILED);
+	}
+
+	/**
+	 * 校验手机验证码
+	 * @param telCheckCode
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value = "/validTelCheckCode", method = RequestMethod.GET)
+	public Map<String,Object> validTelCheckCode(String telCheckCode, HttpServletRequest request) {
+		HttpSession session = request.getSession();
+		Map<String,Object> result = new HashMap<String,Object>();
+		if(!StringUtils.isEmpty(telCheckCode)){
+			Long checkTime = (Long)session.getAttribute("telCheckTime");
+			Long nowTime = new Date().getTime();
+			String _checkCode = (String)session.getAttribute("telCheckCode");
+			//验证码失效
+			if((nowTime-checkTime)>10*60*1000 || _checkCode==null){
+				result.put("status",2);
+				result.put("message","验证码失效");
+				return result;
+			}
+			//验证码错误
+			if(!_checkCode.equals(telCheckCode)) {
+				result.put("status",0);
+				result.put("message","验证码错误");
+				return result;
+			}
+			//验证码正确
+			if(_checkCode.equals(telCheckCode)) {
+				result.put("status",1);
+				result.put("message","验证码正确");
+				return result;
+			}
+		}
+		result.put("status",0);
+		result.put("message","验证码错误");
+		return result;
+	}
+
+	/**
+	 * 修改手机号
+	 * @param session
+	 * @param userTel
+	 * @param newUserTel
+	 * @return
+	 */
+	@RequestMapping(value = "/updateUserTel", method = RequestMethod.POST)
+	public ResponseEntity<String> updateUserTel(HttpSession session, String userTel, String newUserTel) {
+		if (userTel.equals(newUserTel)){
+			throw new IllegalOperatorException("新手机号与旧手机号相同");
+		}
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(newUserTel)) {
+			if(!userService.isTelUseable(newUserTel)){
+				throw new IllegalOperatorException("手机号不可用...");
+			}
+			user.setUserTel(newUserTel);
+			user = userService.save(user);
+			session.setAttribute("user", user);
+			SystemSession.setUser(user);
+			assert logger != null;
+			logger.log("用户信息", "修改用户手机号,UU:" + user.getUserUU());
+			return new ResponseEntity<>(HttpStatus.OK);
+		} else
+			throw new IllegalOperatorException("新手机号不能为空");
+	}
+
 	/**
 	/**
 	 * 根据UU获取该企业所有人员信息
 	 * 根据UU获取该企业所有人员信息
 	 * @param enuu 企业uu号
 	 * @param enuu 企业uu号
@@ -368,4 +489,17 @@ public class UserController {
 					HttpStatus.OK);
 					HttpStatus.OK);
 		}
 		}
 	}
 	}
+
+	/**
+	 * 获取页面token,防止恶意发送手机验证码
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value = "/getPageToken", method = RequestMethod.GET)
+	public ResponseEntity<String> getPageToken(HttpServletRequest request) {
+		String pageToken = StringUtil.uuid();
+		HttpSession session = request.getSession();
+		session.setAttribute("pageToken",pageToken);
+		return new ResponseEntity<String>(HttpStatus.OK);
+	}
 }
 }

+ 20 - 0
src/main/webapp/resources/js/common/query/user.js

@@ -95,6 +95,26 @@ define([ 'angular', 'ui-bootstrap', 'ngResource' ], function(angular) {
             updateUserEmail:{
             updateUserEmail:{
                 url: 'basic/user/updateUserEmail',
                 url: 'basic/user/updateUserEmail',
                 method: 'POST'
                 method: 'POST'
+			},
+			checkUserTel:{
+                url: 'basic/user/checkUserTel',
+                method: 'GET'
+			},
+            telEnable:{
+                url: 'basic/user/telEnable',
+                method: 'GET'
+            },
+            getPageToken:{
+                url: 'basic/user/getPageToken',
+                method: 'GET'
+            },
+            sendTelCheckCode: {
+                url: 'basic/user/sendTelCheckCode',
+                method: 'GET'
+            },
+            validTelCheckCode:{
+                url: 'basic/user/validTelCheckCode',
+                method: 'GET'
 			}
 			}
 		});
 		});
 	}]);
 	}]);

+ 138 - 1
src/main/webapp/resources/js/usercenter/controllers/forstore/account_manager_ctrl.js

@@ -430,6 +430,21 @@ define(['app/app'], function(app) {
             }, function(){
             }, function(){
             });
             });
         };
         };
+
+        $scope.updateUserTel = function(){
+            var modalInstance = $modal.open({
+                animation: true,
+                templateUrl: $rootScope.rootPath + '/static/view/vendor/modal/updateUserTel.html',
+                controller: 'UserTelCtrl',
+                resolve: {
+                    user: function(){return angular.copy($rootScope.userInfo);}
+                }
+            });
+
+            modalInstance.result.then(function(){
+            }, function(){
+            });
+        };
 	}]);
 	}]);
 
 
 	// 修改密码Controller
 	// 修改密码Controller
@@ -482,7 +497,8 @@ define(['app/app'], function(app) {
 		};
 		};
 	}]);
 	}]);
 
 
-    // 修改密码Controller
+
+    // 修改邮箱Controller
     app.register.controller('UserEmailCtrl', ['$scope', '$modalInstance', 'user', 'User', 'toaster','$interval' ,function($scope, $modalInstance, user, User, toaster,$interval){
     app.register.controller('UserEmailCtrl', ['$scope', '$modalInstance', 'user', 'User', 'toaster','$interval' ,function($scope, $modalInstance, user, User, toaster,$interval){
         $scope.user = user;
         $scope.user = user;
         $scope.user.userEmail = null;
         $scope.user.userEmail = null;
@@ -592,4 +608,125 @@ define(['app/app'], function(app) {
             $modalInstance.close();
             $modalInstance.close();
         };
         };
     }]);
     }]);
+
+    //手机验证Controller
+    app.register.controller('UserTelCtrl', ['$scope', '$modalInstance', 'user', 'User', 'toaster','$interval' ,function($scope, $modalInstance, user, User, toaster,$interval){
+        User.getPageToken();
+    	$scope.user  = user;
+    	$scope.user.userTel = null;
+    	//原手机号校验
+        $scope.checking = false;
+        //验证用户输入的旧邮箱地址是否正确
+        $scope.checkUserTel = function(userTel) {
+            $scope.checking = true;
+            $scope.checkSuccess = false;
+            $scope.checkFailed = false;
+            User.checkUserTel({userTel: userTel}, function(){
+                $scope.checkSuccess = true;
+                $scope.checking = false;
+                $scope.checkFailed = false;
+            }, function(){
+                $scope.checkFailed = true;
+                $scope.checking = false;
+                $scope.checkSuccess = false;
+            });
+        };
+
+        //新手机号是否可用
+		$scope.checking1 = false;
+        $scope.sendSuccess = false;
+        $scope.telEnable = function(newUserTel) {
+            $scope.checking1 = true;
+            $scope.checkSuccess1 = false;
+            $scope.checkFailed1 = false;
+            User.telEnable({tel: newUserTel}, function(data){
+                if(data.data == "true"){//手机可用
+                    $scope.checkSuccess1 = true;
+                    $scope.checking1 = false;
+                    $scope.checkFailed1 = false;
+                    $scope.sendSuccess = true;
+                }else{//手机不可用
+                    $scope.checkFailed1 = true;
+                    $scope.checking1 = false;
+                    $scope.checkSuccess1 = false;
+                    $scope.sendSuccess = false;
+                }
+            }, function(){
+                $scope.checkFailed1 = true;
+                $scope.checking1 = false;
+                $scope.checkSuccess1 = false;
+            });
+        };
+
+        //发送验证码
+        $scope.codeSuccess = false;
+        //发送验证码
+        $scope.sendTelCheckCode = function(newUserTel) {
+            User.sendTelCheckCode({newUserTel: newUserTel}, function(){
+                $scope.codeSuccess = true;
+                $interval.cancel(timePromise);
+                var second = 60,
+                    timePromise = $interval(function(){
+                        $scope.sendSuccess = false;
+                        if(second <= 0){
+                            $interval.cancel(timePromise);
+                            second = 60;
+                        }else{
+                            second--;
+                            $scope.paracont = second + "秒后可重发";
+                            if(second == 0){
+                                $scope.paracont = "重发验证码";
+                                $scope.sendSuccess = true;
+                            }
+                        }
+                    },1000,60);
+            }, function(){
+                $scope.codeSuccess = false;
+            });
+        };
+
+        $scope.validSuccess = false;
+        //校验验证码
+        $scope.validTelCheckCode = function(telCheckCode) {
+            User.validTelCheckCode({telCheckCode: telCheckCode}, function(data){
+                var status = data.status;
+                var message = data.message;
+                if(status == 1){
+                    $scope.validSuccess = true;
+                }else{
+                    toaster.pop('error', '错误', message);
+                }
+            });
+        };
+
+        //修改邮箱地址
+        $scope.ok = function () {
+            if($scope.user.newUserTel == $scope.user.userTel){
+                toaster.pop('error', '错误', '新手机号与旧手机号相同');
+                return;
+            }
+            User.updateUserTel({newUserTel:$scope.user.newUserTel,userTel:$scope.userTel.userTel}, {}, function(){
+                toaster.pop('success', '成功', '修改邮箱成功。');
+                $scope.user.userTel = null;
+                $scope.user.newUserTel = null;
+                $scope.checking = false;
+                $scope.checkSuccess = false;
+                $scope.checkFailed = false;
+                $scope.checking1 = false;
+                $scope.checkSuccess1 = false;
+                $scope.checkFailed1 = false;
+                $scope.emailSuccess = false;
+                $scope.codeSuccess = false;
+                $scope.validSuccess = false;
+                $modalInstance.close();
+            }, function(response){
+                toaster.pop('error', '错误', response.data);
+                $modalInstance.close();
+            });
+        };
+
+        $scope.cancel = function () {
+            $modalInstance.close();
+        };
+    }]);
 });
 });

+ 1 - 1
src/main/webapp/resources/view/usercenter/forstore/account_manager.html

@@ -161,7 +161,7 @@
 					<font>绑定手机</font>
 					<font>绑定手机</font>
 					<span class="gray">绑定手机后,您即可享受淘宝丰富的手机服务,如手机找回密码等。</span>
 					<span class="gray">绑定手机后,您即可享受淘宝丰富的手机服务,如手机找回密码等。</span>
 				</span>
 				</span>
-				<!--<a href="javascript:void(0)">修改</a>-->
+				<a ng-click="updateUserTel()">修改</a>
 			</li>
 			</li>
 		</ul>
 		</ul>
 	</div>
 	</div>

+ 52 - 0
src/main/webapp/resources/view/vendor/modal/updateUserTel.html

@@ -0,0 +1,52 @@
+<style>
+    .userTel .modal-body .row {
+        line-height: 34px;
+        font-size: 14px;
+    }
+</style>
+<div class="modal-header">
+    <h3 class="f14 modal-title"><i class="fa fa-lock fa-fw"></i>手机验证</h3>
+</div>
+<form class="userTel" name="sampleSendForm" ng-submit="ok()">
+    <input type="hidden" ng-model="pageToken"/>
+    <div class="modal-body">
+        <div class="row line" ng-class="{'has-success': checkSuccess, 'has-error': checkFailed}">
+            <label class="col-md-4 col-sm-4 col text-right">原手机号:</label>
+            <div class="col-md-4 col-sm-4 col"><input ng-model="user.userTel" class="form-control input-sm"
+                                                      type="userTel" ng-init="user.userTel=18665845725" ng-blur="checkUserTel(user.userTel)" required
+                                                      ></div>
+            <div class="col-md-4 col-sm-4 col">
+                <span ng-show="checking">验证手机号...</span>
+                <i ng-show="checkSuccess" class="fa fa-check" style="color:#339933"></i>
+                <i ng-show="checkFailed" class="fa fa-close" style="color:#CC3333;"></i>
+            </div>
+        </div>
+        <div class="row">
+            <label class="col-md-4 col-sm-4 col text-right">新手机号:</label>
+            <div class="col-md-4 col-sm-4 col">
+                <input ng-model="user.newUserTel"
+                       class="form-control input-sm" ng-init="user.newUserTel=13828830127" type="newUserTel" required ng-blur="telEnable(user.newUserTel)">
+                <!-- <div>密码复杂度</div> -->
+            </div>
+            <div class="col-md-4 col-sm-4 col">
+                <span ng-show="checking1">验证手机号...</span>
+                <i ng-show="checkSuccess1" class="fa fa-check" style="color:#339933"></i>
+                <i ng-show="checkFailed1" class="fa fa-close" style="color:#CC3333;"></i>
+            </div>
+        </div>
+        <div class="row">
+            <label class="col-md-4 col-sm-4 col text-right">验证码:</label>
+            <div class="col-md-4 col-sm-4 col">
+                <input ng-model="telCheckCode"
+                       class="form-control input-sm" ng-disabled="!codeSuccess" type="telCheckCode" ng-blur="validTelCheckCode(telCheckCode)" required>
+            </div>
+            <div class="col-md-4 col-sm-4 col">
+                <input ng-click="sendTelCheckCode(user.newUserTel)" ng-disabled="!sendSuccess" ng-init="paracont='获取验证码'" class="btn btn-primary" ng-model="paracont"/>
+            </div>
+        </div>
+    </div>
+    <div class="modal-footer">
+        <button class="btn btn-primary" ng-disabled="!validSuccess" type="submit">确认修改</button>
+        <button class="btn btn-default" ng-click="cancel()" type="button">取消</button>
+    </div>
+</form>