class DingNotifier extends AbstractHttpNotifier {

    private static final String ALL = "all";

    @Override
    public String platform() {
        return NotifyPlatformEnum.DING.name().toLowerCase();
    }

    @Override
    protected String buildMsgBody(NotifyPlatform platform, String content) {<FILL_FUNCTION_BODY>}

    @Override
    protected String buildUrl(NotifyPlatform platform) {
        String webhook = Optional.ofNullable(platform.getWebhook()).orElse(DingNotifyConst.DING_WEBHOOK);
        return getTargetUrl(platform.getSecret(), platform.getUrlKey(), webhook);
    }

    /**
     * Build target url.
     *
     * @param secret      secret
     * @param accessToken accessToken
     * @param webhook     webhook
     * @return url
     */
    private String getTargetUrl(String secret, String accessToken, String webhook) {
        UrlBuilder builder = UrlBuilder.of(webhook);
        if (StringUtils.isNotBlank(accessToken) && StringUtils.isBlank(builder.getQuery().get(DingNotifyConst.ACCESS_TOKEN_PARAM))) {
            builder.addQuery(DingNotifyConst.ACCESS_TOKEN_PARAM, accessToken);
        }
        if (StringUtils.isNotBlank(secret)) {
            long timestamp = System.currentTimeMillis();
            builder.addQuery(DingNotifyConst.TIMESTAMP_PARAM, timestamp);
            builder.addQuery(DingNotifyConst.SIGN_PARAM, DingSignUtil.dingSign(secret, timestamp));
        }
        return builder.build();
    }
}

        MarkdownReq.Markdown markdown = new MarkdownReq.Markdown();
        markdown.setTitle(DING_NOTICE_TITLE);
        markdown.setText(content);

        MarkdownReq.At at = new MarkdownReq.At();

        List<String> mobiles = Lists.newArrayList(platform.getReceivers().split(","));
        at.setAtMobiles(mobiles);
        if (mobiles.contains(ALL) || CollectionUtils.isEmpty(mobiles)) {
            at.setAtAll(true);
        }

        MarkdownReq markdownReq = new MarkdownReq();
        markdownReq.setMsgtype("markdown");
        markdownReq.setMarkdown(markdown);
        markdownReq.setAt(at);
        return JsonUtil.toJson(markdownReq);
    
<methods>public non-sealed void <init>() <variables>