Helius
2020-07-07 fae05b7ffe899ab996f7a9c31b4c96df7964a0de
add dingtalk
5 files modified
2 files added
529 ■■■■■ 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 332 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java 50 ●●●●● 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;
@@ -33,179 +35,177 @@
import com.xcong.excoin.modules.platform.entity.PlatformPaymentMethodEntity;
@Service
public class MemberQuickBuySaleServiceImpl extends ServiceImpl<MemberQuickBuySaleDao, MemberQuickBuySaleEntity> implements MemberQuickBuySaleService{
    @Resource
    MemberDao memberDao;
    @Resource
    MemberQuickBuySaleDao memberQuickBuySaleDao;
    @Resource
    MemberWalletCoinDao memberWalletCoinDao;
    @Resource
    MemberPaymentMethodDao memberPaymentMethodDao;
    @Resource
    PlatformPaymentMethodDao platformPaymentMethodDao;
public class MemberQuickBuySaleServiceImpl extends ServiceImpl<MemberQuickBuySaleDao, MemberQuickBuySaleEntity> implements MemberQuickBuySaleService {
    @Override
    public Result recharge(MemberEntity member,MemberQuickBuySaleDto memberQuickBuySaleDto) {
        // 生成订单号
        Long timestamp = System.currentTimeMillis();
        int random = (int) (Math.random() * 10);
        String chargeNo = String.valueOf(timestamp).substring(2) + random;
        // 插入订单表
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
        memberQuickBuySaleEntity.setOrderStatus(1);
        memberQuickBuySaleEntity.setMemberId(member.getId());
        memberQuickBuySaleEntity.setAmountUsdt(memberQuickBuySaleDto.getAmountUsdt());
        memberQuickBuySaleEntity.setAmountCny(memberQuickBuySaleDto.getAmountCny());
        memberQuickBuySaleEntity.setUnitPrice(memberQuickBuySaleDto.getUnitPrice());
        memberQuickBuySaleEntity.setCreateTime(new Date());
        memberQuickBuySaleEntity.setOrderNo(chargeNo);
        memberQuickBuySaleEntity.setOrderType("B");
        // 支付码 ID+四位随机数
        int ran = (int) (Math.random() * 10000000);
        memberQuickBuySaleEntity.setPaymentCode(ran + "");
        memberQuickBuySaleDao.insert(memberQuickBuySaleEntity);
        MemberQuickBuySaleVo memberQuickBuySaleVo = new MemberQuickBuySaleVo();
        memberQuickBuySaleVo.setId(memberQuickBuySaleEntity.getId());
        // 返回前台付款方式
        return Result.ok("提交成功",memberQuickBuySaleVo);
    }
    @Resource
    MemberDao memberDao;
    @Resource
    MemberQuickBuySaleDao memberQuickBuySaleDao;
    @Resource
    MemberWalletCoinDao memberWalletCoinDao;
    @Resource
    MemberPaymentMethodDao memberPaymentMethodDao;
    @Resource
    PlatformPaymentMethodDao platformPaymentMethodDao;
    @Override
    public Result commitPay(MemberQuickBuySaleCommitDto memberQuickBuySaleCommitDto) {
        // 用户提交支付确认 将状态改为付款中
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
        memberQuickBuySaleEntity.setId(memberQuickBuySaleCommitDto.getId());
        memberQuickBuySaleEntity.setOrderStatus(2);
        memberQuickBuySaleEntity.setPaymentAccount(memberQuickBuySaleCommitDto.getPaymentAccount());
        memberQuickBuySaleEntity.setPaymentName(memberQuickBuySaleCommitDto.getPaymentName());
    @Override
    public Result recharge(MemberEntity member, MemberQuickBuySaleDto memberQuickBuySaleDto) {
        // 生成订单号
        Long timestamp = System.currentTimeMillis();
        int random = (int) (Math.random() * 10);
        String chargeNo = String.valueOf(timestamp).substring(2) + random;
        // 插入订单表
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
        memberQuickBuySaleEntity.setOrderStatus(1);
        memberQuickBuySaleEntity.setMemberId(member.getId());
        memberQuickBuySaleEntity.setAmountUsdt(memberQuickBuySaleDto.getAmountUsdt());
        memberQuickBuySaleEntity.setAmountCny(memberQuickBuySaleDto.getAmountCny());
        memberQuickBuySaleEntity.setUnitPrice(memberQuickBuySaleDto.getUnitPrice());
        memberQuickBuySaleEntity.setCreateTime(new Date());
        memberQuickBuySaleEntity.setOrderNo(chargeNo);
        memberQuickBuySaleEntity.setOrderType("B");
        // 支付码 ID+四位随机数
        int ran = (int) (Math.random() * 10000000);
        memberQuickBuySaleEntity.setPaymentCode(ran + "");
        memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
        memberQuickBuySaleDao.insert(memberQuickBuySaleEntity);
        MemberQuickBuySaleVo memberQuickBuySaleVo = new MemberQuickBuySaleVo();
        memberQuickBuySaleVo.setId(memberQuickBuySaleEntity.getId());
        // 返回前台付款方式
        return Result.ok("提交成功", memberQuickBuySaleVo);
    }
        // TODO dingtalk
        return Result.ok("确认成功");
    }
    @Override
    public Result commitPay(MemberQuickBuySaleCommitDto memberQuickBuySaleCommitDto) {
        // 用户提交支付确认 将状态改为付款中
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
        memberQuickBuySaleEntity.setId(memberQuickBuySaleCommitDto.getId());
        memberQuickBuySaleEntity.setOrderStatus(2);
        memberQuickBuySaleEntity.setPaymentAccount(memberQuickBuySaleCommitDto.getPaymentAccount());
        memberQuickBuySaleEntity.setPaymentName(memberQuickBuySaleCommitDto.getPaymentName());
    @Override
    public Result selectById(Long id) {
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectById(id);
        MemberQuickBuySaleDetailVo memberQuickBuySaleDetailVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity);
        // 收款信息
        QueryWrapper<PlatformPaymentMethodEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("status", "1");
        List<PlatformPaymentMethodEntity> paymentMethodList = platformPaymentMethodDao.selectList(queryWrapper);
        // 随机一个
        if (CollectionUtils.isEmpty(paymentMethodList)) {
            return Result.fail("收款方式为空");
        }
        memberQuickBuySaleDetailVo.setPlatforPaymentMethodList(paymentMethodList);
        long startTime = memberQuickBuySaleEntity.getCreateTime().getTime();
        long nowTime = new Date().getTime();
        long third = 30*60*1000;
        memberQuickBuySaleDetailVo.setTimeLeft((third-nowTime+startTime)/1000);
        return Result.ok(memberQuickBuySaleDetailVo);
    }
    @Override
    public Result selectAll(String type) {
        MemberEntity member = LoginUserUtils.getAppLoginUser();
        QueryWrapper<MemberQuickBuySaleEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("member_id", member.getId());
        if(!StringUtils.isEmpty(type)) {
            queryWrapper.eq("order_type", type);
        }
        queryWrapper.orderByDesc("id");
        List<MemberQuickBuySaleEntity> memberQuickBuySaleEntityList = memberQuickBuySaleDao.selectList(queryWrapper);
        List<MemberQuickBuySaleDetailVo> memberQuickBuySaleDetailVoList = MemberQuickBuySaleEntityMapper.INSTANCE.entityListToVoList(memberQuickBuySaleEntityList);
        return Result.ok(memberQuickBuySaleDetailVoList);
    }
        memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
    @Override
    public Result sell(MemberEntity member,MemberQuickBuySaleDto memberQuickBuySaleDto) {
        // 判断是否存在足够余额
        MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(),CoinTypeEnum.USDT.toString());
        // 判断是否存在足够余额
        if(walletCoin ==null) {
            return Result.fail("您当前可用USDT额度不够");
        }
        BigDecimal extractUsdt = memberQuickBuySaleDto.getAmountUsdt();
        if (extractUsdt == null) {
            return Result.fail("请输入提币量");
        }
        // 判断是否足够
        System.out.println("提币数:"+extractUsdt.doubleValue()+"   可用:"+walletCoin.getAvailableBalance());
        if (extractUsdt.compareTo(walletCoin.getAvailableBalance())==1) {
            return Result.fail("您当前可用USDT额度不够");
        }
        ThreadPoolUtils.sendDingTalk(1);
        return Result.ok("确认成功");
    }
        // 判断是否存在收款方式
        List<MemberPaymentMethodEntity> payMentMethodList = memberPaymentMethodDao.selectByMemberId(member.getId());
        if(CollectionUtils.isEmpty(payMentMethodList)){
            return Result.fail("请配置收款方式");
        }
        // 冻结可用额度
        int i = memberWalletCoinDao.updateFrozenBalance(member.getId(),
                walletCoin.getId(), extractUsdt);
        if (i <= 0) {
            return Result.fail("可用USDT余额不足");
        }
        // 生成订单号
        Long timestamp = System.currentTimeMillis();
        int random = (int) (Math.random() * 10);
        String chargeNo = String.valueOf(timestamp).substring(2) + random;
        // 插入订单表
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
        memberQuickBuySaleEntity.setOrderStatus(1);
        memberQuickBuySaleEntity.setMemberId(member.getId());
        memberQuickBuySaleEntity.setAmountUsdt(memberQuickBuySaleDto.getAmountUsdt());
        memberQuickBuySaleEntity.setAmountCny(memberQuickBuySaleDto.getAmountCny());
        memberQuickBuySaleEntity.setOrderNo(chargeNo);
        memberQuickBuySaleEntity.setOrderType("S");
        // 支付码 ID+四位随机数
        int ran = (int) (Math.random() * 10000000);
        memberQuickBuySaleEntity.setPaymentCode(ran + "");
        memberQuickBuySaleDao.insert(memberQuickBuySaleEntity);
    @Override
    public Result selectById(Long id) {
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectById(id);
        MemberQuickBuySaleDetailVo memberQuickBuySaleDetailVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity);
        // 收款信息
        QueryWrapper<PlatformPaymentMethodEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("status", "1");
        List<PlatformPaymentMethodEntity> paymentMethodList = platformPaymentMethodDao.selectList(queryWrapper);
        // 随机一个
        if (CollectionUtils.isEmpty(paymentMethodList)) {
            return Result.fail("收款方式为空");
        }
        memberQuickBuySaleDetailVo.setPlatforPaymentMethodList(paymentMethodList);
        long startTime = memberQuickBuySaleEntity.getCreateTime().getTime();
        long nowTime = new Date().getTime();
        long third = 30 * 60 * 1000;
        memberQuickBuySaleDetailVo.setTimeLeft((third - nowTime + startTime) / 1000);
        return Result.ok(memberQuickBuySaleDetailVo);
    }
        // TODO dingtalk
        return Result.ok("下单成功");
    }
    @Override
    public Result selectAll(String type) {
        MemberEntity member = LoginUserUtils.getAppLoginUser();
        QueryWrapper<MemberQuickBuySaleEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("member_id", member.getId());
        if (!StringUtils.isEmpty(type)) {
            queryWrapper.eq("order_type", type);
        }
        queryWrapper.orderByDesc("id");
        List<MemberQuickBuySaleEntity> memberQuickBuySaleEntityList = memberQuickBuySaleDao.selectList(queryWrapper);
        List<MemberQuickBuySaleDetailVo> memberQuickBuySaleDetailVoList = MemberQuickBuySaleEntityMapper.INSTANCE.entityListToVoList(memberQuickBuySaleEntityList);
        return Result.ok(memberQuickBuySaleDetailVoList);
    }
    @Override
    public Result cancelRecharge(Long id) {
        // 获取当前登录用户
        MemberEntity member = LoginUserUtils.getAppLoginUser();
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(member.getId(),id);
        memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER);
        memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
        return Result.ok("成功");
    }
    @Override
    public Result cancelSell(Long id) {
        // 获取当前登录用户
        MemberEntity member = LoginUserUtils.getAppLoginUser();
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(member.getId(),id);
        if(memberQuickBuySaleEntity!=null) {
            memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER);
            memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
            MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(),CoinTypeEnum.USDT.toString());
            // 冻结资金返回可用
            int i = memberWalletCoinDao.subFrozenBalance(member.getId(),
                    walletCoin.getId(), memberQuickBuySaleEntity.getAmountUsdt());
            if(i<0) {
                return Result.fail("撤单失败");
            }
            return Result.ok("成功");
        }else {
            return Result.fail("订单不存在");
        }
    }
    @Override
    public Result sell(MemberEntity member, MemberQuickBuySaleDto memberQuickBuySaleDto) {
        // 判断是否存在足够余额
        MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(), CoinTypeEnum.USDT.toString());
        // 判断是否存在足够余额
        if (walletCoin == null) {
            return Result.fail("您当前可用USDT额度不够");
        }
        BigDecimal extractUsdt = memberQuickBuySaleDto.getAmountUsdt();
        if (extractUsdt == null) {
            return Result.fail("请输入提币量");
        }
        // 判断是否足够
        System.out.println("提币数:" + extractUsdt.doubleValue() + "   可用:" + walletCoin.getAvailableBalance());
        if (extractUsdt.compareTo(walletCoin.getAvailableBalance()) == 1) {
            return Result.fail("您当前可用USDT额度不够");
        }
        // 判断是否存在收款方式
        List<MemberPaymentMethodEntity> payMentMethodList = memberPaymentMethodDao.selectByMemberId(member.getId());
        if (CollectionUtils.isEmpty(payMentMethodList)) {
            return Result.fail("请配置收款方式");
        }
        // 冻结可用额度
        int i = memberWalletCoinDao.updateFrozenBalance(member.getId(),
                walletCoin.getId(), extractUsdt);
        if (i <= 0) {
            return Result.fail("可用USDT余额不足");
        }
        // 生成订单号
        Long timestamp = System.currentTimeMillis();
        int random = (int) (Math.random() * 10);
        String chargeNo = String.valueOf(timestamp).substring(2) + random;
        // 插入订单表
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
        memberQuickBuySaleEntity.setOrderStatus(1);
        memberQuickBuySaleEntity.setMemberId(member.getId());
        memberQuickBuySaleEntity.setAmountUsdt(memberQuickBuySaleDto.getAmountUsdt());
        memberQuickBuySaleEntity.setAmountCny(memberQuickBuySaleDto.getAmountCny());
        memberQuickBuySaleEntity.setOrderNo(chargeNo);
        memberQuickBuySaleEntity.setOrderType("S");
        // 支付码 ID+四位随机数
        int ran = (int) (Math.random() * 10000000);
        memberQuickBuySaleEntity.setPaymentCode(ran + "");
        memberQuickBuySaleDao.insert(memberQuickBuySaleEntity);
        ThreadPoolUtils.sendDingTalk(2);
        return Result.ok("下单成功");
    }
    @Override
    public Result cancelRecharge(Long id) {
        // 获取当前登录用户
        MemberEntity member = LoginUserUtils.getAppLoginUser();
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(member.getId(), id);
        memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER);
        memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
        return Result.ok("成功");
    }
    @Override
    public Result cancelSell(Long id) {
        // 获取当前登录用户
        MemberEntity member = LoginUserUtils.getAppLoginUser();
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(member.getId(), id);
        if (memberQuickBuySaleEntity != null) {
            memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER);
            memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
            MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(), CoinTypeEnum.USDT.toString());
            // 冻结资金返回可用
            int i = memberWalletCoinDao.subFrozenBalance(member.getId(),
                    walletCoin.getId(), memberQuickBuySaleEntity.getAmountUsdt());
            if (i < 0) {
                return Result.fail("撤单失败");
            }
            return Result.ok("成功");
        } else {
            return Result.fail("订单不存在");
        }
    }
}
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;
@@ -102,7 +103,7 @@
    @Resource
    MemberCoinWithdrawDao memberCoinWithdrawDao;
    @Resource
    AppVersionDao appVersionDao;
