Explorar o código

im发送单聊消息

licailing %!s(int64=5) %!d(string=hai) anos
pai
achega
34645183f0

+ 31 - 0
src/main/java/com/izouma/dingdong/domain/UserSig.java

@@ -0,0 +1,31 @@
+package com.izouma.dingdong.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Where;
+
+import javax.persistence.Entity;
+import java.time.LocalDateTime;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Where(clause = "enabled = 1")
+@ApiModel(value = "用户sig", description = "用户sig")
+@JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
+public class UserSig extends BaseEntity {
+    @ApiModelProperty(value = "用户ID", name = "userId")
+    private String userId;
+
+    private String sig;
+
+    @ApiModelProperty(value = "过期时间", name = "expiresAt")
+    private LocalDateTime expiresAt;
+}

+ 38 - 0
src/main/java/com/izouma/dingdong/dto/Send.java

@@ -0,0 +1,38 @@
+package com.izouma.dingdong.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+public class Send {
+
+    @JSONField(name = "To_Account")
+    private String toAccount;
+
+    @JSONField(name = "MsgRandom")
+    private Integer msgRandom;
+
+    @JSONField(name = "MsgBody")
+    private MsgBody[] msgBody;
+
+    @JSONField(name = "SyncOtherMachine")
+    private Integer syncOtherMachine;
+
+    @Builder
+    @Data
+    public static class MsgBody {
+        @JSONField(name = "MsgType")
+        private String msgType;
+
+        @JSONField(name = "MsgContent")
+        private MsgContent msgContent;
+
+        @Builder
+        @Data
+        public static class MsgContent {
+            @JSONField(name = "Text")
+            private String text;
+        }
+    }
+}

+ 29 - 0
src/main/java/com/izouma/dingdong/enums/Words.java

