diff --git a/教程/工具/20250617-门户网站使用教程.md b/教程/工具/20250617-门户网站使用教程.md new file mode 100644 index 0000000..74c68bb --- /dev/null +++ b/教程/工具/20250617-门户网站使用教程.md @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + +# 门户网站使用教程 + +## 解决问题 + +- 公司各种工具和环境混杂 +- 许多工具开发无法很好的感知 +- 统一书签管理 + +--- + +## 快速使用 + +1. 打开 http://menhu.qifu.com +2. 选择企微登录 + +--- + +## 附加说明 + +### 修改密码 + +- 修改密码之后,可以用账户和密码登录,而不需要企微登录 + - 打开设置 (头像 -> 设置) + - 选择左侧 `密码` 选项 + - 填入新密码,点击 `保存修改`。旧密码默认为空 + +### 扩展使用 + +- 使用扩展可以快速添加自己的链接到自定义收藏夹 + +#### 浏览器安装扩展程序 + +- [Chrome/Edge地址](https://chromewebstore.google.com/detail/linkwarden/pnidmkljnhbjfffciajlcpeldoljnidn) + - ![](https://picture.texous.cn/blog/20250617173201956.png) +- [Firefox地址](https://chromewebstore.google.com/detail/linkwarden/pnidmkljnhbjfffciajlcpeldoljnidn) + - ![](https://picture.texous.cn/blog/20250617173232978.png) +- 如果网络不方便的可以使用下面的压缩包,扩展解压缩后,在扩展界面添加已解压的扩展进行安装 + - [扩展包下载](https://drive.weixin.qq.com/s?k=AE0Auwd4ACg2LReqE1) + - ![](https://picture.texous.cn/blog/20250617173350105.png) + +#### 配置服务信息 + +- 新建 AccessToken(头像 -> 设置) + - ![](https://picture.texous.cn/blog/20250617174427002.png) +- 浏览器插件配置 + - ![](https://picture.texous.cn/blog/20250617174510825.png) + - URL:http://menhu.qifu.com + - API Key:第一步创建的 AccessToken +- 在需要收藏的界面点击插件图标,保存到自己的文件夹下(官方文件夹无权限收藏) + +--- + +## 参考 + +- [官方说明文档](https://docs.linkwarden.app/getting-started/browser-extension) \ No newline at end of file diff --git a/文档/基础组件/20250527-元盟核心包说明.md b/文档/基础组件/00-元盟核心包说明.md similarity index 100% rename from 文档/基础组件/20250527-元盟核心包说明.md rename to 文档/基础组件/00-元盟核心包说明.md diff --git a/文档/基础组件/01-元盟核心包变更记录.md b/文档/基础组件/01-元盟核心包变更记录.md new file mode 100644 index 0000000..befaf7b --- /dev/null +++ b/文档/基础组件/01-元盟核心包变更记录.md @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + +# 元盟核心包变更记录 +## 2.0.2 +- 修复脚手架扫描路径导致的问题 +- 自动填充工具类多层级支持 + +## 2.0.1(Deprecated) +- 用户重构兼容 + +## 2.0.0 +- 重构核心包结构 +- 抽离兼容包 \ No newline at end of file diff --git a/文档/基础组件/web/20250617-engine-starter-web-2.0.2.md b/文档/基础组件/web/20250617-engine-starter-web-2.0.2.md new file mode 100644 index 0000000..317fd14 --- /dev/null +++ b/文档/基础组件/web/20250617-engine-starter-web-2.0.2.md @@ -0,0 +1,400 @@ + + + + + + + + + + + + + + + +# engine-starter-web 使用教程 + +> 基于 web 的各种工具封装 +> 具体使用可参考 [engine-sample > engine-sample-starter-web](../engine-sample/engine-sample-starter-web) + +## 功能特性 + +- [X] `YmAutofillResponseAdvice`: 全局返回结果填充处理 +- [X] `@YmAutoFill` 和 `@YmAutoFillResp`: 结果自动填充 + - 多层级填充实现,[使用样例](#结果自动填充) + - 多层级字段需要使用 `@YmAutofillResp` 标识 +- [X] `@YmIgnoreResultWrapper`: 忽略 `Result` 结果包装 +- [X] `YmResponseAdvice`: 全局结果封装 +- [X] `YmGlobalExceptionHandlerAdvice`: 全局异常拦截处理 +- [X] `YmI18nResponseAdvice`: I18n全局处理 +- [X] `@YmIgnoreI18n`: 忽略I18n +- [X] `YmHealthCheckFilter`: 全局健康检查接口 +- [X] `YmRequestBodyWrapperFilter`: request 和 response 可重复读封装 +- [X] `YmRequestPrintFilter`: 请求日志打印 +- [X] `YmThreadLocalFilter`: 登录用户信息解析存储(兼容新网关) +- [X] `YmUserLoginFilter`: 用户登录校验(后续会迁移到网关,默认关闭) +- [X] `YmThreadLocalUtils`: 获取当前线程中的上下文信息 + +------- + +## 快速使用 + +- **注意:** `qifu-saas-parent >= 2.0.1-SNAPSHOT` +- **注意:** 启动类 `@ComponentScan` 需要变更为如下形式 +- ```java + @ComponentScan(value = "com.yuanmeng.*", + excludeFilters = { + @ComponentScan.Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), + @ComponentScan.Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) + }) + @SpringBootApplication + public class SampleStarterWebApplication { + + public static void main(String[] args) { + SpringApplication.run(SampleStarterWebApplication.class, args); + } + + } + ``` + +### 添加依赖 + +```xml + + + com.yuanmeng.engine + engine-starter-web + +``` + +### 添加兼容包(可选) + +- 项目中存在 `web-core` 或者 `oauth2-core` 时需要添加兼容包 + +```xml + + + com.yuanmeng.engine + engine-starter-compatible-web + +``` + +---- + +## 使用工具 + +### 忽略结果封装 + +```java +public class Usage { + + /** + * 测试忽略包装 + * + * @return 结果 + */ + @YmIgnoreResultWrapper + @GetMapping("/ignore-result-wrapper") + public String ignoreResultWrapper() { + return "ignore-result-wrapper success"; + } + +} +``` + +### 全局异常拦截 + +```java +public class Usage { + + @GetMapping("/exception") + public String exception() { + // 打印error日志,触发告警 + throw new RuntimeException("exception"); + } + + @GetMapping("/ym-exception") + public String ymException() { + // 打印error日志,触发告警 + throw new YmException("ym exception"); + } + + @GetMapping("/ym-biz-exception") + public String ymBizException() { + // 打印 warning 日志 + throw new YmBizException(YmResultCode.BASE_ERROR); + } + + @GetMapping("/ym-biz-data-exception") + public String ymBizDataException() { + // 打印 info 日志 + throw new YmBizDataException(YmResultCode.BASE_ERROR, + new TestData(TestStatusEnum.SUCCESS.getCode(), "1")); + } + + @YmAutofillResp + @GetMapping("/ym-biz-data-exception-fill") + public String ymBizDataExceptionFill() { + // 触发结果数据自动填充 + throw new YmBizDataException(YmResultCode.BASE_ERROR, + new TestData(TestStatusEnum.SUCCESS.getCode(), "1")); + } + +} +``` + +### 国际化支持 + +- 开启国际化支撑 + +```yaml +yuanmeng: + web: + i18n: + enable: true +``` + +- 添加国际化文件 + - 默认 `resources > i18n > messages_zh_CN.properties` + +```properties +Base\ Error=服务端错误 +``` + +- 编写代码 + +```java + +@GetMapping("/i18n") +public String i18n() { + return "test success"; +} + +@YmIgnoreI18n +@GetMapping("/i18n-ignore") +public String i18nIgnore() { + return "i18n ignore"; +} + +@GetMapping("/i18n-error") +public String i18nError() { + // 触发国际化配置 + throw new YmBizException(YmResultCode.BASE_ERROR); +} +``` + +- **自定义国际化处理类(可选)** + +```java + +@RequiredArgsConstructor +public class CustomI18nMessageHandler implements YmI18nMessageHandler { + + private final MessageSource messageSource; + + @Override + public String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale) { + return messageSource.getMessage(code, args, defaultMessage, locale); + } + + @Override + public String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException { + return messageSource.getMessage(code, args, locale); + } + + @Override + public String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException { + return messageSource.getMessage(resolvable, locale); + } + +} + +@Configuration +public class YmI18nConfiguration { + + public static final String I18N_MESSAGE_SOURCE = "ymI18nMessageSource"; + public static final String I18N_MESSAGE_HANDLER = "ymI18nMessageHandler"; + + @Bean(I18N_MESSAGE_SOURCE) + @ConditionalOnMissingBean(name = I18N_MESSAGE_SOURCE) + public MessageSource messageSource() { + log.info("[WEB_STARTER_INIT]: CUSTOM I18N_MESSAGE_SOURCE init"); + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasename("i18n/test"); + messageSource.setDefaultEncoding(StandardCharsets.UTF_8.toString()); + return messageSource; + } + + @Bean(I18N_MESSAGE_HANDLER) + @ConditionalOnMissingBean(name = I18N_MESSAGE_HANDLER) + public YmI18nMessageHandler ymI18nMessageHandler(@Qualifier(I18N_MESSAGE_SOURCE) MessageSource messageSource) { + log.info("[WEB_STARTER_INIT]: CUSTOM YmI18nMessageHandler init"); + return new CustomI18nMessageHandler(messageSource); + } + +} +``` + +### 结果自动填充 + +```java + +import java.util.List; + +@Getter +@AllArgsConstructor +public enum TestStatusEnum implements YmBaseEnum { + + SUCCESS("SUCCESS", "成功"), + FAIL("FAIL", "失败"), + ; + + private final String code; + private final String desc; + +} + +@Component +public class TestAutoFillHandler implements YmAutofillHandler { + + @Override + public Map handle(Collection ids, YmAutofillInfo autofill) { + Collection string = (Collection) ids; + Map result = new HashMap<>(); + string.forEach(k -> result.put(k, k + "value")); + return result; + } + +} + +@Data +@NoArgsConstructor +public class TestData { + + @YmAutofill(enumCls = TestStatusEnum.class) + private String statusName; + private String status; + + private String code; + @YmAutofill(from = "code", type = YmAutofillType.BEAN, handler = TestAutoFillHandler.class) + private String msg; + + @YmAutofillResp + private List secondList; + @YmAutofillResp + private List childList; + + public TestData(String status, String code) { + this.status = status; + this.code = code; + } + +} + +@Data +@NoArgsConstructor +public class TestDataSecond { + + private String statusName; + private String status; + + private String code; + private String msg; + + @YmAutofillResp + private TestData testData; + + public TestDataSecond(String status, String code) { + this.status = status; + this.code = code; + } + +} + + +public class Usage { + + @YmAutofillResp + @GetMapping("/autofill") + public List autofill() { + List list = new ArrayList<>(); + list.add(new TestData(TestStatusEnum.SUCCESS.getCode(), "1")); + list.add(new TestData(TestStatusEnum.FAIL.getCode(), "2")); + return list; + } + + @YmAutofillResp({ + @YmAutofill(from = "status", target = "statusName", enumCls = TestStatusEnum.class), + @YmAutofill(from = "code", target = "msg", type = YmAutofillType.BEAN, handler = TestAutoFillHandler.class) + }) + @GetMapping("/autofill-second") + public List autofillSecond() { + List list = new ArrayList<>(); + list.add(new TestDataSecond(TestStatusEnum.SUCCESS.getCode(), "1")); + list.add(new TestDataSecond(TestStatusEnum.FAIL.getCode(), "2")); + return list; + } + +} +``` + +------ + +## 完整默认配置文件 + +```yaml +yuanmeng: + web: + #- 开启starter + enable: true + #- 开启兼容排除 + enable-ignore: true + #- 开启返回结果填充 + enable-audit-handler: true + #- 开启返回结果自动封装 YmResult + enable-result-wrapper: true + #- 开启全局异常拦截 + enable-exception-handler: true + filter: + #- 开启健康检查接口 + enable-health-check: true + #- 开启上下文信息解析 + enable-thread-local: true + #- 开启登录拦截器(token校验) + enable-user-login: false + #- 需要跳过的路径 + skip-path: + - "/test" + #- 可重复读请求封装 + request-body: + enable: true + filter-uris: + - "/test1" + #- 请求日志打印封装 + track: + enable: true + filter-uris: + - "/test2" + sensitive-keys: + - "password" + print-type: 2 + #- 打印请求体 + print-request-body: true + #- 打印返回体 + print-response-body: true + external-url-list: + - "/external/test" + #- i18n全局拦截 + i18n: + enable: false +``` \ No newline at end of file diff --git a/杂项/test1.json b/杂项/test1.json index 7a0fba8..63ee5f0 100644 --- a/杂项/test1.json +++ b/杂项/test1.json @@ -1,13 +1,370 @@ - -{ - "Labels": [ - { - "LabelBase64": "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PDwKICAvUmVzb3VyY2VzIDE1IDAgUgogIC9UeXBlIC9QYWdlCiAgL01lZGlhQm94IFswIDAgMjg4IDQzMl0KICAvQ3JvcEJveCBbMCAwIDI4OCA0MzJdCiAgL0JsZWVkQm94IFswIDAgMjg4IDQzMl0KICAvVHJpbUJveCBbMCAwIDI4OCA0MzJdCiAgL1BhcmVudCAxNiAwIFIKICAvQ29udGVudHMgMTIgMCBSCj4+CmVuZG9iagoxNyAwIG9iago8PAogIC9UeXBlIC9Gb250CiAgL1N1YnR5cGUgL1R5cGUxCiAgL0Jhc2VGb250IC9IZWx2ZXRpY2EKICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTggMCBvYmoKPDwKICAvVHlwZSAvRm9udAogIC9TdWJ0eXBlIC9UeXBlMQogIC9CYXNlRm9udCAvSGVsdmV0aWNhLU9ibGlxdWUKICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTkgMCBvYmoKPDwKICAvVHlwZSAvRm9udAogIC9TdWJ0eXBlIC9UeXBlMQogIC9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQKICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTYgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzCi9Db3VudCAxCi9LaWRzIFsxNCAwIFIgXSA+PgplbmRvYmoKMjAgMCBvYmoKPDwKICAvVHlwZSAvQ2F0YWxvZwogIC9QYWdlcyAxNiAwIFIKICAvTGFuZyAoeC11bmtub3duKQo+PgplbmRvYmoKMTUgMCBvYmoKPDwKICAvRm9udCA8PAogIC9GMSAxNyAwIFIKICAvRjIgMTggMCBSCiAgL0YzIDE5IDAgUgo+PgogIC9Qcm9jU2V0IFsvUERGIC9JbWFnZUIgL0ltYWdlQyAvVGV4dF0KICAvWE9iamVjdCA8PCAvSW0xIDUgMCBSIC9JbTIgMTAgMCBSID4+CiAgL0NvbG9yU3BhY2UgPDwgL0lDQzIgNCAwIFIgL0lDQzcgOSAwIFIgPj4KPj4KZW5kb2JqCnhyZWYKMCAyMQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMDEzMSAwMDAwMCBuIAowMDAwMDAyNjg4IDAwMDAwIG4gCjAwMDAwMDI3MDggMDAwMDAgbiAKMDAwMDAwMjc0MSAwMDAwMCBuIAowMDAwMDAzMDEzIDAwMDAwIG4gCjAwMDAwMDMwMzEgMDAwMDAgbiAKMDAwMDAwNTU4OCAwMDAwMCBuIAowMDAwMDA1NjA4IDAwMDAwIG4gCjAwMDAwMDU2NDEgMDAwMDAgbiAKMDAwMDAwNTk2MiAwMDAwMCBuIAowMDAwMDA1OTgyIDAwMDAwIG4gCjAwMDAwMTI1NzAgMDAwMDAgbiAKMDAwMDAxMjU5MSAwMDAwMCBuIAowMDAwMDEzMjUxIDAwMDAwIG4gCjAwMDAwMTMxMTYgMDAwMDAgbiAKMDAwMDAxMjc4NSAwMDAwMCBuIAowMDAwMDEyODkxIDAwMDAwIG4gCjAwMDAwMTMwMDUgMDAwMDAgbiAKMDAwMDAxMzE3NiAwMDAwMCBuIAp0cmFpbGVyCjw8CiAgL1Jvb3QgMjAgMCBSCiAgL0luZm8gMSAwIFIKICAvSUQgWzxCQzhFRDNDNzk0RDY4NTg0QkM1MDAxQ0VBNDRBRjI5RT4gPEJDOEVEM0M3OTRENjg1ODRCQzUwMDFDRUE0NEFGMjlFPl0KICAvU2l6ZSAyMQo+PgpzdGFydHhyZWYKMTM0NTAKJSVFT0YK", - "LabelType": "pdf", - "Tracknumber": "9234690346749900475340" - } - ], - "Message": "OK", - "OrderNo": "613048161388470272", - "Success": true -} \ No newline at end of file +[ + { + "avatarUrl": "https://www.gravatar.com/avatar/02c09b568c28050ee877a3196c098f92?s=80&d=identicon", + "id": 116, + "name": "jeecg", + "state": "active", + "username": "jeecg", + "webUrl": "http://git.keyfil.com/jeecg" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/575b820b74359c0bb6377bc62843e6ec?s=80&d=identicon", + "id": 115, + "name": "yuting.chen", + "state": "active", + "username": "yuting.chen", + "webUrl": "http://git.keyfil.com/yuting.chen" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/467fb2ece15e8c641b8e40f70b7fe1c7?s=80&d=identicon", + "id": 114, + "name": "杨承锦", + "state": "active", + "username": "chengjin.yang", + "webUrl": "http://git.keyfil.com/chengjin.yang" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/84478e8f4bd851604453cd7c25979680?s=80&d=identicon", + "id": 112, + "name": "ying.huang", + "state": "active", + "username": "ying.huang", + "webUrl": "http://git.keyfil.com/ying.huang" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/883cfb0cee084f7c8709fe7811abcc92?s=80&d=identicon", + "id": 111, + "name": "bingjie.li", + "state": "active", + "username": "bingjie.li", + "webUrl": "http://git.keyfil.com/bingjie.li" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/5f5405423431aa2ebd2dd13cb1b605d6?s=80&d=identicon", + "id": 110, + "name": "xi.mao", + "state": "active", + "username": "xi.mao", + "webUrl": "http://git.keyfil.com/xi.mao" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/2d70598bfe61b3f1ff60789485ee1b09?s=80&d=identicon", + "id": 109, + "name": "ziqi.huang", + "state": "active", + "username": "ziqi.huang", + "webUrl": "http://git.keyfil.com/ziqi.huang" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/757648fa429847f74bae81092638f5c3?s=80&d=identicon", + "id": 107, + "name": "xining.guan", + "state": "active", + "username": "xining.guan", + "webUrl": "http://git.keyfil.com/xining.guan" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/b6bdf111bfc0cc6fc3bb87e8bd104c12?s=80&d=identicon", + "id": 105, + "name": "lingjie.zheng", + "state": "active", + "username": "lingjie.zheng", + "webUrl": "http://git.keyfil.com/lingjie.zheng" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/a461c956e7614b3e6cb28a33ee204431?s=80&d=identicon", + "id": 103, + "name": "peiwen.zhang", + "state": "active", + "username": "peiwen.zhang", + "webUrl": "http://git.keyfil.com/peiwen.zhang" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/f734c3ed344b015cc94c4ce0babb0591?s=80&d=identicon", + "id": 101, + "name": "zhaohui.fu", + "state": "active", + "username": "zhaohui.fu", + "webUrl": "http://git.keyfil.com/zhaohui.fu" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/ea16ac3d56d5ed0a47b65ea30d84e2f6?s=80&d=identicon", + "id": 100, + "name": "zhixuan.lin", + "state": "active", + "username": "zhixuan.lin", + "webUrl": "http://git.keyfil.com/zhixuan.lin" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/f2ce43c48b7b7b21a30c8de7bdae5bbc?s=80&d=identicon", + "id": 99, + "name": "liu.jiang", + "state": "active", + "username": "liu.jiang", + "webUrl": "http://git.keyfil.com/liu.jiang" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/a8ddcd044ad6b84914312fd2e8694658?s=80&d=identicon", + "id": 98, + "name": "ce.zhang", + "state": "active", + "username": "ce.zhang", + "webUrl": "http://git.keyfil.com/ce.zhang" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/449ab37c7333793c918fa1b6c5a8201c?s=80&d=identicon", + "id": 94, + "name": "aijiao.jia", + "state": "active", + "username": "aijiao.jia", + "webUrl": "http://git.keyfil.com/aijiao.jia" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/38c7876a835251aa31a2ef44b8451d15?s=80&d=identicon", + "id": 93, + "name": "yuanzhi.li", + "state": "active", + "username": "yuanzhi.li", + "webUrl": "http://git.keyfil.com/yuanzhi.li" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/4263838346cbd71feb8af0baeb5893e4?s=80&d=identicon", + "id": 92, + "name": "江臻宇", + "state": "active", + "username": "zhenyu.jiang", + "webUrl": "http://git.keyfil.com/zhenyu.jiang" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/9e084e69c5019a75a6a567e9a6ac3bdc?s=80&d=identicon", + "id": 90, + "name": "siqi.lin", + "state": "active", + "username": "siqi.lin", + "webUrl": "http://git.keyfil.com/siqi.lin" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/254c609b6ccd67bd51b3ed5063a861fc?s=80&d=identicon", + "id": 85, + "name": "hongmei.luo", + "state": "active", + "username": "hongmei.luo", + "webUrl": "http://git.keyfil.com/hongmei.luo" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/de43d8df4da81aa3fb7ae95814a8ad01?s=80&d=identicon", + "id": 83, + "name": "liwei.he", + "state": "active", + "username": "liwei.he", + "webUrl": "http://git.keyfil.com/liwei.he" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/1a7ee56156790934b33cddf52a6831c1?s=80&d=identicon", + "id": 82, + "name": "junfan.fan", + "state": "active", + "username": "junfan.fan", + "webUrl": "http://git.keyfil.com/junfan.fan" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/2b1b880319eb1dad322a8cc112a5433e?s=80&d=identicon", + "id": 81, + "name": "tao.zhou", + "state": "active", + "username": "tao.zhou", + "webUrl": "http://git.keyfil.com/tao.zhou" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/2cfee2f716a00e0849faa2f0ebc50760?s=80&d=identicon", + "id": 77, + "name": "analysis", + "state": "active", + "username": "analysis", + "webUrl": "http://git.keyfil.com/analysis" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/b9f48da54848ff998ca99b6aceb54e14?s=80&d=identicon", + "id": 76, + "name": "qifeng.nie", + "state": "active", + "username": "qifeng.nie", + "webUrl": "http://git.keyfil.com/qifeng.nie" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/ce128f83b31da0a340bc1ac9be5dda22?s=80&d=identicon", + "id": 71, + "name": "jenkins", + "state": "active", + "username": "jenkins", + "webUrl": "http://git.keyfil.com/jenkins" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/f9d1e35a720adee100ae7dd8dc0a4290?s=80&d=identicon", + "id": 70, + "name": "shihang.wu", + "state": "active", + "username": "shihang.wu", + "webUrl": "http://git.keyfil.com/shihang.wu" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/5a3f26cee3ea39ea0fa060ab87442184?s=80&d=identicon", + "id": 61, + "name": "yongwei.zhang", + "state": "active", + "username": "yongwei.zhang", + "webUrl": "http://git.keyfil.com/yongwei.zhang" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/fb559f1d9ed7eeafb6fdc5f1faadf41c?s=80&d=identicon", + "id": 60, + "name": "weiming.liu", + "state": "active", + "username": "weiming.liu", + "webUrl": "http://git.keyfil.com/weiming.liu" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/666ab4b308018f07cb90e6e49b9737d2?s=80&d=identicon", + "id": 59, + "name": "quanliang.qiu", + "state": "active", + "username": "quanliang.qiu", + "webUrl": "http://git.keyfil.com/quanliang.qiu" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/08bb39d086dd2d2d2cc18944e1b68a2e?s=80&d=identicon", + "id": 54, + "name": "徐会派", + "state": "active", + "username": "huipai.xu", + "webUrl": "http://git.keyfil.com/huipai.xu" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/bed79d77c88b55070cea6797121b413c?s=80&d=identicon", + "id": 53, + "name": "刘晓华", + "state": "active", + "username": "xiaohua.liu", + "webUrl": "http://git.keyfil.com/xiaohua.liu" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/835d48ea0b7203a8328297941c747eef?s=80&d=identicon", + "id": 52, + "name": "xiujian.li", + "state": "active", + "username": "xiujian.li", + "webUrl": "http://git.keyfil.com/xiujian.li" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/b3a861f6fc02980fbc0f9b29ced98526?s=80&d=identicon", + "id": 50, + "name": "youkai.deng", + "state": "active", + "username": "youkai.deng", + "webUrl": "http://git.keyfil.com/youkai.deng" + }, + { + "avatarUrl": "http://git.keyfil.com/uploads/-/system/user/avatar/47/avatar.png", + "id": 47, + "name": "李金锋", + "state": "active", + "username": "jinfeng.li", + "webUrl": "http://git.keyfil.com/jinfeng.li" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/6955365adc7d3bb58d59ba60fc3123e3?s=80&d=identicon", + "id": 46, + "name": "mingchang.chen", + "state": "active", + "username": "mingchang.chen", + "webUrl": "http://git.keyfil.com/mingchang.chen" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/1ef224e4fde9b88db074bd164498d649?s=80&d=identicon", + "id": 45, + "name": "ruihong.zheng", + "state": "active", + "username": "ruihong.zheng", + "webUrl": "http://git.keyfil.com/ruihong.zheng" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/c957e301ea72b35a0ba5943330982e43?s=80&d=identicon", + "id": 41, + "name": "ziai.wang", + "state": "active", + "username": "ziai.wang", + "webUrl": "http://git.keyfil.com/ziai.wang" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/86aff4c9e779ada01458c169f806ca9b?s=80&d=identicon", + "id": 36, + "name": "xiangyi.feng", + "state": "active", + "username": "xy.fung", + "webUrl": "http://git.keyfil.com/xy.fung" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/cc0e53128fc2c21bff3c24c1f8e14719?s=80&d=identicon", + "id": 27, + "name": "test", + "state": "active", + "username": "test", + "webUrl": "http://git.keyfil.com/test" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/d524f58f5b37e2ff6a1cc1c3d8e10d9d?s=80&d=identicon", + "id": 13, + "name": "高小冰", + "state": "active", + "username": "gaoxiaobing", + "webUrl": "http://git.keyfil.com/gaoxiaobing" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/3ceed6336043ae7ffc3ed1381490fdf3?s=80&d=identicon", + "id": 11, + "name": "刘强", + "state": "active", + "username": "liuqiang", + "webUrl": "http://git.keyfil.com/liuqiang" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/74da63baa41807bc459bbe13115bf706?s=80&d=identicon", + "id": 9, + "name": "leader", + "state": "active", + "username": "leader", + "webUrl": "http://git.keyfil.com/leader" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/6cdd0990f537f80a8c62070eeebff391?s=80&d=identicon", + "id": 4, + "name": "林明郁", + "state": "active", + "username": "linmingyu", + "webUrl": "http://git.keyfil.com/linmingyu" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/15543a95e429e483dbc320beb2e82139?s=80&d=identicon", + "id": 3, + "name": "刘微", + "state": "active", + "username": "liuwei", + "webUrl": "http://git.keyfil.com/liuwei" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/16902bae01d35831c6772a1a6fac8f7c?s=80&d=identicon", + "id": 2, + "name": "周英桥", + "state": "active", + "username": "zhou", + "webUrl": "http://git.keyfil.com/zhou" + }, + { + "avatarUrl": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", + "id": 1, + "name": "Administrator", + "state": "active", + "username": "root", + "webUrl": "http://git.keyfil.com/root" + } +]