From f9faee6ee4f144d8a24b2db758bfbe01597c390b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=AD=E8=8D=A3=E4=BC=8A?= <243653385@qq.com> Date: Wed, 11 Sep 2019 11:45:41 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=A1=B5=E9=9D=A2=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=96=B9=E5=BC=8F=20=E6=B7=BB=E5=8A=A0=20Jenkins=20Jo?= =?UTF-8?q?bName=20=E4=BB=A3=E5=85=A5=E5=92=8C=20BuildNumber=20=E4=BB=A3?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/yzr/controller/AppController.java | 15 +- .../org/yzr/controller/PackageController.java | 14 ++ src/main/java/org/yzr/model/Package.java | 2 + .../yzr/utils/webhook/DingDingWebHook.java | 28 +++- .../java/org/yzr/vo/PackageViewModel.java | 17 ++- src/main/resources/static/js/list.js | 134 ++++++++++++++--- src/main/resources/templates/install.html | 1 + src/main/resources/templates/list.html | 140 ++++++------------ 8 files changed, 235 insertions(+), 116 deletions(-) diff --git a/src/main/java/org/yzr/controller/AppController.java b/src/main/java/org/yzr/controller/AppController.java index 107c7eb..248e86b 100644 --- a/src/main/java/org/yzr/controller/AppController.java +++ b/src/main/java/org/yzr/controller/AppController.java @@ -11,7 +11,6 @@ import org.yzr.vo.AppViewModel; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -45,6 +44,20 @@ public class AppController { return "list"; } + @RequestMapping("/packageList/{appID}") + @ResponseBody + public Map getAppPackageList(@PathVariable("appID") String appID) { + AppViewModel appViewModel = this.appService.getById(appID); + Map map = new HashMap<>(); + try { + map.put("packages", appViewModel.getPackageList()); + map.put("success", true); + } catch (Exception e) { + map.put("success", false); + } + return map; + } + @RequestMapping("/app/delete/{id}") @ResponseBody public Map deleteById(@PathVariable("id") String id) { diff --git a/src/main/java/org/yzr/controller/PackageController.java b/src/main/java/org/yzr/controller/PackageController.java index 91cf265..5343b79 100644 --- a/src/main/java/org/yzr/controller/PackageController.java +++ b/src/main/java/org/yzr/controller/PackageController.java @@ -1,10 +1,12 @@ package org.yzr.controller; +import com.alibaba.fastjson.JSON; import net.glxn.qrgen.javase.QRCode; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.springframework.stereotype.Controller; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.yzr.model.App; @@ -88,6 +90,18 @@ public class PackageController { try { String filePath = transfer(file); Package aPackage = this.packageService.buildPackage(filePath); + Map extra = new HashMap<>(); + String jobName = request.getParameter("jobName"); + String buildNumber = request.getParameter("buildNumber"); + if (StringUtils.hasLength(jobName)) { + extra.put("jobName", jobName); + } + if (StringUtils.hasLength(buildNumber)) { + extra.put("buildNumber", buildNumber); + } + if (!extra.isEmpty()) { + aPackage.setExtra(JSON.toJSONString(extra)); + } App app = this.appService.getByPackage(aPackage); app.getPackageList().add(aPackage); app.setCurrentPackage(aPackage); diff --git a/src/main/java/org/yzr/model/Package.java b/src/main/java/org/yzr/model/Package.java index d9a245f..8b49716 100644 --- a/src/main/java/org/yzr/model/Package.java +++ b/src/main/java/org/yzr/model/Package.java @@ -34,6 +34,8 @@ public class Package { private String minVersion; // 平台(Android 或 iOS) private String platform; + // 扩展消息 (json格式) + private String extra; // 文件名 private String fileName; @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) diff --git a/src/main/java/org/yzr/utils/webhook/DingDingWebHook.java b/src/main/java/org/yzr/utils/webhook/DingDingWebHook.java index 6ece4e1..f43ba47 100644 --- a/src/main/java/org/yzr/utils/webhook/DingDingWebHook.java +++ b/src/main/java/org/yzr/utils/webhook/DingDingWebHook.java @@ -1,8 +1,11 @@ package org.yzr.utils.webhook; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import okhttp3.*; +import org.springframework.util.StringUtils; import org.yzr.model.App; +import org.yzr.model.Package; import org.yzr.model.WebHook; import org.yzr.utils.ImageUtils; import org.yzr.utils.PathManager; @@ -46,7 +49,7 @@ public class DingDingWebHook implements IWebHook { } Map markdown = new HashMap<>(); markdown.put("title", app.getName()); - String url = pathManager.getBaseURL(false) + "s/" + app.getShortCode(); + String url = pathManager.getBaseURL(false) + "s/" + app.getShortCode() + "?id=" + app.getCurrentPackage().getId(); String platform = "iOS"; if (app.getPlatform().equalsIgnoreCase("android")) { platform = "Android"; @@ -58,7 +61,11 @@ public class DingDingWebHook implements IWebHook { String icon = "data:image/jpg;base64," + ImageUtils.convertImageToBase64(iconPath); String pathInfo = String.format("![%s](%s)", app.getName(), icon); String otherInfo = String.format("链接:[%s](%s) \n\n 版本:%s (Build: %s)", url, url, app.getCurrentPackage().getVersion(), app.getCurrentPackage().getBuildVersion()); + String message = this.getPackageMessage(app.getCurrentPackage()); String text = appInfo + " \n\n " + pathInfo + " \n\n " + otherInfo; + if (message.length() > 0) { + text += "\n\n" + message; + } markdown.put("text", text); JSONObject jsonObject = new JSONObject(); jsonObject.put("msgtype", "markdown"); @@ -69,4 +76,23 @@ public class DingDingWebHook implements IWebHook { sendToDingding(json, webHook.getUrl()); } } + + /** + * 获取扩展消息 + * @return + */ + private String getPackageMessage(Package aPackage) { + String message = ""; + if (StringUtils.hasLength(aPackage.getExtra())) { + Map extra = (Map) JSON.parse(aPackage.getExtra()); + if (extra.containsKey("jobName")) { + message += "任务名:" + extra.get("jobName"); + } + + if (extra.containsKey("buildNumber")) { + message += " 编号:#" + extra.get("buildNumber"); + } + } + return message; + } } diff --git a/src/main/java/org/yzr/vo/PackageViewModel.java b/src/main/java/org/yzr/vo/PackageViewModel.java index 22960e5..340a6b9 100644 --- a/src/main/java/org/yzr/vo/PackageViewModel.java +++ b/src/main/java/org/yzr/vo/PackageViewModel.java @@ -1,15 +1,17 @@ package org.yzr.vo; +import com.alibaba.fastjson.JSON; import lombok.Getter; import org.apache.commons.io.FileUtils; +import org.springframework.util.StringUtils; import org.yzr.model.Package; import org.yzr.utils.PathManager; import java.net.URLEncoder; -import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.Map; @Getter @@ -31,6 +33,7 @@ public class PackageViewModel { private String type; private List devices; private int deviceCount; + private String message; public PackageViewModel(Package aPackage, PathManager pathManager) { this.downloadURL = pathManager.getBaseURL(false) + "p/" + aPackage.getId(); @@ -78,6 +81,18 @@ public class PackageViewModel { } else { this.type = "内测版"; } + String message = ""; + if (StringUtils.hasLength(aPackage.getExtra())) { + Map extra = (Map) JSON.parse(aPackage.getExtra()); + if (extra.containsKey("jobName")) { + message += " 任务名:" + extra.get("jobName"); + } + + if (extra.containsKey("buildNumber")) { + message += " 编号:#" + extra.get("buildNumber"); + } + } + this.message = message; } } diff --git a/src/main/resources/static/js/list.js b/src/main/resources/static/js/list.js index a5e30e1..8f6eaf4 100644 --- a/src/main/resources/static/js/list.js +++ b/src/main/resources/static/js/list.js @@ -2,16 +2,16 @@ * 获取 webHook 列表 */ function getWebHooks() { - var appId =$("#appId").val(); + var appId = $("#appId").val(); var url = "/webHook/find/" + appId; - $.post(url, function(result){ + $.post(url, function (result) { $(".configrations").children(".config-name").remove(); - var content=""; + var content = ""; for (var i = 0; i < result.length; i++) { content += ''; + content += 'data="' + result[i].id + '" data-url="' + result[i].url + '" '; + content += 'data-name="' + result[i].name; + content += '">#' + result[i].name + ''; } $(".configrations").append(content); }); @@ -44,6 +44,84 @@ function editWebHook(e) { } } +/** + * 获取包列表 + */ +function getPackageList() { + var appId = $("#appId").val(); + var url = "/packageList/" + appId; + $.post(url, function (result) { + if (result.success) { + var packages = result.packages; + var packageList = ''; + packageList += '
  • '; + packageList += ''; + packageList += '版本更新'; + packageList += ''; + packageList += '
  • '; + packageList += '
  • '; + packageList += '
    '; + packageList += '
    '; + packageList += '
  • '; + for (var i = 0; i < packages.length; i++) { + var package = packages[i]; + var version = package.version; + var buildVersion = package.buildVersion; + var displayTime = package.displayTime; + var type = package.type; + var downloadURL = package.downloadURL; + var displaySize = package.displaySize; + var previewURL = package.previewURL; + var id = package.id; + var message = package.message; + packageList += '
  • '; + packageList += '
    '; + packageList += '
    '; + packageList += ''; + packageList += '' + version + ' (Build ' + buildVersion + ')' + message + ' '; + packageList += '
    '; + packageList += ''; + packageList += '' + displayTime + ''; + packageList += ''; + packageList += '
    '; + packageList += '
    '; + packageList += ''; + packageList += '' + displayTime + '   ·  '; + packageList += '' + type + ''; + packageList += '  ·  '; + packageList += ''; + packageList += '
    '; + packageList += '
    '; + packageList += ''; + packageList += ''; + if (i > 0) { + packageList += ''; + } + packageList += '
    '; + packageList += '
    '; + packageList += '
    '; + packageList += '
  • '; + } + packageList += '
  • '; + packageList += '
  • '; + $("#app-activity-panel").empty(); + $("#app-activity-panel").append(packageList); + + bindActions(); + } + }); + +} + /** * 构造数据 * @returns {{appId: (*|jQuery|string|undefined), name: (*|jQuery|string|undefined), id: (*|jQuery|string|undefined), url: (*|jQuery|string|undefined)}} @@ -53,11 +131,11 @@ function buildData() { var url = $("#ding-ding-web-hook-url").val(); var appId = $("#appId").val(); var id = $("#webHookId").val(); - var data ={ - name:name, - url:url, - appId:appId, - id:id + var data = { + name: name, + url: url, + appId: appId, + id: id }; return data; } @@ -110,7 +188,7 @@ function remove() { function postWithURL(url) { var data = buildData(); resetForm(); - $.post(url, data, function(result){ + $.post(url, data, function (result) { getWebHooks(); }); } @@ -130,9 +208,10 @@ function removeAllPanelClass() { $("#app-integration-panel").removeClass("ng-hide"); } -$(function () { - getWebHooks(); - +/** + * 绑定事件 + */ +function bindActions() { $(".download-action").click(function () { window.open($(this).val()) }); @@ -142,12 +221,23 @@ $(function () { }); $(".app-delete").click(function () { - var url = "/p/delete/" + $(this).attr("data"); - $.post(url, function(result){ - window.location.href = window.location.href - window.location.reload + var id = $(this).attr("data"); + var url = "/p/delete/" + id; + var li = "package_index_" + id; + console.log(li); + var self = $("." + li); + $.post(url, function (result) { + if (result.success) { + self.remove(); + } }); - }) + }); +} + +$(function () { + getPackageList(); + getWebHooks(); + $("#js-app-short-copy-trigger").click(function () { new ClipboardJS('#js-app-short-copy-trigger', { text: function (trigger) { @@ -180,12 +270,12 @@ $(function () { $("#delete-app").click(function () { var url = "/app/delete/" + $(this).attr("data"); - $.post(url, function(result){ + $.post(url, function (result) { window.location.href = "/apps" }); }); - $("#ding-ding-web-hook-name, #ding-ding-web-hook-url").bind("input propertychange",function(event){ + $("#ding-ding-web-hook-name, #ding-ding-web-hook-url").bind("input propertychange", function (event) { var name = $("#ding-ding-web-hook-name").val(); var url = $("#ding-ding-web-hook-url").val(); if (name.length > 0 && url.length > 0) { diff --git a/src/main/resources/templates/install.html b/src/main/resources/templates/install.html index d646297..f2e19d7 100644 --- a/src/main/resources/templates/install.html +++ b/src/main/resources/templates/install.html @@ -59,6 +59,7 @@ [[${app.version}]] (Build [[${app.buildVersion}]]) - [[${app.currentPackage.displaySize}]]

    更新于:

    +

    [[${app.currentPackage.message}]]

    diff --git a/src/main/resources/templates/list.html b/src/main/resources/templates/list.html index 09988cb..0e2064a 100644 --- a/src/main/resources/templates/list.html +++ b/src/main/resources/templates/list.html @@ -1,62 +1,67 @@ + [[${package.name}]] - 应用动态 - + + - - - -
    -
    -