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

Commit 2a7bcaa5 authored by GaoHu's avatar GaoHu

exit 预约

parent 1605bc86
......@@ -238,11 +238,25 @@ public class GoblinRedisConst {
*/
public static final String ANTICIPATE_SKUID_AVATAR = PREFIX.concat("anticipate:skuId:avatar:");
public static final String ANTICIPATE_VALUE_SKUID = PREFIX.concat("anticipate:value:skuid:");
public static final String NFT_PAY_TYPE = PREFIX.concat("nft:payType");
/**
* 用户助力
*/
public static final String ANTICIPATE_SHARE_UID_SKUID = PREFIX.concat("anticipate:share:uid:skuId:");
/**
* skuId助力所需人数
*/
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");
/* ----------------------------------------------------------------- */
......
......@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
......@@ -28,8 +29,16 @@ public class GoblinGoodsAnticipateAddParam {
@NotBlank(message = "预约规则")
private String rule;
@ApiModelProperty(value = "预约类型(1:预约提醒,2:预约获得购买资格)")
@NotBlank(message = "预约类型")
private int type;
@ApiModelProperty(value = "预约人数(达到一定人数可以预约)")
@NotBlank(message="预约人数")
private Integer people;
@ApiModelProperty("sku信息")
@NotBlank
private List<GoblinGoodsAnticipateValueAddParam> list;
......
package com.liquidnet.service.goblin.dto.vo;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author TT
*/
@Data
public class GoblinGoodsAnticipateHelpVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private String sid;
/**
* 分享用户id
*/
// private String uid;
/**
* 助力人uid
*/
private String helpUid;
/**
* 创建时间
*/
private LocalDateTime createDate;
/**
* 头像集合
*/
// private List<String> helpUserAvatar;
private static final GoblinGoodsAnticipateHelpVo obj = new GoblinGoodsAnticipateHelpVo();
public static GoblinGoodsAnticipateHelpVo getNew() {
try {
return (GoblinGoodsAnticipateHelpVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinGoodsAnticipateHelpVo();
}
}
}
package com.liquidnet.service.goblin.dto.vo;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author TT
*/
@Data
public class GoblinGoodsAnticipateShareVo implements Serializable{
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private String sid;
/**
* 用户uid
*/
private String uid;
/**
* sku_Id
*/
private String skuId;
/**
* url分享地址(备用)
*/
private String url;
/**
* 创建时
*/
private LocalDateTime createdDate;
private static final GoblinGoodsAnticipateShareVo obj = new GoblinGoodsAnticipateShareVo();
public static GoblinGoodsAnticipateShareVo getNew() {
try {
return (GoblinGoodsAnticipateShareVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinGoodsAnticipateShareVo();
}
}
}
......@@ -38,6 +38,18 @@ public class GoblinGoodsAnticipateVo implements Serializable,Cloneable {
*/
private String antId;
/**
* 配置人数
*/
@ApiModelProperty(value = "预约人数(达到一定人数可以预约)")
private Integer people;
/**
* 类型标识
*/
@ApiModelProperty(value = "预约类型(1:预约提醒,2:预约获得购买资格)")
private int type;
/**
* 预约规则
*/
......@@ -71,6 +83,8 @@ public class GoblinGoodsAnticipateVo implements Serializable,Cloneable {
public GoblinGoodsAnticipateVo copy(GoblinGoodsAnticipateAddParam goodsAnticipateAddParam) {
if (null==goodsAnticipateAddParam) return this;
this.people = goodsAnticipateAddParam.getPeople();
this.type = goodsAnticipateAddParam.getType();
this.setRule(goodsAnticipateAddParam.getRule());
return this;
}
......
package com.liquidnet.service.goblin.service;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateHelpVo;
/**
......@@ -20,4 +21,10 @@ public interface IGoblinGoodsAnticipateService {
ResponseDto<Boolean> selectAnticipate(String skuId);
ResponseDto<Object> share(String skuId,String url);
ResponseDto<Object> help(String sid);
ResponseDto<Object> getHelpAvatar(String sid);
}
......@@ -93,10 +93,10 @@ public class MybatisPlusCodeGenerator {
dsc.setUsername("testmall");
dsc.setPassword("zhengzai!mYT");
String resourcePath = "/Users/hujiachen/Downloads/tmp";
String resourcePath = "C:\\Users\\TT\\Desktop";
String directory = "com.liquidnet.service.goblin";
String[] dbTableArray = new String[]{
"goblin_marketing_zhengzai_relation"
"goblin_goods_anticipate_help"
};
doGenerator(resourcePath, dsc, directory, dbTableArray);
......
......@@ -2,6 +2,7 @@ package com.liquidnet.service.goblin.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateHelpVo;
import com.liquidnet.service.goblin.service.IGoblinGoodsAnticipateService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -34,8 +35,27 @@ public class GoblinGoodsAnticipateController {
@ApiOperation("根据skuId和uid查询")
@GetMapping("/selectAnticipateBySkuIdAndUid")
public ResponseDto<Boolean> selectAnticipate(@RequestParam(name = "skuId") String skuId){
public ResponseDto<Boolean> selectAnticipate(@RequestParam(name = "skuId") String skuId) {
return goblinGoodsAnticipateService.selectAnticipate(skuId);
}
@ApiOperation("用户分享,根据sku发起助力")
@PostMapping("/share")
public ResponseDto<Object> share(@RequestParam(name = "skuId", required = true) String skuId,
@RequestParam(name = "url", required = false) String url) {
return goblinGoodsAnticipateService.share(skuId, url);
}
@ApiOperation("用户为他人助力")
@PatchMapping("help")
public ResponseDto<Object> help(@RequestParam(name = "sid", required = true) String sid) {
return goblinGoodsAnticipateService.help(sid);
}
@ApiOperation("获取助力头像")
@PatchMapping("getHelpAvatar")
public ResponseDto<Object> getHelpAvatar(@RequestParam(name = "sid", required = true) String sid) {
return goblinGoodsAnticipateService.getHelpAvatar(sid);
}
}
......@@ -11,6 +11,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.math.BigInteger;
......@@ -34,7 +35,7 @@ public class GoblinGoodsAnticipateMgController {
@ApiOperation("创建预约信息")
@PostMapping("/add")
public ResponseDto<Object> add(@RequestBody GoblinGoodsAnticipateAddParam goodsAnticipateAddParam) {
public ResponseDto<Object> add(@Validated @RequestBody GoblinGoodsAnticipateAddParam goodsAnticipateAddParam) {
return goblinGoodsAnticipateMgService.add(goodsAnticipateAddParam);
}
......
......@@ -2,14 +2,19 @@ package com.liquidnet.service.goblin.service.impl;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodAnticipateUserVo;
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.util.GoblinAnticipateUtils;
import com.liquidnet.service.goblin.util.GoblinMongoUtils;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.QueueUtils;
import lombok.extern.slf4j.Slf4j;
......@@ -17,6 +22,7 @@ import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigInteger;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
......@@ -43,6 +49,9 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS
@Autowired
GoblinAnticipateUtils goblinAnticipateUtils;
@Autowired
GoblinMongoUtils goblinMongoUtils;
@Override
public ResponseDto<Object> userAbout(String skuId) {
//查询该skuId是否能被预约
......@@ -96,6 +105,89 @@ public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateS
return ResponseDto.success(goblinRedisUtils.getUserAboutAut(skuId, uid) != null);
}
@Override
public ResponseDto<Object> share(String skuId, String url) {
//获取用户uid
String uid = CurrentUtil.getCurrentUid();
//获取redis关联记录
Integer share = goblinRedisUtils.getShare(skuId, uid);
if (share != null) {
return ResponseDto.failure("已开启助力");
} else {
//查询sku需要助力人数
// Integer skuIdPeople = goblinRedisUtils.getSharePeopleBySkuId(skuId);
//redis缓存
goblinRedisUtils.setShare(skuId, uid, 0);
String sId = IDGenerator.nextTimeId2();
GoblinGoodsAnticipateShareVo goblinGoodsAnticipateShareVo = GoblinGoodsAnticipateShareVo.getNew();
goblinGoodsAnticipateShareVo.setSid(sId);
goblinGoodsAnticipateShareVo.setUid(uid);
goblinGoodsAnticipateShareVo.setSkuId(skuId);
goblinGoodsAnticipateShareVo.setUrl(url);
goblinGoodsAnticipateShareVo.setCreatedDate(LocalDateTime.now());
//开启助力
//mongodb缓存
goblinMongoUtils.setGoblinGoodsAnticipateShareVo(goblinGoodsAnticipateShareVo);
//redis消息 MySQL
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
sqlValue.add(new Object[]{
goblinGoodsAnticipateShareVo.getSid(),
goblinGoodsAnticipateShareVo.getUid(),
goblinGoodsAnticipateShareVo.getSkuId(),
goblinGoodsAnticipateShareVo.getUrl(),
goblinGoodsAnticipateShareVo.getCreatedDate()
});
sendRedis("goblin_goods_anticipate_user", sqlValue);
}
return ResponseDto.success();
}
@Override
public ResponseDto<Object> help(String sid) {
//获取uid
String uid = CurrentUtil.getCurrentUid();
//查询mongodb 是否助力过该分享
GoblinGoodsAnticipateHelpVo goodsAnticipateHelpVo = goblinMongoUtils.getHelpVo(sid, uid);
if (goodsAnticipateHelpVo == null) {
GoblinGoodsAnticipateHelpVo helpVo = GoblinGoodsAnticipateHelpVo.getNew();
helpVo.setHelpUid(uid);
helpVo.setSid(sid);
helpVo.setCreateDate(LocalDateTime.now());
//mongodb缓存
goblinMongoUtils.setHelpVo(helpVo);
//redis消息 MySQL插入
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
sqlValue.add(new Object[]{
helpVo.getSid(),
helpVo.getHelpUid(),
helpVo.getCreateDate()
});
sendRedis("goblin_goods_anticipate_help",sqlValue);
//记录助力人数头像(前六个)
List<String> helpUserAvatar = goblinRedisUtils.getHelpUserAvatar(sid);
if (helpUserAvatar.size() <= 6) {
//获取用户头像保存
AdamUserInfoVo userInfo = goblinAnticipateUtils.getUserInfo();
//新增助力头像
goblinRedisUtils.setHelpUserAvatar(sid, userInfo.getAvatar());
}
return ResponseDto.success();
}
return ResponseDto.failure("已助力该分享");
}
@Override
public ResponseDto<Object> getHelpAvatar(String sid) {
return ResponseDto.success(goblinRedisUtils.getHelpUserAvatar(sid));
}
public void sendRedis(String sqlKey, LinkedList<Object[]> sqlData) {
LinkedList<String> sql = CollectionUtil.linkedListString();
sql.add(SqlMapping.get(sqlKey));
......
......@@ -23,6 +23,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.math.BigInteger;
import java.time.LocalDateTime;
......@@ -69,7 +70,6 @@ public class GoblinGoodsAnticipateMgServiceImpl implements IGoblinGoodsAnticipat
String antId = IDGenerator.nextTimeId2();
GoblinGoodsAnticipateVo goodsAnticipateVo = new GoblinGoodsAnticipateVo();
goodsAnticipateVo.copy(goodsAnticipateAddParam);
// BeanUtils.copyProperties(goodsAnticipateAddParam, goodsAnticipateVo);
goodsAnticipateVo.setAntId(antId);
goodsAnticipateVo.setCreatedDate(LocalDateTime.now());
goodsAnticipateVo.setDelTag(0);
......@@ -87,7 +87,7 @@ public class GoblinGoodsAnticipateMgServiceImpl implements IGoblinGoodsAnticipat
//mongodb新增
goblinMongoUtils.setGoblinGoodsAnticipateVo(goodsAnticipateVo);
addAnticipateValues(antId, goodsAnticipateAddParam.getRule(), goodsAnticipateAddParam.getList());
addAnticipateValues(antId, goodsAnticipateAddParam.getRule(), goodsAnticipateAddParam.getList(),goodsAnticipateAddParam.getPeople());
//返回预约id
return ResponseDto.success(antId);
......@@ -95,7 +95,7 @@ public class GoblinGoodsAnticipateMgServiceImpl implements IGoblinGoodsAnticipat
return ResponseDto.failure("参数有误");
}
public void addAnticipateValues(String antId, String rule, List<GoblinGoodsAnticipateValueAddParam> list) {
public void addAnticipateValues(String antId, String rule, List<GoblinGoodsAnticipateValueAddParam> list,Integer people) {
//获取创建者uid
String uid = CurrentUtil.getCurrentUid();
if (list != null && list.size() > 0) {
......@@ -113,6 +113,9 @@ public class GoblinGoodsAnticipateMgServiceImpl implements IGoblinGoodsAnticipat
//redis标识存入该sku处于预约列表
goblinRedisUtils.setValue(goodsAnticipateValueVo);
//redis缓存预约条件
goblinRedisUtils.setSharePeopleBySkuId(item.getSkuId(), people);
//保存mysql中间表
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
sqlValue.add(new Object[]{
......@@ -193,6 +196,8 @@ public class GoblinGoodsAnticipateMgServiceImpl implements IGoblinGoodsAnticipat
if (!goodsAnticipateValueVo.getState().equals(0)) {
return ResponseDto.failure("预约状态为已开启或已结束,不可删除!");
}
//删除sku助力相关
goblinRedisUtils.delSharePeopleBySkuId(skuId);
//mysql删除
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
sqlValue.add(new Object[]{
......
......@@ -104,6 +104,14 @@ public class GoblinMongoUtils {
GoblinGoodsAnticipateVo.class, GoblinGoodsAnticipateVo.class.getSimpleName()) != null;
}
/**
* 根据名称查询预约
*/
public GoblinGoodsAnticipateVo getAnticipateVoBySku(String antId) {
return mongoTemplate.findOne(Query.query(Criteria.where("antId").is(antId)),
GoblinGoodsAnticipateVo.class, GoblinGoodsAnticipateVo.class.getSimpleName());
}
/**
* 新增预约
*/
......@@ -183,6 +191,27 @@ public class GoblinMongoUtils {
mongoTemplate.updateFirst(query, update, GoblinGoodsAnticipateValueVo.class.getSimpleName());
}
public void setGoblinGoodsAnticipateShareVo(GoblinGoodsAnticipateShareVo goblinGoodsAnticipateShareVo){
mongoTemplate.insert(goblinGoodsAnticipateShareVo,GoblinGoodsAnticipateShareVo.class.getSimpleName());
}
public GoblinGoodsAnticipateShareVo getShareVoBySid(String sid){
return mongoTemplate.findOne(Query.query(Criteria.where("sid").is(sid)),
GoblinGoodsAnticipateShareVo.class, GoblinGoodsAnticipateShareVo.class.getSimpleName());
}
/**
* 分享id和助力人id 查询助力信息
*/
public GoblinGoodsAnticipateHelpVo getHelpVo(String sid,String uid){
return mongoTemplate.findOne(Query.query(Criteria.where("sid").is(sid).and("helpUid").is(uid)),
GoblinGoodsAnticipateHelpVo.class, GoblinGoodsAnticipateHelpVo.class.getSimpleName());
}
public void setHelpVo(GoblinGoodsAnticipateHelpVo goodsAnticipateHelpVo){
mongoTemplate.insert(goodsAnticipateHelpVo,GoblinGoodsAnticipateHelpVo.class.getSimpleName());
}
/* ---------------------------------------- 平台分类数据源 ---------------------------------------- */
public List<GoblinSelfGoodsCategoryVo> getSelfGoodsCategoryVos() {
......
......@@ -157,6 +157,70 @@ public class GoblinRedisUtils {
}
}
/**
* 存用户助力关联
*/
public void setShare(String skuId, String uid,Integer people) {
String key = GoblinRedisConst.ANTICIPATE_SHARE_UID_SKUID.concat(uid).concat(":").concat(skuId);
//获取缓存中是否有创建助力
redisUtil.set(key,people);
}
/**
* 缓存sku预约助力人数
*/
public void setSharePeopleBySkuId(String skuId,Integer people){
String key = GoblinRedisConst.ANTICIPATE_SHARE_SKUID_PEOPLE.concat(skuId);
redisUtil.set(key,people);
}
/**
* 缓存sku预约助力人数
*/
public Integer getSharePeopleBySkuId(String skuId){
String key = GoblinRedisConst.ANTICIPATE_SHARE_SKUID_PEOPLE.concat(skuId);
return (Integer) redisUtil.get(key);
}
/**
* 缓存sku预约助力人数
*/
public void delSharePeopleBySkuId(String skuId){
String key = GoblinRedisConst.ANTICIPATE_SHARE_SKUID_PEOPLE.concat(skuId);
redisUtil.del(key);
}
/**
* 获取用户是否开启关联助力
*/
public Integer getShare(String skuId,String uid){
String key = GoblinRedisConst.ANTICIPATE_SHARE_UID_SKUID.concat(uid).concat(":").concat(skuId);
return (Integer) redisUtil.get(key);
}
/**
* 保存用户头像
*/
public void setHelpUserAvatar(String sid, String avatar) {
Object list = redisUtil.get(GoblinRedisConst.ANTICIPATE_SHARE_HELP_AVATAR.concat(sid));
List<String> urlList = list != null ? (List<String>) list : CollectionUtil.arrayListString();
urlList.add(avatar);
redisUtil.set(GoblinRedisConst.ANTICIPATE_SHARE_HELP_AVATAR.concat(sid), urlList);
}
/**
* 获取用户预约头像
*/
public List<String> getHelpUserAvatar(String sid) {
String rdk = GoblinRedisConst.ANTICIPATE_SHARE_HELP_AVATAR.concat(sid);
Object obj = redisUtil.get(rdk);
if (obj == null) {
return CollectionUtil.arrayListString();
} else {
return (List<String>) obj;
}
}
/* ---------------------------------------- sku库存相关 ---------------------------------------- */
public void setSkuStock(String marketPre, String skuId, Integer stock) {
String rk = GoblinRedisConst.REAL_STOCK_SKU;
......
......@@ -2,4 +2,4 @@ spring:
application:
name: liquidnet-service-goblin
profiles:
active: dev
\ No newline at end of file
active: test
\ No newline at end of file
......@@ -140,6 +140,8 @@ goblin_goods_anticipate_value=INSERT INTO goblin_goods_anticipate_value (uid,ant
goblin_goods_anticipate_value_update_proper=UPDATE goblin_goods_anticipate_value SET about_people = ?,update_date = NOW() WHERE sku_id = ?
goblin_goods_anticipate_value_delete=UPDATE goblin_goods_anticipate_value SET `del_tag` = 1,update_date = NOW() WHERE sku_id = ?
goblin_goods_anticipate_user=INSERT INTO goblin_goods_anticipate_user(uid,sku_id,phone,state,created_date) VALUES(?,?,?,?,?)
goblin_goods_anticipate_help=INSERT INTO goblin_goods_anticipate_help(sid,help_uid,created_date) VALUES(?,?,?)
goblin_goods_anticipate_share=INSERT INTO goblin_goods_anticipate_share(sid,uid,sku_id,url,created_date) VALUES(?,?,?,?,?)
goblin_goods_anticipate_user_update=UPDATE goblin_goods_anticipate_user SET state = 1 WHERE uid = ? AND sku_id = ?
goblin_goods_anticipate_user_update_sku=UPDATE goblin_goods_anticipate_user SET state = 1 WHERE sku_id = ?
#---- \u4E1A\u52A1\u8D26\u53F7\u8BB0\u5F55
......
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