| | |
| | | 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 io.grpc.internal.JsonUtil; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.aspectj.bridge.MessageUtil; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | |
| | | @Slf4j |
| | |
| | | private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao; |
| | | private final RedisUtils redisUtils; |
| | | private final DappOnHookAwardDao dappOnHookAwardDao; |
| | | private final DappWalletService dappWalletService; |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public FebsResponse start(ApiStartDto apiStartDto) { |
| | |
| | | * 定时器五分钟去更新一下详细记录的状态 |
| | | * |
| | | */ |
| | | //todo 发送一条mq消息,根据受益方案生成挂机字表未生效详细记录(目前定时器) |
| | | DappMemberEntity dappMemberEntity = LoginUserUtil.getAppUser(); |
| | | Long memberId = dappMemberEntity.getId(); |
| | | DappMemberEntity member = dappMemberDao.selectById(memberId); |
| | |
| | | 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")); |
| | | } |
| | | |
| | | //增加一条挂机记录 |
| | |
| | | } |
| | | String levelMemberValue = levelMember.getValue(); |
| | | JSONObject levelMemberValueParse = JSONUtil.parseObj(levelMemberValue); |
| | | //挂机收益只有总收益的60% |
| | | hangingRevenue = new BigDecimal(levelMemberValueParse.get("hangingRevenue").toString()) |
| | | .multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN); |
| | | .multiply(new BigDecimal(0.01)).setScale(4,BigDecimal.ROUND_DOWN); |
| | | } |
| | | //获取挂机字表的顺序 |
| | | LinkedList<String> isProfitPlan = new LinkedList<>(); |
| | |
| | | DateTime dateTime = DateUtil.offsetMinute(awardTime, 5); |
| | | int orderNum = 1; |
| | | for(String profitPlan : isProfitPlan){ |
| | | String yyyyMMddHHMM = DateUtil.format(dateTime, "yyyy-MM-dd hh:mm"); |
| | | |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); |
| | | String yyyyMMddHHMM = sdf.format(dateTime); |
| | | DappOnHookAward dappOnHookAwardNext = dappOnHookAwardDao.selectByByAwardTime(yyyyMMddHHMM); |
| | | |
| | | JSONObject jsonObject = JSONUtil.parseObj(profitPlan); |
| | |
| | | igtOnHookPlanOrderItem.setProfit(profit.multiply(new BigDecimal(planCode))); |
| | | igtOnHookPlanOrderItem.setState(2); |
| | | igtOnHookPlanOrderItem.setPlanCode(planCode); |
| | | igtOnHookPlanOrderItem.setIsGoal(1); |
| | | String isGoal = jsonObject.get("isGoal").toString(); |
| | | igtOnHookPlanOrderItem.setIsGoal(Integer.parseInt(isGoal)); |
| | | igtOnHookPlanOrderItem.setBelongNum(dappOnHookAwardNext.getRecordNum()); |
| | | igtOnHookPlanOrderItem.setOrderNum(orderNum); |
| | | igtOnHookPlanOrderItemDao.insert(igtOnHookPlanOrderItem); |
| | |
| | | 4、生成流水记录 |
| | | 5、更新用户表是否正在挂机状态字段为否 |
| | | */ |
| | | //更新主表为结束状态 |
| | | IgtOnHookPlanOrder igtOnHookPlanOrder = igtOnHookPlanOrderDao.selectById(orderId); |
| | | igtOnHookPlanOrder.setState(2); |
| | | igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder); |
| | | //删除子表中未生效的记录 |
| | | QueryWrapper<IgtOnHookPlanOrderItem> objectQueryWrapper = new QueryWrapper<>(); |
| | | objectQueryWrapper.eq("order_id",orderId); |
| | |
| | | objectQueryWrapper.eq("state",2); |
| | | igtOnHookPlanOrderItemDao.delete(objectQueryWrapper); |
| | | //计算总收益和总挂机剩余金额,操作用户资金账户信息 |
| | | //所有中奖的收益 |
| | | BigDecimal totalProfit = igtOnHookPlanOrderItemDao.selectTotalProfitByByOrderIdAndMemberIdAndState(orderId,memberId,1,2); |
| | | BigDecimal totalAmount = igtOnHookPlanOrderItemDao.selectTotalAmountByByOrderIdAndMemberIdAndState(orderId,memberId,1,2); |
| | | String refererIds = dappMemberDao.selectById(memberId).getRefererIds(); |
| | | List<String> refererIdList = StrUtil.split(refererIds, ",", -1, true, true); |
| | | //生成流水佣金和盈利分成和流水记录,返回剩余盈利 |
| | | BigDecimal profitSharingTotal = dappWalletService.updateLSYJYLFC(refererIdList, totalProfit); |
| | | //平台分成,返回剩余盈利 |
| | | BigDecimal systemTotal = dappWalletService.updatePTFC(memberId,totalProfit); |
| | | totalProfit = totalProfit.subtract(profitSharingTotal).subtract(systemTotal); |
| | | |
| | | //获取用户信息的是否盈利字段 |
| | | DappMemberEntity dappMember = dappMemberDao.selectById(memberId); |
| | | Integer isProfit = dappMember.getIsProfit() == null ? 1 : dappMember.getIsProfit(); |
| | | |
| | | //所有未中奖的本金 |
| | | BigDecimal totalAmount = igtOnHookPlanOrderItemDao.selectTotalAmountByByOrderIdAndMemberIdAndState(orderId,memberId,1,1); |
| | | //更新主表为结束状态 |
| | | IgtOnHookPlanOrder igtOnHookPlanOrder = igtOnHookPlanOrderDao.selectById(orderId); |
| | | BigDecimal avaAmount = igtOnHookPlanOrder.getAvaAmount(); |
| | | BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount(); |
| | | igtOnHookPlanOrder.setState(2); |
| | | //一次挂机剩余的全部金额 |
| | | BigDecimal totalMoney = totalProfit.add(avaAmount); |
| | | if(totalMoney.compareTo(planAmount)<=0){ |
| | | igtOnHookPlanOrder.setProfitState(2); |
| | | }else{ |
| | | igtOnHookPlanOrder.setProfitState(1); |
| | | } |
| | | igtOnHookPlanOrder.setProfit(totalProfit); |
| | | igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder); |
| | | |
| | | DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId); |
| | | BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); |
| | | //如果中奖,返回本金加收益加剩余总挂机金额 |
| | | BigDecimal total = totalProfit.add(totalAmount).add(igtOnHookPlanOrder.getAvaAmount()).setScale(2, BigDecimal.ROUND_DOWN); |
| | | dappWalletCoinDao.addTotalAndaddAvailableById(memberId,total); |
| | | BigDecimal total = BigDecimal.ZERO; |
| | | if(isProfit == 2){ |
| | | //设置成不盈利,只返回收益加剩余挂机总金额 |
| | | total = totalProfit.add(igtOnHookPlanOrder.getAvaAmount()).setScale(4, BigDecimal.ROUND_DOWN); |
| | | }else{ |
| | | //设置成盈利,如果中奖,返回收益,如果没中奖,则返回本金,最后加上剩余总挂机金额 |
| | | // total = totalProfit.add(totalAmount).add(igtOnHookPlanOrder.getAvaAmount()).setScale(4, BigDecimal.ROUND_DOWN); |
| | | total = totalProfit.add(igtOnHookPlanOrder.getAvaAmount()).setScale(4, BigDecimal.ROUND_DOWN); |
| | | } |
| | | dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntity.getId(),total); |
| | | //生成流水记录 |
| | | BigDecimal add = availableAmount.add(total); |
| | | DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, availableAmount, total, add, "投注盈利", 5); |
| | | BigDecimal subtract = add.subtract(totalProfit); |
| | | DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, subtract, totalProfit, add, "投注盈利", 5); |
| | | dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntity); |
| | | //更新用户表是否正在挂机状态字段为否 |
| | | DappMemberEntity dappMember= dappMemberDao.selectById(memberId); |
| | | dappMember.setIsOnHook(3); |
| | | dappMemberDao.updateById(dappMember); |
| | | return new FebsResponse().success().message(MessageSourceUtils.getString("Operation_001")); |
| | |
| | | apiPlanInfoVo.setId(igtOnHookPlanOrder.getId()); |
| | | apiPlanInfoVo.setAvaAmount(igtOnHookPlanOrder.getAvaAmount()); |
| | | BigDecimal totalProfit = igtOnHookPlanOrderItemDao.selectTotalProfitByByOrderIdAndMemberIdAndState(igtOnHookPlanOrder.getId(),memberId,1,2); |
| | | apiPlanInfoVo.setProfit(totalProfit.setScale(2,BigDecimal.ROUND_DOWN)); |
| | | apiPlanInfoVo.setProfit(totalProfit.setScale(4,BigDecimal.ROUND_DOWN)); |
| | | } |
| | | } |
| | | return new FebsResponse().success().data(apiPlanInfoVo); |
| | |
| | | Long memberId = dappMemberEntity.getId(); |
| | | ArrayList<ApiAwardInfoVo> apiAwardInfoVos = new ArrayList<>(); |
| | | DateTime date = DateUtil.date(); |
| | | String yyyyMMddHHMM = DateUtil.format(date, "yyyy-MM-dd hh:mm"); |
| | | |
| | | 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){ |
| | |
| | | //挂机收益 |
| | | BigDecimal hangingRevenue = new BigDecimal(profitValue.get("hangingRevenue").toString()).divide(new BigDecimal(100)); |
| | | //预计收益 |
| | | BigDecimal expectProfit = balance.multiply(balance).setScale(2, BigDecimal.ROUND_DOWN); |
| | | BigDecimal expectProfit = balance.multiply(balance).setScale(4, BigDecimal.ROUND_DOWN); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | 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 --; |