Эх сурвалжийг харах

code review:分销逻辑

YunaiV 1 жил өмнө
parent
commit
e384b810bf
13 өөрчлөгдсөн 28 нэмэгдсэн , 30 устгасан
  1. 3 0
      yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/number/MoneyUtils.java
  2. 1 0
      yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/spu/dto/ProductSpuRespDTO.java
  3. 1 0
      yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/spu/ProductSpuDO.java
  4. 1 0
      yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/DictTypeConstants.java
  5. 4 3
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageUserController.java
  6. 3 1
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageUserController.java
  7. 1 0
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/BrokerageWithdrawMapper.java
  8. 8 11
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImpl.java
  9. 1 0
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImpl.java
  10. 1 1
      yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java
  11. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/AppDictDataController.java
  12. 0 12
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/vo/AppDictDataRespVO.java
  13. 3 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/DictDataMapper.java

+ 3 - 0
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/number/MoneyUtils.java

@@ -61,10 +61,13 @@ public class MoneyUtils {
     /**
      * 分转元(字符串)
      *
+     * 例如说 fen 为 1 时,则结果为 0.01
+     *
      * @param fen 分
      * @return 元
      */
     public static String fenToYuanStr(int fen) {
         return new Money(0, fen).toString();
     }
+
 }

+ 1 - 0
yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/spu/dto/ProductSpuRespDTO.java

@@ -147,4 +147,5 @@ public class ProductSpuRespDTO {
      * true - 自行设置
      */
     private Boolean subCommissionType;
+
 }

+ 1 - 0
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/spu/ProductSpuDO.java

