Browse Source

完成账户管理-修改邮箱

liusw 8 years ago
parent
commit
7032692c4c

+ 88 - 49
src/main/java/com/uas/platform/b2c/common/account/controller/UserController.java

@@ -1,9 +1,11 @@
 package com.uas.platform.b2c.common.account.controller;
 
+import com.uas.message.mail.service.MailService;
 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.UserInfo;
 import com.uas.platform.b2c.common.account.service.UserService;
+import com.uas.platform.b2c.core.config.MessageConf;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
 import com.uas.platform.b2c.trade.inquiry.model.TradeCharge;
@@ -19,6 +21,7 @@ import org.springframework.data.jpa.domain.Specification;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -28,9 +31,7 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
-import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
+import java.util.*;
 
 /**
  * 用户信息的请求
@@ -45,6 +46,12 @@ public class UserController {
 	@Autowired
 	private UserService userService;
 
+	@Autowired
+	private MailService mailService;
+
+	@Autowired
+	private MessageConf messageConf;
+
 	private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
 
 	/**
@@ -131,7 +138,6 @@ public class UserController {
 		User sysUser = SystemSession.getUser();
 		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
 		if (!StringUtils.isEmpty(userEmail)) {
-
 			boolean result = user.getUserEmail().equals(userEmail);
 			if (result) {
 				return new ResponseEntity<>(HttpStatus.OK);
@@ -148,30 +154,22 @@ public class UserController {
 	 * @param newUserEmail 用户输入新邮箱地址
 	 */
 	@RequestMapping(value = "/sendCheckCode", method = RequestMethod.GET)