@@ -0,0 +1,29 @@
+package com.izouma.dingdong.enums;
+/*
+需要语音播报的话术
+ */
+public enum Words {
+    /*
+    商家/骑手接单
+    */
+    ORDERS("voice_667;您有一笔新的订单!"),
+    /*
+    订单被取消
+     */
+    CANCEL("订单已取消!"),
+    /*
+    订单已完成
+     */
+    CARRY_OUT(" 订单已完成");
+
+
+    private final String description;
+
+    Words(String description){
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+}

+ 13 - 0
src/main/java/com/izouma/dingdong/repo/UserSigRepo.java

@@ -0,0 +1,13 @@
+package com.izouma.dingdong.repo;
+
+import com.izouma.dingdong.domain.UserSig;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.time.LocalDateTime;
+
+
+public interface UserSigRepo extends JpaRepository<UserSig, Long> {
+
+    UserSig findLastByUserIdAndExpiresAtAfter(String userId, LocalDateTime time);
+
+}

+ 20 - 6
src/main/java/com/izouma/dingdong/service/OrderInfoService.java

@@ -7,7 +7,6 @@ import com.izouma.dingdong.domain.*;
 import com.izouma.dingdong.domain.backstage.BlackList;
 import com.izouma.dingdong.domain.backstage.BlackList;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.rider.Rider;
 import com.izouma.dingdong.domain.rider.Rider;
-import com.izouma.dingdong.domain.rider.RiderLocation;
 import com.izouma.dingdong.domain.user.ShoppingCart;
 import com.izouma.dingdong.domain.user.ShoppingCart;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
@@ -31,6 +30,7 @@ import com.izouma.dingdong.service.merchant.GoodsService;
 import com.izouma.dingdong.service.merchant.MerchantService;
 import com.izouma.dingdong.service.merchant.MerchantService;
 import com.izouma.dingdong.service.merchant.SalesService;
 import com.izouma.dingdong.service.merchant.SalesService;
 import com.izouma.dingdong.service.rider.DeliveryFeeService;
 import com.izouma.dingdong.service.rider.DeliveryFeeService;
+import com.izouma.dingdong.service.tencent.UserSigService;
 import com.izouma.dingdong.utils.MapUtils;
 import com.izouma.dingdong.utils.MapUtils;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -63,6 +63,7 @@ public class OrderInfoService {
     private SysConfigService        sysConfigService;
     private SysConfigService        sysConfigService;
     private BlackListRepo           blackListRepo;
     private BlackListRepo           blackListRepo;
     private RiderLocationRepo       riderLocationRepo;
     private RiderLocationRepo       riderLocationRepo;
+    private UserSigService          userSigService;
 
 
     /*
     /*
     用户下单
     用户下单
@@ -210,7 +211,6 @@ public class OrderInfoService {
                     orderGoodsSpecRepo.save(s);
                     orderGoodsSpecRepo.save(s);
                 }
                 }
         );
         );
-
         return save;
         return save;
 
 
     }
     }
@@ -227,11 +227,15 @@ public class OrderInfoService {
         //商家
         //商家
         MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(orderInfo.getMerchantId())
         MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(orderInfo.getMerchantId())
                 .orElseThrow(new BusinessException("无商家"));
                 .orElseThrow(new BusinessException("无商家"));
+        Merchant merchant = merchantRepo.findById(orderInfo.getMerchantId()).orElseThrow(new BusinessException("无商家"));
         //商家是否自动接单
         //商家是否自动接单
         if (merchantSettings.getAutomaticOrder()) {
         if (merchantSettings.getAutomaticOrder()) {
             merReceiveOrder(orderInfo.getId(), true);
             merReceiveOrder(orderInfo.getId(), true);
         }
         }
 
 
+        //发送im单聊消息
+        userSigService.sendSms(merchant.getUserId(), Words.ORDERS.getDescription());
+
         //购物车删除
         //购物车删除
         shoppingCartRepo.deleteById(orderInfo.getId());
         shoppingCartRepo.deleteById(orderInfo.getId());
     }
     }
@@ -245,10 +249,6 @@ public class OrderInfoService {
         if (pass) {
         if (pass) {
             orderInfo.setMerchantStatus(MerchantStatus.RECEIVED);
             orderInfo.setMerchantStatus(MerchantStatus.RECEIVED);
             orderInfo.setRiderStatus(RiderStatus.NOT_RECEIVED);
             orderInfo.setRiderStatus(RiderStatus.NOT_RECEIVED);
-            //通知骑手 手动
-//            orderInfo.setRiderId(151L);
-//            orderInfo.setRiderStatus(RiderStatus.RECEIVED);
-
 
 
         } else {
         } else {
             orderInfo.setMerchantStatus(MerchantStatus.REJECTED);
             orderInfo.setMerchantStatus(MerchantStatus.REJECTED);
@@ -404,6 +404,12 @@ public class OrderInfoService {
 
 
         }
         }
 
 
+        //发送im单聊消息
+        Long muserId = merchantRepo.findById(orderInfo.getMerchantId())
+                .orElseThrow(new BusinessException("无商家"))
+                .getUserId();
+        userSigService.sendSms(muserId, Words.CANCEL.getDescription());
+
         //如果是货到付款
         //如果是货到付款
         if (PayMethod.CASH_DELIVERY.equals(orderInfo.getPayMethod())) {
         if (PayMethod.CASH_DELIVERY.equals(orderInfo.getPayMethod())) {
             this.cancelCashOrder(id);
             this.cancelCashOrder(id);
@@ -434,6 +440,14 @@ public class OrderInfoService {
                 }
                 }
             }
             }
         }
         }
+        if (orderInfo.getRiderId() != null) {
+            //发送im单聊消息
+            Long ruserId = riderRepo.findById(orderInfo.getRiderId())
+                    .orElseThrow(new BusinessException("无骑手"))
+                    .getUserId();
+            userSigService.sendSms(ruserId, Words.CANCEL.getDescription());
+        }
+
         // orderInfo.setCancel(true);
         // orderInfo.setCancel(true);
         orderInfo.setReason(reason);
         orderInfo.setReason(reason);
         orderInfo.setStatus(OrderStatus.CANCELLED);
         orderInfo.setStatus(OrderStatus.CANCELLED);

+ 15 - 4
src/main/java/com/izouma/dingdong/service/WithdrawApplyService.java

@@ -9,6 +9,7 @@ import com.izouma.dingdong.enums.WithdrawStatus;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.*;
 import com.izouma.dingdong.repo.*;
 import com.izouma.dingdong.repo.backstage.EmailRepo;
 import com.izouma.dingdong.repo.backstage.EmailRepo;
+import com.izouma.dingdong.service.tencent.UserSigService;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -27,6 +28,7 @@ public class WithdrawApplyService {
     private MoneyRecordRepo   moneyRecordRepo;
     private MoneyRecordRepo   moneyRecordRepo;
     private EmailRepo         emailRepo;
     private EmailRepo         emailRepo;
     private PlatformFlowRepo  platformFlowRepo;
     private PlatformFlowRepo  platformFlowRepo;
+    private UserSigService    userSigService;
 
 
     /*
     /*
     提现申请
     提现申请
@@ -57,13 +59,16 @@ public class WithdrawApplyService {
                 .build();
                 .build();
 
 
         emailRepo.save(Email.builder()
         emailRepo.save(Email.builder()
-                .receiveUserId(user.getId())
+                .receiveUserId(userId)
                 .title("提现申请提交")
                 .title("提现申请提交")
                 .sendTime(LocalDateTime.now())
                 .sendTime(LocalDateTime.now())
                 .isRead(false)
                 .isRead(false)
                 .content(apply.getAmount() + "元," + "提现到:" + bankCard.userInfo())
                 .content(apply.getAmount() + "元," + "提现到:" + bankCard.userInfo())
-                .build()
-        );
+                .build());
+
+        //发送im单聊消息
+        userSigService.sendSms(userId,"提现申请提交");
+
         //先扣除金额
         //先扣除金额
         user.setMoney(user.getMoney().subtract(amount));
         user.setMoney(user.getMoney().subtract(amount));
         userRepo.save(user);
         userRepo.save(user);
@@ -125,6 +130,9 @@ public class WithdrawApplyService {
                     .content(withdrawals.getAmount() + "元," + "提现到:" + bankCard.userInfo())
                     .content(withdrawals.getAmount() + "元," + "提现到:" + bankCard.userInfo())
                     .build();
                     .build();
 
 
+            //发送im单聊消息
+            userSigService.sendSms(user.getId(),"提现申请通过");
+
         } else {
         } else {
             withdrawals.setConsent(false);
             withdrawals.setConsent(false);
             withdrawals.setStatus(WithdrawStatus.FAIL);
             withdrawals.setStatus(WithdrawStatus.FAIL);
@@ -137,11 +145,14 @@ public class WithdrawApplyService {
                     .isRead(false)
                     .isRead(false)
                     .build();
                     .build();
 
 
+            //发送im单聊消息
+            userSigService.sendSms(user.getId(),"提现申请失败");
+
             //失败返还金额
             //失败返还金额
             user.setMoney(user.getMoney().add(withdrawals.getAmount()));
             user.setMoney(user.getMoney().add(withdrawals.getAmount()));
             userRepo.save(user);
             userRepo.save(user);
         }
         }
-        //报错邮件通知
+        //保存邮件通知
         emailRepo.save(email);
         emailRepo.save(email);
 
 
         withdrawals.setAuditTime(LocalDateTime.now());
         withdrawals.setAuditTime(LocalDateTime.now());

+ 8 - 1
src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java

@@ -17,13 +17,13 @@ import com.izouma.dingdong.repo.backstage.EmailRepo;
 import com.izouma.dingdong.repo.merchant.*;
 import com.izouma.dingdong.repo.merchant.*;
 import com.izouma.dingdong.repo.user.ShoppingCartRepo;
 import com.izouma.dingdong.repo.user.ShoppingCartRepo;
 import com.izouma.dingdong.service.AppraisalService;
 import com.izouma.dingdong.service.AppraisalService;
+import com.izouma.dingdong.service.tencent.UserSigService;
 import com.izouma.dingdong.service.user.ShoppingCartService;
 import com.izouma.dingdong.service.user.ShoppingCartService;
 import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.ObjUtils;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -45,6 +45,7 @@ public class GoodsService {
     private ShoppingCartService           shoppingCartService;
     private ShoppingCartService           shoppingCartService;
     private OrderGoodsSpecRepo            orderGoodsSpecRepo;
     private OrderGoodsSpecRepo            orderGoodsSpecRepo;
     private ShoppingCartRepo              shoppingCartRepo;
     private ShoppingCartRepo              shoppingCartRepo;
+    private UserSigService                userSigService;
 //    private SalesRepo                     salesRepo;
 //    private SalesRepo                     salesRepo;
 
 
     /**
     /**
@@ -210,6 +211,9 @@ public class GoodsService {
                     .receiveUserId(userId)
                     .receiveUserId(userId)
                     .build());
                     .build());
 
 
+            //发送im单聊消息
+            userSigService.sendSms(userId,"提交商品审核通过");
+
             return goodsRepo.save(goods);
             return goodsRepo.save(goods);
 
 
         }
         }
@@ -224,6 +228,9 @@ public class GoodsService {
                 .receiveUserId(userId)
                 .receiveUserId(userId)
                 .build());
                 .build());
 
 
+        //发送im单聊消息
+        userSigService.sendSms(userId,"提交商品审核未通过");
+
         return goodsRepo.save(goods);
         return goodsRepo.save(goods);
     }
     }
 
 

+ 13 - 1
src/main/java/com/izouma/dingdong/service/rider/RiderService.java

@@ -21,6 +21,7 @@ import com.izouma.dingdong.repo.rider.RiderRepo;
 import com.izouma.dingdong.repo.rider.RiderSignRepo;
 import com.izouma.dingdong.repo.rider.RiderSignRepo;
 import com.izouma.dingdong.service.OrderRefundApplyService;
 import com.izouma.dingdong.service.OrderRefundApplyService;
 import com.izouma.dingdong.service.SysConfigService;
 import com.izouma.dingdong.service.SysConfigService;
+import com.izouma.dingdong.service.tencent.UserSigService;
 import com.izouma.dingdong.utils.MapUtils;
 import com.izouma.dingdong.utils.MapUtils;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.RandomStringUtils;
@@ -45,6 +46,7 @@ public class RiderService {
     private SysConfigService        sysConfigService;
     private SysConfigService        sysConfigService;
     private VerifiedRepo            verifiedRepo;
     private VerifiedRepo            verifiedRepo;
     private MerchantRepo            merchantRepo;
     private MerchantRepo            merchantRepo;
+    private UserSigService          userSigService;
 
 
     /*
     /*
     骑手注册
     骑手注册
@@ -211,6 +213,9 @@ public class RiderService {
 //            orderInfo.setRiderOrderTime(LocalDateTime.now());
 //            orderInfo.setRiderOrderTime(LocalDateTime.now());
         orderInfoRepo.save(orderInfo);
         orderInfoRepo.save(orderInfo);
 
 
+        //发送im单聊消息
+        userSigService.sendSms(userId, Words.ORDERS.getDescription());
+
     }
     }
 
 
     /*
     /*
@@ -239,7 +244,8 @@ public class RiderService {
                     //是否支持货到付款
                     //是否支持货到付款
                     t = this.canCash(d.getRiderId());
                     t = this.canCash(d.getRiderId());
                 }
                 }
-                Merchant merchant = merchantRepo.findById(orderInfo.getMerchantId()).orElseThrow(new BusinessException("无骑手"));
+                Merchant merchant = merchantRepo.findById(orderInfo.getMerchantId())
+                        .orElseThrow(new BusinessException("无骑手"));
                 Double distance = MapUtils.distance(merchant.getLongitude(), merchant.getLatitude(), d.getLongitude(), d
                 Double distance = MapUtils.distance(merchant.getLongitude(), merchant.getLatitude(), d.getLongitude(), d
                         .getLatitude());
                         .getLatitude());
                 //所有附近的骑手的距离
                 //所有附近的骑手的距离
@@ -307,6 +313,12 @@ public class RiderService {
         }
         }
 
 
         orderInfoRepo.save(orderInfo);
         orderInfoRepo.save(orderInfo);
+
+        if (riderId != null) {
+            Rider rider = riderRepo.findById(riderId).orElseThrow(new BusinessException("无骑手"));
+            //发送im单聊消息
+            userSigService.sendSms(rider.getUserId(), Words.ORDERS.getDescription());
+        }
     }
     }
 
 
     /*
     /*

+ 107 - 31
src/main/java/com/izouma/dingdong/service/tencent/UserSigService.java

@@ -1,19 +1,30 @@
 package com.izouma.dingdong.service.tencent;
 package com.izouma.dingdong.service.tencent;
 
 
+import com.alibaba.fastjson.JSONObject;
+import com.izouma.dingdong.domain.UserSig;
+import com.izouma.dingdong.dto.Send;
+import com.izouma.dingdong.repo.UserSigRepo;
 import com.tencentyun.TLSSigAPIv2;
 import com.tencentyun.TLSSigAPIv2;
-import org.apache.http.HttpResponse;
-import org.apache.http.NameValuePair;
-import org.apache.http.client.HttpClient;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.impl.client.HttpClients;
-import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.util.*;
+import java.io.IOException;
+import java.time.LocalDateTime;
 
 
+import static jodd.core.JoddCore.encoding;
+
+@Slf4j
 @Service
 @Service
 public class UserSigService {
 public class UserSigService {
 
 
@@ -23,45 +34,110 @@ public class UserSigService {
     @Value("${IMConfig.secretKey}")
     @Value("${IMConfig.secretKey}")
     private String secretKey;
     private String secretKey;
 
 
+    @Autowired
+    private UserSigRepo userSigRecordRepo;
+
     public String generateUserSig(Long userId) {
     public String generateUserSig(Long userId) {
         TLSSigAPIv2 api = new TLSSigAPIv2(sdkAppId, secretKey);
         TLSSigAPIv2 api = new TLSSigAPIv2(sdkAppId, secretKey);
-        long expire = 604800L;
-        return api.genSig(userId.toString(), expire);
+        long expire = 86400L;
+        String genSig = api.genSig(userId.toString(), expire);
+        userSigRecordRepo.save(UserSig
+                .builder()
+                .userId(userId.toString())
+                .sig(genSig)
+                .expiresAt(LocalDateTime.now().plusSeconds(expire))
+                .build());
+        return genSig;
     }
     }
 
 
-    public void sendSms(Long userId, String userSig) {
-        String url = "https://console.tim.qq.com/v4/openim/sendmsg";
+    public String generateUserSig(String userId) {
+        TLSSigAPIv2 api = new TLSSigAPIv2(sdkAppId, secretKey);
+        long expire = 86400L;
+        String genSig = api.genSig(userId, expire);
+        userSigRecordRepo.save(UserSig
+                .builder()
+                .userId(userId)
+                .sig(genSig)
+                .expiresAt(LocalDateTime.now().plusSeconds(expire))
+                .build());
+        return genSig;
+    }
 
 
-        HttpClient client = HttpClients.createDefault();
-        HttpPost post = new HttpPost(url);
+    public void sendSms(Long userId, String text) {
+        String usersig = "";
+        String admin = "administrator";
+        UserSig sig = userSigRecordRepo.findLastByUserIdAndExpiresAtAfter(admin, LocalDateTime
+                .now());
+        if (sig == null) {
+            usersig = generateUserSig(admin);
+        } else {
+            usersig = sig.getSig();
+        }
 
 
-        Map<String, Object> params = new HashMap<>();
+        String url = "https://console.tim.qq.com/v4/openim/sendmsg" +
+                "?sdkappid=1400375593&identifier=administrator" +
+                "&random=99999999&contenttype=json";
+        url += "&usersig=" + usersig;
 
 
-        //设置公共参数
-        params.put("sdkappid", sdkAppId);
-        params.put("usersig", userSig);
-        params.put("identifier", userId.toString());
+        Send send = new Send();
+        send.setMsgRandom(1287657);
+        send.setSyncOtherMachine(2);
+        send.setToAccount(userId.toString());
 
 
-        //回调
-        params.put("random", 9999);
-//        params.put("contenttype", "json");
+        Send.MsgBody msgBody = Send.MsgBody.builder()
+                .msgType("TIMTextElem")
+                .msgContent(Send.MsgBody.MsgContent.builder()
+                        .text(text)
+                        .build())
+                .build();
+
+        Send.MsgBody[] msg = {msgBody};
+        send.setMsgBody(msg);
+
+        String s1 = JSONObject.toJSONString(send);
+        System.out.println(s1);
+
+        //http请求
+        CloseableHttpClient client = HttpClients.createDefault();
+        HttpPost post = new HttpPost(url);
+
+        //添加请求头
+        post.setHeader("User-Agent", "Mozilla/5.0");
+        post.setHeader("Content-type", "application/json");
+
+        //请求实体
+        StringEntity stringEntity = new StringEntity(s1, "utf-8");
+        stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
+                "application/json"));
 
 
-        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
-        for (Iterator iter = params.keySet().iterator(); iter.hasNext(); ) {
-            String name = (String) iter.next();
-            String value = String.valueOf(params.get(name));
-            urlParameters.add(new BasicNameValuePair(name, value));
-        }
         try {
         try {
-            HttpResponse response = client.execute(post);
-            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
+            post.setEntity(stringEntity);
+            //执行请求操作,并拿到结果(同步阻塞)
+            CloseableHttpResponse response = client.execute(post);
+//            HttpResponse response = client.execute(post);
+
+            /*BufferedReader rd = new BufferedReader(
+                    new InputStreamReader(response.getEntity().getContent()));
+
             StringBuilder result = new StringBuilder();
             StringBuilder result = new StringBuilder();
             String line = "";
             String line = "";
             while ((line = rd.readLine()) != null) {
             while ((line = rd.readLine()) != null) {
                 result.append(line);
                 result.append(line);
+            }*/
+
+            //获取结果实体
+            HttpEntity entity = response.getEntity();
+            String body = "";
+            if (entity != null) {
+                //按指定编码转换结果实体为String类型
+                body = EntityUtils.toString(entity, encoding);
             }
             }
-            rd.close();
-        } catch (Exception e) {
+            EntityUtils.consume(entity);
+            //释放链接
+            response.close();
+            System.out.println(body);
+
+        } catch (IOException e) {
             e.printStackTrace();
             e.printStackTrace();
         }
         }
     }
     }

