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

Commit 01ee3ac8 authored by GaoHu's avatar GaoHu

exit

parent 510d763a
...@@ -250,12 +250,27 @@ public class GoblinRedisConst { ...@@ -250,12 +250,27 @@ public class GoblinRedisConst {
/** /**
* skuId助力所需人数 * skuId助力所需人数
*/ */
public static final String ANTICIPATE_SHARE_SKUID_PEOPLE = PREFIX.concat("anticipate:share:skuId:people"); public static final String ANTICIPATE_SHARE_SKUID_PEOPLE = PREFIX.concat("anticipate:share:skuId:people:");
/** /**
* 助力头像保存 * 助力头像保存
*/ */
public static final String ANTICIPATE_SHARE_HELP_AVATAR = PREFIX.concat("anticipate:share:help:avatar"); public static final String ANTICIPATE_SHARE_HELP_AVATAR = PREFIX.concat("anticipate:share:help:avatar:");
/**
* 创建分享vo
*/
public static final String ANTICIPATE_SHARE_VO = PREFIX.concat("anticipate:share:help:vo:");
/**
* 用户助力 助力人id:分享id
*/
public static final String ANTICIPATE_SHARE_HELPID_SID = PREFIX.concat("anticipate:share:helpId:sid:");
/**
* 助力sid
*/
public static final String ANTICIPATE_SHARE_SID = PREFIX.concat("anticipate:share:sid:");
......
package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.liquidnet.commons.lang.util.DateUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author TT
*/
@Data
public class GoblinGoodsAnticipateHelp implements Serializable {
private static final long serialVersionUID = 1L;
/**
* skuId
*/
private String skuId;
/**
* 配置预约人数
*/
private Integer people;
/**
* 预约开始时间
*/
@ApiModelProperty(value = "预约开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime aboutStartDate;
/**
* 预约结束时间
*/
@ApiModelProperty(value = "预约结束时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime aboutEndDate;
/**
* 创建时间
*/
private LocalDateTime createDate;
private static final GoblinGoodsAnticipateHelp obj = new GoblinGoodsAnticipateHelp();
public static GoblinGoodsAnticipateHelp getNew() {
try {
return (GoblinGoodsAnticipateHelp) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinGoodsAnticipateHelp();
}
}
}
package com.liquidnet.service.goblin.dto.vo; package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.liquidnet.commons.lang.util.DateUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
...@@ -34,6 +37,20 @@ public class GoblinGoodsAnticipateShareVo implements Serializable{ ...@@ -34,6 +37,20 @@ public class GoblinGoodsAnticipateShareVo implements Serializable{
*/ */
private String url; private String url;
/**
* 预约开始时间
*/
@ApiModelProperty(value = "预约开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime aboutStartDate;
/**
* 预约结束时间
*/
@ApiModelProperty(value = "预约结束时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime aboutEndDate;
/** /**
* 创建时 * 创建时
*/ */
......
...@@ -8,10 +8,7 @@ import com.liquidnet.service.base.ResponseDto; ...@@ -8,10 +8,7 @@ import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping; import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst; import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo; import com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodAnticipateUserVo; import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateHelpVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateShareVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateVo;
import com.liquidnet.service.goblin.service.IGoblinGoodsAnticipateService; import com.liquidnet.service.goblin.service.IGoblinGoodsAnticipateService;
import com.liquidnet.service.goblin.util.GoblinAnticipateUtils; import com.liquidnet.service.goblin.util.GoblinAnticipateUtils;
import com.liquidnet.service.goblin.util.GoblinMongoUtils; import com.liquidnet.service.goblin.util.GoblinMongoUtils;
...@@ -23,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -23,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigInteger; import java.math.BigInteger;
import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
...@@ -66,6 +64,14 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS ...@@ -66,6 +64,14 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS
GoblinGoodAnticipateUserVo userVo = goblinRedisUtils.getUserAboutAut(skuId, uid); GoblinGoodAnticipateUserVo userVo = goblinRedisUtils.getUserAboutAut(skuId, uid);
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr(); LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
if (userVo == null) { if (userVo == null) {
//接入助力人数判断
GoblinGoodsAnticipateHelp sharePeopleBySkuId = goblinRedisUtils.getSharePeopleBySkuId(skuId);
Integer people = goblinRedisUtils.getHelpSidAddHelp(skuId);
if (sharePeopleBySkuId.getPeople() <= people) {
int num = sharePeopleBySkuId.getPeople() - people;
return ResponseDto.failure("预约失败!预约助力人数还差" + num + "人!");
}
GoblinGoodAnticipateUserVo user = new GoblinGoodAnticipateUserVo(); GoblinGoodAnticipateUserVo user = new GoblinGoodAnticipateUserVo();
user.setUid(uid); user.setUid(uid);
user.setSkuId(skuId); user.setSkuId(skuId);
...@@ -107,15 +113,26 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS ...@@ -107,15 +113,26 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS
@Override @Override
public ResponseDto<Object> share(String skuId, String url) { public ResponseDto<Object> share(String skuId, String url) {
//查询是否可以预约
GoblinGoodsAnticipateValueVo valueBySkuId = goblinRedisUtils.getValueBySkuId(skuId);
if (valueBySkuId == null) {
return ResponseDto.failure("商品不存在!");
}
Integer integer = GoblinAnticipateUtils.setState(valueBySkuId.getAboutStartDate(), valueBySkuId.getAboutEndDate());
if (integer != null && !integer.equals(1)) {
return ResponseDto.failure("预约未开始或已结束!");
}
//获取用户uid //获取用户uid
String uid = CurrentUtil.getCurrentUid(); String uid = CurrentUtil.getCurrentUid();
//获取redis关联记录 //可以创建分享
//查询redis关联记录
Integer share = goblinRedisUtils.getShare(skuId, uid); Integer share = goblinRedisUtils.getShare(skuId, uid);
if (share != null) { if (share != null) {
return ResponseDto.failure("已开启助力"); return ResponseDto.failure("已开启助力");
} else { } else {
//查询sku需要助力人数 //查询sku需要助力人数
// Integer skuIdPeople = goblinRedisUtils.getSharePeopleBySkuId(skuId); //Integer skuIdPeople = goblinRedisUtils.getSharePeopleBySkuId(skuId);
//redis缓存 //redis缓存
goblinRedisUtils.setShare(skuId, uid, 0); goblinRedisUtils.setShare(skuId, uid, 0);
...@@ -127,9 +144,15 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS ...@@ -127,9 +144,15 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS
goblinGoodsAnticipateShareVo.setSkuId(skuId); goblinGoodsAnticipateShareVo.setSkuId(skuId);
goblinGoodsAnticipateShareVo.setUrl(url); goblinGoodsAnticipateShareVo.setUrl(url);
goblinGoodsAnticipateShareVo.setCreatedDate(LocalDateTime.now()); goblinGoodsAnticipateShareVo.setCreatedDate(LocalDateTime.now());
goblinGoodsAnticipateShareVo.setAboutStartDate(valueBySkuId.getAboutStartDate());
goblinGoodsAnticipateShareVo.setAboutEndDate(valueBySkuId.getAboutEndDate());
//开启助力 //开启助力
//mongodb缓存 //mongodb缓存
goblinMongoUtils.setGoblinGoodsAnticipateShareVo(goblinGoodsAnticipateShareVo); //goblinMongoUtils.setGoblinGoodsAnticipateShareVo(goblinGoodsAnticipateShareVo);
//redis存储用户分享
goblinRedisUtils.setShareVo(goblinGoodsAnticipateShareVo);
//redis消息 MySQL //redis消息 MySQL
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr(); LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
...@@ -147,19 +170,40 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS ...@@ -147,19 +170,40 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS
@Override @Override
public ResponseDto<Object> help(String sid) { public ResponseDto<Object> help(String sid) {
//查询是否可以预约
GoblinGoodsAnticipateShareVo shareVo = goblinRedisUtils.getShareVo(sid);
if (shareVo == null) {
return ResponseDto.failure("分享不存在!");
}
Integer integer = GoblinAnticipateUtils.setState(shareVo.getAboutStartDate(), shareVo.getAboutEndDate());
if (integer != null && !integer.equals(1)) {
return ResponseDto.failure("预约未开始或已结束!");
}
//获取uid //获取uid
String uid = CurrentUtil.getCurrentUid(); String uid = CurrentUtil.getCurrentUid();
//查询mongodb 是否助力过该分享 //查询mongodb 是否助力过该分享
GoblinGoodsAnticipateHelpVo goodsAnticipateHelpVo = goblinMongoUtils.getHelpVo(sid, uid); // GoblinGoodsAnticipateHelpVo goodsAnticipateHelpVo = goblinMongoUtils.getHelpVo(sid, uid);
if (goodsAnticipateHelpVo == null) { //redis缓存
Integer help = goblinRedisUtils.getHelpByUidAndSid(uid, sid);
if (help == null) {
GoblinGoodsAnticipateHelpVo helpVo = GoblinGoodsAnticipateHelpVo.getNew(); GoblinGoodsAnticipateHelpVo helpVo = GoblinGoodsAnticipateHelpVo.getNew();
helpVo.setHelpUid(uid); helpVo.setHelpUid(uid);
helpVo.setSid(sid); helpVo.setSid(sid);
helpVo.setCreateDate(LocalDateTime.now()); helpVo.setCreateDate(LocalDateTime.now());
//mongodb缓存 //mongodb缓存
goblinMongoUtils.setHelpVo(helpVo); // goblinMongoUtils.setHelpVo(helpVo);
//加入redis缓存
Duration between = Duration.between(shareVo.getAboutStartDate(), shareVo.getAboutEndDate());
goblinRedisUtils.setHelpByUidAndSid(uid, sid, between.toDays());
//此助力sid人数+1
goblinRedisUtils.setHelpSidAddHelp(sid);
//redis消息 MySQL插入 //redis消息 MySQL插入
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr(); LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
...@@ -168,7 +212,7 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS ...@@ -168,7 +212,7 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS
helpVo.getHelpUid(), helpVo.getHelpUid(),
helpVo.getCreateDate() helpVo.getCreateDate()
}); });
sendRedis("goblin_goods_anticipate_help",sqlValue); sendRedis("goblin_goods_anticipate_help", sqlValue);
//记录助力人数头像(前六个) //记录助力人数头像(前六个)
List<String> helpUserAvatar = goblinRedisUtils.getHelpUserAvatar(sid); List<String> helpUserAvatar = goblinRedisUtils.getHelpUserAvatar(sid);
......
...@@ -13,6 +13,7 @@ import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateValueAddPara ...@@ -13,6 +13,7 @@ import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateValueAddPara
import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateValueParam; import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateValueParam;
import com.liquidnet.service.goblin.dto.manage.vo.AnticipateValueVo; import com.liquidnet.service.goblin.dto.manage.vo.AnticipateValueVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo; import com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateHelp;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateVo; import com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateVo;
import com.liquidnet.service.goblin.service.manage.IGoblinGoodsAnticipateMgService; import com.liquidnet.service.goblin.service.manage.IGoblinGoodsAnticipateMgService;
import com.liquidnet.service.goblin.util.GoblinAnticipateUtils; import com.liquidnet.service.goblin.util.GoblinAnticipateUtils;
...@@ -114,7 +115,13 @@ public class GoblinGoodsAnticipateMgServiceImpl implements IGoblinGoodsAnticipat ...@@ -114,7 +115,13 @@ public class GoblinGoodsAnticipateMgServiceImpl implements IGoblinGoodsAnticipat
goblinRedisUtils.setValue(goodsAnticipateValueVo); goblinRedisUtils.setValue(goodsAnticipateValueVo);
//redis缓存预约条件 //redis缓存预约条件
goblinRedisUtils.setSharePeopleBySkuId(item.getSkuId(), people); GoblinGoodsAnticipateHelp goodsAnticipateHelp = GoblinGoodsAnticipateHelp.getNew();
goodsAnticipateHelp.setSkuId(goodsAnticipateValueVo.getSkuId());
goodsAnticipateHelp.setPeople(people);
goodsAnticipateHelp.setAboutStartDate(goodsAnticipateValueVo.getAboutStartDate());
goodsAnticipateHelp.setAboutEndDate(goodsAnticipateValueVo.getAboutEndDate());
goblinRedisUtils.setSharePeopleBySkuId(item.getSkuId(), goodsAnticipateHelp);
//保存mysql中间表 //保存mysql中间表
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr(); LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
......
...@@ -191,23 +191,33 @@ public class GoblinMongoUtils { ...@@ -191,23 +191,33 @@ public class GoblinMongoUtils {
mongoTemplate.updateFirst(query, update, GoblinGoodsAnticipateValueVo.class.getSimpleName()); mongoTemplate.updateFirst(query, update, GoblinGoodsAnticipateValueVo.class.getSimpleName());
} }
/**
* 存入用户创建分享 不需要mongodb存储
*/
public void setGoblinGoodsAnticipateShareVo(GoblinGoodsAnticipateShareVo goblinGoodsAnticipateShareVo){ public void setGoblinGoodsAnticipateShareVo(GoblinGoodsAnticipateShareVo goblinGoodsAnticipateShareVo){
mongoTemplate.insert(goblinGoodsAnticipateShareVo,GoblinGoodsAnticipateShareVo.class.getSimpleName()); mongoTemplate.insert(goblinGoodsAnticipateShareVo,GoblinGoodsAnticipateShareVo.class.getSimpleName());
} }
/**
* 根据创建id查询分享信息
*/
public GoblinGoodsAnticipateShareVo getShareVoBySid(String sid){ public GoblinGoodsAnticipateShareVo getShareVoBySid(String sid){
return mongoTemplate.findOne(Query.query(Criteria.where("sid").is(sid)), return mongoTemplate.findOne(Query.query(Criteria.where("sid").is(sid)),
GoblinGoodsAnticipateShareVo.class, GoblinGoodsAnticipateShareVo.class.getSimpleName()); GoblinGoodsAnticipateShareVo.class, GoblinGoodsAnticipateShareVo.class.getSimpleName());
} }
/** /**
* 分享id和助力人id 查询助力信息 * 分享id和助力人id 查询助力信息 不存mongodb
*/ */
public GoblinGoodsAnticipateHelpVo getHelpVo(String sid,String uid){ public GoblinGoodsAnticipateHelpVo getHelpVo(String sid,String uid){
return mongoTemplate.findOne(Query.query(Criteria.where("sid").is(sid).and("helpUid").is(uid)), return mongoTemplate.findOne(Query.query(Criteria.where("sid").is(sid).and("helpUid").is(uid)),
GoblinGoodsAnticipateHelpVo.class, GoblinGoodsAnticipateHelpVo.class.getSimpleName()); GoblinGoodsAnticipateHelpVo.class, GoblinGoodsAnticipateHelpVo.class.getSimpleName());
} }
/**
* 助力vo 之后删去不需要储存
* @param goodsAnticipateHelpVo
*/
public void setHelpVo(GoblinGoodsAnticipateHelpVo goodsAnticipateHelpVo){ public void setHelpVo(GoblinGoodsAnticipateHelpVo goodsAnticipateHelpVo){
mongoTemplate.insert(goodsAnticipateHelpVo,GoblinGoodsAnticipateHelpVo.class.getSimpleName()); mongoTemplate.insert(goodsAnticipateHelpVo,GoblinGoodsAnticipateHelpVo.class.getSimpleName());
} }
......
...@@ -162,24 +162,23 @@ public class GoblinRedisUtils { ...@@ -162,24 +162,23 @@ public class GoblinRedisUtils {
*/ */
public void setShare(String skuId, String uid,Integer people) { public void setShare(String skuId, String uid,Integer people) {
String key = GoblinRedisConst.ANTICIPATE_SHARE_UID_SKUID.concat(uid).concat(":").concat(skuId); String key = GoblinRedisConst.ANTICIPATE_SHARE_UID_SKUID.concat(uid).concat(":").concat(skuId);
//获取缓存中是否有创建助力
redisUtil.set(key,people); redisUtil.set(key,people);
} }
/** /**
* 缓存sku预约助力人数 * 缓存sku预约助力人数
*/ */
public void setSharePeopleBySkuId(String skuId,Integer people){ public void setSharePeopleBySkuId(String skuId,GoblinGoodsAnticipateHelp goodsAnticipateHelp){
String key = GoblinRedisConst.ANTICIPATE_SHARE_SKUID_PEOPLE.concat(skuId); String key = GoblinRedisConst.ANTICIPATE_SHARE_SKUID_PEOPLE.concat(skuId);
redisUtil.set(key,people); redisUtil.set(key,goodsAnticipateHelp);
} }
/** /**
* 缓存sku预约助力人数 * 缓存sku预约助力人数
*/ */
public Integer getSharePeopleBySkuId(String skuId){ public GoblinGoodsAnticipateHelp getSharePeopleBySkuId(String skuId){
String key = GoblinRedisConst.ANTICIPATE_SHARE_SKUID_PEOPLE.concat(skuId); String key = GoblinRedisConst.ANTICIPATE_SHARE_SKUID_PEOPLE.concat(skuId);
return (Integer) redisUtil.get(key); return (GoblinGoodsAnticipateHelp) redisUtil.get(key);
} }
/** /**
...@@ -221,6 +220,51 @@ public class GoblinRedisUtils { ...@@ -221,6 +220,51 @@ public class GoblinRedisUtils {
} }
} }
/**
* 存储分享VO
*/
public void setShareVo(GoblinGoodsAnticipateShareVo goblinGoodsAnticipateShareVo){
redisUtil.set(GoblinRedisConst.ANTICIPATE_SHARE_VO.concat(goblinGoodsAnticipateShareVo.getSid()),goblinGoodsAnticipateShareVo);
}
/**
* 获取分享VO
*/
public GoblinGoodsAnticipateShareVo getShareVo(String sid){
return (GoblinGoodsAnticipateShareVo) redisUtil.get(GoblinRedisConst.ANTICIPATE_SHARE_VO.concat(sid));
}
/**
* 缓存助力
*/
public void setHelpByUidAndSid(String uid,String sid,Long day){
redisUtil.set(GoblinRedisConst.ANTICIPATE_SHARE_HELPID_SID.concat(uid).concat(":").concat(sid),0,(day+1)*60*60*24);
}
/**
* 获取助力
*/
public Integer getHelpByUidAndSid(String uid,String sid){
return (Integer) redisUtil.get(GoblinRedisConst.ANTICIPATE_SHARE_HELPID_SID.concat(uid).concat(":").concat(sid));
}
/**
* 助力id人数+1
*/
public void setHelpSidAddHelp(String sid) {
Integer helpByUidAndSid = getHelpSidAddHelp(sid);
int num = helpByUidAndSid != null ? helpByUidAndSid += 1 : 1;
redisUtil.set(GoblinRedisConst.ANTICIPATE_SHARE_SID.concat(sid), num);
}
/**
* 获取 助力id人数
*/
public Integer getHelpSidAddHelp(String sid){
return (Integer) redisUtil.get(GoblinRedisConst.ANTICIPATE_SHARE_SID.concat(sid));
}
/* ---------------------------------------- sku库存相关 ---------------------------------------- */ /* ---------------------------------------- sku库存相关 ---------------------------------------- */
public void setSkuStock(String marketPre, String skuId, Integer stock) { public void setSkuStock(String marketPre, String skuId, Integer stock) {
String rk = GoblinRedisConst.REAL_STOCK_SKU; String rk = GoblinRedisConst.REAL_STOCK_SKU;
......
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