diff --git a/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java b/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java index 44042076..7d0f5b5c 100644 --- a/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java +++ b/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java @@ -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); diff --git a/src/main/java/com/sqx/modules/app/entity/UserPrizeExchange.java b/src/main/java/com/sqx/modules/app/entity/UserPrizeExchange.java index bf29d0f4..cdab4dae 100644 --- a/src/main/java/com/sqx/modules/app/entity/UserPrizeExchange.java +++ b/src/main/java/com/sqx/modules/app/entity/UserPrizeExchange.java @@ -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; /** * 奖品名称 */ diff --git a/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java b/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java index 2ae329dd..88e06587 100644 --- a/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java +++ b/src/main/java/com/sqx/modules/app/service/impl/UserPrizeExchangeServiceImpl.java @@ -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 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 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 ServiceImpllambdaQuery() - .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.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.lambdaUpdate() + .set(TaskCenterRecord::getTargetId, dto.getId()) + .eq(TaskCenterRecord::getId, dto.getForeignId()) + ); + } } @Override diff --git a/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java b/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java index 8fc39199..d1d68ae2 100644 --- a/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java +++ b/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java @@ -244,6 +244,10 @@ public class OrdersServiceImpl extends ServiceImpl 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); diff --git a/src/main/java/com/sqx/modules/pay/controller/CashController.java b/src/main/java/com/sqx/modules/pay/controller/CashController.java index 9029252f..b81a4dea 100644 --- a/src/main/java/com/sqx/modules/pay/controller/CashController.java +++ b/src/main/java/com/sqx/modules/pay/controller/CashController.java @@ -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("请输入验证码"); diff --git a/src/main/java/com/sqx/modules/taskCenter/controller/TaskCenterController.java b/src/main/java/com/sqx/modules/taskCenter/controller/TaskCenterController.java index 343c3ad0..8c5bee0a 100644 --- a/src/main/java/com/sqx/modules/taskCenter/controller/TaskCenterController.java +++ b/src/main/java/com/sqx/modules/taskCenter/controller/TaskCenterController.java @@ -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().orderByAsc("sort","type"))); + return Result.success().put("data", taskCenterService.page(new Page<>(page, limit), new QueryWrapper().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() + .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(); + } + } diff --git a/src/main/java/com/sqx/modules/taskCenter/controller/TaskCenterRewardController.java b/src/main/java/com/sqx/modules/taskCenter/controller/TaskCenterRewardController.java index 90bd8aac..0f0f5d5a 100644 --- a/src/main/java/com/sqx/modules/taskCenter/controller/TaskCenterRewardController.java +++ b/src/main/java/com/sqx/modules/taskCenter/controller/TaskCenterRewardController.java @@ -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 map = new HashMap<>(); + QueryWrapper rewards = new QueryWrapper().eq("task_id", taskId); + List list = taskCenterRewardService.list(rewards); + TaskCenterRecord record = recordService.getOne(new QueryWrapper() + .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); + } } diff --git a/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterRecord.java b/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterRecord.java index 77545b82..53e44daa 100644 --- a/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterRecord.java +++ b/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterRecord.java @@ -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 { - @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("数量") diff --git a/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterReward.java b/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterReward.java index 42311d31..a0caf07e 100644 --- a/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterReward.java +++ b/src/main/java/com/sqx/modules/taskCenter/entity/TaskCenterReward.java @@ -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 { 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; diff --git a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java index da13081d..3846b2a4 100644 --- a/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java +++ b/src/main/java/com/sqx/modules/taskCenter/service/impl/TaskCenterServiceImpl.java @@ -136,11 +136,19 @@ public class TaskCenterServiceImpl extends ServiceImpl 0) { + s.setButtonTitle("已领取"); + s.setDisabled(false); + s.setNumber(null); + s.setDiscNumber(null); + }else { + s.setDiscNumber(null); + s.setNumber(null); + } } } }