From bf2554ee3ba81b7d541d58c619d8ef315c80d38c Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Tue, 16 Sep 2025 11:06:53 +0800 Subject: [PATCH] =?UTF-8?q?##=200=E5=85=83=E8=B4=AD=E4=B9=B0188=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E6=94=AF=E4=BB=98=E5=9B=9E=E8=B0=83=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzs/member/base/IMemberServiceApi.java | 9 + .../base/provider/MemberServiceProvider.java | 10 ++ .../service/ICuMemberBusinessService.java | 9 + .../impl/CuMemberBusinessServiceImpl.java | 20 ++- .../service/impl/SaOrderServiceImpl.java | 156 ++++++++++++------ 5 files changed, 154 insertions(+), 50 deletions(-) diff --git a/bd-api/bd-api-member/src/main/java/com/hzs/member/base/IMemberServiceApi.java b/bd-api/bd-api-member/src/main/java/com/hzs/member/base/IMemberServiceApi.java index d2be3a4a..9f873983 100644 --- a/bd-api/bd-api-member/src/main/java/com/hzs/member/base/IMemberServiceApi.java +++ b/bd-api/bd-api-member/src/main/java/com/hzs/member/base/IMemberServiceApi.java @@ -214,6 +214,15 @@ public interface IMemberServiceApi { */ R saveMember(CuMember cuMember, SaOrderExt saOrder, Boolean isPay, CuMemberAccountExt cuMemberAccountExt); + /** + * 0元会员订单处理 + * + * @param cuMember + * @param saOrder + * @return + */ + R handleZeroMember(CuMember cuMember, SaOrderExt saOrder); + /** * 处理新会员,生成主键,跟会员编号 * diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/provider/MemberServiceProvider.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/provider/MemberServiceProvider.java index a0066b75..708ba28e 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/provider/MemberServiceProvider.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/provider/MemberServiceProvider.java @@ -273,6 +273,16 @@ public class MemberServiceProvider implements IMemberServiceApi { } } + @Override + public R 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 createMemberIdAndCode(CuMember cuMember, Boolean isHaiFun) { return R.ok(iCuMemberService.createMemberIdAndCode(cuMember, isHaiFun)); diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberBusinessService.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberBusinessService.java index c1d56600..23fe3375 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberBusinessService.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberBusinessService.java @@ -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); + /* * 在线支付修改记录 **/ diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java index 7444eaf2..2001f4de 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java @@ -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) { diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java index 02ce07b2..90ffb4d5 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java @@ -808,6 +808,65 @@ public class SaOrderServiceImpl extends ServiceImpl 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 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 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,35 +1969,18 @@ public class SaOrderServiceImpl extends ServiceImpl 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()); - + // 注册订单 + boolean isToBePay = getIsToBePayByOrderType(saOrderExt.getPkCountry(), saOrderExt.getOrderType()); + OrderParam orderParam = redisService.getCacheObject(CacheConstants.TEMP_PARAM + pkMember + orderCode); + if (newCuMember == null && !isToBePay) { + newCuMember = packageCuMember(orderParam); 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); - if (newCuMember == null && !isToBePay) { - newCuMember = packageCuMember(orderParam); - saOrderExt = packageSaOrder(orderParam, newCuMember); - saOrderExt.setPayType(EOrderPayType.ONLINE.getValue()); - } - if (newCuMember == null) { - throw new RuntimeException("生成会员失败"); - } - payRegSaOrder(saOrderExt, newCuMember, null, Boolean.FALSE); } + if (newCuMember == null) { + 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,32 +1988,49 @@ public class SaOrderServiceImpl extends ServiceImpl impl } else { // 其他订单 if (EOrderType.REPURCHASE_ORDER.getValue() == saOrderExt.getOrderType() - && EOrderTypeExtend.REG_REP.getValue() == saOrderExt.getOrderTypeExtend()) { + && EOrderTypeExtend.REG_REP.getValue().equals(saOrderExt.getOrderTypeExtend())) { log.info("==========注册转复购=========="); - // 188分享订单,复购订单 扩展类型为 注册转复购 - OrderParam orderParam = redisService.getCacheObject(CacheConstants.TEMP_PARAM + pkMember + orderCode); - orderParam.setIsHaiFun(Boolean.TRUE); - orderParam.setOrderTypeExtend(saOrderExt.getOrderTypeExtend()); + if (null != newCuMember) { + // 先注册0元会员,再购买注册订单,复购订单 扩展类型为 注册转复购 + OrderParam orderParam = redisService.getCacheObject(CacheConstants.TEMP_PARAM + pkMember + orderCode); + orderParam.setIsHaiFun(Boolean.TRUE); + orderParam.setOrderTypeExtend(saOrderExt.getOrderTypeExtend()); - newCuMember = packageCuMember(orderParam); - // 会员ID已经提前生成,此处直接使用 - if (null != orderParam.getPkMemberId()) { - newCuMember.setPkId(orderParam.getPkMemberId()); - newCuMember.setPkCenterCode(null); - } + // 会员等级使用缓存中已经计算好的 + newCuMember.setPkRegisterGrade(orderParam.getPkGrade()); + newCuMember.setPkSettleGrade(orderParam.getPkGrade()); - saOrderExt = packageSaOrder(orderParam, newCuMember); - saOrderExt.setPayType(EOrderPayType.ONLINE.getValue()); - // 会员ID已经提前生成,此处直接使用 - if (null != orderParam.getPkMemberId()) { - saOrderExt.setPkCreator(orderParam.getPkMemberId()); - saOrderExt.setOrderCode(orderParam.getOrderCode()); - } + 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); + orderParam.setOrderTypeExtend(saOrderExt.getOrderTypeExtend()); - if (newCuMember == null) { - throw new RuntimeException("生成会员失败"); + newCuMember = packageCuMember(orderParam); + // 会员ID已经提前生成,此处直接使用 + if (null != orderParam.getPkMemberId()) { + newCuMember.setPkId(orderParam.getPkMemberId()); + newCuMember.setPkCenterCode(null); + } + + saOrderExt = packageSaOrder(orderParam, newCuMember); + saOrderExt.setPayType(EOrderPayType.ONLINE.getValue()); + // 会员ID已经提前生成,此处直接使用 + if (null != orderParam.getPkMemberId()) { + saOrderExt.setPkCreator(orderParam.getPkMemberId()); + saOrderExt.setOrderCode(orderParam.getOrderCode()); + } + + if (newCuMember == null) { + throw new RuntimeException("生成会员失败"); + } + payRegSaOrder(saOrderExt, newCuMember, null, Boolean.TRUE); } - payRegSaOrder(saOrderExt, newCuMember, null, Boolean.TRUE); } else { payRepurchaseSaOrder(saOrderExt, null); }