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 e06f04e4..895081eb 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 @@ -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 orderItemsParams = new ArrayList<>(); + for (FansConfirmOrderWaresParam waresParam : postageParam.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()); + } + if(ObjectUtil.isEmpty(buyMember)){ + buyMember = new CuMember(); + List gradeList = iGradeServiceApi.getRetailGradeList().getData(); +// Map 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())); } /** 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 febd7feb..6776a5ad 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 @@ -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; diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderPostageParam.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderPostageParam.java index f8e29233..473f366a 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderPostageParam.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/param/RetailOrderPostageParam.java @@ -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 waresList; + } 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 51f64430..5e14ce30 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 @@ -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); diff --git a/bd-third/src/main/java/com/hzs/third/pay/controller/api/PayController.java b/bd-third/src/main/java/com/hzs/third/pay/controller/api/PayController.java index 6af4c408..62a6ecbc 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/controller/api/PayController.java +++ b/bd-third/src/main/java/com/hzs/third/pay/controller/api/PayController.java @@ -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()); 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 58c1bf2d..79badb8c 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 @@ -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; }