package cc.mrbird.febs.dapp.service.impl;
|
|
import cc.mrbird.febs.common.configure.i18n.MessageSourceUtils;
|
import cc.mrbird.febs.common.contants.AppContants;
|
import cc.mrbird.febs.common.entity.FebsResponse;
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.common.utils.LoginUserUtil;
|
import cc.mrbird.febs.common.utils.RedisUtils;
|
import cc.mrbird.febs.dapp.dto.ApiStartDto;
|
import cc.mrbird.febs.dapp.entity.*;
|
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
|
import cc.mrbird.febs.dapp.enumerate.MemberOnHookPlanEnum;
|
import cc.mrbird.febs.dapp.mapper.*;
|
import cc.mrbird.febs.dapp.service.ApiIgtOnHookPlanService;
|
import cc.mrbird.febs.dapp.service.DappWalletService;
|
import cc.mrbird.febs.dapp.vo.ApiAwardInfoVo;
|
import cc.mrbird.febs.dapp.vo.ApiPlanInfoVo;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.json.JSON;
|
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.aspectj.bridge.MessageUtil;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class ApiIgtOnHookPlanServiceImpl extends ServiceImpl<IgtOnHookPlanOrderDao, IgtOnHookPlanOrder> implements ApiIgtOnHookPlanService {
|
|
private final IgtOnHookPlanOrderDao igtOnHookPlanOrderDao;
|
private final IgtOnHookPlanOrderItemDao igtOnHookPlanOrderItemDao;
|
private final DappWalletCoinDao dappWalletCoinDao;
|
private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
|
private final DappMemberDao dappMemberDao;
|
private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao;
|
private final RedisUtils redisUtils;
|
private final DappOnHookAwardDao dappOnHookAwardDao;
|
private final DappWalletService dappWalletService;
|
|
@Value("${spring.profiles.active}")
|
private String active;
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public FebsResponse start(ApiStartDto apiStartDto) {
|
|
/**
|
* 开始挂机
|
* 增加一条挂机记录
|
* 匹配收益方案(预先生成)
|
* 发送一条mq消息,根据受益方案生成挂机字表未生效详细记录
|
* 余额减少
|
* 更新用户表是否正在挂机状态字段
|
* 定时器五分钟去更新一下详细记录的状态
|
*
|
*/
|
//todo 发送一条mq消息,根据受益方案生成挂机字表未生效详细记录(目前定时器)
|
DappMemberEntity dappMemberEntity = LoginUserUtil.getAppUser();
|
Long memberId = dappMemberEntity.getId();
|
DappMemberEntity member = dappMemberDao.selectById(memberId);
|
int isOnHook = member.getIsOnHook() == null ? 2 : member.getIsOnHook();
|
if(2 != isOnHook){
|
return new FebsResponse().fail().message(MessageSourceUtils.getString("Operation_002"));
|
}
|
//挂机金额的倍数
|
Integer planCode = apiStartDto.getPlanCode() == null ? 1 : apiStartDto.getPlanCode();
|
if(0 >= planCode){
|
return new FebsResponse().fail().message(MessageSourceUtils.getString("balance_err_001"));
|
}
|
//挂机金额
|
BigDecimal balance = apiStartDto.getBalance() == null ? BigDecimal.ZERO : apiStartDto.getBalance();
|
if(AppContants.ONHOOK_BASIC_AMOUNT.compareTo(balance) > 0){
|
return new FebsResponse().fail().message(MessageSourceUtils.getString("balance_err_001"));
|
}
|
DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId);
|
if(ObjectUtil.isEmpty(dappWalletCoinEntity)){
|
return new FebsResponse().fail().message(MessageSourceUtils.getString("login_err_003"));
|
}
|
BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount();
|
if(balance.compareTo(availableAmount) > 0){
|
return new FebsResponse().fail().message(MessageSourceUtils.getString("balance_err_002"));
|
}
|
//挂机开始时间和结束时间
|
DataDictionaryCustom startTimeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.START_TIME.getType(), DataDictionaryEnum.START_TIME.getCode());
|
DataDictionaryCustom endTimeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.END_TIME.getType(), DataDictionaryEnum.END_TIME.getCode());
|
DateTime startTime = DateUtil.parseTimeToday(startTimeDic.getValue());
|
DateTime endTime = DateUtil.parseTimeToday(endTimeDic.getValue());
|
DateTime nowTime = DateUtil.parseTimeToday(DateUtil.format(DateUtil.date(),"HH:mm:ss"));
|
if(DateUtil.compare(nowTime,startTime) < 0){
|
return new FebsResponse().fail().message(MessageSourceUtils.getString("member_err_0015"));
|
}
|
if(DateUtil.compare(nowTime,endTime) > 0){
|
return new FebsResponse().fail().message(MessageSourceUtils.getString("member_err_0015"));
|
}
|
|
//增加一条挂机记录
|
IgtOnHookPlanOrder igtOnHookPlanOrder = new IgtOnHookPlanOrder();
|
igtOnHookPlanOrder.setMemberId(memberId);
|
igtOnHookPlanOrder.setStartTime(DateUtil.date());
|
igtOnHookPlanOrder.setState(IgtOnHookPlanOrder.STATE_START);
|
igtOnHookPlanOrder.setPlanAmount(apiStartDto.getBalance());
|
igtOnHookPlanOrder.setAvaAmount(apiStartDto.getBalance());
|
igtOnHookPlanOrder.setPlanCode(apiStartDto.getPlanCode());
|
igtOnHookPlanOrder.setProfit(AppContants.INIT_MONEY);
|
igtOnHookPlanOrderDao.insert(igtOnHookPlanOrder);
|
//余额减少
|
Integer updateCount = dappWalletCoinDao.delAvailableDelTotalById(dappWalletCoinEntity.getId(), balance);
|
if(1 != updateCount){
|
throw new FebsException(MessageSourceUtils.getString("balance_err_002"));
|
}
|
DappMemberEntity dappMember= dappMemberDao.selectById(memberId);
|
//更新用户表是否正在挂机状态字段
|
dappMember.setIsOnHook(1);
|
dappMemberDao.updateById(dappMember);
|
|
DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, availableAmount, balance
|
, availableAmount.subtract(balance).setScale(2,BigDecimal.ROUND_DOWN), "挂机", 6);
|
dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntity);
|
return new FebsResponse().success().message(MessageSourceUtils.getString("Operation_001"));
|
}
|
|
@Override
|
public FebsResponse endPlan(Long orderId) {
|
DappMemberEntity dappMemberEntity = LoginUserUtil.getAppUser();
|
Long memberId = dappMemberEntity.getId();
|
//更新主表为结束状态
|
IgtOnHookPlanOrder igtOnHookPlanOrder = igtOnHookPlanOrderDao.selectById(orderId);
|
igtOnHookPlanOrder.setState(3);
|
igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder);
|
|
//更新用户表是否正在挂机状态字段为否
|
DappMemberEntity dappMember = dappMemberDao.selectById(memberId);
|
dappMember.setIsOnHook(3);
|
dappMemberDao.updateById(dappMember);
|
|
return new FebsResponse().success().message(MessageSourceUtils.getString("Operation_001"));
|
}
|
|
@Override
|
public FebsResponse planInfo() {
|
DappMemberEntity dappMemberEntity = LoginUserUtil.getAppUser();
|
Long memberId = dappMemberEntity.getId();
|
DappMemberEntity member = dappMemberDao.selectById(memberId);
|
Integer isOnHook = member.getIsOnHook() == null ? 2 : member.getIsOnHook();
|
ApiPlanInfoVo apiPlanInfoVo = new ApiPlanInfoVo();
|
if(1 == isOnHook){
|
//获取当前最新的一条
|
IgtOnHookPlanOrder igtOnHookPlanOrder = igtOnHookPlanOrderDao.selectByMemberId(memberId);
|
if(ObjectUtil.isNotEmpty(igtOnHookPlanOrder)){
|
apiPlanInfoVo.setPlanAmount(igtOnHookPlanOrder.getPlanAmount());
|
apiPlanInfoVo.setCreateTime(igtOnHookPlanOrder.getCreateTime());
|
apiPlanInfoVo.setId(igtOnHookPlanOrder.getId());
|
apiPlanInfoVo.setAvaAmount(igtOnHookPlanOrder.getAvaAmount().setScale(4,BigDecimal.ROUND_DOWN));
|
apiPlanInfoVo.setProfit(igtOnHookPlanOrder.getProfit().setScale(4,BigDecimal.ROUND_DOWN));
|
}
|
}
|
return new FebsResponse().success().data(apiPlanInfoVo);
|
}
|
|
@Override
|
public BigDecimal getTotalFrofit(Long memberId) {
|
BigDecimal totalProfit = igtOnHookPlanOrderDao.selectSumProfitByMemberId(memberId);
|
return totalProfit;
|
}
|
|
@Override
|
public FebsResponse awardInfo() {
|
DappMemberEntity dappMemberEntity = LoginUserUtil.getAppUser();
|
Long memberId = dappMemberEntity.getId();
|
ArrayList<ApiAwardInfoVo> apiAwardInfoVos = new ArrayList<>();
|
// DateTime date = DateUtil.date();
|
String redisKey = "";
|
if("prod".equals(active)){
|
redisKey = "on_hook_award_id";
|
}else{
|
redisKey = "on_hook_award_id_test";
|
}
|
String onHookAwardRedisId = redisUtils.getString(redisKey);
|
DappOnHookAward dappOnHookAwardNow = dappOnHookAwardDao.selectById(Long.parseLong(onHookAwardRedisId));
|
Date date = dappOnHookAwardNow.getAwardTime();
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
String yyyyMMddHHMM = sdf.format(date);
|
List<DappOnHookAward> dappOnHookAwards = dappOnHookAwardDao.selectInfoByByAwardTime(yyyyMMddHHMM);
|
if(CollUtil.isNotEmpty(dappOnHookAwards)){
|
for(DappOnHookAward dappOnHookAward : dappOnHookAwards){
|
ApiAwardInfoVo apiAwardInfoVo = new ApiAwardInfoVo();
|
apiAwardInfoVo.setAwardNum(dappOnHookAward.getAwardNum());
|
apiAwardInfoVo.setRecordNum(dappOnHookAward.getRecordNum());
|
IgtOnHookPlanOrderItem igtOnHookPlanOrderItem = igtOnHookPlanOrderItemDao.selectByMemberIdAndBelongNum(memberId,dappOnHookAward.getRecordNum());
|
if(ObjectUtil.isNotEmpty(igtOnHookPlanOrderItem)){
|
BigDecimal bigDecimal = igtOnHookPlanOrderItem.getAmount().setScale(1, BigDecimal.ROUND_DOWN);
|
apiAwardInfoVo.setAmount(bigDecimal.toString());
|
}else{
|
apiAwardInfoVo.setAmount("-");
|
}
|
apiAwardInfoVos.add(apiAwardInfoVo);
|
}
|
}
|
return new FebsResponse().success().data(apiAwardInfoVos);
|
}
|
|
@Override
|
public void updatePlanOrderItem() {
|
List<IgtOnHookPlanOrder> igtOnHookPlanOrders = igtOnHookPlanOrderDao.selectByState(1);
|
if(CollUtil.isEmpty(igtOnHookPlanOrders)){
|
return;
|
}
|
String redisKey = "";
|
if("prod".equals(active)){
|
redisKey = "on_hook_award_id";
|
}else{
|
redisKey = "on_hook_award_id_test";
|
}
|
String onHookAwardRedisId = redisUtils.getString(redisKey);
|
DappOnHookAward dappOnHookAward = dappOnHookAwardDao.selectById(Long.parseLong(onHookAwardRedisId));
|
Date awardTime = dappOnHookAward.getAwardTime();
|
DateTime dateTime = DateUtil.offsetMinute(awardTime, 5);
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
String yyyyMMddHHMM = sdf.format(dateTime);
|
DappOnHookAward dappOnHookAwardNext = dappOnHookAwardDao.selectByByAwardTime(yyyyMMddHHMM);
|
|
//系统挂机总次数 = 时长 * 60 / 5
|
DataDictionaryCustom maxHoursDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MAX_HOURS.getType(), DataDictionaryEnum.MAX_HOURS.getCode());
|
Float maxHours = Float.parseFloat(maxHoursDic.getValue());
|
maxHours = maxHours * 60 / 5;
|
|
for(IgtOnHookPlanOrder igtOnHookPlanOrder : igtOnHookPlanOrders){
|
BigDecimal avaAmount = igtOnHookPlanOrder.getAvaAmount();
|
if(avaAmount.compareTo(BigDecimal.ZERO) > 0){
|
/**
|
* 获取下一个开奖记录
|
* 生成一条开奖字表记录
|
* 计算收益
|
*/
|
|
// List<IgtOnHookPlanOrderItem> igtOnHookPlanOrderItemsOld = igtOnHookPlanOrderItemDao.selectByIgtIdAndMemberId(igtOnHookPlanOrder.getId(),igtOnHookPlanOrder.getMemberId());
|
IgtOnHookPlanOrderItem igtOnHookPlanOrderItemsOld = igtOnHookPlanOrderItemDao.selectOneByIgtIdAndMemberId(igtOnHookPlanOrder.getId(),igtOnHookPlanOrder.getMemberId());
|
//如果没有中奖记录则是新增一条1挂机方案的挂机子表记录
|
if(ObjectUtil.isEmpty(igtOnHookPlanOrderItemsOld)){
|
//获取挂机方案
|
DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.PLAN_A.getType(), DataDictionaryEnum.PLAN_A.getCode());
|
String dataDictionaryCustomValue = dataDictionaryCustom.getValue();
|
JSONObject levelMemberValueParse = JSONUtil.parseObj(dataDictionaryCustomValue);
|
BigDecimal amountPlanA = new BigDecimal(levelMemberValueParse.get("amount").toString())
|
.multiply(new BigDecimal(igtOnHookPlanOrder.getPlanCode())).setScale(4,BigDecimal.ROUND_DOWN);
|
|
IgtOnHookPlanOrderItem igtOnHookPlanOrderItem = new IgtOnHookPlanOrderItem();
|
igtOnHookPlanOrderItem.setMemberId(igtOnHookPlanOrder.getMemberId());
|
igtOnHookPlanOrderItem.setOrderId(igtOnHookPlanOrder.getId());
|
igtOnHookPlanOrderItem.setAmount(amountPlanA);
|
//获取收益率
|
DappMemberEntity dappMemberEntity = dappMemberDao.selectById(igtOnHookPlanOrder.getMemberId());
|
DataDictionaryCustom identityDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_MB.getType(), dappMemberEntity.getIdentity());
|
String identityDicValue = identityDic.getValue();
|
JSONObject identityDicValueParse = JSONUtil.parseObj(identityDicValue);
|
BigDecimal hangingRevenueLevel = new BigDecimal(identityDicValueParse.get("hangingRevenue").toString())
|
.multiply(new BigDecimal(0.01)).setScale(4,BigDecimal.ROUND_DOWN);
|
//获取收益
|
BigDecimal profit = amountPlanA.multiply(hangingRevenueLevel).setScale(4,BigDecimal.ROUND_DOWN);
|
igtOnHookPlanOrderItem.setProfit(profit.setScale(4,BigDecimal.ROUND_DOWN));
|
|
igtOnHookPlanOrderItem.setState(1);
|
igtOnHookPlanOrderItem.setPlanCode(igtOnHookPlanOrder.getPlanCode());
|
|
Integer isGoal = dappWalletService.isGoal(dappOnHookAwardNext.getAwardNum());
|
igtOnHookPlanOrderItem.setIsGoal(isGoal);
|
igtOnHookPlanOrderItem.setBelongNum(dappOnHookAwardNext.getRecordNum());
|
igtOnHookPlanOrderItem.setOrderNum(1);
|
igtOnHookPlanOrderItem.setPlan(dataDictionaryCustom.getDescription());
|
igtOnHookPlanOrderItemDao.insert(igtOnHookPlanOrderItem);
|
|
if(2 == igtOnHookPlanOrderItem.getIsGoal()){
|
//如果中奖,增加挂机主表的挂机总收益
|
Integer updateCount = igtOnHookPlanOrderDao.AddProfitById(igtOnHookPlanOrder.getId()
|
,igtOnHookPlanOrderItem.getProfit());
|
}else{
|
//如果不中奖,减少挂机剩余金额即减少本金
|
Integer updateCount = igtOnHookPlanOrderDao.updateAvaAmountById(igtOnHookPlanOrder.getId()
|
,igtOnHookPlanOrderItem.getAmount());
|
}
|
}else {
|
if(2 == igtOnHookPlanOrderItemsOld.getIsGoal()){
|
//第一条中奖记录为中奖则是新增一条1挂机方案的挂机子表记录
|
//获取挂机方案
|
DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.PLAN_A.getType(), DataDictionaryEnum.PLAN_A.getCode());
|
String dataDictionaryCustomValue = dataDictionaryCustom.getValue();
|
JSONObject levelMemberValueParse = JSONUtil.parseObj(dataDictionaryCustomValue);
|
BigDecimal amountPlanA = new BigDecimal(levelMemberValueParse.get("amount").toString())
|
.multiply(new BigDecimal(igtOnHookPlanOrder.getPlanCode())).setScale(4,BigDecimal.ROUND_DOWN);
|
//此次下注金额不足,则更新主表信息为结算中
|
//挂机次数超过系统规定的时间,则更新主表信息为结算中
|
if(avaAmount.compareTo(amountPlanA) < 0 || igtOnHookPlanOrderItemsOld.getOrderNum() >= maxHours){
|
igtOnHookPlanOrder.setState(3);
|
igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder);
|
}else{
|
|
IgtOnHookPlanOrderItem igtOnHookPlanOrderItem = new IgtOnHookPlanOrderItem();
|
igtOnHookPlanOrderItem.setMemberId(igtOnHookPlanOrder.getMemberId());
|
igtOnHookPlanOrderItem.setOrderId(igtOnHookPlanOrder.getId());
|
igtOnHookPlanOrderItem.setAmount(amountPlanA);
|
//获取收益率
|
DappMemberEntity dappMemberEntity = dappMemberDao.selectById(igtOnHookPlanOrder.getMemberId());
|
DataDictionaryCustom identityDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_MB.getType(), dappMemberEntity.getIdentity());
|
String identityDicValue = identityDic.getValue();
|
JSONObject identityDicValueParse = JSONUtil.parseObj(identityDicValue);
|
BigDecimal hangingRevenueLevel = new BigDecimal(identityDicValueParse.get("hangingRevenue").toString())
|
.multiply(new BigDecimal(0.01)).setScale(4,BigDecimal.ROUND_DOWN);
|
//获取收益
|
BigDecimal profit = amountPlanA.multiply(hangingRevenueLevel).setScale(4,BigDecimal.ROUND_DOWN);
|
igtOnHookPlanOrderItem.setProfit(profit.setScale(4,BigDecimal.ROUND_DOWN));
|
|
igtOnHookPlanOrderItem.setState(1);
|
igtOnHookPlanOrderItem.setPlanCode(igtOnHookPlanOrder.getPlanCode());
|
|
Integer isGoal = dappWalletService.isGoal(dappOnHookAwardNext.getAwardNum());
|
igtOnHookPlanOrderItem.setIsGoal(isGoal);
|
igtOnHookPlanOrderItem.setBelongNum(dappOnHookAwardNext.getRecordNum());
|
igtOnHookPlanOrderItem.setOrderNum(igtOnHookPlanOrderItemsOld.getOrderNum() + 1);
|
igtOnHookPlanOrderItem.setPlan(dataDictionaryCustom.getDescription());
|
igtOnHookPlanOrderItemDao.insert(igtOnHookPlanOrderItem);
|
|
if(2 == igtOnHookPlanOrderItem.getIsGoal()){
|
|
//如果中奖,增加挂机主表的挂机总收益
|
Integer updateCount = igtOnHookPlanOrderDao.AddProfitById(igtOnHookPlanOrder.getId()
|
,igtOnHookPlanOrderItem.getProfit());
|
}else{
|
//如果不中奖,减少挂机剩余金额即减少本金
|
Integer updateCount = igtOnHookPlanOrderDao.updateAvaAmountById(igtOnHookPlanOrder.getId()
|
,igtOnHookPlanOrderItem.getAmount());
|
}
|
}
|
}else{
|
//第一条没中奖则是新增一条n+1挂机方案的挂机子表记录
|
String plan = igtOnHookPlanOrderItemsOld.getPlan();
|
//获取挂机方案
|
DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCodeAndDesc(
|
DataDictionaryEnum.PLAN_A.getType(),
|
Integer.toString(Integer.parseInt(plan)+1));
|
if(ObjectUtil.isEmpty(dataDictionaryCustom)){
|
igtOnHookPlanOrder.setState(3);
|
igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder);
|
}else{
|
String dataDictionaryCustomValue = dataDictionaryCustom.getValue();
|
JSONObject levelMemberValueParse = JSONUtil.parseObj(dataDictionaryCustomValue);
|
BigDecimal amountPlanA = new BigDecimal(levelMemberValueParse.get("amount").toString())
|
.multiply(new BigDecimal(igtOnHookPlanOrder.getPlanCode())).setScale(4,BigDecimal.ROUND_DOWN);
|
//此次下注金额不足,则更新主表信息为结算中
|
if(avaAmount.compareTo(amountPlanA) < 0 || igtOnHookPlanOrderItemsOld.getOrderNum() >= maxHours){
|
igtOnHookPlanOrder.setState(3);
|
igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder);
|
}else{
|
IgtOnHookPlanOrderItem igtOnHookPlanOrderItem = new IgtOnHookPlanOrderItem();
|
igtOnHookPlanOrderItem.setMemberId(igtOnHookPlanOrder.getMemberId());
|
igtOnHookPlanOrderItem.setOrderId(igtOnHookPlanOrder.getId());
|
igtOnHookPlanOrderItem.setAmount(amountPlanA);
|
//获取收益率
|
DappMemberEntity dappMemberEntity = dappMemberDao.selectById(igtOnHookPlanOrder.getMemberId());
|
DataDictionaryCustom identityDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_MB.getType(), dappMemberEntity.getIdentity());
|
String identityDicValue = identityDic.getValue();
|
JSONObject identityDicValueParse = JSONUtil.parseObj(identityDicValue);
|
BigDecimal hangingRevenueLevel = new BigDecimal(identityDicValueParse.get("hangingRevenue").toString())
|
.multiply(new BigDecimal(0.01)).setScale(4,BigDecimal.ROUND_DOWN);
|
//获取收益
|
BigDecimal profit = amountPlanA.multiply(hangingRevenueLevel).setScale(4,BigDecimal.ROUND_DOWN);
|
igtOnHookPlanOrderItem.setProfit(profit.setScale(4,BigDecimal.ROUND_DOWN));
|
|
igtOnHookPlanOrderItem.setState(1);
|
igtOnHookPlanOrderItem.setPlanCode(igtOnHookPlanOrder.getPlanCode());
|
|
Integer isGoal = dappWalletService.isGoal(dappOnHookAwardNext.getAwardNum());
|
igtOnHookPlanOrderItem.setIsGoal(isGoal);
|
igtOnHookPlanOrderItem.setBelongNum(dappOnHookAwardNext.getRecordNum());
|
igtOnHookPlanOrderItem.setOrderNum(igtOnHookPlanOrderItemsOld.getOrderNum() + 1);
|
igtOnHookPlanOrderItem.setPlan(dataDictionaryCustom.getDescription());
|
igtOnHookPlanOrderItemDao.insert(igtOnHookPlanOrderItem);
|
|
if(2 == igtOnHookPlanOrderItem.getIsGoal()){
|
//返还两次中奖之间的本金
|
Date endTime = igtOnHookPlanOrderItem.getCreateTime();
|
Date startTime = null;
|
//返回上次中奖的记录
|
IgtOnHookPlanOrderItem igtOld = igtOnHookPlanOrderItemDao.selectByCreateTimeAndIsgoaAndOrderId(endTime,2,igtOnHookPlanOrder.getId());
|
if(ObjectUtil.isNotEmpty(igtOld)){
|
startTime = igtOld.getCreateTime();
|
}
|
BigDecimal totalAmount = igtOnHookPlanOrderItemDao.selectTotalAmountByCreateTimeAndOrderId(startTime,endTime,igtOnHookPlanOrderItem.getOrderId());
|
int i = (totalAmount.add(igtOnHookPlanOrder.getAvaAmount())).compareTo(igtOnHookPlanOrder.getPlanAmount());
|
//如果中奖,增加挂机主表的挂机总收益,返还两次中奖之间的本金
|
igtOnHookPlanOrderDao.AddProfitById(igtOnHookPlanOrder.getId()
|
,igtOnHookPlanOrderItem.getProfit());
|
if(i >= 0){
|
igtOnHookPlanOrderDao.addAvaAmountById(igtOnHookPlanOrder.getId()
|
,igtOnHookPlanOrder.getPlanAmount());
|
}else{
|
igtOnHookPlanOrderDao.addAvaAmountById(igtOnHookPlanOrder.getId()
|
,totalAmount);
|
}
|
}else{
|
//如果不中奖,减少挂机剩余金额即减少本金
|
Integer updateCount = igtOnHookPlanOrderDao.updateAvaAmountById(igtOnHookPlanOrder.getId()
|
,igtOnHookPlanOrderItem.getAmount());
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
|
private String getProfitCase(String identity,BigDecimal balance){
|
//匹配会员等级获取对应的收益率
|
List<DataDictionaryCustom> dataDictionaryCustoms = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.LEVEL_MB.getType());
|
if(CollUtil.isNotEmpty(dataDictionaryCustoms)){
|
for(DataDictionaryCustom memberLevel : dataDictionaryCustoms){
|
String code = memberLevel.getCode();
|
String memberLevelValue = memberLevel.getValue();
|
JSONObject profitValue = JSONUtil.parseObj(memberLevelValue);
|
//挂机收益
|
BigDecimal hangingRevenue = new BigDecimal(profitValue.get("hangingRevenue").toString()).divide(new BigDecimal(100));
|
//预计收益
|
BigDecimal expectProfit = balance.multiply(balance).setScale(4, BigDecimal.ROUND_DOWN);
|
}
|
}
|
|
return null;
|
}
|
|
public static void main(String[] args) {
|
|
DateTime nowTime = DateUtil.parseTimeToday(DateUtil.format(DateUtil.date(),"HH:mm:ss"));
|
System.out.println(nowTime);
|
int maxTimes = 10;
|
for(int i =1;i<maxTimes;){
|
maxTimes --;
|
System.out.println(maxTimes);
|
}
|
}
|
}
|