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

Commit 0df5812c authored by 张国柄's avatar 张国柄

会员支付回调API调整

parent c846d046
package com.liquidnet.service.adam.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@ApiModel(value = "AdamMemberOrderCallbackResult", description = "购买会员或会员码的支付回调")
@ApiModel(value = "AdamMemberOrderCallbackParam", description = "购买会员或会员码的支付回调")
@Data
public class AdamMemberOrderCallbackResult implements Serializable {
public class AdamMemberOrderCallbackParam implements Serializable {
private static final long serialVersionUID = -4161563334263071103L;
@ApiModelProperty(position = 0, required = true, value = "订单状态")
private Integer status;
@ApiModelProperty(position = 1, required = true, value = "订单号")
@JsonProperty("order_code")
private String orderCode;
@ApiModelProperty(position = 2, required = true, value = "支付单号")
private String code;
@ApiModelProperty(position = 3, required = true, value = "购买类型")
private String type;
@ApiModelProperty(position = 4, required = true, value = "金额")
private BigDecimal price;
@ApiModelProperty(position = 5, required = true, value = "支付类型")
@JsonProperty("payment_type")
private String paymentType;
@ApiModelProperty(position = 6, required = true, value = "支付时间")
private LocalDateTime paymentAt;
@JsonProperty("payment_at")
private String paymentAt;
}
......@@ -18,10 +18,10 @@ public class AdamMemberOrderParam implements Serializable {
@ApiModelProperty(position = 11, required = true, value = "购买方式:0-购买会员,1-购买会员码", allowableValues = "0,1")
@NotNull@Min(0)@Max(1)
private Integer mode;
@ApiModelProperty(position = 12, required = true, value = "应付金额", example = "199")
@ApiModelProperty(position = 12, required = true, value = "应付金额", example = "0.01")
@DecimalMin("0.01")
private BigDecimal price;
@ApiModelProperty(position = 13, required = true, value = "实付金额", example = "199")
@ApiModelProperty(position = 13, required = true, value = "实付金额", example = "0.01")
@DecimalMin("0.01")
private BigDecimal pricePaid;
@ApiModelProperty(position = 14, required = true, value = "会员价格ID")
......
......@@ -21,7 +21,7 @@ public class AdamMemberCodeVo implements Serializable, Cloneable {
@ApiModelProperty(position = 4, value = "会员编号")
private String memberNo;
@ApiModelProperty(position = 5, value = "状态:0-未使用,1-已使用,2-不可用")
private int state;
private Integer state;
@ApiModelProperty(position = 6, value = "购买会员码的订单编号")
private String buyOrderNo;
@ApiModelProperty(position = 7, value = "购买会员码的用户id")
......
......@@ -33,25 +33,26 @@ public class AdamMemberOrderVo implements Serializable, Cloneable {
private String memberNo;
@ApiModelProperty(position = 9, value = "支付终端", allowableValues = "app,wap,js,applet")
private String deviceFrom;
@ApiModelProperty(position = 9, value = "支付方式", allowableValues = "alipay,wepay")
@ApiModelProperty(position = 10, value = "支付方式", allowableValues = "alipay,wepay")
private String payType;
@ApiModelProperty(position = 10, value = "支付单号")
@ApiModelProperty(position = 11, value = "支付单号")
private String payNo;
@ApiModelProperty(position = 11, value = "支付时间")
@ApiModelProperty(position = 12, value = "支付时间")
private String paymentAt;
@ApiModelProperty(position = 13, value = "创建时间")
private String createdAt;
@ApiModelProperty(position = 14, value = "兑换码")
private String memberCode;
@ApiModelProperty(position = 15, value = "价格")
@ApiModelProperty(position = 14, value = "价格")
private BigDecimal price;
@ApiModelProperty(position = 16, value = "客户端IP")
@ApiModelProperty(position = 15, value = "客户端IP")
private String ip;
@ApiModelProperty(position = 17, value = "客户端来源")
@ApiModelProperty(position = 16, value = "客户端来源")
private String source;
@ApiModelProperty(position = 18, value = "客户端版本")
@ApiModelProperty(position = 17, value = "客户端版本")
private String version;
@ApiModelProperty(position = 20, value = "兑换码")
private String memberCode;
public static final AdamMemberOrderVo obj = new AdamMemberOrderVo();
public static AdamMemberOrderVo getNew() {
......@@ -63,7 +64,7 @@ public class AdamMemberOrderVo implements Serializable, Cloneable {
return new AdamMemberOrderVo();
}
public static List<Object> getMemberOrderMqList (AdamMemberOrderVo orderVo) {
public static List<Object> getMemberOrderMqList(AdamMemberOrderVo orderVo) {
List<Object> mqList = new ArrayList<>();
mqList.add(orderVo.getOrderNo());
mqList.add(orderVo.getUid());
......
package com.liquidnet.service.adam.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.adam.dto.AdamMemberOrderCallbackResult;
import com.liquidnet.service.adam.dto.AdamMemberOrderCallbackParam;
import com.liquidnet.service.adam.dto.AdamMemberOrderCodeParam;
import com.liquidnet.service.adam.dto.AdamMemberOrderParam;
import com.liquidnet.service.adam.dto.AdamMemberOrderResult;
......@@ -48,6 +48,6 @@ public interface IAdamMemberOrderService extends IService<AdamMemberOrder> {
* 支付回调
* @return
*/
ResponseDto<Object> memberNotifyCallBack(AdamMemberOrderCallbackResult result);
ResponseDto<Object> memberNotifyCallBack(AdamMemberOrderCallbackParam parameter);
}
......@@ -65,6 +65,12 @@ public interface IAdamRdmService {
String getMemberAgreement();
boolean setMemberNoByMemberId(String memberId, long val);
long incrMemberNoByMemberId(String memberId);
Object getMemberMaxNoByMemberId(String memberId);
boolean setTagsForSex(List<AdamTagVo> voList);
List<AdamTagVo> getTagsForSex();
......@@ -72,4 +78,8 @@ public interface IAdamRdmService {
boolean setTagsForMusic(List<AdamTagParentVo> voList);
List<AdamTagParentVo> getTagsForMusic();
boolean setMemberCodeVoByCode(String memberCode, AdamMemberCodeVo vo);
AdamMemberCodeVo getMemberCodeVoByCode(String memberCode);
}
package com.liquidnet.service.adam.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.adam.entity.AdamUserMember;
/**
......@@ -9,22 +8,12 @@ import com.liquidnet.service.adam.entity.AdamUserMember;
*/
public interface IAdamUserMemberService extends IService<AdamUserMember> {
String getMaxMemberNo(String memberId);
String getNextMemberNo(String memberId);
// 获取用户会员信息
// AdamUserMemberVo getUserMemberInfo(String uid);
/**
* 获取会员库存
* @param memberId
* @return
*/
boolean getOneFromRepertory(String memberId);
/**
* 限购数量
* @param memberId
* @return
*/
Integer getRepertoryCount(String memberId);
// /**
// * 获取会员库存
// * @param memberId
// * @return
// */
// boolean getOneFromRepertory(String memberId);
}
......@@ -99,6 +99,7 @@ public class SqlMapping {
return JsonUtils.toJson(sqlMessage);
}
@SafeVarargs
public static String gets(LinkedList<String> sqls, LinkedList<Object[]>... paramsList) {
SqlMapping.SqlMessage sqlMessage = SqlMapping.SqlMessage.getInstance();
sqlMessage.setSqls(sqls);
......
......@@ -223,7 +223,8 @@ create table adam_member
need_question int default 0 comment '是否需要答题 0不需要 1需要',
display_agreement int NOT NULL DEFAULT '0' COMMENT '是否打开0否1是',
state int NOT NULL COMMENT '状态:1-NORMAL,2-INVALID',
limitation int default 0 comment '限购数量,0不限购'
limitation int default 0 comment '限购数量,0不限购',
comment text
);
-- >>------------------------------------------------------------------------------------
drop table if exists adam_member_price;
......@@ -231,7 +232,7 @@ create table adam_member_price
(
mid int unsigned auto_increment primary key,
member_price_id varchar(64) comment '会员价格id',
member_id varchar(64) NOT NULL comment '会员种类ID',
member_id varchar(64) NOT NULL comment '会员种类ID',
status tinyint NOT NULL DEFAULT '0' COMMENT '0不可用、1上线中、2已下线',
name varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '会员包名称',
price decimal(8, 2) NOT NULL DEFAULT '0.00' COMMENT '会员包价格',
......@@ -239,7 +240,8 @@ create table adam_member_price
days int NOT NULL DEFAULT '0' COMMENT '会员包天数',
detail text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '会员包须知',
created_at datetime,
updated_at datetime
updated_at datetime,
comment text
);
-- >>------------------------------------------------------------------------------------
drop table if exists adam_member_order;
......@@ -258,7 +260,7 @@ create table adam_member_order
state tinyint comment '订单状态',
member_no varchar(20) comment '会员号',
device_from varchar(20) comment '支付终端:app,wap,js,applet',
pay_type varchar(20) comment '支付方式:alipay,wepay',
pay_type varchar(20) comment '支付方式:alipay,wepay',
pay_no varchar(64) comment '支付订单',
birthday date default null comment '用户生日',
payment_at datetime default null comment '支付时间',
......@@ -266,7 +268,8 @@ create table adam_member_order
updated_at datetime,
client_ip varchar(50),
source varchar(20),
version varchar(20)
version varchar(20),
comment text
);
-- >>------------------------------------------------------------------------------------
drop table if exists adam_user_member;
......@@ -279,7 +282,8 @@ create table adam_user_member
state tinyint comment '1-NORMAL,2-INVALID',
expiry_at datetime comment '到期日期',
created_at datetime,
updated_at datetime
updated_at datetime,
comment text
);
-- >>------------------------------------------------------------------------------------
drop table if exists adam_member_code;
......@@ -299,7 +303,8 @@ create table adam_member_code
buy_at datetime default null comment '购买时间',
use_order_no varchar(64) default null comment '消费订单号',
use_uid varchar(64) default null comment '消费用户ID',
use_at datetime default null
use_at datetime default null,
comment text
);
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
......
......@@ -16,7 +16,8 @@ public class AdamRedisConst {
public static final String INFO_USER = INFO.concat("user:");
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_USER_MEMBER = INFO.concat("user_member:");
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_ENTERS = INFO.concat("enters:");
public static final String INFO_ADDRESSES = INFO.concat("addresses:");
......@@ -25,11 +26,14 @@ public class AdamRedisConst {
public static final String INFO_MEMBER_SIMPLE = INFO.concat("member:simple");
public static final String INFO_MEMBER_AGREEMENT = INFO.concat("member:agreement");
public static final String INCR = ADAM.concat("incr:");
public static final String INCR_MEMBER_NO = INCR.concat(":member_no:");
public static final String INFO_MEMBERS = ADAM.concat(":list:members");
public static final String INFO_MEMBERS_INFO = ADAM.concat(":list:members:info:");
public static final String INFO_MEMBERS_PRICE_INFO = ADAM.concat(":list:members:price:info:");
public static final String INFO_MEMBERS_CODE_INFO = ADAM.concat(":list:members:code:info:");
public static final String MEMBER_MEMBER_NO_MAX_KEY = ADAM.concat(":members:member_no_max:");
public static final String INFO_MEMBERS_REPERTORY_INFO = ADAM.concat(":list:members:repertory:");
public static final String INFO_MEMBERS_ORDER_INFO = ADAM.concat(":list:members:order:");
}
......@@ -122,22 +122,23 @@ public class AdamLoginController {
@Pattern(regexp = "\\d{6}", message = "验证码格式有误")
@RequestParam String code) {
log.debug("mobile:{},code:{}", mobile, code);
if (!this.checkSmsCode(mobile, code)) return ResponseDto.failure(ErrorMapping.get("10002"));
long startTime = System.currentTimeMillis();
String uid = adamRdmService.getUidByMobile(mobile);
log.info("redis getUidByMobile calltime: {}",System.currentTimeMillis() - startTime);
AdamUserInfoVo userInfoVo =
StringUtils.isEmpty(uid) ? adamUserService.register(mobile) : adamRdmService.getUserInfoVoByUid(uid);
boolean toRegister = StringUtils.isEmpty(uid);
AdamUserInfoVo userInfoVo = toRegister ? adamUserService.register(mobile) : adamRdmService.getUserInfoVoByUid(uid);
AdamLoginInfoVo loginInfoVo = AdamLoginInfoVo.getNew();
// if (userInfoVo.getIsComplete() == 1) {
loginInfoVo.setRealNameInfo(adamRdmService.getRealInfoVoByUid(userInfoVo.getUid()));
loginInfoVo.setThirdPartInfo(adamRdmService.getThirdPartVoListByUid(userInfoVo.getUid()));
loginInfoVo.setUserMemberVo(adamRdmService.getUserMemberVoByUid(userInfoVo.getUid()));
if (!toRegister) {
loginInfoVo.setRealNameInfo(adamRdmService.getRealInfoVoByUid(userInfoVo.getUid()));
loginInfoVo.setThirdPartInfo(adamRdmService.getThirdPartVoListByUid(userInfoVo.getUid()));
loginInfoVo.setUserMemberVo(adamRdmService.getUserMemberVoByUid(userInfoVo.getUid()));
}
loginInfoVo.setMemberSimpleVo(adamRdmService.getMemberSimpleVo());
// }
loginInfoVo.setUserInfo(userInfoVo);
loginInfoVo.setToken(this.ssoProcess(userInfoVo));
return ResponseDto.success(loginInfoVo);
......@@ -151,20 +152,22 @@ public class AdamLoginController {
@PostMapping(value = {"login/mobile"})
public ResponseDto<AdamLoginInfoVo> loginByMobile(@NotBlank(message = "访问令牌不能为空") @RequestParam String accessToken) {
log.debug("login by mobile access token:{}", accessToken);
String mobile = this.getMobile(accessToken);
if (StringUtils.isEmpty(mobile)) return ResponseDto.failure(ErrorMapping.get("10005"));
String uid = adamRdmService.getUidByMobile(mobile);
AdamUserInfoVo userInfoVo =
StringUtils.isEmpty(uid) ? adamUserService.register(mobile) : adamRdmService.getUserInfoVoByUid(uid);
boolean toRegister = StringUtils.isEmpty(uid);
AdamUserInfoVo userInfoVo = toRegister ? adamUserService.register(mobile) : adamRdmService.getUserInfoVoByUid(uid);
AdamLoginInfoVo loginInfoVo = AdamLoginInfoVo.getNew();
// if (loginInfoVo.getUserInfo().getIsComplete() == 1) {
loginInfoVo.setRealNameInfo(adamRdmService.getRealInfoVoByUid(userInfoVo.getUid()));
loginInfoVo.setThirdPartInfo(adamRdmService.getThirdPartVoListByUid(userInfoVo.getUid()));
loginInfoVo.setUserMemberVo(adamRdmService.getUserMemberVoByUid(userInfoVo.getUid()));
if (!toRegister) {
loginInfoVo.setRealNameInfo(adamRdmService.getRealInfoVoByUid(userInfoVo.getUid()));
loginInfoVo.setThirdPartInfo(adamRdmService.getThirdPartVoListByUid(userInfoVo.getUid()));
loginInfoVo.setUserMemberVo(adamRdmService.getUserMemberVoByUid(userInfoVo.getUid()));
}
loginInfoVo.setMemberSimpleVo(adamRdmService.getMemberSimpleVo());
// }
loginInfoVo.setUserInfo(userInfoVo);
loginInfoVo.setToken(this.ssoProcess(userInfoVo));
return ResponseDto.success(AdamLoginInfoVo.getNew());
......
......@@ -6,7 +6,8 @@ import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.adam.dto.AdamMemberOrderCallbackResult;
import com.liquidnet.service.adam.constant.AdamMemberConst;
import com.liquidnet.service.adam.dto.AdamMemberOrderCallbackParam;
import com.liquidnet.service.adam.dto.AdamMemberOrderCodeParam;
import com.liquidnet.service.adam.dto.AdamMemberOrderParam;
import com.liquidnet.service.adam.dto.AdamMemberOrderResult;
......@@ -76,7 +77,7 @@ public class AdamMemberOrderController {
@PostMapping("buy")
public ResponseDto<AdamMemberOrderResult> buyMemberOrCode(@Valid @RequestBody AdamMemberOrderParam param) {
try {
log.info("member/order/buy:param:{}", JsonUtils.toJson(param));
log.debug("member/order/buy:param:{}", JsonUtils.toJson(param));
AdamRealInfoVo realInfoVo = adamRealNameService.queryByUid(CurrentUtil.getCurrentUid());
if (null == realInfoVo) {
......@@ -88,14 +89,38 @@ public class AdamMemberOrderController {
return adamMemberOrderService.buyMemberOrMemberCode(param);
} catch (Exception e) {
log.error("系统异常:购买会员或会员码", e);
log.error("购买会员或会员码异常", e);
return ResponseDto.failure();
}
}
@ApiOperationSupport(order = 2)
@ApiOperation(value = "会员支付回调")
@PostMapping("callback")
public String paymentCallBack(@ModelAttribute AdamMemberOrderCallbackParam parameter){
log.debug("/member/callback.parameter:{}", JsonUtils.toJson(parameter));
if (1 != parameter.getStatus() ||
!parameter.getType().equals(AdamMemberConst.TYPE_VIP) ||
null == parameter.getOrderCode() ||
null == parameter.getCode()) {
log.error("会员支付回调参数有误:{}", JsonUtils.toJson(parameter));
return "fail";
}
ResponseDto<Object> dto = adamMemberOrderService.memberNotifyCallBack(parameter);
if (!dto.isSuccess()) {
log.warn("###会员支付回调处理失败:handleDto:{},CallbackParam:{}", JsonUtils.toJson(dto), JsonUtils.toJson(parameter));
return "fail";
}
return "success";
}
@ApiOperationSupport(order = 3)
@ApiOperation(value = "使用兑换码")
@PostMapping("use/memberCode")
@PostMapping("exchange")
public ResponseDto<AdamMemberOrderResult> useMemberCode(@Valid @RequestBody AdamMemberOrderCodeParam param) {
try {
AdamRealInfoVo realInfoVo = adamRealNameService.queryByUid(CurrentUtil.getCurrentUid());
......@@ -108,12 +133,12 @@ public class AdamMemberOrderController {
return adamMemberOrderService.useMemberCode(param);
} catch (Exception e) {
log.error("系统异常:使用兑换码", e);
log.error("使用兑换码异常", e);
return ResponseDto.failure();
}
}
@ApiOperationSupport(order = 3)
@ApiOperationSupport(order = 4)
@ApiOperation(value = "会员订单列表")
@GetMapping("list")
public ResponseDto<List<AdamMemberOrderVo>> getMemberOrderList() {
......@@ -122,7 +147,7 @@ public class AdamMemberOrderController {
return ResponseDto.success(memberOrderList);
}
@ApiOperationSupport(order = 4)
@ApiOperationSupport(order = 5)
@ApiOperation(value = "会员订单详情")
@GetMapping("info/{orderNo}")
public ResponseDto<AdamMemberOrderVo> getMemberOrderList(@NotBlank @PathVariable String orderNo) {
......@@ -130,17 +155,7 @@ public class AdamMemberOrderController {
return ResponseDto.success(memberOrderInfo);
}
@ApiOperationSupport(order = 5)
@ApiOperation(value = "会员支付回调")
@PostMapping("callback")
public void memberOrderCallBack(@ModelAttribute AdamMemberOrderCallbackResult result){
log.debug("callback.result:{}", JsonUtils.toJson(result));
ResponseDto<Object> dto = adamMemberOrderService.memberNotifyCallBack(result);
if (!dto.isSuccess()) {
log.warn(JsonUtils.toJson(dto));
}
}
@ApiOperationSupport(order = 6)
@ApiOperation(value = "会员订单状态")
@GetMapping("check")
public ResponseDto<Integer> checkOrderResult(@NotBlank @RequestParam String orderNo) {
......
package com.liquidnet.service.adam.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.mq.constant.MQConst;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.adam.constant.AdamMemberConst;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.AdamMemberOrderCallbackResult;
import com.liquidnet.service.adam.dto.AdamMemberOrderCallbackParam;
import com.liquidnet.service.adam.dto.AdamMemberOrderCodeParam;
import com.liquidnet.service.adam.dto.AdamMemberOrderParam;
import com.liquidnet.service.adam.dto.AdamMemberOrderResult;
......@@ -21,7 +21,7 @@ import com.liquidnet.service.adam.service.admin.IAdamMemberPriceService;
import com.liquidnet.service.adam.util.MemberUtil;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.mongodb.BasicDBObject;
import com.liquidnet.service.base.SqlMapping;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
......@@ -327,152 +327,127 @@ public class AdamMemberOrderServiceImpl extends ServiceImpl<AdamMemberOrderMappe
}
@Override
public ResponseDto<Object> memberNotifyCallBack(AdamMemberOrderCallbackResult result) {
if (1 != result.getStatus() ||
!result.getType().equals(AdamMemberConst.TYPE_VIP) ||
null == result.getOrderCode() ||
null == result.getCode()) {
return ResponseDto.failure(ErrorMapping.get("10500"), result);
public ResponseDto<Object> memberNotifyCallBack(AdamMemberOrderCallbackParam parameter) {
AdamMemberOrderVo handleMemberOrderVo = mongoTemplate.findOne(
Query.query(Criteria.where("orderNo").is(parameter.getOrderCode())),
AdamMemberOrderVo.class, AdamMemberOrderVo.class.getSimpleName()
);
// AdamMemberConst.STATUS_*:0-待支付,1-已支付,2-已过期,3-超时付,4-退款中,5-退款完成
if (1 == handleMemberOrderVo.getState() || 3 == handleMemberOrderVo.getState()) {
return ResponseDto.failure(ErrorMapping.get("10502"), parameter);
}
AdamMemberOrderVo orderVo = mongoTemplate.findOne(Query.query(Criteria.where("orderNo").is(result.getOrderCode())), AdamMemberOrderVo.class, AdamMemberOrderVo.class.getSimpleName());
int state = orderVo.getState();
if (AdamMemberConst.STATUS_PAID == state || AdamMemberConst.STATUS_LATE == state) {
// 订单已经处理过
return ResponseDto.failure(ErrorMapping.get("10502"), result);
if (parameter.getPrice().compareTo(handleMemberOrderVo.getPrice()) != 0) {
// 订单金额比对
return ResponseDto.failure(ErrorMapping.get("10503"), parameter);
}
if (result.getPrice().compareTo(orderVo.getPrice()) != 0) {
// 金额不一致
return ResponseDto.failure(ErrorMapping.get("10503"), result);
AdamMemberPriceVo memberPriceVo = adamMemberPriceService.query(handleMemberOrderVo.getMemberId(), handleMemberOrderVo.getMemberPriceId());
if (null == memberPriceVo) {
return ResponseDto.failure(ErrorMapping.get("10500"));
}
/**
* 购买方式[order.mode]:
* 0-购买会员
* 1-购买会员码(不需要填写地址)
* 2-使用会员码(购买的) 仅限从未购买过会员的用户使用,需要填写地址
* 3-使用礼包码(赠送的) 仅限从未购买过会员的用户使用,不需要填写地址
*/
LinkedList<String> toMqSqls = new LinkedList<>();
LinkedList<Object[]> operationObjs = new LinkedList<>(), updateMemberOrderObjs = new LinkedList<>();
AdamMemberOrderVo updateMemberOrderVo = AdamMemberOrderVo.getNew();
String currentDateTime = DateUtil.getNowTime();
// 获取购买天数
AdamMemberPriceVo priceVo = adamMemberPriceService.query(orderVo.getMemberId(), orderVo.getMemberPriceId());
String cardNumber = "";
AdamMemberCodeVo codeVo = null;
int day = priceVo.getDays();
try {
if (AdamMemberConst.SUB_TYPE_BUY_VIP.equals(orderVo.getMode())) { // 购买会员
AdamUserMemberVo userMemberInfo = adamRdmService.getUserMemberVoByUid(orderVo.getUid());
if (null == userMemberInfo) { // 创建会员
cardNumber = adamUserMemberService.getMaxMemberNo(orderVo.getMemberId());
AdamUserMemberVo createMemberUser = AdamUserMemberVo.getNew();
createMemberUser.setMemberId(orderVo.getMemberId());
createMemberUser.setMemberNo(orderVo.getMemberNo());
createMemberUser.setState(AdamMemberConst.STATE_VALID);
createMemberUser.setUid(orderVo.getUid());
createMemberUser.setCreatedAt(currentDateTime);
createMemberUser.setUpdatedAt(currentDateTime);
createMemberUser.setMemberNo(cardNumber);
Date expiryAt = DateUtil.getBeforeDayEnd(Calendar.getInstance(), day);
String expiryAtStr = DateUtil.format(expiryAt, DateUtil.Formatter.yyyyMMddHHmmss);
createMemberUser.setExpiryAt(expiryAtStr);
// todo vip card code 记录 自动创建并使用
codeVo = this.getAdamMemberCodeVo(orderVo, result.getCode(), currentDateTime);
codeVo.setState(1);
codeVo.setUseUid(orderVo.getUid());
codeVo.setUseOrderNo(orderVo.getMemberCode());
codeVo.setMemberNo(orderVo.getMemberNo());
codeVo.setUseAt(currentDateTime);
codeVo.setMemberCodeId(IDGenerator.nextSnowId().toString());
// 订单写入MongoDB和Redis中
mongoTemplate.insert(createMemberUser, AdamUserMemberVo.class.getSimpleName());
// redisUtil.hset(AdamRedisConst.INFO_MEMBERS_USER, orderVo.getUid(), createMemberUser);
adamRdmService.setUserMemberVoByUid(orderVo.getUid(), createMemberUser);
// 会员码使用记录
mongoTemplate.insert(codeVo, AdamMemberCodeVo.class.getSimpleName());
redisUtil.hset(AdamRedisConst.INFO_MEMBERS_CODE_INFO.concat(codeVo.getBuyUid()), codeVo.getBuyOrderNo(), codeVo);
// todo mq 发送数据到队列中
} else { // 续费
String currentExpiryAt = userMemberInfo.getExpiryAt();
Date now = DateUtil.parse(DateUtil.getNowTime(), DateUtil.DATE_SMALL_STR),
currentExpiryAtDate = DateUtil.parse(currentExpiryAt, DateUtil.DATE_FULL_STR);
currentExpiryAtDate = currentExpiryAtDate.before(now) ? now : currentExpiryAtDate;
Calendar calendar = Calendar.getInstance();
calendar.setTime(currentExpiryAtDate);
Date expiryAt = DateUtil.getBeforeDayEnd(calendar, day);
String expiryAtStr = DateUtil.format(expiryAt, DateUtil.Formatter.yyyyMMddHHmmss);
userMemberInfo.setExpiryAt(expiryAtStr);
BasicDBObject object = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(userMemberInfo)));
mongoTemplate.getCollection(AdamUserMemberVo.class.getSimpleName())
.updateOne(Query.query(Criteria.where("uid").is(userMemberInfo.getUid())).getQueryObject(), object);
// redisUtil.hset(AdamRedisConst.INFO_MEMBERS_USER, orderVo.getUid(), userMemberInfo);
adamRdmService.setUserMemberVoByUid(orderVo.getUid(), userMemberInfo);
}
}
if (AdamMemberConst.SUB_TYPE_BUY_VIP_CODE.equals(orderVo.getMode())) { // 购买会员码
cardNumber = adamUserMemberService.getMaxMemberNo(orderVo.getMemberId());
codeVo = this.getAdamMemberCodeVo(orderVo, result.getCode(), currentDateTime);
codeVo.setState(0);
codeVo.setMemberNo(cardNumber);
mongoTemplate.insert(codeVo, AdamMemberCodeVo.class.getSimpleName());
redisUtil.hset(AdamRedisConst.INFO_MEMBERS_CODE_INFO.concat(codeVo.getBuyUid()), codeVo.getBuyOrderNo(), codeVo);
if (0 == handleMemberOrderVo.getMode()) {// 购买会员回调
AdamUserMemberVo existUserMemberVo = adamRdmService.getUserMemberVoByUid(handleMemberOrderVo.getUid());
if (null == existUserMemberVo) {// 创建会员
String memberNo = adamUserMemberService.getNextMemberNo(handleMemberOrderVo.getMemberId());
AdamUserMemberVo initUserMemberVo = AdamUserMemberVo.getNew();
initUserMemberVo.setUid(handleMemberOrderVo.getUid());
initUserMemberVo.setMemberId(handleMemberOrderVo.getMemberId());
initUserMemberVo.setMemberNo(memberNo);
initUserMemberVo.setState(1);// 1-正常,2-失效
Date expiryAt = DateUtil.getBeforeDayEnd(Calendar.getInstance(), memberPriceVo.getDays());
initUserMemberVo.setExpiryAt(DateUtil.format(expiryAt, DateUtil.Formatter.yyyyMMddHHmmss));
initUserMemberVo.setCreatedAt(currentDateTime);
// 订单写入MongoDB和Redis中
mongoTemplate.insert(initUserMemberVo, AdamUserMemberVo.class.getSimpleName());
adamRdmService.setUserMemberVoByUid(handleMemberOrderVo.getUid(), initUserMemberVo);
updateMemberOrderVo.setMemberNo(memberNo);
toMqSqls.add(SqlMapping.get("adam_user_member.add"));
operationObjs.add(new Object[]{
initUserMemberVo.getUid(), initUserMemberVo.getMemberId(), initUserMemberVo.getMemberNo(),
initUserMemberVo.getState(), initUserMemberVo.getExpiryAt(), initUserMemberVo.getCreatedAt()
});
} else { // 续费
String currentExpiryAt = existUserMemberVo.getExpiryAt();
Date now = DateUtil.parse(currentDateTime, DateUtil.DATE_SMALL_STR),
currentExpiryAtDate = DateUtil.parse(currentExpiryAt, DateUtil.DATE_FULL_STR);
currentExpiryAtDate = currentExpiryAtDate.before(now) ? now : currentExpiryAtDate;
Calendar calendar = Calendar.getInstance();
calendar.setTime(currentExpiryAtDate);
Date expiryAt = DateUtil.getBeforeDayEnd(calendar, memberPriceVo.getDays());
existUserMemberVo.setExpiryAt(DateUtil.format(expiryAt, DateUtil.Formatter.yyyyMMddHHmmss));
existUserMemberVo.setState(1);// 1-正常,2-失效
mongoTemplate.getCollection(AdamUserMemberVo.class.getSimpleName())
.updateOne(Query.query(Criteria.where("uid").is(existUserMemberVo.getUid())).getQueryObject(),
new Document("$set", Document.parse(JsonUtils.toJson(existUserMemberVo))));
adamRdmService.setUserMemberVoByUid(handleMemberOrderVo.getUid(), existUserMemberVo);
updateMemberOrderVo.setMemberNo(existUserMemberVo.getMemberNo());
toMqSqls.add(SqlMapping.get("adam_user_member.update"));
operationObjs.add(new Object[]{
existUserMemberVo.getState(), existUserMemberVo.getExpiryAt(), currentDateTime, existUserMemberVo.getUid()
});
}
// 更新订单信息
orderVo.setPaymentAt(DateUtil.format(result.getPaymentAt(), DateUtil.Formatter.yyyyMMddHHmmss));
orderVo.setState(AdamMemberConst.STATUS_PAID);
orderVo.setPayNo(result.getCode());
orderVo.setMemberNo(cardNumber);
if (null != codeVo) {
orderVo.setMemberCode(codeVo.getCode()); // 兑换码数据
}
BasicDBObject object = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(orderVo)));
mongoTemplate.getCollection(AdamMemberOrderVo.class.getSimpleName())
.updateOne(Query.query(Criteria.where("orderNo").is(orderVo.getOrderNo())).getQueryObject(), object);
redisUtil.hset(AdamRedisConst.INFO_MEMBERS_ORDER_INFO.concat(orderVo.getUid()), orderVo.getOrderNo(), orderVo);
List<Object> mqList = AdamMemberOrderVo.getMemberOrderMqList(orderVo);
/*
( `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`)
*/
// rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL, MQConst.ROUTING_KEY_SQL,
// SqlMapping.get("adam_member_order.add", mqList.toArray()));
} catch (Exception e) {
log.error("系统异常:会员订单回调处理", e);
return ResponseDto.failure(ErrorMapping.get("10501"), result);
}
if (1 == handleMemberOrderVo.getMode()) {// 购买会员码回调
String memberNo = adamUserMemberService.getNextMemberNo(handleMemberOrderVo.getMemberId());
AdamMemberCodeVo initMemberCodeVo = new AdamMemberCodeVo();
initMemberCodeVo.setCode(MemberUtil.buyCode());
initMemberCodeVo.setMemberId(handleMemberOrderVo.getMemberId());
initMemberCodeVo.setMemberPriceId(handleMemberOrderVo.getMemberPriceId());
initMemberCodeVo.setType(AdamMemberConst.TYPE_BUY);
initMemberCodeVo.setMemberNo(memberNo);
initMemberCodeVo.setState(0);
initMemberCodeVo.setBuyOrderNo(parameter.getCode());
initMemberCodeVo.setBuyUid(handleMemberOrderVo.getUid());
initMemberCodeVo.setBuyAt(currentDateTime);
initMemberCodeVo.setCreatedAt(currentDateTime);
mongoTemplate.insert(initMemberCodeVo, AdamMemberCodeVo.class.getSimpleName());
adamRdmService.setMemberCodeVoByCode(initMemberCodeVo.getCode(), initMemberCodeVo);
updateMemberOrderVo.setMemberCode(initMemberCodeVo.getCode());
updateMemberOrderVo.setMemberNo(memberNo);
toMqSqls.add(SqlMapping.get("adam_member_code.add"));
operationObjs.add(new Object[]{
initMemberCodeVo.getCode(), initMemberCodeVo.getType(), initMemberCodeVo.getMemberId(), initMemberCodeVo.getMemberPriceId(),
initMemberCodeVo.getMemberNo(), initMemberCodeVo.getState(), initMemberCodeVo.getCreatedAt(),
initMemberCodeVo.getBuyOrderNo(), initMemberCodeVo.getBuyUid(), initMemberCodeVo.getBuyAt()
});
}
updateMemberOrderVo.setPaymentAt(parameter.getPaymentAt());
updateMemberOrderVo.setState(AdamMemberConst.STATUS_PAID);
mongoTemplate.getCollection(AdamMemberOrderVo.class.getSimpleName())
.updateOne(Query.query(Criteria.where("orderNo").is(handleMemberOrderVo.getOrderNo())).getQueryObject(),
new Document(Document.parse(JsonUtils.toJson(updateMemberOrderVo))));
toMqSqls.add(SqlMapping.get("adam_member_order.update"));
updateMemberOrderObjs.add(new Object[]{
updateMemberOrderVo.getState(), updateMemberOrderVo.getMemberNo(), updateMemberOrderVo.getPaymentAt(),
currentDateTime, handleMemberOrderVo.getOrderNo()
});
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL, MQConst.ROUTING_KEY_SQL,
SqlMapping.gets(toMqSqls, operationObjs, updateMemberOrderObjs));
return ResponseDto.success();
}
/**
* 组装会员码对象
*
* @param orderVo 会员订单
* @param orderCode 订单号
* @param currentDateTime 创建时间
* @return AdamMemberCodeVo
*/
private AdamMemberCodeVo getAdamMemberCodeVo(AdamMemberOrderVo orderVo, String orderCode, String currentDateTime) {
AdamMemberCodeVo codeVo = new AdamMemberCodeVo();
codeVo.setMemberId(orderVo.getMemberId());
codeVo.setMemberPriceId(orderVo.getMemberPriceId());
codeVo.setBuyAt(currentDateTime);
codeVo.setBuyOrderNo(orderCode);
codeVo.setType(AdamMemberConst.TYPE_BUY);
codeVo.setMemberNo(orderVo.getMemberNo());
codeVo.setCode(MemberUtil.buyCode());
codeVo.setCreatedAt(currentDateTime);
codeVo.setUpdatedAt(currentDateTime);
return codeVo;
}
}
......@@ -205,13 +205,13 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
@Override
public boolean setUserMemberVoByUid(String uid, AdamUserMemberVo vo) {
return redisUtil.set(AdamRedisConst.INFO_USER_MEMBER.concat(uid), vo);
return redisUtil.set(AdamRedisConst.INFO_MEMBER_USER.concat(uid), vo);
}
@Override
public AdamUserMemberVo getUserMemberVoByUid(String uid) {
long startTime = System.currentTimeMillis();
String rk = AdamRedisConst.INFO_USER_MEMBER.concat(uid);
String rk = AdamRedisConst.INFO_MEMBER_USER.concat(uid);
AdamUserMemberVo adamUserMemberVo = (AdamUserMemberVo) redisUtil.get(rk);
if (null == adamUserMemberVo) {
adamUserMemberVo = mongoTemplate.findOne(Query.query(Criteria.where("uid").is(uid)), AdamUserMemberVo.class, AdamUserMemberVo.class.getSimpleName());
......@@ -224,7 +224,7 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
@Override
public void delUserMemberVoByUid(String uid) {
redisUtil.del(AdamRedisConst.INFO_USER_MEMBER.concat(uid));
redisUtil.del(AdamRedisConst.INFO_MEMBER_USER.concat(uid));
}
@Override
......@@ -248,6 +248,21 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
return (String) redisUtil.get(AdamRedisConst.INFO_MEMBER_AGREEMENT);
}
@Override
public boolean setMemberNoByMemberId(String memberId, long val) {
return redisUtil.set(AdamRedisConst.INCR_MEMBER_NO.concat(memberId), val);
}
@Override
public long incrMemberNoByMemberId(String memberId) {
return redisUtil.incr(AdamRedisConst.INCR_MEMBER_NO.concat(memberId), 1);
}
@Override
public Object getMemberMaxNoByMemberId(String memberId) {
return redisUtil.get(AdamRedisConst.INCR_MEMBER_NO.concat(memberId));
}
@Override
public boolean setTagsForSex(List<AdamTagVo> voList) {
return redisUtil.set(AdamRedisConst.INFO_TAGS_SEX, voList);
......@@ -267,4 +282,14 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
public List<AdamTagParentVo> getTagsForMusic() {
return (List<AdamTagParentVo>) redisUtil.get(AdamRedisConst.INFO_TAGS_MUSIC);
}
@Override
public boolean setMemberCodeVoByCode(String memberCode, AdamMemberCodeVo vo) {
return redisUtil.set(AdamRedisConst.INFO_MEMBER_CODE.concat(memberCode), vo);
}
@Override
public AdamMemberCodeVo getMemberCodeVoByCode(String memberCode) {
return (AdamMemberCodeVo) redisUtil.get(AdamRedisConst.INFO_MEMBER_CODE.concat(memberCode));
}
}
......@@ -4,13 +4,16 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamMemberVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.adam.entity.AdamUserMember;
import com.liquidnet.service.adam.mapper.AdamMemberCodeMapper;
import com.liquidnet.service.adam.mapper.AdamUserMemberMapper;
import com.liquidnet.service.adam.service.IAdamRdmService;
import com.liquidnet.service.adam.service.IAdamUserMemberService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
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.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria;
......@@ -22,86 +25,60 @@ import java.util.regex.Pattern;
@Slf4j
@Service
public class AdamUserMemberServiceImpl extends ServiceImpl<AdamUserMemberMapper, AdamUserMember> implements IAdamUserMemberService {
@Autowired
AdamUserMemberMapper adamUserMemberMapper;
@Autowired
AdamMemberCodeMapper adamMemberCodeMapper;
@Autowired
MongoTemplate mongoTemplate;
@Autowired
MongoConverter mongoConverter;
@Autowired
RabbitTemplate rabbitTemplate;
@Autowired
RedisUtil redisUtil;
IAdamRdmService adamRdmService;
@Override
public String getMaxMemberNo(String memberId) {
String memberNoMaxKey = AdamRedisConst.MEMBER_MEMBER_NO_MAX_KEY.concat(memberId);
Object maxNumber = redisUtil.get(memberNoMaxKey);
public String getNextMemberNo(String memberId) {
Object memberMaxNoByMemberId = adamRdmService.getMemberMaxNoByMemberId(memberId);
if (null == memberMaxNoByMemberId) {
// TODO: 2021/6/8 +锁:查取MONGO当前最大会员号
if (null != maxNumber) {
maxNumber = maxNumber.toString();
String newNumber = String.valueOf(redisUtil.incr(memberNoMaxKey, 1));
Integer newNumberInt = newNumber.length() - 1;
String pattern = "/([\\d])\\1{" + newNumberInt + "}/";
if (Pattern.matches(pattern, newNumber)) {// 不能是完全相同的数字
newNumber = String.valueOf(redisUtil.incr(memberNoMaxKey, 1));
}
return newNumber;
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());
long currentMaxMemberNo = Long.parseLong(latestMaxMemberNoVo.getMemberNo());
adamRdmService.setMemberNoByMemberId(memberId, currentMaxMemberNo + 1);
return String.valueOf(adamRdmService.incrMemberNoByMemberId(memberId));
} else {
maxNumber = adamMemberCodeMapper.getMaxMemberNo(memberId);// 1000
if (null != maxNumber) {
redisUtil.set(memberNoMaxKey, maxNumber);
redisUtil.incr(memberNoMaxKey, 1);
String nextMemberNoStr = String.valueOf(adamRdmService.incrMemberNoByMemberId(memberId));
if (Pattern.matches("([\\d])\\1{" + (nextMemberNoStr.length() - 1) + "}", nextMemberNoStr)) {
// 不能是完全相同的数字
nextMemberNoStr = String.valueOf(adamRdmService.incrMemberNoByMemberId(memberId));
}
return redisUtil.get(memberNoMaxKey).toString();
return nextMemberNoStr;
}
}
// @Override
// public AdamUserMemberVo getUserMemberInfo(String uid) {
// AdamUserMemberVo adamUserMemberVo = (AdamUserMemberVo) redisUtil.hget(AdamRedisConst.INFO_MEMBERS_USER, uid);
// if (null == adamUserMemberVo) {
// adamUserMemberVo = mongoTemplate.findOne(Query.query(Criteria.where("uid").is(uid)), AdamUserMemberVo.class, AdamUserMemberVo.class.getSimpleName());
//
// if (null != adamUserMemberVo) redisUtil.hset(AdamRedisConst.INFO_MEMBERS_USER, uid, adamUserMemberVo);
// public boolean getOneFromRepertory(String memberId) {
// AdamMemberVo adamMemberVo = (AdamMemberVo) redisUtil.get(AdamRedisConst.INFO_MEMBERS_INFO.concat(memberId));
// if (null == adamMemberVo) {
// adamMemberVo = mongoTemplate.findOne(Query.query(Criteria.where("memberId").is(memberId)), AdamMemberVo.class, AdamMemberVo.class.getSimpleName());
// }
// if (0 == adamMemberVo.getLimitation()) {
// return true;
// }
// String repertoryKey = AdamRedisConst.INFO_MEMBERS_REPERTORY_INFO.concat(memberId);
// Object repertory = redisUtil.get(repertoryKey);
// // 判断,如果没有从redis中拿到库存数量,则把MongoDB中查出的库存插入redis
// if (null == repertory) {
// redisUtil.set(repertoryKey, adamMemberVo.getLimitation());
// repertory = adamMemberVo.getLimitation();
// }
// Long limitation = Long.parseLong(repertory.toString());
// limitation = redisUtil.decr(repertoryKey, limitation);
// // 库存大于0 正常返回,否则回滚一位库存
// if (limitation >= 0) {
// return true;
// } else {
// redisUtil.incr(repertoryKey, 1);
// return false;
// }
// return adamUserMemberVo;
// }
@Override
public boolean getOneFromRepertory(String memberId) {
AdamMemberVo adamMemberVo = (AdamMemberVo) redisUtil.get(AdamRedisConst.INFO_MEMBERS_INFO.concat(memberId));
if (null == adamMemberVo) {
adamMemberVo = mongoTemplate.findOne(Query.query(Criteria.where("memberId").is(memberId)), AdamMemberVo.class, AdamMemberVo.class.getSimpleName());
}
if (0 == adamMemberVo.getLimitation()) {
return true;
}
String repertoryKey = AdamRedisConst.INFO_MEMBERS_REPERTORY_INFO.concat(memberId);
Object repertory = redisUtil.get(repertoryKey);
// 判断,如果没有从redis中拿到库存数量,则把MongoDB中查出的库存插入redis
if (null == repertory) {
redisUtil.set(repertoryKey, adamMemberVo.getLimitation());
repertory = adamMemberVo.getLimitation();
}
Long limitation = Long.parseLong(repertory.toString());
limitation = redisUtil.decr(repertoryKey, limitation);
// 库存大于0 正常返回,否则回滚一位库存
if (limitation >= 0) {
return true;
} else {
redisUtil.incr(repertoryKey, 1);
return false;
}
}
@Override
public Integer getRepertoryCount(String memberId) {
return 0;
}
}
......@@ -37,7 +37,7 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa
// 需要主动生成会员编号
AdamMemberCode adamMemberCode = new AdamMemberCode();
adamMemberCode.setType(param.getType());
adamMemberCode.setCode(MemberUtil.buyCode());
adamMemberCode.setCode(MemberUtil.freeCode());
adamMemberCode.setMemberId(param.getMemberId());
adamMemberCode.setMemberPriceId(param.getMemberPriceId());
adamMemberCode.setState(0);
......
......@@ -50,7 +50,8 @@
10500=会员订单回调参数有误,请核实
10500=
10501=会员订单回调处理失败,请核实
10502=会员订单回调处理失败,该订单已处理
10503=会员订单回调处理失败,订单金额有误
\ No newline at end of file
10503=会员订单回调处理失败,订单金额有误
10504=会员卡信息不存在,请核实
......@@ -13,10 +13,18 @@ adam_third_party.add=INSERT INTO adam_third_party (`uid`, open_id, avatar, nickn
adam_third_party.unbind=UPDATE adam_third_party SET `state`=2, updated_at=? WHERE `uid`=? AND platform=? AND `state`=1
# ----------------------------------------------------
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_user_member_add=
adam_user_member_update=
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.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_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_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