靓号-调整过期逻辑

This commit is contained in:
khalil
2025-04-08 15:33:23 +08:00
parent 5d38c9adbb
commit f9bd2f1632
6 changed files with 49 additions and 56 deletions

View File

@@ -11,6 +11,7 @@ import com.accompany.business.service.prettyno.PrettyNumberService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.pretty.PrettyNumberExamineVo;
import com.accompany.common.constant.Constant;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.enumeration.I18nAlertEnum;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.model.PartitionInfo;
@@ -123,22 +124,22 @@ public class PrettyNumberExamineAdminService {
examine.setStatus(PrettyNumberExamineStatusEnum.pass);
examine.setOperater(adminUser.getUsername());
long uid = examine.getUid();
//通过消息
PrettyNumber prettyNumber = prettyNumberService.get(examine.getPrettyNo());
if(prettyNumber.getStatus() == PrettyNumberStatusEnum.used.getValue()){
throw new AdminServiceException(500, "SID has used");
if (null == prettyNumber){
throw new AdminServiceException(BusiStatus.PRETTY_NUMBER_NOT_EXIST);
} else if (PrettyNumberStatusEnum.no_used.getValue() != prettyNumber.getStatus()
&& !prettyNumber.getUseUid().equals(uid)){
throw new AdminServiceException("SID has used");
}
//是否已经存在靓号
Users users = usersService.getUsersByUid(examine.getUid());
if (users.getHasPrettyErbanNo() !=null && users.getHasPrettyErbanNo()){
if (Boolean.TRUE.equals(users.getHasPrettyErbanNo())) {
PrettyNumber prettyNo = prettyNumberService.get(users.getErbanNo());
//全面解绑
prettyNumberService.unBindPrettyNo(prettyNo.getPrettyNo(), "新后台靓号活动审核通过,解绑以前靓号",adminUser.getUsername(),true);
}
if (prettyNumber.getStatus() == PrettyNumberStatusEnum.occupy.getValue()) {
//解除占用
prettyNumberService.removeOccupy(prettyNumber.getPrettyNo(), adminUser.getUsername());
prettyNumberService.unBindPrettyNo(prettyNo.getPrettyNo(), "新后台靓号活动审核通过,解绑以前靓号", adminUser.getUsername(),true);
}
//绑定靓号

View File

@@ -16,7 +16,6 @@ public class PrettyNumber {
private Integer wealthLevel;
private Long useUid;
private Long useErbanNo;
private Byte status;

View File

@@ -122,9 +122,9 @@ public class AccountService extends ServiceImpl<AccountMapper, Account> {
* @param erbanNo
* @return
*/
public Boolean updateAccountErbanNo(Long uid, Long erbanNo) {
public boolean updateAccountErbanNo(Long uid, Long erbanNo) {
Account account = getById(uid);
if (!StringUtils.isEmpty(account)) {
if (null != account) {
if (!CommonUtil.checkPhoneFormat(account.getPhoneAreaCode(),account.getPhone())) {
account.setPhone(CommonUtil.genSpecialPhoneForInitAccount(String.valueOf(erbanNo)));
}

View File

@@ -22,6 +22,7 @@ import com.google.gson.reflect.TypeToken;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
@@ -354,9 +355,8 @@ public class UsersBaseService extends BaseService {
saveUserCache(userDb);
}
public int updateByErbanNo(Long uid, Long erbanNo, boolean isPrettyNo) {
Boolean result = accountService.updateAccountErbanNo(uid, erbanNo);
public boolean updateByErbanNo(Long uid, Long erbanNo, boolean isPrettyNo) {
boolean result = accountService.updateAccountErbanNo(uid, erbanNo);
if (result) {
Users user = usersMapper.selectByPrimaryKey(uid);
if (user != null) {
@@ -366,10 +366,10 @@ public class UsersBaseService extends BaseService {
}
user.setErbanNo(erbanNo);
user.setHasPrettyErbanNo(isPrettyNo);
return usersMapper.updateByPrimaryKeySelective(user);
return usersMapper.updateByPrimaryKeySelective(user) > 0;
}
}
return 0;
return result;
}
public void updatePasswd(Users user, String newPasswd) {
@@ -387,14 +387,14 @@ public class UsersBaseService extends BaseService {
* @return
*/
public boolean changeErbanNo(Long uid, Long oldErbanNo, Long newErbanNo, boolean isPrettyNo) {
int count = updateByErbanNo(uid, newErbanNo, isPrettyNo);
if (count > 0) {
boolean result = updateByErbanNo(uid, newErbanNo, isPrettyNo);
if (result) {
// 清空用户关联的缓存
deleteUserRelateCache(uid.toString());
refreshErbanNoCache(uid, oldErbanNo, newErbanNo);
}
return count > 0;
return result;
}
public void deleteUserRelateCache(String uid) {

View File

@@ -73,7 +73,7 @@ public class PrettyNumberBizService {
return Collections.emptyList();
}
@Transactional
@Transactional(rollbackFor = Exception.class)
public void apply(Long uid, Long erbanNo) {
Users u = usersService.getNotNullUsersByUid(uid);
//找出靓号状态
@@ -85,7 +85,7 @@ public class PrettyNumberBizService {
prettyNumber.setUseUid(u.getUid());
prettyNumber.setUseErbanNo(u.getErbanNo());
if (u.getHasPrettyErbanNo() !=null && u.getHasPrettyErbanNo()){
if (Boolean.TRUE.equals(u.getHasPrettyErbanNo())){
PrettyNumber byPrettyNo = prettyNumberService.get(u.getErbanNo());
prettyNumber.setUseErbanNo(byPrettyNo.getUseErbanNo());
}

View File

@@ -12,6 +12,7 @@ import com.accompany.common.constant.Constant;
import com.accompany.common.status.BusiStatus;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.common.utils.StringUtils;
import com.accompany.core.base.SpringContextHolder;
import com.accompany.core.enumeration.I18nAlertEnum;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.PrettyNumber;
@@ -25,9 +26,9 @@ import com.accompany.core.vo.PrettyNumberVo;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@@ -76,6 +77,7 @@ public class PrettyNumberService extends ServiceImpl<PrettyNumberMapper, PrettyN
* @param days
* @param adminUserName
*/
@Transactional(rollbackFor = Exception.class)
public boolean bindPrettyNo(Long prettyNo, Long uid, String desc, Integer days, String adminUserName) {
PrettyNumber prettyNumber = get(prettyNo);
if (StringUtils.isEmpty(adminUserName)) {
@@ -87,7 +89,8 @@ public class PrettyNumberService extends ServiceImpl<PrettyNumberMapper, PrettyN
if (!prettyNumber.getIsValid()) {
throw new ServiceException(BusiStatus.PRETTY_NUMBER_NOT_VALID);
}
if (prettyNumber.getStatus() == PrettyNumberStatusEnum.used.getValue()) {
if (PrettyNumberStatusEnum.no_used.getValue() != prettyNumber.getStatus()
&& !prettyNumber.getUseUid().equals(uid)) {
throw new ServiceException(BusiStatus.PRETTY_NUMBER_ALREADY_USED);
}
@@ -142,6 +145,7 @@ public class PrettyNumberService extends ServiceImpl<PrettyNumberMapper, PrettyN
* @param prettyNo
* @param desc
*/
@Transactional(rollbackFor = Exception.class)
public boolean unBindPrettyNo(Long prettyNo, String desc, String adminUserName, boolean isAllUnBind) {
PrettyNumber prettyNumber = get(prettyNo);
if (StringUtils.isEmpty(adminUserName)) {
@@ -153,7 +157,7 @@ public class PrettyNumberService extends ServiceImpl<PrettyNumberMapper, PrettyN
if (!prettyNumber.getIsValid()) {
throw new ServiceException(BusiStatus.PRETTY_NUMBER_NOT_VALID);
}
if (prettyNumber.getStatus() != PrettyNumberStatusEnum.used.getValue()) {
if (PrettyNumberStatusEnum.used.getValue() != prettyNumber.getStatus()) {
throw new ServiceException(BusiStatus.PRETTY_NUMBER_NOT_USED);
}
@@ -164,10 +168,6 @@ public class PrettyNumberService extends ServiceImpl<PrettyNumberMapper, PrettyN
Long curErbanNo = prettyNumber.getPrettyNo();
Long targetErbanNo = prettyNumber.getUseErbanNo();
// 更改用户萌声号
usersService.updateUserTimeByErbanNo(curErbanNo);
usersService.updateUserTimeByErbanNo(targetErbanNo);
boolean isSuccess = usersBaseService.changeErbanNo(prettyNumber.getUseUid(), curErbanNo, targetErbanNo, false);
if (isSuccess) {
@@ -187,9 +187,8 @@ public class PrettyNumberService extends ServiceImpl<PrettyNumberMapper, PrettyN
PrettyNumberRecord record = buildRecord(prettyNo, curErbanNo, users.getUid(), targetErbanNo,
desc, PrettyNumberOperatorEnum.unbind, null, null, adminUserName);
recordMapper.insert(record);
return true;
}
return false;
return isSuccess;
}
/**
@@ -303,16 +302,18 @@ public class PrettyNumberService extends ServiceImpl<PrettyNumberMapper, PrettyN
long now = System.currentTimeMillis();
usedList.forEach((pretty) -> {
try {
// TODO 考虑EventSourcing实现.
List<PrettyNumberRecord> recordList = findBindRecordByPretty(pretty.getPrettyNo());
if (CollectionUtils.isNotEmpty(recordList)) {
PrettyNumberRecord record = recordList.get(recordList.size() - 1);
Date endTime = record.getEndTime();
if (endTime.getTime() <= now) {
afterPrettyNoExpire(pretty,"系統掃描靚號過期.進行解綁");
}
PrettyNumberRecord record = findBindRecordByPretty(pretty.getPrettyNo(), pretty.getUseUid());
if (null == record){
return;
}
Date endTime = record.getEndTime();
if (endTime.getTime() > now) {
return;
}
afterPrettyNoExpire(pretty, now);
} catch (Exception e) {
log.error("Failed to scan pretty number for uid: {}, Please check it.", pretty.getUseUid(), e);
}
@@ -320,11 +321,11 @@ public class PrettyNumberService extends ServiceImpl<PrettyNumberMapper, PrettyN
}
public void afterPrettyNoExpire(PrettyNumber pretty, String desc){
public void afterPrettyNoExpire(PrettyNumber pretty, long now){
String desc = (pretty.getPrettyDesc()!=null?pretty.getPrettyDesc():"")
+(" ["+DateTimeUtil.getCurrentDateTime()+" 靚號過期]");
// 解绑靓号
unBindPrettyNo(pretty.getPrettyNo(), desc, DEFAULT_OPERATOR, true);
// 下架靓号
prettyNoExpire(pretty.getPrettyNo());
SpringContextHolder.getBean(PrettyNumberService.class).unBindPrettyNo(pretty.getPrettyNo(), desc, DEFAULT_OPERATOR, true);
// 发送过期小秘书通知
sendExpiredMsg(pretty.getUseUid(), pretty.getPrettyNo());
}
@@ -363,10 +364,12 @@ public class PrettyNumberService extends ServiceImpl<PrettyNumberMapper, PrettyN
* @param prettyNo
* @return
*/
public List<PrettyNumberRecord> findBindRecordByPretty(Long prettyNo) {
return recordMapper.selectList(Wrappers.<PrettyNumberRecord>lambdaQuery()
public PrettyNumberRecord findBindRecordByPretty(Long prettyNo, Long uid) {
return recordMapper.selectOne(Wrappers.<PrettyNumberRecord>lambdaQuery()
.eq(PrettyNumberRecord::getPrettyNo, prettyNo)
.eq(PrettyNumberRecord::getOperator, PrettyNumberOperatorEnum.bind.getValue()));
.eq(PrettyNumberRecord::getUid, uid)
.eq(PrettyNumberRecord::getOperator, PrettyNumberOperatorEnum.bind.getValue())
.orderByDesc(PrettyNumberRecord::getCreateTime), false);
}
public void sendMsg(Long prettyNumber, Long uid) {
@@ -379,16 +382,6 @@ public class PrettyNumberService extends ServiceImpl<PrettyNumberMapper, PrettyN
sendSysMsgService.sendMsg(neteaseSendMsgParam);
}
private void prettyNoExpire(Long prettyNo){
// 下架靓号
PrettyNumber pretty = get(prettyNo);
pretty.setIsValid(false);
pretty.setUpdateTime(new Date());
pretty.setPrettyDesc((pretty.getPrettyDesc()!=null?pretty.getPrettyDesc():"")
+(" ["+DateTimeUtil.getCurrentDateTime()+" 靚號過期]"));
this.mapper.updateById(pretty);
}
public List<PrettyNumberVo> search(int wealthLevel, List<String> searchKey) {
return this.mapper.search(wealthLevel, searchKey);
}