Browse Source

!1142 商城相关完善
Merge pull request !1142 from puhui999/develop2

芋道源码 8 tháng trước cách đây
mục cha
commit
844f573bd2

+ 1 - 0
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java

@@ -93,6 +93,7 @@ public interface ErrorCodeConstants {
     ErrorCode BROKERAGE_BIND_OVERRIDE = new ErrorCode(1_011_007_006, "已绑定了推广人");
     ErrorCode BROKERAGE_BIND_LOOP = new ErrorCode(1_011_007_007, "下级不能绑定自己的上级");
     ErrorCode BROKERAGE_USER_LEVEL_NOT_SUPPORT = new ErrorCode(1_011_007_008, "目前只支持 level 小于等于 2");
+    ErrorCode BROKERAGE_CREATE_USER_EXISTS = new ErrorCode(1_011_007_009, "分销用户已存在");
 
     // ========== 分销提现 模块 1-011-008-000 ==========
     ErrorCode BROKERAGE_WITHDRAW_NOT_EXISTS = new ErrorCode(1_011_008_000, "佣金提现记录不存在");

+ 7 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageUserController.java

@@ -47,6 +47,13 @@ public class BrokerageUserController {
     @Resource
     private MemberUserApi memberUserApi;
 
+    @PostMapping("/create")
+    @Operation(summary = "创建分销用户")
+    @PreAuthorize("@ss.hasPermission('trade:brokerage-user:create')")
+    public CommonResult<Long> createBrokerageUser(@Valid @RequestBody BrokerageUserCreateReqVO createReqVO) {
+        return success(brokerageUserService.createBrokerageUser(createReqVO));
+    }
+
     @PutMapping("/update-bind-user")
     @Operation(summary = "修改推广员")
     @PreAuthorize("@ss.hasPermission('trade:brokerage-user:update-bind-user')")

+ 30 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserCreateReqVO.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 分销用户创建 Request VO")
+@Data
+public class BrokerageUserCreateReqVO {
+
+    @Schema(description = "分销用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "分销用户编号不能为空")
+    private Long userId;
+
+    @Schema(description = "推广员编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4587")
+    private Long bindUserId;
+
+    @Schema(description = "推广资格", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "推广资格不能为空")
+    private Boolean brokerageEnabled;
+
+    @Schema(description = "可用佣金", requiredMode = Schema.RequiredMode.REQUIRED, example = "11089")
+    @NotNull(message = "可用佣金不能为空")
+    private Integer price;
+
+    @Schema(description = "冻结佣金", requiredMode = Schema.RequiredMode.REQUIRED, example = "30916")
+    @NotNull(message = "冻结佣金不能为空")
+    private Integer frozenPrice;
+
+}

+ 3 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/brokerage/BrokerageUserConvert.java

@@ -59,6 +59,9 @@ public interface BrokerageUserConvert {
     }
 
     default BrokerageUserRespVO copyTo(MemberUserRespDTO source, BrokerageUserRespVO target) {
+        if (target == null) {
+            return null;
+        }
         Optional.ofNullable(source).ifPresent(
                 user -> target.setNickname(user.getNickname()).setAvatar(user.getAvatar()));
         return target;

+ 1 - 1
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderDO.java

@@ -27,7 +27,7 @@ import java.util.Map;
  *
  * @author 芋道源码
  */
-@TableName("trade_order")
+@TableName(value = "trade_order", autoResultMap = true)
 @KeySequence("trade_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
 @Data
 @EqualsAndHashCode(callSuper = true)

+ 9 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserService.java

@@ -1,12 +1,14 @@
 package cn.iocoder.yudao.module.trade.service.brokerage;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserCreateReqVO;
 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO;
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryRespVO;
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO;
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO;
 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -107,6 +109,13 @@ public interface BrokerageUserService {
      */
     boolean bindBrokerageUser(@NotNull Long userId, @NotNull Long bindUserId);
 
+    /**
+     * 创建分销用户
+     * @param createReqVO 请求
+     * @return 编号
+     */
+    Long createBrokerageUser(@Valid BrokerageUserCreateReqVO createReqVO);
+
     /**
      * 获取用户是否有分销资格
      *

+ 21 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImpl.java

@@ -8,9 +8,11 @@ import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
 import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
 import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
+import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserCreateReqVO;
 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO;
 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryRespVO;
@@ -28,6 +30,7 @@ import cn.iocoder.yudao.module.trade.service.config.TradeConfigService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import java.time.LocalDateTime;
@@ -202,6 +205,24 @@ public class BrokerageUserServiceImpl implements BrokerageUserService {
         return true;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long createBrokerageUser(BrokerageUserCreateReqVO createReqVO) {
+        // 1. 校验分销用户是否已存在
+        BrokerageUserDO brokerageUser = brokerageUserMapper.selectById(createReqVO.getUserId());
+        if (brokerageUser != null) {
+            throw exception(BROKERAGE_CREATE_USER_EXISTS);
+        }
+
+        // 2.1 创建分销人
+        brokerageUser = BeanUtils.toBean(createReqVO, BrokerageUserDO.class).setId(createReqVO.getUserId())
+                .setBrokerageTime(LocalDateTime.now()).setBindUserId(null);
+        brokerageUserMapper.insert(brokerageUser);
+        // 2.2 绑定推广员
+        updateBrokerageUserId(brokerageUser.getId(), createReqVO.getBindUserId());
+        return brokerageUser.getId();
+    }
+
     /**
      * 补全绑定用户的字段
      *

+ 7 - 3
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculator.java

@@ -122,9 +122,13 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
      */
     private boolean isGlobalExpressFree(TradePriceCalculateRespBO result) {
         TradeConfigDO config = tradeConfigService.getTradeConfig();
-        return config == null
-                || Boolean.TRUE.equals(config.getDeliveryExpressFreeEnabled()) // 开启包邮
-                || result.getPrice().getPayPrice() >= config.getDeliveryExpressFreePrice(); // 满足包邮的价格
+        // 情况一:交易中心配置不存在默认不包邮
+        if (config == null) {
+            return false;
+        }
+        // 情况二:开启了全局包邮 && 满足包邮金额
+        return Boolean.TRUE.equals(config.getDeliveryExpressFreeEnabled()) &&
+                result.getPrice().getPayPrice() >= config.getDeliveryExpressFreePrice();
     }
 
     private void calculateDeliveryPrice(List<OrderItem> selectedSkus,