Merge branch 'refs/heads/test' into dev

This commit is contained in:
张松
2024-12-26 17:53:39 +08:00
13 changed files with 251 additions and 16 deletions

View File

@@ -1,6 +1,7 @@
package com.sqx.config;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -21,9 +22,13 @@ import static com.google.common.collect.Lists.newArrayList;
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {
@Value("${swagger.enabled}")
private boolean enabled;
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.enable(enabled)
.apiInfo(apiInfo())
.select()
//加了ApiOperation注解的类才生成接口文档

View File

@@ -43,4 +43,12 @@ public class AppUserPrizeExchangeController {
userPrizeExchangeService.exchange(userId, entity);
return Result.success();
}
@Login
@PostMapping("/receive")
@ApiOperation("领取满签奖励")
public Result receive(@RequestAttribute("userId") Long userId) {
userPrizeExchangeService.receive(userId);
return Result.success();
}
}

View File

@@ -144,7 +144,7 @@ public class AppLoginController {
@RequestMapping(value = "/registerCode", method = RequestMethod.POST)
@ApiOperation("app或h5注册或登录")
@ResponseBody
// @Debounce(interval = 2500, value = "phone")
@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

@@ -35,4 +35,10 @@ public interface UserPrizeExchangeService extends IService<UserPrizeExchange> {
*/
void deliver(UserPrizeExchange dto);
/**
* 领取满签奖励现金红包
* @param currentUserId
*/
void receive(Long currentUserId);
}

View File

@@ -1,5 +1,7 @@
package com.sqx.modules.app.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.map.MapProxy;
@@ -17,19 +19,27 @@ import com.sqx.common.utils.PageUtils;
import com.sqx.modules.app.dao.UserDao;
import com.sqx.modules.app.dao.UserPrizeExchangeDao;
import com.sqx.modules.app.entity.UserEntity;
import com.sqx.modules.app.entity.UserMoneyDetails;
import com.sqx.modules.app.entity.UserPrizeExchange;
import com.sqx.modules.app.service.UserMoneyDetailsService;
import com.sqx.modules.app.service.UserMoneyService;
import com.sqx.modules.app.service.UserPrizeExchangeService;
import com.sqx.modules.common.entity.CommonInfo;
import com.sqx.modules.common.service.CommonInfoService;
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 com.sqx.modules.userSign.dto.UserSignDTO;
import com.sqx.modules.userSign.service.UserSignRecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
@@ -47,6 +57,14 @@ public class UserPrizeExchangeServiceImpl extends ServiceImpl<UserPrizeExchangeD
private TaskCenterRecordDao taskCenterRecordDao;
@Resource
private TaskCenterRewardDao taskCenterRewardDao;
@Resource
private CommonInfoService commonRepository;
@Resource
private UserMoneyService userMoneyService;
@Resource
private UserMoneyDetailsService userMoneyDetailsService;
@Resource
private UserSignRecordService userSignRecordService;
@Resource
private UserDao userDao;
@@ -203,4 +221,53 @@ public class UserPrizeExchangeServiceImpl extends ServiceImpl<UserPrizeExchangeD
entity.setUpdateTime(new Date());
baseMapper.updateById(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public synchronized void receive(Long currentUserId) {
if (currentUserId == null) {
throw new SqxException("未获取当前登录用户id");
}
UserEntity userEntity = userDao.selectById(currentUserId);
if (userEntity == null) {
throw new SqxException("该用户信息不存在");
}
CommonInfo one = commonRepository.findOne(918);
if (one == null) {
throw new SqxException("奖品配置信息不存在");
}
String value = one.getValue();
String signDays = value.split(",")[0];
String moneyStr = value.split(",")[1];
UserSignDTO userSignData = userSignRecordService.getUserSignData(currentUserId);
if (userSignData.getSignDays() < Convert.toInt(signDays)) {
throw new SqxException(StrUtil.format("连续签到天数不足{}天,无法领取奖励", signDays));
}
int count = userMoneyDetailsService.count(
Wrappers.<UserMoneyDetails>lambdaQuery()
.eq(UserMoneyDetails::getUserId, currentUserId)
.eq(UserMoneyDetails::getType, 1)
.eq(UserMoneyDetails::getClassify, 7)
.eq(UserMoneyDetails::getMoneyType, 1)
.likeLeft(UserMoneyDetails::getTitle, "[连续签到")
.likeRight(UserMoneyDetails::getTitle, "天]")
);
if(count > 0){
throw new SqxException("已经领取过连续签到奖励,无需重复操作");
}
BigDecimal money = new BigDecimal(moneyStr);
userMoneyService.updateAmount(1, currentUserId, money.doubleValue());
UserMoneyDetails userMoneyDetails = new UserMoneyDetails();
userMoneyDetails.setUserId(currentUserId);
userMoneyDetails.setTitle(StrUtil.format("[连续签到{}天]", signDays));
userMoneyDetails.setContent("现金红包奖励:" + moneyStr + "");
// 充值
userMoneyDetails.setType(1);
// 任务领取
userMoneyDetails.setClassify(7);
userMoneyDetails.setMoney(money);
userMoneyDetails.setCreateTime(DateUtil.now());
userMoneyDetails.setMoneyType(1);
userMoneyDetailsService.save(userMoneyDetails);
}
}

View File

@@ -50,6 +50,8 @@ import com.sqx.modules.file.utils.Md5Utils;
import com.sqx.modules.invite.service.InviteService;
import com.sqx.modules.message.entity.MessageInfo;
import com.sqx.modules.message.service.MessageService;
import com.sqx.modules.sys.entity.SysUserEntity;
import com.sqx.modules.sys.service.SysUserService;
import com.sqx.modules.utils.HttpClientUtil;
import com.sqx.modules.utils.InvitationCodeUtil;
import com.sqx.modules.utils.MD5Util;
@@ -110,6 +112,8 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
private CommonInfoService commonRepository;
@Autowired
private DiscSpinningService discSpinningService;
@Autowired
private SysUserService sysUserService;
private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true);
@Override
@@ -896,12 +900,9 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
if (StringUtils.isEmpty(msg)) {
return Result.error("验证码不能为空!");
}
Msg msg1 = null;
if (!"147258".equals(msg)) {
msg1 = msgDao.findByPhoneAndCode(phone, msg);
if (msg1 == null) {
return Result.error("验证码不正确!");
}
Msg msg1 = msgDao.findByPhoneAndCode(phone, msg);
if (msg1 == null) {
return Result.error("验证码不正确!");
}
userInfo = new UserEntity();
UserEntity userEntity = null;
@@ -921,6 +922,11 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
}
if (StringUtils.isEmpty(qdCode)) {
qdCode = userEntity.getQdCode();
} else {
SysUserEntity sysUserEntity = sysUserService.selectSysUserByQdCode(qdCode);
if (sysUserEntity == null) {
return Result.error("请使用正确的渠道码!");
}
}
userInfo.setQdCode(qdCode);
userInfo.setPhone(phone);

