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

Commit 63ad4bac authored by 胡佳晨's avatar 胡佳晨

用户积分相关

parent 47633cd1
......@@ -13,11 +13,11 @@ public class StoneConstant {
public static final String ORDER_LIST=ITEM.concat("order:list:");
//剩余库存
public static final String SURPLUS_GENERAL = "surplusGeneral";
public static final String SURPLUS_GENERAL = ":surplusGeneral";
//剩余积分
public static final String SURPLUS_SCORE = "surplusScore";
public static final String SURPLUS_SCORE = ":surplusScore";
//已用积分
public static final String USE_SCORE = "useScore";
public static final String USE_SCORE = ":useScore";
//限购
public static final String ITEM_LIMIT = ITEM.concat("limit:");
......
package com.liquidnet.service.stone.vo;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.stone.entity.StoneScoreItems;
import com.liquidnet.service.stone.entity.StoneScoreOrder;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -8,6 +9,7 @@ import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@ApiModel
......@@ -31,9 +33,6 @@ public class StoneOrderListVo implements Serializable, Cloneable {
@ApiModelProperty(value = "支付价格", example = "0.00")
private BigDecimal price;
/**
* 状态状态[-999-全部|-1-删除|0-未上架|1-已上架|2-定时上架|7-已下架|8-售罄]
*/
@ApiModelProperty(value = "状态状态[-999-全部|-1-删除|0-未上架|1-已上架|2-定时上架|7-已下架|8-售罄]", example = "1")
private Integer status;
......@@ -52,4 +51,18 @@ public class StoneOrderListVo implements Serializable, Cloneable {
return new StoneOrderListVo();
}
}
public StoneOrderListVo copy(StoneScoreOrder source,String img) {
if (null == source) return this;
this.setOrderId(source.getItemId());
this.setImg(img);
this.setTargetTitle(source.getTargetTitle());
this.setNumber(source.getNumber());
this.setScore(source.getScore().intValue());
this.setPrice(source.getPrice());
this.setStatus(source.getStatus());
this.setOrderCode(source.getOrderCode());
this.setCreatedAt(DateUtil.Formatter.yyyyMMddHHmmss.format(source.getCreatedAt()));
return this;
}
}
......@@ -18,7 +18,7 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class StoneScoreOrder implements Serializable {
public class StoneScoreOrder implements Serializable,Cloneable {
private static final long serialVersionUID = 1L;
......@@ -127,4 +127,13 @@ public class StoneScoreOrder implements Serializable {
private String comment;
private static final StoneScoreOrder obj = new StoneScoreOrder();
public static StoneScoreOrder getNew() {
try {
return (StoneScoreOrder) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new StoneScoreOrder();
}
}
......@@ -37,7 +37,7 @@ public class StoneUserController {
@ApiOperation("做任务")
@ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "Integer", name = "taskId", value = "任务ID[0-每日任务|1-每日任务:购买演出|2-每日任务:购买商品|3-每日任务:划卡|4-一次性任务:关注公众号|5-一次性任务:完善信息|6-一次性任务:完善头像|7-一次性任务:打开消息推送|8-一次性任务:体验在场]", example = ""),
@ApiImplicitParam(type = "form", required = true, dataType = "Integer", name = "taskId", value = "任务ID[0-每日任务:签到|1-每日任务:购买演出|2-每日任务:购买商品|3-每日任务:划卡|4-一次性任务:关注公众号|5-一次性任务:完善信息|6-一次性任务:完善头像|7-一次性任务:打开消息推送|8-一次性任务:体验在场]", example = ""),
})
public ResponseDto<String> doTask(@RequestParam(value = "taskId", required = true) Integer taskId) {
return stoneScoreLogsService.doTask(taskId);
......
......@@ -111,7 +111,7 @@ public class StoneScoreLogsServiceImpl implements IStoneScoreLogsService {
//redis
stoneRedisUtils.setUserData(uid,vo);
//添加积分
inScore(uid, taskId, taskId, item.getTaskName());
inScore(uid, taskId+1, taskId, item.getTaskName());
isIn = true;
break;
}
......
......@@ -2,21 +2,27 @@ package com.liquidnet.service.stone.service.impl;
import com.github.pagehelper.PageInfo;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.stone.entity.StoneScoreItems;
import com.liquidnet.service.stone.entity.StoneScoreOrder;
import com.liquidnet.service.stone.service.IStoneScoreOrderService;
import com.liquidnet.service.stone.util.StoneMongoUtils;
import com.liquidnet.service.stone.util.StoneRedisUtils;
import com.liquidnet.service.stone.vo.StoneOrderListVo;
import com.liquidnet.service.stone.vo.StoneScoreItemVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
......@@ -40,29 +46,58 @@ public class StoneScoreOrderServiceImpl implements IStoneScoreOrderService {
//判断状态 库存
String uid = CurrentUtil.getCurrentUid();
StoneScoreItems data = stoneRedisUtils.getItemData(itemId);
if(data==null){
if (data == null) {
return ResponseDto.failure("参数异常");
}
if(stoneRedisUtils.getStoneGeneralSurplus(itemId)<=0){
if (stoneRedisUtils.getStoneGeneralSurplus(itemId) <= 0) {
return ResponseDto.failure("该商品库存不足");
}
StoneScoreItemVo vo = StoneScoreItemVo.getNew().copy(data);
if(vo.getStatus()!=1){
if (vo.getStatus() != 1) {
return ResponseDto.failure("该商品不可下单");
}
//获取积分
int needScore = data.getScore().intValue();
if(stoneRedisUtils.getUserScoreRest(uid)<needScore){
int needScore = data.getScore().multiply(BigDecimal.valueOf(number)).intValue();
if (stoneRedisUtils.getUserScoreRest(uid) < needScore) {
return ResponseDto.failure("剩余积分不足");
}
//获取限购
int buyCount = stoneRedisUtils.getItemLimit(uid,itemId);
if((buyCount+number)>data.getLimitCount() && data.getLimitCount()>0){
int buyCount = stoneRedisUtils.getItemLimit(uid, itemId);
if ((buyCount + number) > data.getLimitCount() && data.getLimitCount() > 0) {
return ResponseDto.failure("超出限购数量");
}
//增加限购
stoneRedisUtils.addItemLimit(uid,itemId,number);
stoneRedisUtils.addItemLimit(uid, itemId, number);
//下单
StoneScoreOrder order = StoneScoreOrder.getNew();
order.setOrderId(IDGenerator.nextTimeId());
order.setUid(uid);
Map token = CurrentUtil.getTokenClaims();
order.setUserName(StringUtils.defaultString(((String) token.get("nickname"))));
order.setUserMobile(StringUtils.defaultString(((String) token.get("mobile"))));
order.setItemId(itemId);
order.setTargetTitle(data.getTargetTitle());
order.setNumber(number);
order.setOrderCode(IDGenerator.ticketOrderCode(order.getOrderId()));
order.setPrice(BigDecimal.ZERO);
order.setScore(BigDecimal.valueOf(needScore));
order.setPriceExpress(BigDecimal.ZERO);
order.setPriceActual(BigDecimal.ZERO);
order.setPayType("SCORE");
order.setPaymentType("SCORE");
order.setPaymentId("");
order.setTimePay("");
order.setPayCountdownMinute(0);
order.setStatus(1);
order.setPayStatus(1);
order.setCreatedAt(LocalDateTime.now());
//redis
StoneOrderListVo listVo = StoneOrderListVo.getNew().copy(order, data.getImg());
stoneRedisUtils.setOrderDetails(uid, listVo);
stoneRedisUtils.addOrderList(uid, listVo);
//mongo
stoneMongoUtils.orderCreate(listVo);
//TODO mysql
return null;
}
......@@ -80,7 +115,7 @@ public class StoneScoreOrderServiceImpl implements IStoneScoreOrderService {
voList = stoneRedisUtils.getOrderList(uid);
count = voList.size();
} else {
HashMap<String, Object> info = stoneMongoUtils.orderList(uid,page, size);
HashMap<String, Object> info = stoneMongoUtils.orderList(uid, page, size);
try {
voList = (List<StoneOrderListVo>) info.get("total");
count = (long) info.get("data");
......
......@@ -6,6 +6,7 @@ import com.liquidnet.service.adam.dto.vo.AdamUserInfoSimpleVo;
import com.liquidnet.service.stone.dto.StoneScoreListDto;
import com.liquidnet.service.stone.service.IStoneScoreUserService;
import com.liquidnet.service.stone.util.InnerUtils;
import com.liquidnet.service.stone.util.StoneMongoUtils;
import com.liquidnet.service.stone.util.StoneRedisUtils;
import com.liquidnet.service.stone.vo.StoneTaskVo;
import com.liquidnet.service.stone.vo.StoneUserVo;
......@@ -28,6 +29,8 @@ public class StoneScoreUserServiceImpl implements IStoneScoreUserService {
@Autowired
StoneRedisUtils redisUtils;
@Autowired
StoneMongoUtils mongoUtils;
@Override
public StoneScoreListDto stoneUserInfo() {
......@@ -36,6 +39,16 @@ public class StoneScoreUserServiceImpl implements IStoneScoreUserService {
StoneScoreListDto vo = StoneScoreListDto.getNew();
AdamUserInfoSimpleVo userVo = InnerUtils.getUserInfo();
StoneUserVo userTaskVo = redisUtils.getUserData(uid);
if (userTaskVo == null) {
//TODO mysql 创建用户积分表数据
userTaskVo = StoneUserVo.getNew();
userTaskVo.getTask();
userTaskVo.setUid(uid);
userTaskVo.setStatus(1);
//redis
//mongo
mongoUtils.userCreate(userTaskVo);
}
int rest = redisUtils.getUserScoreRest(uid);
int use = redisUtils.getUserScoreUse(uid);
vo.setAvatar(userVo.getAvatar());
......
......@@ -8,21 +8,24 @@ import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoSimpleVo;
import com.liquidnet.service.base.ResponseDto;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
/**
* 内部接口调用工具类
*/
@Component
public class InnerUtils {
@Value("${liquidnet.service.adam.url}")
private String adamUrl;
private static String adamUrl;
@Value("${liquidnet.service.candy.url}")
private String candyUrl;
public static AdamUserInfoSimpleVo getUserInfo() throws Exception {
MultiValueMap<String, String> header = CollectionUtil.linkedMultiValueMapStringString();
header.add("Accept", "application/json;charset=UTF-8");
header.add("Authorization", "Bearer " + CurrentUtil.getToken());
String resultData = HttpUtil.post("/adam/user/gif/mobile", null, header);
String resultData = HttpUtil.post("http://devadam.zhengzai.tv"+"/adam/user/gif/mobile", null, header);
ResponseDto<AdamUserInfoSimpleVo> innerReturnVo = JsonUtils.fromJson(resultData, new TypeReference<ResponseDto<AdamUserInfoSimpleVo>>() {
});
return innerReturnVo.getData();
......
......@@ -41,31 +41,6 @@ public class StoneMongoUtils {
StoneScoreItems.class, StoneScoreItems.class.getSimpleName());
}
// /**
// * 根据积分物品id修改
// *
// * @param data
// * @return
// */
// public Object itemUpdateById(StoneScoreItems data) {
// Query query = Query.query(Criteria.where("itemId").is(data.getItemId()));
// Update update = Update.fromDocument(Document.parse(JsonUtils.toJson(data)));
// UpdateResult result = mongoTemplate.updateFirst(query, update, StoneScoreItems.class, StoneScoreItems.class.getSimpleName());
// return result;
// }
// /**
// * 查询 积分物品 列表
// *
// * @return
// */
// public List<StoneScoreItems> itemList() {
// Query query = Query.query(Criteria.where("status").ne(-1));
// List<StoneScoreItems> voList = mongoTemplate.find(query.with(Sort.by(Sort.Direction.DESC, "createdAt")).limit(40),
// StoneScoreItems.class, StoneScoreItems.class.getSimpleName());
// return voList;
// }
/**
* 查询 积分物品 列表分页
*
......@@ -97,6 +72,18 @@ public class StoneMongoUtils {
return mongoTemplate.insert(data, StoneUserVo.class.getSimpleName());
}
/**
* 获取 用户积分
*
* @param uid
* @return
*/
public StoneUserVo userGet(String uid) {
Query query = Query.query(Criteria.where("uid").is(uid));
StoneUserVo vo = mongoTemplate.findOne(query, StoneUserVo.class,StoneUserVo.class.getSimpleName());
return vo;
}
/**
* 根据用户id修改 用户积分
*
......@@ -143,6 +130,17 @@ public class StoneMongoUtils {
return info;
}
/**
* 创建 积分订单
*
* @param data
* @return
*/
public Object orderCreate(StoneOrderListVo data) {
return mongoTemplate.insert(data, StoneOrderListVo.class.getSimpleName());
}
/**
* 获取 用户订单 列表
* @param uid
......
......@@ -4,7 +4,6 @@ import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.stone.constant.StoneConstant;
import com.liquidnet.service.stone.entity.StoneScoreItems;
import com.liquidnet.service.stone.entity.StoneScoreLogs;
import com.liquidnet.service.stone.entity.StoneScoreOrder;
import com.liquidnet.service.stone.vo.StoneOrderListVo;
import com.liquidnet.service.stone.vo.StoneUserVo;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -61,7 +60,7 @@ public class StoneRedisUtils {
* @return
*/
public Integer getUserScoreRest(String uid) {
String redisKey = StoneConstant.USE_SCORE.concat(uid).concat(StoneConstant.SURPLUS_SCORE);
String redisKey = StoneConstant.USER.concat(uid).concat(StoneConstant.SURPLUS_SCORE);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return 0;
......@@ -77,7 +76,7 @@ public class StoneRedisUtils {
* @return
*/
public Integer getUserScoreUse(String uid) {
String redisKey = StoneConstant.USE_SCORE.concat(uid).concat(StoneConstant.USE_SCORE);
String redisKey = StoneConstant.USER.concat(uid).concat(StoneConstant.USE_SCORE);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return 0;
......@@ -93,7 +92,7 @@ public class StoneRedisUtils {
* @return
*/
public Integer changeUserScoreUse(String uid, Integer general) {
String redisKey = StoneConstant.USE_SCORE.concat(uid).concat(StoneConstant.USE_SCORE);
String redisKey = StoneConstant.USER.concat(uid).concat(StoneConstant.USE_SCORE);
long result;
if (general > 0) {
result = redisUtil.incr(redisKey, general);
......@@ -110,7 +109,7 @@ public class StoneRedisUtils {
* @return
*/
public Integer changeUserScoreRest(String uid, Integer general) {
String redisKey = StoneConstant.USE_SCORE.concat(uid).concat(StoneConstant.SURPLUS_SCORE);
String redisKey = StoneConstant.USER.concat(uid).concat(StoneConstant.SURPLUS_SCORE);
long result;
if (general > 0) {
result = redisUtil.incr(redisKey, general);
......@@ -228,7 +227,7 @@ public class StoneRedisUtils {
String redisKey = StoneConstant.USER.concat(uid);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return null;
return mongoUtils.userGet(uid);
} else {
return (StoneUserVo) obj;
}
......@@ -236,6 +235,7 @@ public class StoneRedisUtils {
/**
* 获取商品 购买数量
*
* @param uid
* @param itemId
* @return
......@@ -252,6 +252,7 @@ public class StoneRedisUtils {
/**
* 添加商品 购买数量
*
* @param uid
* @param itemId
* @param number
......@@ -261,6 +262,42 @@ public class StoneRedisUtils {
redisUtil.incr(redisKey, number);
}
/**
* 添加 积分订单列表数据
*
* @param uid
* @param data
*/
public void addOrderList(String uid, StoneOrderListVo data) {
String redisKey = StoneConstant.ORDER_LIST.concat(uid);
Object obj = redisUtil.get(redisKey);
List<StoneOrderListVo> dataList;
if (obj == null) {
dataList = (List<StoneOrderListVo>) mongoUtils.orderList(uid, 1, 40).get("data");
} else {
dataList = (List<StoneOrderListVo>) obj;
}
dataList.add(0, data);
if (dataList.size() > 40) {
int size = dataList.size() - 40;
for (int i = 0; i < size; i++) {
dataList.remove(40);
}
}
redisUtil.set(redisKey, dataList);
}
/**
* 覆盖 积分订单数据
*
* @param uid
* @param data
*/
public void setOrderDetails(String uid, StoneOrderListVo data) {
String redisKey = StoneConstant.ORDER_LIST.concat(uid);
redisUtil.set(redisKey, data);
}
/**
* 获取 订单 缓存list
*/
......
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