xiaoyong931011
2021-04-16 17b569ed8554e755c9e5feedf6e7882cdf2c8d01
Merge branch 'activity' of http://120.27.238.55:7000/r/exchange into activity
2 files modified
3 files added
195 ■■■■■ changed files
src/main/java/com/xcong/excoin/common/listener/RedisKeyExpirationListener.java 31 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/listener/RedisListenerConfig.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkUtils.java 4 ●●●● patch | view | raw | blame | history
src/test/java/com/xcong/excoin/MemberTest.java 134 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/listener/RedisKeyExpirationListener.java
New file
@@ -0,0 +1,31 @@
package com.xcong.excoin.common.listener;
import com.xcong.excoin.utils.mail.ZzSmsSend;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;
/**
 * @author wzy
 * @date 2021-04-16
 **/
@Slf4j
@Component
@ConditionalOnProperty(prefix = "app", name = "newest-price-update-job", havingValue = "true")
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expireKey = message.toString();
        if (expireKey.equalsIgnoreCase("whole_bomb_execute")) {
            ZzSmsSend.sendVerifyCode("15773002834", "123456", 2);
        }
    }
}
src/main/java/com/xcong/excoin/common/listener/RedisListenerConfig.java
New file
@@ -0,0 +1,25 @@
package com.xcong.excoin.common.listener;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
/**
 * @author wzy
 * @date 2021-04-16
 **/
