src/main/java/com/xcong/excoin/common/system/controller/LoginController.java
@@ -127,7 +127,7 @@ authInfo.put("user", memberInfoVo); } BigDecimal total = coinService.getAllWalletAmount(memberEntity.getId()); BigDecimal total = BigDecimal.ZERO; if (total.compareTo(AppContants.BASE_MIN_AMOUNT) > 0) { authInfo.put("baseUrl", AppContants.BASE_URL_L2); } else { src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -47,6 +47,7 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import sun.management.resources.agent; import java.math.BigDecimal; import java.util.ArrayList; @@ -129,7 +130,7 @@ @Resource private MemberWalletContractSimulateDao memberWalletContractSimulateDao; @Autowired @Resource private YdBasicLevelSettingDao ydBasicLevelSettingDao; @Transactional() @@ -310,6 +311,12 @@ memberInfoVo.setAgentName(agent.getName()); memberInfoVo.setAgentId(agent.getId()); } if (MemberEntity.IS_TRADER_Y == memberEntity.getIsTrader()) { memberInfoVo.setAgentName("合伙人"); memberInfoVo.setAgentId(3L); } memberInfoVo.setInviteId(memberEntity.getInviteId()); } return Result.ok(memberInfoVo); src/main/java/com/xcong/excoin/modules/yunding/controller/YunDingController.java
@@ -160,6 +160,26 @@ return yunDingService.bugAgentLevel(bugAgentLeveldto); } /** * 我的团队信息 */ @ApiOperation(value = "我的团队信息") @ApiResponses({ @ApiResponse(code = 0, message = "success", response = TeamVo.class) }) @PostMapping(value = "/getTeamList") public Result getTeamList(@RequestBody @Validated TeamInfoDto teamInfoDto) { return yunDingService.getTeamList(teamInfoDto); } src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java
@@ -3,10 +3,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.yunding.dto.YdOrderListDto; import com.xcong.excoin.modules.yunding.entity.YdBasicLevelSettingEntity; import com.xcong.excoin.modules.yunding.entity.YdOrderEntity; import com.xcong.excoin.modules.yunding.vo.AgentVo; import com.xcong.excoin.modules.yunding.vo.TeamInfoVo; import com.xcong.excoin.modules.yunding.vo.YdOrderVo; import org.apache.ibatis.annotations.Param; @@ -32,4 +34,11 @@ List<YdOrderEntity> selectTeamAllPower(@Param("inviteId") String inviteId); int updateOrderProfit(@Param("profit") BigDecimal profit, @Param("id") Long id); int selectAllPowerByMemberIdAndElse(@Param("inviteId")String inviteId); IPage<TeamInfoVo> getTeamInfoList(Page<TeamInfoVo> page, @Param("record")MemberEntity memberEntity); List<MemberEntity> selectMemberByInviteId(@Param("inviteId")String inviteId); } src/main/java/com/xcong/excoin/modules/yunding/dto/TeamInfoDto.java
New file @@ -0,0 +1,21 @@ package com.xcong.excoin.modules.yunding.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; @Data @ApiModel(value = "TeamInfoDto", description = "团队入参类") public class TeamInfoDto { @NotNull @Min(1) @ApiModelProperty(value = "第几页", example = "1") private int pageNum; @NotNull @ApiModelProperty(value = "每页数量", example = "10") private int pageSize; } src/main/java/com/xcong/excoin/modules/yunding/entity/YdBasicSettingEntity.java
@@ -42,5 +42,9 @@ * XCH兑换USDT手续费 */ private BigDecimal changeXch; /** * 直推返利 */ private BigDecimal parentRatio; } src/main/java/com/xcong/excoin/modules/yunding/service/Impl/XchProfitServiceImpl.java
@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.xcong.excoin.common.contants.AppContants; import com.xcong.excoin.modules.coin.dao.MemberAccountMoneyChangeDao; import com.xcong.excoin.modules.member.dao.MemberDao; import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao; @@ -18,6 +19,7 @@ import com.xcong.excoin.modules.yunding.entity.YdOrderEntity; import com.xcong.excoin.modules.yunding.entity.YdProductEntity; import com.xcong.excoin.modules.yunding.service.XchProfitService; import com.xcong.excoin.netty.common.Contans; import com.xcong.excoin.rabbit.producer.YunDingProducter; import com.xcong.excoin.utils.LogRecordUtils; import lombok.extern.slf4j.Slf4j; @@ -183,6 +185,7 @@ ydOrderDao.updateById(updateOrder); } // 合伙人分红 List<MemberEntity> partners = memberDao.selectPartnerMemberList(); YdBasicSettingEntity setting = ydBasicSettingDao.selectById(1L); if (CollUtil.isNotEmpty(partners)) { @@ -197,6 +200,19 @@ } } if(!AppContants.SYSTEM_REFERER.equals(memberEntity.getRefererId())) { // 直推返利 MemberEntity parentNode = memberDao.selectMemberInfoByInviteId(memberEntity.getRefererId()); if (parentNode != null) { BigDecimal parentAmount = order.getAmount().multiply(setting.getParentRatio()); String conent = "直推USDT返利"; LogRecordUtils.insertMemberAccountMoneyChangeWithId(parentNode.getId(), conent, parentAmount, "USDT", 1, 10, order.getId()); MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(parentNode.getId(), "USDT"); memberWalletCoinDao.updateBlockBalance(walletCoin.getId(), parentAmount, BigDecimal.ZERO, 0); } } } private Map<Long, BigDecimal> buildReturnRatioObj(List<MemberEntity> agents, int type) { src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java
@@ -1,7 +1,6 @@ package com.xcong.excoin.modules.yunding.service.Impl; 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; @@ -42,7 +41,6 @@ import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.Date; import java.util.HashMap; import java.util.List; @Slf4j @@ -599,6 +597,56 @@ return Result.ok(xchNewPrices); } @Override public Result getTeamList(TeamInfoDto teamInfoDto) { log.info("获取团队信息"); MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); Long memberId = memberEntity.getId(); // Long memberId = 444L; // MemberEntity memberEntity = memberDao.selectById(memberId); /** * 获取团队总人数,总购买数 * 详细列表 * */ TeamVo teamVo = new TeamVo(); //团队总人数 int memberNum = 0; String inviteId = memberEntity.getInviteId(); List<MemberEntity> memberEntityList = ydOrderDao.selectMemberByInviteId(inviteId); if(CollUtil.isNotEmpty(memberEntityList)){ memberNum = memberEntityList.size(); } teamVo.setMemberNum(memberNum); //购买总算力 int allPower = ydOrderDao.selectAllPowerByMemberIdAndElse(inviteId); teamVo.setAllPower(allPower); //详细列表 Page<TeamInfoVo> page = new Page<>(teamInfoDto.getPageNum(), teamInfoDto.getPageSize()); IPage<TeamInfoVo> teamInfoVos = ydOrderDao.getTeamInfoList(page, memberEntity); List<TeamInfoVo> records = teamInfoVos.getRecords(); if(CollUtil.isNotEmpty(records)){ for(TeamInfoVo teamInfoVo : records){ String phone = teamInfoVo.getInvitephone(); if(StrUtil.isNotEmpty(phone)){ teamInfoVo.setInvitephone(StrUtil.subSufByLength(phone,4)); } //下属团队人数 int memberNumInvite = 0; List<MemberEntity> memberEntityInviteList = ydOrderDao.selectMemberByInviteId(phone); if(CollUtil.isNotEmpty(memberEntityInviteList)){ memberNumInvite = memberEntityInviteList.size(); } teamInfoVo.setMemberNum(memberNumInvite); //下属团队总算力 int powerNum = ydOrderDao.selectAllPowerByMemberIdAndElse(phone); teamInfoVo.setPowerNum(powerNum); } } teamVo.setTeamInfoVos(records); return Result.ok(teamVo); } /** * 去加减币币账户余额,减少产品的剩余数目 src/main/java/com/xcong/excoin/modules/yunding/service/YunDingService.java
@@ -32,4 +32,6 @@ Result bugAgentLevel(BugAgentLeveldto bugAgentLeveldto); Result getXchPrice(); Result getTeamList(TeamInfoDto teamInfoDto); } src/main/java/com/xcong/excoin/modules/yunding/vo/TeamInfoVo.java
New file @@ -0,0 +1,20 @@ package com.xcong.excoin.modules.yunding.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import lombok.Data; @Data @ApiModel(value = "TeamInfoVo", description = "团队详情") public class TeamInfoVo { @ApiModelProperty("账号") private String invitephone; @ApiModelProperty("人数") private Integer memberNum; @ApiModelProperty("购买算力") private Integer powerNum; } src/main/java/com/xcong/excoin/modules/yunding/vo/TeamVo.java
New file @@ -0,0 +1,23 @@ package com.xcong.excoin.modules.yunding.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "TeamVo", description = "团队") public class TeamVo { @ApiModelProperty("团队人数") private Integer memberNum; @ApiModelProperty("购买总算力") private Integer allPower; @ApiModelProperty("团队详情") private List<TeamInfoVo> teamInfoVos; } src/main/java/com/xcong/excoin/quartz/job/XchBaseDataUpdateJob.java
@@ -1,6 +1,8 @@ package com.xcong.excoin.quartz.job; import cn.hutool.core.collection.CollUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.modules.yunding.dao.YdBasicSettingDao; import com.xcong.excoin.modules.yunding.entity.YdBasicSettingEntity; @@ -13,6 +15,7 @@ import org.springframework.stereotype.Component; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.math.BigDecimal; @@ -35,15 +38,16 @@ @Autowired private XchProfitService xchProfitService; @Scheduled(cron = "0 0/1 * * * ? ") @Scheduled(cron = "0 0 0/10 * * ? ") // @Scheduled(cron = "0 0/1 * * * ? ") public void baseDataUpdate() { log.info("基础数据更新任务"); // 请求价格等数据 String result = getUrlResponse("https://api2.chiaexplorer.com/blockchainSummary"); String result = execCurl("https://api2.chiaexplorer.com/blockchainSummary"); // 每t预计收益 String profitPerT = getUrlResponse("https://api2.chiaexplorer.com/chart/xchTibDay?period=2w"); String profitPerT = execCurl("https://api2.chiaexplorer.com/chart/xchTibDay?period=2w"); String xchPrice24HStr = getUrlResponse("https://api2.chiaexplorer.com/chart/xchPriceChart?period=24h"); String xchPrice24HStr = execCurl("https://api2.chiaexplorer.com/chart/xchPriceChart?period=24h"); JSONObject jsonObject = (JSONObject) JSONObject.parse(result); JSONObject perTObject = (JSONObject) JSONObject.parse(profitPerT); JSONObject xchPrice24HObj = (JSONObject) JSONObject.parse(xchPrice24HStr); @@ -77,7 +81,7 @@ String result = null; StringBuffer sbf = new StringBuffer(); // 模拟浏览器 String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"; try { System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2"); URL request = new URL(url); @@ -115,4 +119,42 @@ log.info("USDT返利任务"); // xchProfitService.agentUsdtProfitDistributor(); } public static void main(String[] args) { // System.out.println(HttpRequest.get("https://www.chiaexplorer.com").execute().body()); // System.out.println(execCurl(cmds)); } private String execCurl(String url) { String[] cmds = {"curl", url , "-H", "sec-ch-ua: \" Not A;Brand\";v=\"99\", \"Chromium\";v=\"90\", \"Google Chrome\";v=\"90\"" ,"-H", "Accept: application/json, text/plain, */*" ,"-H", "Referer: https://www.chiaexplorer.com/" ,"-H", "sec-ch-ua-mobile: ?0" ,"-H", "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36" ," --compressed"}; ProcessBuilder process = new ProcessBuilder(cmds); Process p; try { p = process.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); StringBuilder builder = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { builder.append(line); builder.append(System.getProperty("line.separator")); } return builder.toString(); } catch (IOException e) { System.out.print("error"); e.printStackTrace(); } return null; } } src/main/resources/application-test.yml
@@ -48,7 +48,7 @@ ## redis配置 redis: ## Redis数据库索引(默认为0) database: 3 database: 4 ## Redis服务器地址 host: 121.37.162.173 ## Redis服务器连接端口 src/main/resources/mapper/yunding/YdOrderDao.xml
@@ -103,4 +103,25 @@ today_profit=#{profit} where id=#{id} </update> <select id="selectAllPowerByMemberIdAndElse" resultType="java.lang.Integer"> select ifnull(sum(quantity),0) from yd_order where type = 1 and member_id in ( select id from member where find_in_set(#{inviteId}, referer_ids) or invite_id=#{inviteId} ) </select> <select id="getTeamInfoList" resultType="com.xcong.excoin.modules.yunding.vo.TeamInfoVo"> SELECT a.invite_id invitephone FROM member a WHERE a.referer_id = #{record.inviteId} </select> <select id="selectMemberByInviteId" resultType="com.xcong.excoin.modules.member.entity.MemberEntity"> select * from member where find_in_set(#{inviteId}, referer_ids) or invite_id=#{inviteId} </select> </mapper> src/test/java/com/xcong/excoin/XchTest.java
@@ -1,8 +1,11 @@ package com.xcong.excoin; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xcong.excoin.modules.coin.parameter.dto.CoinInListDto; import com.xcong.excoin.modules.coin.service.CoinService; import com.xcong.excoin.modules.yunding.dao.YdOrderDao; @@ -14,12 +17,16 @@ import org.springframework.boot.test.context.SpringBootTest; import java.math.BigDecimal; import java.util.Date; import java.util.List; @SpringBootTest public class XchTest { @Autowired private XchProfitService xchProfitService; @Autowired private YdOrderDao ydOrderDao; @Test public void usdtReturnTest() { @@ -34,13 +41,26 @@ } @Test public void becomeAgentTest() { xchProfitService.autoBeAgent(40L); public void orderWork() { QueryWrapper<YdOrderEntity> objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("state",YdOrderEntity.ORDER_STATE_READY); objectQueryWrapper.eq("type",YdOrderEntity.PRODUCT_ORDER); List<YdOrderEntity> ydOrderEntities = ydOrderDao.selectList(objectQueryWrapper); Date date = new Date(); if(CollUtil.isNotEmpty(ydOrderEntities)){ for(YdOrderEntity ydOrderEntity : ydOrderEntities){ Date workTime = ydOrderEntity.getWorkTime(); if(ObjectUtil.isNotEmpty(workTime) && DateUtil.compare(date, workTime) > -1){ Long id = ydOrderEntity.getId(); ydOrderDao.UpdateByIdAndState(id,YdOrderEntity.ORDER_STATE_WORK); } } } } @Test public void orderUsdtProfitTest() { xchProfitService.usdtProfitDistributorByOrderId(1L); xchProfitService.usdtProfitDistributorByOrderId(17L); } // // @Autowired @@ -51,8 +71,6 @@ // ydPowerJob.orderWork(); // } @Autowired private YdOrderDao ydOrderDao; @Test public void orderTest() {