Merge branch 'test' into dev

This commit is contained in:
GYJ 2024-12-26 01:20:47 +08:00
commit bacd2694c5
10 changed files with 217 additions and 37 deletions

View File

@ -3,6 +3,7 @@ package com.sqx.modules.app.controller.app;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sqx.common.annotation.Debounce;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.entity.UserEntity;
import com.sqx.modules.app.service.IAppleService;
@ -143,6 +144,7 @@ public class AppLoginController {
@RequestMapping(value = "/registerCode", method = RequestMethod.POST)
@ApiOperation("app或h5注册或登录")
@ResponseBody
@Debounce(interval = 2500, value = "phone")
public Result registerCode(@RequestParam String phone,String msg,String platform,Integer sysPhone,
String password,String inviterCode,String wxId,String qdCode) {
return userService.registerCode(phone,msg,platform,sysPhone,password,inviterCode,wxId,qdCode);

View File

@ -25,11 +25,14 @@ public class UserPrizeExchange implements Serializable {
*/
@TableId(type = IdType.ID_WORKER)
private Long id;
/**
* 奖品记录id
* 奖品引用id
*/
private Long discSpinningRecordId;
private Long foreignId;
/**
* 活动类型 task-任务奖励 spinning-大转盘
*/
private String foreignType;
/**
* 奖品名称
*/

View File

@ -1,5 +1,6 @@
package com.sqx.modules.app.service.impl;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.map.MapProxy;
import cn.hutool.core.util.ArrayUtil;
@ -20,6 +21,10 @@ import com.sqx.modules.app.entity.UserPrizeExchange;
import com.sqx.modules.app.service.UserPrizeExchangeService;
import com.sqx.modules.discSpinning.dao.DiscSpinningRecordDao;
import com.sqx.modules.discSpinning.entity.DiscSpinningRecord;
import com.sqx.modules.taskCenter.dao.TaskCenterRecordDao;
import com.sqx.modules.taskCenter.dao.TaskCenterRewardDao;
import com.sqx.modules.taskCenter.entity.TaskCenterRecord;
import com.sqx.modules.taskCenter.entity.TaskCenterReward;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -38,6 +43,10 @@ public class UserPrizeExchangeServiceImpl extends ServiceImpl<UserPrizeExchangeD
@Resource
private DiscSpinningRecordDao discSpinningRecordDao;
@Resource
private TaskCenterRecordDao taskCenterRecordDao;
@Resource
private TaskCenterRewardDao taskCenterRewardDao;
@Resource
private UserDao userDao;
@ -45,7 +54,8 @@ public class UserPrizeExchangeServiceImpl extends ServiceImpl<UserPrizeExchangeD
@Override
public PageUtils page(Map<String, Object> params) {
MapProxy proxy = MapProxy.create(params);
Long discSpinningRecordId = proxy.getLong("discSpinningRecordId");
Long foreignId = proxy.getLong("foreignId");
String foreignType = proxy.getStr("foreignType");
Long userId = proxy.getLong("userId");
String userName = proxy.getStr("userName");
String prizeName = proxy.getStr("prizeName");
@ -55,7 +65,8 @@ public class UserPrizeExchangeServiceImpl extends ServiceImpl<UserPrizeExchangeD
String beginDate = proxy.getStr("beginDate");
String endDate = proxy.getStr("endDate");
LambdaQueryWrapper<UserPrizeExchange> wrapper = Wrappers.lambdaQuery();
wrapper.eq(discSpinningRecordId != null, UserPrizeExchange::getDiscSpinningRecordId, discSpinningRecordId);
wrapper.eq(foreignId != null, UserPrizeExchange::getForeignId, foreignId);
wrapper.eq(StrUtil.isNotEmpty(foreignType), UserPrizeExchange::getForeignType, foreignType);
wrapper.eq(userId != null, UserPrizeExchange::getUserId, userId);
wrapper.like(StrUtil.isNotEmpty(userName), UserPrizeExchange::getUserName, userName);
wrapper.like(StrUtil.isNotEmpty(prizeName), UserPrizeExchange::getPrizeName, prizeName);
@ -78,9 +89,15 @@ public class UserPrizeExchangeServiceImpl extends ServiceImpl<UserPrizeExchangeD
@Override
@Transactional(rollbackFor = Exception.class)
public void exchange(Long currentUserId, UserPrizeExchange dto) {
if (dto.getDiscSpinningRecordId() == null) {
if (dto.getForeignId() == null) {
throw new SqxException("中奖记录ID不能为空");
}
if (StrUtil.isEmpty(dto.getForeignType())) {
throw new SqxException("活动类型不能为空");
}
if (!ArrayUtil.contains(new String[]{"spinning", "task"}, dto.getForeignType())) {
throw new SqxException("仅限大转盘、任务活动兑换奖品");
}
if (StrUtil.isBlank(dto.getPhone())) {
throw new SqxException("用户手机号码不能为空");
}
@ -89,43 +106,81 @@ public class UserPrizeExchangeServiceImpl extends ServiceImpl<UserPrizeExchangeD
} catch (ValidateException e) {
throw new SqxException("用户手机号码不合法");
}
DiscSpinningRecord record = discSpinningRecordDao.selectById(dto.getDiscSpinningRecordId());
if (record == null) {
throw new SqxException("中奖记录不存在");
Dict dict = Dict.create();
if ("spinning".equals(dto.getForeignType())) {
DiscSpinningRecord record = discSpinningRecordDao.selectById(dto.getForeignId());
if (record == null) {
throw new SqxException("中奖记录不存在");
}
dict.put("userId", record.getUserId());
dict.put("name", record.getName());
dict.put("imgUrl", record.getImgUrl());
dict.put("type", record.getType());
} else if ("task".equals(dto.getForeignType())) {
TaskCenterRecord record = taskCenterRecordDao.selectById(dto.getForeignId());
if (record == null) {
throw new SqxException("中奖记录不存在");
}
if (record.getSourceId() == null) {
throw new SqxException("中奖记录未关联奖品");
}
TaskCenterReward reward = taskCenterRewardDao.selectById(record.getSourceId());
if (reward == null) {
throw new SqxException("对应的奖品信息不存在");
}
dict.put("userId", record.getUserId());
dict.put("name", record.getName());
dict.put("imgUrl", reward.getImg());
dict.put("type", reward.getType());
}
if (record.getUserId() == null) {
Long userId = dict.getLong("userId");
String name = dict.getStr("name");
String imgUrl = dict.getStr("imgUrl");
Integer type = dict.getInt("type");
if (userId == null) {
throw new SqxException("中奖用户数据不完整");
}
if (currentUserId == null) {
throw new SqxException("未获取当前登录用户id");
}
Long userId = record.getUserId();
if (!currentUserId.equals(userId)) {
throw new SqxException("兑奖用户和获奖用户不一致");
}
UserEntity user = userDao.selectById(record.getUserId());
UserEntity user = userDao.selectById(userId);
if (user == null) {
throw new SqxException("兑奖用户不存在");
}
if (ArrayUtil.contains(new int[]{1, 2}, record.getType())) {
if (ArrayUtil.contains(new int[]{1, 2}, type)) {
throw new SqxException("仅限兑换实物、会员卡等奖项");
}
Integer count = baseMapper.selectCount(Wrappers.<UserPrizeExchange>lambdaQuery()
.eq(UserPrizeExchange::getDiscSpinningRecordId, record.getId())
.eq(UserPrizeExchange::getForeignId, dto.getForeignId())
.eq(UserPrizeExchange::getForeignType, dto.getForeignType())
);
if (count != null && count > 0) {
throw new SqxException("奖品已兑换,请勿重复操作");
}
dto.setPrizeName(record.getName());
dto.setUserId(record.getUserId());
dto.setPrizeName(name);
dto.setUserId(userId);
dto.setUserName(user.getUserName());
dto.setStatus(0);
dto.setCreateTime(new Date());
dto.setImgUrl(record.getImgUrl());
dto.setImgUrl(imgUrl);
baseMapper.insert(dto);
record.setTarget("3");
record.setTargetId(dto.getId());
discSpinningRecordDao.updateById(record);
if ("spinning".equals(dto.getForeignType())) {
discSpinningRecordDao.update(null,
Wrappers.<DiscSpinningRecord>lambdaUpdate()
.set(DiscSpinningRecord::getTarget, "3")
.set(DiscSpinningRecord::getTargetId, dto.getId())
.eq(DiscSpinningRecord::getId, dto.getForeignId())
);
} else if ("task".equals(dto.getForeignType())) {
taskCenterRecordDao.update(null,
Wrappers.<TaskCenterRecord>lambdaUpdate()
.set(TaskCenterRecord::getTargetId, dto.getId())
.eq(TaskCenterRecord::getId, dto.getForeignId())
);
}
}
@Override

View File

@ -244,6 +244,10 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
log.info("生成商品订单信息接口入参为:{},{}", courseId, userId);
reentrantReadWriteLock.writeLock().lock();
try {
CourseDetails courseDetail = courseDetailsService.getById(courseDetailsId);
if (courseDetail != null && courseDetail.getIsPrice().equals(2)) {
return Result.success().put("status", 1);
}
CourseUser courseUser1 = courseUserDao.selectCourseUser(courseId, userId);
if (courseUser1 != null) {
return Result.success().put("status", 1);

View File

@ -10,6 +10,7 @@ import com.alipay.api.request.AlipayFundTransToaccountTransferRequest;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.response.AlipayFundTransToaccountTransferResponse;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.sqx.common.annotation.Debounce;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.annotation.Login;
import com.sqx.modules.app.entity.UserEntity;
@ -265,6 +266,7 @@ public class CashController {
@RequestMapping(value = "/alipay/{cashId}", method = RequestMethod.POST)
@ApiOperation("管理平台确认提现")
@ResponseBody
@Debounce(interval = 3000, value = "#cashId")
public Result alipayPay(@PathVariable Long cashId) {
reentrantReadWriteLock.writeLock().lock();
try {
@ -419,6 +421,7 @@ public class CashController {
@RequestMapping(value = "/refund/{cashId}/{content}", method = RequestMethod.POST)
@ApiOperation("管理平台退款")
@ResponseBody
@Debounce(interval = 3000, value = "#cashId")
public Result refund(@PathVariable("cashId") Long cashId, @PathVariable("content") String content) {
CashOut one = cashOutService.selectById(cashId);
if (one == null) {
@ -479,6 +482,7 @@ public class CashController {
@GetMapping(value = "/cashMoney")
@ApiOperation("发起提现")
@Debounce(interval = 3000, value = "#userId")
public Result cashMoney(Long userId, Double money) {
return cashOutService.sysCashMoney(userId, money);
}
@ -491,6 +495,7 @@ public class CashController {
@ApiImplicitParam(name = "money", value = "提现金额", dataTypeClass = Double.class, paramType = "param"),
@ApiImplicitParam(name = "msg", value = "验证码", dataTypeClass = String.class, paramType = "param"),
})
@Debounce(interval = 3000, value = "#userId")
public Result withdraw(Long userId, Double money, String msg) {
if (StringUtils.isBlank(msg)) {
return Result.error("请输入验证码");

View File

@ -8,7 +8,12 @@ import com.sqx.common.annotation.Debounce;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.annotation.Login;
import com.sqx.modules.taskCenter.entity.TaskCenter;
import com.sqx.modules.taskCenter.entity.TaskCenterRecord;
import com.sqx.modules.taskCenter.entity.TaskCenterReward;
import com.sqx.modules.taskCenter.service.TaskCenterRecordService;
import com.sqx.modules.taskCenter.service.TaskCenterRewardService;
import com.sqx.modules.taskCenter.service.TaskCenterService;
import com.sqx.modules.userSign.entity.UserSignRecord;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@ -18,6 +23,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Date;
import java.util.Objects;
@Slf4j
@RestController
@Api(value = "任务中心", tags = {"任务中心"})
@ -29,6 +37,11 @@ public class TaskCenterController {
@Autowired
private TaskCenterService taskCenterService;
@Autowired
private TaskCenterRecordService recordService;
@Autowired
private TaskCenterRewardService taskRewardService;
@PostMapping("/taskCenter/insertTaskCenter")
@ApiOperation("添加任务中心")
public Result insertTaskCenter(@RequestBody TaskCenter taskCenter) {
@ -61,7 +74,7 @@ public class TaskCenterController {
@GetMapping("/taskCenter/selectTaskCenter")
@ApiOperation("查询任务中心")
public Result selectTaskCenter(Integer page, Integer limit) {
return Result.success().put("data", taskCenterService.page(new Page<>(page, limit), new QueryWrapper<TaskCenter>().orderByAsc("sort","type")));
return Result.success().put("data", taskCenterService.page(new Page<>(page, limit), new QueryWrapper<TaskCenter>().orderByAsc("sort", "type")));
}
@ -79,8 +92,45 @@ public class TaskCenterController {
})
@ApiOperation("App 任务中心 领取")
@Debounce(interval = 1000, value = "#userId")
public Result taskReceive(@ApiIgnore @RequestAttribute("userId") Long userId,Long id) {
return taskCenterService.taskReceive(userId,id);
public Result taskReceive(@ApiIgnore @RequestAttribute("userId") Long userId, Long id) {
return taskCenterService.taskReceive(userId, id);
}
@Login
@PostMapping("/app/taskCenter/receiveGoods")
@ApiOperation("App 实物领取")
@ApiImplicitParams({
@ApiImplicitParam(name = "taskId", value = "任务id", dataTypeClass = Long.class, paramType = "body"),
@ApiImplicitParam(name = "sourceId", value = "实物(物品Id)", dataTypeClass = Long.class, paramType = "body")
})
@Debounce(interval = 1000, value = "#userId")
public Result receiveGoods(@ApiIgnore @RequestAttribute("userId") Long userId,@ApiIgnore TaskCenterRecord record) {
TaskCenter task = taskCenterService.getById(record.getTaskId());
if (Objects.isNull(task)) {
return Result.error("任务不存在。");
}
if (recordService.countTaskNum(userId, record.getTaskId(), DateUtil.beginOfMonth(new Date()) + " 00:00:00") > 0) {
return Result.error("该奖励仅可领取一次。");
}
TaskCenterReward reward = taskRewardService.getOne(new QueryWrapper<TaskCenterReward>()
.eq("task_id", record.getTaskId())
.eq("type", 3)
.eq("id", record.getSourceId()));
if (Objects.isNull(reward)) {
return Result.error("该奖励不存在。");
}
if (reward.getSurplusNumber() == null || reward.getSurplusNumber() < 1) {
return Result.error("暂无库存,请领取其它奖励。");
}
record.setNumber(1);
record.setName(reward.getName());
record.setUserId(userId);
record.setType(3);
record.setCreateTime(DateUtil.now());
record.setUpdateTime(DateUtil.now());
recordService.save(record);
return Result.success();
}
}

View File

@ -1,19 +1,29 @@
package com.sqx.modules.taskCenter.controller;
import cn.hutool.core.date.DateUtil;
import com.sqx.modules.app.annotation.Login;
import com.sqx.modules.taskCenter.entity.TaskCenterRecord;
import com.sqx.modules.taskCenter.entity.TaskCenterReward;
import com.sqx.modules.taskCenter.service.TaskCenterRecordService;
import com.sqx.modules.taskCenter.service.TaskCenterRewardService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sqx.common.utils.DateUtils;
import com.sqx.common.utils.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@ -25,11 +35,14 @@ public class TaskCenterRewardController {
*/
@Autowired
private TaskCenterRewardService taskCenterRewardService;
@Autowired
private TaskCenterRecordService recordService;
@PostMapping("/insertTaskCenterReward")
@ApiOperation("添加任务奖励")
public Result insertTaskCenterReward(@RequestBody TaskCenterReward taskCenterReward) {
taskCenterReward.setCreateTime(DateUtils.format(new Date()));
taskCenterReward.setSurplusNumber(taskCenterReward.getTotalNumber());
taskCenterRewardService.save(taskCenterReward);
return Result.success();
}
@ -43,6 +56,15 @@ public class TaskCenterRewardController {
@PostMapping("/updateTaskCenterReward")
@ApiOperation("修改任务奖励")
public Result updateTaskCenterReward(@RequestBody TaskCenterReward taskCenterReward) {
TaskCenterReward reward = taskCenterRewardService.getById(taskCenterReward.getId());
if (taskCenterReward.getTotalNumber() != null && reward.getTotalNumber() != null && !taskCenterReward.getTotalNumber().equals(reward.getTotalNumber())) {
Integer surplusNumber = taskCenterReward.getTotalNumber() - reward.getTotalNumber();
if (surplusNumber > 0) {
taskCenterReward.setSurplusNumber(taskCenterReward.getSurplusNumber() == null ? surplusNumber : taskCenterReward.getSurplusNumber() + surplusNumber);
} else {
taskCenterReward.setSurplusNumber(taskCenterReward.getTotalNumber());
}
}
taskCenterReward.setUpdateTime(DateUtils.format(new Date()));
taskCenterRewardService.updateById(taskCenterReward);
return Result.success();
@ -57,8 +79,37 @@ public class TaskCenterRewardController {
@GetMapping("/selectTaskCenterReward")
@ApiOperation("查询任务奖励")
public Result selectTaskCenterReward(Integer page, Integer limit,TaskCenterReward taskCenterReward) {
public Result selectTaskCenterReward(Integer page, Integer limit, TaskCenterReward taskCenterReward) {
return Result.success().put("data", taskCenterRewardService.page(new Page<>(page, limit), new QueryWrapper<>(taskCenterReward).orderByDesc("id")));
}
@Login
@GetMapping("/selectTaskCenterUserReward")
@ApiOperation("查询用户任务奖励列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "taskId", value = "任务id", dataTypeClass = Long.class),
})
public Result selectTaskCenterUserReward(@ApiIgnore @RequestAttribute("userId") Long userId, Long taskId) {
Map<String, Object> map = new HashMap<>();
QueryWrapper<TaskCenterReward> rewards = new QueryWrapper<TaskCenterReward>().eq("task_id", taskId);
List<TaskCenterReward> list = taskCenterRewardService.list(rewards);
TaskCenterRecord record = recordService.getOne(new QueryWrapper<TaskCenterRecord>()
.eq("user_id", userId)
.eq("task_id", taskId)
.gt("create_time", DateUtil.beginOfMonth(new Date()) + " 00:00:00"));
if (record != null) {
if (record.getTargetId() != null) {
for (TaskCenterReward reward : list) {
if (reward.getId().equals(record.getSourceId())) {
reward.setTargetId(record.getTargetId());
}
}
}
map.put("receive", record.getSourceId());
map.put("record", record.getId());
}
map.put("data", list);
return Result.success(map);
}
}

View File

@ -1,14 +1,9 @@
package com.sqx.modules.taskCenter.entity;
import java.util.Date;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import lombok.Data;
/**
@ -21,17 +16,17 @@ import lombok.Data;
@TableName("task_center_record")
@ApiModel(value = "任务领取记录 实体类")
public class TaskCenterRecord extends Model<TaskCenterRecord> {
@ApiModelProperty("id")
@ApiModelProperty(value = "id",hidden = true)
private Long id;
@ApiModelProperty("用户id")
@ApiModelProperty(value = "用户id",hidden = true)
private Long userId;
@ApiModelProperty("任务Id 周任务转盘奖励时 该值为 user_sign_record的id")
private Long taskId;
@ApiModelProperty("来源Id 目前仅周任务使用")
@ApiModelProperty("来源Id 周任务(签到的Id) 实物(物品Id)")
private Long sourceId;
@ApiModelProperty("奖励名称")
private String name;
@ApiModelProperty("奖励类型 1 金币 2 现金 3 4 5 9转盘")
@ApiModelProperty("奖励类型 1 金币 2 现金 3 虚拟物品 4 5 9转盘")
private Integer type;
private Long targetId;
@ApiModelProperty("数量")

View File

@ -1,5 +1,6 @@
package com.sqx.modules.taskCenter.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
@ -26,9 +27,15 @@ public class TaskCenterReward extends Model<TaskCenterReward> {
private String name;
@ApiModelProperty("奖励类型 1 金币 2 现金红包 3 4 5 9 大转盘抽奖次数")
private Integer type;
private Integer targetId;
@TableField(exist = false)
private Long targetId;
@ApiModelProperty("数量")
private Integer number;
@ApiModelProperty("总数量")
private Integer totalNumber;
@ApiModelProperty("剩余数量")
private Integer surplusNumber;
@TableField(exist = false)
private String createTime;
private String updateTime;

View File

@ -136,11 +136,19 @@ public class TaskCenterServiceImpl extends ServiceImpl<TaskCenterDao, TaskCenter
} else {
s.setButtonTitle("已领取");
s.setDisabled(false);
s.setDiscNumber(null);
s.setNumber(null);
}
}else{
s.setDiscNumber(null);
s.setNumber(null);
if (recordService.countTaskNum(userId, s.getId(), DateUtil.beginOfMonth(new Date()) + " 00:00:00") > 0) {
s.setButtonTitle("已领取");
s.setDisabled(false);
s.setNumber(null);
s.setDiscNumber(null);
}else {
s.setDiscNumber(null);
s.setNumber(null);
}
}
}
}