View File

@@ -0,0 +1,51 @@
package com.sqx.modules.discSpinning.controller;
import com.sqx.common.utils.Constant;
import com.sqx.common.utils.PageUtils;
import com.sqx.common.utils.Result;
import com.sqx.modules.pay.entity.CashOut;
import com.sqx.modules.pay.service.CashOutService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.annotation.Resource;
import java.util.Map;
/**
* 提现审核
*
* @author tankaikai
* @since 2024-12-26 14:39
*/
@RestController
@RequestMapping("/cashOutAudit")
@AllArgsConstructor
@Api(value = "提现审核", tags = {"提现审核"})
public class CashOutController {
@Resource
private CashOutService cashOutService;
@GetMapping("/page")
@ApiOperation("分页")
@ApiImplicitParams({
@ApiImplicitParam(name = Constant.PAGE, value = "当前页码从1开始", paramType = "query", required = true, dataType = "int"),
@ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query", required = true, dataType = "int"),
})
public Result page(@ApiIgnore @RequestParam Map<String, Object> params) {
PageUtils page = cashOutService.auditPage(params);
return Result.success().put("page", page);
}
@PostMapping("/audit")
@ApiOperation("审核")
public Result audit(@RequestBody CashOut cashOut) {
cashOutService.audit(cashOut);
return Result.success();
}
}

View File

