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

Commit 893dbc55 authored by wangyifan's avatar wangyifan

Merge branch 'dev_fudai_20250418' into container

parents e5c25d06 8145d802
...@@ -120,4 +120,12 @@ public class KylinRedisConst { ...@@ -120,4 +120,12 @@ public class KylinRedisConst {
public static final String ORDER_AR_CODE = "kylin:ar:order:";//$key + $orderId public static final String ORDER_AR_CODE = "kylin:ar:order:";//$key + $orderId
/**
* 福袋相关
*/
// 福袋活动
public static final String LUCKY_BAG_ACTIVITY = "kylin:luckybag:activity";
public static final String LUCKY_BAG = "kylin:luckybag";
public static final String LUCKY_BAG_CODE_LOCK = "kylin:luckybag:code:lock:";
} }
...@@ -2,10 +2,13 @@ package com.liquidnet.service.kylin.dto.vo; ...@@ -2,10 +2,13 @@ package com.liquidnet.service.kylin.dto.vo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
@Data @Data
...@@ -20,6 +23,7 @@ public class KylinLuckyBagVo implements Serializable { ...@@ -20,6 +23,7 @@ public class KylinLuckyBagVo implements Serializable {
@Data @Data
@ApiModel(value = "福袋活动VO") @ApiModel(value = "福袋活动VO")
@AllArgsConstructor
public static class LuckyBagActivityVo { public static class LuckyBagActivityVo {
@ApiModelProperty(value = "活动ID") @ApiModelProperty(value = "活动ID")
...@@ -52,6 +56,21 @@ public class KylinLuckyBagVo implements Serializable { ...@@ -52,6 +56,21 @@ public class KylinLuckyBagVo implements Serializable {
private int status; private int status;
@ApiModelProperty(value = "兑换码") @ApiModelProperty(value = "兑换码")
private List<String> rewardCodeList; private Set<String> rewardCodeList;
}
public static KylinLuckyBagVo of(List<LuckyBagVo> luckyBagVoList,
List<LuckyBagActivityVo> luckyBagActivityVoList){
KylinLuckyBagVo kylinLuckyBagVo = new KylinLuckyBagVo();
kylinLuckyBagVo.setLuckyBagVoList(luckyBagVoList);
kylinLuckyBagVo.setLuckyBagActivityVoList(luckyBagActivityVoList);
return kylinLuckyBagVo;
}
public static KylinLuckyBagVo ofEmpty(){
KylinLuckyBagVo kylinLuckyBagVo = new KylinLuckyBagVo();
kylinLuckyBagVo.setLuckyBagVoList(Collections.emptyList());
kylinLuckyBagVo.setLuckyBagActivityVoList(Collections.emptyList());
return kylinLuckyBagVo;
} }
} }
package com.liquidnet.service.kylin.service;
public interface IFeishuBotService {
void sendTextMessage(String text);
}
...@@ -2,8 +2,6 @@ package com.liquidnet.service.kylin.service; ...@@ -2,8 +2,6 @@ package com.liquidnet.service.kylin.service;
import com.liquidnet.service.kylin.dto.vo.KylinLuckyBagVo; import com.liquidnet.service.kylin.dto.vo.KylinLuckyBagVo;
import java.util.List;
public interface IKylinLuckyBagService { public interface IKylinLuckyBagService {
List<KylinLuckyBagVo> getLuckyBagBenefitsByOrderId(String orderId); KylinLuckyBagVo getLuckyBagByOrderId(String orderId);
} }
...@@ -37,4 +37,10 @@ public class RedisKeyExpireConst { ...@@ -37,4 +37,10 @@ public class RedisKeyExpireConst {
// sweet:user:service:openId 过期时间30天 // sweet:user:service:openId 过期时间30天
public static final long SWEET_USER_SERVICE_OPENID_EXPIRE = 30 * 24 * 60 * 60; public static final long SWEET_USER_SERVICE_OPENID_EXPIRE = 30 * 24 * 60 * 60;
// kylin:luckybag:activity 过期时间30天
public static final long KYLIN_LUCKY_BAG_ACTIVITY_EXPIRE = 30 * 24 * 60 * 60;
// kylin:luckybag 过期时间30天
public static final long KYLIN_LUCKY_BAG_EXPIRE = 30 * 24 * 60 * 60;
} }
...@@ -40,44 +40,33 @@ public class KylinLuckyBag implements Serializable, Cloneable{ ...@@ -40,44 +40,33 @@ public class KylinLuckyBag implements Serializable, Cloneable{
/** /**
* 所属品牌ID * 所属品牌ID
*/ */
private String brand_id; private String brandId;
/** /**
* 所属演出ID * 所属演出ID
*/ */
private String performances_id; private String performanceId;
/** /**
* 所属场次ID * 所属场次ID
*/ */
private String ticket_times_id; private String ticketTimesId;
/** /**
* 所属票种ID * 所属票种ID
*/ */
private String tickets_id; private String ticketsId;
/**
* 上线开始时间
*/
private String onlineStartTime;
/** /**
* 上线结束时间 * 状态: 1-可用, 0-不可用
*/ */
private String onlineEndTime; private Integer state;
/** /**
* 福袋发放时间 * 福袋发放时间
*/ */
private String send_time; private String sendTime;
/**
* 状态: 1-可用, 0-不可用
*/
private Integer state;
/** /**
* 创建时间 * 创建时间
......
...@@ -39,24 +39,22 @@ public class KylinLuckyBagActivity implements Serializable, Cloneable{ ...@@ -39,24 +39,22 @@ public class KylinLuckyBagActivity implements Serializable, Cloneable{
/** /**
* 跳转地址 * 跳转地址
*/ */
private String target_url; private String targetUrl;
/** /**
* 上线开始时间 * 所属演出ID
*/ */
private String onlineStartTime; private String performanceId;
/** /**
* 上线结束时间 * 状态: 1-可用, 0-不可用
*/ */
private String onlineEndTime; private Integer state;
/** /**
* 状态: 1-可用, 0-不可用 * 排序(越大越靠前)
*/ */
private Integer state; private Integer sort;
/** /**
* 创建时间 * 创建时间
......
...@@ -14,7 +14,7 @@ import java.time.LocalDateTime; ...@@ -14,7 +14,7 @@ import java.time.LocalDateTime;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class KylinUserReward implements Serializable, Cloneable{ public class KylinRewardUser implements Serializable, Cloneable{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -47,7 +47,7 @@ public class KylinUserReward implements Serializable, Cloneable{ ...@@ -47,7 +47,7 @@ public class KylinUserReward implements Serializable, Cloneable{
private String code; private String code;
/** /**
* 状态 0不可用 1可用 2删除 * 状态 0不可用 1可用
*/ */
private Integer state; private Integer state;
......
package com.liquidnet.service.kylin.mapper; package com.liquidnet.service.kylin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.kylin.entity.KylinUserReward; import com.liquidnet.service.kylin.entity.KylinRewardUser;
public interface KylinUserRewardMapper extends BaseMapper<KylinUserReward> { public interface KylinRewardUserMapper extends BaseMapper<KylinRewardUser> {
} }
package com.liquidnet.service.kylin.controller; package com.liquidnet.service.kylin.controller;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.vo.KylinLuckyBagVo; import com.liquidnet.service.kylin.dto.vo.KylinLuckyBagVo;
import com.liquidnet.service.kylin.service.IKylinLuckyBagService; import com.liquidnet.service.kylin.service.IKylinLuckyBagService;
...@@ -13,8 +12,6 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -13,8 +12,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "前端-获取福袋相关") @Api(tags = "前端-获取福袋相关")
@RestController @RestController
@RequestMapping("/luckyBag") @RequestMapping("/luckyBag")
...@@ -27,39 +24,7 @@ public class KylinLuckyBagController { ...@@ -27,39 +24,7 @@ public class KylinLuckyBagController {
@GetMapping("") @GetMapping("")
@ApiOperation("获取福袋权益列表") @ApiOperation("获取福袋权益列表")
public ResponseDto<KylinLuckyBagVo> getLuckyBagBenefitsByOrderId(@RequestParam(value = "orderId") String orderId) { public ResponseDto<KylinLuckyBagVo> getLuckyBagByOrderId(@RequestParam(value = "orderId") String orderId) {
return ResponseDto.success(benefitsService.getLuckyBagByOrderId(orderId));
String jsonObj = "{\n" +
" \"luckyBagVoList\": [\n" +
" {\n" +
" \"luckyBagId\": \"bag001\",\n" +
" \"name\": \"蛋仔派对专属皮肤\",\n" +
" \"introduction\": \"1. 每个观演人对应发放一张兑换券/n 2. 兑换券为虚拟商品,一旦丢失或泄露,可能被他人使用,请妥善保管/n 3. 兑换码有效期至[具体日期],请及时使用。\",\n" +
" \"status\": 1,\n" +
" \"rewardCodeList\": [\n" +
" \"CODE123\",\n" +
" \"CODE456\"\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"luckyBagId\": \"bag002\",\n" +
" \"name\": \"蛋仔派对新地图\",\n" +
" \"introduction\": \"未解锁的福袋,快来领取吧!\",\n" +
" \"status\": 0,\n" +
" \"rewardCodeList\": []\n" +
" }\n" +
" ],\n" +
" \"luckyBagActivityVoList\": [\n" +
" {\n" +
" \"luckyBagActivityId\": \"activity002\",\n" +
" \"name\": \"本单权益\",\n" +
" \"detail\": \"福袋活动详情\",\n" +
" \"targetUrl\": \"https://baidu.com\"\n" +
" }\n" +
" ]\n" +
"}";
return ResponseDto.success(JsonUtils.fromJson(jsonObj, KylinLuckyBagVo.class));
// return ResponseDto.success(benefitsService.getLuckyBagBenefitsByOrderId(orderId));
} }
} }
package com.liquidnet.service.kylin.service.impl;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.kylin.service.IFeishuBotService;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
@Service
public class FeishuBotServiceImpl implements IFeishuBotService {
@Override
public void sendTextMessage(String text) {
HashMap<String, Object> textMap = new HashMap<>();
textMap.put("text", text);
Map<String, Object> bodyMap = new HashMap<>();
bodyMap.put("msg_type", "text");
bodyMap.put("content", textMap);
HttpUtil.postJson("https://open.feishu.cn/open-apis/bot/v2/hook/6315d096-5947-4bbb-9c34-90808dd91555",
JsonUtils.toJson(bodyMap));
}
}
package com.liquidnet.service.kylin.service.impl; package com.liquidnet.service.kylin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.exception.LiquidnetServiceException; import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.util.CurrentUtil; import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.base.ErrorMapping; import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.KylinLuckyBagVo; import com.liquidnet.service.kylin.dto.vo.KylinLuckyBagVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.returns.OrderDetailsVo; import com.liquidnet.service.kylin.dto.vo.returns.OrderDetailsVo;
import com.liquidnet.service.kylin.mapper.*; import com.liquidnet.service.kylin.entity.KylinLuckyBag;
import com.liquidnet.service.kylin.entity.KylinLuckyBagActivity;
import com.liquidnet.service.kylin.entity.KylinRewardCode;
import com.liquidnet.service.kylin.entity.KylinRewardUser;
import com.liquidnet.service.kylin.mapper.KylinBrandsMapper;
import com.liquidnet.service.kylin.mapper.KylinLuckyBagMapper;
import com.liquidnet.service.kylin.mapper.KylinRewardCodeMapper;
import com.liquidnet.service.kylin.mapper.KylinRewardUserMapper;
import com.liquidnet.service.kylin.service.IFeishuBotService;
import com.liquidnet.service.kylin.service.IKylinLuckyBagService; import com.liquidnet.service.kylin.service.IKylinLuckyBagService;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsService; import com.liquidnet.service.kylin.service.IKylinOrderTicketsService;
import com.liquidnet.service.kylin.utils.DataUtils; import com.liquidnet.service.kylin.utils.DataUtils;
...@@ -14,7 +29,12 @@ import org.slf4j.LoggerFactory; ...@@ -14,7 +29,12 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service @Service
public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
...@@ -23,40 +43,220 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { ...@@ -23,40 +43,220 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
@Autowired @Autowired
private DataUtils dataUtils; private DataUtils dataUtils;
@Autowired
RedisUtil redisUtil;
@Autowired @Autowired
IKylinOrderTicketsService orderTicketsService; IKylinOrderTicketsService orderTicketsService;
@Autowired
private IFeishuBotService iFeishuBotService;
@Autowired @Autowired
private KylinLuckyBagMapper kylinLuckyBagMapper; private KylinLuckyBagMapper kylinLuckyBagMapper;
@Autowired @Autowired
private KylinLuckyBagActivityMapper kylinLuckyBagActivityMapper;
@Autowired
private KylinBrandsMapper kylinBrandsMapper; private KylinBrandsMapper kylinBrandsMapper;
@Autowired @Autowired
private KylinRewardCodeMapper kylinRewardCodeMapper; private KylinRewardCodeMapper kylinRewardCodeMapper;
@Autowired @Autowired
private KylinUserRewardMapper kylinUserRewardMapper; private KylinRewardUserMapper kylinRewardUserMapper;
@Override @Override
public List<KylinLuckyBagVo> getLuckyBagBenefitsByOrderId(String orderId) { public KylinLuckyBagVo getLuckyBagByOrderId(String orderId) {
//1. 首先校验用户权限 //1. 首先校验用户权限
OrderDetailsVo vo = orderTicketsService.orderDetails(orderId); OrderDetailsVo vo = orderTicketsService.orderDetails(orderId);
String uid = CurrentUtil.getCurrentUid(); String uid = CurrentUtil.getCurrentUid();
if (null == vo) { if (null == vo) {
log.error("获取订单详情为空, orderId: {}, uid: {}.", orderId, uid); log.error("[getLuckyBagByOrderId] 无权查看该订单, orderId: {}, uid: {}.", orderId, uid);
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("20003"); ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("20003");
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage()); throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
} }
//2. 先查询福袋 log.info("[getLuckyBagByOrderId] 获取福袋详情, orderId: {}, uid: {}.", orderId, uid);
// 判断订单状态
if (vo.getOrderTicketVo().getStatus() != 1 || vo.getOrderTicketVo().getPayStatus() != 1) {
log.info("[getLuckyBagByOrderId] 该订单状态不满足权益要求, orderId: {}, uid: {}, status: {}, payStatus: {}.", orderId,
uid, vo.getOrderTicketVo().getStatus(), vo.getOrderTicketVo().getPayStatus());
return KylinLuckyBagVo.ofEmpty();
}
// 2. 订单关联的演出ID
List<KylinLuckyBagVo.LuckyBagActivityVo> activityVos = getLuckyBagActivityVos(vo.getOrderTicketVo().getPerformanceId());
//3. 再查询满足的权益 //3. 再查询满足的权益
List<KylinLuckyBagVo.LuckyBagVo> luckyBagVos = getLuckyBagVos(vo);
return KylinLuckyBagVo.of(luckyBagVos, activityVos);
}
/**
* 获取福袋列表
*
* @param vo
* @return
*/
private List<KylinLuckyBagVo.LuckyBagVo> getLuckyBagVos(OrderDetailsVo vo) {
final String performanceId = vo.getOrderTicketVo().getPerformanceId();
final String orderId = vo.getOrderTicketVo().getOrderTicketsId();
final String uid = vo.getOrderTicketVo().getUserId();
List<KylinLuckyBag> luckyBagList = dataUtils.getKylinLuckyBagList();
if (luckyBagList.isEmpty()) {
log.info("[getLuckyBagVos] 获取福袋列表为空.");
return Collections.emptyList();
}
// 筛选出 performanceId 为 "abc" 的 KylinLuckyBag 对象
List<KylinLuckyBag> filteredList = luckyBagList.stream()
.filter(luckyBag -> performanceId.equals(luckyBag.getPerformanceId()))
.collect(Collectors.toList());
List<KylinLuckyBagVo.LuckyBagVo> activityVos = new ArrayList<>();
filteredList.forEach(l -> {
KylinLuckyBagVo.LuckyBagVo luckyBagVo = new KylinLuckyBagVo.LuckyBagVo();
luckyBagVo.setLuckyBagId(l.getLuckyBagId());
luckyBagVo.setName(l.getName());
luckyBagVo.setIntroduction(l.getIntroduction());
final String sendTime = l.getSendTime();
final String nowTime = DateUtil.getNowTime();
// 判断发放时间
if (null != sendTime && !sendTime.isEmpty()) {
if (DateUtil.compareStrDay(nowTime, sendTime) >= 0) { // 当前时间小于发放时间 还未开始呢
// 查询数据库获取兑换码
List<KylinRewardUser> kylinRewardUserList = dataUtils.getKylinRewardUserList(orderId, uid, l.getLuckyBagId());
if (kylinRewardUserList.isEmpty()) {
// 根据购买数量来分配兑换码
log.info("[getLuckyBagVos] 福袋[{}]已到发放时间,但未给用户分配兑换码, uid: {}, orderId: {}.", l.getName(), uid, orderId);
kylinRewardUserList = getRandomRewardCode(vo, l.getLuckyBagId());
}
Set<String> codeSet = kylinRewardUserList.stream().map(KylinRewardUser::getCode).collect(Collectors.toSet());
luckyBagVo.setRewardCodeList(codeSet);
luckyBagVo.setStatus(kylinRewardUserList.isEmpty() ? 0 : 1);
} else {
log.info("[getLuckyBagVos] 福袋[{}]未到发放时间.", l.getName());
luckyBagVo.setStatus(0);
luckyBagVo.setRewardCodeList(Collections.emptySet());
}
}
activityVos.add(luckyBagVo);
});
return activityVos;
}
/**
* 分配兑换码
*
* @param vo
* @return
*/
public List<KylinRewardUser> getRandomRewardCode(OrderDetailsVo vo, String luckyBagId) {
final int limitTotal = vo.getOrderTicketVo().getNumber();
final KylinOrderTicketVo orderTicketVo = vo.getOrderTicketVo();
final String orderId = orderTicketVo.getOrderTicketsId();
return null; if (limitTotal <= 0) {
log.error("[getRandomRewardCode] 用户订单购买数量错误, orderId: {}.", orderId);
return Collections.emptyList();
}
final String lockKey = KylinRedisConst.LUCKY_BAG_CODE_LOCK + luckyBagId;
try {
// 1. 获取分布式锁,防止并发问题
boolean locked = redisUtil.lock(lockKey, 1, 30);
if (!locked) {
log.info("[getRandomRewardCode] 未获取到分布式锁.");
return Collections.emptyList();
}
//2. 搜索兑换码
List<KylinRewardCode> rewardCodes = getAvailableRewardCodes(luckyBagId, limitTotal);
if (rewardCodes.size() < limitTotal) {
log.error("[getRandomRewardCode] 兑换码不足, luckyBagId: {}, need total: {}.", luckyBagId, limitTotal);
// 报警
String msg = String.format("福袋ID [%s] 兑换码不足,请及时补充.", luckyBagId);
iFeishuBotService.sendTextMessage(msg);
return Collections.emptyList();
}
return assignRewardCodesToUser(orderTicketVo.getUserId(), orderId, luckyBagId, rewardCodes, orderTicketVo.getEntitiesVoList());
} catch (Exception e) {
log.error("error", e);
// 报警
iFeishuBotService.sendTextMessage("error: " + e.getMessage());
return Collections.emptyList();
} finally {
redisUtil.uLock(lockKey);
}
}
public List<KylinRewardUser> assignRewardCodesToUser(String uid,
String orderId,
String luckyBagId,
List<KylinRewardCode> rewardCodes,
List<KylinOrderTicketEntitiesVo> entities) {
List<KylinRewardUser> rewardUsers = new ArrayList<>();
for (int i = 0; i < rewardCodes.size(); i++) {
KylinRewardCode rewardCode = rewardCodes.get(i);
rewardCode.setState(0);
if (kylinRewardCodeMapper.updateById(rewardCode) > 0) {
KylinRewardUser user = buildRewardUser(uid, orderId, luckyBagId, entities.get(i).getOrderTicketEntitiesId(), rewardCode.getCode());
kylinRewardUserMapper.insert(user);
rewardUsers.add(user);
log.info("[assignRewardCodesToUser] 分配成功, luckyBagId: {}, orderId: {}, code: {}", luckyBagId, orderId, rewardCode.getCode());
} else {
log.error("[assignRewardCodesToUser] 分配失败, luckyBagId: {}, orderId: {}", luckyBagId, orderId);
String msg = String.format("福袋ID [%s] 分配兑换码失败:用户ID [%s] 的订单ID [%s] 已分配 [%s] 个,应分配 [%s] 个。",
luckyBagId, uid, orderId, rewardUsers.size(), rewardCodes.size());
iFeishuBotService.sendTextMessage(msg);
}
}
return rewardUsers;
}
private KylinRewardUser buildRewardUser(String uid, String orderId, String luckyBagId, String orderTicketEntitiesId, String code) {
KylinRewardUser user = new KylinRewardUser();
user.setUid(uid);
user.setLuckyBagId(luckyBagId);
user.setOrderId(orderId);
user.setOrderTicketEntitiesId(orderTicketEntitiesId);
user.setCode(code);
user.setState(1);
user.setCreatedAt(LocalDateTime.now());
user.setUpdatedAt(LocalDateTime.now());
return user;
}
private List<KylinRewardCode> getAvailableRewardCodes(String luckyBagId, int limitTotal) {
LambdaQueryWrapper<KylinRewardCode> wrapper = new QueryWrapper<KylinRewardCode>().lambda()
.eq(KylinRewardCode::getLuckyBagId, luckyBagId)
.eq(KylinRewardCode::getState, 1)
.last(true, "ORDER BY RAND() LIMIT " + limitTotal);
return kylinRewardCodeMapper.selectList(wrapper);
}
/**
* 获取福袋活动列表
*
* @param performanceId
* @return
*/
private List<KylinLuckyBagVo.LuckyBagActivityVo> getLuckyBagActivityVos(String performanceId) {
List<KylinLuckyBagVo.LuckyBagActivityVo> activityVos = new ArrayList<>();
//2. 先查询活动
List<KylinLuckyBagActivity> luckyBagActivityList = dataUtils.getKylinLuckyBagActivityList();
luckyBagActivityList.forEach(l -> {
if (l.getPerformanceId().equals(performanceId)) {
activityVos.add(new KylinLuckyBagVo.LuckyBagActivityVo(l.getLuckyBagActivityId(),
l.getName(),
l.getDetail(),
l.getTargetUrl()));
}
});
return activityVos;
} }
} }
package com.liquidnet.service.kylin.utils; package com.liquidnet.service.kylin.utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.liquidnet.common.cache.redis.util.RedisUtil; import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil; import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil; import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst; import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamMemberVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo; import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.base.constant.RedisKeyExpireConst; import com.liquidnet.service.base.constant.RedisKeyExpireConst;
import com.liquidnet.service.goblin.constant.GoblinRedisConst; import com.liquidnet.service.goblin.constant.GoblinRedisConst;
...@@ -26,9 +27,10 @@ import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketExpressModuleVo; ...@@ -26,9 +27,10 @@ import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketExpressModuleVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketPartnerVo; import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketPartnerVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo; import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundsVo; import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundsVo;
import com.liquidnet.service.kylin.dto.vo.returns.NoticeKylinPerformanceVo; import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.entity.KylinOrderCoupons; import com.liquidnet.service.kylin.mapper.KylinLuckyBagActivityMapper;
import com.liquidnet.service.kylin.entity.KylinRecommendActive; import com.liquidnet.service.kylin.mapper.KylinLuckyBagMapper;
import com.liquidnet.service.kylin.mapper.KylinRewardUserMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
...@@ -56,6 +58,12 @@ public class DataUtils { ...@@ -56,6 +58,12 @@ public class DataUtils {
private RedisUtil redisUtil; private RedisUtil redisUtil;
@Autowired @Autowired
GoblinRedisUtils goblinRedisUtils; GoblinRedisUtils goblinRedisUtils;
@Autowired
private KylinLuckyBagActivityMapper kylinLuckyBagActivityMapper;
@Autowired
private KylinLuckyBagMapper kylinLuckyBagMapper;
@Autowired
private KylinRewardUserMapper kylinRewardUserMapper;
/** /**
...@@ -1603,4 +1611,83 @@ public class DataUtils { ...@@ -1603,4 +1611,83 @@ public class DataUtils {
KylinTicketPartnerVo.class, KylinTicketPartnerVo.class,
KylinTicketPartnerVo.class.getSimpleName()); KylinTicketPartnerVo.class.getSimpleName());
} }
/**
* 获取福袋活动列表
* @return
*/
public List<KylinLuckyBagActivity> getKylinLuckyBagActivityList(){
String redisKey = KylinRedisConst.LUCKY_BAG_ACTIVITY;
Object obj = redisUtil.get(redisKey);
if (obj == null) {
// 从数据库查询 状态为可用的
LambdaQueryWrapper<KylinLuckyBagActivity> lambdaQueryWrapper = new QueryWrapper<KylinLuckyBagActivity>()
.lambda()
.eq(KylinLuckyBagActivity::getState, 1)
.orderByDesc(KylinLuckyBagActivity::getSort);
List<KylinLuckyBagActivity> bagActivities = kylinLuckyBagActivityMapper.selectList(lambdaQueryWrapper);
setKylinLuckyBagActivityList(bagActivities);
return bagActivities;
}else {
return (List<KylinLuckyBagActivity>)obj;
}
}
public void setKylinLuckyBagActivityList(List<KylinLuckyBagActivity> activities){
String redisKey = KylinRedisConst.LUCKY_BAG_ACTIVITY;
redisUtil.set(redisKey, activities, RedisKeyExpireConst.KYLIN_LUCKY_BAG_ACTIVITY_EXPIRE);
}
public void delKylinLuckyBagActivityList(){
String redisKey = KylinRedisConst.LUCKY_BAG_ACTIVITY;
redisUtil.del(redisKey);
}
/**
* 获取福袋列表
* @return
*/
public List<KylinLuckyBag> getKylinLuckyBagList(){
String redisKey = KylinRedisConst.LUCKY_BAG;
Object obj = redisUtil.get(redisKey);
if (obj == null) {
// 从数据库查询 状态为可用的
LambdaQueryWrapper<KylinLuckyBag> lambdaQueryWrapper = new QueryWrapper<KylinLuckyBag>()
.lambda()
.eq(KylinLuckyBag::getState, 1);
List<KylinLuckyBag> bagActivities = kylinLuckyBagMapper.selectList(lambdaQueryWrapper);
setKylinLuckyBagList(bagActivities);
return bagActivities;
}else {
return (List<KylinLuckyBag>)obj;
}
}
public void setKylinLuckyBagList(List<KylinLuckyBag> activities){
String redisKey = KylinRedisConst.LUCKY_BAG;
redisUtil.set(redisKey, activities, RedisKeyExpireConst.KYLIN_LUCKY_BAG_EXPIRE);
}
public void delKylinLuckyBagList(){
String redisKey = KylinRedisConst.LUCKY_BAG;
redisUtil.del(redisKey);
}
/**
* 获取用户领取兑换码
*
* @param orderId
* @param uid
* @return
*/
public List<KylinRewardUser> getKylinRewardUserList(String orderId, String uid, String luckyBagId) {
LambdaQueryWrapper<KylinRewardUser> lambdaQueryWrapper = new QueryWrapper<KylinRewardUser>().lambda()
.eq(KylinRewardUser::getUid, uid)
.eq(KylinRewardUser::getOrderId, orderId)
.eq(KylinRewardUser::getLuckyBagId, luckyBagId)
.eq(KylinRewardUser::getState, 1);
return kylinRewardUserMapper.selectList(lambdaQueryWrapper);
}
} }
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