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

Commit 66f61300 authored by jiangxiulong's avatar jiangxiulong

Merge remote-tracking branch 'origin/dev_stone' into dev_stone

parents f3b69670 60b0cc2f
......@@ -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";
......
......@@ -2,7 +2,10 @@ package com.liquidnet.service.stone.service;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.stone.entity.StoneScoreItems;
import com.liquidnet.service.stone.vo.StoneItemListVo;
import com.liquidnet.service.stone.vo.StoneScoreItemVo;
import java.util.List;
......@@ -18,4 +21,6 @@ public interface IStoneScoreItemsService {
PageInfo<List<StoneItemListVo>> itemList(Integer page, Integer size);
ResponseDto<StoneScoreItemVo> itemDetails(String itemId);
}
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 com.liquidnet.service.stone.vo.StoneUserVo;
import java.util.List;
/**
* <p>
* 积分日志表 服务类
......@@ -10,4 +18,55 @@ 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> doTask(Integer taskId);
ResponseDto<StoneUserVo> taskDetail();
/**
* 积分详情
* @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;
}
}
package com.liquidnet.service.stone.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
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 lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
* 积分物品表
* </p>
*
* @author liquidnet
* @since 2021-10-19
*/
@Data
@ApiModel
public class StoneScoreItemVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(position = 0, value = "积分物品id")
private String itemId;
@ApiModelProperty(position = 1, value = "积分物品名称")
private String targetTitle;
@ApiModelProperty(position = 2, value = "目标类型[1-券|1x-商品维度|2x-演出维度]")
private Integer type;
@ApiModelProperty(position = 3, value = "展示图")
private String img;
@ApiModelProperty(position = 4, value = "所需积分")
private Integer score;
@ApiModelProperty(position = 5, value = "所需金额")
private BigDecimal price;
@ApiModelProperty(position = 6, value = "限购数量[0-不限]")
private Integer limitCount;
@ApiModelProperty(position = 7, value = "商品详情")
private String details;
@ApiModelProperty(position = 8, value = "注意事项")
private String notice;
@ApiModelProperty(position = 9, value = "状态[-999-全部|-1-删除|0-未上架|1-已上架|2-定时上架|7-已下架|8-售罄]")
private Integer status;
private static final StoneScoreItemVo obj = new StoneScoreItemVo();
public static StoneScoreItemVo getNew() {
try {
return (StoneScoreItemVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new StoneScoreItemVo();
}
}
public StoneScoreItemVo copy(StoneScoreItems source) {
if (null == source) return this;
this.setItemId(source.getItemId());
this.setTargetTitle(source.getTargetTitle());
this.setType(source.getType());
this.setImg(source.getImg());
this.setScore(source.getScore().intValue());
this.setPrice(source.getPrice());
this.setLimitCount(source.getLimitCount());
this.setDetails(source.getDetails());
this.setNotice(source.getNotice());
this.setStatus(source.getStatus());
return this;
}
}
......@@ -5,8 +5,11 @@ import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.utils.poi.ExcelUtil;
import com.liquidnet.client.admin.zhengzai.kylin.dto.OrderExportVo;
import com.liquidnet.client.admin.zhengzai.stone.service.IItemService;
import com.liquidnet.client.admin.zhengzai.stone.service.IScoreService;
import com.liquidnet.client.admin.zhengzai.stone.service.dto.StoneScoreListExportDto;
import com.liquidnet.client.admin.zhengzai.stone.service.vo.StoneUserScoreDetailVo;
import com.liquidnet.service.stone.dto.StoneScoreListDto;
import com.liquidnet.service.stone.entity.StoneScoreItems;
......@@ -22,6 +25,10 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Api(tags = "积分明细")
@Controller
@RequestMapping("stone/logs")
......@@ -32,19 +39,19 @@ public class StoneLogsController extends BaseController {
private IScoreService iScoreService;
@GetMapping("integralStore")
@ApiOperation(value = "积分明细:列表View",position = 0)
@ApiOperation(value = "积分明细:列表View", position = 0)
public String integralStore(ModelMap mmap) {
return prefix + "/integralList";
}
@GetMapping("integralStoreEdit")
@ApiOperation(value = "积分明细:详情View",position = 1)
public String integralStoreEdit (ModelMap mmap) {
@ApiOperation(value = "积分明细:详情View", position = 1)
public String integralStoreEdit(ModelMap mmap) {
return prefix + "/integralDetail";
}
@Log(title = "积分明细:列表")
@ApiOperation(value = "积分明细:列表",position = 2)
@ApiOperation(value = "积分明细:列表", position = 2)
@PostMapping("list")
@ResponseBody
public TableDataInfo list(StoneScoreListParam listParam) {
......@@ -58,7 +65,7 @@ public class StoneLogsController extends BaseController {
@Log(title = "积分明细:修改状态")
@PutMapping("change/status")
@ApiOperation(value = "积分明细:修改状态",position = 3)
@ApiOperation(value = "积分明细:修改状态", position = 3)
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "uid", value = "用户id"),
......@@ -71,7 +78,7 @@ public class StoneLogsController extends BaseController {
@Log(title = "积分明细:详情")
@GetMapping("details")
@ApiOperation(value = "积分明细:详情",position = 4)
@ApiOperation(value = "积分明细:详情", position = 4)
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "uid", value = "用户id"),
......@@ -80,4 +87,13 @@ public class StoneLogsController extends BaseController {
StoneUserScoreDetailVo result = iScoreService.userScoreDetail(uid);
return AjaxResult.success(result);
}
@Log(title = "积分明细:导出列表[根据uid]")
@PostMapping("list/export")
@ResponseBody
public AjaxResult export(String uidString) {
List<StoneScoreListExportDto> list = iScoreService.listExport(uidString.split(","));
ExcelUtil<StoneScoreListExportDto> util = new ExcelUtil(StoneScoreListExportDto.class);
return util.exportExcel(list, "积分导出");
}
}
package com.liquidnet.client.admin.zhengzai.stone.service;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.zhengzai.stone.service.dto.StoneScoreListExportDto;
import com.liquidnet.client.admin.zhengzai.stone.service.vo.StoneUserScoreDetailVo;
import com.liquidnet.service.stone.dto.StoneScoreListDto;
import com.liquidnet.service.stone.param.StoneScoreListParam;
import java.util.ArrayList;
import java.util.List;
public interface IScoreService {
PageInfo<StoneScoreListDto> list(StoneScoreListParam param);
List<StoneScoreListExportDto> listExport(String[] uidList);
/**
* 修改 用户积分状态
* @param uid 用户ID
* @param status 状态[-999-全部|1-正常|2-冻结]
*
* @param uid 用户ID
* @param status 状态[-999-全部|1-正常|2-冻结]
* @return
*/
String changeStatus(String uid, Integer status);
/**
* 获取 用户积分 详情
* @param uid 用户ID
*
* @param uid 用户ID
* @return
*/
StoneUserScoreDetailVo userScoreDetail(String uid);
......
package com.liquidnet.client.admin.zhengzai.stone.service.dto;
import com.liquidnet.client.admin.common.annotation.Excel;
import com.liquidnet.client.admin.zhengzai.kylin.dto.OrderExportVo;
import com.liquidnet.service.kylin.dao.OrderExportDao;
import com.liquidnet.service.stone.dto.StoneScoreListDto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class StoneScoreListExportDto implements Cloneable {
/**
* 昵称
*/
@Excel(name = "昵称", cellType = Excel.ColumnType.STRING)
private String nickName;
/**
* 头像
*/
@Excel(name = "头像", cellType = Excel.ColumnType.STRING)
private String avatar;
/**
* 手机号
*/
@Excel(name = "手机号", cellType = Excel.ColumnType.STRING)
private String mobile;
/**
* 用户id
*/
@Excel(name = "用户id", cellType = Excel.ColumnType.STRING)
private String uid;
/**
* 状态[-999-全部|1-正常|2-冻结]
*/
@Excel(name = "状态[-999-全部|1-正常|2-冻结]", cellType = Excel.ColumnType.NUMERIC)
private Integer status;
/**
* 总积分
*/
@Excel(name = "总积分", cellType = Excel.ColumnType.NUMERIC)
private BigDecimal scoreAll;
/**
* 已用积分
*/
@Excel(name = "已用积分", cellType = Excel.ColumnType.NUMERIC)
private BigDecimal scoreUse;
/**
* 剩余积分
*/
@Excel(name = "剩余积分", cellType = Excel.ColumnType.NUMERIC)
private BigDecimal scoreRest;
/**
* 今日是否签到
*/
@Excel(name = "今日是否签到", cellType = Excel.ColumnType.NUMERIC)
private Integer signIn;
private static final StoneScoreListExportDto obj = new StoneScoreListExportDto();
public static StoneScoreListExportDto getNew() {
try {
return (StoneScoreListExportDto) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new StoneScoreListExportDto();
}
public StoneScoreListExportDto copyExportVo(StoneScoreListDto source) {
this.setAvatar(source.getAvatar());
this.setMobile(source.getMobile());
this.setNickName(source.getNickName());
this.setScoreAll(source.getScoreAll());
this.setScoreRest(source.getScoreRest());
this.setScoreUse(source.getScoreUse());
this.setSignIn(source.getSignIn());
this.setUid(source.getUid());
this.setStatus(source.getStatus());
return this;
}
}
......@@ -2,11 +2,14 @@ package com.liquidnet.client.admin.zhengzai.stone.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.zhengzai.kylin.dto.OrderExportVo;
import com.liquidnet.client.admin.zhengzai.stone.service.IScoreService;
import com.liquidnet.client.admin.zhengzai.stone.service.dto.StoneScoreListExportDto;
import com.liquidnet.client.admin.zhengzai.stone.service.utils.StoneMongoUtils;
import com.liquidnet.client.admin.zhengzai.stone.service.utils.StoneRedisUtils;
import com.liquidnet.client.admin.zhengzai.stone.service.vo.StoneUserScoreDetailVo;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.kylin.dao.OrderExportDao;
import com.liquidnet.service.stone.dto.StoneScoreListDto;
import com.liquidnet.service.stone.entity.StoneScoreLogs;
import com.liquidnet.service.stone.entity.StoneScoreUser;
......@@ -19,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
......@@ -44,6 +48,16 @@ public class ScoreServiceImpl implements IScoreService {
return pageInfo;
}
@Override
public List<StoneScoreListExportDto> listExport(String[] uidList) {
List<StoneScoreListDto> list = stoneScoreUserMapper.listExport(uidList);
List<StoneScoreListExportDto> voList = new ArrayList();
for (StoneScoreListDto item :list){
voList.add(StoneScoreListExportDto.getNew().copyExportVo(item));
}
return voList;
}
@Override
public String changeStatus(String uid, Integer status) {
if (!(status == 1 || status == 2)) {
......@@ -64,7 +78,7 @@ public class ScoreServiceImpl implements IScoreService {
data.setUpdatedAt(LocalDateTime.now());
count = stoneScoreUserMapper.update(data, Wrappers.lambdaQuery(StoneScoreUser.class).eq(StoneScoreUser::getUid, uid));
//redis
redisUtils.setUserData(data.getUid(), vo);
redisUtils.setUserData(uid, vo);
//mongo
mongoUtils.userUpdateByUid(vo);
} else {
......@@ -73,7 +87,7 @@ public class ScoreServiceImpl implements IScoreService {
data.setCreatedAt(LocalDateTime.now());
count = stoneScoreUserMapper.insert(data);
//redis
redisUtils.setUserData(data.getUid(), vo);
redisUtils.setUserData(uid, vo);
//mongo
mongoUtils.userCreate(vo);
}
......
......@@ -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();
}
}
......@@ -4,6 +4,7 @@ import com.liquidnet.service.stone.dto.StoneScoreListDto;
import com.liquidnet.service.stone.param.StoneScoreListParam;
import com.liquidnet.service.stone.entity.StoneScoreUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -19,4 +20,6 @@ public interface StoneScoreUserMapper extends BaseMapper<StoneScoreUser> {
List<StoneScoreListDto> list(StoneScoreListParam param);
List<StoneScoreListDto> listExport(@Param("uids")String[] uids);
}
......@@ -38,6 +38,11 @@ public class StoneTaskVo implements Serializable,Cloneable {
*/
private String taskTime;
/**
* 是否完成
*/
private Integer isFinish;
private static final StoneTaskVo obj = new StoneTaskVo();
public static StoneTaskVo getNew() {
try {
......
......@@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
......@@ -30,10 +31,10 @@ public class StoneUserVo implements Serializable, Cloneable {
private Integer status;
/**
* 每日任务:签到
* 每日任务:购买演出
* 每日任务:购买商品
* 每日任务:划卡
* 每日任务:签到
* 一次性任务:关注公众号
* 一次性任务:完善信息
* 一次性任务:完善头像
......@@ -50,6 +51,7 @@ public class StoneUserVo implements Serializable, Cloneable {
}
private List<StoneTaskVo> initTask() {
task = new ArrayList();
String[] taskName = new String[]{
"签到", "购买演出票务", "购买商品", "在场划卡10次",
"关注摩登天空服务号", "完善个人信息", "完善个人照片", "打开消息通知", "首次体验在场"
......@@ -64,7 +66,8 @@ public class StoneUserVo implements Serializable, Cloneable {
vo.setTaskType(1);
}
vo.setTaskCount(0);
vo.setTaskTime("");
vo.setTaskTime("2020-12-01");
vo.setIsFinish(0);
task.add(vo);
}
return task;
......
......@@ -39,4 +39,29 @@
left join stone_score_logs sslog on sslog.uid = hu.uid
group by hu.uid;
</select>
<select id="listExport" parameterType="java.util.Map" resultMap="StoneScoreListDtoResult">
select hu.*,
(case when score <![CDATA[>]]> 0 then sum(score) else 0 END) as 'score_all',
(case when score <![CDATA[<]]> 0 then sum(score) else 0 END) as 'score_use',
('score_all' - 'score_use') as 'score_rest'
from (select nickname,
mobile,
au.uid,
IFNULL(ssu.status,1) as 'status'
from adam_user as au
inner join adam_user_info aui on au.uid = aui.uid
left join stone_score_user ssu on ssu.uid = aui.uid
<where>
au.uid IN
<foreach collection="uids" item="uid" index="index" open="(" close=")" separator=",">
'${uid}'
</foreach>
</where>
) as hu
left join stone_score_logs sslog on sslog.uid = hu.uid
group by hu.uid;
</select>
</mapper>
......@@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.stone.service.IStoneScoreItemsService;
import com.liquidnet.service.stone.vo.StoneItemListVo;
import com.liquidnet.service.stone.vo.StoneScoreItemVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
......@@ -29,4 +30,12 @@ public class StoneItemController {
public ResponseDto<PageInfo<List<StoneItemListVo>>> itemList(@RequestParam("page") @Valid Integer page) {
return ResponseDto.success(stoneScoreItemsService.itemList(page, 40));
}
@GetMapping("details")
@ApiOperation("积分商品详情")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<StoneScoreItemVo> itemDetails(@RequestParam("itemId") @Valid String itemId) {
return stoneScoreItemsService.itemDetails(itemId);
}
}
package com.liquidnet.service.stone.controller;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.stone.vo.StoneItemListVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
@Api(tags = "积分-订单相关")
@RestController
@RequestMapping("order")
@Validated
public class StoneOrderController {
@PostMapping("pre")
@ApiOperation("纯积分商品下单")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<String> order(@RequestParam("itemId") @Valid String itemId,
@RequestParam("number") @Valid Integer number) {
return ResponseDto.success();
}
@GetMapping("list")
@ApiOperation("积分订单列表")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<PageInfo<List<StoneItemListVo>>> orderList(@RequestParam("page") @Valid Integer page) {
return ResponseDto.success();
}
}
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 com.liquidnet.service.stone.vo.StoneUserVo;
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.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(tags = "积分-用户相关")
......@@ -21,12 +23,68 @@ public class StoneUserController {
@Autowired
IStoneScoreUserService stoneScoreUserService;
@Autowired
IStoneScoreLogsService stoneScoreLogsService;
@GetMapping("info")
@ApiOperation("积分商品列表")
@ApiOperation("用户信息")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<StoneScoreListDto> stoneUserInfo() {
return ResponseDto.success(stoneScoreUserService.stoneUserInfo());
}
@PostMapping("doTask")
@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> doTask(@RequestParam(value = "taskId", required = true) Integer taskId) {
return stoneScoreLogsService.doTask(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));
}
@PostMapping("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));
}
@PostMapping("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));
}
@GetMapping("task/detail")
@ApiOperation("用户任务详情")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<StoneUserVo> taskDetail() {
return stoneScoreLogsService.taskDetail();
}
}
package com.liquidnet.service.stone.service.impl;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.stone.entity.StoneScoreItems;
import com.liquidnet.service.stone.service.IStoneScoreItemsService;
......@@ -8,6 +9,7 @@ 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.StoneScoreItemVo;
import io.netty.util.internal.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -66,4 +68,14 @@ public class StoneScoreItemsServiceImpl implements IStoneScoreItemsService {
log.info(UserPathDto.setData("积分商品列表", "", voList));
return mPageInfo;
}
@Override
public ResponseDto<StoneScoreItemVo> itemDetails(String itemId) {
StoneScoreItems data = redisUtils.getItemData(itemId);
if(redisUtils.getStoneGeneralSurplus(itemId)<=0){
data.setStatus(8);
}
StoneScoreItemVo vo = StoneScoreItemVo.getNew().copy(data);
return ResponseDto.success(vo);
}
}
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,171 @@ 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> doTask(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(2) && 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 ResponseDto<StoneUserVo> taskDetail() {
String uid = CurrentUtil.getCurrentUid();
StoneUserVo vo = stoneRedisUtils.getUserData(uid);
List<StoneTaskVo> taskList = vo.getTask();
for (int i = 0; i < taskList.size(); i++) {
StoneTaskVo item = taskList.get(i);
if (item.getTaskType().equals(1) && item.getTaskTime().equals(DateUtil.getNowTime(DateUtil.DATE_SMALL_STR))) {
item.setIsFinish(1);
} else if (item.getTaskType().equals(2) && item.getTaskCount() >= 1) {
item.setIsFinish(1);
} else {
item.setIsFinish(0);
}
taskList.set(i, item);
}
vo.setTask(taskList);
return ResponseDto.success(vo);
}
@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