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

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

提交 接口

parent b5b0bed2
......@@ -7,8 +7,8 @@ public class StoneConstant {
public static final String USER=CTX.concat("user:");
//item
public static final String ITEM=CTX.concat("item:");
//itemList 积分商品列表
public static final String ITEM_LIST=ITEM.concat("list");
//logsList 积分日志列表
public static final String LOGS_LIST=ITEM.concat("logs:list:");
//剩余库存
public static final String SURPLUS_GENERAL = "surplusGeneral";
......
package com.liquidnet.service.stone.service;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.stone.entity.StoneScoreLogs;
import com.liquidnet.service.stone.vo.StoneLogsListVo;
import java.util.List;
/**
* <p>
* 积分日志表 服务类
......@@ -10,4 +17,50 @@ package com.liquidnet.service.stone.service;
*/
public interface IStoneScoreLogsService {
/**
* 减少积分
*
* @param uid 用户ID
* @param score 变更积分 正数
* @param taskId [2111-admin访问]
* @param content 变更原因
* @return
*/
String deScore(String uid, Integer score, Integer taskId, String content);
/**
* 增加积分
*
* @param uid 用户ID
* @param score 变更积分 正数
* @param taskId [2111-admin访问]
* @param content 变更原因
* @return
*/
String inScore(String uid, Integer score, Integer taskId, String content);
/**
* 做任务
*
* @param taskId [
* taskId 0 每日任务:签到
* taskId 1 每日任务:购买演出
* taskId 2 每日任务:购买商品
* taskId 3 每日任务:划卡
* taskId 4 一次性任务:关注公众号
* taskId 5 一次性任务:完善信息
* taskId 6 一次性任务:完善头像
* taskId 7 一次性任务:打开消息推送
* taskId 8 一次性任务:体验在场
* ]
* @return
*/
ResponseDto<String> task(Integer taskId);
/**
* 积分详情
* @param page
* @return
*/
PageInfo<List<StoneLogsListVo>> logList(Integer page);
}
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.StoneScoreLogs;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@ApiModel
public class StoneLogsListVo implements Serializable, Cloneable {
/**
* id
*/
@ApiModelProperty(value = "id", example = "1")
private String logsId;
/**
* 积分物品封面图
*/
@ApiModelProperty(value = "积分物品封面图", example = "http://xxxxx.png")
private Integer score;
/**
* 积分物品名称
*/
@ApiModelProperty(value = "积分物品名称", example = "测试券")
private String content;
/**
* 目标类型[1-券|1x-商品维度|2x-演出维度]
*/
@ApiModelProperty(value = "目标类型[1-券|1x-商品维度|2x-演出维度]", example = "1")
private String createdAt;
private static final StoneLogsListVo obj = new StoneLogsListVo();
public static StoneLogsListVo getNew() {
try {
return (StoneLogsListVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new StoneLogsListVo();
}
}
public StoneLogsListVo copy(StoneScoreLogs source) {
if (null == source) return this;
this.setLogsId(source.getLogsId());
this.setScore(source.getScore().intValue());
this.setContent(source.getContent());
this.setCreatedAt(DateUtil.Formatter.yyyyMMddHHmmss.format(source.getCreatedAt()));
return this;
}
}
......@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import com.liquidnet.service.stone.dto.StoneScoreListDto;
import lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -18,7 +20,7 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class StoneScoreLogs implements Serializable {
public class StoneScoreLogs implements Serializable ,Cloneable{
private static final long serialVersionUID = 1L;
......@@ -56,5 +58,13 @@ public class StoneScoreLogs implements Serializable {
private String comment;
private static final StoneScoreLogs obj = new StoneScoreLogs();
public static StoneScoreLogs getNew() {
try {
return (StoneScoreLogs) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new StoneScoreLogs();
}
}
......@@ -30,10 +30,10 @@ public class StoneUserVo implements Serializable, Cloneable {
private Integer status;
/**
* 每日任务:签到
* 每日任务:购买演出
* 每日任务:购买商品
* 每日任务:划卡
* 每日任务:签到
* 一次性任务:关注公众号
* 一次性任务:完善信息
* 一次性任务:完善头像
......
package com.liquidnet.service.stone.controller;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.stone.dto.StoneScoreListDto;
import com.liquidnet.service.stone.service.IStoneScoreLogsService;
import com.liquidnet.service.stone.service.IStoneScoreUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import com.liquidnet.service.stone.vo.StoneLogsListVo;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "积分-用户相关")
@RestController
......@@ -21,6 +25,8 @@ public class StoneUserController {
@Autowired
IStoneScoreUserService stoneScoreUserService;
@Autowired
IStoneScoreLogsService stoneScoreLogsService;
@GetMapping("info")
@ApiOperation("积分商品列表")
......@@ -29,4 +35,51 @@ public class StoneUserController {
return ResponseDto.success(stoneScoreUserService.stoneUserInfo());
}
@GetMapping("task")
@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 = ""),
})
public ResponseDto<String> task(@RequestParam(value = "taskId", required = true) Integer taskId) {
return stoneScoreLogsService.task(taskId);
}
@GetMapping("logs/list")
@ApiOperation("积分详情列表")
@ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "Integer", name = "page", value = "页数", example = ""),
})
public ResponseDto<PageInfo<List<StoneLogsListVo>>> logList(@RequestParam(value = "page", required = true) Integer page) {
return ResponseDto.success(stoneScoreLogsService.logList(page));
}
@GetMapping("logs/in2111")
@ApiOperation("增加积分")
@ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "uid", value = "用户Id", example = ""),
@ApiImplicitParam(type = "form", required = true, dataType = "Integer", name = "score", value = "积分", example = ""),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "content", value = "内容", example = ""),
})
public ResponseDto<String> inScore(@RequestParam(value = "uid", required = true) String uid,
@RequestParam(value = "score", required = true) Integer score,
@RequestParam(value = "content", required = true) String content) {
return ResponseDto.success(stoneScoreLogsService.inScore(uid,score,2111,content));
}
@GetMapping("logs/de2111")
@ApiOperation("减少积分")
@ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "uid", value = "用户Id", example = ""),
@ApiImplicitParam(type = "form", required = true, dataType = "Integer", name = "score", value = "积分", example = ""),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "content", value = "内容", example = ""),
})
public ResponseDto<String> deScore(@RequestParam(value = "uid", required = true) String uid,
@RequestParam(value = "score", required = true) Integer score,
@RequestParam(value = "content", required = true) String content) {
return ResponseDto.success(stoneScoreLogsService.deScore(uid,score,2111,content));
}
}
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.DateUtil;
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.StoneScoreLogs;
import com.liquidnet.service.stone.service.IStoneScoreLogsService;
import com.liquidnet.service.stone.util.ObjectUtils;
import com.liquidnet.service.stone.util.StoneMongoUtils;
import com.liquidnet.service.stone.util.StoneRedisUtils;
import com.liquidnet.service.stone.vo.StoneItemListVo;
import com.liquidnet.service.stone.vo.StoneLogsListVo;
import com.liquidnet.service.stone.vo.StoneTaskVo;
import com.liquidnet.service.stone.vo.StoneUserVo;
import lombok.extern.slf4j.Slf4j;
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;
/**
* <p>
* 积分日志表 服务实现类
......@@ -12,6 +35,151 @@ import org.springframework.stereotype.Service;
* @since 2021-10-19
*/
@Service
@Slf4j
public class StoneScoreLogsServiceImpl implements IStoneScoreLogsService {
@Autowired
StoneRedisUtils stoneRedisUtils;
@Autowired
StoneMongoUtils stoneMongoUtils;
@Override
public String deScore(String uid, Integer score, Integer TaskId, String reason) {
if (score <= 0) {
return "积分不能小于0";
}
if (TaskId == 2111) {
changeUse(uid, score, reason, reason);
return "成功";
} else {
changeUse(uid, score, "", reason);
return "成功";
}
}
@Override
public String inScore(String uid, Integer score, Integer TaskId, String reason) {
if (score <= 0) {
return "积分不能小于0";
}
if (TaskId == 2111) {
changeRest(uid, score, reason, reason);
return "成功";
} else {
changeRest(uid, score, "", reason);
return "成功";
}
}
@Override
public ResponseDto<String> task(Integer taskId) {
String uid = CurrentUtil.getCurrentUid();
StoneUserVo vo = stoneRedisUtils.getUserData(uid);
List<StoneTaskVo> taskList = vo.getTask();
boolean isIn = false; //标示是否操作
for (int i = 0; i < taskList.size(); i++) {
StoneTaskVo item = taskList.get(i);
//判断任务
if (item.getTaskId().equals(taskId)) {
if (item.getTaskType().equals(1) && item.getTaskTime().equals(DateUtil.getNowTime(DateUtil.DATE_SMALL_STR))) {
return ResponseDto.failure("今日已完成");
} else if (item.getTaskType().equals(1) && item.getTaskCount() >= 1) {
return ResponseDto.failure("该任务已完成");
} else {
//记录完成任务
if (taskId == 0) { //每日签到
if (DateUtil.intervalDays(DateUtil.parse(item.getTaskTime(), "yyyy-MM-dd"),
DateUtil.parse(DateUtil.getNowTime(), "yyyy-MM-dd")
) == 1L) {//连续签到
if (item.getTaskCount() >= 7) {
item.setTaskCount(1);
} else {
item.setTaskCount(item.getTaskCount() + 1);
}
} else {//非连续签到
item.setTaskCount(1);
}
} else {//其他
item.setTaskCount(1);
}
item.setTaskTime(DateUtil.getNowTime(DateUtil.DATE_SMALL_STR));
taskList.set(i, item);
vo.setTask(taskList);
stoneMongoUtils.userUpdateByUid(vo);
//添加积分
inScore(uid, taskId, taskId, item.getTaskName());
isIn = true;
break;
}
}
}
return isIn ? ResponseDto.success("成功") : ResponseDto.failure("任务不存在");
}
@Override
public PageInfo<List<StoneLogsListVo>> logList(Integer page) {
String uid = CurrentUtil.getCurrentUid();
PageInfo<List<StoneLogsListVo>> mPageInfo;
int size = 40;
if (page == null || page == 1 || page == 0) {
page = 1;
}
List<StoneScoreLogs> voList;
long count;
if (page == 1) {
voList = stoneRedisUtils.getLogsList(uid);
count = voList.size();
} else {
HashMap<String, Object> info = stoneMongoUtils.itemListPage(page, size);
try {
voList = (List<StoneScoreLogs>) info.get("total");
count = (long) info.get("data");
} catch (Exception e) {
voList = new ArrayList();
count = 0;
}
}
List<StoneLogsListVo> returnVoList = ObjectUtils.getStoneLogsListVoArrayList();
for (int i = 0; i < voList.size(); i++) {
StoneScoreLogs vo = voList.get(i);
StoneLogsListVo returnVo = StoneLogsListVo.getNew().copy(vo);
returnVoList.add(returnVo);
}
mPageInfo = new PageInfo(returnVoList);
mPageInfo.setTotal(count);
log.info(UserPathDto.setData("积分日志列表", "", voList));
return mPageInfo;
}
private void changeRest(String uid, Integer score, String reason, String content) {
//redis
stoneRedisUtils.changeUserScoreRest(uid, score);
//mongo
StoneScoreLogs logs = new StoneScoreLogs();
logs.setLogsId(IDGenerator.nextTimeId2());
logs.setContent(content);
logs.setReason(reason);
logs.setUid(uid);
logs.setScore(BigDecimal.valueOf(score));
logs.setCreatedAt(LocalDateTime.now());
stoneMongoUtils.logCreate(logs);
//TODO mysql
}
private void changeUse(String uid, Integer score, String reason, String content) {
//redis
stoneRedisUtils.changeUserScoreUse(uid, -score);
stoneRedisUtils.changeUserScoreRest(uid, -score);
//mongo
StoneScoreLogs logs = new StoneScoreLogs();
logs.setLogsId(IDGenerator.nextTimeId2());
logs.setContent(content);
logs.setReason(reason);
logs.setUid(uid);
logs.setScore(BigDecimal.valueOf(score));
logs.setCreatedAt(LocalDateTime.now());
stoneMongoUtils.logCreate(logs);
//TODO mysql
}
}
package com.liquidnet.service.stone.util;
import com.liquidnet.service.stone.vo.StoneItemListVo;
import com.liquidnet.service.stone.vo.StoneLogsListVo;
import java.util.ArrayList;
public class ObjectUtils {
private static final ArrayList<StoneItemListVo> stoneItemListVoArrayList = new ArrayList<>();
private static final ArrayList<StoneLogsListVo> stoneLogsListVoArrayList = new ArrayList<>();
public static ArrayList<StoneItemListVo> getStoneItemListVoArrayList() {
return (ArrayList<StoneItemListVo>) stoneItemListVoArrayList.clone();
}
public static ArrayList<StoneLogsListVo> getStoneLogsListVoArrayList() {
return (ArrayList<StoneLogsListVo>) stoneLogsListVoArrayList.clone();
}
}
......@@ -3,6 +3,7 @@ package com.liquidnet.service.stone.util;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.stone.entity.StoneScoreItems;
import com.liquidnet.service.stone.entity.StoneScoreLogs;
import com.liquidnet.service.stone.vo.StoneUserVo;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
......@@ -38,18 +39,18 @@ 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;
}
// /**
// * 根据积分物品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;
// }
// /**
// * 查询 积分物品 列表
......@@ -107,4 +108,37 @@ public class StoneMongoUtils {
return result;
}
/**
* 创建 用户积分日志
*
* @param data
* @return
*/
public Object logCreate(StoneScoreLogs data) {
return mongoTemplate.insert(data, StoneScoreLogs.class.getSimpleName());
}
/**
* 获取 用户积分日志 列表
* @param uid
* @param page
* @param size
* @return
*/
public HashMap<String, Object> logList(String uid,int page, int size) {
LocalDateTime now = LocalDateTime.now();
HashMap<String, Object> info = CollectionUtil.mapStringObject();
// 排序 分页
Pageable pageable = PageRequest.of(page - 1, size, Sort.by(Sort.Direction.DESC, "createdAt"));
//条件
Query query = Query.query(Criteria.where("uid").is(uid));
// 查询总数
long count = mongoTemplate.count(query, StoneScoreLogs.class, StoneScoreLogs.class.getSimpleName());
query.with(pageable);
List<StoneScoreLogs> voList = mongoTemplate.find(query, StoneScoreLogs.class, StoneScoreLogs.class.getSimpleName());
info.put("total", count);
info.put("data", voList);
return info;
}
}
......@@ -3,6 +3,7 @@ package com.liquidnet.service.stone.util;
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.vo.StoneUserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -83,6 +84,40 @@ public class StoneRedisUtils {
}
}
/**
* 修改 用户积分 使用
*
* @param uid ID
* @return
*/
public Integer changeUserScoreUse(String uid, Integer general) {
String redisKey = StoneConstant.USE_SCORE.concat(uid).concat(StoneConstant.USE_SCORE);
long result;
if (general > 0) {
result = redisUtil.incr(redisKey, general);
} else {
result = redisUtil.decr(redisKey, Math.abs(general));
}
return (int) result;
}
/**
* 修改 用户积分 剩余
*
* @param uid ID
* @return
*/
public Integer changeUserScoreRest(String uid, Integer general) {
String redisKey = StoneConstant.USE_SCORE.concat(uid).concat(StoneConstant.SURPLUS_SCORE);
long result;
if (general > 0) {
result = redisUtil.incr(redisKey, general);
} else {
result = redisUtil.decr(redisKey, Math.abs(general));
}
return (int) result;
}
/**
* 设置 积分物品 缓存
*
......@@ -134,45 +169,45 @@ public class StoneRedisUtils {
// redisUtil.set(redisKey, dataList);
// }
// /**
// * 添加 积分物品 缓存list
// *
// * @param data
// */
// public void addItemDataList(StoneScoreItems data) {
// String redisKey = StoneConstant.ITEM_LIST;
// Object obj = redisUtil.get(redisKey);
// List<StoneScoreItems> dataList;
// if (obj == null) {
// dataList = mongoUtils.itemList();
// } else {
// dataList = (List<StoneScoreItems>) 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);
// }
/**
* 添加 积分日志 缓存list
*
* @param data
*/
public void addLogsList(String uid,StoneScoreLogs data) {
String redisKey = StoneConstant.LOGS_LIST.concat(uid);
Object obj = redisUtil.get(redisKey);
List<StoneScoreLogs> dataList;
if (obj == null) {
dataList = (List<StoneScoreLogs>) mongoUtils.logList(uid,1,40).get("data");
} else {
dataList = (List<StoneScoreLogs>) 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);
}
// /**
// * 设置 积分物品 缓存list
// */
// public List<StoneScoreItems> getItemDataList() {
// String redisKey = StoneConstant.ITEM_LIST;
// Object obj = redisUtil.get(redisKey);
// if (obj == null) {
// return mongoUtils.itemList();
// } else {
// return (List<StoneScoreItems>) obj;
// }
// }
/**
* 获取 积分日志 缓存list
*/
public List<StoneScoreLogs> getLogsList(String uid) {
String redisKey = StoneConstant.LOGS_LIST.concat(uid);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return (List<StoneScoreLogs>) mongoUtils.logList(uid,1,40).get("data");
} else {
return (List<StoneScoreLogs>) obj;
}
}
/**
* 设置 用户积分 缓存
* 设置 用户任务 缓存
*
* @param uid
* @param data
......@@ -183,7 +218,7 @@ public class StoneRedisUtils {
}
/**
* 获取 用户积分 缓存
* 获取 用户任务 缓存
*
* @param uid
*/
......
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