## 0元购买188在线支付回调;

This commit is contained in:
cabbage 2025-09-16 11:06:53 +08:00
parent 625b6eb2e6
commit bf2554ee3b
5 changed files with 154 additions and 50 deletions

View File

@ -214,6 +214,15 @@ public interface IMemberServiceApi {
*/
R<Boolean> saveMember(CuMember cuMember, SaOrderExt saOrder, Boolean isPay, CuMemberAccountExt cuMemberAccountExt);
/**
* 0元会员订单处理
*
* @param cuMember
* @param saOrder
* @return
*/
R<Boolean> handleZeroMember(CuMember cuMember, SaOrderExt saOrder);
/**
* 处理新会员生成主键跟会员编号
*

View File

@ -273,6 +273,16 @@ public class MemberServiceProvider implements IMemberServiceApi {
}
}
@Override
public R<Boolean> handleZeroMember(CuMember cuMember, SaOrderExt saOrder) {
try {
return R.ok(iCuMemberBusinessService.handleZeroMember(cuMember, saOrder));
} catch (Exception e) {
log.error("handleZeroMember error", e);
return R.fail(e.getMessage());
}
}
@Override
public R<CuMember> createMemberIdAndCode(CuMember cuMember, Boolean isHaiFun) {
return R.ok(iCuMemberService.createMemberIdAndCode(cuMember, isHaiFun));

View File

@ -48,6 +48,15 @@ public interface ICuMemberBusinessService {
*/
Boolean saveMember(CuMember cuMember, SaOrder saOrder);
/**
* 0元会员订单处理
*
* @param cuMember
* @param saOrder
* @return
*/
Boolean handleZeroMember(CuMember cuMember, SaOrder saOrder);
/*
* 在线支付修改记录
**/

View File

@ -131,7 +131,6 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
ITOnlinePaymentServiceApi itOnlinePaymentServiceApi;
@Override
@Transactional(rollbackFor = Exception.class)
public void updateCuMember(CuMember cuMember) {
redisService.lockKeyMany(CacheConstants.UPD_MEMBER + cuMember.getMemberCode());
try {
@ -330,6 +329,25 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
return Boolean.TRUE;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean handleZeroMember(CuMember cuMember, SaOrder saOrder) {
// 更新会员信息
updateCuMember(cuMember);
// 会员升级记录
saveMemberRecords(cuMember, saOrder);
// 代表在线支付在线支付先插入一条充值信息
CuMemberAccountExt cuMemberAccountExt = insertMemberRecharge(saOrder);
// 扣款信息
insertMemberTrade(saOrder, cuMemberAccountExt);
// 解锁 安置位置
redisService.unlock(CacheConstants.POSITION + cuMember.getPkPlaceParent() + cuMember.getPlaceDept());
// 扣除可用量
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveMemberOnLineTrade(CuMember cuMember, SaOrder saOrder, CuMemberAccountExt cuMemberAccountExt) {

View File

@ -808,6 +808,65 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
return Boolean.TRUE;
}
private boolean payReyZeroOrder(SaOrderExt saOrderExt, CuMember newCuMember) {
Date currentDateTime = DateUtils.currentDateTime();
newCuMember.setPayStatus(EPayStatus.PAID.getValue());
newCuMember.setPayTime(currentDateTime);
newCuMember.setConsumeMoney(saOrderExt.getOrderAmount());
newCuMember.setConsumeAchieve(saOrderExt.getOrderAchieve());
// 会员续约需求有效期为购买时间次年的上月最后一天
newCuMember.setExpireDate(DateUtils.beforeMonthLastDate(DateUtils.addYears(currentDateTime, 1)));
// 休止期普通会员6个月奖衔会员12个月先按6个月来后续MQ会统一处理同姓名同手机号会员
newCuMember.setStopDate(DateUtils.addMonths(newCuMember.getExpireDate(), 6));
if (null == newCuMember.getPkPlaceParent()
|| null == newCuMember.getPlaceDept()) {
// 当安置人和安置部门为空时进行上树
CuMember cuMember = repeatTry(newCuMember, Boolean.FALSE);
newCuMember.setPkPlaceParent(cuMember.getPkPlaceParent());
newCuMember.setPlaceDept(cuMember.getPlaceDept());
}
saOrderExt.setOrderType(EOrderType.REPURCHASE_ORDER.getValue());
saOrderExt.setOrderTypeExtend(EOrderTypeExtend.REG_REP.getValue());
saOrderExt.setPkPlacement(newCuMember.getPkPlaceParent());
saOrderExt.setOrderStatus(EOrderStatus.PAY.getValue());
saOrderExt.setPayTime(currentDateTime);
saOrderExt.setCreationTime(currentDateTime);
for (SaOrderItems saOrderItems : saOrderExt.getOrderItemsList()) {
saOrderItems.setCreationTime(saOrderExt.getCreationTime());
saOrderItems.setOrderStatus(EOrderStatus.PAY.getValue());
saOrderItems.setPkGrade(newCuMember.getPkSettleGrade());
}
// 保存订单信息
processOrder(saOrderExt);
// 调用其他服务保存会员信息会员注册信息
R<Boolean> handleResult = iMemberServiceApi.handleZeroMember(newCuMember, saOrderExt);
if (handleResult.isSuccess()) {
if (!handleResult.getData()) {
log.error("payReyZeroOrder 保存会员失败!.");
throw new RuntimeException("保存会员失败!.");
}
} else {
log.error("payReyZeroOrder 保存会员失败!.{}", handleResult.getMsg());
throw new RuntimeException("保存会员失败!.");
}
try {
// 同步全网产品库存
this.allProductSync(saOrderExt);
log.info("生产活动消息activity.exchange{}", JSONUtil.toJsonStr(saOrderExt));
rabbitTemplate.convertAndSend(RabbitMqConstants.ACTIVITY_EXCHANGE, RabbitMqConstants.ACTIVITY_KEY, saOrderExt);
// 推送秒结数据处理 -- 注册订单
rabbitTemplate.convertAndSend(RabbitMqConstants.ORDER_SECOND_EXCHANGE, RabbitMqConstants.ORDER_SECOND_KEY, saOrderExt);
} catch (Exception e) {
e.printStackTrace();
}
return Boolean.TRUE;
}
/**
* 尝试重新换位置
*
@ -1664,8 +1723,7 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
public boolean validateFirstOrder(Long pkParent, Integer pkCountry) {
String validateFirstOrder = querySystemConfigByKey(pkCountry, ESystemConfig.FIRST_ORDER.getKey());
if (EYesNo.YES.getIntValue() == Integer.parseInt(validateFirstOrder)) {
Integer count = queryCuMemberByPkMember(pkParent);
return count == 0;
return queryCuMemberByPkMember(pkParent) == 0;
}
return false;
}
@ -1911,22 +1969,6 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
}
if (EOrderType.REGISTER_ORDER.getValue() == saOrderExt.getOrderType()
|| EOrderType.SPECIAL_REGISTER_ORDER.getValue() == saOrderExt.getOrderType()) {
if (EOrderTypeExtend.REG_REP.getValue() == saOrderExt.getOrderTypeExtend()) {
// TODO 注册转复购
log.info("==========新注册转复购==========");
// 188分享订单复购订单 扩展类型为 注册转复购
OrderParam orderParam = redisService.getCacheObject(CacheConstants.TEMP_PARAM + pkMember + orderCode);
orderParam.setIsHaiFun(Boolean.TRUE);
orderParam.setOrderTypeExtend(saOrderExt.getOrderTypeExtend());
saOrderExt = packageSaOrder(orderParam, newCuMember);
saOrderExt.setPayType(EOrderPayType.ONLINE.getValue());
if (newCuMember == null) {
throw new RuntimeException("生成会员失败");
}
payRegSaOrder(saOrderExt, newCuMember, null, Boolean.TRUE);
} else {
// 注册订单
boolean isToBePay = getIsToBePayByOrderType(saOrderExt.getPkCountry(), saOrderExt.getOrderType());
OrderParam orderParam = redisService.getCacheObject(CacheConstants.TEMP_PARAM + pkMember + orderCode);
@ -1939,7 +1981,6 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
throw new RuntimeException("生成会员失败");
}
payRegSaOrder(saOrderExt, newCuMember, null, Boolean.FALSE);
}
} else if (EOrderType.UPGRADE_ORDER.getValue() == saOrderExt.getOrderType()
|| EOrderType.SPECIAL_UPGRADE_ORDER.getValue() == saOrderExt.getOrderType()) {
// 升级订单
@ -1947,8 +1988,24 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
} else {
// 其他订单
if (EOrderType.REPURCHASE_ORDER.getValue() == saOrderExt.getOrderType()
&& EOrderTypeExtend.REG_REP.getValue() == saOrderExt.getOrderTypeExtend()) {
&& EOrderTypeExtend.REG_REP.getValue().equals(saOrderExt.getOrderTypeExtend())) {
log.info("==========注册转复购==========");
if (null != newCuMember) {
// 先注册0元会员再购买注册订单复购订单 扩展类型为 注册转复购
OrderParam orderParam = redisService.getCacheObject(CacheConstants.TEMP_PARAM + pkMember + orderCode);
orderParam.setIsHaiFun(Boolean.TRUE);
orderParam.setOrderTypeExtend(saOrderExt.getOrderTypeExtend());
// 会员等级使用缓存中已经计算好的
newCuMember.setPkRegisterGrade(orderParam.getPkGrade());
newCuMember.setPkSettleGrade(orderParam.getPkGrade());
saOrderExt = packageWholeSaOrder(orderParam, newCuMember);
saOrderExt.setPayType(EOrderPayType.ONLINE.getValue());
if (!payReyZeroOrder(saOrderExt, newCuMember)) {
throw new ServiceException("会员或订单处理失败");
}
} else {
// 188分享订单复购订单 扩展类型为 注册转复购
OrderParam orderParam = redisService.getCacheObject(CacheConstants.TEMP_PARAM + pkMember + orderCode);
orderParam.setIsHaiFun(Boolean.TRUE);
@ -1973,6 +2030,7 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
throw new RuntimeException("生成会员失败");
}
payRegSaOrder(saOrderExt, newCuMember, null, Boolean.TRUE);
}
} else {
payRepurchaseSaOrder(saOrderExt, null);
}