前端随机立减金额获取

This commit is contained in:
张松 2025-09-17 11:11:52 +08:00
parent de08266971
commit 154401fafb
8 changed files with 263 additions and 0 deletions

View File

@ -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<MkShopConsumeDiscountRecord> get(@RequestParam Long shopId) {
return CzgResult.success(shopConsumeDiscountRecordService.get(shopId));
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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> {
MkShopConsumeDiscountRecord get(Long shopId);
}

View File

@ -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<MkShopConsumeDiscountRecord> {
}

View File

@ -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<MkShopConsumeDiscountRecordMapper, MkShopConsumeDiscountRecord> 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<MkConsumeDiscountRandom> 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("随机立减计算失败");
}
}

View File

@ -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<MkShopCouponRecor
@DubboReference
private ShopUserService shopUserService;
@Resource
@Lazy
private ShopCouponService couponService;

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.market.mapper.MkShopConsumeDiscountRecordMapper">
</mapper>