Commit d90e60eb d90e60ebfd0a195ba896c88d914be19c56310557 by xianghan

1.修复app登录逻辑

1 parent 650ef5bd
Showing 17 changed files with 475 additions and 23 deletions
......@@ -23,6 +23,14 @@ import java.io.Serializable;
@Table(name="uc_user_app")
public class UserApp implements Serializable {
// 第三方账号类型 3:微信;4:QQ;5:微博;6:苹果账号
@Transient
private Integer accountType;
// 第三方账号
@Transient
private String account;
// ID
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
......
......@@ -41,6 +41,10 @@ public class UserAppBind implements Serializable {
@Column(name = "user_app_id", nullable = false)
private Long userAppId;
// 绑定状态 0:解绑;1 绑定
@Column(name = "status", nullable = false)
private Integer status;
// 创建时间
@CreatedDate
@Column(name = "create_time")
......
package com.topdraw.business.module.user.app.domain;
/**
* @author :
* @description:
* @function :
* @date :Created in 2022/6/30 13:18
* @version: :
* @modified By:
* @since : modified in 2022/6/30 13:18
*/
public class UserAppBindBuilder {
public static UserAppBind build(Long userAppId, String account, Integer accountType){
UserAppBind userAppBind = new UserAppBind();
userAppBind.setAccount(account);
userAppBind.setUserAppId(userAppId);
userAppBind.setAccountType(accountType);
userAppBind.setStatus(UserAppStatusConstant.VALID_STATUS);
return userAppBind;
}
}
package com.topdraw.business.module.user.app.domain;
/**
* @author :
* @description:
* @function :
* @date :Created in 2022/6/30 11:42
* @version: :
* @modified By:
* @since : modified in 2022/6/30 11:42
*/
public interface UserAppBindStatusConstant {
// 绑定状态 0:解绑;1 绑定
Integer VALID_STATUS = 1;
Integer INVALID_STATUS = 0;
}
package com.topdraw.business.module.user.app.domain;
import com.topdraw.util.TimestampUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import java.util.Objects;
/**
* @author :
* @description:
* @function :
* @date :Created in 2022/6/30 11:35
* @version: :
* @modified By:
* @since : modified in 2022/6/30 11:35
*/
public class UserAppBuilder {
public static UserApp build(Long memberId, UserApp resource){
UserApp userApp = new UserApp();
userApp.setId(null);
userApp.setMemberId(memberId);
userApp.setUsername(resource.getUsername());
userApp.setTags(resource.getTags());
userApp.setLastActiveTime(TimestampUtil.now());
userApp.setEmail(resource.getEmail());
userApp.setType(Objects.isNull(resource.getType()) ? resource.getType() : -1);
userApp.setNickname(StringUtils.isNotBlank(resource.getNickname()) ? resource.getNickname() : resource.getUsername());
userApp.setPassword(resource.getPassword());
userApp.setCellphone(StringUtils.isNotBlank(resource.getCellphone()) ? resource.getCellphone() : resource.getUsername());
userApp.setBirthday(StringUtils.isNotBlank(resource.getBirthday()) ? resource.getBirthday() : "1900-01-01");
userApp.setGender(Objects.nonNull(resource.getGender()) ? resource.getGender() : 0);
userApp.setStatus(UserAppStatusConstant.VALID_STATUS);
userApp.setCreateTime(null);
userApp.setUpdateTime(null);
return userApp;
}
}
package com.topdraw.business.module.user.app.domain;
/**
* @author :
* @description:
* @function :
* @date :Created in 2022/6/30 11:42
* @version: :
* @modified By:
* @since : modified in 2022/6/30 11:42
*/
public interface UserAppStatusConstant {
// 状态 0:禁用;1:生效;-1:注销
Integer VALID_STATUS = 1;
Integer FORBID_STATUS = 0;
Integer INVALID_STATUS = -1;
}
......@@ -3,6 +3,8 @@ package com.topdraw.business.module.user.app.repository;
import com.topdraw.business.module.user.app.domain.UserAppBind;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import java.util.Optional;
......@@ -12,4 +14,9 @@ import java.util.Optional;
*/
public interface UserAppBindRepository extends JpaRepository<UserAppBind, Long>, JpaSpecificationExecutor<UserAppBind> {
Optional<UserAppBind> findFirstByAccount(String account);
@Modifying
@Query(value = "UPDATE `uc_user_app_bind` SET `status` = 0 , `update_time` = now() WHERE `account` = ?1 ", nativeQuery = true)
Integer cancelUserAppBind(String account);
}
......
......@@ -34,4 +34,17 @@ public interface UserAppBindService {
*/
void delete(Long id);
/**
*
* @param account
* @return
*/
UserAppBindDTO findFirstByAccount(String account);
/**
*
* @param account
* @return
*/
Integer cancelUserAppBind(String account);
}
......
......@@ -24,6 +24,9 @@ public class UserAppBindDTO implements Serializable {
// app账号id
private Long userAppId;
// 绑定状态 0:解绑;1 绑定
private Integer status;
// 创建时间
private Timestamp createTime;
......
......@@ -11,14 +11,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.util.Assert;
import com.topdraw.utils.PageUtil;
import com.topdraw.utils.QueryHelp;
import java.util.List;
import java.util.Map;
/**
* @author XiangHan
......@@ -65,5 +58,17 @@ public class UserAppBindServiceImpl implements UserAppBindService {
this.userAppBindRepository.delete(UserAppBind);
}
@Override
public UserAppBindDTO findFirstByAccount(String account) {
UserAppBind userAppBind = this.userAppBindRepository.findFirstByAccount(account).orElseGet(UserAppBind::new);
return this.userAppBindMapper.toDto(userAppBind);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Integer cancelUserAppBind(String account) {
return this.userAppBindRepository.cancelUserAppBind(account);
}
}
......
......@@ -24,13 +24,17 @@ public class UserTvBuilder {
private static final String DEFAULT_CREATE_BY = "system";
private static final String DEFAULT_UPDATE_BY = "system";
public static UserTv build(Long memberId, String memberCode, UserTv userTv){
public static UserTv build(Long memberId, String memberCode , UserTv userTv){
return build(memberId,memberCode,userTv.getId(),userTv.getPlatformAccount(),userTv.getNickname(),userTv.getUsername(),
userTv.getLoginDays(),userTv.getStatus(),userTv.getContinueDays(),userTv.getCreateBy(),userTv.getUpdateBy(), userTv.getVisUserId(), userTv.getPlatform());
userTv.getLoginDays(),userTv.getStatus(),userTv.getContinueDays(),userTv.getCreateBy(),userTv.getUpdateBy(), userTv.getVisUserId(),
userTv.getPlatform(), userTv.getPassword(), userTv.getGroups());
}
public static UserTv build(Long memberId , String memberCode , Long id , String platformAccount , String nickname , String username,
Integer loginDays , Integer status ,Integer continueDays , String createBy , String updateBy,Long visUserId, String platform){
Integer loginDays , Integer status ,Integer continueDays , String createBy , String updateBy,Long visUserId,
String platform, String password, String groups){
Assert.notNull(memberId,GlobeExceptionMsg.MEMBER_ID_IS_NULL);
Assert.notNull(memberCode,GlobeExceptionMsg.MEMBER_CODE_IS_NULL);
Assert.notNull(platformAccount,GlobeExceptionMsg.IPTV_PLATFORM_ACCOUNT_IS_NULL);
......@@ -45,6 +49,8 @@ public class UserTvBuilder {
userTv.setMemberId(memberId);
userTv.setNickname(StringUtils.isBlank(nickname)?platformAccount:nickname);
userTv.setUsername(StringUtils.isBlank(username)?platformAccount:username);
userTv.setPassword(password);
userTv.setGroups(groups);
userTv.setLoginDays(Objects.nonNull(loginDays)?loginDays:DEFAULT_VALUE);
userTv.setLoginType(DEFAULT_VALUE);
userTv.setStatus(Objects.nonNull(status)?status:DEFAULT_VALUE);
......
......@@ -10,6 +10,7 @@ import com.topdraw.business.module.common.validated.UpdateGroup;
import com.topdraw.business.module.member.service.MemberService;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.user.app.domain.UserApp;
import com.topdraw.business.module.user.app.service.dto.UserAppDTO;
import com.topdraw.business.module.user.iptv.domain.UserTv;
import com.topdraw.business.module.user.iptv.service.dto.UserTvDTO;
import com.topdraw.business.module.user.weixin.domain.UserWeixin;
......@@ -26,6 +27,7 @@ import com.topdraw.exception.GlobeExceptionMsg;
import com.topdraw.resttemplate.RestTemplateClient;
import com.topdraw.util.Base64Util;
import com.topdraw.util.JSONUtil;
import com.topdraw.util.RegexUtil;
import com.topdraw.utils.RedisUtils;
import com.topdraw.weixin.util.WeChatConstants;
import com.topdraw.weixin.util.WeixinUtil;
......@@ -35,6 +37,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import org.springframework.util.Base64Utils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -69,14 +72,38 @@ public class UserOperationController {
/******************************************************* APP ************************************/
@Log
@PostMapping(value = "/appLogin")
@ApiOperation("app登录")
@PostMapping(value = "/appRegister")
@ApiOperation("app注册")
@AnonymousAccess
public ResultInfo appLogin(@Validated @RequestBody UserApp resources) {
log.info("app登录 ==>> param ==>> [appLogin#{}]", resources);
public ResultInfo appRegister(@Validated @RequestBody UserApp resources) {
log.info("app注册 ==>> param ==>> [appRegister#{}]", resources);
UserTvDTO userTvDTO = this.userOperationService.appLogin(resources);
return ResultInfo.success();
String username = resources.getUsername();
if (StringUtils.isBlank(username)) {
log.error("app注册,参数错误,账号不得为空 ");
return ResultInfo.failure("app注册,参数错误,账号不得为空");
}
Integer type = resources.getType();
if (Objects.isNull(type)) {
log.error("app注册,参数错误,账号类型不得为空 ");
return ResultInfo.failure("app注册,参数错误,账号类型不得为空");
}
String account = resources.getAccount();
if (StringUtils.isNotBlank(account)) {
if (Objects.isNull(resources.getAccountType())) {
log.error("app注册,参数错误,第三方账号类型不得为空");
return ResultInfo.failure("app注册,参数错误,第三方账号类型不得为空");
}
}
if (StringUtils.isBlank(resources.getNickname())) {
resources.setNickname(Base64Utils.encodeToString(username.getBytes()));
}
UserAppDTO userAppDTO = this.userOperationService.appRegister(resources);
return ResultInfo.success(userAppDTO);
}
@Log
......@@ -86,10 +113,28 @@ public class UserOperationController {
public ResultInfo updateUserApp(@Validated @RequestBody UserApp resources) {
log.info("修改app账号信息 ==>> param ==>> [updateUserApp#{}]", resources);
this.userOperationService.appLogin(resources);
return ResultInfo.success();
}
@Log
@PostMapping(value = "/cancelUserAppBind")
@ApiOperation("取消关联第三方账号")
@AnonymousAccess
public ResultInfo cancelUserAppBind(@Validated @RequestBody UserApp resources) {
log.info("修改app账号信息 ==>> param ==>> [updateUserApp#{}]", resources);
String account = resources.getAccount();
if (StringUtils.isBlank(account)) {
log.error("参数错误,第三方账号不能为空");
return ResultInfo.failure("参数错误,第三方账号不能为空");
}
boolean result =this.userOperationService.cancelUserAppBind(resources);
return ResultInfo.success(result);
}
@PostMapping("/appBind")
@ApiOperation("微信小程序绑定大屏")
@AnonymousAccess
......
......@@ -2,6 +2,7 @@ package com.topdraw.business.process.service;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.user.app.domain.UserApp;
import com.topdraw.business.module.user.app.service.dto.UserAppDTO;
import com.topdraw.business.module.user.iptv.domain.UserTv;
import com.topdraw.business.module.user.iptv.service.dto.UserTvDTO;
import com.topdraw.business.module.user.weixin.domain.UserWeixin;
......@@ -168,10 +169,18 @@ public interface UserOperationService {
*/
UserTvDTO updateUserTv(UserTv resources);
/**
*
* @param resources
* @return
*/
UserTvDTO appLogin(UserApp resources);
UserAppDTO appRegister(UserApp resources);
/**
*
* @param resources
* @return
*/
boolean cancelUserAppBind(UserApp resources);
}
......
......@@ -8,11 +8,17 @@ import com.alibaba.fastjson.JSONObject;
import com.topdraw.aspect.AsyncMqSend;
import com.topdraw.business.module.member.domain.Member;
import com.topdraw.business.module.member.domain.MemberBuilder;
import com.topdraw.business.module.member.domain.MemberTypeConstant;
import com.topdraw.business.module.member.service.MemberService;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.member.service.dto.MemberSimpleDTO;
import com.topdraw.business.module.user.app.domain.UserApp;
import com.topdraw.business.module.user.app.domain.UserAppBind;
import com.topdraw.business.module.user.app.domain.UserAppBindBuilder;
import com.topdraw.business.module.user.app.domain.UserAppBuilder;
import com.topdraw.business.module.user.app.service.UserAppBindService;
import com.topdraw.business.module.user.app.service.UserAppService;
import com.topdraw.business.module.user.app.service.dto.UserAppBindDTO;
import com.topdraw.business.module.user.app.service.dto.UserAppDTO;
import com.topdraw.business.module.user.iptv.domain.UserConstant;
import com.topdraw.business.module.user.iptv.domain.UserTv;
......@@ -55,7 +61,6 @@ import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CachePut;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
......@@ -81,6 +86,8 @@ public class UserOperationServiceImpl implements UserOperationService {
@Autowired
private UserAppService userAppService;
@Autowired
private UserAppBindService userAppBindService;
@Autowired
private UserWeixinService userWeixinService;
@Autowired
private UserWeixinRepository userWeixinRepository;
......@@ -115,17 +122,51 @@ public class UserOperationServiceImpl implements UserOperationService {
@Override
@Transactional(rollbackFor = Exception.class)
public UserTvDTO appLogin(UserApp resources) {
public UserAppDTO appRegister(UserApp resources) {
UserAppDTO userAppDTO = this.userAppService.findByUsername(resources.getUsername());
if (Objects.isNull(userAppDTO.getId())) {
// 先创建会员
Member member = MemberBuilder.build(MemberTypeConstant.app, resources.getHeadimgurl(), resources.getNickname(), 0);
MemberDTO memberDTO = this.memberService.create(member);
if (Objects.nonNull(memberDTO.getId())) {
// 保存app账号
UserAppDTO _userAppDTO = this.userAppService.create(UserAppBuilder.build(memberDTO.getId(), resources));
if (Objects.nonNull(_userAppDTO.getId()) && StringUtils.isNotBlank(resources.getAccount())) {
UserAppBindDTO userAppBindDTO = this.userAppBindService.findFirstByAccount(resources.getAccount());
if (Objects.isNull(userAppBindDTO.getId())) {
// 保存绑定关系
UserAppBind userAppBind = UserAppBindBuilder.build(_userAppDTO.getId(), resources.getAccount(), resources.getAccountType());
this.userAppBindService.create(userAppBind);
}
}
return _userAppDTO;
String username = resources.getUsername();
UserAppDTO userAppDTO = this.userAppService.findByUsername(username);
if (Objects.nonNull(userAppDTO)) {
}
}
return null;
}
@Override
public boolean cancelUserAppBind(UserApp resources) {
String account = resources.getAccount();
UserAppBindDTO userAppBindDTO = this.userAppBindService.findFirstByAccount(account);
if (Objects.nonNull(userAppBindDTO.getId())) {
Integer count = this.userAppBindService.cancelUserAppBind(account);
if (count == 1) {
return true;
}
}
return false;
}
/**
* 创建大屏账户同时创建会员
*
......
package com.topdraw.util;
/*
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.UUID;
import org.afflatus.utility.AppConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.aliyun.mns.client.CloudAccount;
import com.aliyun.mns.client.CloudTopic;
import com.aliyun.mns.client.MNSClient;
import com.aliyun.mns.common.ServiceException;
import com.aliyun.mns.model.BatchSmsAttributes;
import com.aliyun.mns.model.MessageAttributes;
import com.aliyun.mns.model.RawTopicMessage;
import com.aliyun.mns.model.TopicMessage;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
*/
public class MsgUtil {
// private static Logger log = LoggerFactory.getLogger(MsgUtil.class.getName());
/* private static final String ACCESSID = AppConfiguration.get("MESSAGE.ACCESSID");
private static final String ACCESSKEY = AppConfiguration.get("MESSAGE.ACCESSKEY");
private static final String MNSENDPOINT = AppConfiguration.get("MESSAGE.MNSENDPOINT");
private static final String TOPIC = AppConfiguration.get("MESSAGE.TOPIC");
private static final String SIGNNAME = AppConfiguration.get("MESSAGE.SIGNNAME");
private static final String TEMPLATECODE = AppConfiguration.get("MESSAGE.TEMPLATECODE");
private static final String REGION = AppConfiguration.get("MESSAGE.REGION");
public static String generateVerifyCodeAndSend(String verifyKey, String phone) {
String verifyCode;
try {
verifyCode = getRandom(4);
} catch (NoSuchAlgorithmException e) {
verifyCode = "8673";
}
// sendMsg(phone, ":" + verifyCode + ",序号:" + verifyKey);
sendMsg2(phone, verifyCode);
return verifyCode;
}*/
public static void sendMsg(String phone, String verifyCode) {
/**
* Step 1. 获取主题引用
*/
/*CloudAccount account = new CloudAccount(ACCESSID, ACCESSKEY, MNSENDPOINT);
MNSClient client = account.getMNSClient();
CloudTopic topic = client.getTopicRef(TOPIC);*/
/**
* Step 2. 设置SMS消息体(必须)
*
* 注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。
*/
/*RawTopicMessage msg = new RawTopicMessage();
msg.setMessageBody("sms-message");*/
/**
* Step 3. 生成SMS消息属性
*/
/*MessageAttributes messageAttributes = new MessageAttributes();
BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes();
// 3.1 设置发送短信的签名(SMSSignName)
batchSmsAttributes.setFreeSignName(SIGNNAME);
// 3.2 设置发送短信使用的模板(SMSTempateCode)
batchSmsAttributes.setTemplateCode(TEMPLATECODE);
// 3.3 设置发送短信所使用的模板中参数对应的值(在短信模板中定义的,没有可以不用设置)
BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams();
smsReceiverParams.setParam("code", verifyCode);
// 3.4 增加接收短信的号码
batchSmsAttributes.addSmsReceiver(phone, smsReceiverParams);
messageAttributes.setBatchSmsAttributes(batchSmsAttributes);*/
// try {
/**
* Step 4. 发布SMS消息
*/
/*TopicMessage ret = topic.publishMessage(msg, messageAttributes);
log.info("sendMsg | MessageId: " + ret.getMessageId() + " MessageMD5: " + ret.getMessageBodyMD5());
} catch (ServiceException se) {
System.out.println(se.getErrorCode() + se.getRequestId());
System.out.println(se.getMessage());
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
client.close();
}*/
}
public static void sendMsg2(String phone, String verifyCode) {
/*
try {
// 设置超时时间-可自行调整
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
// 初始化ascClient需要的几个参数
final String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)
final String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改)
// 替换成你的AK
final String accessKeyId = ACCESSID;// 你的accessKeyId,参考本文档步骤2
final String accessKeySecret = ACCESSKEY;// 你的accessKeySecret,参考本文档步骤2
// 初始化ascClient,暂时不支持多region(请勿修改)
IClientProfile profile = DefaultProfile.getProfile(REGION, accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint(REGION, REGION, product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
// 组装请求对象
SendSmsRequest request = new SendSmsRequest();
// 使用post提交
request.setMethod(MethodType.POST);
// 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
request.setPhoneNumbers(phone);
// 必填:短信签名-可在短信控制台中找到
request.setSignName(SIGNNAME);
// 必填:短信模板-可在短信控制台中找到
request.setTemplateCode(TEMPLATECODE);
// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
// 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
request.setTemplateParam("{\"code\":\"" + verifyCode + "\"}");
// 可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
// request.setSmsUpExtendCode("90997");
// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId(UUID.randomUUID().toString().replaceAll("-", ""));
// 请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if (null != sendSmsResponse) {
log.info("sendMsg | RequestId: " + sendSmsResponse.getRequestId() + " Code: "
+ sendSmsResponse.getCode() + " Message: " + sendSmsResponse.getMessage());
}
if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
// 请求成功
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
*/
}
/*public static String getRandom(int count) throws NoSuchAlgorithmException {
StringBuilder sb = new StringBuilder();
String str = "0123456789";
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
for (int i = 0; i < count; i++) {
int num = sr.nextInt(str.length());
sb.append(str.charAt(num));
str = str.replace(("" + str.charAt(num)), "");
}
return sb.toString();
}
*/
}
package com.topdraw.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author :
* @description:
* @function :
* @date :Created in 2022/6/29 15:10
* @version: :
* @modified By:
* @since : modified in 2022/6/29 15:10
*/
public class RegexUtil {
public static boolean mobileRegex(String mobile){
// String pattern = "0?(13|14|15|17|18|19)[0-9]{9}";
String pattern = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(mobile);
return m.find();
}
}
......@@ -2,6 +2,7 @@ package com.topdraw.test.business.process.rest;
import com.alibaba.fastjson.JSONObject;
import com.topdraw.BaseTest;
import com.topdraw.business.module.user.app.domain.UserApp;
import com.topdraw.business.module.user.iptv.domain.UserTv;
import com.topdraw.business.module.user.weixin.domain.UserWeixin;
import com.topdraw.business.process.domian.weixin.BindBean;
......@@ -11,6 +12,7 @@ import com.topdraw.business.process.rest.UserOperationController;
import com.topdraw.common.ResultInfo;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Base64Utils;
import java.sql.Timestamp;
......@@ -151,6 +153,25 @@ public class UserOperationControllerTest extends BaseTest {
}
@Test
public void appRegister() {
try {
UserApp userApp = new UserApp();
userApp.setUsername("18271269120");
// 类型 0:苹果;1:安卓;-1:未知
userApp.setType(1);
userApp.setAccount("fdsfsdfsdfs");
userApp.setAccountType(3);
ResultInfo weixinUserAndMember = this.userOperationController.appRegister(userApp);
System.out.println(weixinUserAndMember);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void createTvUserAndMember() {
try {
String a = "{\n" +
......