## Opt - 迁移分享注册流程-适配商城专区邮费&多商品数量

This commit is contained in:
sangelxiu1 2025-09-18 09:02:44 +08:00
parent d0f3f55271
commit e66054c526
6 changed files with 118 additions and 6 deletions

View File

@ -2,6 +2,7 @@ package com.hzs.retail.sale.controller.api;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.hzs.common.core.annotation.RepeatSubmit;
import com.hzs.common.core.config.BdConfig;
import com.hzs.common.core.constant.CacheConstants;
@ -21,6 +22,7 @@ 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.BdAwards;
import com.hzs.common.domain.system.config.BdGrade;
import com.hzs.common.security.service.MemberTokenService;
import com.hzs.common.security.utils.SecurityUtils;
@ -38,6 +40,7 @@ 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.IAwardsServiceApi;
import com.hzs.system.config.IGradeServiceApi;
import com.hzs.system.config.dto.GradeDTO;
import lombok.extern.slf4j.Slf4j;
@ -82,6 +85,8 @@ public class ApiRetailOrderController {
IGradeServiceApi iGradeServiceApi;
@DubboReference
IAreaServiceApi iAreaServiceApi;
@DubboReference
IAwardsServiceApi iAwardsServiceApi;
@Autowired
private MemberTokenService memberTokenService;
@ -200,6 +205,82 @@ public class ApiRetailOrderController {
}
}
/**
* 查询邮费
*
* @param postageParam 邮费入参
* @return
*/
@PostMapping("/query-reg-order-postage")
public AjaxResult queryRegOrderPostage(@RequestBody RetailOrderPostageParam postageParam) {
// 当前会员ID
postageParam.setPkCreator(SecurityUtils.getUserId());
if (ESpecialArea.RETAIL_REGISTER.getValue() == postageParam.getSpecialArea()) {
// 注册包邮
return AjaxResult.success(RetailOrderPostageVO.builder()
.postage(BigDecimal.ZERO)
.build());
} else {
CuMember buyMember;
if (StringUtils.isNotEmpty(postageParam.getBuyMemberCode())) {
// 购买人不为空则需要查询重新赋一下
buyMember = iMemberServiceApi.getRetailMember(null, postageParam.getBuyMemberCode()).getData();
if (null == buyMember) {
return AjaxResult.error("会员编号不存在");
}
} else {
buyMember = iMemberServiceApi.getRetailMember(SecurityUtils.getUserId(), null).getData();
}
// 查询邮费
RetailOrderParam orderParam = BeanUtil.copyProperties(postageParam, RetailOrderParam.class);
// 购物车中获取商品信息
BigDecimal orderAmount = BigDecimal.ZERO;
List<OrderItemsParam> orderItemsParams = new ArrayList<>();
for (FansConfirmOrderWaresParam waresParam : postageParam.getWaresList()) {
// 遍历sku
// 产品价格等map
Map<Long, BdWaresSpecsSkuExt> skuMap = iBdWaresSpecsSkuService.queryWaresSpecsSkuList(waresParam.getSkuList().stream().map(FansConfirmOrderSkuParam::getPkWaresSku).collect(Collectors.toList()));
// 查询商品
BdWares bdWares = iBdWaresService.getWares(waresParam.getPkWares());
// 缓存数据
List<WaresItemsParam> 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());
}
if(ObjectUtil.isEmpty(buyMember)){
buyMember = new CuMember();
List<BdGrade> gradeList = iGradeServiceApi.getRetailGradeList().getData();
// Map<String, BdAwards> awardsMap = iAwardsServiceApi.getAwards().getData();
buyMember.setPkSettleGrade(gradeList.get(0).getPkId());
buyMember.setPkSettleCountry(1);
buyMember.setPkAwards(1);
}
orderParam.setOrderItemsParams(orderItemsParams);
iRetailOrderService.createSaOrderItems(orderParam, null, buyMember, null, null);
return AjaxResult.success(RetailOrderPostageVO.builder()
.postage(orderParam.getPostage())
.build());
}
}
/**
* 确认注册订单
*
@ -618,7 +699,7 @@ public class ApiRetailOrderController {
* @param source 数据来源
* @return
*/
@RepeatSubmit
// @RepeatSubmit
@PostMapping("/fans-confirm-order")
public AjaxResult fansConfirmOrder(@RequestBody RetailOrderRegisterParam registerParam,
@RequestHeader("Source") Integer source) {
@ -627,7 +708,8 @@ public class ApiRetailOrderController {
// 会员ID
registerParam.setPkCreator(SecurityUtils.getUserId());
// 新零售注册专区
registerParam.setSpecialArea(ESpecialArea.RETAIL_REGISTER.getValue());
// registerParam.setSpecialArea(ESpecialArea.RETAIL_REGISTER.getValue());
registerParam.setSpecialArea(registerParam.getSpecialArea());
// 系统类型
registerParam.setSystemType(SecurityUtils.getSystemType());
@ -683,6 +765,16 @@ public class ApiRetailOrderController {
.build());
}
registerParam.setOrderItemsParams(orderItemsParams);
// if (ESpecialArea.RETAIL_REPURCHASE.getValue() == registerParam.getSpecialArea()) {
// CuMember buyMember = iMemberServiceApi.getRetailMember(SecurityUtils.getUserId(), null).getData();
// if(ObjectUtil.isEmpty(buyMember)){
// buyMember = new CuMember();
// buyMember.setPkSettleGrade(gradeList.get(0).getPkId());
// buyMember.setPkSettleCountry(1);
// buyMember.setPkAwards(1);
// }
// iRetailOrderService.createSaOrderItems(registerParam, null, buyMember, null, null);
// }
CuMemberShare memberShare = memberTokenService.getLoginMember().getCuMemberShare();
registerParam.setCuMemberShare(memberShare);
// registerParam.setPkCreator(memberShare.getPkParent());
@ -690,7 +782,7 @@ public class ApiRetailOrderController {
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());
return confirmSharedOrderReturn(str, registerParam.getPkCreator(), registerParam.getShopList(), registerParam.getOrderCode(), saOrder.getOrderAmount().add(saOrder.getPostage()));
}
/**

View File

@ -109,6 +109,9 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
CuMember newMember = new CuMember();
newMember.setMemberName(registerParam.getMemberName());
newMember.setPhone(registerParam.getPhone());
newMember.setPkSettleGrade(gradeList.get(0).getPkId());
newMember.setPkSettleCountry(1);
newMember.setPkAwards(1);
// 封装订单信息
SaOrderExt saOrderExt = this.createSaOrder(registerParam, gradeList, newMember);
@ -214,6 +217,9 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
}
}
}
}else if(ESpecialArea.RETAIL_REPURCHASE.getValue() == orderParam.getSpecialArea()){
// saOrderExt.setOrderAmount(saOrderExt.getOrderAmount().add(orderParam.getPostage()));
saOrderExt.setPostage(orderParam.getPostage());
}
return saOrderExt;

View File

@ -3,6 +3,7 @@ package com.hzs.retail.sale.param;
import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.enums.EDelivery;
import com.hzs.common.core.enums.ETransportType;
import com.hzs.sale.order.param.FansConfirmOrderWaresParam;
import com.hzs.sale.shopping.vo.ShoppingCartRedis;
import lombok.Data;
@ -66,4 +67,10 @@ public class RetailOrderPostageParam implements Serializable {
*/
private Integer tranType = ETransportType.LAND.getValue();
/**
* 商品列表
*/
private List<FansConfirmOrderWaresParam> waresList;
}

