From ec1e94fdaf97d0ba96d7188c6b4923d6cdd476c5 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Tue, 16 Sep 2025 11:07:32 +0800 Subject: [PATCH] =?UTF-8?q?MkShopCouponRecordService.receiveCoupon=20?= =?UTF-8?q?=E5=8F=91=E6=94=BE=E5=88=B8=20=E7=BB=9F=E4=B8=80=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../czg/market/dto/MkShopCouponGiftDTO.java | 50 ++++++++ .../service/MkShopCouponRecordService.java | 8 +- .../main/java/com/czg/utils/AssertUtil.java | 14 +++ .../impl/MkShopCouponRecordServiceImpl.java | 110 ++++++++++++++---- 4 files changed, 156 insertions(+), 26 deletions(-) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkShopCouponGiftDTO.java diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkShopCouponGiftDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkShopCouponGiftDTO.java new file mode 100644 index 00000000..6330bdf4 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkShopCouponGiftDTO.java @@ -0,0 +1,50 @@ +package com.czg.market.dto; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 发放优惠券实体 + * @author ww + * @description + */ +@Data +public class MkShopCouponGiftDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 店铺id + */ + private Long shopId; + + /** + * 店铺用户id + */ + private Long shopUserId; + + /** + * 卷Id (校验是否可用) + */ + private Long couponId; + + /** + * 来源活动id + */ + private Long sourceId; + + /** + * 来源记录Id + */ + private Long sourceFlowId; + + /** + * 来源描述 + */ + private String source; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkShopCouponRecordService.java b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkShopCouponRecordService.java index 80f0d668..8714ec61 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkShopCouponRecordService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkShopCouponRecordService.java @@ -3,6 +3,7 @@ package com.czg.market.service; import com.czg.account.dto.QueryReceiveDto; import com.czg.account.vo.CouponReceiveVo; import com.czg.account.vo.UserCouponVo; +import com.czg.market.dto.MkShopCouponGiftDTO; import com.czg.market.dto.MkShopCouponRecordDTO; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; @@ -35,10 +36,11 @@ public interface MkShopCouponRecordService extends IService /** * 发放券 统一方法 * - * @param mkShopCouponRecordDTO 赠送信息 除Id外 几乎全填 - * @param number 发放数量 + * @param giftDTO 除 sourceFlowId 外 全必填 如果有 也填 + * @param number 发放数量 + * @param isLimit 是否校验限领,活动与管理员添加 不计限领 */ - void receiveCoupon(MkShopCouponRecordDTO mkShopCouponRecordDTO, Integer number); + void receiveCoupon(MkShopCouponGiftDTO giftDTO, Integer number, boolean isLimit); /** * 用户优惠券 失效/删除 diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/utils/AssertUtil.java b/cash-common/cash-common-tools/src/main/java/com/czg/utils/AssertUtil.java index a35e0a33..f8200484 100644 --- a/cash-common/cash-common-tools/src/main/java/com/czg/utils/AssertUtil.java +++ b/cash-common/cash-common-tools/src/main/java/com/czg/utils/AssertUtil.java @@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil; import java.util.List; import java.util.Map; +import java.util.Objects; /** * 校验工具类 @@ -17,6 +18,19 @@ import java.util.Map; */ public class AssertUtil { + /** + * 判断两个对象是否不相等,如果不相等则抛出异常 + * @param a 实际值 + * @param b 期望值 + * @param message 异常消息 + */ + public static void isNotEqual(Object a, Object b, String message) { + // 如果实际值与期望值不相等,则抛出异常 + if (!Objects.equals(a, b)) { + throw new ValidateException(message); + } + } + /** * 检查字符串是否不为空或空白字符,如果为空或空白字符则抛出异常 * diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopCouponRecordServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopCouponRecordServiceImpl.java index 7951aa4b..244b67e7 100644 --- a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopCouponRecordServiceImpl.java +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopCouponRecordServiceImpl.java @@ -1,26 +1,38 @@ package com.czg.service.market.service.impl; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSONObject; import com.czg.account.dto.QueryReceiveDto; +import com.czg.account.entity.ShopInfo; +import com.czg.account.entity.ShopUser; import com.czg.account.entity.UserInfo; +import com.czg.account.service.ShopInfoService; +import com.czg.account.service.ShopUserService; import com.czg.account.service.UserInfoService; import com.czg.account.vo.CouponReceiveVo; import com.czg.account.vo.UserCouponVo; import com.czg.exception.CzgException; +import com.czg.market.dto.MkShopCouponGiftDTO; import com.czg.market.dto.MkShopCouponRecordDTO; import com.czg.market.entity.MkShopCouponRecord; +import com.czg.market.entity.ShopCoupon; import com.czg.market.service.MkShopCouponRecordService; +import com.czg.market.service.ShopCouponService; import com.czg.service.market.mapper.MkShopCouponRecordMapper; +import com.czg.utils.AssertUtil; import com.czg.utils.PageUtil; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; +import jakarta.annotation.Resource; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; -import org.springframework.stereotype.Service; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.temporal.ChronoUnit; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -38,6 +50,13 @@ public class MkShopCouponRecordServiceImpl extends ServiceImpl queryReceive(QueryReceiveDto param) { @@ -100,36 +119,81 @@ public class MkShopCouponRecordServiceImpl extends ServiceImpl= 0 && coupon.getLeftNum() < number) { + throw new CzgException("优惠券库存不足"); + } + if (isLimit) { + //查询已领取张数 + long count = this.queryChain() + .eq(MkShopCouponRecord::getShopUserId, shopUser.getId()) + .eq(MkShopCouponRecord::getCouponId, giftDTO.getCouponId()).count(); + if (coupon.getGetLimit() >= 0 && count >= coupon.getGetLimit()) { + throw new CzgException("已达到领取限制,不可领取7"); } } - + String couponJson = JSONObject.toJSONString(coupon); + LocalDateTime start = LocalDateTime.now().with(LocalTime.MIN); + LocalDateTime end = null; + if ("fixed".equals(coupon.getValidType())) { + //固定时间 + if (coupon.getDaysToTakeEffect() != null && coupon.getDaysToTakeEffect() > 0) { + start = LocalDateTimeUtil.offset(start, coupon.getDaysToTakeEffect(), ChronoUnit.DAYS).with(LocalTime.MIN); + } + end = LocalDateTimeUtil.offset(start, coupon.getValidDays(), ChronoUnit.DAYS).with(LocalTime.MAX); + } else if ("custom".equals(coupon.getValidType())) { + //自定义时间 + start = coupon.getValidStartTime(); + end = coupon.getValidEndTime(); + } for (int i = 0; i < number; i++) { - bean.setId(null); - save(bean); + MkShopCouponRecord record = new MkShopCouponRecord(); + record.setShopId(giftDTO.getShopId()); + record.setShopUserId(giftDTO.getShopUserId()); + record.setUserId(shopUser.getUserId()); + record.setCouponId(giftDTO.getCouponId()); + record.setSourceId(giftDTO.getSourceId()); + record.setSourceFlowId(giftDTO.getSourceFlowId()); + record.setSource(giftDTO.getSource()); + record.setStatus(0); + record.setType(coupon.getCouponType()); + record.setFullAmount(coupon.getFullAmount()); + record.setDiscountAmount(coupon.getDiscountAmount()); + record.setDiscountRate(coupon.getDiscountRate()); + record.setCreateTime(LocalDateTime.now()); + record.setIsDel(0); + record.setCouponJson(couponJson); + + record.setUseStartTime(start); + record.setUseEndTime(end); + save(record); } + coupon.setGiftNum(coupon.getGiftNum() + number); + if (coupon.getGiveNum() != -10086) { + coupon.setLeftNum(coupon.getLeftNum() - number); + } + couponService.updateById(coupon); } + @Override public void deleteRecord(Long id) { updateById(new MkShopCouponRecord().setId(id).setIsDel(1), true);