优惠券

This commit is contained in:
admin
2024-07-06 16:57:34 +08:00
parent 73ec78d250
commit 800dc50fed
25 changed files with 1093 additions and 99 deletions

View File

@@ -130,6 +130,12 @@ public class PlayOrderInfoEntity extends BaseEntity<PlayOrderInfoEntity> {
*/ */
private String useCoupon; private String useCoupon;
/**
* 优惠券列表
*/
@TableField(typeHandler = StringTypeHandler.class)
private List<String> couponIds;
/** /**
* 是否是客服录入订单[0:不是,1:是] * 是否是客服录入订单[0:不是,1:是]
*/ */

View File

@@ -62,11 +62,12 @@ public interface IPlayOrderInfoService extends IService<PlayOrderInfoEntity> {
* @param purchaserBy 下单人 * @param purchaserBy 下单人
* @param acceptBy 接单人 * @param acceptBy 接单人
* @param weiChatCode 订单微信号码 * @param weiChatCode 订单微信号码
* @param couponIds 优惠券ID列表
* @param remark 订单备注 * @param remark 订单备注
* @author admin * @author admin
* @since 2024/6/3 10:53 * @since 2024/6/3 10:53
**/ **/
void createOrderInfo(String orderId, String orderNo, String orderState, String orderType, String placeType, String rewardType, String firstOrder, String commodityId, String commodityType, BigDecimal commodityPrice, String serviceDuration, String commodityName, String commodityNumber, BigDecimal orderMoney, BigDecimal finalAmount, BigDecimal discountAmount, String purchaserBy, String acceptBy, String weiChatCode, String remark); void createOrderInfo(String orderId, String orderNo, String orderState, String orderType, String placeType, String rewardType, String firstOrder, String commodityId, String commodityType, BigDecimal commodityPrice, String serviceDuration, String commodityName, String commodityNumber, BigDecimal orderMoney, BigDecimal finalAmount, BigDecimal discountAmount, String purchaserBy, String acceptBy, String weiChatCode, List<String> couponIds, String remark);
/** /**

View File

@@ -74,7 +74,7 @@ public class PlayOrderInfoServiceImpl extends ServiceImpl<PlayOrderInfoMapper, P
} }
@Override @Override
public void createOrderInfo(String orderId, String orderNo, String orderState, String orderType, String placeType, String rewardType, String firstOrder, String commodityId, String commodityType, BigDecimal commodityPrice, String serviceDuration, String commodityName, String commodityNumber, BigDecimal orderMoney, BigDecimal finalAmount, BigDecimal discountAmount, String purchaserBy, String acceptBy, String weiChatCode, String remark) { public void createOrderInfo(String orderId, String orderNo, String orderState, String orderType, String placeType, String rewardType, String firstOrder, String commodityId, String commodityType, BigDecimal commodityPrice, String serviceDuration, String commodityName, String commodityNumber, BigDecimal orderMoney, BigDecimal finalAmount, BigDecimal discountAmount, String purchaserBy, String acceptBy, String weiChatCode, List<String> couponIds, String remark) {
PlayOrderInfoEntity entity = new PlayOrderInfoEntity(); PlayOrderInfoEntity entity = new PlayOrderInfoEntity();
entity.setId(orderId); entity.setId(orderId);
entity.setOrderNo(orderNo); entity.setOrderNo(orderNo);
@@ -101,6 +101,8 @@ public class PlayOrderInfoServiceImpl extends ServiceImpl<PlayOrderInfoMapper, P
entity.setOrdersExpiredState("0"); entity.setOrdersExpiredState("0");
entity.setPurchaserBy(purchaserBy); entity.setPurchaserBy(purchaserBy);
entity.setPurchaserTime(LocalDateTime.now()); entity.setPurchaserTime(LocalDateTime.now());
entity.setCouponIds(couponIds);
entity.setUseCoupon(couponIds != null && !couponIds.isEmpty() ? "1" : "0");
if (StrUtil.isNotBlank(acceptBy)) { if (StrUtil.isNotBlank(acceptBy)) {
entity.setAcceptBy(acceptBy); entity.setAcceptBy(acceptBy);
entity.setEstimatedRevenue(getEstimatedRevenue(acceptBy, placeType, firstOrder, finalAmount)); entity.setEstimatedRevenue(getEstimatedRevenue(acceptBy, placeType, firstOrder, finalAmount));
@@ -396,7 +398,7 @@ public class PlayOrderInfoServiceImpl extends ServiceImpl<PlayOrderInfoMapper, P
Page<PlayOrderInfoReturnVo> page = this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayOrderInfoReturnVo.class, lambdaQueryWrapper); Page<PlayOrderInfoReturnVo> page = this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayOrderInfoReturnVo.class, lambdaQueryWrapper);
page.getRecords().forEach(ca -> { page.getRecords().forEach(ca -> {
if (ca.getPlaceType().equals("1")) { if ("1".equals(ca.getPlaceType())) {
PlayOrderRandomInfoEntity randomInfo = playOrderRandomInfoService.getById(ca.getId()); PlayOrderRandomInfoEntity randomInfo = playOrderRandomInfoService.getById(ca.getId());
if (Objects.nonNull(randomInfo)) { if (Objects.nonNull(randomInfo)) {
ca.setLabels(randomInfo.getLabels()); ca.setLabels(randomInfo.getLabels());

View File

@@ -3,11 +3,13 @@ package com.starry.admin.modules.shop.controller;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity; import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity;
import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsQueryVo; import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsQueryVo;
import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsReturnVo;
import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsUpdateUseStateVo; import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsUpdateUseStateVo;
import com.starry.admin.modules.shop.service.IPlayCouponDetailsService; import com.starry.admin.modules.shop.service.IPlayCouponDetailsService;
import com.starry.common.annotation.Log; import com.starry.common.annotation.Log;
import com.starry.common.enums.BusinessType; import com.starry.common.enums.BusinessType;
import com.starry.common.result.R; import com.starry.common.result.R;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -30,12 +32,11 @@ public class PlayCouponDetailsController {
*/ */
// @PreAuthorize("@customSs.hasPermission('shop:couponDetails:list')") // @PreAuthorize("@customSs.hasPermission('shop:couponDetails:list')")
@PostMapping("/listByPage") @PostMapping("/listByPage")
public R listByPage(PlayCouponDetailsQueryVo vo) { public R listByPage(@Validated @RequestBody PlayCouponDetailsQueryVo vo) {
IPage<PlayCouponDetailsEntity> list = playCouponDetailsService.selectByPage(vo); IPage<PlayCouponDetailsReturnVo> list = playCouponDetailsService.selectByPage(vo);
return R.ok(list); return R.ok(list);
} }
/** /**
* 获取优惠券详情详细信息 * 获取优惠券详情详细信息
*/ */
@@ -68,7 +69,9 @@ public class PlayCouponDetailsController {
@PostMapping("/updateUseState") @PostMapping("/updateUseState")
public R update(PlayCouponDetailsUpdateUseStateVo vo) { public R update(PlayCouponDetailsUpdateUseStateVo vo) {
for (String couponId : vo.getCouponIds()) { for (String couponId : vo.getCouponIds()) {
PlayCouponDetailsEntity entity = playCouponDetailsService.selectPlayCouponDetailsById(couponId); playCouponDetailsService.selectPlayCouponDetailsById(couponId);
PlayCouponDetailsEntity entity = new PlayCouponDetailsEntity();
entity.setId(couponId);
entity.setUseState(vo.getUseState()); entity.setUseState(vo.getUseState());
playCouponDetailsService.update(entity); playCouponDetailsService.update(entity);
} }
@@ -97,6 +100,12 @@ public class PlayCouponDetailsController {
@Log(title = "优惠券详情", businessType = BusinessType.DELETE) @Log(title = "优惠券详情", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}") @DeleteMapping("/{ids}")
public R remove(@PathVariable String[] ids) { public R remove(@PathVariable String[] ids) {
return R.ok(playCouponDetailsService.deletePlayCouponDetailsByIds(ids)); for (String id : ids) {
PlayCouponDetailsEntity entity = new PlayCouponDetailsEntity();
entity.setId(id);
entity.setUseState("3");
playCouponDetailsService.update(entity);
}
return R.ok();
} }
} }

View File

@@ -2,19 +2,23 @@ package com.starry.admin.modules.shop.controller;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.starry.admin.common.exception.CustomException; import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity; import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity;
import com.starry.admin.modules.shop.module.vo.PlayCouponInfoAddVo; import com.starry.admin.modules.shop.module.vo.*;
import com.starry.admin.modules.shop.module.vo.PlayCouponInfoQueryVo; import com.starry.admin.modules.shop.service.IPlayCouponDetailsService;
import com.starry.admin.modules.shop.module.vo.PlayCouponInfoReturnVo;
import com.starry.admin.modules.shop.service.IPlayCouponInfoService; import com.starry.admin.modules.shop.service.IPlayCouponInfoService;
import com.starry.common.annotation.Log; import com.starry.common.annotation.Log;
import com.starry.common.enums.BusinessType; import com.starry.common.enums.BusinessType;
import com.starry.common.result.R; import com.starry.common.result.R;
import com.starry.common.utils.ConvertUtil; import com.starry.common.utils.ConvertUtil;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/** /**
* 优惠券信息Controller * 优惠券信息Controller
@@ -28,6 +32,12 @@ public class PlayCouponInfoController {
@Resource @Resource
private IPlayCouponInfoService playCouponInfoService; private IPlayCouponInfoService playCouponInfoService;
@Resource
private IPlayCouponDetailsService playCouponDetailsService;
@Resource
private IPlayCustomUserInfoService playCustomUserInfoService;
/** /**
* 查询优惠券信息列表 * 查询优惠券信息列表
*/ */
@@ -38,6 +48,35 @@ public class PlayCouponInfoController {
return R.ok(list); return R.ok(list);
} }
/**
* 修改优惠券上下架状态
*
* @param vo 优惠券上下架对象
*/
@PostMapping("/updateOnLineState")
public R updateOnLineState(@Validated @RequestBody PlayCouponInfoOnLineStateUpdateVo vo) {
playCouponInfoService.selectPlayCouponInfoById(vo.getId());
PlayCouponInfoEntity entity = new PlayCouponInfoEntity();
entity.setId(vo.getId());
entity.setCouponOnLineState(vo.getCouponOnLineState());
playCouponInfoService.update(entity);
return R.ok();
}
/**
* 发放优惠券
*
* @param vo 优惠券发放对象
*/
@PostMapping("/sendCoupon")
public R sendCoupon(@Validated @RequestBody PlayCouponInfoSendVo vo) {
PlayCustomUserInfoEntity customUserInfo = playCustomUserInfoService.selectById(vo.getCustomId());
playCouponDetailsService.create(customUserInfo.getId(), customUserInfo.getNickname(), customUserInfo.getLevelId(), vo.getId(), "2", "1");
return R.ok();
}
/** /**
* 获取优惠券信息详细信息 * 获取优惠券信息详细信息
*/ */
@@ -53,14 +92,14 @@ public class PlayCouponInfoController {
// @PreAuthorize("@customSs.hasPermission('shop:coupon:create')") // @PreAuthorize("@customSs.hasPermission('shop:coupon:create')")
@Log(title = "优惠券信息", businessType = BusinessType.INSERT) @Log(title = "优惠券信息", businessType = BusinessType.INSERT)
@PostMapping("/create") @PostMapping("/create")
public R create(@RequestBody PlayCouponInfoAddVo vo) { public R create(@Validated @RequestBody PlayCouponInfoAddVo vo) {
PlayCouponInfoEntity entity = ConvertUtil.entityToVo(vo, PlayCouponInfoEntity.class); PlayCouponInfoEntity entity = ConvertUtil.entityToVo(vo, PlayCouponInfoEntity.class);
if ("1".equals(vo.getValidityPeriodType())) { if ("1".equals(vo.getValidityPeriodType())) {
if (vo.getProductiveTime() == null || vo.getProductiveTime().size() != 2) { if (vo.getProductiveTime() == null || vo.getProductiveTime().size() != 2) {
throw new CustomException("用券时间输入错误"); throw new CustomException("用券时间输入错误");
} }
LocalDateTime startTime = LocalDateTime.parse(vo.getProductiveTime().get(0)); LocalDateTime startTime = LocalDateTime.parse(vo.getProductiveTime().get(0), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime endTime = LocalDateTime.parse(vo.getProductiveTime().get(1)); LocalDateTime endTime = LocalDateTime.parse(vo.getProductiveTime().get(1), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
if (endTime.isBefore(startTime)) { if (endTime.isBefore(startTime)) {
throw new CustomException("用券时间输入错误,结束时间大于开始时间"); throw new CustomException("用券时间输入错误,结束时间大于开始时间");
} }
@@ -70,8 +109,19 @@ public class PlayCouponInfoController {
if ("2".equals(vo.getValidityPeriodType()) && vo.getEffectiveDay() <= 0) { if ("2".equals(vo.getValidityPeriodType()) && vo.getEffectiveDay() <= 0) {
throw new CustomException("用券时间输入错误有效天数不能为0"); throw new CustomException("用券时间输入错误有效天数不能为0");
} }
String discountContent = "";
if (BigDecimal.ZERO.compareTo(vo.getUseMinAmount()) == 0) {
discountContent = "无门槛";
} else {
discountContent = "" + vo.getUseMinAmount() + "船票";
}
if ("0".equals(vo.getDiscountType())) {
discountContent += ("" + vo.getDiscountAmount() + "船票");
} else {
discountContent += ("" + vo.getDiscountAmount() + "");
}
entity.setDiscountContent(discountContent);
entity.setCouponOnLineState("1");
boolean success = playCouponInfoService.create(entity); boolean success = playCouponInfoService.create(entity);
if (success) { if (success) {
return R.ok(); return R.ok();

View File

@@ -7,7 +7,6 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
/** /**
@@ -48,7 +47,7 @@ public class PlayCouponDetailsEntity extends BaseEntity<PlayCouponDetailsEntity>
private String customLevelId; private String customLevelId;
/** /**
* 优惠券名称 * 优惠券ID
*/ */
private String couponId; private String couponId;
@@ -63,32 +62,6 @@ public class PlayCouponDetailsEntity extends BaseEntity<PlayCouponDetailsEntity>
private String useState; private String useState;
/** /**
* 优惠类型0:满减;1:折扣)
*/
private String discountType;
/**
* 优惠内容,文字展示
*/
private String discountContent;
/**
* 折扣值
*/
private BigDecimal discountAmount;
/**
* 有效期类型0:永久有效;1:临时有效)
*/
private String validityPeriodType;
/**
* 到期时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime expirationTime;
/** /**
* 获得时间 * 获得时间

View File

@@ -24,7 +24,6 @@ import java.util.List;
@TableName(value = "play_coupon_info", autoResultMap = true) @TableName(value = "play_coupon_info", autoResultMap = true)
public class PlayCouponInfoEntity extends BaseEntity<PlayCouponInfoEntity> { public class PlayCouponInfoEntity extends BaseEntity<PlayCouponInfoEntity> {
/** /**
* UUID * UUID
*/ */
@@ -33,7 +32,7 @@ public class PlayCouponInfoEntity extends BaseEntity<PlayCouponInfoEntity> {
/** /**
* 优惠券名称 * 优惠券名称
**/ **/
private String couponName; private String couponName ="测试券";
/** /**
* 租户ID * 租户ID
*/ */
@@ -64,7 +63,7 @@ public class PlayCouponInfoEntity extends BaseEntity<PlayCouponInfoEntity> {
private Integer effectiveDay; private Integer effectiveDay;
/** /**
* 使用优惠券最消费金额 * 使用优惠券最消费金额
**/ **/
private BigDecimal useMinAmount; private BigDecimal useMinAmount;
@@ -125,16 +124,30 @@ public class PlayCouponInfoEntity extends BaseEntity<PlayCouponInfoEntity> {
private String claimConditionType; private String claimConditionType;
/** /**
* 顾客等级 * 顾客等级选择状态(0:未选择,1:选择)
*/
private String customLevelCheckType;
/**
* 店员等级
*/ */
@TableField(typeHandler = StringTypeHandler.class) @TableField(typeHandler = StringTypeHandler.class)
private List<String> customLevel; private List<String> customLevel;
/**
* 用户关注公众号选择状态(0:未选择,1:选择)
*/
private String customFollowStatusCheckType;
/** /**
* 顾客关注公众号状态(0:未关注,1:已关注) * 顾客关注公众号状态(0:未关注,1:已关注)
*/ */
private String customFollowStatus; private String customFollowStatus;
/**
* 顾客性别选择状态(0:未选择,1:选择)
*/
private String customSexCheckType;
/** /**
* 顾客性别0:未知;1:男,2:女) * 顾客性别0:未知;1:男,2:女)
*/ */
@@ -144,7 +157,12 @@ public class PlayCouponInfoEntity extends BaseEntity<PlayCouponInfoEntity> {
/** /**
* 仅限新用户领取0:不是;1:是)(没有下过单的用户,下单后再退单也不算) * 仅限新用户领取0:不是;1:是)(没有下过单的用户,下单后再退单也不算)
*/ */
private String isNewUser; private String newUser;
/**
* 优惠券上架状态0;下架;1:上架)
*/
private String couponOnLineState;
} }

View File

@@ -49,6 +49,6 @@ public class PlayCouponDetailsQueryVo extends BasePageEntity {
/** /**
* 用户等级 * 用户等级
*/ */
private List<String> customLevelId; private String customLevelId;
} }

View File

@@ -0,0 +1,205 @@
package com.starry.admin.modules.shop.module.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.starry.admin.common.conf.StringTypeHandler;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 优惠券详细信息返回列表
*
* @author admin
* @since 2024/7/8 下午11:29
**/
@Data
public class PlayCouponDetailsReturnVo {
/**
* UUID
*/
private String id;
/**
* 顾客ID
*/
private String customId;
/**
* 顾客昵称
*/
private String customNickname;
/**
* 顾客等级ID
*/
private String customLevelId;
/**
* 优惠券ID
*/
private String couponId;
/**
* 获得渠道1:自主领取;2:后台发放;3:退款返还;4:分享领取;5:抽奖获得)
*/
private String obtainingChannels;
/**
* 优惠券使用状态(1:未使用;2:已使用;3:已回收)
*/
private String useState;
/**
* 生效时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime productiveTime;
/**
* 到期时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime expirationTime;
/**
* 获得时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime obtainingTime;
/**
* 使用时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime useTime;
/**
* 优惠券名称
**/
private String couponName;
/**
* 有效期类型0:永久有效;1:固定时间内有效;2:领取后几天内有效)
*/
private String validityPeriodType;
/**
* 生效时长,validityPeriodType=2时有效
**/
private Integer effectiveDay;
/**
* 使用优惠券最低消费金额
**/
private BigDecimal useMinAmount;
/**
* 优惠类型0:满减;1:折扣)
*/
private String discountType;
/**
* 优惠内容,文字展示
*/
private String discountContent;
/**
* 折扣值
*/
private BigDecimal discountAmount;
/**
* 优惠金额是否由店铺承担0:不是;1:是)
*/
private String attributionDiscounts;
/**
* 下单类型0指定单1随机单。2打赏单
*/
@TableField(typeHandler = StringTypeHandler.class)
private List<String> placeType;
/**
* 店员范围0:所有店员)
*/
private String clerkType;
/**
* 优惠券总数
*/
private Integer couponQuantity;
/**
* 已发放数量
*/
private Integer issuedQuantity;
/**
* 剩余数量
*/
private Integer remainingQuantity;
/**
* 店员获得最大数量
*/
private Integer clerkObtainedMaxQuantity;
/**
* 领取条件类型0:所有人可领取,1:指定条件领取)
*/
private String claimConditionType;
/**
* 顾客等级选择状态(0:未选择,1:选择)
*/
private String customLevelCheckType;
/**
* 店员等级
*/
@TableField(typeHandler = StringTypeHandler.class)
private List<String> customLevel;
/**
* 用户关注公众号选择状态(0:未选择,1:选择)
*/
private String customFollowStatusCheckType;
/**
* 顾客关注公众号状态(0:未关注,1:已关注)
*/
private String customFollowStatus;
/**
* 顾客性别选择状态(0:未选择,1:选择)
*/
private String customSexCheckType;
/**
* 顾客性别0:未知;1:男,2:女)
*/
@TableField(typeHandler = StringTypeHandler.class)
private List<String> customSex;
/**
* 仅限新用户领取0:不是;1:是)(没有下过单的用户,下单后再退单也不算)
*/
private String newUser;
/**
* 优惠券上架状态0;下架;1:上架)
*/
private String couponOnLineState;
}

View File

@@ -1,11 +1,10 @@
package com.starry.admin.modules.shop.module.vo; package com.starry.admin.modules.shop.module.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.starry.admin.common.conf.StringTypeHandler;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@@ -62,7 +61,7 @@ public class PlayCouponInfoAddVo {
/** /**
* 折扣值 * 折扣值
*/ */
@NotNull(message = "优惠类型不能为空") @NotNull(message = "优惠金额不能为空")
private BigDecimal discountAmount; private BigDecimal discountAmount;
/** /**
@@ -76,8 +75,8 @@ public class PlayCouponInfoAddVo {
* 下单类型0指定单1随机单。2打赏单 * 下单类型0指定单1随机单。2打赏单
*/ */
@NotNull(message = "订单类型不能为空") @NotNull(message = "订单类型不能为空")
@Pattern(regexp = "[01]", message = "单类型能为0或1") @Size(min = 1, message = "单类型能为")
private String placeType; private List<String> placeType;
/** /**
* 店员范围0:所有店员) * 店员范围0:所有店员)
@@ -86,6 +85,12 @@ public class PlayCouponInfoAddVo {
@Pattern(regexp = "[0]", message = "店员范围只能为0") @Pattern(regexp = "[0]", message = "店员范围只能为0")
private String clerkType; private String clerkType;
/**
* 优惠券数量限制(0:不限制,1:限制)
*/
@NotNull(message = "优惠券总数不能为空")
@Pattern(regexp = "[01]", message = "优惠券数量限制只能为0或1")
private String couponQuantityType;
/** /**
* 优惠券总数(-1表示不限制数量 * 优惠券总数(-1表示不限制数量
*/ */
@@ -102,6 +107,13 @@ public class PlayCouponInfoAddVo {
*/ */
private Integer remainingQuantity; private Integer remainingQuantity;
/**
* 店员获得最大数量是否限制
*/
@NotNull(message = "店员获得最大数量是否限制不能为空")
@Pattern(regexp = "[01]", message = "店员获得最大数量是否限制只能为0或1")
private String clerkObtainedMaxQuantityType;
/** /**
* 店员获得最大数量 * 店员获得最大数量
*/ */
@@ -115,24 +127,45 @@ public class PlayCouponInfoAddVo {
@Pattern(regexp = "[0|1]", message = "店员范围只能为0或者1") @Pattern(regexp = "[0|1]", message = "店员范围只能为0或者1")
private String claimConditionType; private String claimConditionType;
/** /**
* 顾客等级 * 顾客等级选择状态(0:未选择,1:选择)
*/
private String customLevelCheckType;
/**
* 店员等级
*/ */
@TableField(typeHandler = StringTypeHandler.class)
private List<String> customLevel; private List<String> customLevel;
/**
* 用户关注公众号选择状态(0:未选择,1:选择)
*/
private String customFollowStatusCheckType;
/** /**
* 顾客关注公众号状态(0:未关注,1:已关注) * 顾客关注公众号状态(0:未关注,1:已关注)
*/ */
private String customFollowStatus; private String customFollowStatus;
/**
* 顾客性别关注状态(0:未选择,1:选择)
*/
private String customSexCheckType;
/** /**
* 顾客性别0:未知;1:男,2:女) * 顾客性别0:未知;1:男,2:女)
*/ */
private String customSex; private List<String> customSex;
/**
* 仅限新用户领取选择状态(0:未选择,1:已选择)
*/
private String isNewUserCheckType;
/** /**
* 仅限新用户领取0:不是;1:是)(没有下过单的用户,下单后再退单也不算) * 仅限新用户领取0:不是;1:是)(没有下过单的用户,下单后再退单也不算)
*/ */
private String isNewUser; private String newUser;
} }

View File

@@ -0,0 +1,32 @@
package com.starry.admin.modules.shop.module.vo;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
/**
* 优惠券信息上架信息查询
*
* @author admin
* @since 2024/7/4 15:26
**/
@Data
public class PlayCouponInfoOnLineStateUpdateVo {
/**
* 优惠券ID
*/
@NotNull(message = "优惠券ID不能为空")
private String id;
/**
* 上下架状态不能为空
*/
@NotNull(message = "上下架状态不能为空不能为空")
@Pattern(regexp = "[0|1]", message = "上下架状态不能必须为0或1")
private String couponOnLineState;
}

View File

@@ -116,16 +116,30 @@ public class PlayCouponInfoReturnVo {
private String claimConditionType; private String claimConditionType;
/** /**
* 顾客等级 * 顾客等级选择状态(0:未选择,1:选择)
*/
private String customLevelCheckType;
/**
* 店员等级
*/ */
@TableField(typeHandler = StringTypeHandler.class) @TableField(typeHandler = StringTypeHandler.class)
private List<String> customLevel; private List<String> customLevel;
/**
* 用户关注公众号选择状态(0:未选择,1:选择)
*/
private String customFollowStatusCheckType;
/** /**
* 顾客关注公众号状态(0:未关注,1:已关注) * 顾客关注公众号状态(0:未关注,1:已关注)
*/ */
private String customFollowStatus; private String customFollowStatus;
/**
* 顾客性别选择状态(0:未选择,1:选择)
*/
private String customSexCheckType;
/** /**
* 顾客性别0:未知;1:男,2:女) * 顾客性别0:未知;1:男,2:女)
*/ */
@@ -135,6 +149,12 @@ public class PlayCouponInfoReturnVo {
/** /**
* 仅限新用户领取0:不是;1:是)(没有下过单的用户,下单后再退单也不算) * 仅限新用户领取0:不是;1:是)(没有下过单的用户,下单后再退单也不算)
*/ */
private String isNewUser; private String newUser;
/**
* 优惠券上架状态0;下架;1:上架)
*/
private String couponOnLineState;
} }

View File

@@ -0,0 +1,39 @@
package com.starry.admin.modules.shop.module.vo;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/**
* 优惠券信息上架信息查询
*
* @author admin
* @since 2024/7/4 15:26
**/
@Data
public class PlayCouponInfoSendVo {
/**
* 优惠券ID
*/
@NotNull(message = "优惠券ID不能为空")
private String id;
/**
* 用户ID
*/
@NotNull(message = "用户ID不能为空")
private String customId;
/**
* 优惠券数量不能为空
*/
@Max(value = 1,message = "优惠券数量必须小于1")
@Min(value = 1,message = "优惠券数量必须大于1")
private Integer sendNumber;
}

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity; import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity;
import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsQueryVo; import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsQueryVo;
import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsReturnVo;
import java.util.List; import java.util.List;
@@ -20,7 +21,7 @@ public interface IPlayCouponDetailsService extends IService<PlayCouponDetailsEnt
* @param id 优惠券详情主键 * @param id 优惠券详情主键
* @return 优惠券详情 * @return 优惠券详情
*/ */
PlayCouponDetailsEntity selectPlayCouponDetailsById(String id); PlayCouponDetailsReturnVo selectPlayCouponDetailsById(String id);
/** /**
* 查询优惠券详情列表 * 查询优惠券详情列表
@@ -28,7 +29,7 @@ public interface IPlayCouponDetailsService extends IService<PlayCouponDetailsEnt
* @param vo 优惠券详情 * @param vo 优惠券详情
* @return 优惠券详情集合 * @return 优惠券详情集合
*/ */
IPage<PlayCouponDetailsEntity> selectByPage(PlayCouponDetailsQueryVo vo); IPage<PlayCouponDetailsReturnVo> selectByPage(PlayCouponDetailsQueryVo vo);
/** /**
* 查询优惠券详情列表 * 查询优惠券详情列表
@@ -42,13 +43,27 @@ public interface IPlayCouponDetailsService extends IService<PlayCouponDetailsEnt
/** /**
* 根据顾客ID查询当前顾客优惠券列表 * 根据顾客ID查询当前顾客优惠券列表
* *
* @param customId 顾客ID * @param customId 顾客ID
* @param canBeUsed 是否可以被使用
* @return List<com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity> * @return List<com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity>
* @author 杭州世平信息科技有限公司-xuhq * @author admin
* @since 2024/7/5 11:37 * @since 2024/7/5 11:37
**/ **/
List<PlayCouponDetailsEntity> selectByCustomId(String customId, boolean canBeUsed); List<PlayCouponDetailsEntity> selectByCustomId(String customId);
/**
* 新建优惠券使用详情
*
* @param customId 用户ID
* @param customNickName 用户昵称
* @param customLevel 用户等级
* @param couponId 优惠券ID
* @param obtainingChannels 获得渠道1:自主领取;2:后台发放;3:退款返还;4:分享领取;5:抽奖获得)
* @param useState 优惠券使用状态(1:未使用;2:已使用;3:已回收)
* @author admin
* @since 2024/7/8 16:21
**/
void create(String customId, String customNickName, String customLevel, String couponId, String obtainingChannels, String useState);
/** /**
* 新增优惠券详情 * 新增优惠券详情

View File

@@ -2,10 +2,14 @@ package com.starry.admin.modules.shop.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity; import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity;
import com.starry.admin.modules.shop.module.vo.PlayCouponInfoQueryVo; import com.starry.admin.modules.shop.module.vo.PlayCouponInfoQueryVo;
import com.starry.admin.modules.shop.module.vo.PlayCouponInfoReturnVo; import com.starry.admin.modules.shop.module.vo.PlayCouponInfoReturnVo;
import java.math.BigDecimal;
import java.util.List;
/** /**
* 优惠券信息Service接口 * 优惠券信息Service接口
* *
@@ -13,6 +17,31 @@ import com.starry.admin.modules.shop.module.vo.PlayCouponInfoReturnVo;
* @since 2024-07-04 * @since 2024-07-04
*/ */
public interface IPlayCouponInfoService extends IService<PlayCouponInfoEntity> { public interface IPlayCouponInfoService extends IService<PlayCouponInfoEntity> {
/**
* 获取优惠券不可用的原因
*
* @param couponInfo 优惠券信息
* @param placeType 下单类型
* @param commodityId 商品ID
* @param commodityQuantity 商品数量
* @param price 商品单价
* @return 不可用原因
*/
String getCouponReasonForUnavailableUse(PlayCouponInfoEntity couponInfo, String placeType, String commodityId, Integer commodityQuantity, BigDecimal price);
/**
* 获取优惠券不可领取的原因
*
* @param entity 优惠券实体
* @param customUserInfo 顾客实体
* @return String
* @author admin
* @since 2024/7/8 14:44
**/
String getReasonForNotObtainingCoupons(PlayCouponInfoEntity entity, PlayCustomUserInfoEntity customUserInfo);
/** /**
* 查询优惠券信息 * 查询优惠券信息
* *
@@ -30,6 +59,14 @@ public interface IPlayCouponInfoService extends IService<PlayCouponInfoEntity> {
*/ */
IPage<PlayCouponInfoReturnVo> selectByPage(PlayCouponInfoQueryVo vo); IPage<PlayCouponInfoReturnVo> selectByPage(PlayCouponInfoQueryVo vo);
/**
* 查询优惠券信息列表
*
* @return 优惠券信息集合
*/
List<PlayCouponInfoEntity> queryAll();
/** /**
* 查询优惠券信息列表 * 查询优惠券信息列表
* *

View File

@@ -8,12 +8,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.starry.admin.modules.shop.mapper.PlayCouponDetailsMapper; import com.starry.admin.modules.shop.mapper.PlayCouponDetailsMapper;
import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity; import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity;
import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity;
import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsQueryVo; import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsQueryVo;
import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsReturnVo;
import com.starry.admin.modules.shop.service.IPlayCouponDetailsService; import com.starry.admin.modules.shop.service.IPlayCouponDetailsService;
import com.starry.common.utils.IdUtils; import com.starry.common.utils.IdUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -35,14 +38,21 @@ public class PlayCouponDetailsServiceImpl extends ServiceImpl<PlayCouponDetailsM
* @return 优惠券详情 * @return 优惠券详情
*/ */
@Override @Override
public PlayCouponDetailsEntity selectPlayCouponDetailsById(String id) { public PlayCouponDetailsReturnVo selectPlayCouponDetailsById(String id) {
return this.baseMapper.selectById(id); MPJLambdaWrapper<PlayCouponDetailsEntity> lambdaWrapper = new MPJLambdaWrapper<>();
lambdaWrapper.selectAll(PlayCouponDetailsEntity.class);
lambdaWrapper.leftJoin(PlayCouponInfoEntity.class, PlayCouponInfoEntity::getId, PlayCouponDetailsEntity::getCouponId);
lambdaWrapper.eq(PlayCouponDetailsEntity::getId, id);
return this.baseMapper.selectJoinOne(PlayCouponDetailsReturnVo.class, lambdaWrapper);
} }
@Override @Override
public IPage<PlayCouponDetailsEntity> selectByPage(PlayCouponDetailsQueryVo vo) { public IPage<PlayCouponDetailsReturnVo> selectByPage(PlayCouponDetailsQueryVo vo) {
MPJLambdaWrapper<PlayCouponDetailsEntity> lambdaWrapper = new MPJLambdaWrapper<>(); MPJLambdaWrapper<PlayCouponDetailsEntity> lambdaWrapper = new MPJLambdaWrapper<>();
lambdaWrapper.selectAll(PlayCouponDetailsEntity.class);
lambdaWrapper.selectAll(PlayCouponInfoEntity.class);
lambdaWrapper.leftJoin(PlayCouponInfoEntity.class, PlayCouponInfoEntity::getId, PlayCouponDetailsEntity::getCouponId);
if (StrUtil.isNotBlank(vo.getCouponId())) { if (StrUtil.isNotBlank(vo.getCouponId())) {
lambdaWrapper.eq(PlayCouponDetailsEntity::getCouponId, vo.getCouponId()); lambdaWrapper.eq(PlayCouponDetailsEntity::getCouponId, vo.getCouponId());
} }
@@ -61,11 +71,9 @@ public class PlayCouponDetailsServiceImpl extends ServiceImpl<PlayCouponDetailsM
if (vo.getUseTime() != null && vo.getUseTime().size() == 2) { if (vo.getUseTime() != null && vo.getUseTime().size() == 2) {
lambdaWrapper.between(PlayCouponDetailsEntity::getUseTime, vo.getUseTime().get(0), vo.getUseTime().get(1)); lambdaWrapper.between(PlayCouponDetailsEntity::getUseTime, vo.getUseTime().get(0), vo.getUseTime().get(1));
} }
if (!vo.getCustomLevelId().isEmpty()) {
lambdaWrapper.in(PlayCouponDetailsEntity::getCustomLevelId, vo.getCustomLevelId());
}
return this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayCouponDetailsEntity.class, lambdaWrapper);
return this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayCouponDetailsReturnVo.class, lambdaWrapper);
} }
/** /**
@@ -80,6 +88,21 @@ public class PlayCouponDetailsServiceImpl extends ServiceImpl<PlayCouponDetailsM
return this.baseMapper.selectPage(page, new LambdaQueryWrapper<PlayCouponDetailsEntity>()); return this.baseMapper.selectPage(page, new LambdaQueryWrapper<PlayCouponDetailsEntity>());
} }
@Override
public void create(String customId, String customNickName, String customLevel, String couponId, String obtainingChannels, String useState) {
PlayCouponDetailsEntity couponDetails = new PlayCouponDetailsEntity();
couponDetails.setId(IdUtils.getUuid());
couponDetails.setCustomId(customId);
couponDetails.setCustomNickname(customNickName);
couponDetails.setCustomLevelId(customLevel);
couponDetails.setCouponId(couponId);
couponDetails.setObtainingChannels(obtainingChannels);
couponDetails.setObtainingTime(LocalDateTime.now());
couponDetails.setUseState(useState);
this.create(couponDetails);
}
/** /**
* 新增优惠券详情 * 新增优惠券详情
* *
@@ -95,9 +118,10 @@ public class PlayCouponDetailsServiceImpl extends ServiceImpl<PlayCouponDetailsM
} }
@Override @Override
public List<PlayCouponDetailsEntity> selectByCustomId(String customId, boolean canBeUsed) { public List<PlayCouponDetailsEntity> selectByCustomId(String customId) {
MPJLambdaWrapper<PlayCouponDetailsEntity> lambdaWrapper = new MPJLambdaWrapper<>(); MPJLambdaWrapper<PlayCouponDetailsEntity> lambdaWrapper = new MPJLambdaWrapper<>();
lambdaWrapper.eq(PlayCouponDetailsEntity::getCustomId, customId); lambdaWrapper.eq(PlayCouponDetailsEntity::getCustomId, customId);
return this.baseMapper.selectList(lambdaWrapper);
} }
/** /**

View File

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.shop.mapper.PlayCouponInfoMapper; import com.starry.admin.modules.shop.mapper.PlayCouponInfoMapper;
import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity; import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity;
import com.starry.admin.modules.shop.module.vo.PlayCouponInfoQueryVo; import com.starry.admin.modules.shop.module.vo.PlayCouponInfoQueryVo;
@@ -15,7 +17,9 @@ import com.starry.common.utils.IdUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
/** /**
* 优惠券信息Service业务层处理 * 优惠券信息Service业务层处理
@@ -28,6 +32,101 @@ public class PlayCouponInfoServiceImpl extends ServiceImpl<PlayCouponInfoMapper,
@Resource @Resource
private PlayCouponInfoMapper playCouponInfoMapper; private PlayCouponInfoMapper playCouponInfoMapper;
/**
* 获取优惠券不可用的原因
*
* @param couponInfo 优惠券信息
* @param placeType 下单类型
* @param commodityId 商品ID
* @param commodityQuantity 商品数量
* @return 不可用原因
*/
@Override
public String getCouponReasonForUnavailableUse(PlayCouponInfoEntity couponInfo, String placeType, String commodityId, Integer commodityQuantity, BigDecimal price) {
if (StrUtil.isEmpty(commodityId) || commodityQuantity <= 0) {
return "订单满1船票余额时可用";
}
boolean placeTypeSuccess = false;
for (String string : couponInfo.getPlaceType()) {
if (string.equals(placeType)) {
placeTypeSuccess = true;
break;
}
}
if (!placeTypeSuccess) {
return "订单类型不符合";
}
//订单门槛不等0并且订单金额小于订单门槛
if (BigDecimal.ZERO.compareTo(couponInfo.getUseMinAmount()) != 0 && price.multiply(new BigDecimal(commodityQuantity)).compareTo(couponInfo.getUseMinAmount()) <= -1) {
return "订单门槛不符合";
}
return "";
}
/**
* 获取优惠券不可领取的原因
*
* @param entity 优惠券实体
* @param customUserInfo 顾客实体
* @return String
* @author admin
* @since 2024/7/8 14:44
**/
@Override
public String getReasonForNotObtainingCoupons(PlayCouponInfoEntity entity, PlayCustomUserInfoEntity customUserInfo) {
// 优惠券是否设置指定条件领取
if ("0".equals(entity.getClaimConditionType())) {
return "";
}
// 顾客等级判断
String msg = reasonForNotObtainingCoupons(entity.getCustomLevelCheckType(), entity.getCustomLevel(), customUserInfo.getLevelId(), "0");
if (StrUtil.isNotEmpty(msg)) {
return msg;
}
// 顾客性别判断
msg = reasonForNotObtainingCoupons(entity.getCustomSexCheckType(), entity.getCustomSex(), customUserInfo.getSex().toString(), "`1");
if (StrUtil.isNotEmpty(msg)) {
return msg;
}
// 顾客关注公众号状态判断
// 顾客是否是新用户判断
return "";
}
/**
* 获取优惠券不可领取的原因
*
* @param checkStatus 是否配置了该项指标0:未配置,1:已配置)
* @param attributes 配置的属性列表
* @param attribute 用户属性值
* @param type 条件类型(0:用户等级,1:用户性别)
* @return String
* @author admin
* @since 2024/7/8 15:22
**/
public String reasonForNotObtainingCoupons(String checkStatus, List<String> attributes, String attribute, String type) {
if ("0".equals(checkStatus)) {
return "";
}
for (String s : attributes) {
if (s.equals(attribute)) {
return "";
}
}
if ("0".equals(type)) {
return "用户等级不匹配";
}
if ("1".equals(type)) {
return "用户性别不匹配";
}
return "";
}
/** /**
* 查询优惠券信息 * 查询优惠券信息
* *
@@ -36,7 +135,11 @@ public class PlayCouponInfoServiceImpl extends ServiceImpl<PlayCouponInfoMapper,
*/ */
@Override @Override
public PlayCouponInfoEntity selectPlayCouponInfoById(String id) { public PlayCouponInfoEntity selectPlayCouponInfoById(String id) {
return this.baseMapper.selectById(id); PlayCouponInfoEntity entity = this.baseMapper.selectById(id);
if (entity == null) {
throw new CustomException("优惠券不存在");
}
return entity;
} }
@@ -44,9 +147,18 @@ public class PlayCouponInfoServiceImpl extends ServiceImpl<PlayCouponInfoMapper,
public IPage<PlayCouponInfoReturnVo> selectByPage(PlayCouponInfoQueryVo vo) { public IPage<PlayCouponInfoReturnVo> selectByPage(PlayCouponInfoQueryVo vo) {
MPJLambdaWrapper<PlayCouponInfoEntity> lambdaQueryWrapper = new MPJLambdaWrapper<>(); MPJLambdaWrapper<PlayCouponInfoEntity> lambdaQueryWrapper = new MPJLambdaWrapper<>();
lambdaQueryWrapper.selectAll(PlayCouponInfoEntity.class); lambdaQueryWrapper.selectAll(PlayCouponInfoEntity.class);
lambdaQueryWrapper.orderByDesc(PlayCouponInfoEntity::getCreatedTime);
return this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayCouponInfoReturnVo.class, lambdaQueryWrapper); return this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayCouponInfoReturnVo.class, lambdaQueryWrapper);
} }
@Override
public List<PlayCouponInfoEntity> queryAll() {
MPJLambdaWrapper<PlayCouponInfoEntity> lambdaQueryWrapper = new MPJLambdaWrapper<>();
lambdaQueryWrapper.selectAll(PlayCouponInfoEntity.class);
lambdaQueryWrapper.orderByDesc(PlayCouponInfoEntity::getCreatedTime);
return this.baseMapper.selectJoinList(PlayCouponInfoEntity.class, lambdaQueryWrapper);
}
/** /**
* 查询优惠券信息列表 * 查询优惠券信息列表
* *

View File

@@ -1,14 +1,30 @@
package com.starry.admin.modules.weichat.controller; package com.starry.admin.modules.weichat.controller;
import cn.hutool.core.util.StrUtil;
import com.starry.admin.common.aspect.CustomUserLogin; import com.starry.admin.common.aspect.CustomUserLogin;
import com.starry.admin.common.conf.ThreadLocalRequestDetail;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.play.module.vo.PlayCommodityInfoVo;
import com.starry.admin.modules.play.service.IPlayCommodityInfoService;
import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity;
import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity;
import com.starry.admin.modules.shop.service.IPlayCouponDetailsService; import com.starry.admin.modules.shop.service.IPlayCouponDetailsService;
import com.starry.admin.modules.shop.service.IPlayCouponInfoService;
import com.starry.admin.modules.weichat.entity.WxCouponOrderQueryVo;
import com.starry.admin.modules.weichat.entity.WxCouponOrderReturnVo;
import com.starry.admin.modules.weichat.entity.WxCouponReceiveReturnVo;
import com.starry.common.result.R; import com.starry.common.result.R;
import com.starry.common.utils.ConvertUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* @author admin * @author admin
@@ -21,23 +37,90 @@ public class WxCouponController {
@Resource @Resource
IPlayCouponDetailsService couponDetailsService; IPlayCouponDetailsService couponDetailsService;
@Resource
IPlayCouponInfoService couponInfoService;
@Resource
private IPlayCommodityInfoService playCommodityInfoService;
@CustomUserLogin
@GetMapping("/custom/obtainCoupon")
public R queryAll(@RequestParam("id") String id) {
PlayCustomUserInfoEntity customUserInfo = ThreadLocalRequestDetail.getCustomUserInfo();
if (StrUtil.isEmpty(id)) {
throw new CustomException("请求参数异常,优惠券ID不能为");
}
PlayCouponInfoEntity entity = couponInfoService.selectPlayCouponInfoById(id);
String msg = couponInfoService.getReasonForNotObtainingCoupons(entity, customUserInfo);
boolean success = StrUtil.isBlank(msg);
// 优惠券领取验证通过,发放优惠券
if (success) {
couponDetailsService.create(customUserInfo.getId(), customUserInfo.getNickname(), customUserInfo.getLevelId(), entity.getId(), "1", "1");
}
Map<String, Object> result = new HashMap<>();
result.put("success", success);
result.put("msg", msg);
return R.ok(result);
}
/**
* 查询所有优惠券,以及本人是否可领取
*
* @return com.starry.common.result.R
* @author admin
* @since 2024/7/8 13:53
**/
@CustomUserLogin
@PostMapping("/custom/queryAll")
public R queryAll() {
List<PlayCouponDetailsEntity> obtainedCoupons = couponDetailsService.selectByCustomId(ThreadLocalRequestDetail.getCustomUserInfo().getId());
List<PlayCouponInfoEntity> couponInfoEntities = couponInfoService.queryAll();
List<WxCouponReceiveReturnVo> returnVos = new ArrayList<>(couponInfoEntities.size());
for (PlayCouponInfoEntity couponInfoEntity : couponInfoEntities) {
if ("0".equals(couponInfoEntity.getCouponOnLineState())) {
continue;
}
WxCouponReceiveReturnVo vo = ConvertUtil.entityToVo(couponInfoEntity, WxCouponReceiveReturnVo.class);
for (PlayCouponDetailsEntity obtainedCoupon : obtainedCoupons) {
if (obtainedCoupon.getCouponId().equals(couponInfoEntity.getId())) {
vo.setObtained("1");
}
}
returnVos.add(vo);
}
return R.ok(returnVos);
}
/** /**
* 顾客查询本人优惠券列表 * 顾客查询本人优惠券列表
*/ */
@CustomUserLogin @CustomUserLogin
@GetMapping("/custom/queryAll") @PostMapping("/custom/queryByOrder")
public R queryAll() { public R queryByOrder(@Validated @RequestBody WxCouponOrderQueryVo vo) {
// couponDetailsService.selectByPage() List<PlayCouponDetailsEntity> list = couponDetailsService.selectByCustomId(ThreadLocalRequestDetail.getCustomUserInfo().getId());
// List<PlayCustomLevelInfoEntity> list = levelInfoService.selectAll(); PlayCommodityInfoVo commodityInfo = playCommodityInfoService.queryCommodityInfo(vo.getCommodityId());
// List<PlayCustomLevelInfoReturnVo> result = new ArrayList<>(); // 优惠券列表
// for (PlayCustomLevelInfoEntity entity : list) { List<WxCouponOrderReturnVo> couponReturnVos = new ArrayList<>();
// PlayCustomLevelInfoReturnVo vo = new PlayCustomLevelInfoReturnVo(); for (PlayCouponDetailsEntity couponDetails : list) {
// BeanUtils.copyProperties(entity, vo); PlayCouponInfoEntity couponInfo = couponInfoService.selectPlayCouponInfoById(couponDetails.getCouponId());
// result.add(vo); WxCouponOrderReturnVo wxCouponReturnVo = ConvertUtil.entityToVo(couponDetails, WxCouponOrderReturnVo.class);
// } String couponReasonForUnavailableUse = couponInfoService.getCouponReasonForUnavailableUse(couponInfo, vo.getPlaceType(), vo.getCommodityId(), vo.getCommodityQuantity(), commodityInfo.getCommodityPrice());
return R.ok(""); if (StrUtil.isEmpty(couponReasonForUnavailableUse)) {
wxCouponReturnVo.setAvailable("1");
} else {
wxCouponReturnVo.setAvailable("0");
wxCouponReturnVo.setReasonForUnavailableUse(couponReasonForUnavailableUse);
}
couponReturnVos.add(wxCouponReturnVo);
}
return R.ok(couponReturnVos);
} }
} }

View File

@@ -1,6 +1,7 @@
package com.starry.admin.modules.weichat.controller; package com.starry.admin.modules.weichat.controller;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.starry.admin.common.aspect.CustomUserLogin; import com.starry.admin.common.aspect.CustomUserLogin;
@@ -30,6 +31,8 @@ import com.starry.admin.modules.order.service.IPlayOrderInfoService;
import com.starry.admin.modules.order.service.IPlayOrderRandomInfoService; import com.starry.admin.modules.order.service.IPlayOrderRandomInfoService;
import com.starry.admin.modules.play.module.vo.PlayCommodityInfoVo; import com.starry.admin.modules.play.module.vo.PlayCommodityInfoVo;
import com.starry.admin.modules.play.service.IPlayCommodityInfoService; import com.starry.admin.modules.play.service.IPlayCommodityInfoService;
import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity;
import com.starry.admin.modules.shop.service.IPlayCouponInfoService;
import com.starry.admin.modules.weichat.entity.*; import com.starry.admin.modules.weichat.entity.*;
import com.starry.admin.modules.weichat.entity.clerk.PlayClerkUserInfoResultVo; import com.starry.admin.modules.weichat.entity.clerk.PlayClerkUserInfoResultVo;
import com.starry.admin.modules.weichat.entity.costom.PlayCustomHideLevelStateEditVo; import com.starry.admin.modules.weichat.entity.costom.PlayCustomHideLevelStateEditVo;
@@ -53,6 +56,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
/** /**
@@ -105,6 +109,9 @@ public class WxCustomController {
@Resource @Resource
private IPlayClerkGiftInfoService playClerkGiftInfoService; private IPlayClerkGiftInfoService playClerkGiftInfoService;
@Resource
private IPlayCouponInfoService playCouponInfoService;
/** /**
* 根据店员ID查询店员详细信息 * 根据店员ID查询店员详细信息
@@ -194,7 +201,7 @@ public class WxCustomController {
} }
String orderId = IdUtils.getUuid(); String orderId = IdUtils.getUuid();
// 记录订单信息 // 记录订单信息
playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "3", "2", "2", "0", "1", "", "0", BigDecimal.ZERO, "", "", "0", new BigDecimal(vo.getMoney()), new BigDecimal(vo.getMoney()), BigDecimal.ZERO, userId, vo.getClerkId(), vo.getWeiChatCode(), vo.getRemark()); playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "3", "2", "2", "0", "1", "", "0", BigDecimal.ZERO, "", "", "0", new BigDecimal(vo.getMoney()), new BigDecimal(vo.getMoney()), BigDecimal.ZERO, userId, vo.getClerkId(), vo.getWeiChatCode(), new ArrayList<>(),vo.getRemark());
// //
// playOrderInfoService.createRewardOrder(orderId, new BigDecimal(vo.getMoney()), new BigDecimal(vo.getMoney()), userId, clerkUserInfo.getId(), vo.getRemark(), vo.getWeiChatCode()); // playOrderInfoService.createRewardOrder(orderId, new BigDecimal(vo.getMoney()), new BigDecimal(vo.getMoney()), userId, clerkUserInfo.getId(), vo.getRemark(), vo.getWeiChatCode());
// 顾客减少余额 // 顾客减少余额
@@ -221,7 +228,7 @@ public class WxCustomController {
} }
String orderId = IdUtils.getUuid(); String orderId = IdUtils.getUuid();
// 记录订单信息 // 记录订单信息
playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "3", "2", "2", "1", "1", giftInfo.getId(), "0", giftInfo.getPrice(), "", giftInfo.getName(), String.valueOf(vo.getGiftQuantity()), money, money, BigDecimal.ZERO, userId, vo.getClerkId(), vo.getWeiChatCode(), vo.getRemark()); playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "3", "2", "2", "1", "1", giftInfo.getId(), "0", giftInfo.getPrice(), "", giftInfo.getName(), String.valueOf(vo.getGiftQuantity()), money, money, BigDecimal.ZERO, userId, vo.getClerkId(), vo.getWeiChatCode(), new ArrayList<>(), vo.getRemark());
// playOrderInfoService.createGiftOrder(orderId, vo.getGiftId(), giftInfo.getPrice(), String.valueOf(vo.getGiftQuantity()), money, money, userId, clerkUserInfo.getId(), vo.getRemark(), vo.getWeiChatCode()); // playOrderInfoService.createGiftOrder(orderId, vo.getGiftId(), giftInfo.getPrice(), String.valueOf(vo.getGiftQuantity()), money, money, userId, clerkUserInfo.getId(), vo.getRemark(), vo.getWeiChatCode());
// 顾客减少余额 // 顾客减少余额
@@ -271,6 +278,16 @@ public class WxCustomController {
public R commodityToOrdder(@Validated @RequestBody PlayOrderInfoCommodityAdd vo) { public R commodityToOrdder(@Validated @RequestBody PlayOrderInfoCommodityAdd vo) {
String customId = ThreadLocalRequestDetail.getCustomUserInfo().getId(); String customId = ThreadLocalRequestDetail.getCustomUserInfo().getId();
PlayCommodityInfoVo commodityInfo = playCommodityInfoService.queryCommodityInfo(vo.getCommodityId()); PlayCommodityInfoVo commodityInfo = playCommodityInfoService.queryCommodityInfo(vo.getCommodityId());
for (String couponId : vo.getCouponIds()) {
PlayCouponInfoEntity couponInfo = playCouponInfoService.selectPlayCouponInfoById(couponId);
String couponReasonForUnavailableUse = playCouponInfoService.getCouponReasonForUnavailableUse(couponInfo, "0", vo.getCommodityId(), vo.getCommodityQuantity(), commodityInfo.getCommodityPrice());
if (StrUtil.isNotBlank(couponReasonForUnavailableUse)) {
throw new CustomException("优惠券不可用");
}
}
PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(customId); PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(customId);
PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClerkId()); PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClerkId());
BigDecimal money = commodityInfo.getCommodityPrice().multiply(new BigDecimal(vo.getCommodityQuantity())); BigDecimal money = commodityInfo.getCommodityPrice().multiply(new BigDecimal(vo.getCommodityQuantity()));
@@ -281,12 +298,9 @@ public class WxCustomController {
String orderId = IdUtils.getUuid(); String orderId = IdUtils.getUuid();
// 记录订单信息 // 记录订单信息
playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "0", "2", "0", "", "1", commodityInfo.getCommodityId(), "1", commodityInfo.getCommodityPrice(), commodityInfo.getServiceDuration(), commodityInfo.getCommodityName(), String.valueOf(vo.getCommodityQuantity()), money, money, BigDecimal.ZERO, customId, clerkUserInfo.getId(), vo.getWeiChatCode(), vo.getRemark()); playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "0", "2", "0", "", "1", commodityInfo.getCommodityId(), "1", commodityInfo.getCommodityPrice(), commodityInfo.getServiceDuration(), commodityInfo.getCommodityName(), String.valueOf(vo.getCommodityQuantity()), money, money, BigDecimal.ZERO, customId, clerkUserInfo.getId(), vo.getWeiChatCode(), vo.getCouponIds(), vo.getRemark());
// playOrderInfoService.createOrdinaryOrder(orderId, commodityInfo.getCommodityId(), commodityInfo.getCommodityPrice(), String.valueOf(vo.getCommodityQuantity()), commodityInfo.getCommodityName(), commodityInfo.getServiceDuration(), money, money, customId, clerkUserInfo.getId(), vo.getRemark(), vo.getWeiChatCode());
// 顾客减少余额 // 顾客减少余额
customUserInfoService.updateAccountBalanceById(customUserInfo.getId(), customUserInfo.getAccountBalance(), customUserInfo.getAccountBalance().subtract(money), "1", "下单-指定单", money, BigDecimal.ZERO, orderId); customUserInfoService.updateAccountBalanceById(customUserInfo.getId(), customUserInfo.getAccountBalance(), customUserInfo.getAccountBalance().subtract(money), "1", "下单-指定单", money, BigDecimal.ZERO, orderId);
// 陪聊增加余额
// clerkUserInfoService.updateAccountBalanceById(clerkUserInfo.getId(), clerkUserInfo.getAccountBalance(), clerkUserInfo.getAccountBalance().add(money), "2", "下单-指定单", money, orderId);
return R.ok("成功"); return R.ok("成功");
} }
@@ -311,7 +325,6 @@ public class WxCustomController {
String orderId = IdUtils.getUuid(); String orderId = IdUtils.getUuid();
PlayOrderRandomInfoEntity orderRandomInfo = ConvertUtil.entityToVo(vo, PlayOrderRandomInfoEntity.class); PlayOrderRandomInfoEntity orderRandomInfo = ConvertUtil.entityToVo(vo, PlayOrderRandomInfoEntity.class);
;
orderRandomInfo.setCommodityId(commodityInfo.getCommodityId()); orderRandomInfo.setCommodityId(commodityInfo.getCommodityId());
orderRandomInfo.setCommodityName(commodityInfo.getCommodityName()); orderRandomInfo.setCommodityName(commodityInfo.getCommodityName());
orderRandomInfo.setCommodityPrice(commodityInfo.getCommodityPrice()); orderRandomInfo.setCommodityPrice(commodityInfo.getCommodityPrice());
@@ -320,7 +333,7 @@ public class WxCustomController {
orderRandomInfo.setId(orderId); orderRandomInfo.setId(orderId);
playOrderRandomInfoService.create(orderRandomInfo); playOrderRandomInfoService.create(orderRandomInfo);
// 记录订单信息 // 记录订单信息
playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "0", "2", "1", "", "1", commodityInfo.getCommodityId(), "1", commodityInfo.getCommodityPrice(), commodityInfo.getServiceDuration(), commodityInfo.getCommodityName(), String.valueOf(vo.getCommodityQuantity()), money, money, BigDecimal.ZERO, customId, "", vo.getWeiChatCode(), vo.getRemark()); playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "0", "2", "1", "", "1", commodityInfo.getCommodityId(), "1", commodityInfo.getCommodityPrice(), commodityInfo.getServiceDuration(), commodityInfo.getCommodityName(), String.valueOf(vo.getCommodityQuantity()), money, money, BigDecimal.ZERO, customId, "", vo.getWeiChatCode(), vo.getCouponIds(), vo.getRemark());
// playOrderInfoService.createRandomOrder(orderId, customUserInfo.getId(), commodityInfo.getCommodityPrice(), String.valueOf(vo.getCommodityQuantity()), commodityInfo.getServiceDuration(), commodityInfo.getCommodityName(), money, money, customId, vo.getRemark(), vo.getWeiChatCode()); // playOrderInfoService.createRandomOrder(orderId, customUserInfo.getId(), commodityInfo.getCommodityPrice(), String.valueOf(vo.getCommodityQuantity()), commodityInfo.getServiceDuration(), commodityInfo.getCommodityName(), money, money, customId, vo.getRemark(), vo.getWeiChatCode());
// 顾客减少余额 // 顾客减少余额

View File

@@ -0,0 +1,50 @@
package com.starry.admin.modules.weichat.controller;
import com.starry.admin.common.aspect.ClerkUserLogin;
import com.starry.admin.modules.personnel.module.entity.PlayPersonnelGroupInfoEntity;
import com.starry.admin.modules.personnel.service.IPlayPersonnelGroupInfoService;
import com.starry.admin.modules.weichat.entity.PlayGroupWagesQueryVo;
import com.starry.admin.modules.weichat.entity.PlayGroupWagesReturnVo;
import com.starry.common.result.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* 微信查询组长工资
*
* @author admin
* @since 2024/7/6 下午3:46
**/
@Slf4j
@RestController
@RequestMapping("/wx/group")
public class WxPersonnelGroupInfoController {
@Resource
private IPlayPersonnelGroupInfoService playClerkGroupInfoService;
/**
* 查询组长公工资
*/
@ClerkUserLogin
@PostMapping("/wages/listAll")
public R listGroupWagesAll(@Validated @RequestBody PlayGroupWagesQueryVo vo) {
List<PlayPersonnelGroupInfoEntity> list = playClerkGroupInfoService.selectAll();
List<PlayGroupWagesReturnVo> data = new ArrayList<>();
for (PlayPersonnelGroupInfoEntity entity : list) {
PlayGroupWagesReturnVo bean = new PlayGroupWagesReturnVo();
bean.setGroupName(entity.getGroupName());
data.add(bean);
}
return R.ok(data);
}
}

View File

@@ -0,0 +1,20 @@
package com.starry.admin.modules.weichat.entity;
import lombok.Data;
import java.util.List;
/**
* 组长工资查询对象
*
* @author admin
* @since 2024/7/6 下午3:56
**/
@Data
public class PlayGroupWagesQueryVo {
/**
* 统计时间
*/
private List<String> statisticalTime;
}

View File

@@ -0,0 +1,64 @@
package com.starry.admin.modules.weichat.entity;
import lombok.Data;
import java.math.BigDecimal;
/**
* 组长工资查询对象
*
* @author admin
* @since 2024/7/6 下午3:56
**/
@Data
public class PlayGroupWagesReturnVo {
/**
* 组名称
*/
private String groupName;
/**
* 订单金额
*/
private BigDecimal orderMoney = BigDecimal.ZERO;
/**
* 订单最终金额(支付金额)
*/
private BigDecimal finalAmount = BigDecimal.ZERO;
/**
* 续单比例
*/
private final double orderContinueProportion = 0.0;
/**
* 续单金额
*/
private final BigDecimal orderTotalAmount = BigDecimal.ZERO;
/**
* 续费率
*/
private final BigDecimal orderContinueRechargeProportion = BigDecimal.ZERO;
/**
* 退单率
*/
private final BigDecimal orderChargebackProportion = BigDecimal.ZERO;
/**
* 续客率
*/
private final BigDecimal continuousCustomProportion = BigDecimal.ZERO;
/**
* 订单平均价格
*/
private final BigDecimal averageUnitPrice = BigDecimal.ZERO;
/**
* 组长工资
*/
private final BigDecimal commission = BigDecimal.ZERO;
}

View File

@@ -0,0 +1,24 @@
package com.starry.admin.modules.weichat.entity;
import lombok.Data;
/**
* 顾客优惠券下单查询对象
*
* @author admin
* @since 2024/7/6 下午4:16
**/
@Data
public class WxCouponOrderQueryVo {
private String commodityId;
/**
* 下单类型(-1:其他类型;0:指定单;1:随机单;2:打赏单)
*/
private String placeType;
private int commodityQuantity;
}

View File

@@ -0,0 +1,83 @@
package com.starry.admin.modules.weichat.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 顾客优惠券下单查询返回对象
*
* @author admin
* @since 2024/7/6 下午4:16
**/
@Data
public class WxCouponOrderReturnVo {
/**
* 优惠券ID
*/
private String id;
/**
* 优惠券名称
**/
private String couponName ="测试券";
/**
* 有效期类型0:永久有效;1:固定时间内有效;2:领取后几天内有效)
*/
private String validityPeriodType;
/**
* 生效时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime productiveTime;
/**
* 到期时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime expirationTime;
/**
* 生效时长,validityPeriodType=2时有效
**/
private Integer effectiveDay;
/**
* 使用优惠券最低消费金额
**/
private BigDecimal useMinAmount;
/**
* 优惠类型0:满减;1:折扣)
*/
private String discountType;
/**
* 折扣值
*/
private BigDecimal discountAmount;
private String discountContent;
/**
* 优惠是否可使用0:不可使用,1:可使用)
*/
private String available;
/**
* 优惠券不可用的原因
*/
private String reasonForUnavailableUse;
}

View File

@@ -0,0 +1,81 @@
package com.starry.admin.modules.weichat.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 顾客优惠券领取查询返回对象
*
* @author admin
* @since 2024/7/6 下午4:16
**/
@Data
public class WxCouponReceiveReturnVo {
/**
* 优惠券ID
*/
private String id;
/**
* 优惠券名称
**/
private String couponName;
/**
* 有效期类型0:永久有效;1:固定时间内有效;2:领取后几天内有效)
*/
private String validityPeriodType;
/**
* 生效时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime productiveTime;
/**
* 到期时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime expirationTime;
/**
* 生效时长,validityPeriodType=2时有效
**/
private Integer effectiveDay;
/**
* 使用优惠券最低消费金额
**/
private BigDecimal useMinAmount;
/**
* 优惠类型0:满减;1:折扣)
*/
private String discountType;
/**
* 折扣值
*/
private BigDecimal discountAmount;
/**
* 优惠内容(文字展示)
**/
private String discountContent;
/**
* 优惠是否已领取0:未领取,1:已领取)
*/
private String obtained = "0";
}