Helius
2020-07-07 fae05b7ffe899ab996f7a9c31b4c96df7964a0de
add dingtalk
5 files modified
2 files added
177 ■■■■ changed files
pom.xml 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java 22 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkType.java 46 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkUtils.java 67 ●●●●● patch | view | raw | blame | history
pom.xml
@@ -43,6 +43,15 @@
            <scope>system</scope>
            <systemPath>${basedir}/lib/ripple-core-0.0.1-SNAPSHOT.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>taobao</groupId>
            <artifactId>taobao-sdk</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/taobao-sdk-java.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java
@@ -18,6 +18,8 @@
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
import com.xcong.excoin.utils.LogRecordUtils;
import com.xcong.excoin.utils.ThreadPoolUtils;
import com.xcong.excoin.utils.dingtalk.DingTalkUtils;
import com.xcong.excoin.utils.mail.SmsSend;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -85,8 +87,8 @@
                        String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.USDT.name(), "ERC20", balance);
                        // 插入财务记录
                        LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", newBalance, CoinTypeEnum.USDT.name(), 1, 1);
                        // TODO 钉钉发送, 短信提醒
                        ThreadPoolUtils.sendDingTalk(5);
                        MemberEntity member = memberDao.selectById(memberId);
                        if (StrUtil.isNotBlank(member.getPhone())) {
                            String amount = newBalance.toPlainString() + "USDT-ERC20";
@@ -134,8 +136,8 @@
                        // 插入财务记录
                        LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", newBalance, CoinTypeEnum.ETH.name(), 1, 1);
                        // TODO 钉钉消息, 短信提醒
                        ThreadPoolUtils.sendDingTalk(5);
                        MemberEntity member = memberDao.selectById(memberId);
                        if (StrUtil.isNotBlank(member.getPhone())) {
                            String amount = newBalance.toPlainString() + "ETH";
@@ -180,7 +182,7 @@
                        memberWalletCoinDao.updateBlockBalance(walletCoin.getId(), newBalance, balance, 0);
                        String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.USDT.name(), "OMNI", balance);
                        // TODO 钉钉消息, 短信提醒
                        ThreadPoolUtils.sendDingTalk(5);
                        MemberEntity member = memberDao.selectById(memberId);
                        if (StrUtil.isNotBlank(member.getPhone())) {
                            String amount = newBalance.toPlainString() + "USDT-OMNI";
@@ -227,7 +229,7 @@
                        String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.BTC.name(), null, balance);
                        LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", newBalance, CoinTypeEnum.BTC.name(), 1, 1);
                        // TODO 钉钉提醒, 短信提醒
                        ThreadPoolUtils.sendDingTalk(5);
                        MemberEntity member = memberDao.selectById(memberId);
                        if (StrUtil.isNotBlank(member.getPhone())) {
                            String amount = newBalance.toPlainString() + "BTC";
src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java
@@ -6,6 +6,8 @@
import javax.annotation.Resource;
import com.xcong.excoin.utils.ThreadPoolUtils;
import com.xcong.excoin.utils.dingtalk.DingTalkType;
import org.springframework.stereotype.Service;
import com.alibaba.druid.util.StringUtils;
@@ -84,8 +86,7 @@
        memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
        // TODO dingtalk
        ThreadPoolUtils.sendDingTalk(1);
        return Result.ok("确认成功");
    }
@@ -171,8 +172,7 @@
        
        memberQuickBuySaleDao.insert(memberQuickBuySaleEntity);
        // TODO dingtalk
        ThreadPoolUtils.sendDingTalk(2);
        return Result.ok("下单成功");
    }
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -38,6 +38,7 @@
import com.xcong.excoin.utils.MessageSourceUtils;
import com.xcong.excoin.utils.RedisUtils;
import com.xcong.excoin.utils.ShareCodeUtil;
import com.xcong.excoin.utils.ThreadPoolUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -221,7 +222,8 @@
            levelRate.setSymbol(symbolEnum.getValue());
            memberLevelRateDao.insert(levelRate);
        }
        return Result.ok("success");
        return Result.ok(MessageSourceUtils.getString("member_service_0048"));
    }
    @Override
@@ -393,14 +395,8 @@
            member.setCertifyStatus(MemberEntity.CERTIFY_STATUS_ING);
            member.setIdcardNo(idCardNo);
            memberDao.updateById(member);
            /**
             *  TODO dingtalk
             Constant.excutor.execute(new Runnable() {
            @Override public void run() {
            DingTalkUtils.sendActionCard(4);
            }
            });*/
            ThreadPoolUtils.sendDingTalk(4);
            return Result.ok(MessageSourceUtils.getString("member_service_0024"));
        }
        return Result.fail(MessageSourceUtils.getString("member_service_0063"));
