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

Commit 95d56a7a authored by 张国柄's avatar 张国柄

init;

parent f75ba734
package com.liquidnet.service.candy.dto.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@ApiModel(value = "CandyMgtCouponBuildParam", description = "新建券入参")
@Data
public class CandyMgtCouponBuildParam {
//private String couponId;
//private Integer state;
@NotBlank(message = "券标题不能为空")
@ApiModelProperty(required = true, value = "券标题", example = "券标题")
private String title;
@NotBlank(message = "券标注不能为空")
@ApiModelProperty(required = true, value = "标注", example = "标注")
private String label;
@NotBlank(message = "券描述不能为空")
@ApiModelProperty(required = true, value = "描述:注意/须知", example = "注意/须知")
private String notice;
//private Integer exclusive;
@NotNull(message = "券类别不能为空")
@ApiModelProperty(required = true, value = "业务类别[0-全场|1-演出|2-商品|3-优先购]", allowableValues = "0,1,2,3,4")
private Integer busiType;
@NotNull(message = "券类型不能为空")
@ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券]", allowableValues = "1,2,3,4")
private Integer couType;
@NotNull(message = "券领取方式不能为空")
@ApiModelProperty(required = true, value = "领取方式[0-用户输入兑换|1-发放至用户]", allowableValues = "0,1")
private Integer bindType;
@ApiModelProperty(required = false, value = "折扣[8折即0.8]", example = "0.8")
private BigDecimal discount;
@ApiModelProperty(required = false, value = "面值", example = "0.01")
private BigDecimal valFace;
@ApiModelProperty(required = false, value = "满减~满", example = "1.00")
private BigDecimal valOver;
@ApiModelProperty(required = false, value = "满减~减", example = "0.01")
private BigDecimal valMinus;
@NotNull(message = "券叠加限制不能为空")
@ApiModelProperty(required = true, value = "叠加限制[0-限制|1-叠加]", allowableValues = "0,1")
private Integer overlay;
//private Integer overlayLevel;
@NotNull(message = "券有效期不能为空")
@ApiModelProperty(required = true, value = "有效期(单位天)", example = "30")
private Integer validity;
@ApiModelProperty(required = false, value = "兑换有效期(单位天)", example = "30")
private Integer redeemValidity;
//private LocalDateTime redeemStart;
//private LocalDateTime redeemStop;
//private LocalDateTime effectAt;
//private LocalDateTime expireAt;
//private String operator;
//private Date createdAt;
//private Date updatedAt;
//private String comment;
//private String mcouponId;
//private String couponId;
//private Integer state;
@NotNull(message = "券发放量不能为空")
@ApiModelProperty(required = true, value = "发放量", example = "1")
private Integer eventAmt;
@NotNull(message = "券发放类型不能为空")
@ApiModelProperty(required = true, value = "发放类型[1-会员|2-手机号|10-全体用户]", allowableValues = "1,2,10")
private Integer eventType;
@ApiModelProperty(required = false, value = "`发放类型`为2-手机号时发放手机号以,分隔", example = "17701223310,17701223310")
private String eventLimit;
@NotNull(message = "券发放时间不能为空")
@ApiModelProperty(required = true, value = "发放时间[yyyy-MM-dd HH:mm:ss](立即-当前时间|预约-点选时间)", example = "2021-08-26 00:00:00")
private String eventAt;
//private String operator;
//private LocalDateTime createdAt;
//private LocalDateTime updatedAt;
//private String comment;
}
package com.liquidnet.service.candy.dto;
import com.liquidnet.service.candy.entity.CandyCouponCode;
import lombok.Data;
import java.io.Serializable;
@Data
public class CandyCouponCodeDto implements Serializable {
public class CandyCouponCodeDto implements Serializable, Cloneable {
private static final long serialVersionUID = -1303435376362293086L;
private String ccode;
private String couponId;
......@@ -16,4 +17,22 @@ public class CandyCouponCodeDto implements Serializable {
// private LocalDateTime createdAt;
// private LocalDateTime updatedAt;
// private String comment;
private static final CandyCouponCodeDto obj = new CandyCouponCodeDto();
public static CandyCouponCodeDto getNew() {
try {
return (CandyCouponCodeDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new CandyCouponCodeDto();
}
}
public CandyCouponCodeDto copy(CandyCouponCode source) {
if (null == source) return this;
this.setCcode(source.getCcode());
this.setCouponId(source.getCouponId());
this.setState(source.getState());
return this;
}
}
package com.liquidnet.service.candy.dto;
import com.liquidnet.service.candy.entity.CandyCoupon;
import com.liquidnet.service.candy.entity.CandyUserCoupon;
import lombok.Data;
import java.io.Serializable;
......@@ -52,4 +54,50 @@ public class CandyUserCouponBasicDto implements Serializable {
/* com.liquidnet.service.candy.entity.CandyCouponRule */
private List<CandyCouponRuleDto> useRules;
private static final CandyUserCouponBasicDto obj = new CandyUserCouponBasicDto();
public static CandyUserCouponBasicDto getNew() {
try {
return (CandyUserCouponBasicDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new CandyUserCouponBasicDto();
}
}
public CandyUserCouponBasicDto copy(CandyUserCoupon userCoupon, CandyCoupon coupon, List<CandyCouponRuleDto> couponRuleDtoList) {
if (null == userCoupon) return this;
this.setCouponId(coupon.getCouponId());
this.setTitle(coupon.getTitle());
this.setLabel(coupon.getLabel());
this.setNotice(coupon.getNotice());
this.setExclusive(coupon.getExclusive());
this.setBusiType(coupon.getBusiType());
this.setCouType(coupon.getCouType());
this.setBindType(coupon.getBindType());
this.setDiscount(coupon.getDiscount());
this.setValFace(coupon.getValFace());
this.setValOver(coupon.getValOver());
this.setValMinus(coupon.getValMinus());
this.setOverlay(coupon.getOverlay());
this.setOverlayLevel(coupon.getOverlayLevel());
this.setValidity(coupon.getValidity());
this.setRedeemValidity(coupon.getRedeemValidity());
this.setRedeemStart(coupon.getRedeemStart());
this.setRedeemStop(coupon.getRedeemStop());
this.setEffectAt(coupon.getEffectAt());
this.setExpireAt(coupon.getExpireAt());
this.setUcouponId(userCoupon.getUcouponId());
this.setUid(userCoupon.getUid());
this.setState(userCoupon.getState());
this.setCcode(userCoupon.getCcode());
this.setBindAt(userCoupon.getBindAt());
this.setUsedAt(userCoupon.getUsedAt());
this.setUsedFor(userCoupon.getUsedFor());
this.setUseRules(couponRuleDtoList);
return this;
}
}
package com.liquidnet.service.candy.dto.admin;
import lombok.Data;
@Data
public class CandyCouponCodeListParam {
/**
* ~candy_coupon.coupon_id
*/
private String couponId;
/**
* 状态[0-未使用|1-已使用|2-失效|3-退回]
*/
private Integer state;
}
......@@ -49,7 +49,7 @@ public class CandyUserCoupon implements Serializable {
/**
* 兑换码
*/
private String redeemCode;
private String ccode;
/**
* 激活时间
......
......@@ -33,25 +33,7 @@
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-adam-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dypnsapi</artifactId>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-kylin-api</artifactId>
......@@ -68,6 +50,22 @@
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-candy-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dypnsapi</artifactId>
</dependency>
</dependencies>
<build>
......
package com.liquidnet.service.platform.controller.candy.task;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.candy.constant.CandyRedisConst;
import com.liquidnet.service.candy.dto.CandyCouponCodeDto;
import com.liquidnet.service.candy.dto.CandyCouponInfoDto;
import com.liquidnet.service.candy.dto.CandyCouponRuleDto;
import com.liquidnet.service.candy.dto.CandyUserCouponBasicDto;
import com.liquidnet.service.candy.entity.*;
import com.liquidnet.service.platform.service.impl.adam.dm.DMRdmService;
import com.liquidnet.service.platform.service.impl.candy.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("candy/task")
public class CandyMgtCouponTaskController {
@Autowired
private PlatformCandyMgtCouponService platformCandyMgtCouponService;
@Autowired
private PlatformCandyCouponService platformCandyCouponService;
@Autowired
private PlatformCandyCouponRuleService platformCandyCouponRuleService;
@Autowired
private PlatformCandyCouponCodeService platformCandyCouponCodeService;
@Autowired
private PlatformCandyUserCouponService platformCandyUserCouponService;
@Autowired
private DMRdmService dmRdmService;
@Autowired
private RedisUtil redisUtil;
@PostMapping("issue/coupons")
public void issueCoupons() {
LambdaQueryWrapper<CandyMgtCoupon> queryWrapper = Wrappers.lambdaQuery(CandyMgtCoupon.class)
.eq(CandyMgtCoupon::getState, 0)
.orderByAsc(CandyMgtCoupon::getEventAt);
List<CandyMgtCoupon> list = platformCandyMgtCouponService.list(queryWrapper);
int taskSize = CollectionUtils.isEmpty(list) ? 0 : list.size();
log.info("issue coupons taskSize:{}", taskSize);
LambdaQueryWrapper<CandyCoupon> couponQueryWrapper = Wrappers.lambdaQuery(CandyCoupon.class).eq(CandyCoupon::getState, 1);
LambdaQueryWrapper<CandyCouponRule> couponRuleQueryWrapper = Wrappers.lambdaQuery(CandyCouponRule.class).eq(CandyCouponRule::getState, 1);
for (int i = 0; i < taskSize; i++) {
LocalDateTime now = LocalDateTime.now();
CandyMgtCoupon mgtCoupon = list.get(i);
CandyCoupon coupon = platformCandyCouponService.getOne(couponQueryWrapper.eq(CandyCoupon::getCouponId, mgtCoupon.getCouponId()));
List<CandyCouponRuleDto> couponRuleDtoList = platformCandyCouponRuleService.listForCouponRuleDto(coupon.getCouponId());
List<CandyCouponCode> initCouponCodeList = new ArrayList<>();
List<CandyUserCoupon> initUserCouponList = new ArrayList<>();
Integer eventAmt = mgtCoupon.getEventAmt();
for (int j = 0; j < eventAmt; j++) {
switch (coupon.getCouType()) {
case 1:
String uid = dmRdmService.getUidByMobile("17701223310");
if (StringUtils.isNotEmpty(uid)) {
CandyUserCoupon userCoupon = new CandyUserCoupon();
userCoupon.setUcouponId(IDGenerator.get32UUID());
userCoupon.setMcouponId(mgtCoupon.getMcouponId());
userCoupon.setUid(uid);
userCoupon.setCouponId(coupon.getCouponId());
userCoupon.setState(1);
userCoupon.setBindAt(now);
initUserCouponList.add(userCoupon);
}
break;
case 2:
break;
case 3:// 兑换券
CandyCouponCode couponCode = new CandyCouponCode();
couponCode.setCcode(RandomStringUtils.randomAlphanumeric(16));
couponCode.setCouponId(coupon.getCouponId());
couponCode.setState(0);
couponCode.setCreatedAt(now);
initCouponCodeList.add(couponCode);
break;
case 4:
break;
default:
log.warn("Invalid operation[mcouponId:{},couType:{}]", mgtCoupon.getMcouponId(), coupon.getCouType());
break;
}
}
if (!initUserCouponList.isEmpty() && platformCandyUserCouponService.saveBatch(initUserCouponList)) {
CandyCouponInfoDto couponInfoDto = new CandyCouponInfoDto();
BeanUtils.copyProperties(coupon, couponInfoDto);
couponInfoDto.setUseRules(couponRuleDtoList);
String key = CandyRedisConst.BASIC_COUPON_INFO.concat(couponInfoDto.getCouponId());
redisUtil.set(key, couponInfoDto);
initUserCouponList.forEach(r -> {
String uckey = CandyRedisConst.BASIC_USER_COUPON.concat(r.getUid());
List<CandyUserCouponBasicDto> vos = (List<CandyUserCouponBasicDto>) redisUtil.get(uckey);
if (CollectionUtils.isEmpty(vos)) {
vos = new ArrayList<>();
}
vos.add(CandyUserCouponBasicDto.getNew().copy(r, coupon, couponRuleDtoList));
redisUtil.set(uckey, vos);
});
}
if (!initCouponCodeList.isEmpty() && platformCandyCouponCodeService.saveBatch(initCouponCodeList)) {
CandyCouponInfoDto couponInfoDto = new CandyCouponInfoDto();
BeanUtils.copyProperties(coupon, couponInfoDto);
couponInfoDto.setUseRules(couponRuleDtoList);
String key = CandyRedisConst.BASIC_COUPON_INFO.concat(couponInfoDto.getCouponId());
redisUtil.set(key, couponInfoDto);
initCouponCodeList.forEach(r -> {
redisUtil.set(CandyRedisConst.BASIC_COUPON_CODE.concat(r.getCcode()), CandyCouponCodeDto.getNew().copy(r));
});
}
mgtCoupon.setState(1);
LambdaUpdateWrapper<CandyMgtCoupon> mgtCouponUpdateWrapper = Wrappers.lambdaUpdate(CandyMgtCoupon.class).eq(CandyMgtCoupon::getMcouponId, mgtCoupon.getMcouponId());
boolean update = platformCandyMgtCouponService.update(mgtCoupon, mgtCouponUpdateWrapper);
log.info("issue coupons mcouponId:{} ~ {}", mgtCoupon.getMcouponId(), update);
}
}
}
package com.liquidnet.service.platform.service.impl.candy;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.candy.entity.CandyCouponCode;
import com.liquidnet.service.candy.mapper.CandyCouponCodeMapper;
import org.springframework.stereotype.Service;
@Service
public class PlatformCandyCouponCodeService extends ServiceImpl<CandyCouponCodeMapper, CandyCouponCode> {
}
package com.liquidnet.service.platform.service.impl.candy;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.candy.dto.CandyCouponRuleDto;
import com.liquidnet.service.candy.entity.CandyCouponRule;
import com.liquidnet.service.candy.mapper.CandyCouponRuleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PlatformCandyCouponRuleService extends ServiceImpl<CandyCouponRuleMapper, CandyCouponRule> {
@Autowired
CandyCouponRuleMapper candyCouponRuleMapper;
public List<CandyCouponRuleDto> listForCouponRuleDto(String couponId) {
return candyCouponRuleMapper.selectForCouponRuleDto(couponId);
}
}
package com.liquidnet.service.platform.service.impl.candy;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.candy.entity.CandyCoupon;
import com.liquidnet.service.candy.mapper.CandyCouponMapper;
import org.springframework.stereotype.Service;
@Service
public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, CandyCoupon> {
}
package com.liquidnet.service.platform.service.impl.candy;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.candy.entity.CandyMgtCoupon;
import com.liquidnet.service.candy.mapper.CandyMgtCouponMapper;
import org.springframework.stereotype.Service;
@Service
public class PlatformCandyMgtCouponService extends ServiceImpl<CandyMgtCouponMapper, CandyMgtCoupon> {
}
package com.liquidnet.service.platform.service.impl.candy;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.candy.entity.CandyUserCoupon;
import com.liquidnet.service.candy.mapper.CandyUserCouponMapper;
import org.springframework.stereotype.Service;
@Service
public class PlatformCandyUserCouponService extends ServiceImpl<CandyUserCouponMapper, CandyUserCoupon> {
}
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