Commit fa526a98c0cd9a10e25418134ed8f1feee789972

Authored by YunaiV
2 parents 9faee918 6ffb4ed1

Merge branch 'develop' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into master-jdk17

Showing 20 changed files with 115 additions and 32 deletions
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivablePlanMapper.java
... ... @@ -60,12 +60,13 @@ public interface CrmReceivablePlanMapper extends BaseMapperX<CrmReceivablePlanDO
60 60 // Backlog: 回款提醒类型
61 61 LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
62 62 if (CrmReceivablePlanPageReqVO.REMIND_TYPE_NEEDED.equals(pageReqVO.getRemindType())) { // 待回款
  63 + // 查询条件:未回款 + 提醒时间 <= 当前时间(反过来即当前时间 >= 提醒时间,已经到达提醒的时间点)
63 64 query.isNull(CrmReceivablePlanDO::getReceivableId) // 未回款
64   - .lt(CrmReceivablePlanDO::getReturnTime, beginOfToday) // 已逾期
65   - .lt(CrmReceivablePlanDO::getRemindTime, beginOfToday); // 今天开始提醒
66   - } else if (CrmReceivablePlanPageReqVO.REMIND_TYPE_EXPIRED.equals(pageReqVO.getRemindType())) { // 已逾期
  65 + .le(CrmReceivablePlanDO::getRemindTime, beginOfToday); // 今天开始提醒
  66 + } else if (CrmReceivablePlanPageReqVO.REMIND_TYPE_EXPIRED.equals(pageReqVO.getRemindType())) { // 已逾期
  67 + // 查询条件:未回款 + 回款时间 < 当前时间(反过来即当前时间 > 回款时间,已经过了回款时间点)
67 68 query.isNull(CrmReceivablePlanDO::getReceivableId) // 未回款
68   - .ge(CrmReceivablePlanDO::getReturnTime, beginOfToday); // 已逾期
  69 + .lt(CrmReceivablePlanDO::getReturnTime, beginOfToday); // 已逾期
69 70 } else if (CrmReceivablePlanPageReqVO.REMIND_TYPE_RECEIVED.equals(pageReqVO.getRemindType())) { // 已回款
70 71 query.isNotNull(CrmReceivablePlanDO::getReceivableId);
71 72 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
... ... @@ -270,7 +270,7 @@ public class CrmContractServiceImpl implements CrmContractService {
270 270 }
271 271  
272 272 @Override
273   - @LogRecord(type = CRM_CONTRACT_TYPE, subType = CRM_CONTRACT_FOLLOW_UP_SUB_TYPE, bizNo = "{{#id}",
  273 + @LogRecord(type = CRM_CONTRACT_TYPE, subType = CRM_CONTRACT_FOLLOW_UP_SUB_TYPE, bizNo = "{{#id}}",
274 274 success = CRM_CONTRACT_FOLLOW_UP_SUCCESS)
275 275 @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTRACT, bizId = "#id", level = CrmPermissionLevelEnum.WRITE)
276 276 public void updateContractFollowUp(Long id, LocalDateTime contactNextTime, String contactLastContent) {
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java
... ... @@ -60,7 +60,8 @@ public class CrmPermissionUtils {
60 60 }
61 61 query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType)
62 62 .eq(CrmPermissionDO::getBizId, bizId)
63   - .in(CrmPermissionDO::getLevel, CrmPermissionLevelEnum.READ.getLevel(), CrmPermissionLevelEnum.WRITE.getLevel()));
  63 + .in(CrmPermissionDO::getLevel, CrmPermissionLevelEnum.READ.getLevel(), CrmPermissionLevelEnum.WRITE.getLevel())
  64 + .eq(CrmPermissionDO::getUserId,userId));
