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/resources/mapper/MkShopConsumeDiscountRecordMapper.xml b/cash-service/market-service/src/main/resources/mapper/MkShopConsumeDiscountRecordMapper.xml new file mode 100644 index 00000000..fe209377 --- /dev/null +++ b/cash-service/market-service/src/main/resources/mapper/MkShopConsumeDiscountRecordMapper.xml @@ -0,0 +1,7 @@ + + + + +