| | |
| | | import cc.mrbird.febs.dapp.vo.ApiPlanInfoVo; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUnit; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | |
| | | 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; |
| | | |
| | |
| | | private final RedisUtils redisUtils; |
| | | private final DappOnHookAwardDao dappOnHookAwardDao; |
| | | private final DappWalletService dappWalletService; |
| | | private final DappOnHookDoneDao dappOnHookDoneDao; |
| | | private final MemberCoinWithdrawDao memberCoinWithdrawDao; |
| | | |
| | | @Value("${spring.profiles.active}") |
| | | private String active; |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public FebsResponse start(ApiStartDto apiStartDto) { |
| | |
| | | dappMember.setIsOnHook(1); |
| | | dappMemberDao.updateById(dappMember); |
| | | |
| | | List<DataDictionaryCustom> dataDictionaryCustoms = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.PLAN_A.getType()); |
| | | LinkedList<Map<String,String>> strings = new LinkedList<>(); |
| | | for(DataDictionaryCustom dataDictionaryCustom : dataDictionaryCustoms){ |
| | | Map<String, String> stringStringHashMap = new HashMap<>(); |
| | | stringStringHashMap.put(dataDictionaryCustom.getDescription(),dataDictionaryCustom.getValue()); |
| | | strings.add(stringStringHashMap); |
| | | } |
| | | //收益率 |
| | | BigDecimal hangingRevenue = BigDecimal.ZERO; |
| | | //挂机时长 |
| | | DataDictionaryCustom maxHours = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MAX_HOURS.getType(), DataDictionaryEnum.MAX_HOURS.getCode()); |
| | | if(ObjectUtil.isEmpty(maxHours)){ |
| | | throw new FebsException(MessageSourceUtils.getString("login_err_003")); |
| | | } |
| | | Double maxHoursValue = Double.parseDouble(maxHours.getValue()); |
| | | //获取用户信息的是否盈利字段 |
| | | Integer isProfit = dappMember.getIsProfit() == null ? 1 : dappMember.getIsProfit(); |
| | | String identity = null; |
| | | if(isProfit == 2){ |
| | | identity = "IS_PROFIT_NO"; |
| | | }else{ |
| | | identity = "LEVEL_MB"; |
| | | DataDictionaryCustom levelMember = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_MB.getType(), dappMemberEntity.getIdentity()); |
| | | if(ObjectUtil.isEmpty(levelMember)){ |
| | | throw new FebsException(MessageSourceUtils.getString("login_err_003")); |
| | | } |
| | | String levelMemberValue = levelMember.getValue(); |
| | | JSONObject levelMemberValueParse = JSONUtil.parseObj(levelMemberValue); |
| | | //挂机收益只有总收益的60% |
| | | hangingRevenue = new BigDecimal(levelMemberValueParse.get("hangingRevenue").toString()) |
| | | .multiply(new BigDecimal(0.01)).setScale(4,BigDecimal.ROUND_DOWN); |
| | | } |
| | | //获取挂机字表的顺序 |
| | | LinkedList<String> isProfitPlan = new LinkedList<>(); |
| | | Map<String, LinkedList<String>> identity_level = MemberOnHookPlanEnum.valueOf(identity) |
| | | .getMemberOnHook(maxHoursValue,hangingRevenue,strings); |
| | | isProfitPlan = identity_level.get(identity); |
| | | if(CollUtil.isEmpty(isProfitPlan)){ |
| | | throw new FebsException(MessageSourceUtils.getString("login_err_003")); |
| | | } |
| | | //获取下一个开奖 |
| | | String redisKey = "on_hook_award_id"; |
| | | String onHookAwardRedisId = redisUtils.getString(redisKey); |
| | | DappOnHookAward dappOnHookAward = dappOnHookAwardDao.selectById(Long.parseLong(onHookAwardRedisId)); |
| | | if(ObjectUtil.isEmpty(dappOnHookAward)){ |
| | | throw new FebsException(MessageSourceUtils.getString("login_err_003")); |
| | | } |
| | | Date awardTime = dappOnHookAward.getAwardTime(); |
| | | DateTime dateTime = DateUtil.offsetMinute(awardTime, 5); |
| | | int orderNum = 1; |
| | | for(String profitPlan : isProfitPlan){ |
| | | |
| | | 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 igtOnHookPlanOrderItem = new IgtOnHookPlanOrderItem(); |
| | | igtOnHookPlanOrderItem.setMemberId(memberId); |
| | | igtOnHookPlanOrderItem.setOrderId(igtOnHookPlanOrder.getId()); |
| | | BigDecimal amount = new BigDecimal(jsonObject.get("amount").toString()); |
| | | igtOnHookPlanOrderItem.setAmount(amount.multiply(new BigDecimal(planCode))); |
| | | BigDecimal profit = new BigDecimal(jsonObject.get("profit").toString()); |
| | | igtOnHookPlanOrderItem.setProfit(profit.multiply(new BigDecimal(planCode))); |
| | | igtOnHookPlanOrderItem.setState(2); |
| | | igtOnHookPlanOrderItem.setPlanCode(planCode); |
| | | String isGoal = jsonObject.get("isGoal").toString(); |
| | | igtOnHookPlanOrderItem.setIsGoal(Integer.parseInt(isGoal)); |
| | | igtOnHookPlanOrderItem.setBelongNum(dappOnHookAwardNext.getRecordNum()); |
| | | igtOnHookPlanOrderItem.setOrderNum(orderNum); |
| | | igtOnHookPlanOrderItemDao.insert(igtOnHookPlanOrderItem); |
| | | orderNum++; |
| | | dateTime = DateUtil.offsetMinute(dateTime, 5); |
| | | } |
| | | |
| | | DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, availableAmount, balance |
| | | , availableAmount.subtract(balance).setScale(2,BigDecimal.ROUND_DOWN), "挂机", 6); |
| | | DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, availableAmount, balance.negate() |
| | | , availableAmount.subtract(balance).setScale(2,BigDecimal.ROUND_DOWN), "挂机", 6,igtOnHookPlanOrder.getId()); |
| | | dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntity); |
| | | return new FebsResponse().success().message(MessageSourceUtils.getString("Operation_001")); |
| | | } |
| | |
| | | public FebsResponse endPlan(Long orderId) { |
| | | DappMemberEntity dappMemberEntity = LoginUserUtil.getAppUser(); |
| | | Long memberId = dappMemberEntity.getId(); |
| | | /* |
| | | 1、更新主表为结束状态 |
| | | 2、删除子表中未生效的记录 |
| | | 3、计算总收益和总挂机剩余金额,操作用户资金账户信息 |
| | | 4、生成流水记录 |
| | | 5、更新用户表是否正在挂机状态字段为否 |
| | | */ |
| | | //删除子表中未生效的记录 |
| | | QueryWrapper<IgtOnHookPlanOrderItem> objectQueryWrapper = new QueryWrapper<>(); |
| | | //判断系统是否已经结算过了 |
| | | QueryWrapper<DappOnHookDone> objectQueryWrapper = new QueryWrapper<>(); |
| | | objectQueryWrapper.eq("order_id",orderId); |
| | | objectQueryWrapper.eq("member_id",memberId); |
| | | objectQueryWrapper.eq("state",2); |
| | | igtOnHookPlanOrderItemDao.delete(objectQueryWrapper); |
| | | //计算总收益和总挂机剩余金额,操作用户资金账户信息 |
| | | //所有中奖的收益 |
| | | BigDecimal totalProfit = igtOnHookPlanOrderItemDao.selectTotalProfitByByOrderIdAndMemberIdAndState(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); |
| | | |
| | | List<DappOnHookDone> dappOnHookDones = dappOnHookDoneDao.selectList(objectQueryWrapper); |
| | | if(CollUtil.isNotEmpty(dappOnHookDones)){ |
| | | new FebsResponse().fail().message(MessageSourceUtils.getString("Operation_003")); |
| | | } |
| | | //更新主表为结束状态 |
| | | IgtOnHookPlanOrder igtOnHookPlanOrder = igtOnHookPlanOrderDao.selectById(orderId); |
| | | igtOnHookPlanOrder.setState(2); |
| | | igtOnHookPlanOrder.setPlanAmount(totalProfit); |
| | | igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder); |
| | | //所有未中奖的本金 |
| | | BigDecimal totalAmount = igtOnHookPlanOrderItemDao.selectTotalAmountByByOrderIdAndMemberIdAndState(orderId,memberId,1,1); |
| | | DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId); |
| | | BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); |
| | | //如果中奖,返回收益,如果没中奖,则返回本金,最后加上剩余总挂机金额 |
| | | BigDecimal total = totalProfit.add(totalAmount).add(igtOnHookPlanOrder.getAvaAmount()).setScale(4, BigDecimal.ROUND_DOWN); |
| | | dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntity.getId(),total); |
| | | //生成流水记录 |
| | | BigDecimal add = availableAmount.add(total); |
| | | BigDecimal subtract = add.subtract(totalAmount); |
| | | DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, subtract, totalProfit, add, "投注盈利", 5); |
| | | dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntity); |
| | | |
| | | // BigDecimal totalProfit = igtOnHookPlanOrder.getProfit(); |
| | | BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount(); |
| | | // BigDecimal avaAmount = igtOnHookPlanOrder.getAvaAmount(); |
| | | //更新用户表是否正在挂机状态字段为否 |
| | | DappMemberEntity dappMember= dappMemberDao.selectById(memberId); |
| | | DappMemberEntity dappMember = dappMemberDao.selectById(memberId); |
| | | dappMember.setIsOnHook(3); |
| | | dappMemberDao.updateById(dappMember); |
| | | |
| | | //获取当前用户每分钟应该获取的收益 |
| | | String identity = dappMember.getIdentity(); |
| | | //当前用户的挂机收益率 |
| | | BigDecimal hangingRevenue = getHangingRevenue(identity); |
| | | BigDecimal multiply = hangingRevenue.multiply(planAmount); |
| | | DataDictionaryCustom maxHoursDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MAX_HOURS.getType(), DataDictionaryEnum.MAX_HOURS.getCode()); |
| | | //挂机总时长(分钟) |
| | | BigDecimal maxHours = new BigDecimal(maxHoursDic.getValue()).multiply(new BigDecimal(60)); |
| | | //得到每分钟的收益 |
| | | BigDecimal minuteProfit = multiply.divide(maxHours, 4, BigDecimal.ROUND_DOWN); |
| | | //获取挂机开始时间到现在的总时长(分钟数) |
| | | Date startTime = igtOnHookPlanOrder.getStartTime(); |
| | | long between = DateUtil.between(startTime, DateUtil.date(), DateUnit.MINUTE); |
| | | //获得总收益 |
| | | BigDecimal totalProfit = minuteProfit.multiply(new BigDecimal(between)); |
| | | if(multiply.compareTo(totalProfit) < 0){ |
| | | totalProfit = multiply; |
| | | } |
| | | |
| | | String refererIds = dappMemberEntity.getRefererIds(); |
| | | List<String> refererIdList = StrUtil.split(refererIds, ",", -1, true, true); |
| | | //只有上级用户金额大于51U才能得到对应的佣金 |
| | | // ArrayList<String> refererIdLisstUp = new ArrayList<>(); |
| | | // for(String inviteId : refererIdList){ |
| | | // DappMemberEntity dappMemberUp = dappMemberDao.selectMemberInfoByInviteId(inviteId); |
| | | // if(ObjectUtil.isNotEmpty(dappMemberUp)){ |
| | | // DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(dappMemberUp.getId()); |
| | | // if(AppContants.ONHOOK_BASIC_AMOUNT.compareTo(dappWalletCoinEntity.getAvailableAmount())<=0){ |
| | | // refererIdLisstUp.add(inviteId); |
| | | // } |
| | | // } |
| | | // } |
| | | //生成流水佣金和盈利分成和流水记录,返回剩余盈利 |
| | | BigDecimal profitSharingTotal = dappWalletService.updateLSYJYLFC(refererIdList, totalProfit,igtOnHookPlanOrder.getId()); |
| | | //生成流水佣金和盈利分成和流水记录,返回盈利分成和流水佣金总共分成 |
| | | // BigDecimal profitSharingTotal = dappWalletService.updateLSYJYLFC(refererIdList, totalProfit,igtOnHookPlanOrder.getId()); |
| | | //平台分成 |
| | | //平台拿走35%盈利分成和流水佣金剩下的全部 |
| | | BigDecimal systemAdd = totalProfit.multiply(new BigDecimal(0.4)).subtract(profitSharingTotal); |
| | | BigDecimal systemTotal = dappWalletService.updatePTFC(memberId,systemAdd,igtOnHookPlanOrder.getId()); |
| | | //个人固定拿走60% |
| | | totalProfit = totalProfit.multiply(new BigDecimal(0.6)); |
| | | igtOnHookPlanOrder.setProfit(totalProfit); |
| | | igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder); |
| | | |
| | | BigDecimal totalMoney = planAmount.add(totalProfit); |
| | | DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId); |
| | | dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntity.getId(),totalMoney); |
| | | |
| | | BigDecimal add = dappWalletCoinEntity.getAvailableAmount().add(totalMoney); |
| | | BigDecimal subtract = add.subtract(totalProfit); |
| | | DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, subtract, totalProfit, add, "投注盈利", 5,igtOnHookPlanOrder.getId()); |
| | | dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntity); |
| | | |
| | | DappOnHookDone dappOnHookDone = new DappOnHookDone(memberId, igtOnHookPlanOrder.getId()); |
| | | dappOnHookDoneDao.insert(dappOnHookDone); |
| | | |
| | | return new FebsResponse().success().message(MessageSourceUtils.getString("Operation_001")); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | DateTime startTime = DateUtil.offsetMinute(DateUtil.date(), 10); |
| | | |
| | | System.out.println(startTime); |
| | | System.out.println(DateUtil.date()); |
| | | |
| | | long between = DateUtil.between(startTime, DateUtil.date(), DateUnit.MINUTE); |
| | | System.out.println(between); |
| | | } |
| | | |
| | | |
| | | private BigDecimal getHangingRevenue(String identity){ |
| | | DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_MB.getType(), identity); |
| | | String dataDictionaryCustomValue = dataDictionaryCustom.getValue(); |
| | | cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(dataDictionaryCustomValue); |
| | | String runningCommission = jsonObject.get("hangingRevenue").toString(); |
| | | return new BigDecimal(runningCommission).multiply(new BigDecimal(0.01)); |
| | | } |
| | | |
| | | @Override |
| | |
| | | apiPlanInfoVo.setPlanAmount(igtOnHookPlanOrder.getPlanAmount()); |
| | | apiPlanInfoVo.setCreateTime(igtOnHookPlanOrder.getCreateTime()); |
| | | apiPlanInfoVo.setId(igtOnHookPlanOrder.getId()); |
| | | apiPlanInfoVo.setAvaAmount(igtOnHookPlanOrder.getAvaAmount()); |
| | | BigDecimal totalProfit = igtOnHookPlanOrderItemDao.selectTotalProfitByByOrderIdAndMemberIdAndState(igtOnHookPlanOrder.getId(),memberId,1,2); |
| | | apiPlanInfoVo.setProfit(totalProfit.setScale(4,BigDecimal.ROUND_DOWN)); |
| | | apiPlanInfoVo.setAvaAmount(igtOnHookPlanOrder.getAvaAmount().setScale(4,BigDecimal.ROUND_DOWN)); |
| | | apiPlanInfoVo.setProfit(igtOnHookPlanOrder.getProfit().setScale(4,BigDecimal.ROUND_DOWN)); |
| | | } |
| | | } |
| | | return new FebsResponse().success().data(apiPlanInfoVo); |
| | |
| | | DappMemberEntity dappMemberEntity = LoginUserUtil.getAppUser(); |
| | | Long memberId = dappMemberEntity.getId(); |
| | | ArrayList<ApiAwardInfoVo> apiAwardInfoVos = new ArrayList<>(); |
| | | DateTime date = DateUtil.date(); |
| | | |
| | | // 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); |
| | |
| | | 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()){ |
| | | //返还两次中奖之间的本金 |
| | | BigDecimal totalAmount = BigDecimal.ZERO; |
| | | //返回上次中奖的记录 |
| | | IgtOnHookPlanOrderItem igtOld = igtOnHookPlanOrderItemDao.selectByCreateTimeAndIsgoaAndOrderId( |
| | | igtOnHookPlanOrderItem.getId(),2,igtOnHookPlanOrderItem.getOrderId()); |
| | | if(ObjectUtil.isNotEmpty(igtOld)){ |
| | | totalAmount = igtOnHookPlanOrderItemDao.selectTotalAmountByIDAndOrderId(igtOld.getId(), |
| | | igtOnHookPlanOrderItem.getId(),igtOnHookPlanOrderItem.getOrderId()); |
| | | }else{ |
| | | totalAmount = igtOnHookPlanOrderItemDao.selectTotalAmountByIDAndOrderId(null, |
| | | igtOnHookPlanOrderItem.getId(),igtOnHookPlanOrderItem.getOrderId()); |
| | | } |
| | | //如果中奖,增加挂机主表的挂机总收益,返还两次中奖之间的本金 |
| | | igtOnHookPlanOrderDao.AddProfitById(igtOnHookPlanOrder.getId() |
| | | ,igtOnHookPlanOrderItem.getProfit()); |
| | | igtOnHookPlanOrderDao.addAvaAmountById(igtOnHookPlanOrder.getId() |
| | | ,totalAmount); |
| | | }else{ |
| | | //如果不中奖,减少挂机剩余金额即减少本金 |
| | | Integer updateCount = igtOnHookPlanOrderDao.updateAvaAmountById(igtOnHookPlanOrder.getId() |
| | | ,igtOnHookPlanOrderItem.getAmount()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void endOnHookMessage(Long orderId) { |
| | | IgtOnHookPlanOrder igtOnHookPlanOrder = igtOnHookPlanOrderDao.selectById(orderId); |
| | | if(ObjectUtil.isEmpty(igtOnHookPlanOrder)){ |
| | | return; |
| | | } |
| | | Long memberId = igtOnHookPlanOrder.getMemberId(); |
| | | BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount(); |
| | | |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | if(ObjectUtil.isEmpty(dappMemberEntity)){ |
| | | return; |
| | | } |
| | | //避免重复 |
| | | QueryWrapper<DappOnHookDone> objectQueryWrapper = new QueryWrapper<>(); |
| | | objectQueryWrapper.eq("order_id",igtOnHookPlanOrder.getId()); |
| | | List<DappOnHookDone> dappOnHookDones = dappOnHookDoneDao.selectList(objectQueryWrapper); |
| | | if(CollUtil.isNotEmpty(dappOnHookDones)){ |
| | | return; |
| | | } |
| | | //生成记录 |
| | | DappOnHookDone dappOnHookDone = new DappOnHookDone(dappMemberEntity.getId(), igtOnHookPlanOrder.getId()); |
| | | dappOnHookDoneDao.insert(dappOnHookDone); |
| | | //获取收益率 |
| | | 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 multiply = hangingRevenueLevel.multiply(planAmount); |
| | | DataDictionaryCustom maxHoursDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MAX_HOURS.getType(), DataDictionaryEnum.MAX_HOURS.getCode()); |
| | | //挂机总时长(分钟) |
| | | BigDecimal maxHours = new BigDecimal(maxHoursDic.getValue()).multiply(new BigDecimal(60)); |
| | | //得到每分钟的收益 |
| | | BigDecimal minuteProfit = multiply.divide(maxHours, 4, BigDecimal.ROUND_DOWN); |
| | | //获取挂机开始时间到现在的总时长(分钟数) |
| | | Date startTime = igtOnHookPlanOrder.getStartTime(); |
| | | long between = DateUtil.between(startTime, DateUtil.date(), DateUnit.MINUTE); |
| | | //获得总收益 |
| | | BigDecimal totalProfit = minuteProfit.multiply(new BigDecimal(between)).setScale(4,BigDecimal.ROUND_DOWN); |
| | | if(multiply.compareTo(totalProfit) < 0){ |
| | | totalProfit = multiply; |
| | | } |
| | | |
| | | // BigDecimal totalProfit = planAmount.multiply(hangingRevenueLevel).setScale(4,BigDecimal.ROUND_DOWN); |
| | | |
| | | String refererIds = dappMemberEntity.getRefererIds(); |
| | | List<String> refererIdList = StrUtil.split(refererIds, ",", -1, true, true); |
| | | //只有上级用户金额大于51U才能得到对应的佣金 |
| | | // ArrayList<String> refererIdLisstUp = new ArrayList<>(); |
| | | // for(String inviteId : refererIdList){ |
| | | // DappMemberEntity dappMemberUp = dappMemberDao.selectMemberInfoByInviteId(inviteId); |
| | | // if(ObjectUtil.isNotEmpty(dappMemberUp)){ |
| | | // DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(dappMemberUp.getId()); |
| | | // if(AppContants.ONHOOK_BASIC_AMOUNT.compareTo(dappWalletCoinEntity.getAvailableAmount())<=0){ |
| | | // refererIdLisstUp.add(inviteId); |
| | | // } |
| | | // } |
| | | // } |
| | | //生成流水佣金和盈利分成和流水记录,返回剩余盈利 |
| | | BigDecimal profitSharingTotal = dappWalletService.updateLSYJYLFC(refererIdList, totalProfit,igtOnHookPlanOrder.getId()); |
| | | //平台分成 |
| | | //平台拿走35%盈利分成和流水佣金剩下的全部 |
| | | BigDecimal systemAdd = totalProfit.multiply(new BigDecimal(0.4)).subtract(profitSharingTotal); |
| | | BigDecimal systemTotal = dappWalletService.updatePTFC(memberId,systemAdd,igtOnHookPlanOrder.getId()); |
| | | //个人固定拿走60% |
| | | totalProfit = totalProfit.multiply(new BigDecimal(0.6)); |
| | | igtOnHookPlanOrder.setState(2); |
| | | //一次挂机剩余的全部金额 |
| | | BigDecimal totalMoney = totalProfit.add(planAmount); |
| | | |
| | | igtOnHookPlanOrder.setProfit(totalProfit); |
| | | igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder); |
| | | dappMemberEntity.setIsOnHook(3); |
| | | dappMemberDao.updateById(dappMemberEntity); |
| | | |
| | | DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId); |
| | | BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); |
| | | dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntity.getId(),totalMoney); |
| | | |
| | | BigDecimal add = availableAmount.add(totalMoney); |
| | | BigDecimal subtract = add.subtract(totalProfit); |
| | | DappAccountMoneyChangeEntity dappAccountMoneyChangeEntity = new DappAccountMoneyChangeEntity(memberId, subtract, totalProfit, add, "投注盈利", 5,igtOnHookPlanOrder.getId()); |
| | | dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntity); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void memberCoinInsideMessage(Long orderId) { |
| | | MemberCoinWithdrawEntity memberCoinWithdrawEntity = memberCoinWithdrawDao.selectById(orderId); |
| | | memberCoinWithdrawEntity.setStatus(MemberCoinWithdrawEntity.STATUS_YES); |
| | | memberCoinWithdrawDao.updateById(memberCoinWithdrawEntity); |
| | | //转出账户,总额减少,冻结减少 |
| | | BigDecimal amount = memberCoinWithdrawEntity.getAmount().setScale(4,BigDecimal.ROUND_DOWN); |
| | | Long memberIdOut = memberCoinWithdrawEntity.getMemberId(); |
| | | DappWalletCoinEntity dappWalletCoinEntityOut = dappWalletCoinDao.selectByMemberId(memberIdOut); |
| | | dappWalletCoinDao.delTotalAndDelFrozenById(dappWalletCoinEntityOut.getId(),amount); |
| | | |
| | | String content = "内部转账"; |
| | | Integer type = 4; |
| | | //转出账户生成一条账户资金变化记录 |
| | | DappAccountMoneyChangeEntity dappAccountMoneyChangeEntityOut = new DappAccountMoneyChangeEntity(memberIdOut, |
| | | dappWalletCoinEntityOut.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN), |
| | | amount.negate(), |
| | | dappWalletCoinEntityOut.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN).subtract(amount), |
| | | content, |
| | | type); |
| | | dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntityOut); |
| | | |
| | | //转入账户,总额增加,余额增加 |
| | | //转账 |
| | | String addressIn = memberCoinWithdrawEntity.getAddress(); |
| | | DappMemberEntity dappMemberEntityIn = dappMemberDao.selectMemberInfoByInviteId(addressIn); |
| | | DappWalletCoinEntity dappWalletCoinEntityIn = dappWalletCoinDao.selectByMemberId(dappMemberEntityIn.getId()); |
| | | Integer countIn = dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntityIn.getId(), memberCoinWithdrawEntity.getAmount()); |
| | | //生成流水记录 |
| | | DappAccountMoneyChangeEntity dappAccountMoneyChangeEntityIn = new DappAccountMoneyChangeEntity(dappMemberEntityIn.getId(), |
| | | dappWalletCoinEntityIn.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN), |
| | | amount, |
| | | dappWalletCoinEntityIn.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN).add(amount), |
| | | "转账", |
| | | 4); |
| | | dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntityIn); |
| | | } |
| | | |
| | | private String getProfitCase(String identity,BigDecimal balance){ |
| | | //匹配会员等级获取对应的收益率 |
| | | List<DataDictionaryCustom> dataDictionaryCustoms = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.LEVEL_MB.getType()); |
| | |
| | | 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); |
| | | } |
| | | } |
| | | // 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); |
| | | // } |
| | | // } |
| | | } |