View File

@ -94,7 +94,7 @@ public class ApiBdWaresController extends BaseController {
*/
@GetMapping("/list-wares-share")
public AjaxResult listWaresShare(WaresShareParam param) {
param.setSpecialArea(ESpecialArea.RETAIL_REGISTER.getValue());
// param.setSpecialArea(ESpecialArea.RETAIL_REGISTER.getValue());
param.setIsMakerGift(EWaresType.ORDINARY.getValue());
param.setPkCountry(CountryConstants.CHINA_COUNTRY);

View File

@ -106,7 +106,9 @@ public class PayController {
if (EPayStatus.PAID.getValue() == onlinePayment.getPayStatus()) {
return AjaxResult.error("该订单已支付");
}
if(ObjectUtil.isEmpty(onlinePayment.getPayMoney())){
return AjaxResult.error("当前订单已经发起过支付,如需再次购买,请重新下单!");
}
// 同一业务订单多次使用不同支付数据以最新一次为准
onlinePayment.setPayChannel(payChannel.getValue());
onlinePayment.setPayType(payType.getValue());

View File

@ -70,8 +70,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);
@ -106,6 +109,8 @@ public class PayServiceImpl implements IPayService {
.set(TOnlinePayment::getCallbackStatus, ECallbackStatus.FAIL.getValue())
.set(TOnlinePayment::getCallbackInfo, e.getMessage())
);
} finally {
redisService.unlock(redisKey);
}
return false;
}