@@ -179,6 +179,7 @@ public class ProductSpuDO extends BaseDO {
     @TableField(typeHandler = JacksonTypeHandler.class)
     private List<Long> giveCouponTemplateIds;
 
+    // TODO @puhui999:字段估计要改成 brokerageType
     /**
      * 分销类型
      *

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

@@ -8,4 +8,5 @@ package cn.iocoder.yudao.module.trade.enums;
 public interface DictTypeConstants {
 
     String BROKERAGE_WITHDRAW_STATUS = "brokerage_withdraw_status"; // 佣金提现状态
+
 }

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

@@ -92,6 +92,7 @@ public class BrokerageUserController {
         Set<Long> userIds = convertSet(pageResult.getList(), BrokerageUserDO::getId);
         // 查询用户信息
         Map<Long, MemberUserRespDTO> userMap = memberUserApi.getUserMap(userIds);
+        // TODO @疯狂:看看下面两个 getBrokerageUserCountByBindUserId、getWithdrawSummaryByUserId 有没可能一次性出结果,不然 n 次有点太花性能了;
         // 合计分佣订单
         Map<Long, UserBrokerageSummaryBO> userOrderSummaryMap = convertMap(userIds,
                 userId -> userId,
@@ -101,13 +102,13 @@ public class BrokerageUserController {
         Map<Long, Long> brokerageUserCountMap = convertMap(userIds,
                 userId -> userId,
                 userId -> brokerageUserService.getBrokerageUserCountByBindUserId(userId, null));
-
         // 合计提现
         Map<Long, UserWithdrawSummaryBO> withdrawMap = convertMap(userIds,
                 userId -> userId,
                 userId -> brokerageWithdrawService.getWithdrawSummaryByUserId(userId, BrokerageWithdrawStatusEnum.AUDIT_SUCCESS));
-
-        return success(BrokerageUserConvert.INSTANCE.convertPage(pageResult, userMap, brokerageUserCountMap, userOrderSummaryMap, withdrawMap));
+        // 拼接返回
+        return success(BrokerageUserConvert.INSTANCE.convertPage(pageResult, userMap, brokerageUserCountMap,
+                userOrderSummaryMap, withdrawMap));
     }
 
 }

+ 3 - 1
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageUserController.java

@@ -77,13 +77,15 @@ public class AppBrokerageUserController {
     @PreAuthenticated
     public CommonResult<AppBrokerageUserMySummaryRespVO> getBrokerageUserSummary() {
         Long userId = getLoginUserId();
+        // TODO @疯狂:后面这种,要不也改成 convert;感觉 controller 这样更容易看到整体;核心其实是 86、8/87、9/90、9/91 这阶段
         // 统计 yesterdayPrice、withdrawPrice、firstBrokerageUserCount、secondBrokerageUserCount 字段
         LocalDateTime yesterday = LocalDateTime.now().minusDays(1);
         LocalDateTime beginTime = LocalDateTimeUtil.beginOfDay(yesterday);
         LocalDateTime endTime = LocalDateTimeUtil.endOfDay(yesterday);
         AppBrokerageUserMySummaryRespVO respVO = new AppBrokerageUserMySummaryRespVO()
                 .setYesterdayPrice(brokerageRecordService.getSummaryPriceByUserId(userId, BrokerageRecordBizTypeEnum.ORDER.getType(), beginTime, endTime))
-                .setWithdrawPrice(Optional.ofNullable(brokerageWithdrawService.getWithdrawSummaryByUserId(userId, BrokerageWithdrawStatusEnum.AUDIT_SUCCESS)).map(UserWithdrawSummaryBO::getPrice).orElse(0))
+                .setWithdrawPrice(Optional.ofNullable(brokerageWithdrawService.getWithdrawSummaryByUserId(userId, BrokerageWithdrawStatusEnum.AUDIT_SUCCESS))
+                        .map(UserWithdrawSummaryBO::getPrice).orElse(0))
                 .setBrokeragePrice(0).setFrozenPrice(0)
                 .setFirstBrokerageUserCount(brokerageUserService.getBrokerageUserCountByBindUserId(userId, 1))
                 .setSecondBrokerageUserCount(brokerageUserService.getBrokerageUserCountByBindUserId(userId, 2));

+ 1 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/brokerage/BrokerageWithdrawMapper.java

@@ -41,4 +41,5 @@ public interface BrokerageWithdrawMapper extends BaseMapperX<BrokerageWithdrawDO
             "WHERE user_id = #{userId} AND status = #{status} AND deleted = FALSE")
     UserWithdrawSummaryBO selectCountAndSumPriceByUserIdAndStatus(@Param("userId") Long userId,
                                                                   @Param("status") Integer status);
+
 }

+ 8 - 11
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImpl.java

@@ -315,37 +315,34 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService {
 
         // 2.1 校验分销功能是否开启
         TradeConfigDO tradeConfig = tradeConfigService.getTradeConfig();
-        if (tradeConfig == null || !BooleanUtil.isTrue(tradeConfig.getBrokerageEnabled())) {
+        if (tradeConfig == null || BooleanUtil.isFalse(tradeConfig.getBrokerageEnabled())) {
             return respVO;
         }
-
         // 2.2 校验用户是否有分销资格
         respVO.setEnabled(brokerageUserService.getUserBrokerageEnabled(getLoginUserId()));
-        if (!BooleanUtil.isTrue(respVO.getEnabled())) {
+        if (BooleanUtil.isFalse(respVO.getEnabled())) {
             return respVO;
         }
-
-        Integer fixedMinPrice = 0;
-        Integer fixedMaxPrice = 0;
-        Integer spuMinPrice = 0;
-        Integer spuMaxPrice = 0;
         // 2.3 校验商品是否存在
         ProductSpuRespDTO spu = productSpuApi.getSpu(spuId);
         if (spu == null) {
             return respVO;
         }
 
+        // 3.1 商品单独分佣模式
+        Integer fixedMinPrice = 0;
+        Integer fixedMaxPrice = 0;
+        Integer spuMinPrice = 0;
+        Integer spuMaxPrice = 0;
         List<ProductSkuRespDTO> skuList = productSkuApi.getSkuListBySpuId(ListUtil.of(spuId));
         if (BooleanUtil.isTrue(spu.getSubCommissionType())) {
-            // 3.1 商品单独分佣模式
             fixedMinPrice = getMinValue(skuList, ProductSkuRespDTO::getFirstBrokeragePrice);
             fixedMaxPrice = getMaxValue(skuList, ProductSkuRespDTO::getFirstBrokeragePrice);
+        // 3.2 全局分佣模式(根据商品价格比例计算)
         } else {
-            // 3.2 全局分佣模式(根据商品价格比例计算)
             spuMinPrice = getMinValue(skuList, ProductSkuRespDTO::getPrice);
             spuMaxPrice = getMaxValue(skuList, ProductSkuRespDTO::getPrice);
         }
-
         respVO.setBrokerageMinPrice(calculatePrice(spuMinPrice, tradeConfig.getBrokerageFirstPercent(), fixedMinPrice));
         respVO.setBrokerageMaxPrice(calculatePrice(spuMaxPrice, tradeConfig.getBrokerageFirstPercent(), fixedMaxPrice));
         return respVO;

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

@@ -236,6 +236,7 @@ public class BrokerageUserServiceImpl implements BrokerageUserService {
 
         // 校验分销关系绑定模式
         if (BrokerageBindModeEnum.REGISTER.getMode().equals(tradeConfig.getBrokerageBindMode())) {
+            // TODO @疯狂:是不是把 isNewUser 挪到这里好点呀?
             if (!BooleanUtil.isTrue(isNewUser)) {
                 throw exception(BROKERAGE_BIND_MODE_REGISTER); // 只有在注册时可以绑定
             }

+ 1 - 1
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java

@@ -36,7 +36,7 @@ public class MemberUserRespDTO {
      */
     private String mobile;
     /**
-     * 创建时间
+     * 创建时间(注册时间)
      */
     private LocalDateTime createTime;
 

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/AppDictDataController.java

@@ -31,7 +31,7 @@ public class AppDictDataController {
     @GetMapping("/type")
     @Operation(summary = "根据字典类型查询字典数据信息")
     @Parameter(name = "type", description = "字典类型", required = true, example = "common_status")
-    public CommonResult<List<AppDictDataRespVO>> getDictDataListByType(@RequestParam String type) {
+    public CommonResult<List<AppDictDataRespVO>> getDictDataListByType(@RequestParam("type") String type) {
         List<DictDataDO> list = dictDataService.getEnabledDictDataListByType(type);
         return success(DictDataConvert.INSTANCE.convertList03(list));
     }

+ 0 - 12
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/dict/vo/AppDictDataRespVO.java

@@ -6,7 +6,6 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 
 @Schema(description = "用户 App - 字典数据信息 Response VO")
@@ -19,23 +18,12 @@ public class AppDictDataRespVO {
     private Long id;
 
     @Schema(description = "字典标签", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")
-    @NotBlank(message = "字典标签不能为空")
-    @Size(max = 100, message = "字典标签长度不能超过100个字符")
     private String label;
 
     @Schema(description = "字典值", requiredMode = Schema.RequiredMode.REQUIRED, example = "iocoder")
-    @NotBlank(message = "字典键值不能为空")
-    @Size(max = 100, message = "字典键值长度不能超过100个字符")
     private String value;
 
     @Schema(description = "字典类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "sys_common_sex")
-    @NotBlank(message = "字典类型不能为空")
-    @Size(max = 100, message = "字典类型长度不能超过100个字符")
     private String dictType;
 
-    @Schema(description = "颜色类型,default、primary、success、info、warning、danger", example = "default")
-    private String colorType;
-    @Schema(description = "css 样式", example = "btn-visible")
-    private String cssClass;
-
 }

+ 3 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dict/DictDataMapper.java

@@ -50,6 +50,8 @@ public interface DictDataMapper extends BaseMapperX<DictDataDO> {
 
     default List<DictDataDO> selectListByTypeAndStatus(String dictType, Integer status) {
         return selectList(new LambdaQueryWrapper<DictDataDO>()
-                .eq(DictDataDO::getDictType, dictType).eq(DictDataDO::getStatus, status));
+                .eq(DictDataDO::getDictType, dictType)
+                .eq(DictDataDO::getStatus, status));
     }
+
 }