64 65 query.ne(ownerUserIdField, userId);
65 66 }
66 67 // 场景三:下属负责的数据(下属是负责人)
... ...
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/vo/AppProductSpuRespVO.java
... ... @@ -48,4 +48,9 @@ public class AppProductSpuRespVO {
48 48 @Schema(description = "商品销量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
49 49 private Integer salesCount;
50 50  
  51 + // ========== 物流相关字段 =========
  52 +
  53 + @Schema(description = "配送方式数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  54 + private List<Integer> deliveryTypes;
  55 +
51 56 }
... ...
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java
... ... @@ -78,7 +78,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
78 78 @Transactional(rollbackFor = Exception.class)
79 79 public void updateSpu(ProductSpuSaveReqVO updateReqVO) {
80 80 // 校验 SPU 是否存在
81   - validateSpuExists(updateReqVO.getId());
  81 + ProductSpuDO spu = validateSpuExists(updateReqVO.getId());
82 82 // 校验分类、品牌
83 83 validateCategory(updateReqVO.getCategoryId());
84 84 brandService.validateProductBrand(updateReqVO.getBrandId());
... ... @@ -87,7 +87,7 @@ public class ProductSpuServiceImpl implements ProductSpuService {
87 87 productSkuService.validateSkuList(skuSaveReqList, updateReqVO.getSpecType());
88 88  
89 89 // 更新 SPU
90   - ProductSpuDO updateObj = BeanUtils.toBean(updateReqVO, ProductSpuDO.class);
  90 + ProductSpuDO updateObj = BeanUtils.toBean(updateReqVO, ProductSpuDO.class).setStatus(spu.getStatus());
91 91 initSpuFromSkus(updateObj, skuSaveReqList);
92 92 productSpuMapper.updateById(updateObj);
93 93 // 批量更新 SKU
... ... @@ -176,10 +176,12 @@ public class ProductSpuServiceImpl implements ProductSpuService {
176 176 productSkuService.deleteSkuBySpuId(id);
177 177 }
178 178  
179   - private void validateSpuExists(Long id) {
180   - if (productSpuMapper.selectById(id) == null) {
  179 + private ProductSpuDO validateSpuExists(Long id) {
  180 + ProductSpuDO spuDO = productSpuMapper.selectById(id);
  181 + if (spuDO == null) {
181 182 throw exception(SPU_NOT_EXISTS);
182 183 }
  184 + return spuDO;
183 185 }
184 186  
185 187 @Override
... ...
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponServiceImpl.java
... ... @@ -152,7 +152,7 @@ public class CouponServiceImpl implements CouponService {
152 152 findAndThen(userCouponIdsMap, userId, couponIds::addAll);
153 153 }
154 154 } catch (Exception e) {
155   - log.error("[takeCouponsByAdmin][coupon({}) 优惠券发放失败]", entry, e);
  155 + log.error("[takeCouponsByAdmin][coupon({}) 优惠券发放失败 userId({})]", entry, userId, e);
156 156 }
157 157 }
158 158 return couponIds;
... ...
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 {
93 93 ErrorCode BROKERAGE_BIND_OVERRIDE = new ErrorCode(1_011_007_006, "已绑定了推广人");
94 94 ErrorCode BROKERAGE_BIND_LOOP = new ErrorCode(1_011_007_007, "下级不能绑定自己的上级");
95 95 ErrorCode BROKERAGE_USER_LEVEL_NOT_SUPPORT = new ErrorCode(1_011_007_008, "目前只支持 level 小于等于 2");
  96 + ErrorCode BROKERAGE_CREATE_USER_EXISTS = new ErrorCode(1_011_007_009, "分销用户已存在");
96 97  
97 98 // ========== 分销提现 模块 1-011-008-000 ==========
98 99 ErrorCode BROKERAGE_WITHDRAW_NOT_EXISTS = new ErrorCode(1_011_008_000, "佣金提现记录不存在");
... ...
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 {
47 47 @Resource
48 48 private MemberUserApi memberUserApi;
49 49  
  50 + @PostMapping("/create")
  51 + @Operation(summary = "创建分销用户")
  52 + @PreAuthorize("@ss.hasPermission('trade:brokerage-user:create')")
  53 + public CommonResult<Long> createBrokerageUser(@Valid @RequestBody BrokerageUserCreateReqVO createReqVO) {
  54 + return success(brokerageUserService.createBrokerageUser(createReqVO));
  55 + }
  56 +
50 57 @PutMapping("/update-bind-user")
51 58 @Operation(summary = "修改推广员")
52 59 @PreAuthorize("@ss.hasPermission('trade:brokerage-user:update-bind-user')")
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserCreateReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotNull;
  5 +import lombok.Data;
  6 +
  7 +@Schema(description = "管理后台 - 分销用户创建 Request VO")
  8 +@Data
  9 +public class BrokerageUserCreateReqVO {
  10 +
  11 + @Schema(description = "分销用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  12 + @NotNull(message = "分销用户编号不能为空")
  13 + private Long userId;
  14 +
  15 + @Schema(description = "推广员编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4587")
  16 + private Long bindUserId;
  17 +
  18 +}
... ...
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 {
59 59 }
60 60  
61 61 default BrokerageUserRespVO copyTo(MemberUserRespDTO source, BrokerageUserRespVO target) {
  62 + if (target == null) {
  63 + return null;
  64 + }
62 65 Optional.ofNullable(source).ifPresent(
63 66 user -> target.setNickname(user.getNickname()).setAvatar(user.getAvatar()));
64 67 return target;
... ...
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;
27 27 *
28 28 * @author 芋道源码
29 29 */
30   -@TableName("trade_order")
  30 +@TableName(value = "trade_order", autoResultMap = true)
31 31 @KeySequence("trade_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
32 32 @Data
33 33 @EqualsAndHashCode(callSuper = true)
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImpl.java
... ... @@ -26,12 +26,12 @@ import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO;
26 26 import cn.iocoder.yudao.module.trade.service.brokerage.bo.UserBrokerageSummaryRespBO;
27 27 import cn.iocoder.yudao.module.trade.service.config.TradeConfigService;
28 28 import com.baomidou.mybatisplus.core.metadata.IPage;
  29 +import jakarta.annotation.Resource;
29 30 import lombok.extern.slf4j.Slf4j;
30 31 import org.springframework.stereotype.Service;
31 32 import org.springframework.transaction.annotation.Transactional;
32 33 import org.springframework.validation.annotation.Validated;
33 34  
34   -import jakarta.annotation.Resource;
35 35 import java.time.LocalDateTime;
36 36 import java.util.*;
37 37  
... ... @@ -79,7 +79,7 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService {
79 79 TradeConfigDO memberConfig = tradeConfigService.getTradeConfig();
80 80 // 0 未启用分销功能
81 81 if (memberConfig == null || !BooleanUtil.isTrue(memberConfig.getBrokerageEnabled())) {
82   - log.warn("[addBrokerage][增加佣金失败:brokerageEnabled 未配置,userId({})", userId);
  82 + log.error("[addBrokerage][增加佣金失败:brokerageEnabled 未配置,userId({}) bizType({}) list({})", userId, bizType, list);
83 83 return;
84 84 }
85 85  
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserService.java
1 1 package cn.iocoder.yudao.module.trade.service.brokerage;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserCreateReqVO;
4 5 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;
5 6 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO;
6 7 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryRespVO;
7 8 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO;
8 9 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO;
9 10 import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
  11 +import jakarta.validation.Valid;
10 12 import jakarta.validation.constraints.NotNull;
11 13  
12 14 /**
... ... @@ -108,6 +110,14 @@ public interface BrokerageUserService {
108 110 boolean bindBrokerageUser(@NotNull Long userId, @NotNull Long bindUserId);
109 111  
110 112 /**
  113 + * 【管理员】创建分销用户
  114 + *
  115 + * @param createReqVO 请求
  116 + * @return 编号
  117 + */
  118 + Long createBrokerageUser(@Valid BrokerageUserCreateReqVO createReqVO);
  119 +
  120 + /**
111 121 * 获取用户是否有分销资格
112 122 *
113 123 * @param userId 用户编号
... ...
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;
8 8 import cn.hutool.core.util.StrUtil;
9 9 import cn.iocoder.yudao.framework.common.pojo.PageResult;
10 10 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
  11 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
11 12 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
12 13 import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
13 14 import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
  15 +import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserCreateReqVO;
14 16 import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;
15 17 import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO;
16 18 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;
28 30 import com.baomidou.mybatisplus.core.metadata.IPage;
29 31 import jakarta.annotation.Resource;
30 32 import org.springframework.stereotype.Service;
  33 +import org.springframework.transaction.annotation.Transactional;
31 34 import org.springframework.validation.annotation.Validated;
32 35  
33 36 import java.time.LocalDateTime;
... ... @@ -110,7 +113,6 @@ public class BrokerageUserServiceImpl implements BrokerageUserService {
110 113 if (brokerageUserDO == null) {
111 114 throw exception(BROKERAGE_USER_NOT_EXISTS);
112 115 }
113   -
114 116 return brokerageUserDO;
115 117 }
116 118  
... ... @@ -202,6 +204,24 @@ public class BrokerageUserServiceImpl implements BrokerageUserService {
202 204 return true;
203 205 }
204 206  
  207 + @Override
  208 + @Transactional(rollbackFor = Exception.class)
  209 + public Long createBrokerageUser(BrokerageUserCreateReqVO createReqVO) {
  210 + // 1.1 校验分销用户是否已存在
  211 + BrokerageUserDO brokerageUser = brokerageUserMapper.selectById(createReqVO.getUserId());
  212 + if (brokerageUser != null) {
  213 + throw exception(BROKERAGE_CREATE_USER_EXISTS);
  214 + }
  215 + // 1.2 校验是否能绑定用户
  216 + brokerageUser = BeanUtils.toBean(createReqVO, BrokerageUserDO.class).setId(createReqVO.getUserId())
  217 + .setBrokerageTime(LocalDateTime.now());
  218 + validateCanBindUser(brokerageUser, createReqVO.getBindUserId());
  219 +
  220 + // 2. 创建分销人
  221 + brokerageUserMapper.insert(brokerageUser);
  222 + return brokerageUser.getId();
  223 + }
  224 +
205 225 /**
206 226 * 补全绑定用户的字段
207 227 *
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
... ... @@ -329,7 +329,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
329 329 /**
330 330 * 校验支付订单的合法性
331 331 *
332   - * @param order 交易订单
  332 + * @param order 交易订单
333 333 * @param payOrderId 支付订单编号
334 334 * @return 支付订单
335 335 */
... ... @@ -748,7 +748,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
748 748 }
749 749 DeliveryPickUpStoreDO deliveryPickUpStore = pickUpStoreService.getDeliveryPickUpStore(order.getPickUpStoreId());
750 750 if (deliveryPickUpStore == null
751   - || !CollUtil.contains(deliveryPickUpStore.getVerifyUserIds(), userId)) {
  751 + || !CollUtil.contains(deliveryPickUpStore.getVerifyUserIds(), userId)) {
752 752 throw exception(ORDER_PICK_UP_FAIL_NOT_VERIFY_USER);
753 753 }
754 754  
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCouponOrderHandler.java
... ... @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
8 8 import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;
9 9 import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService;
10 10 import jakarta.annotation.Resource;
  11 +import lombok.extern.slf4j.Slf4j;
11 12 import org.springframework.context.annotation.Lazy;
12 13 import org.springframework.stereotype.Component;
13 14  
... ... @@ -19,6 +20,7 @@ import java.util.List;
19 20 * @author 芋道源码
20 21 */
21 22 @Component
  23 +@Slf4j
22 24 public class TradeCouponOrderHandler implements TradeOrderHandler {
23 25  
24 26 @Resource
... ... @@ -46,11 +48,15 @@ public class TradeCouponOrderHandler implements TradeOrderHandler {
46 48 return;
47 49 }
48 50 // 赠送优惠券
49   - List<Long> couponIds = couponApi.takeCouponsByAdmin(order.getGiveCouponTemplateCounts(), order.getUserId());
50   - if (CollUtil.isEmpty(couponIds)) {
51   - return;
  51 + try {
  52 + List<Long> couponIds = couponApi.takeCouponsByAdmin(order.getGiveCouponTemplateCounts(), order.getUserId());
  53 + if (CollUtil.isEmpty(couponIds)) {
  54 + return;
  55 + }
  56 + orderUpdateService.updateOrderGiveCouponIds(order.getUserId(), order.getId(), couponIds);
  57 + } catch (Exception e) {
  58 + log.error("[afterPayOrder][order({}) 赠送优惠券({})失败,需要手工补偿]", order.getId(), order.getGiveCouponTemplateCounts(), e);
52 59 }
53   - orderUpdateService.updateOrderGiveCouponIds(order.getUserId(), order.getId(), couponIds);
54 60 }
55 61  
56 62 @Override
... ...
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 {
122 122 */
123 123 private boolean isGlobalExpressFree(TradePriceCalculateRespBO result) {
124 124 TradeConfigDO config = tradeConfigService.getTradeConfig();
125   - return config == null
126   - || Boolean.TRUE.equals(config.getDeliveryExpressFreeEnabled()) // 开启包邮
127   - || result.getPrice().getPayPrice() >= config.getDeliveryExpressFreePrice(); // 满足包邮的价格
  125 + // 情况一:交易中心配置不存在默认不包邮
  126 + if (config == null) {
  127 + return false;
  128 + }
  129 + // 情况二:开启了全局包邮 && 满足包邮金额
  130 + return Boolean.TRUE.equals(config.getDeliveryExpressFreeEnabled()) &&
  131 + result.getPrice().getPayPrice() >= config.getDeliveryExpressFreePrice();
128 132 }
129 133  
130 134 private void calculateDeliveryPrice(List<OrderItem> selectedSkus,
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApiImpl.java
... ... @@ -4,11 +4,11 @@ import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO;
4 4 import cn.iocoder.yudao.module.member.convert.level.MemberLevelConvert;
5 5 import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum;
6 6 import cn.iocoder.yudao.module.member.service.level.MemberLevelService;
  7 +import jakarta.annotation.Resource;
  8 +import lombok.extern.slf4j.Slf4j;
7 9 import org.springframework.stereotype.Service;
8 10 import org.springframework.validation.annotation.Validated;
9 11  
10   -import jakarta.annotation.Resource;
11   -
12 12 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
13 13 import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.EXPERIENCE_BIZ_NOT_SUPPORT;
14 14  
... ... @@ -17,6 +17,7 @@ import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.EXPERIENCE
17 17 *
18 18 * @author owen
19 19 */
  20 +@Slf4j
20 21 @Service
21 22 @Validated
22 23 public class MemberLevelApiImpl implements MemberLevelApi {
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/point/MemberPointApiImpl.java
... ... @@ -3,11 +3,11 @@ package cn.iocoder.yudao.module.member.api.point;
3 3 import cn.hutool.core.lang.Assert;
4 4 import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum;
5 5 import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService;
  6 +import jakarta.annotation.Resource;
  7 +import lombok.extern.slf4j.Slf4j;
6 8 import org.springframework.stereotype.Service;
7 9 import org.springframework.validation.annotation.Validated;
8 10  
9   -import jakarta.annotation.Resource;
10   -
11 11 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
12 12 import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.POINT_RECORD_BIZ_NOT_SUPPORT;
13 13  
... ... @@ -16,6 +16,7 @@ import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.POINT_RECO
16 16 *
17 17 * @author owen
18 18 */
  19 +@Slf4j
19 20 @Service
20 21 @Validated
21 22 public class MemberPointApiImpl implements MemberPointApi {
... ... @@ -28,7 +29,9 @@ public class MemberPointApiImpl implements MemberPointApi {
28 29 Assert.isTrue(point > 0);
29 30 MemberPointBizTypeEnum bizTypeEnum = MemberPointBizTypeEnum.getByType(bizType);
30 31 if (bizTypeEnum == null) {
31   - throw exception(POINT_RECORD_BIZ_NOT_SUPPORT);
  32 + log.error("[addPoint][userId({}) point({}) bizType({}) bizId({}) {}]", userId, point, bizType, bizId,
  33 + POINT_RECORD_BIZ_NOT_SUPPORT);
  34 + return;
32 35 }
33 36 memberPointRecordService.createPointRecord(userId, point, bizTypeEnum, bizId);
34 37 }
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/point/MemberPointRecordServiceImpl.java
... ... @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.member.service.point;
2 2  
3 3 import cn.hutool.core.util.ObjectUtil;
4 4 import cn.hutool.core.util.StrUtil;
5   -import cn.iocoder.yudao.framework.common.pojo.PageParam;
6 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 6 import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordPageReqVO;
8 7 import cn.iocoder.yudao.module.member.controller.app.point.vo.AppMemberPointRecordPageReqVO;
... ... @@ -11,6 +10,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
11 10 import cn.iocoder.yudao.module.member.dal.mysql.point.MemberPointRecordMapper;
12 11 import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum;
13 12 import cn.iocoder.yudao.module.member.service.user.MemberUserService;
  13 +import jakarta.annotation.Resource;
14 14 import lombok.extern.slf4j.Slf4j;
15 15 import org.apache.commons.lang3.StringUtils;
16 16 import org.springframework.stereotype.Service;
... ... @@ -18,7 +18,6 @@ import org.springframework.transaction.annotation.Transactional;
18 18 import org.springframework.util.CollectionUtils;
19 19 import org.springframework.validation.annotation.Validated;
20 20  
21   -import jakarta.annotation.Resource;
22 21 import java.util.List;
23 22 import java.util.Set;
24 23  
... ... @@ -75,7 +74,9 @@ public class MemberPointRecordServiceImpl implements MemberPointRecordService {
75 74 Integer userPoint = ObjectUtil.defaultIfNull(user.getPoint(), 0);
76 75 int totalPoint = userPoint + point; // 用户变动后的积分
77 76 if (totalPoint < 0) {
78   - throw exception(USER_POINT_NOT_ENOUGH);
  77 + log.error("[createPointRecord][userId({}) point({}) bizType({}) bizId({}) {}]", userId, point, bizType, bizId,
  78 + USER_POINT_NOT_ENOUGH);
  79 + return;
79 80 }
80 81  
81 82 // 2. 更新用户积分
... ...