记得上下班打卡 | git大法好,push需谨慎

Commit cc695400 authored by 张国柄's avatar 张国柄

fix;

parent f1200510
......@@ -48,12 +48,12 @@ public class AdamRedisConst {
/* ----------------------------------------------------------------- */
public static final String LOCK_KEY_UMEMBER_NO = "adam:lk:member:no";
// public static final String LOCK_KEY_UMEMBER_NO = "adam:lk:member:no";
// // // // // // // // // //
public static final String LOCK_KEY_SMS_CODE_MOBILE = "adam:lk:sms:code:mobile:";
public static final String LOCK_KEY_UREGISTER = "adam:lk:register:";
public static final String LOCK_KEY_UIDENTITY = "adam:lk:identity:";
public static final String LOCK_KEY_UMEMBER_CODE = "adam:lk:member:code:";
// public static final String LOCK_KEY_SMS_CODE_MOBILE = "adam:lk:sms:code:mobile:";
// public static final String LOCK_KEY_UREGISTER = "adam:lk:register:";
// public static final String LOCK_KEY_UIDENTITY = "adam:lk:identity:";
// public static final String LOCK_KEY_UMEMBER_CODE = "adam:lk:member:code:";
/* ----------------------------------------------------------------- */
}
......@@ -3,36 +3,28 @@ package com.liquidnet.client.admin.zhengzai.adam.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberCodeAdminService;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.cache.redisson.util.RedisLockUtil;
import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.AdamMemberCodeParam;
import com.liquidnet.service.adam.dto.vo.AdamMemberCodeVo;
import com.liquidnet.service.adam.dto.vo.AdamMemberVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.adam.entity.AdamMemberCode;
import com.liquidnet.service.adam.mapper.AdamMemberCodeMapper;
import com.liquidnet.service.adam.util.MemberUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
import java.util.regex.Pattern;
import static com.liquidnet.service.adam.constant.AdamRedisConst.LOCK_KEY_UMEMBER_NO;
@Slf4j
@Service
public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMapper, AdamMemberCode> implements IAdamMemberCodeAdminService {
@Autowired
AdamMemberCodeMapper memberCodeMapper;
@Autowired
MongoTemplate mongoTemplate;
// @Autowired
// MongoTemplate mongoTemplate;
@Autowired
RedisUtil redisUtil;
......@@ -42,9 +34,10 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa
boolean exists;
do {
mCode = MemberUtil.freeCode();
exists = mongoTemplate.exists(
Query.query(Criteria.where("code").is(mCode)), AdamMemberCodeVo.class.getSimpleName()
);
// exists = mongoTemplate.exists(
// Query.query(Criteria.where("code").is(mCode)), AdamMemberCodeVo.class.getSimpleName()
// );
exists = redisUtil.hasKey(mCode);
} while (exists);
// 需要主动生成会员编号
......@@ -64,7 +57,7 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa
memberCodeMapper.insert(initMemberCode);
AdamMemberCodeVo vo = AdamMemberCodeVo.getNew().copy(initMemberCode);
mongoTemplate.insert(vo, AdamMemberCodeVo.class.getSimpleName());
// mongoTemplate.insert(vo, AdamMemberCodeVo.class.getSimpleName());
setMemberCodeVoByCode(mCode, vo);
......@@ -75,25 +68,27 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa
long s = System.currentTimeMillis();
int memberMaxNo = getMaxMemberNo();
if (-1 == memberMaxNo) {
if (RedisLockUtil.tryLock(LOCK_KEY_UMEMBER_NO, 1, 3)) {
memberMaxNo = getMaxMemberNo();
if (-1 == memberMaxNo) {
Query query = Query.query(Criteria.where("memberId").is(memberId)).with(Sort.by(Sort.Direction.DESC, "memberNo")).limit(1);
AdamUserMemberVo latestMaxMemberNoVo = mongoTemplate.findOne(query, AdamUserMemberVo.class, AdamUserMemberVo.class.getSimpleName());
if (null == latestMaxMemberNoVo) {
AdamMemberVo memberVo = getMemberVoByMemberId(memberId);
setMaxMemberNo(memberVo.getStartNo());
} else {
setMaxMemberNo(Integer.parseInt(latestMaxMemberNoVo.getMemberNo()));
}
}
RedisLockUtil.unlock(LOCK_KEY_UMEMBER_NO);
} else {
return null;
}
// TODO: 2021/7/29 降级DB
throw new LiquidnetServiceException();
// if (RedisLockUtil.tryLock(LOCK_KEY_UMEMBER_NO, 1, 3)) {
// memberMaxNo = getMaxMemberNo();
// if (-1 == memberMaxNo) {
// Query query = Query.query(Criteria.where("memberId").is(memberId)).with(Sort.by(Sort.Direction.DESC, "memberNo")).limit(1);
//
// AdamUserMemberVo latestMaxMemberNoVo = mongoTemplate.findOne(query, AdamUserMemberVo.class, AdamUserMemberVo.class.getSimpleName());
//
// if (null == latestMaxMemberNoVo) {
// AdamMemberVo memberVo = getMemberVoByMemberId(memberId);
//
// setMaxMemberNo(memberVo.getStartNo());
// } else {
// setMaxMemberNo(Integer.parseInt(latestMaxMemberNoVo.getMemberNo()));
// }
// }
// RedisLockUtil.unlock(LOCK_KEY_UMEMBER_NO);
// } else {
// return null;
// }
}
String nextMemberNoStr = String.valueOf(incrMemberNo());
if (Pattern.matches("([\\d])\\1{" + (nextMemberNoStr.length() - 1) + "}", nextMemberNoStr)) {
......@@ -109,22 +104,22 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa
return null == o ? -1 : (int) o;
}
public AdamMemberVo getMemberVoByMemberId(String memberId) {
String key = AdamRedisConst.INFO_MEMBER_CATEGORY.concat(memberId);
long s = System.currentTimeMillis();
AdamMemberVo vo = (AdamMemberVo) redisUtil.get(key);
if (null == vo) {
s = System.currentTimeMillis();
vo = mongoTemplate.findOne(
Query.query(Criteria.where("memberId").is(memberId).and("state").is(1)),
AdamMemberVo.class, AdamMemberVo.class.getSimpleName()
);
log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
if (null != vo) redisUtil.set(key, vo);
}
log.debug("#RDM耗时:{}ms", System.currentTimeMillis() - s);
return vo;
}
// public AdamMemberVo getMemberVoByMemberId(String memberId) {
// String key = AdamRedisConst.INFO_MEMBER_CATEGORY.concat(memberId);
// long s = System.currentTimeMillis();
// AdamMemberVo vo = (AdamMemberVo) redisUtil.get(key);
// if (null == vo) {
// s = System.currentTimeMillis();
// vo = mongoTemplate.findOne(
// Query.query(Criteria.where("memberId").is(memberId).and("state").is(1)),
// AdamMemberVo.class, AdamMemberVo.class.getSimpleName()
// );
// log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
// if (null != vo) redisUtil.set(key, vo);
// }
// log.debug("#RDM耗时:{}ms", System.currentTimeMillis() - s);
// return vo;
// }
public boolean setMaxMemberNo(int val) {
return redisUtil.set(AdamRedisConst.INCR_MEMBER_NO, val);
......
......@@ -9,7 +9,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.cache.redisson.util.RedisLockUtil;
import com.liquidnet.common.sms.constant.SmsEnum;
import com.liquidnet.common.sms.processor.SmsProcessor;
import com.liquidnet.commons.lang.constant.LnsEnum;
......@@ -49,8 +48,6 @@ import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import static com.liquidnet.service.adam.constant.AdamRedisConst.LOCK_KEY_SMS_CODE_MOBILE;
@ApiSupport(order = 10010)
@Api(tags = "用户登录")
@Slf4j
......@@ -132,7 +129,6 @@ public class AdamLoginController {
@GetMapping(value = {"send"})
public ResponseDto<Object> sendSms(@Pattern(regexp = "\\d{11}", message = "手机号格式有误") @RequestParam String mobile) {
log.debug("send to mobile:{}", mobile);
if (RedisLockUtil.tryLock(LOCK_KEY_SMS_CODE_MOBILE + mobile, 1, 5)) {
// Map<String, Object> respMap = null;
// String respStr = null;
// try {
......@@ -163,6 +159,12 @@ public class AdamLoginController {
// return ResponseDto.failure(ErrorMapping.get("10003"));
// }
String smsCodeByMobile = adamRdmService.getSmsCodeByMobile(mobile);
if (StringUtils.isNotEmpty(smsCodeByMobile)) {
return ResponseDto.failure(ErrorMapping.get("10003"));
}
String smsCode = RandomStringUtils.randomNumeric(6);
// SmsMessage smsMessage = SmsMessage.builder().setPhone(mobile).setSignName(SmsEnum.ADSignName.正在现场.name())
// .setTemplateCode(SmsEnum.ADTemplate.SMS_109535335.name())
......@@ -177,9 +179,6 @@ public class AdamLoginController {
return ResponseDto.success();
}
return ResponseDto.failure(ErrorMapping.get("10002"));
} else {
return ResponseDto.failure(ErrorMapping.get("10000"));
}
}
@ApiOperationSupport(order = 3)
......
package com.liquidnet.service.adam.controller;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.pagehelper.PageInfo;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.common.cache.redisson.util.RedisLockUtil;
import com.liquidnet.commons.lang.constant.LnsEnum;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
......@@ -16,8 +14,8 @@ import com.liquidnet.service.adam.dto.AdamMemberOrderCodeParam;
import com.liquidnet.service.adam.dto.AdamMemberOrderParam;
import com.liquidnet.service.adam.dto.AdamMemberOrderResult;
import com.liquidnet.service.adam.dto.vo.*;
import com.liquidnet.service.adam.service.IAdamMemberOrderService;
import com.liquidnet.service.adam.service.AdamRdmService;
import com.liquidnet.service.adam.service.IAdamMemberOrderService;
import com.liquidnet.service.adam.service.IAdamUserService;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.PagedResult;
......@@ -36,11 +34,8 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;
import static com.liquidnet.service.adam.constant.AdamRedisConst.LOCK_KEY_UMEMBER_CODE;
@ApiSupport(order = 10031)
@Api(tags = "购买会员")
@Slf4j
......@@ -225,16 +220,16 @@ public class AdamMemberOrderController {
return ResponseDto.failure(ErrorMapping.get("10000"));
}
}
if (RedisLockUtil.tryLock(LOCK_KEY_UMEMBER_CODE + param.getMemberCode(), 1, 5)) {
// if (RedisLockUtil.tryLock(LOCK_KEY_UMEMBER_CODE + param.getMemberCode(), 1, 5)) {
ResponseDto<AdamMemberOrderResult> responseDto = adamMemberOrderService.exchangeMemberCode(param);
if (!responseDto.isSuccess()) {
RedisLockUtil.unlock(LOCK_KEY_UMEMBER_CODE + param.getMemberCode());
}
// if (!responseDto.isSuccess()) {
// RedisLockUtil.unlock(LOCK_KEY_UMEMBER_CODE + param.getMemberCode());
// }
return responseDto;
} else {
return ResponseDto.failure(ErrorMapping.get("10000"));
}
// } else {
// return ResponseDto.failure(ErrorMapping.get("10000"));
// }
}
@ApiOperationSupport(order = 5)
......
......@@ -50,7 +50,8 @@ public class AdamRdmService {
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | <Mobile, SMS CODE> */
public boolean setSmsCodeByMobile(String mobile, String smsCode) {
return redisUtil.set(AdamRedisConst.VALID_SMS_CODE_MOBILE + mobile, smsCode, 15 * 60);
// TODO: 2021/7/29 改为1分钟
return redisUtil.set(AdamRedisConst.VALID_SMS_CODE_MOBILE + mobile, smsCode, 1 * 60);
}
public String getSmsCodeByMobile(String mobile) {
......@@ -526,28 +527,14 @@ public class AdamRdmService {
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | <AdamMemberCodeVo::buyOrderNo, MEMBER_CODE + STATE> */
public boolean setMemberCodeByBuyOrderNo(String buyOrderNo, String memberCodeAndState) {
return redisUtil.set(buyOrderNo, memberCodeAndState);
public boolean setMemberCodeByBuyOrderNo(String buyOrderNo, String memberCode) {
return redisUtil.set(buyOrderNo, memberCode);
}
public String getMemberCodeByBuyOrderNo(String buyOrderNo) {
return (String) redisUtil.get(buyOrderNo);
}
public int getMemberCodeStateByBuyOrderNoVal(String memberCodeAndState) {
if (StringUtils.isEmpty(memberCodeAndState)) {
return 0;
}
return Integer.parseInt(org.apache.commons.lang3.StringUtils.right(memberCodeAndState, 1));
}
public String getMemberCodeByBuyOrderNoVal(String memberCodeAndState) {
if (StringUtils.isEmpty(memberCodeAndState)) {
return "";
}
return memberCodeAndState.substring(0, memberCodeAndState.length() - 1);
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | */
/**
......@@ -562,11 +549,7 @@ public class AdamRdmService {
// );
// log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
// return vo;
String memberCodeByBuyOrderNo = this.getMemberCodeByBuyOrderNo(buyOrderNo);
AdamMemberCodeVo vo = AdamMemberCodeVo.getNew();
vo.setCode(this.getMemberCodeByBuyOrderNoVal(memberCodeByBuyOrderNo));
vo.setState(this.getMemberCodeStateByBuyOrderNoVal(memberCodeByBuyOrderNo));
return vo;
return this.getMemberCodeVoByCode(this.getMemberCodeByBuyOrderNo(buyOrderNo));
}
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | TAGS:List<AdamTagVo> */
......
......@@ -312,83 +312,86 @@ public class AdamMemberOrderServiceImpl implements IAdamMemberOrderService {
if (null == memberCodeVo) {
return ResponseDto.failure(ErrorMapping.get("10207"));
}
if (memberCodeVo.getState() != 0) {
return ResponseDto.failure(ErrorMapping.get(memberCodeVo.getState() == 1 ? "10208" : "10209"));
}
AdamMemberPriceVo memberPriceVo = adamRdmService.getMemberPriceVoByPriceId(memberCodeVo.getMemberId(), memberCodeVo.getMemberPriceId());
if (null == memberPriceVo) {
return ResponseDto.failure(ErrorMapping.get("10202"));
}
AdamMemberVo memberVo = adamRdmService.getMemberVoByMemberId(memberCodeVo.getMemberId());
LocalDateTime now = LocalDateTime.now();
// 创建会员订单
AdamMemberOrderVo initMemberOrderVo = AdamMemberOrderVo.getNew();
initMemberOrderVo.setOrderNo(IDGenerator.nextSnowId().concat("V"));
initMemberOrderVo.setUid(CurrentUtil.getCurrentUid());
initMemberOrderVo.setMode(param.getMode());
initMemberOrderVo.setPrice(memberPriceVo.getPrice());
initMemberOrderVo.setPricePaid(BigDecimal.ZERO);
initMemberOrderVo.setMemberName(memberVo.getName());
initMemberOrderVo.setMemberId(memberCodeVo.getMemberId());
initMemberOrderVo.setMemberPriceId(memberCodeVo.getMemberPriceId());
initMemberOrderVo.setDays(memberPriceVo.getDays());
initMemberOrderVo.setState(1);// 0-待支付,1-已支付
initMemberOrderVo.setMemberNo(memberCodeVo.getMemberNo());
initMemberOrderVo.setBirthday(param.getBirthday());
initMemberOrderVo.setDeviceFrom(param.getDeviceFrom());
initMemberOrderVo.setPayType(param.getMode() == 2 ? "vipcode" : "giftcode");
initMemberOrderVo.setPayNo(memberCodeVo.getCode());
initMemberOrderVo.setPaymentAt(now);
initMemberOrderVo.setCreatedAt(now);
initMemberOrderVo.setClientIp(CurrentUtil.getCliIpAddr());
String headerCliVersion = CurrentUtil.getHeaderCliVersion(), headerCliSource = CurrentUtil.getHeaderCliSource();
initMemberOrderVo.setSource(null == headerCliSource ? "" : headerCliSource);
initMemberOrderVo.setVersion(null == headerCliVersion ? "" : headerCliVersion);
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
LinkedList<Object[]> updateMemberCodeObjs = CollectionUtil.linkedListObjectArr(),
initMemberOrderObjs = CollectionUtil.linkedListObjectArr(),
upsertUserMemberObjs = CollectionUtil.linkedListObjectArr();
AdamUserMemberVo upsertUserMemberVo = adamRdmService.getUserMemberVoByUid(initMemberOrderVo.getUid());
if (null != upsertUserMemberVo) {
upsertUserMemberVo.setState(1);
LocalDateTime expiryAt = upsertUserMemberVo.getExpiryAt();
upsertUserMemberVo.setExpiryAt(
(expiryAt.isBefore(now) ? now : expiryAt).plusDays(initMemberOrderVo.getDays()).with(LocalTime.MAX)
);
// long s = System.currentTimeMillis();
// mongoTemplate.getCollection(AdamUserMemberVo.class.getSimpleName()).updateOne(
// Query.query(Criteria.where("uid").is(upsertUserMemberVo.getUid())).getQueryObject(),
// new Document("$set", new Document("expiryAt", upsertUserMemberVo.getExpiryAt()).append("state", 1))
// );
// log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
toMqSqls.add(SqlMapping.get("adam_user_member.update"));
upsertUserMemberObjs.add(new Object[]{
upsertUserMemberVo.getState(), upsertUserMemberVo.getExpiryAt(), now, upsertUserMemberVo.getUid()
});
} else {
upsertUserMemberVo = AdamUserMemberVo.getNew();
upsertUserMemberVo.setUid(initMemberOrderVo.getUid());
upsertUserMemberVo.setMemberId(memberCodeVo.getMemberId());
upsertUserMemberVo.setMemberNo(memberCodeVo.getMemberNo());
upsertUserMemberVo.setState(1);
upsertUserMemberVo.setExpiryAt(now.plusDays(initMemberOrderVo.getDays()).with(LocalTime.MAX));
upsertUserMemberVo.setCreatedAt(now);
// long s = System.currentTimeMillis();
// mongoTemplate.insert(upsertUserMemberVo, AdamUserMemberVo.class.getSimpleName());
// log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
toMqSqls.add(SqlMapping.get("adam_user_member.add"));
upsertUserMemberObjs.add(new Object[]{
upsertUserMemberVo.getUid(), upsertUserMemberVo.getMemberId(), upsertUserMemberVo.getMemberNo(),
upsertUserMemberVo.getState(), upsertUserMemberVo.getExpiryAt(), upsertUserMemberVo.getCreatedAt()
});
}
long s = System.currentTimeMillis();
adamRdmService.setUserMemberVoByUid(initMemberOrderVo.getUid(), upsertUserMemberVo);
adamRdmService.delMemberCodeVoByCode(memberCodeVo.getCode());
log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s);
AdamMemberOrderVo initMemberOrderVo = null;
try {
adamRdmService.delMemberCodeVoByCode(param.getMemberCode());
if (memberCodeVo.getState() != 0) {
return ResponseDto.failure(ErrorMapping.get(memberCodeVo.getState() == 1 ? "10208" : "10209"));
}
AdamMemberPriceVo memberPriceVo = adamRdmService.getMemberPriceVoByPriceId(memberCodeVo.getMemberId(), memberCodeVo.getMemberPriceId());
if (null == memberPriceVo) {
return ResponseDto.failure(ErrorMapping.get("10202"));
}
AdamMemberVo memberVo = adamRdmService.getMemberVoByMemberId(memberCodeVo.getMemberId());
LocalDateTime now = LocalDateTime.now();
// 创建会员订单
initMemberOrderVo = AdamMemberOrderVo.getNew();
initMemberOrderVo.setOrderNo(IDGenerator.nextSnowId().concat("V"));
initMemberOrderVo.setUid(CurrentUtil.getCurrentUid());
initMemberOrderVo.setMode(param.getMode());
initMemberOrderVo.setPrice(memberPriceVo.getPrice());
initMemberOrderVo.setPricePaid(BigDecimal.ZERO);
initMemberOrderVo.setMemberName(memberVo.getName());
initMemberOrderVo.setMemberId(memberCodeVo.getMemberId());
initMemberOrderVo.setMemberPriceId(memberCodeVo.getMemberPriceId());
initMemberOrderVo.setDays(memberPriceVo.getDays());
initMemberOrderVo.setState(1);// 0-待支付,1-已支付
initMemberOrderVo.setMemberNo(memberCodeVo.getMemberNo());
initMemberOrderVo.setBirthday(param.getBirthday());
initMemberOrderVo.setDeviceFrom(param.getDeviceFrom());
initMemberOrderVo.setPayType(param.getMode() == 2 ? "vipcode" : "giftcode");
initMemberOrderVo.setPayNo(memberCodeVo.getCode());
initMemberOrderVo.setPaymentAt(now);
initMemberOrderVo.setCreatedAt(now);
initMemberOrderVo.setClientIp(CurrentUtil.getCliIpAddr());
String headerCliVersion = CurrentUtil.getHeaderCliVersion(), headerCliSource = CurrentUtil.getHeaderCliSource();
initMemberOrderVo.setSource(null == headerCliSource ? "" : headerCliSource);
initMemberOrderVo.setVersion(null == headerCliVersion ? "" : headerCliVersion);
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
LinkedList<Object[]> updateMemberCodeObjs = CollectionUtil.linkedListObjectArr(),
initMemberOrderObjs = CollectionUtil.linkedListObjectArr(),
upsertUserMemberObjs = CollectionUtil.linkedListObjectArr();
AdamUserMemberVo upsertUserMemberVo = adamRdmService.getUserMemberVoByUid(initMemberOrderVo.getUid());
if (null != upsertUserMemberVo) {
upsertUserMemberVo.setState(1);
LocalDateTime expiryAt = upsertUserMemberVo.getExpiryAt();
upsertUserMemberVo.setExpiryAt(
(expiryAt.isBefore(now) ? now : expiryAt).plusDays(initMemberOrderVo.getDays()).with(LocalTime.MAX)
);
// long s = System.currentTimeMillis();
// mongoTemplate.getCollection(AdamUserMemberVo.class.getSimpleName()).updateOne(
// Query.query(Criteria.where("uid").is(upsertUserMemberVo.getUid())).getQueryObject(),
// new Document("$set", new Document("expiryAt", upsertUserMemberVo.getExpiryAt()).append("state", 1))
// );
// log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
toMqSqls.add(SqlMapping.get("adam_user_member.update"));
upsertUserMemberObjs.add(new Object[]{
upsertUserMemberVo.getState(), upsertUserMemberVo.getExpiryAt(), now, upsertUserMemberVo.getUid()
});
} else {
upsertUserMemberVo = AdamUserMemberVo.getNew();
upsertUserMemberVo.setUid(initMemberOrderVo.getUid());
upsertUserMemberVo.setMemberId(memberCodeVo.getMemberId());
upsertUserMemberVo.setMemberNo(memberCodeVo.getMemberNo());
upsertUserMemberVo.setState(1);
upsertUserMemberVo.setExpiryAt(now.plusDays(initMemberOrderVo.getDays()).with(LocalTime.MAX));
upsertUserMemberVo.setCreatedAt(now);
// long s = System.currentTimeMillis();
// mongoTemplate.insert(upsertUserMemberVo, AdamUserMemberVo.class.getSimpleName());
// log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
toMqSqls.add(SqlMapping.get("adam_user_member.add"));
upsertUserMemberObjs.add(new Object[]{
upsertUserMemberVo.getUid(), upsertUserMemberVo.getMemberId(), upsertUserMemberVo.getMemberNo(),
upsertUserMemberVo.getState(), upsertUserMemberVo.getExpiryAt(), upsertUserMemberVo.getCreatedAt()
});
}
long s = System.currentTimeMillis();
adamRdmService.setUserMemberVoByUid(initMemberOrderVo.getUid(), upsertUserMemberVo);
// adamRdmService.delMemberCodeVoByCode(memberCodeVo.getCode());
log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s);
// Document updateMemberCodeVo = new Document("state", 1)
// .append("updatedAt", now)
......@@ -401,29 +404,38 @@ public class AdamMemberOrderServiceImpl implements IAdamMemberOrderService {
// new Document("$set", updateMemberCodeVo)
// );
// log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
toMqSqls.add(SqlMapping.get("adam_member_code.exchange"));
updateMemberCodeObjs.add(new Object[]{
1, now, initMemberOrderVo.getOrderNo(), upsertUserMemberVo.getUid(), now, memberCodeVo.getCode()
});
toMqSqls.add(SqlMapping.get("adam_member_code.exchange"));
updateMemberCodeObjs.add(new Object[]{
1, now, initMemberOrderVo.getOrderNo(), upsertUserMemberVo.getUid(), now, memberCodeVo.getCode()
});
// s = System.currentTimeMillis();
// mongoTemplate.insert(initMemberOrderVo, AdamMemberOrderVo.class.getSimpleName());
// log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
toMqSqls.add(SqlMapping.get("adam_member_order.add"));
initMemberOrderObjs.add(new Object[]{
initMemberOrderVo.getOrderNo(), initMemberOrderVo.getUid(), initMemberOrderVo.getMode(), initMemberOrderVo.getPrice(),
initMemberOrderVo.getPricePaid(), initMemberOrderVo.getMemberName(), initMemberOrderVo.getMemberId(), initMemberOrderVo.getMemberPriceId(),
initMemberOrderVo.getDays(), initMemberOrderVo.getState(), initMemberOrderVo.getMemberNo(), initMemberOrderVo.getBirthday(),
initMemberOrderVo.getDeviceFrom(), initMemberOrderVo.getPayType(), initMemberOrderVo.getPayNo(), initMemberOrderVo.getPaymentAt(),
initMemberOrderVo.getCreatedAt(), initMemberOrderVo.getClientIp(), initMemberOrderVo.getSource(), initMemberOrderVo.getVersion()
});
toMqSqls.add(SqlMapping.get("adam_member_order.add"));
initMemberOrderObjs.add(new Object[]{
initMemberOrderVo.getOrderNo(), initMemberOrderVo.getUid(), initMemberOrderVo.getMode(), initMemberOrderVo.getPrice(),
initMemberOrderVo.getPricePaid(), initMemberOrderVo.getMemberName(), initMemberOrderVo.getMemberId(), initMemberOrderVo.getMemberPriceId(),
initMemberOrderVo.getDays(), initMemberOrderVo.getState(), initMemberOrderVo.getMemberNo(), initMemberOrderVo.getBirthday(),
initMemberOrderVo.getDeviceFrom(), initMemberOrderVo.getPayType(), initMemberOrderVo.getPayNo(), initMemberOrderVo.getPaymentAt(),
initMemberOrderVo.getCreatedAt(), initMemberOrderVo.getClientIp(), initMemberOrderVo.getSource(), initMemberOrderVo.getVersion()
});
s = System.currentTimeMillis();
queueUtils.sendMsgByRedis(
MQConst.AdamQueue.SQL_UMEMBER.getKey(),
SqlMapping.gets(toMqSqls, upsertUserMemberObjs, updateMemberCodeObjs, initMemberOrderObjs)
);
log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s);
s = System.currentTimeMillis();
queueUtils.sendMsgByRedis(
MQConst.AdamQueue.SQL_UMEMBER.getKey(),
SqlMapping.gets(toMqSqls, upsertUserMemberObjs, updateMemberCodeObjs, initMemberOrderObjs)
);
log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s);
} catch (Exception e) {
log.error("会员兑换发生异常[memberCodeVo={}]", JsonUtils.toJson(memberCodeVo), e);
adamRdmService.setMemberCodeVoByCode(memberCodeVo.getCode(), memberCodeVo);
if (null != initMemberOrderVo) {
adamRdmService.delUserMemberVoByUid(initMemberOrderVo.getUid());
}
return ResponseDto.failure(ErrorMapping.get("10214"));
}
AdamMemberOrderResult result = AdamMemberOrderResult.getNew();
result.setOrderNo(initMemberOrderVo.getOrderNo());
......
package com.liquidnet.service.adam.service.impl;
import com.liquidnet.common.cache.redisson.util.RedisLockUtil;
import com.liquidnet.service.adam.dto.vo.AdamMemberVo;
import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.service.adam.service.AdamRdmService;
import com.liquidnet.service.adam.service.IAdamUserMemberService;
import lombok.extern.slf4j.Slf4j;
......@@ -10,8 +9,6 @@ import org.springframework.stereotype.Service;
import java.util.regex.Pattern;
import static com.liquidnet.service.adam.constant.AdamRedisConst.LOCK_KEY_UMEMBER_NO;
@Slf4j
@Service
public class AdamUserMemberServiceImpl implements IAdamUserMemberService {
......@@ -25,25 +22,27 @@ public class AdamUserMemberServiceImpl implements IAdamUserMemberService {
long s = System.currentTimeMillis();
int memberMaxNo = adamRdmService.getMaxMemberNo();
if (-1 == memberMaxNo) {
if (RedisLockUtil.tryLock(LOCK_KEY_UMEMBER_NO, 1, 3)) {
memberMaxNo = adamRdmService.getMaxMemberNo();
if (-1 == memberMaxNo) {
// Query query = Query.query(Criteria.where("memberId").is(memberId)).with(Sort.by(Sort.Direction.DESC, "memberNo")).limit(1);
//
// AdamUserMemberVo latestMaxMemberNoVo = mongoTemplate.findOne(query, AdamUserMemberVo.class, AdamUserMemberVo.class.getSimpleName());
// TODO: 2021/7/29 降级DB
throw new LiquidnetServiceException();
// if (RedisLockUtil.tryLock(LOCK_KEY_UMEMBER_NO, 1, 3)) {
// memberMaxNo = adamRdmService.getMaxMemberNo();
// if (-1 == memberMaxNo) {
//// Query query = Query.query(Criteria.where("memberId").is(memberId)).with(Sort.by(Sort.Direction.DESC, "memberNo")).limit(1);
////
//// AdamUserMemberVo latestMaxMemberNoVo = mongoTemplate.findOne(query, AdamUserMemberVo.class, AdamUserMemberVo.class.getSimpleName());
////
//// if (null == latestMaxMemberNoVo) {
// AdamMemberVo memberVo = adamRdmService.getMemberVoByMemberId(memberId);
//
// if (null == latestMaxMemberNoVo) {
AdamMemberVo memberVo = adamRdmService.getMemberVoByMemberId(memberId);
adamRdmService.setMaxMemberNo(memberVo.getStartNo());
// } else {
// adamRdmService.setMaxMemberNo(Integer.parseInt(latestMaxMemberNoVo.getMemberNo()));
// }
}
RedisLockUtil.unlock(LOCK_KEY_UMEMBER_NO);
} else {
return null;
}
// adamRdmService.setMaxMemberNo(memberVo.getStartNo());
//// } else {
//// adamRdmService.setMaxMemberNo(Integer.parseInt(latestMaxMemberNoVo.getMemberNo()));
//// }
// }
// RedisLockUtil.unlock(LOCK_KEY_UMEMBER_NO);
// } else {
// return null;
// }
}
String nextMemberNoStr = String.valueOf(adamRdmService.incrMemberNo());
if (Pattern.matches("([\\d])\\1{" + (nextMemberNoStr.length() - 1) + "}", nextMemberNoStr)) {
......
package com.liquidnet.service.adam.service.impl;
import com.fasterxml.jackson.databind.JsonNode;
import com.liquidnet.common.cache.redisson.util.RedisLockUtil;
import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.AdamThirdPartParam;
import com.liquidnet.service.adam.dto.vo.AdamRealInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamThirdPartInfoVo;
......@@ -34,8 +32,6 @@ import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
import static com.liquidnet.service.adam.constant.AdamRedisConst.LOCK_KEY_UREGISTER;
/**
* <p>
* 用户 服务实现类
......@@ -70,7 +66,7 @@ public class AdamUserServiceImpl implements IAdamUserService {
LocalDateTime now = LocalDateTime.now();
AdamUserInfoVo userInfoVo = null;
if (RedisLockUtil.tryLock(LOCK_KEY_UREGISTER + mobile, 1, 5)) {
// if (RedisLockUtil.tryLock(LOCK_KEY_UREGISTER + mobile, 1, 5)) {
String uid = adamRdmService.getUidByMobile(mobile);
if (StringUtils.isEmpty(uid)) {
userInfoVo = AdamUserInfoVo.getNew();
......@@ -110,8 +106,8 @@ public class AdamUserServiceImpl implements IAdamUserService {
} else {
userInfoVo = adamRdmService.getUserInfoVoByUid(uid);
}
RedisLockUtil.unlock(LOCK_KEY_UREGISTER + mobile);
}
// RedisLockUtil.unlock(LOCK_KEY_UREGISTER + mobile);
// }
return userInfoVo;
}
......@@ -121,7 +117,7 @@ public class AdamUserServiceImpl implements IAdamUserService {
LocalDateTime now = LocalDateTime.now();
AdamUserInfoVo userInfoVo = null;
if (RedisLockUtil.tryLock(LOCK_KEY_UREGISTER + param.getOpenId() + param.getPlatform(), 1, 5)) {
// if (RedisLockUtil.tryLock(LOCK_KEY_UREGISTER + param.getOpenId() + param.getPlatform(), 1, 5)) {
String uid = adamRdmService.getUidByPlatformOpenId(param.getPlatform(), param.getOpenId());
if (StringUtils.isEmpty(uid)) {
long s = System.currentTimeMillis();
......@@ -188,8 +184,8 @@ public class AdamUserServiceImpl implements IAdamUserService {
} else {
userInfoVo = adamRdmService.getUserInfoVoByUid(uid);
}
RedisLockUtil.unlock(LOCK_KEY_UREGISTER + param.getOpenId() + param.getPlatform());
}
// RedisLockUtil.unlock(LOCK_KEY_UREGISTER + param.getOpenId() + param.getPlatform());
// }
return userInfoVo;
}
......@@ -377,9 +373,9 @@ public class AdamUserServiceImpl implements IAdamUserService {
// @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public AdamRealInfoVo identity(String uid, String name, String idCard) {
AdamRealInfoVo vo = null;
if (RedisLockUtil.tryLock(AdamRedisConst.LOCK_KEY_UIDENTITY + uid, 1, 3)) {
vo = adamRdmService.getRealInfoVoByUid(uid);
if (null == vo) {
// if (RedisLockUtil.tryLock(AdamRedisConst.LOCK_KEY_UIDENTITY + uid, 1, 3)) {
// vo = adamRdmService.getRealInfoVoByUid(uid);
// if (null == vo) {
if (!adamRdmService.isCertification(1, idCard, name)) {
// String respStr = null;
// try {
......@@ -431,9 +427,9 @@ public class AdamUserServiceImpl implements IAdamUserService {
adamRdmService.setRealInfoVoByUid(uid, vo);
adamRdmService.setCertification(1, idCard, name);
log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s);
}
RedisLockUtil.unlock(AdamRedisConst.LOCK_KEY_UIDENTITY + uid);
}
// }
// RedisLockUtil.unlock(AdamRedisConst.LOCK_KEY_UIDENTITY + uid);
// }
return vo;
}
}
......@@ -6,7 +6,7 @@
10000=请求频繁,稍后再试
10001=
10002=验证码发送失败
10003=已超时,请重新获取验证码
10003=发送过于频繁,请稍后再试
10004=验证码错误,请重新输入
10005=手机号获取失败,请更换登录方式
10006=第三方账号未注册
......@@ -52,7 +52,7 @@
10211=订单不存在
10212=订单状态查询失败
10213=感谢您选择登登登。距您上一次离开不足一年,登登登还没准备好再次邀您加入。不如我们给彼此多一些时间,有缘再相见。
10214=
10214=兑换失败
10215=本次摩登天空会员购买名额已满
10216=
......
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