@@ -221,7 +222,8 @@
            levelRate.setSymbol(symbolEnum.getValue());
            memberLevelRateDao.insert(levelRate);
        }
        return Result.ok("success");
        return Result.ok(MessageSourceUtils.getString("member_service_0048"));
    }
    @Override
@@ -332,9 +334,9 @@
            return Result.fail(MessageSourceUtils.getString("member_service_4000"));
        }
        if (ObjectUtil.isNotEmpty(member)) {
            MemberAuthenticationEntity memberAuthenticationEntity = new MemberAuthenticationEntity();
            if (MemberEntity.CERTIFY_STATUS_Y == member.getCertifyStatus()) {
                return Result.fail(MessageSourceUtils.getString("member_service_0055"));
            }
@@ -357,10 +359,10 @@
                return Result.fail(MessageSourceUtils.getString("member_service_0059"));
            }
            memberAuthenticationEntity.setSecondName(memberAuthenticationDto.getSecondName());
            String type = memberAuthenticationDto.getType();
            memberAuthenticationEntity.setType(type);
            String idCardNo = memberAuthenticationDto.getIdCardNo();
            if (StrUtil.isBlank(idCardNo)) {
                return Result.fail(MessageSourceUtils.getString("member_service_0060"));
@@ -379,7 +381,7 @@
            memberAuthenticationEntity.setIdcardImageFront(memberAuthenticationDto.getIdCardFront());
            memberAuthenticationEntity.setIdcardImageBack(memberAuthenticationDto.getIdCardReverse());
            memberAuthenticationEntity.setIdcardImageInHand(memberAuthenticationDto.getIdCardImage());
            Map<String, Object> columnMap = new HashMap<>();
            columnMap.put("member_id", memberId);
            List<MemberAuthenticationEntity> selectByMap = memberAuthenticationDao.selectByMap(columnMap);
@@ -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"));
@@ -488,7 +484,7 @@
        if (!MemberEntity.CERTIFY_STATUS_Y.equals(member.getCertifyStatus())) {
            return Result.fail(MessageSourceUtils.getString("member_service_0077"));
        }
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("member_id", memberId);
        List<MemberPaymentMethodEntity> selectByMap = memberPaymentMethodDao.selectByMap(columnMap);
@@ -755,10 +751,10 @@
        MemberEntity member = memberDao.selectById(memberId);
        MemberPersonCenterInfoVo memberPersonCenterInfoVo = new MemberPersonCenterInfoVo();
        Integer certifyStatus = member.getCertifyStatus();
        memberPersonCenterInfoVo.setCertifyStatus(certifyStatus);
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("member_id", memberId);
        List<MemberPaymentMethodEntity> selectByMap = memberPaymentMethodDao.selectByMap(columnMap);
@@ -767,7 +763,7 @@
        }else {
            memberPersonCenterInfoVo.setMemberPaymentMethod(1);
        }
        if (StrUtil.isNotEmpty(member.getPhone())) {
            memberPersonCenterInfoVo.setPhone(1);
        } else {
@@ -824,8 +820,8 @@
        }
        List<MemberAvivableCoinInfoVo> arrayList = new ArrayList<>();
        List<PlatformFeeSettingEntity> feeSettingByTypeAndSymbolLable = platformFeeSettingDao.getFeeSettingsByTypeAndSymbol(2, symbol);
        if (CollUtil.isEmpty(feeSettingByTypeAndSymbolLable)) {
            return Result.fail(MessageSourceUtils.getString("member_service_0087"));
@@ -837,7 +833,7 @@
            memberAvivableCoinInfoVo.setLable(platformFeeSettingEntity.getLable());
            arrayList.add(memberAvivableCoinInfoVo);
        }
        return Result.ok(arrayList);
    }
@@ -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"));
@@ -964,7 +954,7 @@
    public Result getAppVersionInfo() {
    Map<String, Object> columnMap = new HashMap<>();
    List<AppVersionEntity> selectByMap = appVersionDao.selectByMap(columnMap);
    List<Object> arrayList = new ArrayList<>();
    List<Object> arrayList = new ArrayList<>();
        if(CollUtil.isNotEmpty(selectByMap)) {
            for(AppVersionEntity appVersionEntity : selectByMap) {
                    AppVersionVo appVersionVo = new AppVersionVo();
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;
    }
}