@@ -925,14 +921,8 @@
                accountRecord.setSymbol(memberSubmitCoinApplyDto.getSymbol());
                accountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_COIN);
                memberAccountMoneyChangeDao.insert(accountRecord);
                /**
                 *  TODO dingtalk
                 Constant.excutor.execute(new Runnable() {
                @Override public void run() {
                DingTalkUtils.sendActionCard(3);
                }
                });
                 */
                ThreadPoolUtils.sendDingTalk(3);
                return Result.ok(MessageSourceUtils.getString("member_service_0086"));
            } else {
                return Result.fail(MessageSourceUtils.getString("member_service_0005"));
src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java
@@ -2,6 +2,7 @@
import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
import com.xcong.excoin.modules.contract.service.impl.OrderWebsocketServiceImpl;
import com.xcong.excoin.utils.dingtalk.DingTalkUtils;
import java.math.BigDecimal;
import java.util.concurrent.ExecutorService;
@@ -32,4 +33,18 @@
            }
        });
    }
    /**
     * 发送钉钉消息
     *
     * @param type 类型
     */
    public static void sendDingTalk(int type) {
        EXECUTOR.execute(new Runnable() {
            @Override
            public void run() {
                DingTalkUtils.sendActionCard(type);
            }
        });
    }
}
src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkType.java
New file
@@ -0,0 +1,46 @@
package com.xcong.excoin.utils.dingtalk;
/**
 * @author helius
 */
public enum DingTalkType {
    /**
     * 确认充值
     */
    PAY_COMFIRM("红包来了啊!", 1),
    /**
     * 快速卖出
     */
    FAST_SALE("红包来了啊!!", 2),
    /**
     * 提笔
     */
    TI_COIN("红包来了啊!!!", 3),
    /**
     * 实名认证
     */
    CARD_VERIFY("红包来了啊!!!!", 4),
   TYPE_FIVE("红包来了啊!!!!!", 5);
    private String name;
    private int index;
    DingTalkType(String name, int i) {
        this.name = name;
        this.index = i;
    }
    public static String getName(int index) {
        for(DingTalkType type : DingTalkType.values()) {
            if (type.index == index) {
                return type.name;
            }
        }
        return null;
    }
}
src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkUtils.java
New file
@@ -0,0 +1,67 @@
package com.xcong.excoin.utils.dingtalk;
import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.dingtalk.api.response.OapiRobotSendResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
 * @author wzy
 * @date 2020-04-17 22:18
 **/
@Slf4j
public class DingTalkUtils {
    private static final String SECRET = "SECe4afed333b31b66e1d16c87733a29a0b4a3051c71a2960d13e606bfc1dd88b14";
    public static void sendActionCard(int type) {
        log.info("send dingtalk");
        String url = "https://oapi.dingtalk.com/robot/send?access_token=161d5e5b60ae5d6b4c80f2a9c35f9f212961a7c7154aa7e94b99503eca3886b0";
        Long timestamp = System.currentTimeMillis();
        try {
            String sign = generateSign(timestamp);
            url = url + "&timestamp=" + timestamp + "&sign=" + sign;
            DingTalkClient client = new DefaultDingTalkClient(url);
            OapiRobotSendRequest request = new OapiRobotSendRequest();
            request.setMsgtype("actionCard");
            OapiRobotSendRequest.Actioncard actionCard = new OapiRobotSendRequest.Actioncard();
            actionCard.setTitle(DingTalkType.getName(type));
            actionCard.setBtnOrientation("1");
            actionCard.setText(DingTalkType.getName(type));
            List<OapiRobotSendRequest.Btns> btns = new ArrayList<>();
            OapiRobotSendRequest.Btns btn1 = new OapiRobotSendRequest.Btns();
            btn1.setTitle("查看详情");
            btn1.setActionURL("http://baidu.com");
            btns.add(btn1);
            actionCard.setBtns(btns);
            request.setActionCard(actionCard);
            OapiRobotSendResponse response = client.execute(request);
            log.info(JSONObject.toJSONString(response));
        } catch (Exception e) {
            log.error("#dingtalk send error#", e);
        } finally {
            log.error("#dingtalk finally#");
        }
    }
    private static String generateSign(Long timestamp) throws Exception {
        String stringToToken = timestamp + "\n" + SECRET;
        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(new SecretKeySpec(SECRET.getBytes("UTF-8"), "HmacSHA256"));
        byte[] signData = mac.doFinal(stringToToken.getBytes("UTF-8"));
        String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
        return sign;
    }
}