Przeglądaj źródła

chore: auto bump version and changelog [skip ci]

iwt 1 miesiąc temu
rodzic
commit
f37c0012c3

+ 4 - 0
cfc-backend/src/main/java/com/etotem/cfc/dto/ProductDTO.java

@@ -43,6 +43,10 @@ public class ProductDTO {
     private Integer validityDays;
     private String guideScope;
 
+    // 商品赠送会员扩展信息
+    private String giftLevelCode;
+    private String giftLevelName;
+
     private Date createdAt;
     private Date updatedAt;
 

+ 28 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/ProductOrderService.java

@@ -9,6 +9,7 @@ import com.etotem.cfc.dto.ProductOrderDTO;
 import com.etotem.cfc.entity.AfterSalesRequest;
 import com.etotem.cfc.entity.AssessmentProduct;
 import com.etotem.cfc.entity.Product;
+import com.etotem.cfc.entity.ProductGiftRule;
 import com.etotem.cfc.entity.ProductOrder;
 import com.etotem.cfc.entity.User;
 import com.etotem.cfc.mapper.AfterSalesRequestMapper;
@@ -94,6 +95,12 @@ public class ProductOrderService {
     @Resource
     private SupplyHierarchyService supplyHierarchyService;
 
+    @Resource
+    private ProductGiftRuleService productGiftRuleService;
+
+    @Resource
+    private MembershipService membershipService;
+
     public Result<ProductOrderDTO> create(CreateProductOrderDTO dto, Long buyerId) {
         if (buyerId == null) {
             return Result.error("请先登录");
@@ -363,6 +370,27 @@ public class ProductOrderService {
             log.error("发放测评额度失败: orderNo={}", orderNo, e);
             // 不阻塞支付流程
         }
+        // 商品赠送会员:原价购买且配置赠送规则时,支付成功后自动赠送会员
+        try {
+            if (paidProduct != null) {
+                ProductGiftRule giftRule = productGiftRuleService.getActiveByProductId(paidProduct.getId());
+                if (giftRule != null) {
+                    // 原价判定:无积分抵扣、无优惠券、无折扣
+                    boolean fullPrice = (order.getPointsUsed() == null || order.getPointsUsed() == 0)
+                            && order.getCouponId() == null
+                            && (order.getDiscountAmount() == null || order.getDiscountAmount() == 0);
+                    if (fullPrice && order.getFamilyId() != null) {
+                        boolean granted = membershipService.grantMembershipByGift(
+                                order.getFamilyId(), order.getBuyerId(), giftRule.getLevelCode(),
+                                order.getOrderNo(), order.getTransactionId());
+                        log.info("商品订单{}赠送会员{}结果={}", orderNo, giftRule.getLevelCode(), granted);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("商品赠送会员失败: orderNo={}", orderNo, e);
+            // 不阻塞支付流程
+        }
         return Result.success("支付成功");
     }
 

+ 10 - 1
cfc-backend/src/main/java/com/etotem/cfc/service/ProductService.java

@@ -34,6 +34,9 @@ public class ProductService {
     @Resource
     private MembershipService membershipService;
 
+    @Resource
+    private ProductGiftRuleService productGiftRuleService;
+
     @Resource
     private AssessmentProductService assessmentProductService;
 
@@ -94,7 +97,13 @@ public class ProductService {
         if (!"on_shelf".equals(product.getStatus()) && !"approved".equals(product.getStatus())) {
             return Result.error("商品未上架");
         }
-        return Result.success(ProductDTO.from(product));
+        ProductDTO dto = ProductDTO.from(product);
+        ProductGiftRule giftRule = productGiftRuleService.getActiveByProductId(id);
+        if (giftRule != null) {
+            dto.setGiftLevelCode(giftRule.getLevelCode());
+            dto.setGiftLevelName(productGiftRuleService.getLevelName(giftRule.getLevelCode()));
+        }
+        return Result.success(dto);
     }
 
     public Result<ProductDTO> create(Product product, Long vendorId) {

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-4904d247e4d98907d5c8a7e450b10f72d91ab096
+9e5265f6286b92eddedd377e7f2c84d03f722743