Commit 7899269f authored by xiaoguang.xu's avatar xiaoguang.xu

event listener first commit

parent 9b18b19e
package cn.quantgroup.xyqb.config.event;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ApplicationEventMulticaster;
import org.springframework.context.event.SimpleApplicationEventMulticaster;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.support.TaskUtils;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
@Slf4j
@Configuration
public class EventConfig {
@Bean
public ApplicationEventMulticaster applicationEventMulticaster(Executor taskExecutor) {
SimpleApplicationEventMulticaster simpleApplicationEventMulticaster = new SimpleApplicationEventMulticaster();
simpleApplicationEventMulticaster.setTaskExecutor(taskExecutor);
simpleApplicationEventMulticaster.setErrorHandler(TaskUtils.LOG_AND_PROPAGATE_ERROR_HANDLER);
return simpleApplicationEventMulticaster;
}
@Bean
public Executor taskExecutor() {
ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();
poolTaskExecutor.setCorePoolSize(10);
poolTaskExecutor.setMaxPoolSize(50);
poolTaskExecutor.setQueueCapacity(100);
poolTaskExecutor.setThreadNamePrefix("Spring-UserLogin-Event-");
poolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
poolTaskExecutor.setRejectedExecutionHandler(new RejectedHandler());
poolTaskExecutor.initialize();
return poolTaskExecutor;
}
public static class RejectedHandler implements RejectedExecutionHandler {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
log.error("rejected : {}", r);
}
}
}
......@@ -241,13 +241,9 @@ public class InnerController implements IBaseController {
if (!ValidationUtil.validateChinese(name)) {
return JsonResult.buildErrorStateResult("用户姓名错误", null);
}
IdCardInfo info = null;
try {
info = idCardService.getIdCardInfo(idNo);
} catch (ParseException ex) {
log.error("用户身份证号错误, idNo: {}", idNo);
}
IdCardInfo info = idCardService.getIdCardInfo(idNo);
if (Objects.isNull(info) || !info.isValid()) {
log.error("用户身份证号错误,userId:{},idNo: {}", userId, idNo);
return JsonResult.buildErrorStateResult("身份证号码错误", null);
}
User user = userService.findById(userId);
......@@ -1052,23 +1048,6 @@ public class InnerController implements IBaseController {
return JsonResult.buildSuccessResult(null, userRet);
}
@RequestMapping("/user/register")
@ApiOperation(value = "用户注册", httpMethod = "POST")
public JsonResult register(String phoneNo, String password, Long channelId) {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("手机号不正确", null);
}
log.info("[/innerapi/user/register]channelId={},ip={}", channelId, getIp());
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
user = userRegisterService.register(phoneNo, StringUtils.defaultString(password, ""), channelId);
}
if (user == null) {
return JsonResult.buildErrorStateResult("注册失败", null);
}
return JsonResult.buildSuccessResult(null, new UserRet(user));
}
//根据日期时间段查询新注册用户信息并返回
@RequestMapping("/contract/queryRegisterUsers")
@ApiOperation(value = "根据日期时间段查询新注册用户信息并返回", httpMethod = "POST")
......
package cn.quantgroup.xyqb.entity;
import cn.quantgroup.motan.retbean.XUser;
import cn.quantgroup.xyqb.config.http.Timestamp2LongConverter;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
......@@ -20,6 +19,7 @@ import java.sql.Timestamp;
@Entity
@Table(name = "user", uniqueConstraints = @UniqueConstraint(columnNames = "phone_no"))
public class User implements Serializable {
private static final long serialVersionUID = -1L;
@Id
@Column(name = "id")
......@@ -54,21 +54,6 @@ public class User implements Serializable {
@Column(name = "updated_at")
@JSONField(serializeUsing = Timestamp2LongConverter.class)
private Timestamp updatedAt;
private static final long serialVersionUID = -1L;
public XUser toXUser() {
XUser xUser = new XUser();
xUser.setId(this.getId());
xUser.setPassword(this.getPassword());
xUser.setRegisteredFrom(this.getRegisteredFrom());
xUser.setUuid(this.getUuid());
xUser.setEnable(this.getEnable());
xUser.setPhoneNo(this.getPhoneNo());
xUser.setUpdatedAt(this.getUpdatedAt());
xUser.setCreatedAt(this.getCreatedAt());
return xUser;
}
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.repository.IAddressRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
/**
* 注册成功后保存地址
*
* @author ag
*/
@Component
public class AddressRegisteredEventListener implements ApplicationListener<RegisterEvent> {
@Autowired
private IAddressRepository addressRepository;
@Override
public void onApplicationEvent(RegisterEvent event) {
UserRegisterParam userRegisterParam = event.getUserRegisterParam();
Address address = userRegisterParam.getAddress();
if (address == null) {
return;
}
User user = userRegisterParam.getUser();
address.setUserId(user.getId());
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
address.setCreatedAt(currentTime);
address.setUpdateAt(currentTime);
addressRepository.save(address);
}
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserBtRegister;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
import java.util.Objects;
@Component
public class BtRegisteredEventListener implements ApplicationListener<RegisterEvent> {
@Autowired
private IUserBtRegisterService userBtRegisterService;
@Override
public void onApplicationEvent(RegisterEvent event) {
UserRegisterParam userRegisterParam = event.getUserRegisterParam();
Long channelId = userRegisterParam.getChannelId();
User user = userRegisterParam.getUser();
Long btRegisterChannelId = userRegisterParam.getBtRegisterChannelId();
if (Objects.isNull(user) || !Objects.equals(channelId, Constants.Channel.BAITIAO)) {
return;
}
UserBtRegister userBtRegister = new UserBtRegister();
userBtRegister.setUserId(user.getId());
if (null == btRegisterChannelId) {
userBtRegister.setRegisterBtMerchantId(0L);
} else {
userBtRegister.setRegisterBtMerchantId(btRegisterChannelId);
}
userBtRegister.setIsActive(true);
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
userBtRegister.setCreatedAt(currentTime);
userBtRegister.setUpdatedAt(currentTime);
userBtRegisterService.save(userBtRegister);
}
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.repository.IContactRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
* 注册成功后, 保存联系人
*
* @author ag
*/
@Component
public class ContactRegisteredEventListener implements ApplicationListener<RegisterEvent> {
@Autowired
private IContactRepository contactRepository;
@Override
public void onApplicationEvent(RegisterEvent event) {
UserRegisterParam userRegisterParam = event.getUserRegisterParam();
List<Contact> contactList = userRegisterParam.getContactList();
if (CollectionUtils.isEmpty(contactList)) {
return;
}
contactRepository.save(contactList);
}
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.IdCardInfo;
import cn.quantgroup.xyqb.model.IdType;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.util.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
@Slf4j
@Component
public class DetailRegisteredEventListener implements ApplicationListener<RegisterEvent> {
@Autowired
private IIdCardService idCardService;
@Autowired
private IUserDetailService userDetailService;
@Override
public void onApplicationEvent(RegisterEvent event) {
UserRegisterParam userRegisterParam = event.getUserRegisterParam();
User user = userRegisterParam.getUser();
if (StringUtils.isAnyBlank(userRegisterParam.getIdNo(), userRegisterParam.getName()) ||
!ValidationUtil.validateChinese(userRegisterParam.getName())) {
return;
}
String phoneNo = userRegisterParam.getPhoneNo();
String name = userRegisterParam.getName();
String idNo = userRegisterParam.getIdNo();
IdCardInfo cardInfo = idCardService.getIdCardInfo(idNo);
if (cardInfo == null || !cardInfo.isValid()) {
log.info("用户身份证号验证失败,userId:{},idNo:{}", user.getId(), idNo);
return;
}
UserDetail userDetail = new UserDetail();
userDetail.setIdNo(cardInfo.getIdNo());
userDetail.setPhoneNo(phoneNo);
userDetail.setName(name);
userDetail.setIdType(IdType.ID_CARD);
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
userDetail.setCreatedAt(currentTime);
userDetail.setUpdatedAt(currentTime);
userDetail.setUserId(user.getId());
userDetail.setGender(cardInfo.getGender());
userDetailService.saveUserDetail(userDetail);
}
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.exception.PushUserToLkbException;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.user.ILkbUserService;
import cn.quantgroup.xyqb.util.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* 注册成功之后lkb
*
* @author ag
*/
@Slf4j
@Component
public class LkbRegisteredEventListener implements ApplicationListener<RegisterEvent> {
@Autowired
private ILkbUserService lkbUserService;
//todo 这里重试机制补齐
@Override
public void onApplicationEvent(RegisterEvent event) {
UserRegisterParam userRegisterParam = event.getUserRegisterParam();
User user = userRegisterParam.getUser();
String uuid = user.getUuid();
boolean pushResult = lkbUserService.pushUser(uuid, userRegisterParam.getPhoneNo(),
userRegisterParam.getName(), userRegisterParam.getIdNo());
if (!pushResult) {
log.error("[userRegisterHandler][baseUserRegisterHandler]同步用户至Lkb出错,userRegisterParam:{}", JsonUtil.toJson(userRegisterParam));
throw new PushUserToLkbException("同步用户至Lkb出错");
}
}
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.util.MqUtils;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* 发mq, 目前只有数据可视化分析系统需要这个
*
* @author ag
*/
@Component
public class MQRegisteredEventListener implements ApplicationListener<RegisterEvent> {
@Override
public void onApplicationEvent(RegisterEvent event) {
UserRegisterParam userRegisterParam = event.getUserRegisterParam();
if (!userRegisterParam.isSendSuccessMq()) {
return;
}
Long channelId = userRegisterParam.getChannelId();
String dimension = userRegisterParam.getDimension();
User user = userRegisterParam.getUser();
if (user != null) {
MqUtils.sendRegisterMessage(channelId, dimension, user);
}
}
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import lombok.Getter;
import lombok.Setter;
import org.springframework.context.ApplicationEvent;
/**
* 注册成功发送事件
*
* @author ag
*/
@Getter
@Setter
public class RegisterEvent extends ApplicationEvent {
private UserRegisterParam userRegisterParam;
/**
* Create a new ApplicationEvent.
*
* @param source the object on which the event initially occurred (never {@code null})
*/
public RegisterEvent(Object source) {
super(source);
}
public RegisterEvent(Object source, UserRegisterParam userRegisterParam) {
super(source);
this.userRegisterParam = userRegisterParam;
}
}
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.entity.User;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* Created by liqing on 2017/12/4 0004.
*/
......@@ -30,8 +33,11 @@ public class UserRegisterParam {
private Address address; // 地址
private String contacts; // 联系人
private User user; // 注册生成的用户,也是返回结果
/** ======数据部分结束====== */
private List<Contact> contactList;
/**
* ======数据部分结束======
*/
/**
* ======流程控制部分开始======
*/
......
......@@ -11,7 +11,7 @@ public interface IIdCardService {
boolean isIdCardValid(String idCard) throws ParseException;
IdCardInfo getIdCardInfo(String idCardStr) throws ParseException;
IdCardInfo getIdCardInfo(String idCardStr);
// 当身份证不合法,直接抛出异常。
IdCardInfo getIdCardInfoWithExceptions(String idCardStr) throws ParseException;
......
......@@ -4,6 +4,7 @@ import cn.quantgroup.xyqb.exception.IdCardException;
import cn.quantgroup.xyqb.model.Gender;
import cn.quantgroup.xyqb.model.IdCardInfo;
import cn.quantgroup.xyqb.service.auth.IIdCardService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
......@@ -17,6 +18,7 @@ import java.util.regex.Pattern;
/**
* Created by Miraculous on 15/7/10.
*/
@Slf4j
@Service
public class IdCardServiceImpl implements IIdCardService {
......@@ -125,7 +127,7 @@ public class IdCardServiceImpl implements IIdCardService {
}
@Override
public IdCardInfo getIdCardInfo(String idCardStr) throws ParseException {
public IdCardInfo getIdCardInfo(String idCardStr){
IdCardInfo cardInfo = new IdCardInfo();
cardInfo.setIsValid(false);
if (idCardStr == null) {
......@@ -157,7 +159,15 @@ public class IdCardServiceImpl implements IIdCardService {
return cardInfo;
}
GregorianCalendar gc = new GregorianCalendar();
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
Date date;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
} catch (ParseException e) {
//这里根本不会出错好么.万一哪个脑抽改了上面的, 就出错了
log.error("解析日期异常...", e);
return null;
}
if (gc.get(Calendar.YEAR) - year > 150 || gc.getTime().getTime() - date.getTime() < 0) {
return cardInfo;
}
......
......@@ -41,16 +41,6 @@ public interface IUserRegisterService {
*/
User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId, Long btRegisterChannelId);
/**
* 替换InnerController里的userService.registerAndReturn
* /innerapi/user/register
*
* @param phoneNo
* @param password
* @param registerFrom
* @return
*/
User register(String phoneNo, String password, Long registerFrom);
/**
* 替换UserController.register里的userService.register
......@@ -91,16 +81,5 @@ public interface IUserRegisterService {
*/
User register(Long registeredFrom, Long channelId, String phoneNo, String name, String idNo, Address addressObj, String contacts, Long btRegisterChannelId);
/**
* 替换MotanUserServiceImpl.appLoginAndFetchLoginInfo和MotanUserServiceImpl.appLogin里的register
*
* @param registerFrom
* @param phoneNo
* @param idNo
* @param name
* @param channelId
* @return
*/
User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId);
}
......@@ -39,16 +39,6 @@ public class UserRegisterServiceImpl extends AbstractUserRegisterService {
return registerDefault(userRegisterParam);
}
@Transactional(rollbackFor = Exception.class)
@Override
public User register(String phoneNo, String password, Long registerFrom) {
UserRegisterParam userRegisterParam = UserRegisterParam.builder()
.registerFrom(registerFrom).phoneNo(phoneNo).password(password)
.generateRandomPwd(false).sendSuccessSms(true).sendAppSms(true)
.sendSuccessMq(true)
.build();
return registerDefault(userRegisterParam);
}
@Transactional(rollbackFor = Exception.class)
@Override
......@@ -91,15 +81,4 @@ public class UserRegisterServiceImpl extends AbstractUserRegisterService {
return registerExt(userRegisterParam);
}
@Transactional(rollbackFor = Exception.class)
@Override
public User register(Long registerFrom, String phoneNo, String idNo, String name, Long channelId) {
UserRegisterParam userRegisterParam = UserRegisterParam.builder()
.registerFrom(registerFrom).phoneNo(phoneNo).idNo(idNo).name(name)
.channelId(channelId)
.generateRandomPwd(true).sendSuccessSms(true).sendAppSms(true)
.sendSuccessMq(true)
.build();
return registerDefault(userRegisterParam);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment