From 5c2b8e656220ce8e909abd17cb2aeaba121098ea Mon Sep 17 00:00:00 2001 From: sangelxiu1 <15781802@163.com> Date: Tue, 16 Sep 2025 17:07:19 +0800 Subject: [PATCH] =?UTF-8?q?##=20Opt=20-=20=E8=BF=81=E7=A7=BB=E5=88=86?= =?UTF-8?q?=E4=BA=AB=E6=B3=A8=E5=86=8C=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzs/member/base/IMemberServiceApi.java | 32 ++- .../com/hzs/member/base/dto/LoginMember.java | 6 + .../mapper/CuMemberRetailRangeMapper.java | 26 +++ .../service/ICuMemberRetailRangeService.java | 10 + .../impl/CuMemberRetailRangeServiceImpl.java | 19 ++ .../bonus/service/IBonusSettleService.java | 6 + .../service/impl/BonusSettleServiceImpl.java | 33 +++ .../bonus/listener/SaOrderSecondListener.java | 4 +- .../achieve/CuMemberRetailRangeMapper.xml | 44 ++++ .../controller/api/ApiMemberController.java | 61 ++++++ .../member/base/mapper/CuMemberMapper.java | 8 + .../base/provider/MemberServiceProvider.java | 39 ++++ .../service/ICuMemberRegisterService.java | 7 + .../member/base/service/ICuMemberService.java | 20 +- .../base/service/ICuMemberShareService.java | 7 +- .../impl/CuMemberRegisterServiceImpl.java | 10 + .../service/impl/CuMemberServiceImpl.java | 34 +++ .../impl/CuMemberShareServiceImpl.java | 7 + .../login/service/IMemberLoginService.java | 9 + .../service/impl/MemberLoginServiceImpl.java | 30 +++ .../controller/api/ApiShareController.java | 26 +++ .../RetailMemberTokenController.java | 78 ++++++- .../mapper/member/base/CuMemberMapper.xml | 15 ++ .../api/ApiRetailOrderController.java | 127 +++++++++++ .../service/impl/RetailOrderServiceImpl.java | 24 ++- .../retail/sale/param/RetailOrderParam.java | 4 + .../sale/param/RetailOrderRegisterParam.java | 10 +- .../com/hzs/retail/sale/vo/RetailOrderVO.java | 6 + .../api/ApiRetailWaresController.java | 157 +++++++++++++- .../retail/wares/param/WaresShareParam.java | 31 +++ .../order/param/FansConfirmOrderParam.java | 68 ++++++ .../order/param/FansConfirmOrderSkuParam.java | 21 ++ .../param/FansConfirmOrderWaresParam.java | 28 +++ .../controller/api/ApiBdWaresController.java | 129 ++++++++++++ .../hzs/sale/wares/mapper/BdWaresMapper.java | 13 ++ .../wares/mapper/BdWaresSpecsSkuMapper.java | 8 + .../sale/wares/service/IBdWaresService.java | 10 + .../service/IBdWaresSpecsSkuService.java | 9 + .../service/impl/BdWaresServiceImpl.java | 5 + .../impl/BdWaresSpecsSkuServiceImpl.java | 11 + .../mapper/sale/wares/BdWaresMapper.xml | 31 +++ .../sale/wares/BdWaresSpecsSkuMapper.xml | 19 ++ .../com/hzs/common/core/config/BdConfig.java | 71 +++---- .../common/core/constant/SysConstants.java | 5 + .../common/core/enums/EOrderTypeExtend.java | 38 ++++ .../com/hzs/common/core/enums/EShareType.java | 5 + .../security/service/MemberTokenService.java | 26 ++- bd-gateway/src/main/resources/bootstrap.yml | 6 + .../manage/OnlinePaymentController.java | 16 ++ .../pay/jdpay/dto/JdPayQueryOrderRequest.java | 27 +++ .../jdpay/dto/JdPayQueryOrderResponse.java | 197 ++++++++++++++++++ .../com/hzs/third/pay/jdpay/sdk/JdPay.java | 6 +- .../pay/jdpay/sdk/JdPayHttpClientProxy.java | 4 +- .../hzs/third/pay/service/IJdPayService.java | 9 + .../pay/service/impl/JdPayServiceImpl.java | 108 +++++++++- .../pay/service/impl/PayServiceImpl.java | 11 +- .../impl/TOnlinePaymentServiceImpl.java | 3 + .../com/hzs/third/pay/vo/OnlinePaymentVO.java | 2 +- .../service/impl/TShareCodeServiceImpl.java | 1 + 59 files changed, 1700 insertions(+), 77 deletions(-) create mode 100644 bd-business/bd-business-sale/src/main/java/com/hzs/retail/wares/param/WaresShareParam.java create mode 100644 bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderParam.java create mode 100644 bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderSkuParam.java create mode 100644 bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderWaresParam.java create mode 100644 bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOrderTypeExtend.java create mode 100644 bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayQueryOrderRequest.java create mode 100644 bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayQueryOrderResponse.java 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 8c1b5711..f7e3544f 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 @@ -2,6 +2,8 @@ package com.hzs.member.base; import com.hzs.common.core.domain.R; import com.hzs.common.domain.member.base.CuMember; +import com.hzs.common.domain.member.base.CuMemberRegister; +import com.hzs.common.domain.member.base.CuMemberShare; import com.hzs.common.domain.member.ext.CuMemberAccountExt; import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.domain.sale.ext.SaOrderExt; @@ -29,6 +31,14 @@ public interface IMemberServiceApi { */ R getMemberInfo(String memberCode); + /** + * 通过会员编码查询分享会员信息 + * + * @param memberCode 会员编号 + * @return + */ + R getShareMemberInfo(String memberCode); + /** * 根据会员ID获取会员信息(查库) * @@ -87,7 +97,6 @@ public interface IMemberServiceApi { * 撤销会员账户余额 **/ R cancelMemberAccount(Long pkMember, SaOrder saOrder); - /** * 查找安置人伞下 * @@ -163,6 +172,13 @@ public interface IMemberServiceApi { */ R saveMember(CuMember cuMember, SaOrderExt saOrder, Boolean isPay, CuMemberAccountExt cuMemberAccountExt); + /** + * 处理新会员,生成主键,跟会员编号 + * + * @param cuMember 会员 + */ + R createMemberIdAndCode(CuMember cuMember); + /** * 创建注册会员编号(放入会员编号批次占用) * @@ -204,6 +220,13 @@ public interface IMemberServiceApi { */ R> findMemberByMemberId(List pkMemberList, Integer pkCountry); + /** + * 根据会员主键查询会员注册信息 + * + * @param pkMember 会员主键 + */ + R queryCuMemberRegister(Long pkMember); + /* * 会员编号,账户类型,抽奖金额 **/ @@ -363,4 +386,11 @@ public interface IMemberServiceApi { */ R checkRegisterRelation(String phone, String parentCode); + + /** + * 查询分享会员 + * + * @param pkMember 主键 + */ + R queryCuMemberShare(Long pkMember); } diff --git a/bd-api/bd-api-member/src/main/java/com/hzs/member/base/dto/LoginMember.java b/bd-api/bd-api-member/src/main/java/com/hzs/member/base/dto/LoginMember.java index f1704da2..af3cb740 100644 --- a/bd-api/bd-api-member/src/main/java/com/hzs/member/base/dto/LoginMember.java +++ b/bd-api/bd-api-member/src/main/java/com/hzs/member/base/dto/LoginMember.java @@ -1,6 +1,7 @@ package com.hzs.member.base.dto; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.hzs.common.domain.member.base.CuMemberShare; import com.hzs.common.domain.member.ext.CuMemberExt; import lombok.AllArgsConstructor; import lombok.Builder; @@ -63,6 +64,11 @@ public class LoginMember implements Serializable { */ private CuMemberExt cuMember; + /** + * 分享会员信息(分享注册会员使用) + */ + private CuMemberShare cuMemberShare; + /** * 结算国家(此字段实体不存值,只做部分业务传递参数使用) */ diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberRetailRangeMapper.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberRetailRangeMapper.java index 79942ade..a5ae5617 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberRetailRangeMapper.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberRetailRangeMapper.java @@ -3,6 +3,9 @@ package com.hzs.bonus.achieve.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.hzs.common.domain.member.achieve.CuMemberRetailRange; import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt; +import com.hzs.common.domain.member.base.CuMember; +import com.hzs.common.domain.member.ext.CuMemberExt; +import com.hzs.common.domain.sale.ext.SaOrderExt; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; @@ -82,4 +85,27 @@ public interface CuMemberRetailRangeMapper extends BaseMapper cuMemberRangeExtList); + /** + * 向上查找所有parentID + * @param pkMember + * @return + */ + List findParentMemberList(@Param("pkMember") Long pkMember); + + + /** + * 更新自己秒结 + * @param tableName + * @param orderExt + * @param cuMember + */ + void updateMemberRetailSecondRangeSelf(@Param("tableName") String tableName, @Param("orderExt") SaOrderExt orderExt, @Param("cuMember") CuMember cuMember, @Param("updateType") Integer updateType, @Param("symbol") String symbol); + + /** + * 更新上级秒结 + * @param tableName + * @param orderExt + * @param memberList + */ + void updateMemberRetailSecondRangeParent(@Param("tableName") String tableName, @Param("orderExt") SaOrderExt orderExt, @Param("memberList") List memberList, @Param("updateType") Integer updateType, @Param("symbol") String symbol); } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailRangeService.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailRangeService.java index ceec0067..83e54bc3 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailRangeService.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailRangeService.java @@ -3,7 +3,10 @@ package com.hzs.bonus.achieve.service; import com.baomidou.mybatisplus.extension.service.IService; import com.hzs.common.domain.member.achieve.CuMemberRetailRange; import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt; +import com.hzs.common.domain.member.base.CuMember; +import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.domain.sale.ext.SaOrderExt; +import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.Date; @@ -70,4 +73,11 @@ public interface ICuMemberRetailRangeService extends IService cuMemberTreeMap); + + List findParentMemberList(Long pkMember); + + void updateMemberRetailSecondRangeSelf(String settleTableName, SaOrderExt orderExt, CuMember pkMember, Integer updateType, String symbol); + + void updateMemberRetailSecondRangeParent(String settleTableName, SaOrderExt orderExt, List pkMemberList, Integer updateType, String symbol); + } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java index 5746913c..811c89f1 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java @@ -4,9 +4,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hzs.bonus.achieve.mapper.CuMemberRetailRangeMapper; import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService; import com.hzs.common.core.constant.MagicNumberConstants; +import com.hzs.common.core.enums.EOrderType; import com.hzs.common.domain.member.achieve.CuMemberRetailRange; import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt; +import com.hzs.common.domain.member.base.CuMember; +import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.domain.sale.ext.SaOrderExt; +import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -97,6 +101,21 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl baseMapper.mergeCuMemberSecondRange(secondTableName, list)); } + @Override + public List findParentMemberList(Long pkMember) { + return baseMapper.findParentMemberList(pkMember); + } + + @Override + public void updateMemberRetailSecondRangeSelf(String settleTableName, SaOrderExt orderExt, CuMember cuMember, Integer updateType, String symbol) { + baseMapper.updateMemberRetailSecondRangeSelf(settleTableName, orderExt, cuMember, updateType, symbol); + } + + @Override + public void updateMemberRetailSecondRangeParent(String settleTableName, SaOrderExt orderExt, List pkMemberList, Integer updateType, String symbol) { + baseMapper.updateMemberRetailSecondRangeParent(settleTableName, orderExt, pkMemberList, updateType, symbol); + } + private List> setUpdCuMemberTreeLists(Map cuMemberTreeMap) { List cuMemberTreeList = new ArrayList<>(); cuMemberTreeMap.forEach((key, value) -> cuMemberTreeList.add(value)); diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/IBonusSettleService.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/IBonusSettleService.java index 1c436461..89ab7099 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/IBonusSettleService.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/IBonusSettleService.java @@ -22,4 +22,10 @@ public interface IBonusSettleService { */ void calculateCuMemberRetailRangeBonusBySaOrder(String orderCode); + /** + * 计算秒结表数据 + * @param orderExt + */ + void calculateCuMemberRetailRangeBySaOrder(SaOrderExt orderExt); + } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java index e9d42c35..7b62c281 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java @@ -1,7 +1,10 @@ package com.hzs.bonus.bonus.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService; import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService; +import com.hzs.bonus.base.service.ICuMemberService; import com.hzs.bonus.bonus.service.*; import com.hzs.bonus.bonus.vo.BonusRecordDetailVO; import com.hzs.bonus.order.service.IBonusOrderService; @@ -9,7 +12,9 @@ import com.hzs.common.core.constant.MagicNumberConstants; import com.hzs.common.core.constant.TableNameConstants; import com.hzs.common.core.enums.*; import com.hzs.common.core.utils.DateUtils; +import com.hzs.common.domain.member.base.CuMember; import com.hzs.common.domain.member.bonus.*; +import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.domain.sale.ext.SaOrderExt; import com.hzs.system.config.IBonusItemsServiceApi; import com.hzs.system.config.dto.BonusConfigDTO; @@ -47,6 +52,11 @@ public class BonusSettleServiceImpl implements IBonusSettleService { @Autowired private ICuMemberBonusDetailService cuMemberBonusDetailService; + @Autowired + private ICuMemberRetailRangeService iCuMemberRetailRangeService; + @Autowired + private ICuMemberService cuMemberService; + /** * 保存会员奖金 @@ -155,6 +165,29 @@ public class BonusSettleServiceImpl implements IBonusSettleService { } } + @Override + public void calculateCuMemberRetailRangeBySaOrder(SaOrderExt orderExt) { + Integer updateType = null; + String symbol = orderExt.getCancelBool() ? "-" : "+"; + if(orderExt.getOrderType().equals(EOrderType.RETAIL_REGISTER.getValue())){ + updateType = 1; + }else if(orderExt.getOrderType().equals(EOrderType.RETAIL_REPURCHASE.getValue())){ + updateType = 2; + } + if(ObjectUtil.isEmpty(updateType)){ + return; + } + // 今天结算期数 + String settleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, orderExt.getPayTime()); + int currentPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDate).getPkId(); + // 秒结表名 + String secondRangeTableName = TableNameConstants.CU_MEMBER_RETAIL_S + currentPeriod; + List memberList = iCuMemberRetailRangeService.findParentMemberList(orderExt.getPkMember()); + CuMember self = cuMemberService.getById(orderExt.getPkId()); + iCuMemberRetailRangeService.updateMemberRetailSecondRangeSelf(secondRangeTableName, orderExt, self, updateType, symbol); + iCuMemberRetailRangeService.updateMemberRetailSecondRangeParent(secondRangeTableName, orderExt, memberList, updateType, symbol); + } + /** * 计算每天的奖金入库 * diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/listener/SaOrderSecondListener.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/listener/SaOrderSecondListener.java index 46b2d277..67624243 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/listener/SaOrderSecondListener.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/listener/SaOrderSecondListener.java @@ -47,10 +47,10 @@ public class SaOrderSecondListener { if (saOrderExt.getCancelBool() != null && saOrderExt.getCancelBool()) { cuMemberRetailLog.setCancelStatus(EYesNo.YES.getIntValue()); } - try { Thread.sleep(1000); - iBonusSettleService.calculateCuMemberRetailRangeBonusBySaOrder(saOrderExt.getOrderCode()); +// iBonusSettleService.calculateCuMemberRetailRangeBonusBySaOrder(saOrderExt.getOrderCode()); + iBonusSettleService.calculateCuMemberRetailRangeBySaOrder(saOrderExt); } catch (Exception e) { cuMemberRetailLog.setEnableStatus(EYesNo.NO.getIntValue()); cuMemberRetailLog.setMsg(e.getMessage()); diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml index ca9ccfcb..77d432b0 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml @@ -236,6 +236,43 @@ , a.pk_share_awards = b.pk_range_awards + + UPDATE ${tableName} + SET + PK_GRADE = ${cuMember.pkSettleGrade}, + PK_AWARDS = ${cuMember.pkAwards}, + + REG_CONSUME_NEW_AMOUNT = REG_CONSUME_NEW_AMOUNT ${symbol} #{orderExt.orderAmount}, + REG_CONSUME_NEW_PV = REG_CONSUME_NEW_PV ${symbol} #{orderExt.orderAchieve}, + + + REP_CONSUME_NEW_AMOUNT = REP_CONSUME_NEW_AMOUNT ${symbol} #{orderExt.orderAmount}, + REP_CONSUME_NEW_PV = REP_CONSUME_NEW_PV ${symbol} #{orderExt.orderAchieve}, + + ALL_CONSUME_NEW_AMOUNT = ALL_CONSUME_NEW_AMOUNT ${symbol} #{orderExt.orderAmount}, + ALL_CONSUME_NEW_PV = ALL_CONSUME_NEW_PV ${symbol} #{orderExt.orderAchieve} + WHERE + PK_MEMBER = #{pkMember} + + + UPDATE ${tableName} + SET + + REG_TEAM_NEW_AMOUNT = REG_TEAM_NEW_AMOUNT ${symbol} #{orderExt.orderAmount}, + REG_TEAM_NEW_PV = REG_TEAM_NEW_PV ${symbol} #{orderExt.orderAchieve}, + + + REP_TEAM_NEW_AMOUNT = REP_TEAM_NEW_AMOUNT ${symbol} #{orderExt.orderAmount}, + REP_TEAM_NEW_PV = REP_TEAM_NEW_PV ${symbol} #{orderExt.orderAchieve}, + + ALL_TEAM_NEW_AMOUNT = ALL_TEAM_NEW_AMOUNT ${symbol} #{orderExt.orderAmount}, + ALL_TEAM_NEW_PV = ALL_TEAM_NEW_PV ${symbol} #{orderExt.orderAchieve}, + WHERE + PK_MEMBER in + + #{member.pkId} + + + diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/controller/api/ApiMemberController.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/controller/api/ApiMemberController.java index a0a76820..e566f0be 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/controller/api/ApiMemberController.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/controller/api/ApiMemberController.java @@ -1,15 +1,20 @@ package com.hzs.member.base.controller.api; +import cn.hutool.core.codec.Base64Decoder; import cn.hutool.core.collection.CollectionUtil; import com.hzs.common.core.annotation.RepeatSubmitSimple; +import com.hzs.common.core.config.BdConfig; +import com.hzs.common.core.constant.CacheConstants; import com.hzs.common.core.constant.msg.CommonMsgConstants; import com.hzs.common.core.constant.msg.ConfigMsgConstants; import com.hzs.common.core.constant.msg.MemberMsgConstants; import com.hzs.common.core.domain.FileResult; import com.hzs.common.core.domain.R; import com.hzs.common.core.enums.*; +import com.hzs.common.core.service.RedisService; import com.hzs.common.core.utils.DateUtils; import com.hzs.common.core.utils.StringUtils; +import com.hzs.common.core.utils.uuid.IdUtils; import com.hzs.common.core.web.controller.BaseController; import com.hzs.common.core.web.domain.AjaxResult; import com.hzs.common.core.web.page.TableDataInfo; @@ -35,6 +40,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.validation.Valid; import java.util.*; +import java.util.concurrent.TimeUnit; /** * 会员控制器 @@ -51,6 +57,9 @@ public class ApiMemberController extends BaseController { @Autowired private IApiAliSmsService iApiAliSmsService; + @Autowired + private RedisService redisService; + @DubboReference IGradeServiceApi iGradeServiceApi; @@ -366,4 +375,56 @@ public class ApiMemberController extends BaseController { return getDataTable(list); } + + /** + * 查询推荐人编号 -- 188分享注册 + * + * @param pkParent 推荐人(加密) + * @return + */ + @GetMapping("/fans-convert-code/{pkParent}") + public AjaxResult fansConvertCode(@PathVariable("pkParent") String pkParent) { + // 验证必输项 + if (pkParent == null) { + return AjaxResult.error(MemberMsgConstants.REQUIRED_NOT_EMPTY); + } + CuMember cuMember = iCuMemberService.getMemberById(Long.parseLong(new String(Base64Decoder.decode(pkParent)))); + if (null != cuMember) { + return AjaxResult.success("", cuMember.getMemberCode()); + } + return AjaxResult.error(); + } + + /** + * 根据订单查询会员信息 -- 188分享注册 + * + * @param orderCode 订单编号 + * @return + */ +// @RepeatSubmitSimple(intervalTime = 2L) + @GetMapping("/fans-order/{orderCode}") + public AjaxResult fansOrder(@PathVariable("orderCode") String orderCode) { + CuMemberExt cuMemberExt = iCuMemberService.queryFansOrder(orderCode); + if (null == cuMemberExt) { + return AjaxResult.error("注册会员失败,请联系客服处理"); + } + // 自动登录 uuid 标记 + String uuid = IdUtils.simpleUUID(); + // 根据会员编号放一个登录 uuid 做为自动登录校验使用(120分钟有效) + redisService.setCacheObject(CacheConstants.AUTO_LOGIN + cuMemberExt.getMemberCode(), uuid, CacheConstants.LOGIN_TOKEN_REFRESH_TIME * 2, TimeUnit.MINUTES); + + + return AjaxResult.success(MemberShare.builder() + .memberName(cuMemberExt.getMemberName()) + .memberCode(cuMemberExt.getMemberCode()) + .phone(cuMemberExt.getPhone()) + .loginPassword(cuMemberExt.getLoginPassword()) + .payPassword(cuMemberExt.getPayPassword()) + .urlAddress(BdConfig.getPc()) +// .gzh(BdConfig.getGzh()) +// .ios(BdConfig.getIos()) +// .android(BdConfig.getAndroid()) + .uuid(uuid) + .build()); + } } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/mapper/CuMemberMapper.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/mapper/CuMemberMapper.java index 14d248d6..218c4d88 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/mapper/CuMemberMapper.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/mapper/CuMemberMapper.java @@ -599,4 +599,12 @@ public interface CuMemberMapper extends BaseMapper { */ List queryDateBySummary(CensusSummaryParam censusSummaryParam); + + /** + * 查询海粉订单 + * + * @param orderCode 订单编号 + * @return + */ + CuMemberExt queryFansOrder(@Param("orderCode") String orderCode); } 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 93f4c9b6..6d2fb93d 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 @@ -1,11 +1,15 @@ package com.hzs.member.base.provider; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.hzs.common.core.domain.R; import com.hzs.common.core.enums.ELoginType; import com.hzs.common.core.utils.StringUtils; import com.hzs.common.domain.member.base.CuMember; +import com.hzs.common.domain.member.base.CuMemberRegister; +import com.hzs.common.domain.member.base.CuMemberShare; import com.hzs.common.domain.member.ext.CuMemberAccountExt; import com.hzs.common.domain.member.ext.CuMemberExt; +import com.hzs.common.domain.member.swing.ext.CuMemberSwingNetExt; import com.hzs.common.domain.sale.ext.SaOrderExt; import com.hzs.common.domain.sale.order.SaOrder; import com.hzs.member.account.dto.BusinessCommissionDTO; @@ -16,6 +20,8 @@ import com.hzs.member.base.service.*; import com.hzs.member.base.IMemberServiceApi; import com.hzs.member.empty.service.ICuMemberEmptyCodeService; import com.hzs.member.handlebusiness.dto.AnalysisBusinessAppealParam; +import com.hzs.member.swing.param.CuMemberSwingNetParam; +import com.hzs.member.swing.service.ICuMemberSwingNetService; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboService; import org.springframework.beans.factory.annotation.Autowired; @@ -34,8 +40,12 @@ public class MemberServiceProvider implements IMemberServiceApi { @Autowired private ICuMemberService iCuMemberService; @Autowired + private ICuMemberShareService iCuMemberShareService; + @Autowired private ICuMemberBusinessService iCuMemberBusinessService; @Autowired + private ICuMemberRegisterService iCuMemberRegisterService; + @Autowired private ICuMemberEmptyCodeService iCuMemberEmptyCodeService; @Override @@ -52,6 +62,20 @@ public class MemberServiceProvider implements IMemberServiceApi { return R.ok(loginMember); } + + @Override + public R getShareMemberInfo(String memberCode) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CuMemberShare::getMemberCode, memberCode); + CuMemberShare cuMemberShare = iCuMemberShareService.getOne(queryWrapper); + if (null == cuMemberShare) { + return R.fail("用户名或密码错误"); + } + LoginMember loginMember = new LoginMember(); + loginMember.setLoginType(ELoginType.SHARE_MEMBER.getValue()); + loginMember.setCuMemberShare(cuMemberShare); + return R.ok(loginMember); + } @Override public R getMemberById(Long memberId) { return R.ok(iCuMemberService.getMemberById(memberId)); @@ -191,6 +215,11 @@ public class MemberServiceProvider implements IMemberServiceApi { } } + @Override + public R createMemberIdAndCode(CuMember cuMember) { + return R.ok(iCuMemberService.createMemberIdAndCode(cuMember)); + } + @Override public R createRegisterMemberCode(CuMember cuMember) { return R.ok(iCuMemberService.createRegisterMemberCode(cuMember)); @@ -216,6 +245,11 @@ public class MemberServiceProvider implements IMemberServiceApi { return R.ok(iCuMemberService.findMemberByMemberId(pkMemberList, pkCountry)); } + @Override + public R queryCuMemberRegister(Long pkMember) { + return R.ok(iCuMemberRegisterService.queryCuMemberRegister(pkMember)); + } + @Override public R updateCuMemberAccountByDraw(Long pkMember, Integer pkCountry, Integer accountValue, BigDecimal rewardMoney) { try { @@ -344,4 +378,9 @@ public class MemberServiceProvider implements IMemberServiceApi { return R.ok(iCuMemberService.checkRegisterRelation(phone, parentCode)); } + + @Override + public R queryCuMemberShare(Long pkMember) { + return R.ok(iCuMemberShareService.queryCuMemberShare(pkMember)); + } } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberRegisterService.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberRegisterService.java index f2e6edae..1d4ae7f3 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberRegisterService.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberRegisterService.java @@ -19,6 +19,13 @@ public interface ICuMemberRegisterService extends IService { */ List queryCuMemberRegisterExeByCondition(MemberParam memberParam); + /** + * 根据会员主键查询会员注册信息 + * + * @param pkMember 会员主键 + */ + CuMemberRegister queryCuMemberRegister(Long pkMember); + /** * 将用户注册表信息更改为死点 * diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberService.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberService.java index 6098e6a2..5aa1b321 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberService.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberService.java @@ -155,7 +155,15 @@ public interface ICuMemberService extends IService { * @param digit 编号数字位数 * @return */ - String createUserNameByPremix(Integer pkCountry, Integer digit); + String createUserNameByPremix(Integer pkCountry, Integer digit); /** + * 生成会员编号 + * + * @param pkCountry 所属国家 + * @param isHaiFun + * @param digit 编号数字位数 + * @return + */ + String createUserNameByPremix(Integer pkCountry, Boolean isHaiFun, Integer digit); /** * 批量生成会员编号 @@ -771,7 +779,7 @@ public interface ICuMemberService extends IService { * @return */ CuMember getRetailTopMember(Long pkMember, String memberCode, Long topPkMember, String topMemberCode); - + String createRetailMemberCode(String prefix); /** * 校验注册关系(是否跨团队) * 2024.12.24 修改为校验手机号必须唯一(9035) @@ -869,4 +877,12 @@ public interface ICuMemberService extends IService { */ List selectCensusSummary(CensusSummaryParam censusSummaryParam, List days); + + /** + * 查询海粉订单 + * + * @param orderCode 订单编号 + * @return + */ + CuMemberExt queryFansOrder(String orderCode); } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberShareService.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberShareService.java index 686beef1..9bac0405 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberShareService.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICuMemberShareService.java @@ -22,5 +22,10 @@ public interface ICuMemberShareService extends IService { * @return */ List seaFlourList(SeaFlourParam seaFlourParam); - + /** + * 查询会员分享 + * + * @param pkMember 会员主键 + */ + CuMemberShare queryCuMemberShare(Long pkMember); } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberRegisterServiceImpl.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberRegisterServiceImpl.java index ca8a748f..002e2a6c 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberRegisterServiceImpl.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberRegisterServiceImpl.java @@ -1,5 +1,6 @@ package com.hzs.member.base.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hzs.common.core.utils.DateUtils; import com.hzs.common.domain.member.base.CuMemberRegister; @@ -26,6 +27,15 @@ public class CuMemberRegisterServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CuMemberRegister::getPkMember, pkMember); + queryWrapper.orderByAsc(CuMemberRegister::getPayTime); + List cuMemberRegisters = baseMapper.selectList(queryWrapper); + return cuMemberRegisters.get(0); + } + @Override public void updateCuMemberRegister(CuMemberRegister cuMemberRegister) { baseMapper.updateCuMemberRegister(cuMemberRegister); diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberServiceImpl.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberServiceImpl.java index 16c5a8e1..148ffb7a 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberServiceImpl.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberServiceImpl.java @@ -1556,6 +1556,34 @@ public class CuMemberServiceImpl extends ServiceImpl i return memberCode; } + @Override + public String createUserNameByPremix(Integer pkCountry, Boolean isHaiFun, Integer digit) { + String prefix; + if (isHaiFun) { + prefix = SysConstants.HAI_FUN_PREFIX; + } else { + CountryDTO country = iCountryServiceApi.getCountry(pkCountry).getData(); + prefix = country.getCode(); + } + if (StringUtils.isEmpty(prefix)) { + return null; + } + // 生成loginName + String memberCode = this.createMemberCode(prefix, digit); + + CuMember cuMemberByKey = getMember(memberCode); + if (cuMemberByKey != null && cuMemberByKey.getPkId() > 0) { + // 用户名已经存在,则继续尝试 + return this.createUserNameByPremix(pkCountry, isHaiFun, digit); + } else { + // 验证空单注册里面是否存在编号 + List cuMemberEmptyDetails = iCuMemberEmptyCodeService.queryCuMemberEmptyCode(memberCode); + if (CollectionUtil.isNotEmpty(cuMemberEmptyDetails)) { + return this.createUserNameByPremix(pkCountry, isHaiFun, digit); + } + } + return memberCode; + } /** * 创建会员编号 * @@ -3009,6 +3037,7 @@ public class CuMemberServiceImpl extends ServiceImpl i * @param prefix 会员编号前缀 * @return */ + @Override public String createRetailMemberCode(String prefix) { if (StringUtils.isEmpty(prefix)) { prefix = SysConstants.RETAIL_PREFIX; @@ -3248,4 +3277,9 @@ public class CuMemberServiceImpl extends ServiceImpl i return censusSummaryList; } + + @Override + public CuMemberExt queryFansOrder(String orderCode) { + return baseMapper.queryFansOrder(orderCode); + } } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberShareServiceImpl.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberShareServiceImpl.java index 484846da..33371947 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberShareServiceImpl.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberShareServiceImpl.java @@ -1,5 +1,6 @@ package com.hzs.member.base.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hzs.common.domain.member.base.CuMemberShare; import com.hzs.member.base.mapper.CuMemberShareMapper; @@ -30,4 +31,10 @@ public class CuMemberShareServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.select("PK_ID,MEMBER_CODE,MEMBER_NAME,PHONE,PK_PARENT"); + return baseMapper.selectById(pkMember); + } } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/login/service/IMemberLoginService.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/login/service/IMemberLoginService.java index 157c9f1f..b6f74543 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/login/service/IMemberLoginService.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/login/service/IMemberLoginService.java @@ -21,4 +21,13 @@ public interface IMemberLoginService { **/ LoginMember passwordFreelogin(String username); + + /** + * 分享登录 + * + * @param username 用户名 + * @param password 密码 + * @return + */ + LoginMember shareLogin(String username, String password); } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/login/service/impl/MemberLoginServiceImpl.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/login/service/impl/MemberLoginServiceImpl.java index c2a8572d..948f122f 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/login/service/impl/MemberLoginServiceImpl.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/login/service/impl/MemberLoginServiceImpl.java @@ -11,6 +11,7 @@ import com.hzs.common.core.utils.ServletUtils; import com.hzs.common.core.utils.StringUtils; import com.hzs.common.core.utils.ip.IpUtils; import com.hzs.common.domain.member.base.CuMember; +import com.hzs.common.domain.member.base.CuMemberShare; import com.hzs.common.domain.member.detail.CuMemberLogin; import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.security.utils.SecurityUtils; @@ -157,6 +158,35 @@ public class MemberLoginServiceImpl implements IMemberLoginService { return loginMember; } + @Override + public LoginMember shareLogin(String username, String password) { + // 用户名或密码为空 错误 + if (StringUtils.isAnyBlank(username, password)) { + // 用户/密码必须填写 + throw new ServiceException(TransactionUtils.getContent(SystemMsgConstants.USER_REQUIRED)); + } + // 查询用户信息 + R memberResult = iMemberServiceApi.getShareMemberInfo(username); + + if (R.FAIL == memberResult.getCode()) { + throw new ServiceException(memberResult.getMsg()); + } + + if (StringUtils.isNull(memberResult.getData())) { + // 登录用户: %s 不存在 + throw new ServiceException(TransactionUtils.getContent(SystemMsgConstants.USER_NOT_EXIST, username)); + } + + LoginMember loginMember = memberResult.getData(); + CuMemberShare cuMemberShare = loginMember.getCuMemberShare(); + // 密码校验 + if (!SecurityUtils.matchesPassword(password, cuMemberShare.getLoginPwd())) { + // 用户不存在/密码错误 + throw new ServiceException(TransactionUtils.getContent(SystemMsgConstants.USER_ERROR, username)); + } + + return loginMember; + } /** * 记录登录信息 * diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/share/controller/api/ApiShareController.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/share/controller/api/ApiShareController.java index 1a3bbae4..86f2b363 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/share/controller/api/ApiShareController.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/share/controller/api/ApiShareController.java @@ -174,4 +174,30 @@ public class ApiShareController extends BaseController { } + + + /** + * 获取188分享码(H5) + * + * @return + */ + @GetMapping("/fans-code-h5") + public AjaxResult fansCodeH5() { + Long userId = SecurityUtils.getUserId(); + // 188注册分享人就是自己 + R resultR = iShareServiceApi.queryShareCode(ShareServiceDTO.builder() + .eShareType(EShareType.FANS) + .pkBusiness(userId) + .pkCountry(SecurityUtils.getPkCountry()) + .userId(userId) + .build()); + if (resultR.isSuccess()) { + Map resultMap = new HashMap<>(); + resultMap.put("dataUrl", resultR.getData()); + // 前端无法根据URL生成海报,此处需要转一下base64 + resultMap.put("dataStr", Base64Util.toUrlBase64(resultR.getData())); + return AjaxResult.success(resultMap); + } + return AjaxResult.error(); + } } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/login/controller/RetailMemberTokenController.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/login/controller/RetailMemberTokenController.java index 055fbc25..b12b401b 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/retail/login/controller/RetailMemberTokenController.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/login/controller/RetailMemberTokenController.java @@ -1,13 +1,22 @@ package com.hzs.retail.login.controller; +import cn.hutool.core.codec.Base64Decoder; import com.hzs.common.core.constant.CacheConstants; +import com.hzs.common.core.constant.MagicNumberConstants; +import com.hzs.common.core.constant.SysConstants; import com.hzs.common.core.service.RedisService; import com.hzs.common.core.utils.StringUtils; import com.hzs.common.core.web.domain.AjaxResult; +import com.hzs.common.domain.member.base.CuMemberShare; +import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.security.auth.AuthMemberUtil; import com.hzs.common.security.service.MemberTokenService; import com.hzs.common.security.utils.SecurityUtils; import com.hzs.member.base.dto.LoginMember; +import com.hzs.member.base.service.ICuMemberService; +import com.hzs.member.base.service.ICuMemberShareService; +import com.hzs.member.login.param.AutoLoginParam; +import com.hzs.member.login.service.IMemberLoginService; import com.hzs.retail.login.param.RetailAutoLoginParam; import com.hzs.retail.login.param.RetailLoginParam; import com.hzs.retail.login.service.IRetailMemberLoginService; @@ -28,6 +37,13 @@ import javax.validation.Valid; @RestController public class RetailMemberTokenController { + @Autowired + private ICuMemberService iCuMemberService; + @Autowired + private ICuMemberShareService iCuMemberShareService; + @Autowired + private IMemberLoginService iMemberLoginService; + @Autowired private MemberTokenService memberTokenService; @Autowired @@ -50,14 +66,16 @@ public class RetailMemberTokenController { return AjaxResult.success(memberTokenService.createToken(loginMember)); } + + /** - * 新零售会员自动登录 + * 新零售会员自动登录-分享注册后自动登录 * * @param param 自助登录参数 * @return */ - @PostMapping("/auto-login") - public AjaxResult autoLogin(@Valid @RequestBody RetailAutoLoginParam param) { + @PostMapping("/registered-auto-login") + public AjaxResult registeredAutoLogin(@Valid @RequestBody RetailAutoLoginParam param) { String tmpUuid = redisService.getCacheObject(CacheConstants.AUTO_LOGIN + param.getUsername()); if (!param.getUuid().equals(tmpUuid)) { // 没有自动登录标记 或者 标记不对,则不能自动登录 @@ -70,6 +88,60 @@ public class RetailMemberTokenController { return AjaxResult.success(memberTokenService.createToken(loginMember)); } + /** + * 新零售会员自动登录 + * + * @param param 自助登录参数 + * @return + */ + @PostMapping("/auto-login") +// public AjaxResult autoLogin(@Valid @RequestBody RetailAutoLoginParam param) { +// String tmpUuid = redisService.getCacheObject(CacheConstants.AUTO_LOGIN + param.getUsername()); +// if (!param.getUuid().equals(tmpUuid)) { +// // 没有自动登录标记 或者 标记不对,则不能自动登录 +// return AjaxResult.error("当前会员已不能快递登录"); +// } +// +// // 用户登录 +// LoginMember loginMember = iRetailMemberLoginService.login(param.getUsername(), param.getPassword()); +// // 获取登录token +// return AjaxResult.success(memberTokenService.createToken(loginMember)); +// } + public AjaxResult autoLogin(@RequestBody AutoLoginParam param) { + if (StringUtils.isEmpty(param.getPkParent())) { + return AjaxResult.error("缺少注册信息!"); + } + + // 上级编码(推荐人) + Long pkParent = Long.parseLong(new String(Base64Decoder.decode(param.getPkParent()))); + // 查询上级信息 + CuMemberExt parentCuMember = iCuMemberService.getMemberById(pkParent); + if (null == parentCuMember) { + return AjaxResult.error("二维码已经失效!"); + } + + // 生成的会员编号 + String memberCode = iCuMemberService.createRetailMemberCode(SysConstants.RETAIL_PREFIX); +// iCuMemberService.createUserNameByPremix(parentCuMember.getPkSettleCountry(), MagicNumberConstants.DIGIT); + + CuMemberShare cuMemberShare = new CuMemberShare(); + cuMemberShare.setMemberCode(memberCode); + cuMemberShare.setPkParent(pkParent); + cuMemberShare.setLoginPassword(SysConstants.LOGIN_PASSWORD); + cuMemberShare.setLoginPwd(SecurityUtils.encryptPassword(SysConstants.LOGIN_PASSWORD)); + cuMemberShare.setPayPassword(SysConstants.PAY_PASSWORD); + cuMemberShare.setPayPwd(SecurityUtils.encryptPassword(SysConstants.PAY_PASSWORD)); + cuMemberShare.setPkCreator(pkParent); + cuMemberShare.setPkCountry(parentCuMember.getPkSettleCountry()); + if (iCuMemberShareService.save(cuMemberShare)) { + // 会员登录 + LoginMember loginMember = iMemberLoginService.shareLogin(memberCode, SysConstants.LOGIN_PASSWORD); + + // 获取登录token + return AjaxResult.success(memberTokenService.createToken(loginMember)); + } + return AjaxResult.error(); + } /** * 会员登出 * diff --git a/bd-business/bd-business-member/src/main/resources/mapper/member/base/CuMemberMapper.xml b/bd-business/bd-business-member/src/main/resources/mapper/member/base/CuMemberMapper.xml index f257100c..f49af52d 100644 --- a/bd-business/bd-business-member/src/main/resources/mapper/member/base/CuMemberMapper.xml +++ b/bd-business/bd-business-member/src/main/resources/mapper/member/base/CuMemberMapper.xml @@ -2378,4 +2378,19 @@ + + + diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java index bf52a76b..e06f04e4 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java @@ -6,16 +6,23 @@ import com.hzs.common.core.annotation.RepeatSubmit; import com.hzs.common.core.config.BdConfig; import com.hzs.common.core.constant.CacheConstants; import com.hzs.common.core.domain.R; +import com.hzs.common.core.enums.EGrade; +import com.hzs.common.core.enums.EOrderPrefix; import com.hzs.common.core.enums.ESpecialArea; import com.hzs.common.core.enums.EYesNo; import com.hzs.common.core.exception.ServiceException; import com.hzs.common.core.service.RedisService; +import com.hzs.common.core.utils.CommonUtil; import com.hzs.common.core.utils.StringUtils; import com.hzs.common.core.web.domain.AjaxResult; import com.hzs.common.domain.member.base.CuMember; +import com.hzs.common.domain.member.base.CuMemberShare; import com.hzs.common.domain.member.ext.CuMemberAccountExt; +import com.hzs.common.domain.sale.ext.BdWaresSpecsSkuExt; import com.hzs.common.domain.sale.ext.SaOrderExt; +import com.hzs.common.domain.sale.wares.BdWares; import com.hzs.common.domain.system.config.BdGrade; +import com.hzs.common.security.service.MemberTokenService; import com.hzs.common.security.utils.SecurityUtils; import com.hzs.member.base.IMemberServiceApi; import com.hzs.retail.sale.controller.service.IRetailOrderService; @@ -23,10 +30,13 @@ import com.hzs.retail.sale.param.*; import com.hzs.retail.sale.vo.*; import com.hzs.sale.order.param.*; import com.hzs.sale.order.service.ISaOrderService; +import com.hzs.sale.order.service.ISaOrderShareTmpService; import com.hzs.sale.shopping.service.IShoppingCartService; import com.hzs.sale.shopping.vo.ProductGroup; import com.hzs.sale.shopping.vo.ShoppingCartRedis; import com.hzs.sale.shopping.vo.ShoppingCartVO; +import com.hzs.sale.wares.service.IBdWaresService; +import com.hzs.sale.wares.service.IBdWaresSpecsSkuService; import com.hzs.system.base.IAreaServiceApi; import com.hzs.system.config.IGradeServiceApi; import com.hzs.system.config.dto.GradeDTO; @@ -40,6 +50,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 新零售订单控制器 @@ -58,12 +69,21 @@ public class ApiRetailOrderController { @Autowired private RedisService redisService; + @Autowired + private IBdWaresService iBdWaresService; + @Autowired + private IBdWaresSpecsSkuService iBdWaresSpecsSkuService; + @Autowired + private ISaOrderShareTmpService iSaOrderShareTmpService; + @DubboReference IMemberServiceApi iMemberServiceApi; @DubboReference IGradeServiceApi iGradeServiceApi; @DubboReference IAreaServiceApi iAreaServiceApi; + @Autowired + private MemberTokenService memberTokenService; /** * 校验会员等级 @@ -590,4 +610,111 @@ public class ApiRetailOrderController { return null; } + + /** + * 确认注册订单 + * + * @param registerParam 订单入参 + * @param source 数据来源 + * @return + */ + @RepeatSubmit + @PostMapping("/fans-confirm-order") + public AjaxResult fansConfirmOrder(@RequestBody RetailOrderRegisterParam registerParam, + @RequestHeader("Source") Integer source) { + // 设置数据来源 + registerParam.setSource(source); + // 会员ID + registerParam.setPkCreator(SecurityUtils.getUserId()); + // 新零售注册专区 + registerParam.setSpecialArea(ESpecialArea.RETAIL_REGISTER.getValue()); + // 系统类型 + registerParam.setSystemType(SecurityUtils.getSystemType()); + + // 获取等级列表 + List gradeList = iGradeServiceApi.getRetailGradeList().getData(); + // 校验注册权限等 +// String checkStr = this.checkRegistrationPermission(registerParam, gradeList); +// if (null != checkStr) { +// return AjaxResult.error(checkStr); +// } + + // 手机号可以重复,不需要进行是否重复校验 -- 已经跳过,此处可以不需要当前判断 +// // 校验注册关系(是否跨团队) -- 2024.12.24 修改为校验手机号必须唯一 +// String relationStr = iMemberServiceApi.checkRegisterRelation(registerParam.getPhone(), registerParam.getParentCode()).getData(); +// if (relationStr != null) { +// return AjaxResult.error(relationStr); +// } + + // 购物车中获取商品信息 +// registerParam.setOrderItemsParams(convertShoppingCarToSku(registerParam.getPkCreator(), registerParam.getShopList())); + + // 遍历商品,封装订单明细 + // 订单金额 + BigDecimal orderAmount = BigDecimal.ZERO; + + // 生成订单编号 + String orderCode = CommonUtil.createSerialNumber(EOrderPrefix.ORDER_CODE); + List orderItemsParams = new ArrayList<>(); + for (FansConfirmOrderWaresParam waresParam : registerParam.getWaresList()) { + // 遍历sku + // 产品价格等map + Map skuMap = iBdWaresSpecsSkuService.queryWaresSpecsSkuList(waresParam.getSkuList().stream().map(FansConfirmOrderSkuParam::getPkWaresSku).collect(Collectors.toList())); + + // 查询商品 + BdWares bdWares = iBdWaresService.getWares(waresParam.getPkWares()); + + // 缓存数据 + List itemsParamList = new ArrayList<>(waresParam.getSkuList().size()); + // 遍历产品信息 + for (FansConfirmOrderSkuParam skuParam : waresParam.getSkuList()) { + BdWaresSpecsSkuExt specsSku = skuMap.get(skuParam.getPkWaresSku()); + orderAmount = orderAmount.add(specsSku.getPrice().multiply(new BigDecimal(skuParam.getQuantity() * waresParam.getQuantity()))); + + itemsParamList.add(WaresItemsParam.builder() + .pkWaresSpecsSku(skuParam.getPkWaresSku().intValue()) + .quantity(skuParam.getQuantity()) + .build()); + } + orderItemsParams.add(OrderItemsParam.builder() + .waresCode(bdWares.getWaresCode()) + .quantity(waresParam.getQuantity()) + .waresItemsParamList(itemsParamList) + .build()); + } + registerParam.setOrderItemsParams(orderItemsParams); + CuMemberShare memberShare = memberTokenService.getLoginMember().getCuMemberShare(); + registerParam.setCuMemberShare(memberShare); +// registerParam.setPkCreator(memberShare.getPkParent()); + // 确认订单 + String str = iRetailOrderService.confirmRegOrder(registerParam, gradeList); + // redis 拿金额 + SaOrderExt saOrder = redisService.getCacheObject(CacheConstants.RETAIL_TEMP_ORDER + registerParam.getPkCreator() + registerParam.getOrderCode()); + return confirmSharedOrderReturn(str, registerParam.getPkCreator(), registerParam.getShopList(), registerParam.getOrderCode(), saOrder.getOrderAmount()); + } + + /** + * 确认订单返回 + * + * @param str 提示信息(null 为成功) + * @param pkCreator 订单创建人 + * @param shopList 购物车ID + * @param orderCode 订单编号 + * @return + */ + private AjaxResult confirmSharedOrderReturn(String str, Long pkCreator, List shopList, String orderCode, BigDecimal orderAmount) { + if (null == str) { + // 删除购物车商品数据 + if (CollectionUtil.isNotEmpty(shopList)) { + shoppingCartService.batchDelShopping(pkCreator, ShoppingCartVO.builder() + .deleteList(shopList) + .build()); + } + return AjaxResult.success(RetailOrderVO.builder() + .orderCode(orderCode) + .orderAmount(orderAmount) + .build()); + } + return AjaxResult.error(str); + } } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java index bd76d6ef..febd7feb 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java @@ -3,6 +3,7 @@ package com.hzs.retail.sale.controller.service.impl; import cn.hutool.core.codec.Base64Encoder; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Validator; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONUtil; @@ -17,6 +18,7 @@ import com.hzs.common.core.utils.*; import com.hzs.common.core.web.domain.AjaxResult; import com.hzs.common.domain.member.account.CuMemberAccount; import com.hzs.common.domain.member.base.CuMember; +import com.hzs.common.domain.member.base.CuMemberShare; import com.hzs.common.domain.member.ext.CuMemberAccountExt; import com.hzs.common.domain.sale.ext.BdWaresDetailExt; import com.hzs.common.domain.sale.ext.SaOrderExt; @@ -447,8 +449,15 @@ public class RetailOrderServiceImpl implements IRetailOrderService { cuMember.setCreationTime(new Date()); cuMember.setPkCreator(orderParam.getPkCreator()); + boolean isShared = false; if (null == orderParam.getCreatorMember()) { - orderParam.setCreatorMember(iMemberServiceApi.getRetailMember(orderParam.getPkCreator(), null).getData()); + if(ObjectUtil.isNotEmpty(orderParam.getCuMemberShare())){ + orderParam.setCreatorMember(iMemberServiceApi.getRetailMember(orderParam.getCuMemberShare().getPkParent(), null).getData()); + cuMember.setPkParent(orderParam.getCuMemberShare().getPkParent()); + isShared = true; + }else{ + orderParam.setCreatorMember(iMemberServiceApi.getRetailMember(orderParam.getPkCreator(), null).getData()); + } } cuMember.setPkVertex(orderParam.getCreatorMember().getPkVertex()); cuMember.setPkTeamCode(orderParam.getCreatorMember().getPkTeamCode()); @@ -456,7 +465,12 @@ public class RetailOrderServiceImpl implements IRetailOrderService { cuMember.setSystemType(orderParam.getCreatorMember().getSystemType()); // 获取会员编号、会员主键 - cuMember = iMemberServiceApi.createRetailMemberIdAndCode(cuMember).getData(); + if(isShared){ + cuMember.setPkId(orderParam.getCuMemberShare().getPkId()); + cuMember.setMemberCode(orderParam.getCuMemberShare().getMemberCode()); + }else{ + cuMember = iMemberServiceApi.createRetailMemberIdAndCode(cuMember).getData(); + } return cuMember; } @@ -592,7 +606,13 @@ public class RetailOrderServiceImpl implements IRetailOrderService { } // 封装会员信息 CuMember newMember = this.packageCuMember(registerParam); + newMember.setPkSettleGrade(registerParam.getPkGrade()); + newMember.setPkAwards(registerParam.getPkAwards()); saOrderExt.setPkMember(newMember.getPkId()); + if(ObjectUtil.isNotEmpty(registerParam.getCuMemberShare())){ + saOrderExt.setPkReference(registerParam.getCuMemberShare().getPkParent()); + saOrderExt.setOrderType(EOrderType.RETAIL_REGISTER.getValue()); + } resultStr = this.payRegOrder(saOrderExt, newMember, null); } else { diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderParam.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderParam.java index a5587c9a..7cf9682d 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderParam.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderParam.java @@ -6,6 +6,7 @@ import com.hzs.common.core.constant.CountryConstants; import com.hzs.common.core.enums.EDelivery; import com.hzs.common.core.enums.ETransportType; import com.hzs.common.domain.member.base.CuMember; +import com.hzs.common.domain.member.base.CuMemberShare; import com.hzs.sale.order.param.OrderItemsParam; import com.hzs.sale.shopping.vo.ShoppingCartRedis; import lombok.AllArgsConstructor; @@ -113,6 +114,9 @@ public class RetailOrderParam implements Serializable { @JsonIgnore private CuMember creatorMember; +// @JsonIgnore + private CuMemberShare cuMemberShare; + /** * 订单编号 */ diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderRegisterParam.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderRegisterParam.java index 4982edcb..577d6a6b 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderRegisterParam.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderRegisterParam.java @@ -1,11 +1,12 @@ package com.hzs.retail.sale.param; -import lombok.Data; -import lombok.EqualsAndHashCode; +import com.hzs.sale.order.param.FansConfirmOrderWaresParam; +import lombok.*; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Size; import java.io.Serializable; +import java.util.List; /** * 新零售注册订单入参 @@ -33,4 +34,9 @@ public class RetailOrderRegisterParam extends RetailOrderParam implements Serial @Size(max = 20, message = "推荐编号不能超过20位") private String parentCode; + + /** + * 商品列表 + */ + private List waresList; } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/vo/RetailOrderVO.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/vo/RetailOrderVO.java index a6b3e3c8..95e44578 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/vo/RetailOrderVO.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/vo/RetailOrderVO.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; +import java.math.BigDecimal; /** * 新零售订单返回VO @@ -48,4 +49,9 @@ public class RetailOrderVO implements Serializable { */ private String urlAddress; + /** + * 待支付金额 + */ + private BigDecimal orderAmount; + } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/wares/controller/api/ApiRetailWaresController.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/wares/controller/api/ApiRetailWaresController.java index feea16a2..2824171d 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/wares/controller/api/ApiRetailWaresController.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/wares/controller/api/ApiRetailWaresController.java @@ -1,6 +1,7 @@ package com.hzs.retail.wares.controller.api; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.codec.Base64Decoder; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; @@ -10,10 +11,13 @@ import com.hzs.common.core.domain.R; import com.hzs.common.core.enums.EAccount; import com.hzs.common.core.enums.ELabelType; import com.hzs.common.core.enums.ESpecialArea; +import com.hzs.common.core.enums.EWaresType; import com.hzs.common.core.utils.ComputeUtil; import com.hzs.common.core.utils.DistinctByKeyUtil; +import com.hzs.common.core.utils.StringUtils; import com.hzs.common.core.web.controller.BaseController; import com.hzs.common.core.web.domain.AjaxResult; +import com.hzs.common.domain.member.base.CuMember; import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.domain.sale.ext.BdWaresExt; import com.hzs.common.domain.sale.ext.BdWaresSpecsSkuExt; @@ -25,8 +29,11 @@ import com.hzs.member.base.IMemberServiceApi; import com.hzs.member.base.dto.ShowWaresDTO; import com.hzs.retail.wares.param.RetailWaresDetailParam; import com.hzs.retail.wares.param.RetailWaresParam; +import com.hzs.retail.wares.param.WaresShareParam; import com.hzs.retail.wares.vo.RetailWaresDetailVO; import com.hzs.retail.wares.vo.RetailWaresVO; +import com.hzs.sale.order.service.ISaOrderService; +import com.hzs.sale.wares.param.CuWaresParams; import com.hzs.sale.wares.service.IBdWaresLabelService; import com.hzs.sale.wares.service.IBdWaresRangeService; import com.hzs.sale.wares.service.IBdWaresService; @@ -38,10 +45,7 @@ import com.hzs.system.config.dto.AreaCurrencyDTO; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.math.BigDecimal; @@ -64,6 +68,8 @@ public class ApiRetailWaresController extends BaseController { private IBdWaresSpecsSkuService iBdWaresSpecsSkuService; @Autowired private IBdWaresRangeService iBdWaresRangeService; + @Autowired + private ISaOrderService iSaOrderService; @DubboReference ICurrencyServiceApi iCurrencyServiceApi; @@ -378,4 +384,147 @@ public class ApiRetailWaresController extends BaseController { } + + /** + * 188分享专区商品列表 + */ + @GetMapping("/list-wares-share") + public AjaxResult listWaresShare(WaresShareParam param) { + param.setSpecialArea(ESpecialArea.REGISTER_AREA.getValue()); + param.setIsMakerGift(EWaresType.ORDINARY.getValue()); + param.setPkCountry(CountryConstants.CHINA_COUNTRY); + + // 返回数据 + List waresParamsList = new ArrayList<>(); + + // 查询商品列表 + List bdWaresExtList = iBdWaresService.listWaresShare(param.getSpecialArea(), param.getIsMakerGift(), param.getPkCountry()); + + if (CollectionUtil.isNotEmpty(bdWaresExtList)) { + // 商品主键列表 + List waresIdList = bdWaresExtList.stream().map(BdWares::getPkId).collect(Collectors.toList()); + + if (StringUtils.isNotEmpty(param.getShareMemberCode())) { + // 分享人ID + Long pkMember = Long.parseLong(new String(Base64Decoder.decode(param.getShareMemberCode()))); + CuMember cuMember = iSaOrderService.getCuMemberByKey(pkMember); + // 当前会员编号 + String memberCode = cuMember.getMemberCode(); + + // 检验商品团队信息 + Map> waresAuthorityMap = iBdWaresService.getWaresAuthority(waresIdList); + List showWaresList = bdWaresExtList.stream().map(we -> getShowWares(we.getPkId(), pkMember, memberCode, waresAuthorityMap)).collect(Collectors.toList()); + R> waresShowMapDto = iMemberServiceApi.checkIsShowWares(showWaresList); + Map waresShowMap = waresShowMapDto.getData(); + + // 商品标签列表 + BdWaresLabel waresLabel = new BdWaresLabel(); + waresLabel.setPkIdList(waresIdList); + List list = iBdWaresLabelService.selectByList(waresLabel); + // 标签 + for (BdWaresExt bdWaresExt : bdWaresExtList) { + // 保证标签 + List ensureLabelList = new ArrayList<>(); + // 卖点标签 + List sellingLabelList = new ArrayList<>(); + + for (BdLabelExt bdLabel : list) { + if (ELabelType.PREFIX.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) { + // 前缀标签 + bdWaresExt.setPrefixLabelTarget(bdLabel); + } + if (ELabelType.COOL.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) { + // 酷炫标签 + bdWaresExt.setCoolLabelTarget(bdLabel); + } + if (ELabelType.ENSURE.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) { + // 保证标签 + ensureLabelList.add(bdLabel); + } + if (ELabelType.SELLING.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) { + // 卖点标签 + sellingLabelList.add(bdLabel); + } + } + bdWaresExt.setEnsureLabelList(ensureLabelList.stream().filter(DistinctByKeyUtil.distinctByKey(BdLabel::getPkId)).collect(Collectors.toList())); + bdWaresExt.setSellingLabelList(sellingLabelList.stream().filter(DistinctByKeyUtil.distinctByKey(BdLabel::getPkId)).collect(Collectors.toList())); + } + + // 查询商品sku 最小值 和数量 + List waresSpecsSkuArray = iBdWaresSpecsSkuService.selectByMinWaresSpecsSkuByPkWaresList(waresIdList); + Map> waresSpecsSkuMap = waresSpecsSkuArray.stream().collect(Collectors.groupingBy(BdWaresSpecsSkuExt::getPkWares)); + + // 查询默认规格 + List waresSpecsSkuList = iBdWaresSpecsSkuService.selectByWaresSpecsSku(waresIdList); + + for (BdWaresExt waresExt : bdWaresExtList) { + // 校验团队信息 + Boolean isShowWares = waresShowMap.get(waresExt.getPkId()); + if (null == isShowWares || !isShowWares) { + continue; + } + + CuWaresParams waresParams = BeanUtil.copyProperties(waresExt, CuWaresParams.class); + // 价格 + BigDecimal waresPrice = BigDecimal.ZERO; + // 业绩 + BigDecimal waresAchieve = BigDecimal.ZERO; + + List waresSpecsSku = waresSpecsSkuMap.get(waresExt.getPkId()); + waresSpecsSku = waresSpecsSku.stream().peek(a -> a.setProductGift(a.getPkProduct() + "" + a.getIsGift())).collect(Collectors.toList()); + Map> col = waresSpecsSku.stream().collect(Collectors.groupingBy(BdWaresSpecsSkuExt::getProductGift)); + for (Map.Entry> integerListEntry : col.entrySet()) { + // 取得每一个商品价格最小值 + Optional minBdWaresSpecsSkuExt = integerListEntry.getValue().stream().filter(Objects::nonNull).min(Comparator.comparing(BdWaresSpecsSkuExt::getPrice)); + BdWaresSpecsSkuExt bdWaresSpecsSkuExt = minBdWaresSpecsSkuExt.get(); + waresPrice = waresPrice.add(bdWaresSpecsSkuExt.getPrice().multiply(new BigDecimal(bdWaresSpecsSkuExt.getQuantity()))); + waresAchieve = waresAchieve.add(bdWaresSpecsSkuExt.getAchieve().multiply(new BigDecimal(bdWaresSpecsSkuExt.getQuantity()))); + } + + // 计算商品列表价格和业绩最小值 + waresParams.setWaresPrice(waresPrice); + waresParams.setWaresAchieve(waresAchieve); + // 商品业绩计算汇率 + if (waresParams.getWaresAchieve() != null) { + waresParams.setWaresAchieve(waresParams.getWaresAchieve()); + waresParams.setWaresPrice(waresParams.getWaresPrice()); + } else { + waresParams.setWaresAchieve(BigDecimal.ZERO); + waresParams.setWaresPrice(BigDecimal.ZERO); + } + + // 查询默认规格 + JSONArray jsonArray = new JSONArray(); + List collect = waresSpecsSkuList.stream().filter(DistinctByKeyUtil.distinctByKey(BdWaresSpecsSku::getPkWaresDetail)).collect(Collectors.toList()); + for (BdWaresSpecsSkuExt bdWaresSpecsSku : collect) { + if (bdWaresSpecsSku.getPkWares().equals(waresExt.getPkId())) { + JSONObject js = new JSONObject(); + js.put("pkProduct", bdWaresSpecsSku.getPkProduct()); + js.put("pkSkuId", bdWaresSpecsSku.getPkId()); + js.put("quantity", bdWaresSpecsSku.getQuantity()); + jsonArray.add(js); + } + } + waresParams.setProductGroup(jsonArray); + waresParamsList.add(waresParams); + } + } + } + return AjaxResult.success(waresParamsList); + } + + /** + * 查询团队配置是否展示该商品 + * + * @param pkWares + * @return + */ + public ShowWaresDTO getShowWares(Integer pkWares, Long loginMember, String loginMemberCode, Map> waresAuthorityMap) { + ShowWaresDTO showWaresDTO = new ShowWaresDTO(); + showWaresDTO.setPkWares(pkWares); + showWaresDTO.setLoginMember(loginMember); + showWaresDTO.setLoginMemberCode(loginMemberCode); + showWaresDTO.setWaresAuthorityList(waresAuthorityMap.get(pkWares)); + return showWaresDTO; + } } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/wares/param/WaresShareParam.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/wares/param/WaresShareParam.java new file mode 100644 index 00000000..1e5e125b --- /dev/null +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/wares/param/WaresShareParam.java @@ -0,0 +1,31 @@ +package com.hzs.retail.wares.param; + +import lombok.Data; + +/** + * 分享商品查询条件 + */ +@Data +public class WaresShareParam { + + /** + * 分享会员编号 + */ + private String shareMemberCode; + + /** + * 所属专区 + */ + private Integer specialArea; + + /** + * 商品类型 + */ + private Integer isMakerGift; + + /** + * 国家 + */ + private Integer pkCountry; + +} diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderParam.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderParam.java new file mode 100644 index 00000000..28aea898 --- /dev/null +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderParam.java @@ -0,0 +1,68 @@ +package com.hzs.sale.order.param; + +import lombok.Data; + +import java.util.List; + +/** + * 海粉确认订单入参 + */ +@Data +public class FansConfirmOrderParam { + + /*** + * 自然国 + */ + private Integer pkCountry; + + /** + * 会员姓名 + */ + private String memberName; + + /** + * 联系方式 + */ + private String phone; + + /** + * 收货人 + */ + private String recName; + + /** + * 收货电话 + */ + private String recPhone; + + /** + * 收货省 + */ + private Integer recProvince; + + /** + * 收货市 + */ + private Integer recCity; + + /** + * 收货县 + */ + private Integer recCounty; + + /** + * 收货地址 + */ + private String recAddress; + + /** + * 备注 + */ + private String remark; + + /** + * 商品列表 + */ + private List waresList; + +} diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderSkuParam.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderSkuParam.java new file mode 100644 index 00000000..b533710b --- /dev/null +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderSkuParam.java @@ -0,0 +1,21 @@ +package com.hzs.sale.order.param; + +import lombok.Data; + +/** + * 海粉确认订单产品入参 + */ +@Data +public class FansConfirmOrderSkuParam { + + /** + * SKU ID + */ + private Long pkWaresSku; + + /** + * 产品数量 + */ + private Integer quantity; + +} diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderWaresParam.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderWaresParam.java new file mode 100644 index 00000000..e5cb4067 --- /dev/null +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/param/FansConfirmOrderWaresParam.java @@ -0,0 +1,28 @@ +package com.hzs.sale.order.param; + +import lombok.Data; + +import java.util.List; + +/** + * 海粉确认订单商品入参 + */ +@Data +public class FansConfirmOrderWaresParam { + + /** + * 商品ID + */ + private Integer pkWares; + + /** + * 商品数量 + */ + private Integer quantity; + + /** + * 产品列表 + */ + private List skuList; + +} diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/controller/api/ApiBdWaresController.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/controller/api/ApiBdWaresController.java index dc709de0..51f64430 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/controller/api/ApiBdWaresController.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/controller/api/ApiBdWaresController.java @@ -1,6 +1,7 @@ package com.hzs.sale.wares.controller.api; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.codec.Base64Decoder; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; @@ -27,6 +28,7 @@ import com.hzs.common.security.utils.SecurityUtils; import com.hzs.common.util.TransactionUtils; import com.hzs.member.base.IMemberServiceApi; import com.hzs.member.base.dto.ShowWaresDTO; +import com.hzs.retail.wares.param.WaresShareParam; import com.hzs.sale.order.service.ISaOrderService; import com.hzs.sale.shopping.service.IShoppingCartService; import com.hzs.sale.shopping.vo.WaresItemWaresInfo; @@ -87,6 +89,133 @@ public class ApiBdWaresController extends BaseController { @Autowired protected StringRedisTemplate redisTemplate; + /** + * 188分享专区商品列表 + */ + @GetMapping("/list-wares-share") + public AjaxResult listWaresShare(WaresShareParam param) { + param.setSpecialArea(ESpecialArea.RETAIL_REGISTER.getValue()); + param.setIsMakerGift(EWaresType.ORDINARY.getValue()); + param.setPkCountry(CountryConstants.CHINA_COUNTRY); + + // 返回数据 + List waresParamsList = new ArrayList<>(); + + // 查询商品列表 + List bdWaresExtList = iBdWaresService.listWaresShare(param.getSpecialArea(), param.getIsMakerGift(), param.getPkCountry()); + + if (CollectionUtil.isNotEmpty(bdWaresExtList)) { + // 商品主键列表 + List waresIdList = bdWaresExtList.stream().map(BdWares::getPkId).collect(Collectors.toList()); + + if (StringUtils.isNotEmpty(param.getShareMemberCode())) { + // 分享人ID + Long pkMember = Long.parseLong(new String(Base64Decoder.decode(param.getShareMemberCode()))); + CuMember cuMember = iSaOrderService.getCuMemberByKey(pkMember); + // 当前会员编号 + String memberCode = cuMember.getMemberCode(); + + // 检验商品团队信息 + Map> waresAuthorityMap = iBdWaresService.getWaresAuthority(waresIdList); + List showWaresList = bdWaresExtList.stream().map(we -> getShowWares(we.getPkId(), pkMember, memberCode, waresAuthorityMap)).collect(Collectors.toList()); + R> waresShowMapDto = iMemberServiceApi.checkIsShowWares(showWaresList); + Map waresShowMap = waresShowMapDto.getData(); + + // 商品标签列表 + BdWaresLabel waresLabel = new BdWaresLabel(); + waresLabel.setPkIdList(waresIdList); + List list = iBdWaresLabelService.selectByList(waresLabel); + // 标签 + for (BdWaresExt bdWaresExt : bdWaresExtList) { + // 保证标签 + List ensureLabelList = new ArrayList<>(); + // 卖点标签 + List sellingLabelList = new ArrayList<>(); + + for (BdLabelExt bdLabel : list) { + if (ELabelType.PREFIX.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) { + // 前缀标签 + bdWaresExt.setPrefixLabelTarget(bdLabel); + } + if (ELabelType.COOL.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) { + // 酷炫标签 + bdWaresExt.setCoolLabelTarget(bdLabel); + } + if (ELabelType.ENSURE.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) { + // 保证标签 + ensureLabelList.add(bdLabel); + } + if (ELabelType.SELLING.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) { + // 卖点标签 + sellingLabelList.add(bdLabel); + } + } + bdWaresExt.setEnsureLabelList(ensureLabelList.stream().filter(DistinctByKeyUtil.distinctByKey(BdLabel::getPkId)).collect(Collectors.toList())); + bdWaresExt.setSellingLabelList(sellingLabelList.stream().filter(DistinctByKeyUtil.distinctByKey(BdLabel::getPkId)).collect(Collectors.toList())); + } + + // 查询商品sku 最小值 和数量 + List waresSpecsSkuArray = iBdWaresSpecsSkuService.selectByMinWaresSpecsSkuByPkWaresList(waresIdList); + Map> waresSpecsSkuMap = waresSpecsSkuArray.stream().collect(Collectors.groupingBy(BdWaresSpecsSkuExt::getPkWares)); + + // 查询默认规格 + List waresSpecsSkuList = iBdWaresSpecsSkuService.selectByWaresSpecsSku(waresIdList); + + for (BdWaresExt waresExt : bdWaresExtList) { + // 校验团队信息 + Boolean isShowWares = waresShowMap.get(waresExt.getPkId()); + if (null == isShowWares || !isShowWares) { + continue; + } + + CuWaresParams waresParams = BeanUtil.copyProperties(waresExt, CuWaresParams.class); + // 价格 + BigDecimal waresPrice = BigDecimal.ZERO; + // 业绩 + BigDecimal waresAchieve = BigDecimal.ZERO; + + List waresSpecsSku = waresSpecsSkuMap.get(waresExt.getPkId()); + waresSpecsSku = waresSpecsSku.stream().peek(a -> a.setProductGift(a.getPkProduct() + "" + a.getIsGift())).collect(Collectors.toList()); + Map> col = waresSpecsSku.stream().collect(Collectors.groupingBy(BdWaresSpecsSkuExt::getProductGift)); + for (Map.Entry> integerListEntry : col.entrySet()) { + // 取得每一个商品价格最小值 + Optional minBdWaresSpecsSkuExt = integerListEntry.getValue().stream().filter(Objects::nonNull).min(Comparator.comparing(BdWaresSpecsSkuExt::getPrice)); + BdWaresSpecsSkuExt bdWaresSpecsSkuExt = minBdWaresSpecsSkuExt.get(); + waresPrice = waresPrice.add(bdWaresSpecsSkuExt.getPrice().multiply(new BigDecimal(bdWaresSpecsSkuExt.getQuantity()))); + waresAchieve = waresAchieve.add(bdWaresSpecsSkuExt.getAchieve().multiply(new BigDecimal(bdWaresSpecsSkuExt.getQuantity()))); + } + + // 计算商品列表价格和业绩最小值 + waresParams.setWaresPrice(waresPrice); + waresParams.setWaresAchieve(waresAchieve); + // 商品业绩计算汇率 + if (waresParams.getWaresAchieve() != null) { + waresParams.setWaresAchieve(waresParams.getWaresAchieve()); + waresParams.setWaresPrice(waresParams.getWaresPrice()); + } else { + waresParams.setWaresAchieve(BigDecimal.ZERO); + waresParams.setWaresPrice(BigDecimal.ZERO); + } + + // 查询默认规格 + JSONArray jsonArray = new JSONArray(); + List collect = waresSpecsSkuList.stream().filter(DistinctByKeyUtil.distinctByKey(BdWaresSpecsSku::getPkWaresDetail)).collect(Collectors.toList()); + for (BdWaresSpecsSkuExt bdWaresSpecsSku : collect) { + if (bdWaresSpecsSku.getPkWares().equals(waresExt.getPkId())) { + JSONObject js = new JSONObject(); + js.put("pkProduct", bdWaresSpecsSku.getPkProduct()); + js.put("pkSkuId", bdWaresSpecsSku.getPkId()); + js.put("quantity", bdWaresSpecsSku.getQuantity()); + jsonArray.add(js); + } + } + waresParams.setProductGroup(jsonArray); + waresParamsList.add(waresParams); + } + } + } + return AjaxResult.success(waresParamsList); + } /** * 根据专区查找专区的商品 diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/mapper/BdWaresMapper.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/mapper/BdWaresMapper.java index a8acbfec..bce4471f 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/mapper/BdWaresMapper.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/mapper/BdWaresMapper.java @@ -129,6 +129,7 @@ public interface BdWaresMapper extends BaseMapper { */ List listRetailWaresByCondition(@Param("param") RetailWaresParam param); + /** * 查询非在售商品 * @@ -137,4 +138,16 @@ public interface BdWaresMapper extends BaseMapper { */ List listWaresNoSale(@Param("param") WaresNoSaleParam param); + + /** + * 根据条件查询商品信息 + * + * @param specialArea 专区 + * @param specialArea 专区 + * @param pkCountry 所属国家 + * @return: List + */ + List listWaresShare(@Param("specialArea") Integer specialArea, + @Param("isMakerGift") Integer isMakerGift, + @Param("pkCountry") Integer pkCountry); } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/mapper/BdWaresSpecsSkuMapper.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/mapper/BdWaresSpecsSkuMapper.java index beaf1ad5..325c97ec 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/mapper/BdWaresSpecsSkuMapper.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/mapper/BdWaresSpecsSkuMapper.java @@ -109,4 +109,12 @@ public interface BdWaresSpecsSkuMapper extends BaseMapper { */ List selectByMinWaresSpecsSkuByPkWaresList(@Param("pkWaresIds") List pkWaresIds); + + /** + * 查询SKU价格等信息 + * + * @param skuIdList skuID列表 + * @return + */ + List queryWaresSpecsSkuList(@Param("skuIdList") List skuIdList); } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/IBdWaresService.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/IBdWaresService.java index 3538b0f8..cb0bee87 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/IBdWaresService.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/IBdWaresService.java @@ -203,4 +203,14 @@ public interface IBdWaresService extends IService { */ List listWaresNoSale(WaresNoSaleParam param); + + /** + * 根据条件查询商品信息 + * + * @param specialArea 专区 + * @param specialArea 专区 + * @param pkCountry 所属国家 + * @return: List + */ + List listWaresShare(Integer specialArea, Integer isMakerGift, Integer pkCountry); } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/IBdWaresSpecsSkuService.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/IBdWaresSpecsSkuService.java index 5a73299d..1f801491 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/IBdWaresSpecsSkuService.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/IBdWaresSpecsSkuService.java @@ -13,6 +13,7 @@ import com.hzs.sale.wares.param.CuWaresParams; import com.hzs.sale.wares.param.SpecsSkuParam; import java.util.List; +import java.util.Map; /** * 规格sku表 服务类 @@ -107,4 +108,12 @@ public interface IBdWaresSpecsSkuService extends IService { */ RetailWaresDetailVO queryWaresDetail(RetailWaresDetailParam param, Integer pkGrade); + + /** + * 查询SKU价格等信息 + * + * @param skuIdList skuID列表 + * @return + */ + Map queryWaresSpecsSkuList(List skuIdList); } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/impl/BdWaresServiceImpl.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/impl/BdWaresServiceImpl.java index 4e3388f6..cf4f8dd9 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/impl/BdWaresServiceImpl.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/impl/BdWaresServiceImpl.java @@ -1161,4 +1161,9 @@ public class BdWaresServiceImpl extends ServiceImpl impl return baseMapper.listWaresNoSale(param); } + + @Override + public List listWaresShare(Integer specialArea, Integer isMakerGift, Integer pkCountry) { + return baseMapper.listWaresShare(specialArea, isMakerGift, pkCountry); + } } diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/impl/BdWaresSpecsSkuServiceImpl.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/impl/BdWaresSpecsSkuServiceImpl.java index 213748ae..532e9668 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/impl/BdWaresSpecsSkuServiceImpl.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/wares/service/impl/BdWaresSpecsSkuServiceImpl.java @@ -578,4 +578,15 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl queryWaresSpecsSkuList(List skuIdList) { + Map resultMap = new HashMap<>(); + + List list = baseMapper.queryWaresSpecsSkuList(skuIdList); + for (BdWaresSpecsSkuExt waresSpecsSku : list) { + resultMap.put(waresSpecsSku.getPkId().longValue(), waresSpecsSku); + } + return resultMap; + } } diff --git a/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresMapper.xml b/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresMapper.xml index 09231787..ce5fec98 100644 --- a/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresMapper.xml +++ b/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresMapper.xml @@ -471,4 +471,35 @@ order by bw.wares_name + + + diff --git a/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresSpecsSkuMapper.xml b/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresSpecsSkuMapper.xml index 06418e05..432196b4 100644 --- a/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresSpecsSkuMapper.xml +++ b/bd-business/bd-business-sale/src/main/resources/mapper/sale/wares/BdWaresSpecsSkuMapper.xml @@ -357,4 +357,23 @@ + + + diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/config/BdConfig.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/config/BdConfig.java index 553d7b8c..f19aea82 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/config/BdConfig.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/config/BdConfig.java @@ -24,18 +24,18 @@ public class BdConfig { * PC地址 */ private static String pc; -// /** -// * 公众号地址 -// */ -// private static String gzh; -// /** -// * IOS地址 -// */ -// private static String ios; -// /** -// * android地址 -// */ -// private static String android; + /** + * 公众号地址 + */ + private static String gzh; + /** + * IOS地址 + */ + private static String ios; + /** + * android地址 + */ + private static String android; /** * 商品同步是否开启(0=开启,1=不开启) @@ -70,29 +70,30 @@ public class BdConfig { BdConfig.pc = pc; } -// public static String getGzh() { -// return gzh; -// } -// -// public void setGzh(String gzh) { -// HzsConfig.gzh = gzh; -// } -// -// public static String getIos() { -// return ios; -// } -// -// public void setIos(String ios) { -// HzsConfig.ios = ios; -// } -// -// public static String getAndroid() { -// return android; -// } -// -// public void setAndroid(String android) { -// HzsConfig.android = android; -// } + + public static String getGzh() { + return gzh; + } + + public void setGzh(String gzh) { + BdConfig.gzh = gzh; + } + + public static String getIos() { + return ios; + } + + public void setIos(String ios) { + BdConfig.ios = ios; + } + + public static String getAndroid() { + return android; + } + + public void setAndroid(String android) { + BdConfig.android = android; + } public static Integer getProductSync() { return productSync; diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/SysConstants.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/SysConstants.java index ba25e75a..86276117 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/SysConstants.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/SysConstants.java @@ -9,6 +9,11 @@ import java.util.List; */ public class SysConstants { + + /** + * 嗨粉前缀 + */ + public static final String HAI_FUN_PREFIX = "HF"; /** * 众康系统前缀 */ diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOrderTypeExtend.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOrderTypeExtend.java new file mode 100644 index 00000000..a1147d03 --- /dev/null +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOrderTypeExtend.java @@ -0,0 +1,38 @@ +package com.hzs.common.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 订单扩展类型枚举类 + */ +@AllArgsConstructor +@Getter +public enum EOrderTypeExtend { + + /** + * 正常 + */ + NORMAL(0, "正常", 0), + + /** + * 注册转复购 + */ + REG_REP(1, "注册转复购", 0), + + ; + + /** + * 实际值 + */ + private final int value; + /** + * 显示标签 + */ + private final String label; + /** + * 是否启用(0=是,1=否) -- 来源EYesNo + */ + private final int enable; + +} diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EShareType.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EShareType.java index bb0f12ab..8358cf86 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EShareType.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EShareType.java @@ -19,6 +19,11 @@ public enum EShareType { */ SHARE(1, "分享注册"), + /** + * 188注册 + */ + FANS(2, "188注册"), + ; /** diff --git a/bd-common/bd-common-security/src/main/java/com/hzs/common/security/service/MemberTokenService.java b/bd-common/bd-common-security/src/main/java/com/hzs/common/security/service/MemberTokenService.java index 62297b45..f3a45fb4 100644 --- a/bd-common/bd-common-security/src/main/java/com/hzs/common/security/service/MemberTokenService.java +++ b/bd-common/bd-common-security/src/main/java/com/hzs/common/security/service/MemberTokenService.java @@ -8,6 +8,7 @@ import com.hzs.common.core.utils.ServletUtils; import com.hzs.common.core.utils.StringUtils; import com.hzs.common.core.utils.ip.IpUtils; import com.hzs.common.core.utils.uuid.IdUtils; +import com.hzs.common.domain.member.base.CuMemberShare; import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.security.utils.SecurityUtils; import com.hzs.member.base.dto.LoginMember; @@ -57,16 +58,26 @@ public class MemberTokenService { public Map createToken(LoginMember loginMember) { String token = IdUtils.fastUUID(); - // 注册用户处理 - CuMemberExt cuMember = loginMember.getCuMember(); // 用户ID - Long pkId = cuMember.getPkId(); + Long pkId; // 用户编号 - String memberCode = cuMember.getMemberCode(); + String memberCode; // 结算国 - Integer pkCountry = cuMember.getPkSettleCountry(); - // 系统类型 - Integer systemType = cuMember.getSystemType(); + Integer pkCountry; + + if (null != loginMember.getCuMember()) { + // 注册用户处理 + CuMemberExt cuMember = loginMember.getCuMember(); + pkId = cuMember.getPkId(); + memberCode = cuMember.getMemberCode(); + pkCountry = cuMember.getPkSettleCountry(); + } else { + // 分享用户处理(临时海粉) + CuMemberShare cuMemberShare = loginMember.getCuMemberShare(); + pkId = cuMemberShare.getPkId(); + memberCode = cuMemberShare.getMemberCode(); + pkCountry = cuMemberShare.getPkCountry(); + } loginMember.setToken(token); loginMember.setPkId(pkId); @@ -82,7 +93,6 @@ public class MemberTokenService { claimsMap.put(SecurityConstants.DETAILS_USERNAME, memberCode); claimsMap.put(SecurityConstants.DETAILS_USER_TYPE, loginMember.getLoginType()); claimsMap.put(SecurityConstants.DETAILS_USER_COUNTRY, pkCountry); - claimsMap.put(SecurityConstants.SYSTEM_TYPE, systemType); // 接口返回信息 Map rspMap = new HashMap<>(); diff --git a/bd-gateway/src/main/resources/bootstrap.yml b/bd-gateway/src/main/resources/bootstrap.yml index b36ebbd4..e069640c 100644 --- a/bd-gateway/src/main/resources/bootstrap.yml +++ b/bd-gateway/src/main/resources/bootstrap.yml @@ -175,6 +175,12 @@ security: - /system/manage/area/get-light-area # 新零售白名单 - /retail-member/api/retail-auth/* + # 188分享注册白名单 + - /member/api/member/fans-convert-code/* + - /member/api/member/fans-order/* + - /system/api/idempotent/generate + - /member/api/retail-auth/auto-login + - /member/api/retail-auth/registered-auto-login # 日志配置 logging: diff --git a/bd-third/src/main/java/com/hzs/third/pay/controller/manage/OnlinePaymentController.java b/bd-third/src/main/java/com/hzs/third/pay/controller/manage/OnlinePaymentController.java index a0c2ca1e..04f31b7b 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/controller/manage/OnlinePaymentController.java +++ b/bd-third/src/main/java/com/hzs/third/pay/controller/manage/OnlinePaymentController.java @@ -2,6 +2,7 @@ package com.hzs.third.pay.controller.manage; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.hzs.common.core.annotation.AccessPermissions; import com.hzs.common.core.annotation.Log; import com.hzs.common.core.constant.EnumsPrefixConstants; @@ -21,6 +22,7 @@ import com.hzs.common.service.ITransactionCommonService; import com.hzs.common.util.TransactionUtils; import com.hzs.third.pay.param.OnlinePaymentParam; import com.hzs.third.pay.param.OnlinePaymentRetryParam; +import com.hzs.third.pay.service.IJdPayService; import com.hzs.third.pay.service.IPayService; import com.hzs.third.pay.service.ITOnlinePaymentService; import com.hzs.third.pay.vo.OnlinePaymentVO; @@ -48,6 +50,8 @@ public class OnlinePaymentController extends BaseController { private ITOnlinePaymentService itOnlinePaymentService; @Autowired private IPayService iPayService; + @Autowired + private IJdPayService iJdPayService; @Autowired private ITransactionCommonService iTransactionCommonService; @@ -144,4 +148,16 @@ public class OnlinePaymentController extends BaseController { return toAjax(iPayService.retryHandle(tOnlinePayment, false)); } + /** + * 补偿支付回调 + * + * @param param 业务重试入参 + * @return + */ + @Log(module = EOperationModule.ONLINE_PAY_DETAIL, business = EOperationBusiness.ONLINE_PAY_DETAIL, method = EOperationMethod.SUBMIT) + @GetMapping("/compensationCallBack") + public AjaxResult compensationCallBack(@RequestParam("businessCode") String businessCode) { + return iJdPayService.compensationCallBack(businessCode); + } + } diff --git a/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayQueryOrderRequest.java b/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayQueryOrderRequest.java new file mode 100644 index 00000000..96be5cad --- /dev/null +++ b/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayQueryOrderRequest.java @@ -0,0 +1,27 @@ +package com.hzs.third.pay.jdpay.dto; + + +import java.io.Serializable; + +public class JdPayQueryOrderRequest implements Serializable { + /** + * 商户订单号 + */ + private String outTradeNo; + + + public String getOutTradeNo() { + return outTradeNo; + } + + public void setOutTradeNo(String outTradeNo) { + this.outTradeNo = outTradeNo; + } + + @Override + public String toString() { + return "{ \"outTradeNo\":\"" + outTradeNo + "\"" + + "}" + ; + } +} diff --git a/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayQueryOrderResponse.java b/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayQueryOrderResponse.java new file mode 100644 index 00000000..7900664a --- /dev/null +++ b/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayQueryOrderResponse.java @@ -0,0 +1,197 @@ +package com.hzs.third.pay.jdpay.dto; + +import java.io.Serializable; + +public class JdPayQueryOrderResponse implements Serializable { + /** + * 京东交易订单号 + */ + private String tradeNo; + /** + * 商户订单号 + */ + private String outTradeNo; + /** + * 订单总金额 + */ + private String tradeAmount; + /** + * 支付完成时间 + */ + private String finishDate; + /** + * 交易类型 + */ + private String tradeType; + /** + * 交易状态 + */ + private String tradeStatus; + /** + * 回传字段 + */ + private String returnParams; + /** + * 商户用户标识 + */ + private String userId; + /** + * 优惠金额 + */ + private String discountAmount; + /** + * 支付工具 + */ + private String payTool; + /** + * ] + * 掩码卡号 + */ + private String maskCardNo; + /** + * 卡类型 + */ + private String cardType; + /** + * 银行编码 + */ + private String bankCode; + /** + * 白条分期数 + */ + private String installmentNum; + + + public String getTradeNo() { + return tradeNo; + } + + public void setTradeNo(String tradeNo) { + this.tradeNo = tradeNo; + } + + public String getOutTradeNo() { + return outTradeNo; + } + + public void setOutTradeNo(String outTradeNo) { + this.outTradeNo = outTradeNo; + } + + public String getTradeAmount() { + return tradeAmount; + } + + public void setTradeAmount(String tradeAmount) { + this.tradeAmount = tradeAmount; + } + + public String getFinishDate() { + return finishDate; + } + + public void setFinishDate(String finishDate) { + this.finishDate = finishDate; + } + + public String getTradeType() { + return tradeType; + } + + public void setTradeType(String tradeType) { + this.tradeType = tradeType; + } + + public String getTradeStatus() { + return tradeStatus; + } + + public void setTradeStatus(String tradeStatus) { + this.tradeStatus = tradeStatus; + } + + public String getReturnParams() { + return returnParams; + } + + public void setReturnParams(String returnParams) { + this.returnParams = returnParams; + } + + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getDiscountAmount() { + return discountAmount; + } + + public void setDiscountAmount(String discountAmount) { + this.discountAmount = discountAmount; + } + + public String getPayTool() { + return payTool; + } + + public void setPayTool(String payTool) { + this.payTool = payTool; + } + + public String getMaskCardNo() { + return maskCardNo; + } + + public void setMaskCardNo(String maskCardNo) { + this.maskCardNo = maskCardNo; + } + + public String getCardType() { + return cardType; + } + + public void setCardType(String cardType) { + this.cardType = cardType; + } + + public String getBankCode() { + return bankCode; + } + + public void setBankCode(String bankCode) { + this.bankCode = bankCode; + } + + public String getInstallmentNum() { + return installmentNum; + } + + public void setInstallmentNum(String installmentNum) { + this.installmentNum = installmentNum; + } + + @Override + public String toString() { + return "{\"tradeNo\":\"" + tradeNo + "\"" + + ", \"outTradeNo\":\"" + outTradeNo + "\"" + + ", \"tradeAmount\":\"" + tradeAmount + "\"" + + ", \"finishDate\":\"" + finishDate + "\"" + + ", \"tradeType\":\"" + tradeType + "\"" + + ", \"tradeStatus\":\"" + tradeStatus + "\"" + + ", \"returnParams\":\"" + returnParams + "\"" + + ", \"userId\":\"" + userId + "\"" + + ", \"discountAmount\":\"" + discountAmount + "\"" + + ", \"payTool\":\"" + payTool + "\"" + + ", \"maskCardNo\":\"" + maskCardNo + "\"" + + ", \"cardType\":\"" + cardType + "\"" + + ", \"bankCode\":\"" + bankCode + "\"" + + ", \"installmentNum\":\"" + installmentNum + "\"" + + "}" + ; + } +} diff --git a/bd-third/src/main/java/com/hzs/third/pay/jdpay/sdk/JdPay.java b/bd-third/src/main/java/com/hzs/third/pay/jdpay/sdk/JdPay.java index f5898780..82ac5acc 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/jdpay/sdk/JdPay.java +++ b/bd-third/src/main/java/com/hzs/third/pay/jdpay/sdk/JdPay.java @@ -56,9 +56,9 @@ public class JdPay { // * @return JdPayQueryOrderResponse 返回数据 // * @throws Exception // */ -// public JdPayQueryOrderResponse queryOrder(JdPayQueryOrderRequest request) throws Exception { -// return this.baseExecute(JdPayConstant.TRADE_QUERY_URL, request, JdPayQueryOrderResponse.class); -// } + public JdPayQueryOrderResponse queryOrder(JdPayQueryOrderRequest request) throws Exception { + return this.baseExecute(JdPayConstant.TRADE_QUERY_URL, request, JdPayQueryOrderResponse.class); + } // // /** // * 作用:代扣 diff --git a/bd-third/src/main/java/com/hzs/third/pay/jdpay/sdk/JdPayHttpClientProxy.java b/bd-third/src/main/java/com/hzs/third/pay/jdpay/sdk/JdPayHttpClientProxy.java index 23863944..1f353927 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/jdpay/sdk/JdPayHttpClientProxy.java +++ b/bd-third/src/main/java/com/hzs/third/pay/jdpay/sdk/JdPayHttpClientProxy.java @@ -42,9 +42,9 @@ public class JdPayHttpClientProxy { log.info("1.{}接口请求参数:{}", apiName, request); // 请求参数加密和签名 String httpRequest = JdPayApiUtil.encryptAndSignature(jdPayNewConfig, reqNo, request); - log.info("2.{}远程调用请求参数:{}", apiName, httpRequest); +// log.info("2.{}远程调用请求参数:{}", apiName, httpRequest); String httpResponse = jdPayHttpClient.execute(jdPayNewConfig, urlSuffix, httpRequest); - log.info("3.{}远程调用返回参数:{}", apiName, httpResponse); +// log.info("3.{}远程调用返回参数:{}", apiName, httpResponse); // 验证和解析返回参数 response = JdPayApiUtil.decryptAndVerifySign(jdPayNewConfig, httpResponse); log.info("4.{}耗时:{},接口返回参数:{}", apiName, (System.currentTimeMillis() - startTimestampMs), response); diff --git a/bd-third/src/main/java/com/hzs/third/pay/service/IJdPayService.java b/bd-third/src/main/java/com/hzs/third/pay/service/IJdPayService.java index ccd9a9d1..9b69a4b9 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/service/IJdPayService.java +++ b/bd-third/src/main/java/com/hzs/third/pay/service/IJdPayService.java @@ -2,6 +2,7 @@ package com.hzs.third.pay.service; import com.hzs.common.core.domain.R; import com.hzs.common.core.enums.EDataSource; +import com.hzs.common.core.web.domain.AjaxResult; import com.hzs.common.domain.third.pay.TOnlinePayment; /** @@ -18,4 +19,12 @@ public interface IJdPayService { */ R cashRegister(TOnlinePayment onlinePayment, EDataSource dataSource); + /** + * 收银台支付 + * + * @param onlinePayment + * @param dataSource + * @return + */ + AjaxResult compensationCallBack(String businessCode); } diff --git a/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java b/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java index a2c6b4ac..0aad0171 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java +++ b/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java @@ -2,11 +2,12 @@ package com.hzs.third.pay.service.impl; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.hzs.common.core.config.BdConfig; import com.hzs.common.core.domain.R; -import com.hzs.common.core.enums.EDataSource; -import com.hzs.common.core.enums.EEnv; +import com.hzs.common.core.enums.*; import com.hzs.common.core.utils.DateUtils; +import com.hzs.common.core.web.domain.AjaxResult; import com.hzs.common.domain.third.pay.TOnlinePayment; import com.hzs.common.domain.third.pay.TOnlinePaymentSepAcc; import com.hzs.common.domain.third.pay.TOnlinePaymentSepAccD; @@ -15,16 +16,10 @@ import com.hzs.third.pay.config.JdPayBankProperties; import com.hzs.third.pay.config.JdPayConfig; import com.hzs.third.pay.config.JdPaySeparateAccountConfig; import com.hzs.third.pay.config.JdPayWechatAlipayProperties; -import com.hzs.third.pay.jdpay.dto.JdPayAggregateCreateOrderRequest; -import com.hzs.third.pay.jdpay.dto.JdPayAggregateCreateOrderResponse; -import com.hzs.third.pay.jdpay.dto.JdPayDivisionAccount; -import com.hzs.third.pay.jdpay.dto.JdPayDivisionAccountTradeInfo; +import com.hzs.third.pay.jdpay.dto.*; import com.hzs.third.pay.jdpay.sdk.JdPay; import com.hzs.third.pay.jdpay.util.GsonUtil; -import com.hzs.third.pay.service.IJdPayService; -import com.hzs.third.pay.service.ITOnlineCardService; -import com.hzs.third.pay.service.ITOnlinePaymentSepAccService; -import com.hzs.third.pay.service.ITOnlinePaymentService; +import com.hzs.third.pay.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @@ -35,6 +30,7 @@ import java.math.BigDecimal; import java.net.InetAddress; import java.util.ArrayList; import java.util.Comparator; +import java.util.Date; import java.util.List; /** @@ -59,6 +55,8 @@ public class JdPayServiceImpl implements IJdPayService { @Autowired private ITOnlinePaymentService itOnlinePaymentService; + @Autowired + private IPayService iPayService; @Resource private JdPayWechatAlipayProperties jdPayWechatAlipayProperties; @@ -196,4 +194,94 @@ public class JdPayServiceImpl implements IJdPayService { } + + @Override + public AjaxResult compensationCallBack(String businessCode) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(TOnlinePayment::getBusinessCode, businessCode); + queryWrapper.eq(TOnlinePayment::getDelFlag, EDelFlag.UN_DELETE.getValue()); + TOnlinePayment tOnlinePayment = itOnlinePaymentService.getOne(queryWrapper, false); + if(ObjectUtil.isEmpty(tOnlinePayment)){ + return AjaxResult.error("订单不存在"); + } + JdPayQueryOrderRequest request = new JdPayQueryOrderRequest(); + request.setOutTradeNo(tOnlinePayment.getBusinessCode()); + JdPayQueryOrderResponse response = null; + try { + response = jdPay.queryOrder(request); + if (ObjectUtil.isEmpty(response.getTradeNo()) || EPayStatus.PAID.getValue() == tOnlinePayment.getPayStatus()) { + log.error("支付信息不存在或已支付"); + return AjaxResult.success("已支付订单 无需补偿回调!"); + } + log.info("queryOrder : {}", JSONUtil.toJsonStr(response)); + if ("FINI".equals(response.getTradeStatus())){ + // 支付成功处理 + + // 商户订单号 + String payNumber = response.getTradeNo(); + // 渠道流水号 + String channelNumber = ""; + // 支付完成时间 + Date payTime = DateUtils.parseDateOne(response.getFinishDate(), DateUtils.YAMMERERS); + + // 回调订单编号 + String thirdOrderCode = response.getOutTradeNo(); + // 订单编号 + String acqOrderId = "compensationCallBack"; + + // 订单金额 + int tradeAmount = Integer.parseInt(response.getTradeAmount()); + BigDecimal payMoney = new BigDecimal(tradeAmount).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP); + Integer payType = convertPayType(response.getPayTool()); + // 支付后续业务处理 + if (iPayService.notifyHandle(tOnlinePayment.getBusinessType().toString() , thirdOrderCode, thirdOrderCode, payNumber, payTime, payMoney, EPayChannel.JD, channelNumber, payType, acqOrderId)) { + return AjaxResult.success(); + } + } + } catch (Exception e) { + throw new RuntimeException(e); + } + return AjaxResult.success(); + } + + + /** + * 京东收银台处理成功返回 + */ + private static final String SUCCESS = "SUCCESS"; + /** + * 京东收银台处理失败返回 + */ + private static final String ERROR = "ERROR"; + private Integer convertPayType(String payName){ + Integer result = EPayType.WECHAT.getValue(); + switch (payName){ + case "XJK": + result = EPayType.MINI_TREASURY.getValue(); + break; + case "JIOU": + result = EPayType.CREDIT_LINE.getValue(); + break; + case "SJIOU": + result = EPayType.SUPER_CREDIT_LINE.getValue(); + break; + case "ACCT": + result = EPayType.WALLET_BALANCE.getValue(); + break; + case "EXPR": + result = EPayType.BANK_CARD.getValue(); + break; + case "WX": + result = EPayType.WECHAT.getValue(); + break; + case "ALIPAY": + result = EPayType.ALIPAY.getValue(); + break; + case "YSF": + result = EPayType.CLOUD_PAY.getValue(); + break; + + } + return result; + } } diff --git a/bd-third/src/main/java/com/hzs/third/pay/service/impl/PayServiceImpl.java b/bd-third/src/main/java/com/hzs/third/pay/service/impl/PayServiceImpl.java index 52524fdd..58c1bf2d 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/service/impl/PayServiceImpl.java +++ b/bd-third/src/main/java/com/hzs/third/pay/service/impl/PayServiceImpl.java @@ -2,10 +2,12 @@ package com.hzs.third.pay.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.hzs.common.core.constant.CacheConstants; import com.hzs.common.core.constant.MagicNumberConstants; import com.hzs.common.core.constant.RabbitMqConstants; import com.hzs.common.core.domain.R; import com.hzs.common.core.enums.*; +import com.hzs.common.core.service.RedisService; import com.hzs.common.domain.third.pay.TOnlinePayment; import com.hzs.member.account.IMemberTradeServiceApi; import com.hzs.retail.sale.IRetailOrderServiceApi; @@ -33,6 +35,8 @@ public class PayServiceImpl implements IPayService { private ITOnlinePaymentService itOnlinePaymentService; @Autowired private RabbitTemplate rabbitTemplate; + @Autowired + private RedisService redisService; @DubboReference IRetailOrderServiceApi iRetailOrderServiceApi; @@ -118,8 +122,11 @@ public class PayServiceImpl implements IPayService { log.error("支付信息不存在或已支付"); return false; } - + String redisKey = CacheConstants.ONLINE_PAY_KEY + businessCode; try { + if(!redisService.lockKeyOnce(redisKey, 10)){ + return false; + } if (!PayUtil.checkAmount(onlinePayment.getBusinessMoney(), payMoney)) { // 业务金额 大于 实际支付金额 log.error("业务金额大于实际支付金额,支付编号:{}, 支付金额:{}", onlinePayment.getPaymentCode(), payMoney); @@ -156,6 +163,8 @@ public class PayServiceImpl implements IPayService { .set(TOnlinePayment::getCallbackStatus, ECallbackStatus.FAIL.getValue()) .set(TOnlinePayment::getCallbackInfo, e.getMessage()) ); + } finally { + redisService.unlock(redisKey); } return false; } diff --git a/bd-third/src/main/java/com/hzs/third/pay/service/impl/TOnlinePaymentServiceImpl.java b/bd-third/src/main/java/com/hzs/third/pay/service/impl/TOnlinePaymentServiceImpl.java index db5c6cbc..911d8a75 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/service/impl/TOnlinePaymentServiceImpl.java +++ b/bd-third/src/main/java/com/hzs/third/pay/service/impl/TOnlinePaymentServiceImpl.java @@ -61,6 +61,9 @@ public class TOnlinePaymentServiceImpl extends ServiceImpl