|
@@ -2,10 +2,14 @@ package com.qrservice.admin.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.qrservice.admin.config.ServiceProperties;
|
|
|
+import com.qrservice.admin.dao.online.InstitutionInfoDao;
|
|
|
import com.qrservice.admin.dao.settle.*;
|
|
|
import com.qrservice.admin.exception.CheckException;
|
|
|
import com.qrservice.admin.model.admin.LoginToken;
|
|
|
import com.qrservice.admin.model.admin.UserInfo;
|
|
|
+import com.qrservice.admin.model.admin.UserSdInfo;
|
|
|
+import com.qrservice.admin.model.admin.UserUpInfo;
|
|
|
+import com.qrservice.admin.model.bussiness.InstitutionInfo;
|
|
|
import com.qrservice.admin.model.manage.InstitutionUser;
|
|
|
import com.qrservice.admin.model.manage.Menu;
|
|
|
import com.qrservice.admin.model.manage.PermissionGroup;
|
|
@@ -15,6 +19,8 @@ import com.qrservice.admin.model.param.MenuInfo;
|
|
|
import com.qrservice.admin.model.param.MenuRouter;
|
|
|
import com.qrservice.admin.service.UserService;
|
|
|
import com.qrservice.admin.util.CacheUtil;
|
|
|
+import com.qrservice.admin.util.EmailUtils;
|
|
|
+import com.qrservice.admin.util.EncryptUtil;
|
|
|
import com.qrservice.admin.util.jwtUtil;
|
|
|
import org.apache.poi.hpsf.Array;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -24,8 +30,16 @@ import org.springframework.data.mongodb.core.query.Criteria;
|
|
|
import org.springframework.data.mongodb.core.query.Query;
|
|
|
import org.springframework.data.mongodb.core.query.Update;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.web.context.request.RequestContextHolder;
|
|
|
+import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
+import org.thymeleaf.TemplateEngine;
|
|
|
+import org.thymeleaf.context.Context;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.PrintWriter;
|
|
|
+import java.time.LocalDate;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -46,17 +60,23 @@ public class UserServiceImpl implements UserService {
|
|
|
|
|
|
private final ServiceProperties properties;
|
|
|
|
|
|
+ private final InstitutionInfoDao inInfoDao;
|
|
|
+
|
|
|
private final UserGroupDao ugDao;
|
|
|
|
|
|
private final UserOperateLogDao uglogDao;
|
|
|
|
|
|
+ private final TemplateEngine templateEngine;
|
|
|
+
|
|
|
@Autowired
|
|
|
- public UserServiceImpl(InstitutionUserDao dao, MenuDao menuDao,ServiceProperties properties,UserGroupDao ugDao,PermissionGroupDao pgDao,UserOperateLogDao uglogDao) {
|
|
|
+ public UserServiceImpl(InstitutionUserDao dao, MenuDao menuDao,ServiceProperties properties,UserGroupDao ugDao,PermissionGroupDao pgDao,UserOperateLogDao uglogDao,TemplateEngine templateEngine, InstitutionInfoDao inInfoDao) {
|
|
|
this.dao = dao;
|
|
|
this.ugDao = ugDao;
|
|
|
this.pgDao = pgDao;
|
|
|
this.menuDao = menuDao;
|
|
|
this.properties = properties;
|
|
|
+ this.inInfoDao = inInfoDao;
|
|
|
+ this.templateEngine = templateEngine;
|
|
|
this.uglogDao = uglogDao;
|
|
|
}
|
|
|
|
|
@@ -77,7 +97,9 @@ public class UserServiceImpl implements UserService {
|
|
|
//判断用户是否超过密码有效期
|
|
|
int days = (int) ((new Date().getTime() - user.getPasswordUpdateDate().getTime()) / (1000*3600*24));
|
|
|
if(days > Integer.valueOf(properties.getPwdTime())){
|
|
|
- throw new CheckException("Password expired, please change",throwable);
|
|
|
+ //密码过期跳转修改密码页面
|
|
|
+ String token = EncryptUtil.encryptHex(dto.getUsername(), properties.getLoginKey());
|
|
|
+ throw new CheckException("Password expired, please change",new Throwable(token));
|
|
|
}
|
|
|
query.addCriteria(Criteria.where("password").is(dto.getPassword()));
|
|
|
dao.findOne(query);
|
|
@@ -107,6 +129,7 @@ public class UserServiceImpl implements UserService {
|
|
|
CacheUtil.getCache().cleanUp();
|
|
|
return loginToken;
|
|
|
}
|
|
|
+
|
|
|
public static Date getTodayStartTime() {
|
|
|
Calendar todayStart = Calendar.getInstance();
|
|
|
todayStart.set(Calendar.HOUR_OF_DAY, 0);
|
|
@@ -191,6 +214,106 @@ public class UserServiceImpl implements UserService {
|
|
|
return listAllDistinct;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public String updatePwd(HttpServletRequest request, UserUpInfo info) {
|
|
|
+ //判断用户原密码是否正确
|
|
|
+ String token = request.getHeader("Authorization");
|
|
|
+ String userId = jwtUtil.getUserId(token);
|
|
|
+ Query query = new Query();
|
|
|
+ query.addCriteria(Criteria.where("userId").is(userId));
|
|
|
+ query.addCriteria(Criteria.where("password").is(info.getOriginPwd()));
|
|
|
+ InstitutionUser user = dao.findOne(query);
|
|
|
+ Throwable throwable = new Throwable("InstitutionCode user "+ userId+" updatePassword");
|
|
|
+ if (user == null) {
|
|
|
+ throw new CheckException("Origin password is not correct ",throwable);
|
|
|
+ }
|
|
|
+ //修改密码
|
|
|
+ Update update = new Update();
|
|
|
+ update.set("passwordUpdateDate",new Date());
|
|
|
+ update.set("updateTime",new Date());
|
|
|
+ update.set("password",info.getPassword());
|
|
|
+ dao.updateFirst(query,update);
|
|
|
+ return "InstitutionCode user "+ userId+" updatePassword";
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String sendPwdEmail(HttpServletRequest request, UserSdInfo info) {
|
|
|
+ //验证用户信息填写是否正确
|
|
|
+ InstitutionUser user = dao.findOne(new Query(Criteria.where("userId").is(info.getUserId())).addCriteria(Criteria.where("userContact.contactEmail").is(info.getEmail())));
|
|
|
+ if(user == null ){
|
|
|
+ throw new CheckException("UserName or Email is not correct");
|
|
|
+ }
|
|
|
+ String institutionCode = user.getInstitutionCode();
|
|
|
+ InstitutionInfo institutionInfo = inInfoDao.findOne(new Query(Criteria.where("institutionCode").is(institutionCode)));
|
|
|
+ if(institutionInfo.getAcquirerPortalName() ==null ||institutionInfo.getAcquirerPortalName().equals("")){
|
|
|
+ institutionInfo = inInfoDao.findOne(new Query(Criteria.where("institutionCode").is(properties.getInstitutionCode())));
|
|
|
+ }
|
|
|
+ //信息加密
|
|
|
+ String token = EncryptUtil.encryptHex(info.getUserId(), properties.getKey());
|
|
|
+ Map<String, String> emailParam = new HashMap<>();
|
|
|
+ emailParam.put("localDate", LocalDate.now().toString());
|
|
|
+ emailParam.put("url",properties.getEmailUrl()+"?token="+token);
|
|
|
+ emailParam.put("userId",info.getUserId());
|
|
|
+ //邮件发送
|
|
|
+ String content = buildEmailContent(emailParam, "email/forgetPwd");
|
|
|
+ EmailUtils.sendSimpleHtmlMail("Forgot Password-"+institutionInfo.getAcquirerPortalName(),content,
|
|
|
+ info.getEmail(),
|
|
|
+ null
|
|
|
+ );
|
|
|
+ return "InstitutionCode user "+ user.getUserId()+" sendPwdEmail";
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void verifyPwdEmail(HttpServletRequest request, String token) {
|
|
|
+ String userId = EncryptUtil.decryptHex(token, properties.getKey());
|
|
|
+ InstitutionUser user = dao.findOne(new Query(Criteria.where("userId").is(userId)));
|
|
|
+ if(user == null ){
|
|
|
+ throw new CheckException("token is not correct");
|
|
|
+ }
|
|
|
+ String institutionCode = user.getInstitutionCode();
|
|
|
+ InstitutionInfo institutionInfo = inInfoDao.findOne(new Query(Criteria.where("institutionCode").is(institutionCode)));
|
|
|
+ if(institutionInfo.getAcquirerPortalName().equals("") || institutionInfo.getAcquirerPortalName() ==null){
|
|
|
+ institutionInfo = inInfoDao.findOne(new Query(Criteria.where("institutionCode").is(properties.getInstitutionCode())));
|
|
|
+ }
|
|
|
+ HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
|
|
|
+ try {
|
|
|
+ response.sendRedirect(institutionInfo.getAcquirerPortalUrl()+"?token="+token);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updatePwdEmail(HttpServletRequest request, UserUpInfo info) {
|
|
|
+ //密码过期的修改处理
|
|
|
+ if(info.getOriginPwd()!=null && !info.getOriginPwd().equals("")){
|
|
|
+ String userId = EncryptUtil.decryptHex(info.getToken(), properties.getLoginKey());
|
|
|
+ Query query = new Query(Criteria.where("userId").is(userId)).addCriteria(Criteria.where("password").is(info.getOriginPwd()));
|
|
|
+ InstitutionUser user = dao.findOne(query);
|
|
|
+ if(user == null ){
|
|
|
+ throw new CheckException("password is not correct");
|
|
|
+ }
|
|
|
+ Update update = new Update();
|
|
|
+ update.set("password",info.getPassword());
|
|
|
+ update.set("passwordUpdateDate",new Date());
|
|
|
+ update.set("updateTime",new Date());
|
|
|
+ dao.updateFirst(query,update);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //邮件修改密码的处理
|
|
|
+ String userId = EncryptUtil.decryptHex(info.getToken(), properties.getKey());
|
|
|
+ Query query = new Query(Criteria.where("userId").is(userId));
|
|
|
+ InstitutionUser user = dao.findOne(query);
|
|
|
+ if(user == null ){
|
|
|
+ throw new CheckException("token is not correct");
|
|
|
+ }
|
|
|
+ Update update = new Update();
|
|
|
+ update.set("password",info.getPassword());
|
|
|
+ update.set("passwordUpdateDate",new Date());
|
|
|
+ update.set("updateTime",new Date());
|
|
|
+ dao.updateFirst(query,update);
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public String loginOut(HttpServletRequest request,String token) {
|
|
@@ -201,4 +324,11 @@ public class UserServiceImpl implements UserService {
|
|
|
return title;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ public String buildEmailContent(Map<String, String> emailParam, String templateName) {
|
|
|
+ Context ctx = new Context();
|
|
|
+ ctx.setVariable("emailParam", emailParam);
|
|
|
+ return templateEngine.process(templateName, ctx);
|
|
|
+ }
|
|
|
+
|
|
|
}
|