-	public ResponseEntity<String> sendCheckCode(String newUserEmail,final HttpServletRequest request) {
+	public ResponseEntity<String> sendCheckCode(String newUserEmail,HttpServletRequest request) {
 		User sysUser = SystemSession.getUser();
 		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
 		if (!StringUtils.isEmpty(newUserEmail)) {
-			//检查是否已经发送
-			final HttpSession session = request.getSession();
-			if(session.getAttribute(String.valueOf(user.getUserUU()))!=null){
-				return new ResponseEntity<>(HttpStatus.EXPECTATION_FAILED);
-			}
+			HttpSession session = request.getSession();
 			//发送邮件
-			String result = userService.sendCheckCode(newUserEmail);
-			System.out.println(result);
-			if (result!=null && !result.equals("")){
-				/*
-				final Timer timer=new Timer();
-				timer.schedule(new TimerTask() {
-					@Override
-					public void run() {
-						session.removeAttribute(String.valueOf(user.getUserUU()));
-						timer.cancel();
-					}
-				},10*60*1000);
-				*/
+			ModelMap data = new ModelMap();
+			String checkCode = String.valueOf((int)((Math.random()*9+1)*100000));
+			data.put("checkcode", checkCode);
+			try {
+				//mailService.send("a4c45a22-436a-430c-9667-4edfd7d04a27", newUserEmail, data);
+				session.setAttribute("checkCode",checkCode);
+				session.setAttribute("checkTime",new Date().getTime());
 				return new ResponseEntity<>(HttpStatus.OK);
+			} catch (Exception e) {
+				e.printStackTrace();
 			}
 			assert logger != null;
 			logger.log("用户信息", "验证用户邮箱地址,UU:" + user.getUserUU());
@@ -179,6 +177,73 @@ public class UserController {
 		return new ResponseEntity<>(HttpStatus.EXPECTATION_FAILED);
 	}
 
+	/**
+	 * 校验验证码是否正确
+	 * @param checkCode 用户输入验证码
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value = "/validCheckCode", method = RequestMethod.GET)
+	public Map<String,Object> validCheckCode(String checkCode, HttpServletRequest request) {
+		HttpSession session = request.getSession();
+		Map<String,Object> result = new HashMap<String,Object>();
+		if(checkCode!=null){
+			Long checkTime = (Long)session.getAttribute("checkTime");
+			Long nowTime = new Date().getTime();
+			String _checkCode = (String)session.getAttribute("checkCode");
+			//验证码失效
+			if((nowTime-checkTime)>10*60*1000 || _checkCode==null){
+				result.put("status",2);
+				result.put("message","验证码失效");
+				return result;
+			}
+			//验证码错误
+			if(!_checkCode.equals(checkCode)) {
+				result.put("status",0);
+				result.put("message","验证码错误");
+				return result;
+			}
+			//验证码正确
+			if(_checkCode.equals(checkCode)) {
+				result.put("status",1);
+				result.put("message","验证码正确");
+				return result;
+			}
+		}
+		result.put("status",0);
+		result.put("message","验证码错误");
+		return result;
+	}
+
+	/**
+	 * 修改用户邮箱
+	 * @param session
+	 * @param userEmail
+	 * @param newUserEmail
+	 * @return
+	 */
+	@RequestMapping(value = "/updateUserEmail", method = RequestMethod.POST)
+	public ResponseEntity<String> updateUserEmail(HttpSession session, String userEmail, String newUserEmail) {
+		if (userEmail.equals(newUserEmail)){
+			throw new IllegalOperatorException("新邮箱地址与旧邮箱地址相同");
+		}
+		User sysUser = SystemSession.getUser();
+		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
+		if (!StringUtils.isEmpty(newUserEmail)) {
+			if(!userService.isEmailUseable(newUserEmail)){
+				throw new IllegalOperatorException("邮箱已被注册...");
+			}
+			user.setUserEmail(newUserEmail);
+			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获取该企业所有人员信息
 	 * @param enuu 企业uu号
@@ -216,32 +281,6 @@ public class UserController {
 		return new ResponseEntity<String>(HttpStatus.OK);
 	}
 
-	/**
-	 * 修改用户邮箱
-	 * @param session
-	 * @param userEmail
-	 * @param newUserEmail
-	 * @return
-	 */
-	@RequestMapping(value = "/updateUserEmail", method = RequestMethod.POST)
-	public ResponseEntity<String> updateUserEmail(HttpSession session, String userEmail, String newUserEmail) {
-		if (userEmail.equals(newUserEmail)){
-			throw new IllegalOperatorException("新邮箱地址与旧邮箱地址相同");
-		}
-		User sysUser = SystemSession.getUser();
-		User user = userService.findUserPwdByUserUU(sysUser.getUserUU());
-		Enterprise enterprise = user.getEnterprise();
-		if (!StringUtils.isEmpty(newUserEmail)) {
-			user = userService.updatePassword(user, userEmail, newUserEmail);
-			user.setEnterprise(enterprise);
-			session.setAttribute("user", user);
-			SystemSession.setUser(user);
-			assert logger != null;
-			logger.log("用户信息", "修改用户邮箱地址,UU:" + user.getUserUU());
-			return new ResponseEntity<>(HttpStatus.OK);
-		} else
-			throw new IllegalOperatorException("新邮箱地址不能为空");
-	}
 	/**
 	 * 删除用户
 	 *

+ 0 - 16
src/main/java/com/uas/platform/b2c/common/account/service/UserService.java

@@ -103,20 +103,4 @@ public interface UserService {
 	public void removeUser(Long uu);
 	public boolean isEmailUseable(String email);
 	public boolean isTelUseable(String tel);
-
-	/**
-	 * 发送验证码
-	 * @param newEmail 用户输入的新验证码
-	 * @return
-	 */
-	public String sendCheckCode(String newEmail);
-
-	/**
-	 * 修改用户邮箱地址
-	 * @param user 用户
-	 * @param userEmail 用户旧邮箱地址
-	 * @param newUserEmail 用户新邮箱地址
-	 * @return
-	 */
-	User updateUserEmail(User user, String userEmail, String newUserEmail);
 }

+ 3 - 38
src/main/java/com/uas/platform/b2c/common/account/service/impl/UserServiceImpl.java

@@ -17,6 +17,7 @@ import com.uas.platform.core.exception.SystemException;
 import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Status;
+import com.uas.platform.core.model.Token;
 import com.uas.platform.core.util.AgentUtils;
 import com.uas.platform.core.util.encry.Md5Utils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,7 +25,9 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -372,42 +375,4 @@ public class UserServiceImpl implements UserService {
 			throw new IllegalArgumentException();
 		}
 	}
-
-	@Override
-	public String sendCheckCode(String newEmail) {
-		Map<String, Object> model = new HashMap<String, Object>();
-		model.put("userName", SystemSession.getUser().getUserName());
-		model.put("adminName", SystemSession.getUser().getUserName());
-		SimpleDateFormat timeFormat = new SimpleDateFormat("MM月dd日 HH:mm:ss");
-		model.put("dateTime", timeFormat.format(new Date()));
-		model.put("userTel", SystemSession.getUser().getUserTel());
-		String checkCode = String.valueOf((int)((Math.random()*9+1)*100000));
-		if(newEmail!=null && !newEmail.equals("")){
-			mailService.send("您的验证码是"+checkCode,newEmail,model);
-			return checkCode;
-		}
-		return null;
-	}
-
-	@Override
-	public User updateUserEmail(User user, String userEmail, String newUserEmail) {
-		boolean result = user.getUserEmail().equals(userEmail);
-		if (result) {
-			User user1 = userDao.findOne(user.getUserUU());
-			user1.setUserPwd(newUserEmail);
-			if (user1.getEnterprise() == null)
-				user1.setCurrentEnterprise();// 随便绑定一个用户所属企业
-			Enterprise enterprise = user1.getEnterprise();
-			try {
-				//判断是否为个人账户
-				//user1 = userDao.save(user1);
-				//修改用户信息
-			} catch (Exception e) {
-				throw new SystemException(e.getMessage());
-			}
-			return user1;
-		} else {
-			throw new IllegalOperatorException("原邮箱地址错误");
-		}
-	}
 }

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

@@ -87,6 +87,14 @@ define([ 'angular', 'ui-bootstrap', 'ngResource' ], function(angular) {
             emailEnable:{
                 url: 'basic/user/emailEnable',
                 method: 'GET'
+			},
+            validCheckCode:{
+                url: 'basic/user/validCheckCode',
+                method: 'GET'
+            },
+            updateUserEmail:{
+                url: 'basic/user/updateUserEmail',
+                method: 'POST'
 			}
 		});
 	}]);

