From fae05b7ffe899ab996f7a9c31b4c96df7964a0de Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 07 Jul 2020 21:20:55 +0800
Subject: [PATCH] add dingtalk

---
 src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java |  332 ++++++++++++++++++------------------
 src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkUtils.java                            |   67 +++++++
 src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java           |   50 ++---
 src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java                                   |   15 +
 src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java          |   10 
 pom.xml                                                                                     |    9 +
 src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkType.java                             |   46 +++++
 7 files changed, 329 insertions(+), 200 deletions(-)

diff --git a/pom.xml b/pom.xml
index 191b9fe..cae38c0 100644
--- a/pom.xml
+++ b/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>
diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java b/src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java
index e2209a2..aea8e75 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java
+++ b/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";
diff --git a/src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java b/src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java
index 3e6014a..fd6273b 100644
--- a/src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java
+++ b/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("订单不存在");
+        }
+
+    }
 }
diff --git a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
index 5f81aa7..3501806 100644
--- a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
+++ b/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();
diff --git a/src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java b/src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java
index 78727ff..10c1e06 100644
--- a/src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java
+++ b/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);
+            }
+        });
+    }
 }
diff --git a/src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkType.java b/src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkType.java
new file mode 100644
index 0000000..a050396
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkType.java
@@ -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;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkUtils.java b/src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkUtils.java
new file mode 100644
index 0000000..67c071b
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/dingtalk/DingTalkUtils.java
@@ -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;
+    }
+
+}

--
Gitblit v1.9.1