@@ -74,7 +74,7 @@ public class CashOut implements Serializable {
private String orderNumber;
/**
* 状态 0待转账 1成功 -1退款 2失败
* 状态 0待转账 1成功 -1退款 2失败 3-待人工审核
*/
private Integer state;
@@ -107,4 +107,9 @@ public class CashOut implements Serializable {
@TableField(exist = false)
private String sysUserName;
/**
* 是否同意提现 0不同意 1同意
*/
@TableField(exist = false)
private Integer isAgree;
}

View File

@@ -9,6 +9,7 @@ import com.sqx.modules.utils.excel.ExcelData;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface CashOutService {
@@ -49,4 +50,13 @@ public interface CashOutService {
*/
Result withdraw(Long userId, Double money, String msg, boolean isSys);
/**
* 提现审核分页查询
*
* @param params
* @return
*/
PageUtils auditPage(Map<String, Object> params);
void audit(CashOut cashOut);
}

View File

@@ -1,10 +1,15 @@
package com.sqx.modules.pay.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapProxy;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sqx.common.exception.SqxException;
import com.sqx.common.utils.Constant;
import com.sqx.common.utils.PageUtils;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.dao.MsgDao;
@@ -17,7 +22,6 @@ import com.sqx.modules.app.service.UserMoneyService;
import com.sqx.modules.app.service.UserService;
import com.sqx.modules.common.entity.CommonInfo;
import com.sqx.modules.common.service.CommonInfoService;
import com.sqx.modules.course.entity.CourseCollect;
import com.sqx.modules.invite.entity.InviteMoney;
import com.sqx.modules.invite.service.InviteMoneyService;
import com.sqx.modules.message.dao.MessageInfoDao;
@@ -45,10 +49,7 @@ import weixin.popular.support.TokenManager;
import javax.websocket.SendResult;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.*;
/**
* 提现申请记录
@@ -511,4 +512,75 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
return Result.success("提现成功,将在三个工作日内到账,请耐心等待!");
}
@Override
public PageUtils auditPage(Map<String, Object> params) {
MapProxy proxy = MapProxy.create(params);
CashOut cashOut = BeanUtil.toBean(params, CashOut.class);
//cashOut.setState(3);
long pageNum = proxy.getLong(Constant.PAGE, 1L);
long pageSize = proxy.getLong(Constant.LIMIT, 10L);
IPage<CashOut> page = baseMapper.selectCashOutPage(new Page<>(pageNum, pageSize), cashOut);
return new PageUtils(page);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void audit(CashOut cashOut) {
long id = cashOut.getId();
Integer isAgree = cashOut.getIsAgree();
if (isAgree == null) {
throw new SqxException("请选择同意或者拒绝!");
}
if (isAgree == 0 && StrUtil.isBlank(cashOut.getRefund())) {
throw new SqxException("请输入拒绝原因!");
}
CashOut entity = baseMapper.selectById(id);
if (entity == null) {
throw new SqxException("提现申请不存在!");
}
if(entity.getState() != 3){
throw new SqxException("提现申请状态无效,请刷新后重试!");
}
if (isAgree == 1) {
entity.setState(0);
} else {
entity.setState(2);
entity.setRefund(cashOut.getRefund());
}
UserEntity userEntity = userService.selectUserById(entity.getUserId());
if(userEntity == null){
throw new SqxException("提现用户信息不存在!");
}
if (isAgree == 0) {
baseMapper.updateById(entity);
UserMoneyDetails userMoneyDetails = new UserMoneyDetails(
entity.getUserId(), null, null, "[提现退款]", 4, 1, 2,
new BigDecimal(entity.getMoney()), "提现失败,自动退款" + entity.getMoney() + "", 1);
userMoneyDetailsService.save(userMoneyDetails);
//归还余额 钱
userMoneyService.updateAmount(1, entity.getUserId(), Convert.toDouble(entity.getMoney()));
return;
}
if (StrUtil.isBlank(entity.getOrderNumber())) {
String outOrderNo = AliPayOrderUtil.createOrderId();
entity.setOrderNumber(outOrderNo);
}
// 执行提现操作
BaseResp baseResp = WuyouPay.extractOrder(entity.getOrderNumber(), entity.getMoney(), entity.getZhifubao(), entity.getZhifubaoName());
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) {
entity.setState(1);
} else if (StringUtils.isNotBlank(baseResp.getErrorMsg())) {
entity.setState(2);
if (baseResp.getErrorMsg().contains("收款人账户号出款属性不匹配")) {
entity.setRefund("提现失败,请检查支付宝账号与收款人姓名后,重试。");
} else {
entity.setRefund(baseResp.getErrorMsg());
}
} else if (StringUtils.isNotBlank(baseResp.getMsg())) {
entity.setState(2);
entity.setRefund("提现失败,请检查支付宝账号与收款人姓名后,重试。");
}
baseMapper.updateById(entity);
}
}

View File

@@ -33,6 +33,9 @@ public class UserSignDTO implements Serializable {
@ApiModelProperty(value = "该用户能否参加签到活动", example = "1-允许,0-不允许")
private Integer enable;
@ApiModelProperty(value = "该用户是否已领取满签奖励", example = "1-已领取,0-未领取")
private Integer isReceived;
@ApiModelProperty(value = "连续签到记录")
private List<UserSignRecordDTO> recordList;
}

View File

@@ -33,7 +33,8 @@ spring:
config:
multi-statement-allow: true
swagger:
enabled: true
pay:
h5BaseUrl: https://video-h5.hnsiyao.cn/me/detail/detail?allId=
orderNotifyUrl: https://video.hnsiyao.cn/czg/app/wuyou/notify

View File

@@ -32,7 +32,8 @@ spring:
wall:
config:
multi-statement-allow: true
swagger:
enabled: false
pay:
h5BaseUrl: https://dj-h5.hnsiyao.cn/me/detail/detail?allId=
orderNotifyUrl: https://dj-api.hnsiyao.cn/czg/app/wuyou/notify