+ 70 - 45
src/main/webapp/resources/js/usercenter/controllers/forstore/account_manager_ctrl.js

@@ -483,26 +483,12 @@ define(['app/app'], function(app) {
 	}]);
 
     // 修改密码Controller
-    app.register.controller('UserEmailCtrl', ['$scope', '$modalInstance', 'user', 'User', 'toaster', function($scope, $modalInstance, user, User, toaster){
+    app.register.controller('UserEmailCtrl', ['$scope', '$modalInstance', 'user', 'User', 'toaster','$interval' ,function($scope, $modalInstance, user, User, toaster,$interval){
         $scope.user = user;
+        $scope.user.userEmail = null;
+        $scope.user.newUserEmail = null;
         $scope.checking = false;
-        //验证用户输入的邮箱地址是否正确
-        $scope.checkUserEmail = function(userEmail) {
-            $scope.checking = true;
-            $scope.checkSuccess = false;
-            $scope.checkFailed = false;
-            User.checkUserEmail({userEmail: userEmail}, function(){
-                $scope.checkSuccess = true;
-                $scope.checking = false;
-                $scope.checkFailed = false;
-            }, function(){
-                $scope.checkFailed = true;
-                $scope.checking = false;
-                $scope.checkSuccess = false;
-            });
-        };
-
-        //验证邮箱是否可用
+        //验证用户输入的旧邮箱地址是否正确
         $scope.checkUserEmail = function(userEmail) {
             $scope.checking = true;
             $scope.checkSuccess = false;
@@ -518,49 +504,88 @@ define(['app/app'], function(app) {
             });
         };
 
+        //验证用户新输入的邮箱是否可用
+        $scope.emailSuccess = false;
+        $scope.emailFailed = false;
         $scope.emailEnable = function(newUserEmail) {
-            $scope.emailSuccess = false;
-            $scope.emailFailed = false;
-            User.checkUserEmail({userEmail: newUserEmail}, function(){
-                $scope.emailSuccess = true;
-                $scope.emailFailed = false;
+            User.emailEnable({email: newUserEmail}, function(data){
+            	if(data.data == "true"){//邮箱可用
+                    $scope.emailSuccess = true;
+                    $scope.sendSuccess = true;
+                    $scope.emailFailed = false;
+				}else{//邮箱不可用
+                    $scope.emailSuccess = false;
+                    $scope.emailFailed = true;
+                    $scope.sendSuccess = false;
+				}
             }, function(){
-                $scope.emailFailed = true;
                 $scope.emailSuccess = false;
+                $scope.sendSuccess = false;
             });
         };
 
+        $scope.codeSuccess = false;
+        //发送验证码
         $scope.sendCheckCode = function(newUserEmail) {
             User.sendCheckCode({newUserEmail: newUserEmail}, 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.validCheckCode = function(checkCode) {
+            User.validCheckCode({checkCode: checkCode}, 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.newPassword == $scope.user.password){
-                toaster.pop('error', '错误', '新密码与原密码相同');
+            if($scope.user.newUserEmail == $scope.user.userEmail){
+                toaster.pop('error', '错误', '新邮箱地址与旧邮箱地址相同');
                 return;
             }
-            if($scope.user.newPassword == $scope.user.newPassword1) {//验证重复密码相等
-                User.updatePassword({password: $scope.user.password, newPassword: $scope.user.newPassword}, {}, function(){
-                    toaster.pop('success', '成功', '修改密码成功,请牢记您的新密码。');
-                    $scope.user.password = null;
-                    $scope.user.newPassword = null;
-                    $scope.user.newPassword1 = null;
-                    $scope.checking = false;
-                    $scope.checkSuccess = false;
-                    $scope.checkFailed = false;
-                    $modalInstance.close();
-                }, function(response){
-                    toaster.pop('error', '错误', response.data);
-                    $modalInstance.close();
-                });
-            } else {
-                toaster.pop('error', '错误', '重复密码不一致');
-            }
+			User.updateUserEmail({userEmail:$scope.user.userEmail,newUserEmail:$scope.user.newUserEmail}, {}, function(){
+				toaster.pop('success', '成功', '修改邮箱成功。');
+				$scope.user.userEmail = null;
+				$scope.user.newUserEmail = null;
+				$scope.checking = false;
+				$scope.checkSuccess = false;
+				$scope.checkFailed = false;
+                $scope.emailSuccess = false;
+                $scope.codeSuccess = false;
+                $scope.validSuccess = false;
+				$modalInstance.close();
+			}, function(response){
+				toaster.pop('error', '错误', response.data);
+				$modalInstance.close();
+			});
         };
 
         $scope.cancel = function () {

+ 9 - 7
src/main/webapp/resources/view/vendor/modal/updateUserEmail.html

@@ -8,10 +8,11 @@
     <h3 class="f14 modal-title"><i class="fa fa-lock fa-fw"></i>修改邮箱</h3>
 </div>
 <form class="userEmail" name="sampleSendForm" ng-submit="ok()">
+    <input type="hidden" ng-model="pageToken"/>
     <div class="modal-body">
         <div class="row">
             <label class="col-md-4 col-sm-4 col text-right">用户:</label>
-            <div class="col-md-4 col-sm-4 col">{{::user.userUU}} - {{::user.userName}}</div>
+            <div class="col-md-4 col-sm-4 col">{{::user.userTel}} - {{::user.userName}}</div>
         </div>
         <div class="row line" ng-class="{'has-success': checkSuccess, 'has-error': checkFailed}">
             <label class="col-md-4 col-sm-4 col text-right">原邮箱地址:</label>
@@ -28,26 +29,27 @@
             <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.newUserEmail"
-                       class="form-control input-sm" type="newUserEmail" required ng-blur="emailEnable(user.newUserEmail)">
+                       class="form-control input-sm" type="newUserEmail" required ng-blur="emailEnable(user.newUserEmail)" placeholder="新邮箱地址">
                 <!-- <div>密码复杂度</div> -->
             </div>
             <div class="col-md-4 col-sm-4 col">
-                <i ng-show="userEmail.user.newUserEmail.$error.email" class="fa fa-check" style="color:#339933"></i>
+                <i ng-show="emailSuccess" class="fa fa-check" style="color:#339933"></i>
+                <i ng-show="emailFailed" 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.checkCode" ng-pattern="/^([\w~!@#$%^&\*\(\)-_\+=,.;\[\]{}\<\>]){6}$/"
-                       class="form-control input-sm" type="checkCode" required>
+                <input ng-model="checkCode"
+                       class="form-control input-sm" ng-disabled="!codeSuccess" type="checkCode" ng-blur="validCheckCode(checkCode)" required>
             </div>
             <div class="col-md-4 col-sm-4 col">
-                <input ng-click="sendCheckCode(user.newUserEmail)" ng-disabled="!emailSuccess" type="button" value="获取验证码"/>
+                <input ng-click="sendCheckCode(user.newUserEmail)" 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="!checkSuccess" type="submit">确认修改</button>
+        <button class="btn btn-primary" ng-disabled="!validSuccess" type="submit">确认修改</button>
         <button class="btn btn-default" ng-click="cancel()" type="button">取消</button>
     </div>
 </form>