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

Commit dd624d7d authored by wangyifan's avatar wangyifan

slime:拼团活动优化

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