@Configuration
@ConditionalOnProperty(prefix = "app", name = "newest-price-update-job", havingValue = "true")
public class RedisListenerConfig {
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
//        container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired"));
        return container;
    }
}
src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java
@@ -288,6 +288,7 @@
    }
    public void wholeBomb() {
        redisUtils.set("whole_bomb_execute", 1, 30);
        Map<String, WholePriceDataModel> dataModelMap = WholeDataQueue.MAP;
        if (CollUtil.isEmpty(dataModelMap)) {
            return;
src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkUtils.java
@@ -21,11 +21,11 @@
@Slf4j
public class DingTalkUtils {
    private static final String SECRET = "SECc0b73559742b950f07eabbd050c406a6abb3b67d112d3735289e90f58884c543";
    private static final String SECRET = "SECbc84fd6c2edb9f2f440f9f969981ca310ba553e7c7994cf68cf26e4607cc5943";
    public static void sendActionCard(int type) {
        log.info("send dingtalk");
        String url = "https://oapi.dingtalk.com/robot/send?access_token=161d5e5b60ae5d6b4c80f2a9c35f9f212961a7c7154aa7e94b99503eca3886b0";
        String url = "https://oapi.dingtalk.com/robot/send?access_token=54a0d627111f3667f7e98691c15becadb742c4da895e60f6d77392389e49658a";
        Long timestamp = System.currentTimeMillis();
        try {
            String sign = generateSign(timestamp);
src/test/java/com/xcong/excoin/MemberTest.java
New file
@@ -0,0 +1,134 @@
package com.xcong.excoin;
import cn.hutool.core.collection.CollUtil;
import com.xcong.excoin.common.system.dto.RegisterDto;
import com.xcong.excoin.modules.documentary.dao.FollowFollowerProfitDao;
import com.xcong.excoin.modules.documentary.dao.FollowFollowerSettingDao;
import com.xcong.excoin.modules.documentary.dao.FollowTraderInfoDao;
import com.xcong.excoin.modules.documentary.dto.DocumentaryOrderSetDto;
import com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity;
import com.xcong.excoin.modules.documentary.entity.FollowFollowerSettingEntity;
import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity;
import com.xcong.excoin.modules.member.service.MemberService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author wzy
 * @date 2021-04-16
 **/
@Slf4j
@SpringBootTest
public class MemberTest {
    @Autowired
    private MemberService memberService;
    @Test
    public void baseInsert() {
        for(int i = 0; i < 100; i++) {
            String phonePrefix = "199999999";
            if (i < 10) {
                phonePrefix = phonePrefix + "0" + i;
            } else {
                phonePrefix = phonePrefix + i;
            }
            RegisterDto registerDto = new RegisterDto();
            registerDto.setAccount(phonePrefix);
            registerDto.setType(1);
            registerDto.setCode("a123456");
            registerDto.setRefererId("49027637");
            memberService.register(registerDto);
        }
    }
    @Autowired
    private FollowFollowerSettingDao followFollowerSettingDao;
    @Autowired
    private FollowTraderInfoDao followTraderInfoDao;
    @Autowired
    private FollowFollowerProfitDao followFollowerProfitDao;
    @Test
    public void followTrader() {
        DocumentaryOrderSetDto documentaryOrderSetDto = new DocumentaryOrderSetDto();
        documentaryOrderSetDto.setTraderId(1L);
        documentaryOrderSetDto.setFollowCnt(1);
        documentaryOrderSetDto.setFollowType(1);
        documentaryOrderSetDto.setSymbols("BTC,ETH,LTC,BCH,EOS,XRP,ETC");
        Long traderId = documentaryOrderSetDto.getTraderId();
        Long memberId = 1L;
        FollowFollowerSettingEntity isExistSetting = followFollowerSettingDao.selectOneBymemberIdAndTradeId(memberId, traderId);
        if (isExistSetting == null) {
            //新增【跟随者设置】数据
            FollowFollowerSettingEntity followFollowerSettingEntity = new FollowFollowerSettingEntity();
            followFollowerSettingEntity.setMemberId(memberId);
            followFollowerSettingEntity.setTraderId(traderId);
            FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(traderId);
            Long traderMemberId = followTraderInfoEntity.getMemberId();
            followFollowerSettingEntity.setTraderMemberId(traderMemberId);
            followFollowerSettingEntity.setSymbols(documentaryOrderSetDto.getSymbols());
            followFollowerSettingEntity.setFollowType(documentaryOrderSetDto.getFollowType());
            followFollowerSettingEntity.setFollowCnt(documentaryOrderSetDto.getFollowCnt());
            followFollowerSettingEntity.setMaxFollowCnt(documentaryOrderSetDto.getMaxFollowCnt());
            followFollowerSettingDao.insert(followFollowerSettingEntity);
            //更新【跟随者收益】数据
            Map<String, Object> columnMap = new HashMap<>();
            columnMap.put("member_id", memberId);
            columnMap.put("trade_id", traderId);
            List<FollowFollowerProfitEntity> selectByMap = followFollowerProfitDao.selectByMap(columnMap);
            if (CollUtil.isNotEmpty(selectByMap)) {
                FollowFollowerProfitEntity followFollowerProfitEntity = selectByMap.get(0);
                followFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_Y);
                followFollowerProfitDao.updateById(followFollowerProfitEntity);
            } else {
                FollowFollowerProfitEntity followFollowerProfitEntity = new FollowFollowerProfitEntity();
                followFollowerProfitEntity.setMemberId(memberId);
                followFollowerProfitEntity.setTradeId(traderId);
                followFollowerProfitEntity.setTradeMemberId(traderMemberId);
                followFollowerProfitEntity.setTotalPrincipal(BigDecimal.ZERO);
                followFollowerProfitEntity.setTotalProfit(BigDecimal.ZERO);
                followFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_Y);
                followFollowerProfitDao.insert(followFollowerProfitEntity);
            }
        } else {
            //更新【跟随者收益】数据
            Map<String, Object> columnMap = new HashMap<>();
            columnMap.put("member_id", memberId);
            columnMap.put("trade_id", traderId);
            List<FollowFollowerProfitEntity> selectByMap = followFollowerProfitDao.selectByMap(columnMap);
            if (CollUtil.isNotEmpty(selectByMap)) {
                FollowFollowerProfitEntity followFollowerProfitEntity = selectByMap.get(0);
                followFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_Y);
                followFollowerProfitDao.updateById(followFollowerProfitEntity);
            }else {
                FollowFollowerProfitEntity followFollowerProfitEntity = new FollowFollowerProfitEntity();
                followFollowerProfitEntity.setMemberId(memberId);
                followFollowerProfitEntity.setTradeId(traderId);
                FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(traderId);
                Long traderMemberId = followTraderInfoEntity.getMemberId();
                followFollowerProfitEntity.setTradeMemberId(traderMemberId);
                followFollowerProfitEntity.setTotalPrincipal(BigDecimal.ZERO);
                followFollowerProfitEntity.setTotalProfit(BigDecimal.ZERO);
                followFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_Y);
                followFollowerProfitDao.insert(followFollowerProfitEntity);
            }
            isExistSetting.setSymbols(documentaryOrderSetDto.getSymbols());
            isExistSetting.setFollowType(documentaryOrderSetDto.getFollowType());
            isExistSetting.setFollowCnt(documentaryOrderSetDto.getFollowCnt());
            isExistSetting.setMaxFollowCnt(documentaryOrderSetDto.getMaxFollowCnt());
            followFollowerSettingDao.updateById(isExistSetting);
        }
    }
}