From 154401fafb986399e371639dde98576b350e819f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Wed, 17 Sep 2025 11:11:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E9=9A=8F=E6=9C=BA=E7=AB=8B?= =?UTF-8?q?=E5=87=8F=E9=87=91=E9=A2=9D=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/UShopConsumeDiscountController.java | 40 +++++++++++ .../dto/MkShopConsumeDiscountRecordDTO.java | 55 +++++++++++++++ .../entity/MkShopConsumeDiscountRecord.java | 63 +++++++++++++++++ .../MkShopConsumeDiscountRecordService.java | 14 ++++ .../MkShopConsumeDiscountRecordMapper.java | 14 ++++ ...kShopConsumeDiscountRecordServiceImpl.java | 68 +++++++++++++++++++ .../impl/MkShopCouponRecordServiceImpl.java | 2 + .../MkShopConsumeDiscountRecordMapper.xml | 7 ++ 8 files changed, 263 insertions(+) create mode 100644 cash-api/market-server/src/main/java/com/czg/controller/user/UShopConsumeDiscountController.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkShopConsumeDiscountRecordDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkShopConsumeDiscountRecord.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/market/service/MkShopConsumeDiscountRecordService.java create mode 100644 cash-service/market-service/src/main/java/com/czg/service/market/mapper/MkShopConsumeDiscountRecordMapper.java create mode 100644 cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopConsumeDiscountRecordServiceImpl.java create mode 100644 cash-service/market-service/src/main/resources/mapper/MkShopConsumeDiscountRecordMapper.xml diff --git a/cash-api/market-server/src/main/java/com/czg/controller/user/UShopConsumeDiscountController.java b/cash-api/market-server/src/main/java/com/czg/controller/user/UShopConsumeDiscountController.java new file mode 100644 index 00000000..45df15f0 --- /dev/null +++ b/cash-api/market-server/src/main/java/com/czg/controller/user/UShopConsumeDiscountController.java @@ -0,0 +1,40 @@ +package com.czg.controller.user; + +import com.czg.account.dto.shopuser.ShopUserAddDTO; +import com.czg.account.dto.shopuser.ShopUserDetailDTO; +import com.czg.account.dto.shopuser.ShopUserVipCardDTO; +import com.czg.account.entity.MemberPointsLog; +import com.czg.account.entity.ShopUser; +import com.czg.account.entity.ShopUserFlow; +import com.czg.account.service.MemberPointsLogService; +import com.czg.account.service.PointsExchangeRecordService; +import com.czg.account.service.ShopUserFlowService; +import com.czg.account.service.ShopUserService; +import com.czg.annotation.Debounce; +import com.czg.market.entity.MkShopConsumeDiscountRecord; +import com.czg.market.service.MkShopConsumeDiscountRecordService; +import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; +import com.czg.utils.PageUtil; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 店铺会员相关 + * + * @author Administrator + */ +@RestController +@RequestMapping("/user/consumeDiscount") +public class UShopConsumeDiscountController { + @Resource + private MkShopConsumeDiscountRecordService shopConsumeDiscountRecordService; + @GetMapping + public CzgResult get(@RequestParam Long shopId) { + return CzgResult.success(shopConsumeDiscountRecordService.get(shopId)); + } + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkShopConsumeDiscountRecordDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkShopConsumeDiscountRecordDTO.java new file mode 100644 index 00000000..476ba3ac --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/dto/MkShopConsumeDiscountRecordDTO.java @@ -0,0 +1,55 @@ + +package com.czg.market.dto; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import com.alibaba.fastjson2.annotation.JSONField; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 新客立减减免记录 实体类。 + * + * @author zs + * @since 2025-09-17 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MkShopConsumeDiscountRecordDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + + /** + * 消费立减id + */ + private Long consumeDiscountId; + + /** + * 减免金额 + */ + private BigDecimal amount; + + /** + * 订单金额 + */ + private BigDecimal orderAmount; + + /** + * 创建时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + /** + * 门店id + */ + private Long shopId; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkShopConsumeDiscountRecord.java b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkShopConsumeDiscountRecord.java new file mode 100644 index 00000000..46d03516 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/entity/MkShopConsumeDiscountRecord.java @@ -0,0 +1,63 @@ +package com.czg.market.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 新客立减减免记录 实体类。 + * + * @author zs + * @since 2025-09-17 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("mk_shop_consume_discount_record") +public class MkShopConsumeDiscountRecord implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + + /** + * 消费立减id + */ + private Long consumeDiscountId; + + /** + * 减免金额 + */ + private BigDecimal amount; + + /** + * 订单金额 + */ + private BigDecimal orderAmount; + + /** + * 创建时间 + */ + @Column(onInsertValue = "now()") + private LocalDateTime createTime; + + /** + * 门店id + */ + private Long shopId; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkShopConsumeDiscountRecordService.java b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkShopConsumeDiscountRecordService.java new file mode 100644 index 00000000..1ffcdf2b --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/market/service/MkShopConsumeDiscountRecordService.java @@ -0,0 +1,14 @@ +package com.czg.market.service; + +import com.mybatisflex.core.service.IService; +import com.czg.market.entity.MkShopConsumeDiscountRecord; + +/** + * 新客立减减免记录 服务层。 + * + * @author zs + * @since 2025-09-17 + */ +public interface MkShopConsumeDiscountRecordService extends IService { + MkShopConsumeDiscountRecord get(Long shopId); +} diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/mapper/MkShopConsumeDiscountRecordMapper.java b/cash-service/market-service/src/main/java/com/czg/service/market/mapper/MkShopConsumeDiscountRecordMapper.java new file mode 100644 index 00000000..2ac2250f --- /dev/null +++ b/cash-service/market-service/src/main/java/com/czg/service/market/mapper/MkShopConsumeDiscountRecordMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.market.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.market.entity.MkShopConsumeDiscountRecord; + +/** + * 新客立减减免记录 映射层。 + * + * @author zs + * @since 2025-09-17 + */ +public interface MkShopConsumeDiscountRecordMapper extends BaseMapper { + +} diff --git a/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopConsumeDiscountRecordServiceImpl.java b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopConsumeDiscountRecordServiceImpl.java new file mode 100644 index 00000000..37ab103e --- /dev/null +++ b/cash-service/market-service/src/main/java/com/czg/service/market/service/impl/MkShopConsumeDiscountRecordServiceImpl.java @@ -0,0 +1,68 @@ +package com.czg.service.market.service.impl; + +import com.czg.constant.TableValueConstant; +import com.czg.exception.ApiNotPrintException; +import com.czg.market.entity.MkConsumeDiscountRandom; +import com.czg.market.service.MkConsumeDiscountService; +import com.czg.market.vo.MkConsumeDiscountVO; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.market.entity.MkShopConsumeDiscountRecord; +import com.czg.market.service.MkShopConsumeDiscountRecordService; +import com.czg.service.market.mapper.MkShopConsumeDiscountRecordMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Random; + +/** + * 新客立减减免记录 服务层实现。 + * + * @author zs + * @since 2025-09-17 + */ +@Service +public class MkShopConsumeDiscountRecordServiceImpl extends ServiceImpl implements MkShopConsumeDiscountRecordService{ + @Resource + private MkConsumeDiscountService consumeDiscountService; + @Override + public MkShopConsumeDiscountRecord get(Long shopId) { + MkConsumeDiscountVO consumeDiscountVO = consumeDiscountService.detail(shopId); + if (consumeDiscountVO.getIsEnable() != 1) { + throw new ApiNotPrintException("新客立减未开启"); + } + + MkShopConsumeDiscountRecord shopConsumeDiscountRecord = new MkShopConsumeDiscountRecord(); + shopConsumeDiscountRecord.setShopId(shopId); + + // 固定金额 + if (TableValueConstant.ConsumeDiscount.DiscountType.FIXED.getCode().equals(consumeDiscountVO.getDiscountType())) { + shopConsumeDiscountRecord.setAmount(consumeDiscountVO.getDiscountAmount()); + return shopConsumeDiscountRecord; + } + + // 随机金额(概率加起来是100) + List randomList = consumeDiscountVO.getRandomDiscountList(); + if (randomList == null || randomList.isEmpty()) { + throw new ApiNotPrintException("随机立减配置错误"); + } + + // 生成 1~100 的随机数 + int rand = new Random().nextInt(100) + 1; + int current = 0; + + for (MkConsumeDiscountRandom item : randomList) { + int prob = item.getProbability().intValue(); + current += prob; + if (rand <= current) { + shopConsumeDiscountRecord.setAmount(item.getAmount()); + save(shopConsumeDiscountRecord); + return shopConsumeDiscountRecord; + } + } + + throw new ApiNotPrintException("随机立减计算失败"); + } + +} 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 244b67e7..800216b0 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 @@ -29,6 +29,7 @@ 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.context.annotation.Lazy; import java.time.LocalDateTime; import java.time.LocalTime; @@ -55,6 +56,7 @@ public class MkShopCouponRecordServiceImpl extends ServiceImpl + + + +