记得上下班打卡 | git大法好,push需谨慎

Commit dd624d7d authored by wangyifan's avatar wangyifan

slime:拼团活动优化

parent 05acfaad
package com.liquidnet.service.kylin.dto.param; package com.liquidnet.service.kylin.dto.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -8,72 +9,73 @@ import javax.validation.constraints.NotEmpty; ...@@ -8,72 +9,73 @@ import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
/**
* 创建拼团活动请求参数(不含 activityId)。
*/
@Data @Data
public class KylinGroupBuyActivityParam implements Serializable { @ApiModel(value = "KylinGroupBuyActivityCreateParam", description = "创建拼团活动")
public class KylinGroupBuyActivityCreateParam implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "活动ID,编辑时必传") @ApiModelProperty(value = "活动名称", required = true)
private String activityId;
@ApiModelProperty(value = "活动名称")
@NotNull(message = "活动名称不能为空") @NotNull(message = "活动名称不能为空")
private String name; private String name;
@ApiModelProperty(value = "关联演出ID") @ApiModelProperty(value = "关联演出ID", required = true)
@NotNull(message = "关联演出ID不能为空") @NotNull(message = "关联演出ID不能为空")
private String performanceId; private String performanceId;
@ApiModelProperty(value = "成团人数") @ApiModelProperty(value = "成团人数", required = true)
@NotNull(message = "成团人数不能为空") @NotNull(message = "成团人数不能为空")
private Integer minGroupSize; private Integer minGroupSize;
@ApiModelProperty(value = "每人限购") @ApiModelProperty(value = "每人限购", required = true)
@NotNull(message = "每人限购不能为空") @NotNull(message = "每人限购不能为空")
private Integer maxBuyPerUser; private Integer maxBuyPerUser;
@ApiModelProperty(value = "活动开始时间") @ApiModelProperty(value = "活动开始时间,格式 yyyy-MM-dd HH:mm:ss", required = true, example = "2026-07-17 00:00:00")
@NotNull(message = "活动开始时间不能为空") @NotNull(message = "活动开始时间不能为空")
private LocalDateTime startTime; private String startTime;
@ApiModelProperty(value = "活动结束时间") @ApiModelProperty(value = "活动结束时间,格式 yyyy-MM-dd HH:mm:ss", required = true, example = "2026-12-31 23:59:59")
@NotNull(message = "活动结束时间不能为空") @NotNull(message = "活动结束时间不能为空")
private LocalDateTime endTime; private String endTime;
@ApiModelProperty(value = "启动方式 1立即 2手动 3定时") @ApiModelProperty(value = "启动方式 1立即 2手动 3定时", required = true)
@NotNull(message = "启动方式不能为空") @NotNull(message = "启动方式不能为空")
private Integer launchType; private Integer launchType;
@ApiModelProperty(value = "定时启动时间") @ApiModelProperty(value = "定时启动时间,格式 yyyy-MM-dd HH:mm:ss(launchType=3 时必填)", example = "2026-07-18 10:00:00")
private LocalDateTime scheduledTime; private String scheduledTime;
@ApiModelProperty(value = "活动说明") @ApiModelProperty(value = "活动说明")
private String description; private String description;
@Valid @Valid
@NotEmpty(message = "票种优惠不能为空") @NotEmpty(message = "票种优惠不能为空")
@ApiModelProperty(value = "票种优惠配置") @ApiModelProperty(value = "票种优惠配置", required = true)
private List<DiscountParam> discounts; private List<DiscountParam> discounts;
@Data @Data
@ApiModel(value = "KylinGroupBuyActivityDiscountParam", description = "拼团票种优惠")
public static class DiscountParam implements Serializable { public static class DiscountParam implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "场次ID") @ApiModelProperty(value = "场次ID", required = true)
@NotNull(message = "场次ID不能为空") @NotNull(message = "场次ID不能为空")
private String timeId; private String timeId;
@ApiModelProperty(value = "票种ID") @ApiModelProperty(value = "票种ID", required = true)
@NotNull(message = "票种ID不能为空") @NotNull(message = "票种ID不能为空")
private String ticketId; private String ticketId;
@ApiModelProperty(value = "优惠类型 1固定价格 2折扣 3满减") @ApiModelProperty(value = "优惠类型 1固定价格 2折扣 3满减", required = true)
@NotNull(message = "优惠类型不能为空") @NotNull(message = "优惠类型不能为空")
private Integer discountType; private Integer discountType;
@ApiModelProperty(value = "优惠值") @ApiModelProperty(value = "优惠值", required = true)
@NotNull(message = "优惠值不能为空") @NotNull(message = "优惠值不能为空")
private BigDecimal discountValue; private BigDecimal discountValue;
} }
......
package com.liquidnet.service.kylin.dto.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
* 编辑拼团活动请求参数(必传 activityId)。
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "KylinGroupBuyActivityUpdateParam", description = "编辑拼团活动")
public class KylinGroupBuyActivityUpdateParam extends KylinGroupBuyActivityCreateParam {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "活动ID", required = true)
@NotNull(message = "活动ID不能为空")
private String activityId;
}
...@@ -2,7 +2,8 @@ package com.liquidnet.service.kylin.service.partner; ...@@ -2,7 +2,8 @@ package com.liquidnet.service.kylin.service.partner;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityParam; import com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityCreateParam;
import com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityUpdateParam;
import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo; import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo;
import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyOrderVo; import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyOrderVo;
...@@ -17,9 +18,9 @@ public interface IKylinGroupBuyPartnerService { ...@@ -17,9 +18,9 @@ public interface IKylinGroupBuyPartnerService {
ResponseDto<KylinGroupBuyActivityVo> detail(String activityId); ResponseDto<KylinGroupBuyActivityVo> detail(String activityId);
ResponseDto<KylinGroupBuyActivityVo> create(KylinGroupBuyActivityParam param); ResponseDto<KylinGroupBuyActivityVo> create(KylinGroupBuyActivityCreateParam param);
ResponseDto<KylinGroupBuyActivityVo> update(KylinGroupBuyActivityParam param); ResponseDto<KylinGroupBuyActivityVo> update(KylinGroupBuyActivityUpdateParam param);
ResponseDto<Boolean> delete(String activityId); ResponseDto<Boolean> delete(String activityId);
......
...@@ -2,7 +2,8 @@ package com.liquidnet.service.slime.controller; ...@@ -2,7 +2,8 @@ package com.liquidnet.service.slime.controller;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityParam; import com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityCreateParam;
import com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityUpdateParam;
import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo; import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo;
import com.liquidnet.service.kylin.service.partner.IKylinGroupBuyPartnerService; import com.liquidnet.service.kylin.service.partner.IKylinGroupBuyPartnerService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -58,13 +59,13 @@ public class KylinGroupBuyPartnerController { ...@@ -58,13 +59,13 @@ public class KylinGroupBuyPartnerController {
@PostMapping("") @PostMapping("")
@ApiOperation(value = "创建拼团活动", position = 3) @ApiOperation(value = "创建拼团活动", position = 3)
public ResponseDto<KylinGroupBuyActivityVo> create(@RequestBody @Valid KylinGroupBuyActivityParam param) { public ResponseDto<KylinGroupBuyActivityVo> create(@RequestBody @Valid KylinGroupBuyActivityCreateParam param) {
return groupBuyPartnerService.create(param); return groupBuyPartnerService.create(param);
} }
@PutMapping("") @PutMapping("")
@ApiOperation(value = "编辑拼团活动", position = 4) @ApiOperation(value = "编辑拼团活动", position = 4)
public ResponseDto<KylinGroupBuyActivityVo> update(@RequestBody @Valid KylinGroupBuyActivityParam param) { public ResponseDto<KylinGroupBuyActivityVo> update(@RequestBody @Valid KylinGroupBuyActivityUpdateParam param) {
return groupBuyPartnerService.update(param); return groupBuyPartnerService.update(param);
} }
...@@ -80,14 +81,4 @@ public class KylinGroupBuyPartnerController { ...@@ -80,14 +81,4 @@ public class KylinGroupBuyPartnerController {
@RequestParam("targetStatus") @NotNull(message = "目标状态不能为空") Integer targetStatus) { @RequestParam("targetStatus") @NotNull(message = "目标状态不能为空") Integer targetStatus) {
return groupBuyPartnerService.toggle(activityId, targetStatus); return groupBuyPartnerService.toggle(activityId, targetStatus);
} }
//
// @GetMapping("/orders")
// @ApiOperation(value = "拼团订单列表", position = 7)
// public ResponseDto<List<KylinGroupBuyOrderVo>> orders(
// @RequestParam("activityId") @NotNull(message = "活动ID不能为空") String activityId,
// @RequestParam(value = "status", required = false) Integer status,
// @RequestParam(value = "page", required = false, defaultValue = "1") Integer page,
// @RequestParam(value = "size", required = false, defaultValue = "20") Integer size) {
// return groupBuyPartnerService.orders(activityId, status, page, size);
// }
} }
...@@ -11,7 +11,8 @@ import com.liquidnet.service.base.constant.MQConst; ...@@ -11,7 +11,8 @@ import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.base.constant.RedisKeyExpireConst; import com.liquidnet.service.base.constant.RedisKeyExpireConst;
import com.liquidnet.service.kylin.constant.GroupBuyStatusConst; import com.liquidnet.service.kylin.constant.GroupBuyStatusConst;
import com.liquidnet.service.kylin.constant.KylinRedisConst; import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityParam; import com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityCreateParam;
import com.liquidnet.service.kylin.dto.param.KylinGroupBuyActivityUpdateParam;
import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo; import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyActivityVo;
import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyDiscountVo; import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyDiscountVo;
import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyOrderVo; import com.liquidnet.service.kylin.dto.vo.groupbuy.KylinGroupBuyOrderVo;
...@@ -109,7 +110,7 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer ...@@ -109,7 +110,7 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer
} }
@Override @Override
public ResponseDto<KylinGroupBuyActivityVo> create(KylinGroupBuyActivityParam param) { public ResponseDto<KylinGroupBuyActivityVo> create(KylinGroupBuyActivityCreateParam param) {
ResponseDto<Boolean> validate = validateParam(param); ResponseDto<Boolean> validate = validateParam(param);
if (!validate.isSuccess()) { if (!validate.isSuccess()) {
return ResponseDto.failure(validate.getMessage()); return ResponseDto.failure(validate.getMessage());
...@@ -123,11 +124,11 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer ...@@ -123,11 +124,11 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer
mongoTemplate.insert(vo, KylinGroupBuyActivityVo.class.getSimpleName()); mongoTemplate.insert(vo, KylinGroupBuyActivityVo.class.getSimpleName());
sendReplaceActivitySql(vo); sendReplaceActivitySql(vo);
cacheActivity(vo); cacheActivity(vo);
return ResponseDto.success(vo); return ResponseDto.success();
} }
@Override @Override
public ResponseDto<KylinGroupBuyActivityVo> update(KylinGroupBuyActivityParam param) { public ResponseDto<KylinGroupBuyActivityVo> update(KylinGroupBuyActivityUpdateParam param) {
KylinGroupBuyActivityVo old = findActivity(param.getActivityId()); KylinGroupBuyActivityVo old = findActivity(param.getActivityId());
if (old == null) { if (old == null) {
return ResponseDto.failure("拼团活动不存在"); return ResponseDto.failure("拼团活动不存在");
...@@ -145,7 +146,7 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer ...@@ -145,7 +146,7 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer
vo.setDiscounts(buildDiscounts(param, old.getActivityId(), now)); vo.setDiscounts(buildDiscounts(param, old.getActivityId(), now));
replaceActivity(vo); replaceActivity(vo);
sendReplaceActivitySql(vo); sendReplaceActivitySql(vo);
return ResponseDto.success(vo); return ResponseDto.success();
} }
@Override @Override
...@@ -206,13 +207,28 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer ...@@ -206,13 +207,28 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer
KylinGroupBuyOrderVo.class, KylinGroupBuyOrderVo.class.getSimpleName())); KylinGroupBuyOrderVo.class, KylinGroupBuyOrderVo.class.getSimpleName()));
} }
private ResponseDto<Boolean> validateParam(KylinGroupBuyActivityParam param) { private ResponseDto<Boolean> validateParam(KylinGroupBuyActivityCreateParam param) {
if (param.getEndTime().isBefore(param.getStartTime()) || param.getEndTime().isEqual(param.getStartTime())) { LocalDateTime startTime;
LocalDateTime endTime;
try {
startTime = DateUtil.Formatter.yyyyMMddHHmmss.parse(param.getStartTime());
endTime = DateUtil.Formatter.yyyyMMddHHmmss.parse(param.getEndTime());
} catch (Exception e) {
return ResponseDto.failure("开始/结束时间格式错误,需为 yyyy-MM-dd HH:mm:ss");
}
if (endTime.isBefore(startTime) || endTime.isEqual(startTime)) {
return ResponseDto.failure("活动结束时间必须晚于开始时间"); return ResponseDto.failure("活动结束时间必须晚于开始时间");
} }
if (GroupBuyStatusConst.LaunchType.SCHEDULED.equals(param.getLaunchType()) && param.getScheduledTime() == null) { if (GroupBuyStatusConst.LaunchType.SCHEDULED.equals(param.getLaunchType())) {
if (param.getScheduledTime() == null || param.getScheduledTime().trim().isEmpty()) {
return ResponseDto.failure("定时启动必须填写启动时间"); return ResponseDto.failure("定时启动必须填写启动时间");
} }
try {
DateUtil.Formatter.yyyyMMddHHmmss.parse(param.getScheduledTime());
} catch (Exception e) {
return ResponseDto.failure("定时启动时间格式错误,需为 yyyy-MM-dd HH:mm:ss");
}
}
KylinPerformanceVo performanceVo = redisSlimeUtils.getPerformanceVo(param.getPerformanceId()); KylinPerformanceVo performanceVo = redisSlimeUtils.getPerformanceVo(param.getPerformanceId());
if (performanceVo == null || CollectionUtils.isEmpty(performanceVo.getTicketTimeList())) { if (performanceVo == null || CollectionUtils.isEmpty(performanceVo.getTicketTimeList())) {
return ResponseDto.failure("演出不存在"); return ResponseDto.failure("演出不存在");
...@@ -224,7 +240,7 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer ...@@ -224,7 +240,7 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer
return ResponseDto.failure("限购数量不能小于1"); return ResponseDto.failure("限购数量不能小于1");
} }
if (!CollectionUtils.isEmpty(param.getDiscounts())) { if (!CollectionUtils.isEmpty(param.getDiscounts())) {
for (KylinGroupBuyActivityParam.DiscountParam discount : param.getDiscounts()) { for (KylinGroupBuyActivityCreateParam.DiscountParam discount : param.getDiscounts()) {
if (!ticketExists(performanceVo, discount.getTimeId(), discount.getTicketId())) { if (!ticketExists(performanceVo, discount.getTimeId(), discount.getTicketId())) {
return ResponseDto.failure("优惠配置的场次或票档不存在"); return ResponseDto.failure("优惠配置的场次或票档不存在");
} }
...@@ -250,17 +266,17 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer ...@@ -250,17 +266,17 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer
return false; return false;
} }
private KylinGroupBuyActivityVo buildActivity(KylinGroupBuyActivityParam param, String now) { private KylinGroupBuyActivityVo buildActivity(KylinGroupBuyActivityCreateParam param, String now) {
KylinGroupBuyActivityVo vo = new KylinGroupBuyActivityVo(); KylinGroupBuyActivityVo vo = new KylinGroupBuyActivityVo();
vo.setName(param.getName()); vo.setName(param.getName());
vo.setPerformanceId(param.getPerformanceId()); vo.setPerformanceId(param.getPerformanceId());
vo.setMinGroupSize(param.getMinGroupSize()); vo.setMinGroupSize(param.getMinGroupSize());
vo.setMaxBuyPerUser(param.getMaxBuyPerUser()); vo.setMaxBuyPerUser(param.getMaxBuyPerUser());
vo.setStartTime(DateUtil.Formatter.yyyyMMddHHmmss.format(param.getStartTime())); vo.setStartTime(param.getStartTime());
vo.setEndTime(DateUtil.Formatter.yyyyMMddHHmmss.format(param.getEndTime())); vo.setEndTime(param.getEndTime());
vo.setLaunchType(param.getLaunchType()); vo.setLaunchType(param.getLaunchType());
if (param.getScheduledTime() != null) { if (param.getScheduledTime() != null && !param.getScheduledTime().trim().isEmpty()) {
vo.setScheduledTime(DateUtil.Formatter.yyyyMMddHHmmss.format(param.getScheduledTime())); vo.setScheduledTime(param.getScheduledTime());
} }
vo.setDescription(param.getDescription()); vo.setDescription(param.getDescription());
if (GroupBuyStatusConst.LaunchType.IMMEDIATE.equals(param.getLaunchType())) { if (GroupBuyStatusConst.LaunchType.IMMEDIATE.equals(param.getLaunchType())) {
...@@ -272,9 +288,9 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer ...@@ -272,9 +288,9 @@ public class KylinGroupBuyPartnerServiceImpl implements IKylinGroupBuyPartnerSer
return vo; return vo;
} }
private List<KylinGroupBuyDiscountVo> buildDiscounts(KylinGroupBuyActivityParam param, String activityId, String now) { private List<KylinGroupBuyDiscountVo> buildDiscounts(KylinGroupBuyActivityCreateParam param, String activityId, String now) {
List<KylinGroupBuyDiscountVo> list = new ArrayList<>(); List<KylinGroupBuyDiscountVo> list = new ArrayList<>();
for (KylinGroupBuyActivityParam.DiscountParam discountParam : param.getDiscounts()) { for (KylinGroupBuyActivityCreateParam.DiscountParam discountParam : param.getDiscounts()) {
KylinGroupBuyDiscountVo vo = new KylinGroupBuyDiscountVo(); KylinGroupBuyDiscountVo vo = new KylinGroupBuyDiscountVo();
vo.setDiscountId(IDGenerator.nextSnowId()); vo.setDiscountId(IDGenerator.nextSnowId());
vo.setActivityId(activityId); vo.setActivityId(activityId);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment