From cdc27a7a63b4ff81125ec594eb23deb22bd76e21 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 04 Nov 2022 21:57:22 +0800
Subject: [PATCH] 20221021
---
src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java | 69 +++----------
src/main/java/cc/mrbird/febs/dapp/mapper/IgtOnHookPlanOrderDao.java | 2
src/main/resources/mapper/dapp/IgtOnHookPlanOrderDao.xml | 8 +
src/main/resources/application-prod.yml | 2
src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java | 79 ++++++++++++---
src/test/java/cc/mrbird/febs/JunitTest.java | 88 ++++++++--------
6 files changed, 136 insertions(+), 112 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/IgtOnHookPlanOrderDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/IgtOnHookPlanOrderDao.java
index 57c6f20..cd3ecd4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/IgtOnHookPlanOrderDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/IgtOnHookPlanOrderDao.java
@@ -34,4 +34,6 @@
void updateByIds(List<Long> ids);
IPage<DappAccountMoneyChangeEntity> findFlowListInPage(Page<DappAccountMoneyChangeEntity> page, @Param("orderId")Long id);
+
+ void updatePlanOrder();
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
index 8ebb07e..fc9d5c2 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
@@ -17,6 +17,7 @@
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;
@@ -137,6 +138,7 @@
public FebsResponse endPlan(Long orderId) {
DappMemberEntity dappMemberEntity = LoginUserUtil.getAppUser();
Long memberId = dappMemberEntity.getId();
+ //判断系统是否已经结算过了
QueryWrapper<DappOnHookDone> objectQueryWrapper = new QueryWrapper<>();
objectQueryWrapper.eq("order_id",orderId);
List<DappOnHookDone> dappOnHookDones = dappOnHookDoneDao.selectList(objectQueryWrapper);
@@ -148,14 +150,29 @@
igtOnHookPlanOrder.setState(2);
igtOnHookPlanOrderDao.updateById(igtOnHookPlanOrder);
- BigDecimal totalProfit = igtOnHookPlanOrder.getProfit();
+// BigDecimal totalProfit = igtOnHookPlanOrder.getProfit();
BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount();
- BigDecimal avaAmount = igtOnHookPlanOrder.getAvaAmount();
+// BigDecimal avaAmount = igtOnHookPlanOrder.getAvaAmount();
//更新用户表是否正在挂机状态字段为否
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));
String refererIds = dappMemberEntity.getRefererIds();
List<String> refererIdList = StrUtil.split(refererIds, ",", -1, true, true);
@@ -164,7 +181,8 @@
//平台分成,返回剩余盈利
BigDecimal systemTotal = dappWalletService.updatePTFC(memberId,igtOnHookPlanOrder.getProfit(),igtOnHookPlanOrder.getId());
totalProfit = totalProfit.subtract(profitSharingTotal).subtract(systemTotal);
- BigDecimal totalMoney = avaAmount.add(totalProfit);
+// BigDecimal totalMoney = avaAmount.add(totalProfit);
+ BigDecimal totalMoney = planAmount.add(totalProfit);
DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId);
dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntity.getId(),totalMoney);
@@ -172,6 +190,25 @@
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
@@ -474,7 +511,19 @@
BigDecimal hangingRevenueLevel = new BigDecimal(identityDicValueParse.get("hangingRevenue").toString())
.multiply(new BigDecimal(0.01)).setScale(4,BigDecimal.ROUND_DOWN);
//获取收益
- BigDecimal totalProfit = planAmount.multiply(hangingRevenueLevel).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);
+// BigDecimal totalProfit = planAmount.multiply(hangingRevenueLevel).setScale(4,BigDecimal.ROUND_DOWN);
String refererIds = dappMemberEntity.getRefererIds();
List<String> refererIdList = StrUtil.split(refererIds, ",", -1, true, true);
@@ -522,14 +571,14 @@
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);
+// }
+// }
}
diff --git a/src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java b/src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java
index b5af876..84c4b05 100644
--- a/src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java
+++ b/src/main/java/cc/mrbird/febs/job/OnHookPlanJob.java
@@ -282,66 +282,31 @@
@Resource
private UsdtUpdateProducer usdtUpdateProducer;
+ /**
+ * 挂机结束时间一到,所有挂机停止开始计算收益
+ * 根据设置的会员等级对应的(收益率*挂机本金)/(挂机时长*60分钟)=每分钟的收益
+ * 计算每个挂机的挂机时长*每分钟的收益
+ */
+ @Scheduled(cron = "0 0/1 * * * ? ")
+ public void endOnHookPlan(){
+ Log.info("挂机结束时间到了");
+ DataDictionaryCustom endTimeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.END_TIME.getType(), DataDictionaryEnum.END_TIME.getCode());
+ DateTime date = DateUtil.date();
+ DateTime endTime = DateUtil.parseDate(endTimeDic.getValue());
+ if(DateUtil.compare(endTime,date)>=0){
+ //
+ igtOnHookPlanOrderDao.updatePlanOrder();
+ }
+ }
+
// @Scheduled(cron = "0/5 * * * * ? ")
@Scheduled(cron = "0 0/1 * * * ? ")
public void updatePlanOrder(){
Log.info("开始更新挂机主表状态");
List<IgtOnHookPlanOrder> igtOnHookPlanOrders = igtOnHookPlanOrderDao.selectByState(3);
if(CollUtil.isNotEmpty(igtOnHookPlanOrders)){
-// List<Long> ids = igtOnHookPlanOrderDao.selectIdsByState(3);
-// //更新状态避免重复查询
-// igtOnHookPlanOrderDao.updateByIds(ids);
for(IgtOnHookPlanOrder igtOnHookPlanOrder : igtOnHookPlanOrders){
usdtUpdateProducer.sendOnHookEnd(igtOnHookPlanOrder.getId());
-
-// Long memberId = igtOnHookPlanOrder.getMemberId();
-// BigDecimal planAmount = igtOnHookPlanOrder.getPlanAmount();
-//
-// DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
-// //避免重复
-// QueryWrapper<DappOnHookDone> objectQueryWrapper = new QueryWrapper<>();
-// objectQueryWrapper.eq("order_id",igtOnHookPlanOrder.getId());
-// List<DappOnHookDone> dappOnHookDones = dappOnHookDoneDao.selectList(objectQueryWrapper);
-// if(CollUtil.isNotEmpty(dappOnHookDones)){
-// continue;
-// }
-// //生成记录
-// 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 totalProfit = planAmount.multiply(hangingRevenueLevel).setScale(4,BigDecimal.ROUND_DOWN);
-//
-// String refererIds = dappMemberEntity.getRefererIds();
-// List<String> refererIdList = StrUtil.split(refererIds, ",", -1, true, true);
-// //生成流水佣金和盈利分成和流水记录,返回剩余盈利
-// BigDecimal profitSharingTotal = dappWalletService.updateLSYJYLFC(refererIdList, totalProfit,igtOnHookPlanOrder.getId());
-// //平台分成,返回剩余盈利
-// BigDecimal systemTotal = dappWalletService.updatePTFC(memberId,totalProfit,igtOnHookPlanOrder.getId());
-// totalProfit = totalProfit.subtract(profitSharingTotal).subtract(systemTotal);
-//
-// 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);
}
}
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 9de4699..700b3a8 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -2,7 +2,7 @@
datasource:
dynamic:
# 是否开启 SQL日志输出,生产环境建议关闭,有性能损耗
- p6spy: true
+ p6spy: false
hikari:
connection-timeout: 30000
max-lifetime: 1800000
diff --git a/src/main/resources/mapper/dapp/IgtOnHookPlanOrderDao.xml b/src/main/resources/mapper/dapp/IgtOnHookPlanOrderDao.xml
index cb9047a..04a1865 100644
--- a/src/main/resources/mapper/dapp/IgtOnHookPlanOrderDao.xml
+++ b/src/main/resources/mapper/dapp/IgtOnHookPlanOrderDao.xml
@@ -109,4 +109,12 @@
order by a.create_time asc
</select>
+ <update id="updatePlanOrder">
+ update igt_on_hook_plan_order
+ set
+ state = 3
+ where
+ state = 1
+ </update>
+
</mapper>
\ No newline at end of file
diff --git a/src/test/java/cc/mrbird/febs/JunitTest.java b/src/test/java/cc/mrbird/febs/JunitTest.java
index 0778b42..de7846c 100644
--- a/src/test/java/cc/mrbird/febs/JunitTest.java
+++ b/src/test/java/cc/mrbird/febs/JunitTest.java
@@ -220,14 +220,14 @@
// @Autowired
// private IgtOnHookPlanOrderDao igtOnHookPlanOrderDao;
//
-// @Autowired
-// private DappWalletCoinDao dappWalletCoinDao;
+ @Autowired
+ private DappWalletCoinDao dappWalletCoinDao;
//
// @Autowired
// private DappAccountMoneyChangeDao dappAccountMoneyChangeDao;
//
-// @Autowired
-// private DappMemberDao dappMemberDao;
+ @Autowired
+ private DappMemberDao dappMemberDao;
//
// @Autowired
// private DappOnHookAwardDao dappOnHookAwardDao;
@@ -253,46 +253,46 @@
// System.out.println(active);
// }
//
-// @Test
-// public void testUpdateIgt(){Log.info("更新用户代理等级");
-// DateTime date = DateUtil.date();
-// //查询账户总金额大于51的有效用户
-// List<DappMemberEntity> dappMemberEntities = dappWalletCoinDao.selectTotalAmount();
-// if(CollUtil.isEmpty(dappMemberEntities)){
-// //没有账户金额大于51,则全部为会员
-// dappMemberDao.updateIdentity();
-// }else{
-// List<DappMemberEntity> LEVEL_IB = getMemberLevelList(dappMemberEntities, DataDictionaryEnum.LEVEL_MB.getCode(), DataDictionaryEnum.LEVEL_IB.getCode());
-// List<DappMemberEntity> LEVEL_FIB = getMemberLevelList(LEVEL_IB, DataDictionaryEnum.LEVEL_IB.getCode(), DataDictionaryEnum.LEVEL_FIB.getCode());
-// List<DappMemberEntity> LEVEL_CIB = getMemberLevelList(LEVEL_FIB, DataDictionaryEnum.LEVEL_FIB.getCode(), DataDictionaryEnum.LEVEL_CIB.getCode());
-// List<DappMemberEntity> LEVEL_AIB = getMemberLevelList(LEVEL_CIB, DataDictionaryEnum.LEVEL_CIB.getCode(), DataDictionaryEnum.LEVEL_AIB.getCode());
-// List<DappMemberEntity> LEVEL_GIB = getMemberLevelList(LEVEL_AIB, DataDictionaryEnum.LEVEL_AIB.getCode(), DataDictionaryEnum.LEVEL_GIB.getCode());
-// List<DappMemberEntity> LEVEL_BP = getMemberLevelList(LEVEL_GIB, DataDictionaryEnum.LEVEL_GIB.getCode(), DataDictionaryEnum.LEVEL_BP.getCode());
-// List<DappMemberEntity> LEVEL_SP = getMemberLevelList(LEVEL_BP, DataDictionaryEnum.LEVEL_BP.getCode(), DataDictionaryEnum.LEVEL_SP.getCode());
-// List<DappMemberEntity> LEVEL_GP = getMemberLevelList(LEVEL_SP, DataDictionaryEnum.LEVEL_SP.getCode(), DataDictionaryEnum.LEVEL_GP.getCode());
-// }
-// }
-//
-// private List<DappMemberEntity> getMemberLevelList(List<DappMemberEntity> dappMemberEntities,String identity,String identityNext){
-// List<DappMemberEntity> dappMemberEntitiesNext = new ArrayList<>();
-// if(CollUtil.isNotEmpty(dappMemberEntities)){
-// for(DappMemberEntity dappMemberEntity : dappMemberEntities){
-// Long memberEntityId = dappMemberEntity.getId();
-// String refererId = dappMemberEntity.getRefererId();
-// String inviteId = dappMemberEntity.getInviteId();
-// //下级是否存在三个账户总金额大于51的会员,并且代理等级为identity
-// List<DappMemberEntity> levelMbMembers = dappMemberDao.selectTotalAmountByRefererIdAndIdentity(inviteId,identity);
-// if(CollUtil.isNotEmpty(levelMbMembers) && 3 <= levelMbMembers.size()){
-// //设置identityNext级别
-// dappMemberDao.updateIdentityByMemberId(identityNext,memberEntityId);
-// //获取他的上级会员信息
-// DappMemberEntity dappMemberEntityNext = dappMemberDao.selectMemberInfoByInviteId(refererId);
-// dappMemberEntitiesNext.add(dappMemberEntityNext);
-// }
-// }
-// }
-// return dappMemberEntitiesNext;
-// }
+ @Test
+ public void testUpdateIgt(){Log.info("更新用户代理等级");
+ DateTime date = DateUtil.date();
+ //查询账户总金额大于51的有效用户
+ List<DappMemberEntity> dappMemberEntities = dappWalletCoinDao.selectTotalAmount();
+ if(CollUtil.isEmpty(dappMemberEntities)){
+ //没有账户金额大于51,则全部为会员
+ dappMemberDao.updateIdentity();
+ }else{
+ List<DappMemberEntity> LEVEL_IB = getMemberLevelList(dappMemberEntities, DataDictionaryEnum.LEVEL_MB.getCode(), DataDictionaryEnum.LEVEL_IB.getCode());
+ List<DappMemberEntity> LEVEL_FIB = getMemberLevelList(LEVEL_IB, DataDictionaryEnum.LEVEL_IB.getCode(), DataDictionaryEnum.LEVEL_FIB.getCode());
+ List<DappMemberEntity> LEVEL_CIB = getMemberLevelList(LEVEL_FIB, DataDictionaryEnum.LEVEL_FIB.getCode(), DataDictionaryEnum.LEVEL_CIB.getCode());
+ List<DappMemberEntity> LEVEL_AIB = getMemberLevelList(LEVEL_CIB, DataDictionaryEnum.LEVEL_CIB.getCode(), DataDictionaryEnum.LEVEL_AIB.getCode());
+ List<DappMemberEntity> LEVEL_GIB = getMemberLevelList(LEVEL_AIB, DataDictionaryEnum.LEVEL_AIB.getCode(), DataDictionaryEnum.LEVEL_GIB.getCode());
+ List<DappMemberEntity> LEVEL_BP = getMemberLevelList(LEVEL_GIB, DataDictionaryEnum.LEVEL_GIB.getCode(), DataDictionaryEnum.LEVEL_BP.getCode());
+ List<DappMemberEntity> LEVEL_SP = getMemberLevelList(LEVEL_BP, DataDictionaryEnum.LEVEL_BP.getCode(), DataDictionaryEnum.LEVEL_SP.getCode());
+ List<DappMemberEntity> LEVEL_GP = getMemberLevelList(LEVEL_SP, DataDictionaryEnum.LEVEL_SP.getCode(), DataDictionaryEnum.LEVEL_GP.getCode());
+ }
+ }
+
+ private List<DappMemberEntity> getMemberLevelList(List<DappMemberEntity> dappMemberEntities,String identity,String identityNext){
+ List<DappMemberEntity> dappMemberEntitiesNext = new ArrayList<>();
+ if(CollUtil.isNotEmpty(dappMemberEntities)){
+ for(DappMemberEntity dappMemberEntity : dappMemberEntities){
+ Long memberEntityId = dappMemberEntity.getId();
+ String refererId = dappMemberEntity.getRefererId();
+ String inviteId = dappMemberEntity.getInviteId();
+ //下级是否存在三个账户总金额大于51的会员,并且代理等级为identity
+ List<DappMemberEntity> levelMbMembers = dappMemberDao.selectTotalAmountByRefererIdAndIdentity(inviteId,identity);
+ if(CollUtil.isNotEmpty(levelMbMembers) && 3 <= levelMbMembers.size()){
+ //设置identityNext级别
+ dappMemberDao.updateIdentityByMemberId(identityNext,memberEntityId);
+ //获取他的上级会员信息
+ DappMemberEntity dappMemberEntityNext = dappMemberDao.selectMemberInfoByInviteId(refererId);
+ dappMemberEntitiesNext.add(dappMemberEntityNext);
+ }
+ }
+ }
+ return dappMemberEntitiesNext;
+ }
//
// @Test
// public void testProfitSharing(){
--
Gitblit v1.9.1