首绑支付宝发放现金红包奖励
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
package com.sqx.modules.app.controller.app;
|
package com.sqx.modules.app.controller.app;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.sqx.common.annotation.Debounce;
|
|
||||||
import com.sqx.common.utils.ApiAccessLimitUtil;
|
import com.sqx.common.utils.ApiAccessLimitUtil;
|
||||||
import com.sqx.common.utils.Result;
|
import com.sqx.common.utils.Result;
|
||||||
import com.sqx.modules.app.annotation.Login;
|
import com.sqx.modules.app.annotation.Login;
|
||||||
@@ -11,7 +11,6 @@ import com.sqx.modules.app.annotation.LoginUser;
|
|||||||
import com.sqx.modules.app.entity.UserEntity;
|
import com.sqx.modules.app.entity.UserEntity;
|
||||||
import com.sqx.modules.app.service.AppService;
|
import com.sqx.modules.app.service.AppService;
|
||||||
import com.sqx.modules.app.service.UserService;
|
import com.sqx.modules.app.service.UserService;
|
||||||
import com.sqx.modules.message.entity.MessageInfo;
|
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
@@ -86,11 +85,23 @@ public class AppController {
|
|||||||
if (!ApiAccessLimitUtil.isAccessAllowed(userId.toString(), "updateZFB", 3, "month")) {
|
if (!ApiAccessLimitUtil.isAccessAllowed(userId.toString(), "updateZFB", 3, "month")) {
|
||||||
return Result.error("每月仅支持修改三次,请联系管理员");
|
return Result.error("每月仅支持修改三次,请联系管理员");
|
||||||
}
|
}
|
||||||
|
UserEntity old = userService.getById(userId);
|
||||||
|
String accountNo = old.getZhiFuBao();
|
||||||
|
String accountName = old.getZhiFuBaoName();
|
||||||
|
boolean isFirstBind = false;
|
||||||
|
if (StrUtil.isEmpty(accountNo) && StrUtil.isEmpty(accountName)) {
|
||||||
|
isFirstBind = true;
|
||||||
|
}
|
||||||
UserEntity userEntity = new UserEntity();
|
UserEntity userEntity = new UserEntity();
|
||||||
userEntity.setZhiFuBao(zhiFuBao);
|
userEntity.setZhiFuBao(zhiFuBao);
|
||||||
userEntity.setZhiFuBaoName(zhiFuBaoName);
|
userEntity.setZhiFuBaoName(zhiFuBaoName);
|
||||||
userEntity.setUserId(userId);
|
userEntity.setUserId(userId);
|
||||||
userService.updateById(userEntity);
|
old.setZhiFuBao(userEntity.getZhiFuBao());
|
||||||
|
old.setZhiFuBaoName(userEntity.getZhiFuBaoName());
|
||||||
|
boolean bool = userService.updateById(userEntity);
|
||||||
|
if (bool && isFirstBind) {
|
||||||
|
userService.firstBindAwardsMoney(old);
|
||||||
|
}
|
||||||
return Result.success();
|
return Result.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -227,4 +227,6 @@ public interface UserService extends IService<UserEntity> {
|
|||||||
|
|
||||||
int updateUserClientIdIsNull(String clientid);
|
int updateUserClientIdIsNull(String clientid);
|
||||||
|
|
||||||
|
void firstBindAwardsMoney(UserEntity entity);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package com.sqx.modules.app.service.impl;
|
package com.sqx.modules.app.service.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.thread.ThreadUtil;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
@@ -42,6 +45,7 @@ import com.sqx.modules.app.utils.JwtUtils;
|
|||||||
import com.sqx.modules.app.utils.UserConstantInterface;
|
import com.sqx.modules.app.utils.UserConstantInterface;
|
||||||
import com.sqx.modules.common.entity.CommonInfo;
|
import com.sqx.modules.common.entity.CommonInfo;
|
||||||
import com.sqx.modules.common.service.CommonInfoService;
|
import com.sqx.modules.common.service.CommonInfoService;
|
||||||
|
import com.sqx.modules.discSpinning.service.DiscSpinningService;
|
||||||
import com.sqx.modules.file.utils.Md5Utils;
|
import com.sqx.modules.file.utils.Md5Utils;
|
||||||
import com.sqx.modules.invite.service.InviteService;
|
import com.sqx.modules.invite.service.InviteService;
|
||||||
import com.sqx.modules.message.entity.MessageInfo;
|
import com.sqx.modules.message.entity.MessageInfo;
|
||||||
@@ -61,13 +65,17 @@ import org.apache.commons.codec.digest.DigestUtils;
|
|||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import weixin.popular.api.SnsAPI;
|
import weixin.popular.api.SnsAPI;
|
||||||
import weixin.popular.util.JsonUtil;
|
import weixin.popular.util.JsonUtil;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.*;
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -98,6 +106,10 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
|
|||||||
private UserVipService userVipService;
|
private UserVipService userVipService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private MessageService messageService;
|
private MessageService messageService;
|
||||||
|
@Autowired
|
||||||
|
private CommonInfoService commonRepository;
|
||||||
|
@Autowired
|
||||||
|
private DiscSpinningService discSpinningService;
|
||||||
private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true);
|
private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -213,7 +225,6 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result getNewUserRed(Long userId) {
|
public Result getNewUserRed(Long userId) {
|
||||||
reentrantReadWriteLock.writeLock().lock();
|
reentrantReadWriteLock.writeLock().lock();
|
||||||
@@ -622,8 +633,6 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result wxAppLogin(String wxOpenId, String token) {
|
public Result wxAppLogin(String wxOpenId, String token) {
|
||||||
UserEntity userEntity = queryByWxOpenId(wxOpenId);
|
UserEntity userEntity = queryByWxOpenId(wxOpenId);
|
||||||
@@ -980,8 +989,6 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result login(String phone, String pwd) {
|
public Result login(String phone, String pwd) {
|
||||||
UserEntity userEntity = queryByPhone(phone);
|
UserEntity userEntity = queryByPhone(phone);
|
||||||
@@ -1462,4 +1469,38 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
|
|||||||
return baseMapper.updateUserClientIdIsNull(clientid);
|
return baseMapper.updateUserClientIdIsNull(clientid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void firstBindAwardsMoney(UserEntity entity) {
|
||||||
|
reentrantReadWriteLock.writeLock().lock();
|
||||||
|
try {
|
||||||
|
CommonInfo one = commonRepository.findOne(920);
|
||||||
|
BigDecimal money = new BigDecimal(one.getValue());
|
||||||
|
userMoneyService.updateMoney(1, entity.getUserId(), money.doubleValue());
|
||||||
|
UserMoneyDetails userMoneyDetails = new UserMoneyDetails();
|
||||||
|
userMoneyDetails.setUserId(entity.getUserId());
|
||||||
|
userMoneyDetails.setTitle("[首绑支付宝]");
|
||||||
|
userMoneyDetails.setContent("现金红包奖励:" + money + "元");
|
||||||
|
// 充值
|
||||||
|
userMoneyDetails.setType(1);
|
||||||
|
// 任务领取
|
||||||
|
userMoneyDetails.setClassify(7);
|
||||||
|
userMoneyDetails.setMoney(money);
|
||||||
|
userMoneyDetails.setCreateTime(DateUtil.format(new Date(System.currentTimeMillis() - 1000), "yyyy-MM-dd HH:mm:ss"));
|
||||||
|
userMoneyDetails.setMoneyType(1);
|
||||||
|
boolean ret = userMoneyDetailsService.save(userMoneyDetails);
|
||||||
|
if (ret) {
|
||||||
|
ThreadUtil.execAsync(()->{
|
||||||
|
discSpinningService.withdrawAsync(entity, money.doubleValue(), "[首绑支付宝]");
|
||||||
|
},true);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("首绑支付宝发放奖励异常,用户信息:{}", JSONUtil.toJsonStr(entity));
|
||||||
|
log.error("首绑支付宝发放奖励异常:", e);
|
||||||
|
throw new RuntimeException("首绑奖励失败");
|
||||||
|
} finally {
|
||||||
|
reentrantReadWriteLock.writeLock().unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,11 @@ public interface DiscSpinningService extends IService<DiscSpinning> {
|
|||||||
//提现
|
//提现
|
||||||
void withdraw(UserEntity userInfo, Double money);
|
void withdraw(UserEntity userInfo, Double money);
|
||||||
|
|
||||||
|
//提现
|
||||||
|
void withdraw(UserEntity userInfo, Double money, String title);
|
||||||
|
|
||||||
|
//提现
|
||||||
|
void withdrawAsync(UserEntity userInfo, Double money, String title);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,10 +17,8 @@ import com.sqx.modules.discSpinning.dao.DiscSpinningDao;
|
|||||||
import com.sqx.modules.discSpinning.entity.DiscSpinning;
|
import com.sqx.modules.discSpinning.entity.DiscSpinning;
|
||||||
import com.sqx.modules.discSpinning.entity.DiscSpinningAmount;
|
import com.sqx.modules.discSpinning.entity.DiscSpinningAmount;
|
||||||
import com.sqx.modules.discSpinning.entity.DiscSpinningRecord;
|
import com.sqx.modules.discSpinning.entity.DiscSpinningRecord;
|
||||||
import com.sqx.modules.discSpinning.service.DiscSpinningAmountService;
|
|
||||||
import com.sqx.modules.discSpinning.service.DiscSpinningRecordService;
|
import com.sqx.modules.discSpinning.service.DiscSpinningRecordService;
|
||||||
import com.sqx.modules.discSpinning.service.DiscSpinningService;
|
import com.sqx.modules.discSpinning.service.DiscSpinningService;
|
||||||
import com.sqx.modules.orders.service.OrdersService;
|
|
||||||
import com.sqx.modules.pay.entity.CashOut;
|
import com.sqx.modules.pay.entity.CashOut;
|
||||||
import com.sqx.modules.pay.service.CashOutService;
|
import com.sqx.modules.pay.service.CashOutService;
|
||||||
import com.sqx.modules.pay.wuyou.BaseResp;
|
import com.sqx.modules.pay.wuyou.BaseResp;
|
||||||
@@ -30,7 +28,10 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.PlatformTransactionManager;
|
||||||
|
import org.springframework.transaction.TransactionStatus;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.transaction.support.DefaultTransactionDefinition;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
@@ -48,6 +49,9 @@ public class DiscSpinningServiceImpl extends ServiceImpl<DiscSpinningDao, DiscSp
|
|||||||
private final CashOutService cashOutService;
|
private final CashOutService cashOutService;
|
||||||
private final RedisUtils redisUtils;
|
private final RedisUtils redisUtils;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PlatformTransactionManager transactionManager;
|
||||||
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public DiscSpinningServiceImpl(CommonInfoService commonRepository,
|
public DiscSpinningServiceImpl(CommonInfoService commonRepository,
|
||||||
@@ -94,6 +98,12 @@ public class DiscSpinningServiceImpl extends ServiceImpl<DiscSpinningDao, DiscSp
|
|||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public void withdraw(UserEntity userInfo, Double money) {
|
public void withdraw(UserEntity userInfo, Double money) {
|
||||||
|
withdraw(userInfo, money, "[现金大转盘]");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void withdraw(UserEntity userInfo, Double money, String title) {
|
||||||
CashOut cashOut = new CashOut();
|
CashOut cashOut = new CashOut();
|
||||||
cashOut.setIsOut(false);
|
cashOut.setIsOut(false);
|
||||||
cashOut.setMoney(money.toString());
|
cashOut.setMoney(money.toString());
|
||||||
@@ -113,7 +123,7 @@ public class DiscSpinningServiceImpl extends ServiceImpl<DiscSpinningDao, DiscSp
|
|||||||
BaseResp baseResp = WuyouPay.extractOrder(outOrderNo, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName());
|
BaseResp baseResp = WuyouPay.extractOrder(outOrderNo, cashOut.getMoney(), cashOut.getZhifubao(), cashOut.getZhifubaoName());
|
||||||
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) {
|
if (baseResp.getStatus() != null && (baseResp.getStatus().equals(2) || baseResp.getStatus().equals(10000))) {
|
||||||
UserMoneyDetails userMoneyDetails = new UserMoneyDetails(
|
UserMoneyDetails userMoneyDetails = new UserMoneyDetails(
|
||||||
userInfo.getUserId(), null, null, "[现金大转盘]", 4, 2, 1,
|
userInfo.getUserId(), null, null, title, 4, 2, 1,
|
||||||
new BigDecimal(money), "现金红包自动提现" + money + "元", 1);
|
new BigDecimal(money), "现金红包自动提现" + money + "元", 1);
|
||||||
userMoneyDetailsService.save(userMoneyDetails);
|
userMoneyDetailsService.save(userMoneyDetails);
|
||||||
//减去余额 钱
|
//减去余额 钱
|
||||||
@@ -133,7 +143,7 @@ public class DiscSpinningServiceImpl extends ServiceImpl<DiscSpinningDao, DiscSp
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
UserMoneyDetails userMoneyDetails = new UserMoneyDetails(
|
UserMoneyDetails userMoneyDetails = new UserMoneyDetails(
|
||||||
userInfo.getUserId(), null, null, "[现金大转盘]", 4, 2, 1,
|
userInfo.getUserId(), null, null, title, 4, 2, 1,
|
||||||
new BigDecimal(money), "现金红包自动提现" + money + "元", 1);
|
new BigDecimal(money), "现金红包自动提现" + money + "元", 1);
|
||||||
userMoneyDetailsService.save(userMoneyDetails);
|
userMoneyDetailsService.save(userMoneyDetails);
|
||||||
//减去余额 钱
|
//减去余额 钱
|
||||||
@@ -143,6 +153,18 @@ public class DiscSpinningServiceImpl extends ServiceImpl<DiscSpinningDao, DiscSp
|
|||||||
log.info("领取奖励执行完毕");
|
log.info("领取奖励执行完毕");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void withdrawAsync(UserEntity userInfo, Double money, String title) {
|
||||||
|
TransactionStatus transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());
|
||||||
|
try {
|
||||||
|
withdraw(userInfo, money, title);
|
||||||
|
transactionManager.commit(transactionStatus);
|
||||||
|
}catch (Exception e){
|
||||||
|
transactionManager.rollback(transactionStatus);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public DiscSpinningRecord draws(int drawCount, double orderAmount, Long orderId, Long userId, String source) {
|
public DiscSpinningRecord draws(int drawCount, double orderAmount, Long orderId, Long userId, String source) {
|
||||||
|
|||||||
Reference in New Issue
Block a user