Commit fa526a98c0cd9a10e25418134ed8f1feee789972
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. 更新用户积分 | ... | ... |