+ 93 - 12
src/test/java/com/izouma/dingdong/service/UserSigServiceTest.java

@@ -1,5 +1,6 @@
 package com.izouma.dingdong.service;
 package com.izouma.dingdong.service;
 
 
+import com.izouma.dingdong.dto.Send;
 import com.izouma.dingdong.service.tencent.UserSigService;
 import com.izouma.dingdong.service.tencent.UserSigService;
 import com.tencent.xinge.XingeApp;
 import com.tencent.xinge.XingeApp;
 import com.tencent.xinge.bean.AudienceType;
 import com.tencent.xinge.bean.AudienceType;
@@ -11,8 +12,12 @@ import org.apache.http.HttpResponse;
 import org.apache.http.NameValuePair;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicHeader;
 import org.apache.http.message.BasicNameValuePair;
 import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.protocol.HTTP;
 import org.json.JSONObject;
 import org.json.JSONObject;
 import org.junit.Test;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runner.RunWith;
@@ -21,9 +26,11 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.test.context.junit4.SpringRunner;
 
 
 import java.io.BufferedReader;
 import java.io.BufferedReader;
+import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URL;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.*;
 
 
 @SpringBootTest
 @SpringBootTest
@@ -36,7 +43,7 @@ public class UserSigServiceTest {
     public void test() {
     public void test() {
 //        System.out.println(userSigService.generateUserSig(2244L));
 //        System.out.println(userSigService.generateUserSig(2244L));
         TLSSigAPIv2 api = new TLSSigAPIv2(1400375593, "7fe225c3b41cf2e7f0c79ebaf0e3b7ec60f6c7188e1561dcfddacb4767654417");
         TLSSigAPIv2 api = new TLSSigAPIv2(1400375593, "7fe225c3b41cf2e7f0c79ebaf0e3b7ec60f6c7188e1561dcfddacb4767654417");
-        System.out.println(api.genSig("administrator", 30000));
+        System.out.println(api.genSig("2244", 30000));
     }
     }
 
 
     @Test
     @Test
@@ -44,7 +51,7 @@ public class UserSigServiceTest {
 //        String url1 = "https://console.tim.qq.com/v4/openim/batchsendmsg?random=99999999&contenttype=json";
 //        String url1 = "https://console.tim.qq.com/v4/openim/batchsendmsg?random=99999999&contenttype=json";
 //        String url2 = "&sdkappid=1400375593&identifier=administrator&usersig=eJw1jrEOgjAURf*ls4GWV0ogcXFgwmgCRgcWYot5KohtAzXGf7cBvdu9Jye5b1IVZaDcgFqRDKjPap5GpUlGooCSpRt5a4YBJckYpxSSOE5hIShVb7HFWWhkhz0aqxv70H8VL544XZScTdVrd3Z1KKAOT8oIzmyRX8VB7vPnSO*RmTbHdmvWP9Vi52*xOOUJAGP88wUitDTf";
 //        String url2 = "&sdkappid=1400375593&identifier=administrator&usersig=eJw1jrEOgjAURf*ls4GWV0ogcXFgwmgCRgcWYot5KohtAzXGf7cBvdu9Jye5b1IVZaDcgFqRDKjPap5GpUlGooCSpRt5a4YBJckYpxSSOE5hIShVb7HFWWhkhz0aqxv70H8VL544XZScTdVrd3Z1KKAOT8oIzmyRX8VB7vPnSO*RmTbHdmvWP9Vi52*xOOUJAGP88wUitDTf";
 //        url1 = url1 + url2;
 //        url1 = url1 + url2;
-        String url1 = "https://console.tim.qq.com/v4/all_member_push/im_push?sdkappid=1400375593&identifier=administrator&usersig=eJw1js8LgjAcxf*XXQvZD9dw0EXxEIQEdvK22Movoo45cxH97w2td3vv8eG9N7qe68QEC84gyXDUfo2exiGJaILR5ifdKWtBI0lSjJngPGNbA9oMHu6wAkr3MMDknfKj*6PwiE3NqDo14wzpXJXVjvS6nDvyavMCbsXS4HAJ7VD6thPL8Qd66OMpwjMRJyk5fL7E9jS*&random=99999999&contenttype=json";
+        String url1 = "https://console.tim.qq.com/v4/all_member_push/im_push?sdkappid=1400375593&identifier=administrator&usersig=eJw1jkEKwjAURO*SrVJTkzS04EIwQsFdqm7cBJLqR9t*0kSk4t0trc5u5vFg3qQ66MS9ELwjBaNjltP0dJ4UZJ1QMvfe3g0iWFKknFImhcjZTMC6NkANk2BsAy30wZvQ*b8K15EMZleyWIMe8HbWj7Ly1T5TaDRGWPDLinGmhi4qPG2Pm58ZoBlfpSKXGedSys8XCL808Q__&random=99999999&contenttype=json";
 
 
         String result = "";
         String result = "";
         try {
         try {
@@ -99,18 +106,18 @@ public class UserSigServiceTest {
         HttpPost post = new HttpPost(url);
         HttpPost post = new HttpPost(url);
         //设置公共参数
         //设置公共参数
 
 
-        Map<String,Object> mgsCon = new HashMap<>();
-        mgsCon.put("Text","hello");
+        Map<String, Object> mgsCon = new HashMap<>();
+        mgsCon.put("Text", "hello");
 
 
-        Map<String,Object> mgs = new HashMap<>();
-        mgs.put("MsgType","TIMTextElem");
-        mgs.put("MsgContent",mgsCon);
+        Map<String, Object> mgs = new HashMap<>();
+        mgs.put("MsgType", "TIMTextElem");
+        mgs.put("MsgContent", mgsCon);
 
 
-        Map<String,Object> params = new HashMap<>();
-        params.put("SyncOtherMachine",2);
-        params.put("To_Account","2244");
-        params.put("MsgRandom","99999");
-        params.put("MsgBody",mgs);
+        Map<String, Object> params = new HashMap<>();
+        params.put("SyncOtherMachine", 2);
+        params.put("To_Account", "2244");
+        params.put("MsgRandom", "99999");
+        params.put("MsgBody", mgs);
 
 
 
 
         System.out.println(params.toString());
         System.out.println(params.toString());
@@ -147,4 +154,78 @@ public class UserSigServiceTest {
 //            throw new Exception("verify signature failed");
 //            throw new Exception("verify signature failed");
 //        }
 //        }
     }
     }
+
+    @Test
+    public void testP() {
+        String url = "https://console.tim.qq.com/v4/openim/sendmsg" +
+                "?sdkappid=1400375593&identifier=test" +
+                "&usersig=eJwtzEELgjAYxvHvsnPIu*mrTuiUFyMvGoFHy9VexBpuxCL67sn0*Pwe*H-Z*dRGbzWzgokI2C5sGtTT0Z0CO2Xd5nYYe2NoYAVPAOIMUcbro7yhWS2OiAIAVnU0BZNZmqQyEVuFHkv2oMv601Riahu8Wt5djshFn*u6A8-n1y2ryAsjR13me-b7A*ggMII_" +
+                "&random=99999999&contenttype=json";
+
+        Send send = new Send();
+        send.setMsgRandom(99999);
+        send.setToAccount("2105");
+        Send.MsgBody msgBody = Send.MsgBody.builder()
+                .msgType("TIMTextElem")
+                .msgContent(Send.MsgBody.MsgContent.builder()
+                        .text("beauty")
+                        .build())
+                .build();
+
+        Send.MsgBody[] msg =  {msgBody};
+        send.setMsgBody(msg);
+
+
+        String s1 = com.alibaba.fastjson.JSONObject.toJSONString(send);
+
+        System.out.println(s1);
+
+        CloseableHttpClient client = HttpClients.createDefault();
+        HttpPost post = new HttpPost(url);
+
+        //添加请求头
+        post.setHeader("User-Agent", "Mozilla/5.0");
+        post.setHeader("Content-type", "application/json");
+
+        StringEntity s = new StringEntity(s1, "utf-8");
+        s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
+                "application/json"));
+
+
+/*        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
+        urlParameters.add(new BasicNameValuePair("MsgBody", mgs.toString()));
+        urlParameters.add(new BasicNameValuePair("MsgRandom", "99999"));
+        urlParameters.add(new BasicNameValuePair("To_Account", "2244"));
+        urlParameters.add(new BasicNameValuePair("SyncOtherMachine", "2"));*/
+
+        try {
+            post.setEntity(s);
+//            post.setEntity(new UrlEncodedFormEntity(urlParameters));
+
+            HttpResponse response = client.execute(post);
+            System.out.println("\nSending 'POST' request to URL : " + url);
+            System.out.println("Post parameters : " + post.getEntity());
+            System.out.println("Response Code : " +
+                    response.getStatusLine().getStatusCode());
+
+            BufferedReader rd = new BufferedReader(
+                    new InputStreamReader(response.getEntity().getContent()));
+
+            StringBuilder result = new StringBuilder();
+            String line = "";
+            while ((line = rd.readLine()) != null) {
+                result.append(line);
+            }
+
+            System.out.println(result.toString());
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void test5(){
+        userSigService.sendSms(2105L,"voice_667;订单来啦!注意查收!!!");
+        //System.out.println(LocalDateTime.now().plusSeconds(86400));
+    }
 }
 }