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

Commit 5c886184 authored by 张国柄's avatar 张国柄

fix:会员REDIS结构调整;

parent 57136bc5
...@@ -13,8 +13,10 @@ import java.io.Serializable; ...@@ -13,8 +13,10 @@ import java.io.Serializable;
public class AdamMemberOrderCodeParam implements Serializable { public class AdamMemberOrderCodeParam implements Serializable {
private static final long serialVersionUID = 2500742355642406263L; private static final long serialVersionUID = 2500742355642406263L;
@ApiModelProperty(position = 10, required = true, value = "类型:2-会员码,3-礼包码", example = "3") @ApiModelProperty(position = 10, required = true, value = "类型:2-会员码,3-礼包码", example = "3")
@NotNull@Min(2)@Max(3) @NotNull
private Integer type; @Min(2)
@Max(3)
private Integer mode;
@ApiModelProperty(position = 11, required = true, value = "兑换码", example = "0") @ApiModelProperty(position = 11, required = true, value = "兑换码", example = "0")
@NotBlank @NotBlank
private String memberCode; private String memberCode;
......
...@@ -16,7 +16,9 @@ public class AdamMemberOrderParam implements Serializable { ...@@ -16,7 +16,9 @@ public class AdamMemberOrderParam implements Serializable {
@NotBlank @NotBlank
private String memberId; private String memberId;
@ApiModelProperty(position = 11, required = true, value = "购买方式:0-购买会员,1-购买会员码", allowableValues = "0,1") @ApiModelProperty(position = 11, required = true, value = "购买方式:0-购买会员,1-购买会员码", allowableValues = "0,1")
@NotNull@Min(0)@Max(1) @NotNull
@Min(0)
@Max(1)
private Integer mode; private Integer mode;
@ApiModelProperty(position = 12, required = true, value = "应付金额", example = "0.01") @ApiModelProperty(position = 12, required = true, value = "应付金额", example = "0.01")
@DecimalMin("0.01") @DecimalMin("0.01")
......
...@@ -16,7 +16,7 @@ public class AdamMemberCodeVo implements Serializable, Cloneable { ...@@ -16,7 +16,7 @@ public class AdamMemberCodeVo implements Serializable, Cloneable {
private String memberId; private String memberId;
@ApiModelProperty(position = 2, value = "会员价格id") @ApiModelProperty(position = 2, value = "会员价格id")
private String memberPriceId; private String memberPriceId;
@ApiModelProperty(position = 3, value = "会员码类型0购买1后台生成") @ApiModelProperty(position = 3, value = "类型:0-购买,1-后台生成")
private String type; private String type;
@ApiModelProperty(position = 4, value = "会员编号") @ApiModelProperty(position = 4, value = "会员编号")
private String memberNo; private String memberNo;
......
package com.liquidnet.service.adam.dto.vo; package com.liquidnet.service.adam.dto.vo;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.base.ResponseDto;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
@ApiModel(value = "AdamUserMemberVo", description = "会员用户信息") @ApiModel(value = "AdamUserMemberVo", description = "会员用户信息")
@Data @Data
...@@ -34,4 +38,15 @@ public class AdamUserMemberVo implements Serializable, Cloneable { ...@@ -34,4 +38,15 @@ public class AdamUserMemberVo implements Serializable, Cloneable {
return new AdamUserMemberVo(); return new AdamUserMemberVo();
} }
} }
/**
* 会员是否有效
*
* @return true-有效
*/
public boolean isActive() {
LocalDateTime expiryAt = DateUtil.Formatter.yyyyMMddHHmmss.parse(this.getExpiryAt());
return this.getState() == 1 && null != expiryAt && expiryAt.isAfter(LocalDateTime.now());
}
} }
...@@ -27,7 +27,7 @@ public interface IAdamMemberOrderService extends IService<AdamMemberOrder> { ...@@ -27,7 +27,7 @@ public interface IAdamMemberOrderService extends IService<AdamMemberOrder> {
* @param param * @param param
* @return * @return
*/ */
ResponseDto<AdamMemberOrderResult> useMemberCode(AdamMemberOrderCodeParam param); ResponseDto<AdamMemberOrderResult> exchangeMemberCode(AdamMemberOrderCodeParam param);
/** /**
* 获取订单列表 * 获取订单列表
......
...@@ -77,6 +77,12 @@ public interface IAdamRdmService { ...@@ -77,6 +77,12 @@ public interface IAdamRdmService {
String getMemberAgreement(); String getMemberAgreement();
boolean setShotMemberOrderVoByOrderNo(String orderNo, AdamMemberOrderVo vo);
AdamMemberOrderVo getShotMemberOrderVoByOrderNo(String orderNo);
void delShotMemberOrderVoByOrderNo(String orderNo);
boolean setMemberNoByMemberId(String memberId, long val); boolean setMemberNoByMemberId(String memberId, long val);
long incrMemberNoByMemberId(String memberId); long incrMemberNoByMemberId(String memberId);
......
...@@ -14,17 +14,21 @@ public class AdamRedisConst { ...@@ -14,17 +14,21 @@ public class AdamRedisConst {
public static final String INFO = ADAM.concat("info:"); public static final String INFO = ADAM.concat("info:");
public static final String INFO_USER = INFO.concat("user:"); public static final String INFO_USER = INFO.concat("user:");
public static final String INFO_USER_MEMBER = INFO_USER.concat("member:");
public static final String INFO_REAL_NAME = INFO.concat("real_name:"); public static final String INFO_REAL_NAME = INFO.concat("real_name:");
public static final String INFO_THIRD_PARTY = INFO.concat("third_party:"); public static final String INFO_THIRD_PARTY = INFO.concat("third_party:");
public static final String INFO_ENTERS = INFO.concat("enters:");
public static final String INFO_ADDRESSES = INFO.concat("addresses:");
public static final String INFO_MEMBER_SIMPLE = INFO.concat("member:simple"); public static final String INFO_MEMBER_SIMPLE = INFO.concat("member:simple");
public static final String INFO_MEMBER_CATEGORY = INFO.concat("member:category:"); public static final String INFO_MEMBER_CATEGORY = INFO.concat("member:category:");
public static final String INFO_MEMBER_PRICE = INFO.concat("member:price:"); public static final String INFO_MEMBER_PRICE = INFO.concat("member:price:");
public static final String INFO_MEMBER_RIGHTS = INFO.concat("member:rights:"); public static final String INFO_MEMBER_RIGHTS = INFO.concat("member:rights:");
public static final String INFO_MEMBER_AGREEMENT = INFO.concat("member:agreement"); public static final String INFO_MEMBER_AGREEMENT = INFO.concat("member:agreement");
public static final String INFO_MEMBER_USER = INFO.concat("member:user");
public static final String INFO_MEMBER_CODE = INFO.concat("member:code:"); public static final String INFO_MEMBER_CODE = INFO.concat("member:code:");
public static final String INFO_ENTERS = INFO.concat("enters:");
public static final String INFO_ADDRESSES = INFO.concat("addresses:"); public static final String SHOT = "shot:";
public static final String SHOT_MEMBER_ORDER = SHOT.concat("member:order:");
public static final String INFO_TAGS_SEX = INFO.concat("tags:sex"); public static final String INFO_TAGS_SEX = INFO.concat("tags:sex");
public static final String INFO_TAGS_MUSIC = INFO.concat("tags:music"); public static final String INFO_TAGS_MUSIC = INFO.concat("tags:music");
......
...@@ -71,18 +71,7 @@ public class AdamMemberController { ...@@ -71,18 +71,7 @@ public class AdamMemberController {
}) })
@GetMapping("check") @GetMapping("check")
public ResponseDto<Boolean> isMember(@NotBlank @RequestParam String uid) { public ResponseDto<Boolean> isMember(@NotBlank @RequestParam String uid) {
if (StringUtils.isBlank(uid)) return ResponseDto.success(false);
AdamUserMemberVo userMemberInfo = adamRdmService.getUserMemberVoByUid(uid); AdamUserMemberVo userMemberInfo = adamRdmService.getUserMemberVoByUid(uid);
if (null != userMemberInfo) { return ResponseDto.success(null != userMemberInfo && userMemberInfo.isActive());
Integer state = userMemberInfo.getState();
if (null != state && state == 1) {
// TODO: 2021/5/25 时间界定
Date expiryAtDate = DateUtil.parse(userMemberInfo.getExpiryAt(), DateUtil.DATE_SMALL_STR);
return ResponseDto.success(null != expiryAtDate && expiryAtDate.after(DateUtil.now()));
}
}
return ResponseDto.success(false);
} }
} }
...@@ -59,7 +59,7 @@ public class AdamMemberOrderController { ...@@ -59,7 +59,7 @@ public class AdamMemberOrderController {
@NotBlank @PathVariable String id) { @NotBlank @PathVariable String id) {
AdamMemberVo memberVo = adamRdmService.getMemberVoByMemberId(mno); AdamMemberVo memberVo = adamRdmService.getMemberVoByMemberId(mno);
if (null == memberVo) { if (null == memberVo) {
return ResponseDto.failure(ErrorMapping.get("10107")); return ResponseDto.failure(ErrorMapping.get("10201"));
} }
AdamMemberOrderPreviewVo previewVo = AdamMemberOrderPreviewVo.getNew(); AdamMemberOrderPreviewVo previewVo = AdamMemberOrderPreviewVo.getNew();
...@@ -82,15 +82,18 @@ public class AdamMemberOrderController { ...@@ -82,15 +82,18 @@ public class AdamMemberOrderController {
try { try {
log.debug("member/order/buy:param:{}", JsonUtils.toJson(param)); log.debug("member/order/buy:param:{}", JsonUtils.toJson(param));
String currentUid = CurrentUtil.getCurrentUid();
// TODO: 2021/6/9 判断黑名单,待定(暂不做) // TODO: 2021/6/9 判断黑名单,待定(暂不做)
AdamRealInfoVo realInfoVo = adamRdmService.getRealInfoVoByUid(CurrentUtil.getCurrentUid());
AdamRealInfoVo realInfoVo = adamRdmService.getRealInfoVoByUid(currentUid);
if (null == realInfoVo) { if (null == realInfoVo) {
if (StringUtils.isBlank(param.getName()) || StringUtils.isBlank(param.getIdCard())) { if (StringUtils.isBlank(param.getName()) || StringUtils.isBlank(param.getIdCard())) {
return ResponseDto.failure(ErrorMapping.get("10101")); return ResponseDto.failure(ErrorMapping.get("10101"));
} }
adamUserService.identity(CurrentUtil.getCurrentUid(), param.getName(), param.getIdCard()); adamUserService.identity(currentUid, param.getName(), param.getIdCard());
} }
return adamMemberOrderService.buyMemberOrMemberCode(param); return adamMemberOrderService.buyMemberOrMemberCode(param);
...@@ -127,22 +130,27 @@ public class AdamMemberOrderController { ...@@ -127,22 +130,27 @@ public class AdamMemberOrderController {
@ApiOperationSupport(order = 3) @ApiOperationSupport(order = 3)
@ApiOperation(value = "使用兑换码") @ApiOperation(value = "使用兑换码")
@PostMapping("exchange") @PostMapping("exchange")
public ResponseDto<AdamMemberOrderResult> useMemberCode(@Valid @RequestBody AdamMemberOrderCodeParam param) { public ResponseDto<AdamMemberOrderResult> exchangeMemberCode(@Valid @RequestBody AdamMemberOrderCodeParam param) {
try { try {
log.debug("member/order/exchange:param:{}", JsonUtils.toJson(param)); log.debug("member/order/exchange:param:{}", JsonUtils.toJson(param));
String currentUid = CurrentUtil.getCurrentUid();
if (null != adamRdmService.getUserMemberVoByUid(currentUid)) {// 仅限从未购买过会员的用户使用
return ResponseDto.failure(ErrorMapping.get("10204"));
}
// TODO: 2021/6/9 判断黑名单,待定(暂不做) // TODO: 2021/6/9 判断黑名单,待定(暂不做)
AdamRealInfoVo realInfoVo = adamRdmService.getRealInfoVoByUid(CurrentUtil.getCurrentUid()); AdamRealInfoVo realInfoVo = adamRdmService.getRealInfoVoByUid(currentUid);
if (null == realInfoVo) { if (null == realInfoVo) {
if (StringUtils.isBlank(param.getName()) || StringUtils.isBlank(param.getIdCard())) { if (StringUtils.isBlank(param.getName()) || StringUtils.isBlank(param.getIdCard())) {
return ResponseDto.failure(ErrorMapping.get("10101")); return ResponseDto.failure(ErrorMapping.get("10101"));
} }
adamUserService.identity(CurrentUtil.getCurrentUid(), param.getName(), param.getIdCard()); adamUserService.identity(currentUid, param.getName(), param.getIdCard());
} }
return adamMemberOrderService.useMemberCode(param); return adamMemberOrderService.exchangeMemberCode(param);
} catch (Exception e) { } catch (Exception e) {
log.error("使用兑换码异常", e); log.error("使用兑换码异常", e);
return ResponseDto.failure(); return ResponseDto.failure();
...@@ -172,7 +180,7 @@ public class AdamMemberOrderController { ...@@ -172,7 +180,7 @@ public class AdamMemberOrderController {
public ResponseDto<Integer> checkOrderResult(@NotBlank @RequestParam String orderNo) { public ResponseDto<Integer> checkOrderResult(@NotBlank @RequestParam String orderNo) {
AdamMemberOrderVo memberOrderInfo = adamMemberOrderService.getMemberOrderInfo(CurrentUtil.getCurrentUid(), orderNo); AdamMemberOrderVo memberOrderInfo = adamMemberOrderService.getMemberOrderInfo(CurrentUtil.getCurrentUid(), orderNo);
if (null == memberOrderInfo) { if (null == memberOrderInfo) {
return ResponseDto.failure(ErrorMapping.get("10210")); return ResponseDto.failure(ErrorMapping.get("10211"));
} }
try { try {
String rst = HttpUtil.get(env.getProperty("liquidnet.url-pay.check") + "?code=" + memberOrderInfo.getPayNo(), null); String rst = HttpUtil.get(env.getProperty("liquidnet.url-pay.check") + "?code=" + memberOrderInfo.getPayNo(), null);
...@@ -184,7 +192,7 @@ public class AdamMemberOrderController { ...@@ -184,7 +192,7 @@ public class AdamMemberOrderController {
return ResponseDto.success(status == 1 ? status : 0); return ResponseDto.success(status == 1 ? status : 0);
} catch (Exception e) { } catch (Exception e) {
log.error("支付中心:会员订单状态查询失败:{}", orderNo, e); log.error("支付中心:会员订单状态查询失败:{}", orderNo, e);
return ResponseDto.failure(ErrorMapping.get("10211")); return ResponseDto.failure(ErrorMapping.get("10212"));
} }
} }
} }
...@@ -23,6 +23,7 @@ import com.liquidnet.service.base.ErrorMapping; ...@@ -23,6 +23,7 @@ import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping; import com.liquidnet.service.base.SqlMapping;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.bson.Document; import org.bson.Document;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -31,7 +32,6 @@ import org.springframework.data.mongodb.core.MongoTemplate; ...@@ -31,7 +32,6 @@ import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoConverter; import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -105,69 +105,60 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe ...@@ -105,69 +105,60 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe
@Override @Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public ResponseDto<AdamMemberOrderResult> buyMemberOrMemberCode(AdamMemberOrderParam param) { public ResponseDto<AdamMemberOrderResult> buyMemberOrMemberCode(AdamMemberOrderParam param) {
String memberId = param.getMemberId(); AdamMemberVo memberVo = adamRdmService.getMemberVoByMemberId(param.getMemberId());
String memberPriceId = param.getMemberPriceId(); if (null == memberVo) {
// 验证会员是否有效
AdamMemberVo adamMemberVo = adamMemberService.queryMemberInfo();
if (!adamMemberVo.getMemberId().equals(memberId)) {
return ResponseDto.failure(ErrorMapping.get("10201")); return ResponseDto.failure(ErrorMapping.get("10201"));
} }
// 验证价格是否有效 AdamMemberPriceVo memberPriceVo = adamRdmService.getMemberPriceVoByPriceId(param.getMemberId(), param.getMemberPriceId());
List<AdamMemberPriceVo> adamMemberPrice = adamMemberVo.getPriceVoList(); if (null == memberPriceVo) {
AdamMemberPriceVo priceVo = null;
for (int i = 0; i < adamMemberPrice.size(); i++) {
AdamMemberPriceVo adamMemberPriceVo = adamMemberPrice.get(i);
if (adamMemberPriceVo.getMemberPriceId().equals(param.getMemberPriceId())) {
priceVo = adamMemberPriceVo;
break;
}
}
if (null == priceVo) {
return ResponseDto.failure(ErrorMapping.get("10202")); return ResponseDto.failure(ErrorMapping.get("10202"));
} }
AdamMemberPriceVo memberPriceVo = adamRdmService.getMemberPriceVoByPriceId(memberId, memberPriceId);
String createdAt = DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMddHHmmss); String createdAt = DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMddHHmmss);
// 生成订单信息 // 生成订单信息
AdamMemberOrderVo orderVo = new AdamMemberOrderVo(); AdamMemberOrderVo orderVo = new AdamMemberOrderVo();
String orderNo = IDGenerator.nextSnowId().toString().concat("V"); String orderNo = IDGenerator.nextSnowId().toString().concat("V");
orderVo.setOrderNo(orderNo); orderVo.setOrderNo(orderNo);
orderVo.setMemberId(memberId); orderVo.setMemberId(param.getMemberId());
orderVo.setDays(memberPriceVo.getDays()); orderVo.setDays(memberPriceVo.getDays());
orderVo.setMemberPriceId(memberPriceId); orderVo.setMemberPriceId(param.getMemberPriceId());
orderVo.setCreatedAt(createdAt); orderVo.setCreatedAt(createdAt);
orderVo.setMemberName(adamMemberVo.getName()); orderVo.setMemberName(memberVo.getName());
orderVo.setMode(param.getMode()); orderVo.setMode(param.getMode());
orderVo.setDeviceFrom(param.getDeviceFrom()); orderVo.setDeviceFrom(param.getDeviceFrom());
orderVo.setPayType(param.getPayType()); orderVo.setPayType(param.getPayType());
orderVo.setState(AdamMemberConst.STATUS_UNPAID); orderVo.setState(0);// 0-待支付
orderVo.setUid(CurrentUtil.getCurrentUid()); orderVo.setUid(CurrentUtil.getCurrentUid());
orderVo.setPrice(param.getPrice()); orderVo.setPrice(param.getPrice());
orderVo.setIp(CurrentUtil.getCliIpAddr()); orderVo.setIp(CurrentUtil.getCliIpAddr());
orderVo.setVersion(CurrentUtil.getCliVersion()); orderVo.setVersion(CurrentUtil.getCliVersion());
orderVo.setSource(CurrentUtil.getCliSource()); orderVo.setSource(CurrentUtil.getCliSource());
if (!adamRdmService.setShotMemberOrderVoByOrderNo(orderNo, orderVo)) {
log.warn("###购买会员创建订单失败[orderVo:{}]", JsonUtils.toJson(orderVo));
return ResponseDto.failure(ErrorMapping.get("10210"));
}
// 调取对应支付接口 // 调取对应支付接口
LinkedMultiValueMap<String, String> payParam = new LinkedMultiValueMap<>(); LinkedMultiValueMap<String, String> payParam = new LinkedMultiValueMap<>();
payParam.add("type", AdamMemberConst.TYPE_VIP); payParam.add("type", AdamMemberConst.TYPE_VIP);
payParam.add("price", String.valueOf(priceVo.getPrice())); payParam.add("price", String.valueOf(memberPriceVo.getPrice()));
payParam.add("name", orderVo.getMemberName()); payParam.add("name", orderVo.getMemberName());
payParam.add("order_code", orderVo.getOrderNo()); payParam.add("order_code", orderVo.getOrderNo());
payParam.add("client_ip", "127.0.0.1"); payParam.add("client_ip", orderVo.getIp());
payParam.add("notify_url", env.getProperty("liquidnet.url-pay.callback")); payParam.add("notify_url", env.getProperty("liquidnet.url-pay.callback"));
payParam.add("create_date", createdAt); payParam.add("create_date", createdAt);
payParam.add("expire_time", AdamMemberConst.TIME_LIMIT.toString()); payParam.add("expire_time", AdamMemberConst.TIME_LIMIT.toString());
if (null != param.getAuthCode()) { payParam.add("detail", param.getMode() == 0 ? "正在现场 - 购买会员" : "正在现场 - 购买会员码");
if (StringUtils.isNotBlank(param.getAuthCode())) {
payParam.add("auth_code", param.getAuthCode()); payParam.add("auth_code", param.getAuthCode());
} }
if (null != param.getOpenId()) { if (StringUtils.isNotBlank(param.getOpenId())) {
payParam.add("open_id", param.getOpenId()); payParam.add("open_id", param.getOpenId());
} }
if (null != param.getProductId()) { if (StringUtils.isNotBlank(param.getProductId())) {
payParam.add("product_id", param.getProductId()); payParam.add("product_id", param.getProductId());
} }
payParam.add("detail", param.getMode() == 0 ? "正在现场 - 购买会员" : "正在现场 - 购买会员码");
AdamMemberOrderResult result = AdamMemberOrderResult.getNew(); AdamMemberOrderResult result = AdamMemberOrderResult.getNew();
try { try {
...@@ -178,13 +169,11 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe ...@@ -178,13 +169,11 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe
orderVo.setPayNo(result.getCode()); orderVo.setPayNo(result.getCode());
} catch (Exception e) { } catch (Exception e) {
log.error("调用支付中心接口异常", e); log.warn("###购买会员下单调用支付中心异常[payParam:{}]", JsonUtils.toJson(payParam), e);
return ResponseDto.failure(ErrorMapping.get("10203")); return ResponseDto.failure(ErrorMapping.get("10203"));
} }
adamRdmService.setShotMemberOrderVoByOrderNo(orderNo, orderVo);
mongoTemplate.insert(orderVo, AdamMemberOrderVo.class.getSimpleName());
redisUtil.hset(AdamRedisConst.INFO_MEMBERS_ORDER_INFO.concat(orderVo.getUid()), orderNo, orderVo);
result.setOrderNo(orderVo.getOrderNo()); result.setOrderNo(orderVo.getOrderNo());
result.setShowUrl(param.getShowUrl()); result.setShowUrl(param.getShowUrl());
...@@ -192,113 +181,89 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe ...@@ -192,113 +181,89 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe
return ResponseDto.success(result); return ResponseDto.success(result);
} }
/**
* 使用会员码
*
* @param param 兑换码相关参数
* @return Object
*/
@Override @Override
public ResponseDto<AdamMemberOrderResult> useMemberCode(AdamMemberOrderCodeParam param) { public ResponseDto<AdamMemberOrderResult> exchangeMemberCode(AdamMemberOrderCodeParam param) {
String uid = CurrentUtil.getCurrentUid(); AdamMemberCodeVo memberCodeVo = adamRdmService.getMemberCodeVoByCode(param.getMemberCode());
String code = param.getMemberCode(); if (null == memberCodeVo) {
int type = param.getType(); return ResponseDto.failure(ErrorMapping.get("10206"));
AdamUserMemberVo userMemberVo = adamRdmService.getUserMemberVoByUid(uid);
if (null != userMemberVo) {
if (userMemberVo.getState() == 1 && LocalDateTime.now().isAfter(DateUtil.Formatter.yyyyMMddHHmmss.parse(userMemberVo.getExpiryAt()))) {
return ResponseDto.failure(ErrorMapping.get("10205"));
}
} }
AdamMemberCodeVo memberCodeVo = mongoTemplate.findOne(Query.query(Criteria.where("code").is(code)), AdamMemberCodeVo.class, AdamMemberCodeVo.class.getSimpleName());
if (memberCodeVo.getState() != 0) { if (memberCodeVo.getState() != 0) {
return ResponseDto.failure(ErrorMapping.get(memberCodeVo.getState() == 1 ? "10206" : "10207")); return ResponseDto.failure(ErrorMapping.get(memberCodeVo.getState() == 1 ? "10207" : "10208"));
} }
AdamMemberPriceVo memberPriceVo = adamRdmService.getMemberPriceVoByPriceId(memberCodeVo.getMemberId(), memberCodeVo.getMemberPriceId()); AdamMemberPriceVo memberPriceVo = adamRdmService.getMemberPriceVoByPriceId(memberCodeVo.getMemberId(), memberCodeVo.getMemberPriceId());
if (null == memberPriceVo) { if (null == memberPriceVo) {
return ResponseDto.failure(ErrorMapping.get("10202")); return ResponseDto.failure(ErrorMapping.get("10202"));
} }
AdamMemberVo memberVo = adamRdmService.getMemberVoByMemberId(memberCodeVo.getMemberId());
AdamMemberVo adamMemberVo = adamMemberService.queryMemberInfo();
String currentDateTime = DateUtil.getNowTime(); String currentDateTime = DateUtil.getNowTime();
// 创建会员订单
AdamMemberOrderVo initMemberOrderVo = AdamMemberOrderVo.getNew();
initMemberOrderVo.setOrderNo(IDGenerator.nextSnowId().toString().concat("V"));
initMemberOrderVo.setUid(CurrentUtil.getCurrentUid());
initMemberOrderVo.setMemberCode(param.getMemberCode());
initMemberOrderVo.setMemberNo(memberCodeVo.getMemberNo());
initMemberOrderVo.setMemberId(IDGenerator.nextSnowId().toString());
initMemberOrderVo.setMode(param.getMode());
initMemberOrderVo.setMemberId(memberCodeVo.getMemberId());
initMemberOrderVo.setMemberPriceId(memberCodeVo.getMemberPriceId());
initMemberOrderVo.setMemberName(memberVo.getName());
initMemberOrderVo.setState(1);// 0-待支付,1-已支付
initMemberOrderVo.setCreatedAt(currentDateTime);
initMemberOrderVo.setDays(memberPriceVo.getDays());
initMemberOrderVo.setPayNo(memberCodeVo.getCode());
initMemberOrderVo.setPrice(BigDecimal.valueOf(0));
initMemberOrderVo.setPayType(initMemberOrderVo.getMode() == 2 ? "VIP_CODE" : "GIFT_CODE");
initMemberOrderVo.setIp(CurrentUtil.getCliIpAddr());
initMemberOrderVo.setSource(CurrentUtil.getCliSource());
initMemberOrderVo.setVersion(CurrentUtil.getCliVersion());
AdamMemberOrderVo orderVo = new AdamMemberOrderVo(); AdamUserMemberVo initUserMemberVo = AdamUserMemberVo.getNew();
orderVo.setOrderNo(IDGenerator.nextSnowId().toString().concat("V")); initUserMemberVo.setUid(initMemberOrderVo.getUid());
orderVo.setMemberCode(code); initUserMemberVo.setMemberNo(initMemberOrderVo.getMemberNo());
orderVo.setUid(uid); initUserMemberVo.setCreatedAt(currentDateTime);
orderVo.setMemberNo(memberCodeVo.getMemberNo()); initUserMemberVo.setMemberId(initMemberOrderVo.getMemberId());
orderVo.setMemberId(IDGenerator.nextSnowId().toString()); initUserMemberVo.setState(1);
orderVo.setMode(type); initUserMemberVo.setUpdatedAt(currentDateTime);
orderVo.setMemberId(memberCodeVo.getMemberId()); initUserMemberVo.setExpiryAt(
orderVo.setMemberPriceId(memberCodeVo.getMemberPriceId()); DateUtil.format(
orderVo.setMemberName(adamMemberVo.getName()); DateUtil.getBeforeDayEnd(Calendar.getInstance(), initMemberOrderVo.getDays()),
orderVo.setState(AdamMemberConst.STATUS_UNPAID); DateUtil.Formatter.yyyyMMddHHmmss
orderVo.setCreatedAt(currentDateTime); )
orderVo.setDays(memberPriceVo.getDays()); );
orderVo.setPayNo(memberCodeVo.getCode());
orderVo.setPrice(BigDecimal.valueOf(0));
if (AdamMemberConst.SUB_TYPE_USE_VIP_CODE == type) {// 会员码
orderVo.setPayType(AdamMemberConst.VIP_CODE);
} else if (AdamMemberConst.SUB_TYPE_USE_GIFT_CODE == type) {// 礼包码
orderVo.setPayType(AdamMemberConst.GIFT_CODE);
}
// 创建用户使用兑换码的订单
mongoTemplate.insert(orderVo, AdamMemberOrderVo.class.getSimpleName());
redisUtil.hset(AdamRedisConst.INFO_MEMBERS_ORDER_INFO.concat(uid), orderVo.getOrderNo(), orderVo);
if (null == userMemberVo) { LinkedList<String> toMqSqls = new LinkedList<>();
userMemberVo = new AdamUserMemberVo(); LinkedList<Object[]> updateMemberCodeObjs = new LinkedList<>(),
userMemberVo.setUid(uid); initMemberOrderObjs = new LinkedList<>(), initUserMemberObjs = new LinkedList<>();
userMemberVo.setMemberNo(orderVo.getMemberNo());
userMemberVo.setCreatedAt(currentDateTime); AdamMemberCodeVo updateMemberCodeVo = AdamMemberCodeVo.getNew();
} updateMemberCodeVo.setState(1);
userMemberVo.setMemberId(orderVo.getMemberId()); updateMemberCodeVo.setUpdatedAt(currentDateTime);
userMemberVo.setState(1); updateMemberCodeVo.setUseOrderNo(initMemberOrderVo.getOrderNo());
userMemberVo.setUpdatedAt(currentDateTime); updateMemberCodeVo.setUseUid(initUserMemberVo.getUid());
Date expiryAt = DateUtil.getBeforeDayEnd(Calendar.getInstance(), orderVo.getDays()); updateMemberCodeVo.setUseAt(currentDateTime);
String expiryAtStr = DateUtil.format(expiryAt, DateUtil.Formatter.yyyyMMddHHmmss);
userMemberVo.setExpiryAt(expiryAtStr);
// if (isNewMember) {
// mongoTemplate.insert(userMemberVo, AdamUserMemberVo.class.getSimpleName());
// } else {
// mongoTemplate.getCollection(AdamUserMemberVo.class.getSimpleName()).updateOne(
// Query.query(Criteria.where("uid").is(uid)).getQueryObject(),
// new Document("$set", Document.parse(JsonUtils.toJson(userMemberVo)))
// );
// }
Update update = Update.fromDocument(Document.parse(JsonUtils.toJson(userMemberVo)), "");
mongoTemplate.upsert(Query.query(Criteria.where("uid").is(uid)), update, AdamUserMemberVo.class.getSimpleName());
adamRdmService.setUserMemberVoByUid(uid, userMemberVo);
// 更新旧数据
memberCodeVo.setState(AdamMemberConst.STATUS_USED);
mongoTemplate.getCollection(AdamMemberCodeVo.class.getSimpleName()).updateOne( mongoTemplate.getCollection(AdamMemberCodeVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("code").is(memberCodeVo.getCode())).getQueryObject(), Query.query(Criteria.where("code").is(memberCodeVo.getCode())).getQueryObject(),
new Document("$set", Document.parse(JsonUtils.toJson(memberCodeVo))) new Document("$set", Document.parse(JsonUtils.toJson(updateMemberCodeVo)))
); );
// todo MQ 统一通知队列插入数据库 toMqSqls.add(SqlMapping.get("adam_member_code.exchange"));
orderVo.setIp(CurrentUtil.getCliIpAddr()); updateMemberCodeObjs.add(new Object[]{
orderVo.setSource(CurrentUtil.getCliSource()); updateMemberCodeVo.getState(), updateMemberCodeVo.getUpdatedAt(), updateMemberCodeVo.getUseOrderNo(),
orderVo.setVersion(CurrentUtil.getCliVersion()); updateMemberCodeVo.getUseUid(), updateMemberCodeVo.getUseAt(), memberCodeVo.getCode()
List<Object> mqList = AdamMemberOrderVo.getMemberOrderMqList(orderVo); });
/*
( `order_no`, `uid`, `mode`, `price`, mongoTemplate.insert(initMemberOrderVo, AdamMemberOrderVo.class.getSimpleName());
`price_paid`, `member_name`, `member_id`, toMqSqls.add(SqlMapping.get("adam_member_order.add"));
`member_price_id`, `days`, `state`, `member_no`,
`pay_channel`, `pay_no`, `birthday`, `payment_at`, mongoTemplate.insert(initUserMemberVo, AdamUserMemberVo.class.getSimpleName());
`created_at`, `updated_at`, `client_ip`, `source`, `version`)
*/ rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL, MQConst.ROUTING_KEY_SQL,
// rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL, MQConst.ROUTING_KEY_SQL, SqlMapping.gets(toMqSqls, updateMemberCodeObjs, initMemberOrderObjs, initUserMemberObjs));
// SqlMapping.get("adam_member_order.add", mqList.toArray()));
adamRdmService.setUserMemberVoByUid(initMemberOrderVo.getUid(), initUserMemberVo);
AdamMemberOrderResult result = AdamMemberOrderResult.getNew(); AdamMemberOrderResult result = AdamMemberOrderResult.getNew();
result.setOrderNo(orderVo.getOrderNo()); result.setOrderNo(initMemberOrderVo.getOrderNo());
return ResponseDto.success(result); return ResponseDto.success(result);
} }
......
...@@ -200,12 +200,12 @@ public class AdamRdmServiceImpl implements IAdamRdmService { ...@@ -200,12 +200,12 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
@Override @Override
public boolean setUserMemberVoByUid(String uid, AdamUserMemberVo vo) { public boolean setUserMemberVoByUid(String uid, AdamUserMemberVo vo) {
return redisUtil.set(AdamRedisConst.INFO_MEMBER_USER.concat(uid), vo); return redisUtil.set(AdamRedisConst.INFO_USER_MEMBER.concat(uid), vo);
} }
@Override @Override
public AdamUserMemberVo getUserMemberVoByUid(String uid) { public AdamUserMemberVo getUserMemberVoByUid(String uid) {
String rk = AdamRedisConst.INFO_MEMBER_USER.concat(uid); String rk = AdamRedisConst.INFO_USER_MEMBER.concat(uid);
AdamUserMemberVo adamUserMemberVo = (AdamUserMemberVo) redisUtil.get(rk); AdamUserMemberVo adamUserMemberVo = (AdamUserMemberVo) redisUtil.get(rk);
if (null == adamUserMemberVo) { if (null == adamUserMemberVo) {
adamUserMemberVo = mongoTemplate.findOne(Query.query(Criteria.where("uid").is(uid)), AdamUserMemberVo.class, AdamUserMemberVo.class.getSimpleName()); adamUserMemberVo = mongoTemplate.findOne(Query.query(Criteria.where("uid").is(uid)), AdamUserMemberVo.class, AdamUserMemberVo.class.getSimpleName());
...@@ -217,7 +217,7 @@ public class AdamRdmServiceImpl implements IAdamRdmService { ...@@ -217,7 +217,7 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
@Override @Override
public void delUserMemberVoByUid(String uid) { public void delUserMemberVoByUid(String uid) {
redisUtil.del(AdamRedisConst.INFO_MEMBER_USER.concat(uid)); redisUtil.del(AdamRedisConst.INFO_USER_MEMBER.concat(uid));
} }
@Override @Override
...@@ -257,8 +257,15 @@ public class AdamRdmServiceImpl implements IAdamRdmService { ...@@ -257,8 +257,15 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
@Override @Override
public List<AdamMemberPriceVo> getMemberPriceVoByMemberId(String memberId) { public List<AdamMemberPriceVo> getMemberPriceVoByMemberId(String memberId) {
List<AdamMemberPriceVo> vos = (List<AdamMemberPriceVo>) redisUtil.get(AdamRedisConst.INFO_MEMBER_PRICE.concat(memberId)); String key = AdamRedisConst.INFO_MEMBER_PRICE.concat(memberId);
List<AdamMemberPriceVo> vos = (List<AdamMemberPriceVo>) redisUtil.get(key);
if (CollectionUtils.isEmpty(vos)) { if (CollectionUtils.isEmpty(vos)) {
vos = mongoTemplate.find(
Query.query(Criteria.where("memberId").is(memberId).and("state").is(1)),
AdamMemberPriceVo.class, AdamMemberPriceVo.class.getSimpleName()
);
if (!CollectionUtils.isEmpty(vos)) redisUtil.set(key, vos);
} }
return vos; return vos;
} }
...@@ -311,6 +318,21 @@ public class AdamRdmServiceImpl implements IAdamRdmService { ...@@ -311,6 +318,21 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
return val; return val;
} }
@Override
public boolean setShotMemberOrderVoByOrderNo(String orderNo, AdamMemberOrderVo vo) {
return redisUtil.set(AdamRedisConst.SHOT_MEMBER_ORDER.concat(orderNo), vo);
}
@Override
public AdamMemberOrderVo getShotMemberOrderVoByOrderNo(String orderNo) {
return (AdamMemberOrderVo) redisUtil.get(AdamRedisConst.SHOT_MEMBER_ORDER.concat(orderNo));
}
@Override
public void delShotMemberOrderVoByOrderNo(String orderNo) {
redisUtil.del(AdamRedisConst.SHOT_MEMBER_ORDER.concat(orderNo));
}
@Override @Override
public boolean setMemberNoByMemberId(String memberId, long val) { public boolean setMemberNoByMemberId(String memberId, long val) {
return redisUtil.set(AdamRedisConst.INCR_MEMBER_NO.concat(memberId), val); return redisUtil.set(AdamRedisConst.INCR_MEMBER_NO.concat(memberId), val);
...@@ -353,6 +375,15 @@ public class AdamRdmServiceImpl implements IAdamRdmService { ...@@ -353,6 +375,15 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
@Override @Override
public AdamMemberCodeVo getMemberCodeVoByCode(String memberCode) { public AdamMemberCodeVo getMemberCodeVoByCode(String memberCode) {
return (AdamMemberCodeVo) redisUtil.get(AdamRedisConst.INFO_MEMBER_CODE.concat(memberCode)); String key = AdamRedisConst.INFO_MEMBER_CODE.concat(memberCode);
AdamMemberCodeVo vo = (AdamMemberCodeVo) redisUtil.get(key);
if (null == vo) {
vo = mongoTemplate.findOne(
Query.query(Criteria.where("code").is(memberCode)),
AdamMemberCodeVo.class, AdamMemberCodeVo.class.getSimpleName()
);
if (null != vo && vo.getState() == 0) redisUtil.set(AdamRedisConst.INFO_MEMBER_CODE.concat(memberCode), vo);
}
return vo;
} }
} }
...@@ -22,21 +22,21 @@ ...@@ -22,21 +22,21 @@
10104= 10104=
10105=入场人不存在 10105=入场人不存在
10106=收获地址不存在 10106=收获地址不存在
10107=会员卡信息不存在
10201=会员信息有误,请联系客服 10201=会员卡信息有误,请核实
10202=会员价格有误,请联系客服 10202=会员卡价格有误,请核实
10203=支付信息有误,请联系客服 10203=支付信息有误,请联系客服
10204= 10204=仅限从未购买过会员的用户使用
10205=当前账号已是会员,无法兑换 10205=
10206=兑换码已使用,请核实 10206=兑换码不存在,请核实
10207=兑换码不可用,请核实 10207=兑换码已使用,请核实
10208= 10208=兑换码不可用,请核实
10209= 10209=
10210=订单不存在 10210=创建订单失败,请联系客服
10211=订单状态查询失败 10211=订单不存在
10212=订单状态查询失败
......
...@@ -16,15 +16,16 @@ adam_third_party.unbind=UPDATE adam_third_party SET `state`=2, updated_at=? WHER ...@@ -16,15 +16,16 @@ adam_third_party.unbind=UPDATE adam_third_party SET `state`=2, updated_at=? WHER
adam_member.add=INSERT INTO adam_member ( `name`, `title`, `sub_title`, `icon`, `avatar`, `start_no`, `type`, `interests_detail`, `notes`, `is_notice`, `notice_info`, `notice_title`, `need_question`, `display_agreement`, `agreement`, `member_id`, `limitation`) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); adam_member.add=INSERT INTO adam_member ( `name`, `title`, `sub_title`, `icon`, `avatar`, `start_no`, `type`, `interests_detail`, `notes`, `is_notice`, `notice_info`, `notice_title`, `need_question`, `display_agreement`, `agreement`, `member_id`, `limitation`) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
# ---------------------------------------------------- # ----------------------------------------------------
adam_member_order.add=INSERT INTO adam_member_order ( `order_no`, `uid`, `mode`, `price`, `price_paid`, `member_name`, `member_id`, `member_price_id`, `days`, `state`, `member_no`, `pay_channel`, `pay_no`, `birthday`, `payment_at`, `created_at`, `updated_at`, `client_ip`, `source`, `version`) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); adam_member_order.add=INSERT INTO adam_member_order (order_no, `uid`, `mode`, price, price_paid, member_name, member_id, member_price_id, `days`, `state`, member_no, device_from, pay_type, pay_no, birthday, payment_at, created_at, client_ip, `source`, version) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
adam_member_order.update=UPDATE adam_member_order SET `state` =?, member_no =?, payment_at =?, updated_at =? WHERE order_no =? adam_member_order.update=UPDATE adam_member_order SET `state` =?, member_no =?, payment_at =?, updated_at =? WHERE order_no =?
# ---------------------------------------------------- # ----------------------------------------------------
adam_member_code.add=INSERT INTO adam_member_code (code, `type`, member_id, member_price_id, member_no, `state`, created_at, buy_order_no, buy_uid, buy_at) VALUES (?,?,?,?,?,?,?,?,?,?) adam_member_code.add=INSERT INTO adam_member_code (code, `type`, member_id, member_price_id, member_no, `state`, created_at, buy_order_no, buy_uid, buy_at) VALUES (?,?,?,?,?,?,?,?,?,?)
adam_member_code.exchange=UPDATE adam_member_code SET `state`=?, updated_at=?, use_order_no=?, use_uid=?, use_at=? WHERE code=?
# ---------------------------------------------------- # ----------------------------------------------------
adam_user_member.add=INSERT INTO adam_user_member (`uid`, member_id, member_no, `state`, expiry_at, created_at) VALUES (?,?,?,?,?,?) adam_user_member.add=INSERT INTO adam_user_member (`uid`, member_id, member_no, `state`, expiry_at, created_at) VALUES (?,?,?,?,?,?)
adam_user_member.update=UPDATE adam_user_member SET `state` =?, expiry_at =?, updated_at =? WHERE `uid` =? adam_user_member.update=UPDATE adam_user_member SET `state`=?, expiry_at=?, updated_at=? WHERE `uid`=?
# ---------------------------------------------------- # ----------------------------------------------------
adam_addresses.add= adam_addresses.add=
......
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