oumeixingai

oumeixingai

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/207323.html

(0)

相关推荐

  • 案具的意思(字义,诗词)

    词组案具的意思(字义,诗词)基本解释详细字义 案具拼音:àn jù注音:ㄢˋ ㄐㄨˋ解释:指据以定案或定罪的文字材料。基本字义
    案àn(ㄢˋ)
    1、长形的桌子或架起来代替桌子用的长木板:案子。案板。书案。条案。拍

    阅读 2021年11月18日
  • 药食同补的配方五谷杂粮,五谷杂粮食疗养生配方

    接下来再讲一下五谷之稻,稻这一次前边咱也提到过,(俗称水稻、大米,对于大米,在很多人的观念里,就是充饥的一碗饭。可是千百年来,为什么大米会成为主食?

    生活 2021年12月5日
  • 鱼饵腥香和香腥区别

    鱼饵腥香和香腥区别腥味以腥为主,鱼饵入水后先散腥再散香。一般早春、深秋、冬季使用带腥味的饵料,腥味以香为主。入水后先散发香味,再散发腥味。夏天水温高时,鱼饵味道在水下扩散很快,一般以香味为主。温度高时用香,温度低时加腥,

    电商 2021年10月1日
  • 钉钉报警接入代码

    @Service@Slf4jpublic class DingTalkUtil { @Value("${dingTalk.robot.url}") private String robotUrl; @Value("${dingTalk.robot.me}") private String me; // 钉钉密钥 @Value("${dingTalk.robot.secret}") private String secret; @Value("${dingTalk.enabled}") private Boolean enabled; private OkHttpClient okHttpClient; private static final ObjectMapper objectMapper = new ObjectMapper(); private static final MediaType jsonMediaType = MediaType.parse("application/json"); @PostConstruct public void init() { ExecutorService executorService = new ThreadPoolExecutor( 1, 5, 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(100), ThreadFactoryBuilder.create().setNamePrefix("dingTalk-").build(), new ThreadPoolExecutor.CallerRunsPolicy() ); Dispatcher dispatcher = new Dispatcher(executorService); dispatcher.setMaxRequests(5); dispatcher.setMaxRequestsPerHost(5); okHttpClient = new OkHttpClient.Builder() .readTimeout(Duration.ofSeconds(1)) .connectTimeout(Duration.ofSeconds(1)) .callTimeout(Duration.ofSeconds(1)) .writeTimeout(Duration.ofSeconds(1)) .dispatcher(dispatcher) .build(); } /** * 异步发送钉钉机器人文本消息. */ public void sendTextMessage(String content) { doSendTextMessage(content, textMessage -> { }); } /** * 异步发送文本消息并@自己. */ public void sendTextMessageWithAtMe(String content) { doSendTextMessage(content, textMessage -> textMessage.getAt().getAtMobiles().add(me)); } /** * 异步发送文本消息并@所有人. */ public void sendTextMessageWithAtAll(String content) { doSendTextMessage(content, textMessage -> textMessage.getAt().setAtAll(true)); } private void doSendTextMessage(String content, Consumer<TextMessage> messageConfigurator) { if (!enabled) { return; } if (StringUtils.isBlank(content)) { throw new IllegalArgumentException("文本消息内容不能为空"); } TextMessage textMessage = new TextMessage(); textMessage.setText(new TextMessage.Content(content)); messageConfigurator.accept(textMessage); long timestamp = System.currentTimeMillis(); String sign = sign(timestamp); try { Request request = new Request.Builder() .url((robotUrl + "×tamp=" + timestamp + "&sign=" + sign)) .post(RequestBody.create(objectMapper.writeValueAsString(textMessage), jsonMediaType)) .build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { log.error("发送钉钉消息失败, 请求: {}.", call, e); } @Override public void onResponse(@NotNull Call call, @NotNull Response response) { ResponseBody responseBody = response.body(); log.debug("钉钉发送成功, call: {}, resp: {}.", call.request().body(), responseBody); if (responseBody != null) responseBody.close(); } }); } catch (JsonProcessingException e) { throw ExceptionUtil.wrapRuntime(e); } } private String sign(long timestamp) { final String seed = (timestamp + "\n" + secret); try { Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); byte[] result = mac.doFinal(seed.getBytes(StandardCharsets.UTF_8)); return URLEncoder.encode(Base64.getEncoder().encodeToString(result), StandardCharsets.UTF_8.displayName()); } catch (NoSuchAlgorithmException | InvalidKeyException | UnsupportedEncodingException e) { throw ExceptionUtil.wrapRuntime(e); } } @Getter private static class TextMessage { private final String msgtype = "text"; @Setter private Content text; private final At at = new At(); @Data @AllArgsConstructor private static class Content { private String content; } private static class At { @Setter private boolean isAtAll = false; @Getter private final List<String> atMobiles = new LinkedList<>(); // 不能删除,否则会导致生成的json字段名是atAll, 导致@所有人不生效 public boolean getIsAtAll() { return isAtAll; } } }}

    科技 2021年11月18日
  • 快手怎样直播卖货,怎样在快手直播卖货

    快手直播卖货,快手直播卖货怎么起步,快手直播卖货要注意什么快手直播卖货怎么起步 很多小伙伴们,现在都知道直播带货是非常容易挣钱的,那么直播带货的前提,就是大家需要有一个好的货源,同时自己的帐号有粉丝做基础,也有流量,快手

    电商 2021年10月30日
  • 最佳资本结构的标准是什么,最佳资本结构的判断标准

    最佳资本结构的标准是什么,最佳资本结构的判断标准《财智知道》是财智无界推出的最新栏目。每周一、周三分享一条财务、战略、税务、管理小知识,每周五将会根据分享内容进行有奖问答。参与答题者能够获得一次抽奖机会,还有财智无界积分

    教程 2021年11月30日