Browse Source

提交开源任务材料

10.0
LAPTOP-SB56SG4Q\86185 3 years ago
parent
commit
613a2fefee
  1. BIN
      JSD-8433-配置使用文档.docx
  2. BIN
      JSD-8433-需求确认书V1.docx
  3. BIN
      lib/commons-codec-1.15.jar
  4. BIN
      lib/finekit-10.0.jar
  5. BIN
      lib/lippi-oapi-encrpt.jar
  6. BIN
      lib/taobao-sdk-java-auto_1479188381469-20210421.jar
  7. 28
      plugin.xml
  8. 73
      src/main/java/com/fr/plugin/mqh/dingtalksyn/config/DingSynConfig.java
  9. 42
      src/main/java/com/fr/plugin/mqh/dingtalksyn/provider/LifeCycleMonitorImpl.java
  10. 36
      src/main/java/com/fr/plugin/mqh/dingtalksyn/provider/LocaleFinder.java
  11. 212
      src/main/java/com/fr/plugin/mqh/dingtalksyn/request/GlobalRequestFilterBridge.java
  12. 152
      src/main/java/com/fr/plugin/mqh/dingtalksyn/utils/DingAPI.java
  13. 67
      src/main/java/com/fr/plugin/mqh/dingtalksyn/utils/DingTokenUtils.java
  14. 188
      src/main/resources/com/fr/plugin/mqh/dingtalksyn/locale/lang.properties
  15. 188
      src/main/resources/com/fr/plugin/mqh/dingtalksyn/locale/lang_zh_CN.properties
  16. 24
      src/main/resources/com/fr/plugin/mqh/dingtalksyn/web/codePage.html
  17. 1
      src/main/resources/com/fr/plugin/mqh/dingtalksyn/web/dingtalk.open.js

BIN
JSD-8433-配置使用文档.docx

Binary file not shown.

BIN
JSD-8433-需求确认书V1.docx

Binary file not shown.

BIN
lib/commons-codec-1.15.jar

Binary file not shown.

BIN
lib/finekit-10.0.jar

Binary file not shown.

BIN
lib/lippi-oapi-encrpt.jar

Binary file not shown.

BIN
lib/taobao-sdk-java-auto_1479188381469-20210421.jar

Binary file not shown.

28
plugin.xml

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<id>com.fr.plugin.mqh.dingtalksyn.job</id>
<name><![CDATA[钉钉单点登陆]]></name>
<active>yes</active>
<version>1.1</version>
<env-version>10.0</env-version>
<jartime>2018-07-31</jartime>
<vendor>fr.open</vendor>
<description><![CDATA[钉钉单点登陆]]></description>
<change-notes><![CDATA[
版本1.0主要功能:<br/>
1.用户单点登陆功能<br/>
]]></change-notes>
<main-package>com.fr.plugin.mqh.dingtalksyn</main-package>
<prefer-packages>
<prefer-package>com.fanruan.api</prefer-package>
<prefer-package>org.apache.commons.codec</prefer-package>
</prefer-packages>
<lifecycle-monitor class="com.fr.plugin.mqh.dingtalksyn.provider.LifeCycleMonitorImpl"/>
<extra-core>
<LocaleFinder class="com.fr.plugin.mqh.dingtalksyn.provider.LocaleFinder"/>
</extra-core>
<extra-decision>
<GlobalRequestFilterProvider class="com.fr.plugin.mqh.dingtalksyn.request.GlobalRequestFilterBridge"/>
</extra-decision>
<function-recorder class="com.fr.plugin.mqh.dingtalksyn.provider.LocaleFinder"/>
</plugin>

73
src/main/java/com/fr/plugin/mqh/dingtalksyn/config/DingSynConfig.java

@ -0,0 +1,73 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: DingSynConfig
* Author: Louis
* Date: 2021/3/30 9:38
*/
package com.fr.plugin.mqh.dingtalksyn.config;
import com.fanruan.api.util.StringKit;
import com.fr.config.*;
import com.fr.config.holder.Conf;
import com.fr.config.holder.factory.Holders;
/**
* <Function Description><br>
* <DingSynConfig>
*
* @author Louis
* @since 1.0.0
*/
@Visualization(category = "Plugin-dingtalksyn_Group")
public class DingSynConfig extends DefaultConfiguration {
private static volatile DingSynConfig config = null;
public static DingSynConfig getInstance() {
if (config == null) {
config = ConfigContext.getConfigInstance(DingSynConfig.class);
}
return config;
}
@Identifier(value = "appKey", name = "Plugin-dingtalksyn_Config_appKey", description = "Plugin-dingtalksyn_Config_appKey_Description", status = Status.SHOW)
private Conf<String> appKey = Holders.simple(StringKit.EMPTY);
@Identifier(value = "appSecret", name = "Plugin-dingtalksyn_Config_appSecret", description = "Plugin-dingtalksyn_Config_appSecret_Description", status = Status.SHOW)
private Conf<String> appSecret = Holders.simple(StringKit.EMPTY);
@Identifier(value = "corpId", name = "Plugin-dingtalksyn_Config_corpId", description = "Plugin-dingtalksyn_Config_corpId_Description", status = Status.SHOW)
private Conf<String> corpId = Holders.simple(StringKit.EMPTY);
private Conf<Boolean> ssoEnable = Holders.simple(true);
public String getAppKey() {
return appKey.get();
}
public void setAppKey(String appKey) {
this.appKey.set(appKey);
}
public String getAppSecret() {
return appSecret.get();
}
public void setAppSecret(String appSecret) {
this.appSecret.set(appSecret);
}
public String getCorpId() {
return corpId.get();
}
public void setCorpId(String corpId) {
this.corpId.set(corpId);
}
public boolean getSsoEnable() {
return ssoEnable.get();
}
public void setSsoEnable(boolean ssoEnable) {
this.ssoEnable.set(ssoEnable);
}
}

42
src/main/java/com/fr/plugin/mqh/dingtalksyn/provider/LifeCycleMonitorImpl.java

@ -0,0 +1,42 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: LifeCycleMonitorImpl
* Author: Louis
* Date: 2021/3/30 15:10
*/
package com.fr.plugin.mqh.dingtalksyn.provider;
import com.fanruan.api.log.LogKit;
import com.fr.plugin.context.PluginContext;
import com.fr.plugin.mqh.dingtalksyn.config.DingSynConfig;
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor;
import com.fr.stable.fun.Authorize;
/**
* <Function Description><br>
* <LifeCycleMonitorImpl>
*
* @author Louis
* @since 1.0.0
*/
@Authorize(callSignKey = LocaleFinder.PLUGIN_ID)
public class LifeCycleMonitorImpl extends AbstractPluginLifecycleMonitor {
public LifeCycleMonitorImpl() {
}
@Override
public void afterRun(PluginContext pluginContext) {
DingSynConfig config = DingSynConfig.getInstance();
if (pluginContext.isAvailable()) {
config.setSsoEnable(true);
} else {
config.setSsoEnable(false);
LogKit.error("dingtalksyn-Plugin License is expired!");
}
}
@Override
public void beforeStop(PluginContext pluginContext) {
}
}

36
src/main/java/com/fr/plugin/mqh/dingtalksyn/provider/LocaleFinder.java

@ -0,0 +1,36 @@
/*
* Copyright (C), 2018-2020
* Project: starter
* FileName: LocaleFinder
* Author: Louis
* Date: 2020/8/31 22:19
*/
package com.fr.plugin.mqh.dingtalksyn.provider;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.stable.fun.impl.AbstractLocaleFinder;
/**
* <Function Description><br>
* <LocaleFinder>
*
* @author Louis
* @since 1.0.0
*/
@EnableMetrics
public class LocaleFinder extends AbstractLocaleFinder {
public static final String PLUGIN_ID = "com.fr.plugin.mqh.dingtalksyn.job";
@Override
@Focus(id = PLUGIN_ID, text = "Plugin-dingtalksyn", source = Original.PLUGIN)
public String find() {
return "com/fr/plugin/mqh/dingtalksyn/locale/lang";
}
@Override
public int currentAPILevel() {
return CURRENT_LEVEL;
}
}

212
src/main/java/com/fr/plugin/mqh/dingtalksyn/request/GlobalRequestFilterBridge.java

@ -0,0 +1,212 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: GlobalRequestFilterBridge
* Author: Louis
* Date: 2021/3/30 22:09
*/
package com.fr.plugin.mqh.dingtalksyn.request;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.fanruan.api.decision.login.LoginKit;
import com.fanruan.api.log.LogKit;
import com.fanruan.api.net.NetworkKit;
import com.fanruan.api.net.http.HttpKit;
import com.fanruan.api.util.IOKit;
import com.fanruan.api.util.StringKit;
import com.fr.base.TemplateUtils;
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider;
import com.fr.decision.webservice.utils.DecisionServiceConstants;
import com.fr.decision.webservice.v10.login.LoginService;
import com.fr.json.JSONObject;
import com.fr.plugin.mqh.dingtalksyn.config.DingSynConfig;
import com.fr.web.utils.WebUtils;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
import static com.fr.plugin.mqh.dingtalksyn.utils.DingAPI.*;
/**
* <Function Description><br>
* <GlobalRequestFilterBridge>
*
* @author Louis
* @since 1.0.0
*/
public class GlobalRequestFilterBridge extends AbstractGlobalRequestFilterProvider {
public static final String TPL_PATH = "/com/fr/plugin/mqh/dingtalksyn/web/codePage.html";
public static final String DINGTALK_OPEN_JS = "/com/fr/plugin/mqh/dingtalksyn/web/dingtalk.open.js";
public static final String CODE = "code";
public static final String DING_TALK_LOGIN = "dt";
private DingSynConfig config;
/**
* 过滤器名称
*
* @return
*/
@Override
public String filterName() {
return "DingTalkSynFilter";
}
/**
* 过滤规则
*
* @return
*/
@Override
public String[] urlPatterns() {
return new String[]{"/decision/*"};
}
/**
* 过滤器初始化
*
* @param filterConfig
*/
@Override
public void init(FilterConfig filterConfig) {
this.config = DingSynConfig.getInstance();
super.init(filterConfig);
}
/**
* 过滤器处理
*
* @param request
* @param response
* @param filterChain
*/
@Override
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) {
try {
if (operation(request, response)) {
filterChain.doFilter(request, response);
}
} catch (Exception e) {
LogKit.error(e.getMessage(), e);
}
}
/**
* 用户验证登陆操作
*
* @param req
* @param res
* @throws Exception
*/
private boolean operation(HttpServletRequest req, HttpServletResponse res) throws Exception {
// 判断单点功能是否开启
if (!this.config.getSsoEnable()) {
return true;
}
String pathInfo = (req.getPathInfo() != null) ? req.getPathInfo() : StringKit.EMPTY;
if (StringKit.equals(DINGTALK_OPEN_JS, pathInfo)) {
WebUtils.printAsString(res, IOKit.readResourceAsString(DINGTALK_OPEN_JS));
return false;
}
//DingTalk登陆参数
String dt = NetworkKit.getHTTPRequestParameter(req, DING_TALK_LOGIN);
if (StringKit.isBlank(dt)) {
return true;
}
// 已登录
if (LoginService.getInstance().isLogged(req)) {
return true;
}
String code = NetworkKit.getHTTPRequestParameter(req, CODE);
LogKit.info("dingtalksyn-GlobalRequestFilterBridge-operation-code:{}", code);
if (StringKit.isEmpty(code)) {
loginPage(req, res);
return false;
}
String accessToken = getAccessToken(code);
String username = getUsername(code, accessToken);
LogKit.info("dingtalksyn-GlobalRequestFilterBridge-operation-username:{}", username);
if (StringKit.isEmpty(username)) {
return true;
}
String tokenFR = LoginKit.login(req, res, username);
req.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, tokenFR);
return true;
}
/**
* 钉钉获取code页面
*
* @param req
* @param res
* @return
* @throws Exception
*/
private void loginPage(HttpServletRequest req, HttpServletResponse res) throws Exception {
Map<String, String> parameterMap = new HashMap<>();
parameterMap.put("corpId", this.config.getCorpId());
parameterMap.put("openJs", WebUtils.createServletURL(req) + DINGTALK_OPEN_JS);
parameterMap.put("remoteServletURL", getRemoteServletURL(WebUtils.getOriginalURL(req)));
String codePage = TemplateUtils.renderTemplate(TPL_PATH, parameterMap);
WebUtils.printAsString(res, codePage);
}
/**
* 处理请求url加入code参数
*
* @param url
* @return
*/
private String getRemoteServletURL(String url) {
if (url.contains("?")) {
return url + "&" + CODE + "=";
}
return url + "?" + CODE + "=";
}
/**
* 获取access_token
*
* @param code
* @return
* @throws Exception
*/
private String getAccessToken(String code) throws Exception {
Map<String, String> tokenParams = new HashMap<>();
tokenParams.put("appkey", this.config.getAppKey());
tokenParams.put("appsecret", this.config.getAppSecret());
tokenParams.put("code", code);
LogKit.info("dingtalksyn-GlobalRequestFilterBridge-getAccessToken-params:{}", tokenParams);
String res = HttpKit.get(GETTOKEN, tokenParams);
LogKit.info("dingtalksyn-GlobalRequestFilterBridge-getAccessToken-res:{}", res);
if (StringKit.isEmpty(res)) {
return StringKit.EMPTY;
}
return new JSONObject(res).getString("access_token");
}
/**
* 通过凭证获得username
*
* @param code
* @param accessToken
* @return
*/
private String getUsername(String code, String accessToken) throws Exception {
Map<String, String> userInfoParams = new HashMap<>();
userInfoParams.put("access_token", accessToken);
userInfoParams.put("code", code);
String userRes = HttpKit.get(GET_USER_INFO, userInfoParams);
LogKit.info("dingtalksyn-GlobalRequestFilterBridge-getUsername-userRes:{}", userRes);
String userId = new JSONObject(userRes).getString("userid");
OapiV2UserGetResponse.UserGetResponse userGetResponse = getUserResponse(userId);
if (userGetResponse.getExtension() == null) {
return userId;
}
return new JSONObject(userGetResponse.getExtension()).getString("编号");
}
}

152
src/main/java/com/fr/plugin/mqh/dingtalksyn/utils/DingAPI.java

@ -0,0 +1,152 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: DingAPI
* Author: Louis
* Date: 2021/5/13 16:16
*/
package com.fr.plugin.mqh.dingtalksyn.utils;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.*;
import com.dingtalk.api.response.*;
import com.fanruan.api.log.LogKit;
import com.fr.plugin.mqh.dingtalksyn.config.DingSynConfig;
import com.taobao.api.ApiException;
import java.util.List;
/**
* <Function Description><br>
* <DingAPI>
*
* @author Louis
* @since 1.0.0
*/
public class DingAPI {
public static final int TOKEN_EXPIRE_TIME = 3600000;
/**
* 获取企业内部应用的access_token
*/
public static final String GETTOKEN = "https://oapi.dingtalk.com/gettoken";
/**
* 通过免登码获取用户信息
*/
public static final String GET_USER_INFO = "https://oapi.dingtalk.com/user/getuserinfo";
public static final String USER_GET = "https://oapi.dingtalk.com/topapi/v2/user/get";
public static final String DEPARTMENT_LIST = "https://oapi.dingtalk.com/topapi/v2/department/listsub";
public static final String GET_DEPT_MEMBER = "https://oapi.dingtalk.com/topapi/user/listid";
public static final String GET_DEPT = "https://oapi.dingtalk.com/topapi/v2/department/get";
public static final String ROLE_LIST = "https://oapi.dingtalk.com/topapi/role/list";
public static final String GETROLE = "https://oapi.dingtalk.com/topapi/role/getrole";
/**
* 根据deptId获取用户详情
*
* @param deptId
* @return
* @throws ApiException
*/
public static OapiV2DepartmentGetResponse.DeptGetResponse getDeptResponse(long deptId) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient(GET_DEPT);
OapiV2DepartmentGetRequest req = new OapiV2DepartmentGetRequest();
req.setDeptId(deptId);
req.setLanguage("zh_CN");
OapiV2DepartmentGetResponse rsp = client.execute(req, DingTokenUtils.getAccessToken());
return rsp.getResult();
}
/**
* 获取部门用户userid列表
*
* @param deptId
* @return
* @throws ApiException
*/
public static List<String> getDeptMember(long deptId) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient(GET_DEPT_MEMBER);
OapiUserListidRequest req = new OapiUserListidRequest();
req.setDeptId(deptId);
OapiUserListidResponse rsp = client.execute(req, DingTokenUtils.getAccessToken());
return rsp.getResult().getUseridList();
}
/**
* 获取部门列表
*
* @return
* @throws ApiException
*/
public static List<OapiV2DepartmentListsubResponse.DeptBaseResponse> getDepartmentList(long deptId) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient(DEPARTMENT_LIST);
OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
req.setDeptId(deptId);
req.setLanguage("zh_CN");
OapiV2DepartmentListsubResponse rsp = client.execute(req, DingTokenUtils.getAccessToken());
return rsp.getResult();
}
/**
* 根据roleId获取角色详情
*
* @param roleId
* @return
* @throws ApiException
*/
public static OapiRoleGetroleResponse.OpenRole getRoleResponse(long roleId) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient(GETROLE);
OapiRoleGetroleRequest req = new OapiRoleGetroleRequest();
req.setRoleId(roleId);
OapiRoleGetroleResponse rsp = client.execute(req, DingTokenUtils.getAccessToken());
return rsp.getRole();
}
/**
* 获取角色列表
*
* @return
* @throws ApiException
*/
public static List<OapiRoleListResponse.OpenRoleGroup> getOapiRoleList() throws ApiException {
DingTalkClient client = new DefaultDingTalkClient(ROLE_LIST);
OapiRoleListRequest req = new OapiRoleListRequest();
req.setSize(200L);
req.setOffset(0L);
OapiRoleListResponse rsp = client.execute(req, DingTokenUtils.getAccessToken());
return rsp.getResult().getList();
}
/**
* 根据userid获取用户详情
*
* @param userId
* @return
* @throws ApiException
*/
public static OapiV2UserGetResponse.UserGetResponse getUserResponse(String userId) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient(USER_GET);
OapiV2UserGetRequest req = new OapiV2UserGetRequest();
req.setUserid(userId);
req.setLanguage("zh_CN");
OapiV2UserGetResponse rsp = client.execute(req, DingTokenUtils.getAccessToken());
LogKit.info("dingtalksyn-DingAPI-getUserResponse-rsp:{}", rsp.getBody());
return rsp.getResult();
}
/**
* 获取企业内部应用的access_token
*
* @return
* @throws ApiException
*/
public static String getAccessToken() throws ApiException {
DingTalkClient client = new DefaultDingTalkClient(GETTOKEN);
OapiGettokenRequest request = new OapiGettokenRequest();
request.setAppkey(DingSynConfig.getInstance().getAppKey());
request.setAppsecret(DingSynConfig.getInstance().getAppSecret());
request.setHttpMethod("GET");
OapiGettokenResponse response = client.execute(request);
return response.getAccessToken();
}
}

67
src/main/java/com/fr/plugin/mqh/dingtalksyn/utils/DingTokenUtils.java

@ -0,0 +1,67 @@
/*
* Copyright (C), 2018-2021
* Project: starter
* FileName: DingTokenUtils
* Author: Louis
* Date: 2021/5/14 14:23
*/
package com.fr.plugin.mqh.dingtalksyn.utils;
import com.fanruan.api.log.LogKit;
import com.fanruan.api.util.StringKit;
import com.fr.plugin.mqh.dingtalksyn.config.DingSynConfig;
import com.fr.store.StateHubManager;
import com.fr.store.StateHubService;
import static com.fr.plugin.mqh.dingtalksyn.utils.DingAPI.TOKEN_EXPIRE_TIME;
/**
* <Function Description><br>
* <DingTokenUtils>
*
* @author Louis
* @since 1.0.0
*/
public class DingTokenUtils {
public static final String DINGTALKSYN_ACCESS_TOKEN = "dingtalksyn_access_token";
public static final String DINGTALKSYN_SUITE_TICKET = "dingtalksyn_suite_ticket";
private static final StateHubService tokenService = StateHubManager.applyForService(DINGTALKSYN_ACCESS_TOKEN);
private static final StateHubService ticketService = StateHubManager.applyForService(DINGTALKSYN_SUITE_TICKET);
public DingTokenUtils() {
}
/**
* 缓存钉钉端AccessToken
*
* @return
*/
public static String getAccessToken() {
String appKey = DingSynConfig.getInstance().getAppKey();
try {
if (StringKit.isBlank(tokenService.get(appKey))) {
tokenService.put(appKey, DingAPI.getAccessToken(), TOKEN_EXPIRE_TIME);
}
return tokenService.get(appKey);
} catch (Exception e) {
LogKit.error(e.getMessage(), e);
return StringKit.EMPTY;
}
}
/**
* 缓存钉钉端SuiteTicket
*
* @return
*/
public static void setSuiteTicket(String suiteTicket) {
String appKey = DingSynConfig.getInstance().getAppKey();
try {
ticketService.put(appKey, suiteTicket, TOKEN_EXPIRE_TIME);
} catch (Exception e) {
LogKit.error(e.getMessage(), e);
}
}
}

188
src/main/resources/com/fr/plugin/mqh/dingtalksyn/locale/lang.properties

@ -0,0 +1,188 @@
Plugin-dingtalksyn=DingTalk syn Plugin
Plugin-dingtalksyn_Group=DingTalk syn Plugin
Plugin-dingtalksyn_Config_CronCondition=Cron Condition
Plugin-dingtalksyn_Config_CronCondition_Description=Cron Condition
Plugin-dingtalksyn_Config_appKey=APPKEY
Plugin-dingtalksyn_Config_appKey_Description=APPKEY
Plugin-dingtalksyn_Config_appSecret=appSecret
Plugin-dingtalksyn_Config_appSecret_Description=appSecret
Plugin-dingtalksyn_Config_corpId=Corp Id
Plugin-dingtalksyn_Config_corpId_Description=Corp Id
Plugin-dingtalksyn_Config_rootDepId=Root Department ID
Plugin-dingtalksyn_Config_rootDepId_Description=Root Department ID
Plugin-dingtalksyn_Config_Token=Token
Plugin-dingtalksyn_Config_Token_Description=Token
Plugin-dingtalksyn_Config_AesKey=AesKey
Plugin-dingtalksyn_Config_AesKey_Description=AesKey
Plugin-dingtalksyn_Config_SsoEnable=Sso Enable
Plugin-dingtalksyn_Config_SsoEnable_Description=Sso Enable
Plugin-dingtalksyn_Error_500=error
Plugin-dingtalksyn_Error_501=DingTalkSyn Plugin License Expired!
## \u524D\u7AEFjs
Plugin-dingtalksyn_DingTalk_Manager=DingTalk Sync
Dec-Module-DingTalkSyn_Manager=Dec-Module-DingTalkSyn_Manager
Dec-DingTalkSyn_Basic=Dec-DingTalkSyn_Basic
Dec-DingTalkSyn_Recive_Data_URL=Dec-DingTalkSyn_Recive_Data_URL
Dec-DingTalkSyn_Corp_ID=Dec-DingTalkSyn_Corp_ID
Dec-DingTalkSyn_Secret=Dec-DingTalkSyn_Secret
Dec-DingTalkSyn_Member_Management=Dec-DingTalkSyn_Member_Management
Dec-DingTalkSyn_User-Same-With-FS=Dec-DingTalkSyn_User-Same-With-FS
Dec-DingTalkSyn_Mobile-Same-With-FS=Dec-DingTalkSyn_Mobile-Same-With-FS
Dec-DingTalkSyn_Manual-Matching-FS=Dec-DingTalkSyn_Manual-Matching-FS
Dec-DingTalkSyn_Custom-Matching-FS=Dec-DingTalkSyn_Custom-Matching-FS
Dec-DingTalkSyn_UserID=Dec-DingTalkSyn_UserID
Dec-DingTalkSyn_DecUserName=Dec-DingTalkSyn_DecUserName
Dec-DingTalkSyn_Name=Dec-DingTalkSyn_Name
Dec-DingTalkSyn_Department=Dec-DingTalkSyn_Department
Dec-DingTalkSyn_User_Job_Name=Dec-DingTalkSyn_User_Job_Name
Dec-Schedule-Notification_DingTalkSyn=Dec-Schedule-Notification_DingTalkSyn
Dec-Schedule-Notification_DingTalkSyn_CorpID=Dec-Schedule-Notification_DingTalkSyn_CorpID
Dec-Schedule-Notification_DingTalkSyn_Users=Dec-Schedule-Notification_DingTalkSyn_Users
Dec-Schedule-Notification_DingTalkSyn_DepID=Dec-Schedule-Notification_DingTalkSyn_DepID
Dec-Schedule-Notification_DingTalkSyn_Content=Dec-Schedule-Notification_DingTalkSyn_Content
Dec-Schedule-Notification_DingTalkSyn_WithLink=Dec-Schedule-Notification_DingTalkSyn_WithLink
Dec-Schedule_Mobile-Push-DingTalkSynId-Not-Null=Dec-Schedule_Mobile-Push-DingTalkSynId-Not-Null
Dec-DingTalkSyn_UrlHint=Dec-DingTalkSyn_UrlHint
Dec-DingTalkSyn_Token_Path=Dec-DingTalkSyn_Token_Path
Dec-DingTalkSyn_Refresh_User=Dec-DingTalkSyn_Refresh_User
Dec-DingTalkSyn_Mobile=Dec-DingTalkSyn_Mobile
Dec-DingTalkSyn_Matching_Way=Dec-DingTalkSyn_Matching_Way
Dec-DingTalkSyn_Hint=Dec-DingTalkSyn_Hint
Dec-DingTalkSyn_Loading=Dec-DingTalkSyn_Loading
Dec-DingTalkSyn_Mobile_Not_Supported=Dec-DingTalkSyn_Mobile_Not_Supported
Dec-DingTalkSyn_Mobile-Push-DingTalkSyn-Terminal=DingTalkSyn
Dec-DingTalkSyn_Addressee_Chat_Group=Dec-DingTalkSyn_Addressee_Chat_Group
Dec-DingTalkSyn_Addressee_Chat_Group_Disable_Tip=Dec-DingTalkSyn_Addressee_Chat_Group_Disable_Tip
Dec-DingTalkSyn_Mobile-Push-DingTalkSyn-AgentId=AgentID
Dec-DingTalkSyn_Expired_Error=Dec-DingTalkSyn_Expired_Error
Dec-DingTalkSyn_Expired_Solution=Dec-DingTalkSyn_Expired_Solution
Dec-DingTalkSyn_Agent-Management=Dec-DingTalkSyn_Agent-Management
Dec-DingTalkSyn_Member-Management=Dec-DingTalkSyn_Member-Management
Dec-DingTalkSyn_Agent-Config=Dec-DingTalkSyn_Agent-Config
Dec-DingTalkSyn_Agent-Name=Dec-DingTalkSyn_Agent-Name
Dec-DingTalkSyn_Agent-Id=Dec-DingTalkSyn_Agent-Id
Dec-DingTalkSyn_Organizational-Structure=Dec-DingTalkSyn_Organizational-Structure
Dec-DingTalkSyn_Tag=Dec-DingTalkSyn_Tag
Dec-DingTalkSyn_Server=Dec-DingTalkSyn_Server
Dec-DingTalkSyn_Save=Dec-DingTalkSyn_Save
Dec-DingTalkSyn_Start_With_Http=Dec-DingTalkSyn_Start_With_Http
Dec-DingTalkSyn_Server_Url=Dec-DingTalkSyn_Server_Url
Dec-DingTalkSyn_Server_Tip=Dec-DingTalkSyn_Server_Tip
Dec-DingTalkSyn_Enterprise-DingDing=Dec-DingTalkSyn_Enterprise-DingDing
Dec-DingTalkSyn_New-Agent=Dec-DingTalkSyn_New-Agent
Dec-DingTalkSyn_Non-Adapted-Agent=Dec-DingTalkSyn_Non-Adapted-Agent
Dec-DingTalkSyn_Modify-Agent=Dec-DingTalkSyn_Modify-Agent
Dec-DingTalkSyn_DeleteAgent-Confirm-Popup=Dec-DingTalkSyn_DeleteAgent-Confirm-Popup
Dec-DingTalkSyn_Confirm=Dec-DingTalkSyn_Confirm
Dec-DingTalkSyn_Cancel=Dec-DingTalkSyn_Cancel
Dec-DingTalkSyn_Save-Agent-Fail=Dec-DingTalkSyn_Save-Agent-Fail
Dec-DingTalkSyn_Unknown-Agent=Dec-DingTalkSyn_Unknown-Agent
Dec-DingTalkSyn_Agent-Name-Exist=Dec-DingTalkSyn_Agent-Name-Exist
Dec-DingTalkSyn_Match-Way=Dec-DingTalkSyn_Match-Way
Dec-DingTalkSyn_Match-Setting=Dec-DingTalkSyn_Match-Setting
Dec-DingTalkSyn_DataSet=Dec-DingTalkSyn_DataSet
Dec-DingTalkSyn_Address-Book=Dec-DingTalkSyn_Address-Book
Dec-DingTalkSyn_Member-Update=Dec-DingTalkSyn_Member-Update
Dec-DingTalkSyn_Set-Update=Dec-DingTalkSyn_Set-Update
Dec-DingTalkSyn_Not-Null=Dec-DingTalkSyn_Not-Null
Dec-DingTalkSyn_Start-Update=Dec-DingTalkSyn_Start-Update
Dec-DingTalkSyn_Per=Dec-DingTalkSyn_Per
Dec-DingTalkSyn_Day=Dec-DingTalkSyn_Day
Dec-DingTalkSyn_Week=Dec-DingTalkSyn_Week
Dec-DingTalkSyn_Monday=Dec-DingTalkSyn_Monday
Dec-DingTalkSyn_Tuesday=Dec-DingTalkSyn_Tuesday
Dec-DingTalkSyn_Wednesday=Dec-DingTalkSyn_Wednesday
Dec-DingTalkSyn_Thursday=Dec-DingTalkSyn_Thursday
Dec-DingTalkSyn_Friday=Dec-DingTalkSyn_Friday
Dec-DingTalkSyn_Saturday=Dec-DingTalkSyn_Saturday
Dec-DingTalkSyn_Sunday=Dec-DingTalkSyn_Sunday
Dec-DingTalkSyn_Hour=Dec-DingTalkSyn_Hour
Dec-DingTalkSyn_Minute=Dec-DingTalkSyn_Minute
Dec-DingTalkSyn_Update-Once=Dec-DingTalkSyn_Update-Once
Dec-DingTalkSyn_Illegal=Dec-DingTalkSyn_Illegal
Dec-DingTalkSyn_Proxy=Dec-DingTalkSyn_Proxy
Dec-DingTalkSyn_Proxy_Address=Dec-DingTalkSyn_Proxy_Address
Dec-DingTalkSyn_Proxy_Address_Tip=Dec-DingTalkSyn_Proxy_Address_Tip
Dec-DingTalkSyn_Test-Proxy-Address=Dec-DingTalkSyn_Test-Proxy-Address
Dec-DingTalkSyn_Start-With-Http=Dec-DingTalkSyn_Start-With-Http
Dec-DingTalkSyn_Test-Connection=Dec-DingTalkSyn_Test-Connection
Dec-DingTalkSyn_Connection-Success=Dec-DingTalkSyn_Connection-Success
Dec-DingTalkSyn_Connection-Fail=Dec-DingTalkSyn_Connection-Fail
Dec-DingTalkSyn_Unknown-Agent-Id=Dec-DingTalkSyn_Unknown-Agent-Id
Dec-DingTalkSyn_Delete-Agent-Fail=Dec-DingTalkSyn_Delete-Agent-Fail
Dec-DingTalkSyn_Agent-Id-Exist=Dec-DingTalkSyn_Agent-Id-Exist
Dec-DingTalkSyn_Save-ReportServer-Url-Fail=Dec-DingTalkSyn_Save-ReportServer-Url-Fail
Dec-DingTalkSyn_Save-Timing-Task-Fail=Dec-DingTalkSyn_Save-Timing-Task-Fail
Dec-DingTalkSyn_Error-AppKey-And-AppSecret=Dec-DingTalkSyn_Error-AppKey-And-AppSecret
Dec-DingTalkSyn_Error-AppKey-And-AgentId=Dec-DingTalkSyn_Error-AppKey-And-AgentId
Dec-DingTalkSyn_Duplicate-Agent-Name=Dec-DingTalkSyn_Duplicate-Agent-Name
Dec-DingTalkSyn_Save-Match-Method-Fail=Dec-DingTalkSyn_Save-Match-Method-Fail
Dec-DingTalkSyn_Duplicate-Agent-Id=Dec-DingTalkSyn_Duplicate-Agent-Id
Dec-DingTalkSyn_Save-Proxy-Server-Fail=Dec-DingTalkSyn_Save-Proxy-Server-Fail
Dec-DingTalkSyn_Connect-Proxy-Server-Fail=Dec-DingTalkSyn_Connect-Proxy-Server-Fail
Dec-DingTalkSyn_NetWork-Anomaly=Dec-DingTalkSyn_NetWork-Anomaly
Dec-DingTalkSyn_Create-DingTalkSyn-Url=Dec-DingTalkSyn_Create-DingTalkSyn-Url
Dec-DingTalkSyn_Platform-Page=Dec-DingTalkSyn_Platform_Page
Dec-DingTalkSyn_Platform-Report=Dec-DingTalkSyn_Platform-Report
Dec-DingTalkSyn_Platform=Dec-DingTalkSyn_Platform
Dec-DingTalkSyn_Parameter_Setting=Dec-DingTalkSyn_Parameter_Setting
Dec-DingTalkSyn_Create-Url=Dec-DingTalkSyn_Create-Url
Dec-DingTalkSyn_DingTalkSyn_Url=Dec-DingTalkSyn_DingTalkSyn_Url
Dec-DingTalkSyn_Copy-Url=Dec-DingTalkSyn_Copy-Url
Dec-DingTalkSyn_Copy-Success=Dec-DingTalkSyn_Copy-Success
Dec-DingTalkSyn_Input-Hint=Dec-DingTalkSyn_Input-Hint
Dec-DingTalkSyn_Save-User-Relation-Fail=Dec-DingTalkSyn_Save-User-Relation-Fail
BI-Basic_Search=BI-Basic_Search
Dec-DingTalkSyn_Match-Way-Not-Null=Dec-DingTalkSyn_Match-Way-Not-Null
Dec-DingTalkSyn_Not-Select=Dec-DingTalkSyn_Not-Select
Dec-DingTalkSyn_Tip-Get-ReportServer-Url-Fail=Dec-DingTalkSyn_Tip-Get-ReportServer-Url-Fail
Dec-DingTalkSyn_Create-Agent-Tip=Dec-DingTalkSyn_Create-Agent-Tip
Dec-DingTalkSyn_IP-Config-Not-Available=Dec-DingTalkSyn_IP-Config-Not-Available
Dec-DingTalkSyn_NetWork-Invalid=Dec-DingTalkSyn_NetWork-Invalid
Dec-DingTalkSyn_Not_Trusted_Domain_Error=Dec-DingTalkSyn_Not_Trusted_Domain_Error
Dec-DingTalkSyn_Not_Trusted_Domain_Exception=Dec-DingTalkSyn_Not_Trusted_Domain_Exception
Dec-DingTalkSyn_Debugger-Set-Level=Dec-DingTalkSyn_Debugger-Set-Level
Dec-DingTalkSyn_Debugger-Level=Dec-DingTalkSyn_Debugger-Level
Dec-DingTalkSyn_Debugger-Parameter-List=Dec-DingTalkSyn_Debugger-Parameter-List
Dec-DingTalkSyn_Debugger-Content=Dec-DingTalkSyn_Debugger-Content
Dec-DingTalkSyn_Debugger-Type-Get-Access-Token=Dec-DingTalkSyn_Debugger-Type-Get-Access-Token
Dec-DingTalkSyn_Debugger-Type-Check-Ip=Dec-DingTalkSyn_Debugger-Type-Check-Ip
Dec-DingTalkSyn_Debugger-Start-Check=Dec-DingTalkSyn_Debugger-Start-Check
Dec-DingTalkSyn_Debugger-Show-Result=Dec-DingTalkSyn_Debugger-Show-Result
Dec-DingTalkSyn_Debugger-Type-Check-Request-Time=Dec-DingTalkSyn_Debugger-Type-Check-Request-Time
Dec-DingTalkSyn_Debugger-Type-Check-Request-Time-Result=Dec-DingTalkSyn_Debugger-Type-Check-Request-Time-Result
Dec-DingTalkSyn_Debugger-Tip-Curl-Invalid=Dec-DingTalkSyn_Debugger-Tip-Curl-Invalid
Dec-DingTalkSyn_Debugger-DownLoad_Log=Dec-DingTalkSyn_Debugger-DownLoad_Log
Dec-DingTalkSyn_Click-To-Download=Dec-DingTalkSyn_Click-To-Download
Dec-DingTalkSyn_Download-Fail=Dec-DingTalkSyn_Download-Fail
Dec-DingTalkSyn_Not_Null=Dec-DingTalkSyn_Not_Null
Dec-DingTalkSyn_ErrorDetail=Dec-DingTalkSyn_ErrorDetail
Dec-DingTalkSyn_Debugger-Check-Ip-Result=Dec-DingTalkSyn_Debugger-Check-Ip-Result
Dec-DingTalkSyn_Debugger-Get-Token=Dec-DingTalkSyn_Debugger-Get-Token
Dec-DingTalkSyn_Agent_Deleted_Tip=Dec-DingTalkSyn_Agent_Deleted_Tip
Dec-DingTalkSyn_Parse_Parameters=Dec-DingTalkSyn_Parse_Parameters
Dec-DingTalkSyn_Parse_Parameters_Tip=Dec-DingTalkSyn_Parse_Parameters_Tip
Dec-DingTalkSyn_Enterprise_Agent=Dec-DingTalkSyn_Enterprise_Agent
Dec-DingTalkSyn_Chatgroup_Name=Dec-DingTalkSyn_Chatgroup_Name
Dec-DingTalkSyn_Chat_Group=Dec-DingTalkSyn_Chat_Group
Dec-DingTalkSyn_New_Chat_Group=Dec-DingTalkSyn_New_Chat_Group
Dec-DingTalkSyn_Delete_ChatGroup_Confirm=Dec-DingTalkSyn_Delete_ChatGroup_Confirm
Dec-DingTalkSyn_Chat_Group_Member_Tip=Dec-DingTalkSyn_Chat_Group_Member_Tip
Dec-DingTalkSyn_Chat_Group_Leader=Dec-DingTalkSyn_Chat_Group_Leader
Dec-DingTalkSyn_Chat_Group_Member=Dec-DingTalkSyn_Chat_Group_Member
Dec-DingTalkSyn_New_Chat_Group_Tip1=Dec-DingTalkSyn_New_Chat_Group_Tip1
Dec-DingTalkSyn_New_Chat_Group_Tip2=Dec-DingTalkSyn_New_Chat_Group_Tip2
Dec-DingTalkSyn_New_Chat_Group_Message=Dec-DingTalkSyn_New_Chat_Group_Message
Dec-DingTalkSyn_Common_Error_Tip=Dec-DingTalkSyn_Common_Error_Tip
Dec-DingTalkSyn_Chat_Group_Name_Length_Tip=Dec-DingTalkSyn_Chat_Group_Name_Length_Tip
Dec-DingTalkSyn_Create-Chat-Group-Fail=Dec-DingTalkSyn_Create-Chat-Group-Fail
Dec-DingTalkSyn_Output_User_Empty=Dec-DingTalkSyn_Output_User_Empty
Dec-DingTalkSyn_Message_Agent=Dec-DingTalkSyn_Message_Agent
Dec-DingTalkSyn_Message_Group=Dec-DingTalkSyn_Message_Group
Dec-DingTalkSyn_DingTalkSyn=Dec-DingTalkSyn_DingTalkSyn
Dec-DingTalkSyn_Output_User_Fail_Partly_Header=Dec-DingTalkSyn_Output_User_Fail_Partly_Header
Dec-DingTalkSyn_Output_User_Fail_Partly_Tip=Dec-DingTalkSyn_Output_User_Fail_Partly_Tip
Dec-DingTalkSyn_Output_Group_Fail_Partly_Header=Dec-DingTalkSyn_Output_Group_Fail_Partly_Header
Dec-DingTalkSyn_Output_Group_Fail_Partly_Tip=Dec-DingTalkSyn_Output_Group_Fail_Partly_Tip
Dec-DingTalkSyn_User_Match_Dec_User_Fail=Dec-DingTalkSyn_User_Match_Dec_User_Fail

188
src/main/resources/com/fr/plugin/mqh/dingtalksyn/locale/lang_zh_CN.properties

@ -0,0 +1,188 @@
Plugin-dingtalksyn=\u9489\u9489\u6570\u636E\u540C\u6B65\u63D2\u4EF6
Plugin-dingtalksyn_Group=\u9489\u9489\u6570\u636E\u540C\u6B65\u63D2\u4EF6
Plugin-dingtalksyn_Config_CronCondition=Cron\u8868\u8FBE\u5F0F
Plugin-dingtalksyn_Config_CronCondition_Description=Cron\u8868\u8FBE\u5F0F
Plugin-dingtalksyn_Config_appKey=\u5E94\u7528\u7CFB\u7EDF\u7684APPKEY
Plugin-dingtalksyn_Config_appKey_Description=\u5E94\u7528\u7CFB\u7EDF\u7684APPKEY
Plugin-dingtalksyn_Config_appSecret=\u5E94\u7528\u7CFB\u7EDF\u7684appSecret
Plugin-dingtalksyn_Config_appSecret_Description=\u5E94\u7528\u7CFB\u7EDF\u7684appSecret
Plugin-dingtalksyn_Config_corpId=Corp Id
Plugin-dingtalksyn_Config_corpId_Description=Corp Id
Plugin-dingtalksyn_Config_rootDepId=\u6839\u90E8\u95E8ID
Plugin-dingtalksyn_Config_rootDepId_Description=\u6839\u90E8\u95E8ID
Plugin-dingtalksyn_Config_Token=\u7B7E\u540DToken
Plugin-dingtalksyn_Config_Token_Description=\u7B7E\u540DToken
Plugin-dingtalksyn_Config_AesKey=\u52A0\u5BC6aes_key
Plugin-dingtalksyn_Config_AesKey_Description=\u52A0\u5BC6aes_key
Plugin-dingtalksyn_Config_SsoEnable=\u5355\u70B9\u529F\u80FD\u5F00\u5173
Plugin-dingtalksyn_Config_SsoEnable_Description=\u5355\u70B9\u529F\u80FD\u5F00\u5173
Plugin-dingtalksyn_Error_500=error
Plugin-dingtalksyn_Error_501=DingTalkSyn\u63D2\u4EF6\u8BB8\u53EF\u5931\u6548!
## \u524D\u7AEFjs
Plugin-dingtalksyn_DingTalk_Manager=\u9489\u9489\u540C\u6B65
Dec-Module-DingTalkSyn_Manager=\u9489\u9489\u7BA1\u7406
Dec-DingTalkSyn_Basic=\u57FA\u672C\u4FE1\u606F
Dec-Schedule-Notification_DingTalkSyn=\u63A8\u9001\u9489\u9489\u6D88\u606F
Dec-Schedule-Notification_DingTalkSyn_CorpID=\u5E94\u7528AgentID\uFF1A
Dec-Schedule-Notification_DingTalkSyn_Users=\u9489\u9489\u7528\u6237\uFF1A
Dec-Schedule-Notification_DingTalkSyn_DepID=\u90E8\u95E8ID\uFF1A
Dec-Schedule-Notification_DingTalkSyn_Content=\u6D88\u606F\u5185\u5BB9\uFF1A
Dec-Schedule-Notification_DingTalkSyn_WithLink=\u5B9A\u65F6\u7ED3\u679C\u8BBF\u95EE\u94FE\u63A5
Dec-Schedule_Mobile-Push-DingTalkSynId-Not-Null=\u8BF7\u8BBE\u7F6E\u63A8\u9001\u7684\u9489\u9489\u5E94\u7528
Dec-DingTalkSyn_Recive_Data_URL=\u63A5\u6536\u6570\u636EURL
Dec-DingTalkSyn_Corp_ID=\u9489\u9489\u4F01\u4E1A\u53F7ID
Dec-DingTalkSyn_Secret=\u7BA1\u7406\u7EC4\u51ED\u8BC1\u5BC6\u94A5
Dec-DingTalkSyn_Member_Management=\u9489\u9489\u6210\u5458\u7BA1\u7406
Dec-DingTalkSyn_User-Same-With-FS=\u9489\u9489\u5DE5\u53F7\u5339\u914D
Dec-DingTalkSyn_Mobile-Same-With-FS=\u624B\u673A\u53F7\u5339\u914D
Dec-DingTalkSyn_Manual-Matching-FS=\u624B\u52A8\u5339\u914D
Dec-DingTalkSyn_Custom-Matching-FS=\u81EA\u5B9A\u4E49\u5339\u914D
Dec-DingTalkSyn_UserID=\u9489\u9489\u6210\u5458ID
Dec-DingTalkSyn_DecUserName=\u7528\u6237\u540D
Dec-DingTalkSyn_Name=\u59D3\u540D
Dec-DingTalkSyn_Department=\u9489\u9489\u90E8\u95E8
Dec-DingTalkSyn_UrlHint=\u670D\u52A1\u5668\u4FDD\u5B58\u7684Url\uFF1A
Dec-DingTalkSyn_User_Job_Name=\u9489\u9489\u5DE5\u53F7
Dec-DingTalkSyn_Token_Path=\u8BBE\u7F6EToken\u83B7\u53D6\u8DEF\u5F84
Dec-DingTalkSyn_Refresh_User=\u66F4\u65B0\u901A\u8BAF\u5F55
Dec-DingTalkSyn_Mobile=\u9489\u9489\u6210\u5458\u624B\u673A\u53F7
Dec-DingTalkSyn_Matching_Way=\u7528\u6237\u5339\u914D\u65B9\u5F0F
Dec-DingTalkSyn_Hint=\u63D0\u793A
Dec-DingTalkSyn_Loading=\u6B63\u5728\u52A0\u8F7D\u7528\u6237...
Dec-DingTalkSyn_Mobile_Not_Supported=\u5F53\u524DHTML5\u62A5\u8868\u4E0D\u652F\u6301\u6839\u636E\u624B\u673A\u53F7\u5339\u914D\uFF0C\u8BF7\u5347\u7EA7HTML5\u63D2\u4EF6
Dec-DingTalkSyn_Mobile-Push-DingTalkSyn-Terminal=\u9489\u9489\u901A\u77E5
Dec-DingTalkSyn_Addressee_Chat_Group=\u9489\u9489\u7FA4
Dec-DingTalkSyn_Addressee_Chat_Group_Disable_Tip=\u5982\u679C\u6839\u636E\u9ED8\u8BA4\u7528\u6237\u7EC4\u5185\u7684\u7528\u6237\u5355\u72EC\u751F\u6210\u7ED3\u679C\uFF0C\u5219\u65E0\u6CD5\u901A\u77E5\u5230\u9489\u9489\u7FA4
Dec-DingTalkSyn_Mobile-Push-DingTalkSyn-AgentId=\u5E94\u7528ID
Dec-DingTalkSyn_Expired_Error=\u9519\u8BEF\u4EE3\u7801:11100016 \u60A8\u4F7F\u7528\u4E86\u672A\u6CE8\u518C\u7684\u529F\u80FD\u2014\u2014\u9489\u9489\u96C6\u6210
Dec-DingTalkSyn_Expired_Solution=\u9489\u9489\u529F\u80FD\u672A\u6CE8\u518C\uFF0C\u5982\u9700\u4F7F\u7528\u8BF7\u8054\u7CFB\u9500\u552E
Dec-DingTalkSyn_Agent-Management=\u5E94\u7528\u7BA1\u7406
Dec-DingTalkSyn_Member-Management=\u6210\u5458\u7BA1\u7406
Dec-DingTalkSyn_Agent-Config=\u5E94\u7528\u5FEB\u6377\u914D\u7F6E
Dec-DingTalkSyn_Agent-Name=\u9489\u9489\u5E94\u7528\u540D\u79F0
Dec-DingTalkSyn_Agent-Id=\u9489\u9489\u5E94\u7528ID
Dec-DingTalkSyn_Organizational-Structure=\u7EC4\u7EC7\u67B6\u6784
Dec-DingTalkSyn_Tag=\u6807\u7B7E
Dec-DingTalkSyn_Server=\u670D\u52A1\u5668
Dec-DingTalkSyn_Save=\u4FDD\u5B58
Dec-DingTalkSyn_Start_With_Http=\u670D\u52A1\u5668\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934
Dec-DingTalkSyn_Server_Url=\u670D\u52A1\u5668\u5730\u5740
Dec-DingTalkSyn_Server_Tip=1\u3001\u8BE5\u5730\u5740\u5C06\u7528\u4E8E\u5FEB\u6377\u914D\u7F6E\u4E2D\u751F\u6210\u5E73\u53F0\u5355\u70B9\u94FE\u63A5\u3001\u6A21\u677F\u5355\u70B9\u94FE\u63A5\uFF0C\u4EE5\u53CA\u63A8\u9001\u7684\u7ED3\u679C\u94FE\u63A5\uFF1B\n2\u3001\u8BE5\u5730\u5740\u9700\u8981\u5916\u7F51\u53EF\u8BBF\u95EE\uFF0C\u5730\u5740\u683C\u5F0F\u4E3Ahttp://\u57DF\u540D:\u7AEF\u53E3/decision\u6216https://\u57DF\u540D:\u7AEF\u53E3/decision\uFF0C\u914D\u7F6E\u540E\u8BF7\u4FDD\u5B58
Dec-DingTalkSyn_Enterprise-DingDing=\u4F01\u4E1A\u9489\u9489
Dec-DingTalkSyn_New-Agent=\u65B0\u5EFA\u9489\u9489\u5E94\u7528
Dec-DingTalkSyn_Non-Adapted-Agent=\u63D0\u793A\uFF1A\u8BF7\u786E\u8BA4\u5E94\u7528id\u662F\u5426\u6B63\u786E
Dec-DingTalkSyn_Modify-Agent=\u4FEE\u6539\u9489\u9489\u5E94\u7528
Dec-DingTalkSyn_DeleteAgent-Confirm-Popup=\u786E\u5B9A\u5220\u9664\u6B64\u4F01\u4E1A\u9489\u9489\u5E94\u7528
Dec-DingTalkSyn_Confirm=\u786E\u5B9A
Dec-DingTalkSyn_Cancel=\u53D6\u6D88
Dec-DingTalkSyn_Save-Agent-Fail=\u5B58\u50A8\u5E94\u7528\u4FE1\u606F\u5931\u8D25
Dec-DingTalkSyn_Unknown-Agent=\u7F51\u7EDC\u5F02\u5E38\u6216\u8005\u8BF7\u786E\u8BA4\u5F53\u524D\u4F7F\u7528\u7684CorpId\u548CSecret\u662F\u5426\u6B63\u786E
Dec-DingTalkSyn_Agent-Name-Exist=\u5E94\u7528\u540D\u79F0\u5DF2\u5B58\u5728
Dec-DingTalkSyn_Match-Way=\u5339\u914D\u65B9\u5F0F
Dec-DingTalkSyn_Match-Setting=\u5339\u914D\u8BBE\u7F6E
Dec-DingTalkSyn_DataSet=\u6570\u636E\u96C6
Dec-DingTalkSyn_Address-Book=\u9489\u9489\u901A\u8BAF\u5F55
Dec-DingTalkSyn_Member-Update=\u7ACB\u5373\u66F4\u65B0
Dec-DingTalkSyn_Set-Update=\u8BBE\u7F6E\u81EA\u52A8\u66F4\u65B0
Dec-DingTalkSyn_Not-Null=\u4E0D\u5141\u8BB8\u4E3A\u7A7A
Dec-DingTalkSyn_Start-Update=\u542F\u7528\u81EA\u52A8\u66F4\u65B0
Dec-DingTalkSyn_Per=\u6BCF
Dec-DingTalkSyn_Day=\u5929
Dec-DingTalkSyn_Week=\u5468
Dec-DingTalkSyn_Monday=\u5468\u4E00
Dec-DingTalkSyn_Tuesday=\u5468\u4E8C
Dec-DingTalkSyn_Wednesday=\u5468\u4E09
Dec-DingTalkSyn_Thursday=\u5468\u56DB
Dec-DingTalkSyn_Friday=\u5468\u4E94
Dec-DingTalkSyn_Saturday=\u5468\u516D
Dec-DingTalkSyn_Sunday=\u5468\u65E5
Dec-DingTalkSyn_Hour=\u65F6
Dec-DingTalkSyn_Minute=\u5206
Dec-DingTalkSyn_Update-Once=\u5B9A\u65F6\u540C\u6B65\u4E00\u6B21
Dec-DingTalkSyn_Illegal=\u4E0D\u5408\u6CD5
Dec-DingTalkSyn_Proxy=\u9489\u9489\u4EE3\u7406\u8DF3\u8F6C
Dec-DingTalkSyn_Proxy_Address=\u4EE3\u7406\u670D\u52A1\u5668\u5730\u5740
Dec-DingTalkSyn_Proxy_Address_Tip=1\u3001\u8BE5\u5730\u5740\u586B\u5199\u5E06\u8F6F\u6240\u5728\u5E94\u7528\u670D\u52A1\u5668\u8BBF\u95EE\u4EE3\u7406\u670D\u52A1\u5668\u7684\u5730\u5740\uFF0C\u5373\u6B63\u5411\u4EE3\u7406\u5730\u5740\uFF0C\u4ECE\u800C\u4F7F\u5E06\u8F6F\u5E94\u7528\u670D\u52A1\u5668\u80FD\u591F\u901A\u8FC7\u4EE3\u7406\u670D\u52A1\u5668\u8BBF\u95EE\u5230\u5916\u7F51\u9489\u9489\u670D\u52A1\u5668\uFF1B\n2\u3001\u5730\u5740\u683C\u5F0F\u4E3Ahttp://\u57DF\u540D:\u7AEF\u53E3
Dec-DingTalkSyn_Test-Proxy-Address=\u6D4B\u8BD5\u8FDE\u63A5
Dec-DingTalkSyn_Start-With-Http=\u670D\u52A1\u5668\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934
Dec-DingTalkSyn_Test-Connection=\u6D4B\u8BD5\u8FDE\u63A5\u4E2D...
Dec-DingTalkSyn_Connection-Success=\u8FDE\u63A5\u6210\u529F
Dec-DingTalkSyn_Connection-Fail=\u8FDE\u63A5\u5931\u8D25
Dec-DingTalkSyn_Unknown-Agent-Id=\u5E94\u7528ID\u4E0D\u6B63\u786E
Dec-DingTalkSyn_Delete-Agent-Fail=\u5220\u9664\u5E94\u7528\u5931\u8D25
Dec-DingTalkSyn_Agent-Id-Exist=\u5E94\u7528ID\u5DF2\u5B58\u5728
Dec-DingTalkSyn_Save-ReportServer-Url-Fail=\u4FDD\u5B58\u670D\u52A1\u5668\u5730\u5740\u5931\u8D25
Dec-DingTalkSyn_Save-Timing-Task-Fail=\u4FDD\u5B58\u5B9A\u65F6\u4EFB\u52A1\u5931\u8D25
Dec-DingTalkSyn_Error-AppKey-And-AppSecret=\u8BF7\u786E\u8BA4\u5F53\u524D\u4F7F\u7528\u7684AppKey\u548CAppSecret\u662F\u5426\u6B63\u786E
Dec-DingTalkSyn_Error-AppKey-And-AgentId=\u8BF7\u786E\u8BA4\u5F53\u524D\u5E94\u7528ID\u548CAppKey\u662F\u5426\u5BF9\u5E94
Dec-DingTalkSyn_Duplicate-Agent-Name=\u5E94\u7528\u540D\u79F0\u5DF2\u5B58\u5728
Dec-DingTalkSyn_Save-Match-Method-Fail=\u5B58\u50A8\u6210\u5458\u7BA1\u7406\u914D\u7F6E\u4FE1\u606F\u5931\u8D25
Dec-DingTalkSyn_Duplicate-Agent-Id=\u5E94\u7528ID\u5DF2\u5B58\u5728
Dec-DingTalkSyn_Save-Proxy-Server-Fail=\u4FDD\u5B58\u4EE3\u7406\u670D\u52A1\u5668\u5931\u8D25
Dec-DingTalkSyn_Connect-Proxy-Server-Fail=\u9489\u9489\u4EE3\u7406\u670D\u52A1\u5668\u6D4B\u8BD5\u8FDE\u63A5\u5931\u8D25
Dec-DingTalkSyn_NetWork-Anomaly=\u7F51\u7EDC\u5F02\u5E38\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u914D\u7F6E
Dec-DingTalkSyn_Create-DingTalkSyn-Url=\u751F\u6210\u9489\u9489\u94FE\u63A5
Dec-DingTalkSyn_Platform-Page=\u94FE\u63A5\u9875\u9762
Dec-DingTalkSyn_Platform-Report=\u5355\u4E2A\u6A21\u677F
Dec-DingTalkSyn_Platform=\u51B3\u7B56\u5E73\u53F0
Dec-DingTalkSyn_Parameter_Setting=\u53C2\u6570\u8BBE\u7F6E
Dec-DingTalkSyn_Create-Url=\u751F\u6210\u94FE\u63A5
Dec-DingTalkSyn_DingTalkSyn_Url=\u9489\u9489\u94FE\u63A5
Dec-DingTalkSyn_Copy-Url=\u590D\u5236
Dec-DingTalkSyn_Copy-Success=\u590D\u5236\u6210\u529F
Dec-DingTalkSyn_Input-Hint=\u8BF7\u8F93\u5165
Dec-DingTalkSyn_Save-User-Relation-Fail=\u624B\u52A8\u5339\u914D\u5931\u8D25
BI-Basic_Search=\u641C\u7D22
Dec-DingTalkSyn_Match-Way-Not-Null=\u5339\u914D\u8BBE\u7F6E\u4E0D\u80FD\u4E3A\u7A7A
Dec-DingTalkSyn_Not-Select=\u4E0D\u9009
Dec-DingTalkSyn_Tip-Get-ReportServer-Url-Fail=\u8BF7\u914D\u7F6E\u670D\u52A1\u5668\u5730\u5740
Dec-DingTalkSyn_Create-Agent-Tip=\u82E5\u65E0AppKey\uFF0C\u8BF7\u5728Appkey\u548CAppSecret\u4E2D\u5206\u522B\u586B\u5199CorpId\u548CCorpSecret
Dec-DingTalkSyn_IP-Config-Not-Available=\u8BBF\u95EEIP\u4E0D\u5728\u767D\u540D\u5355\u4E4B\u4E2D
Dec-DingTalkSyn_NetWork-Invalid=\u7F51\u7EDC\u5F02\u5E38
Dec-DingTalkSyn_Not_Trusted_Domain_Error=\u9519\u8BEF\u4EE3\u7801\uFF1A11205040\uFF0CredirectUrl\u57DF\u540D\u4E0E\u540E\u53F0\u914D\u7F6E\u4E0D\u4E00\u81F4
Dec-DingTalkSyn_Not_Trusted_Domain_Exception=\u68C0\u67E5\u57DF\u540D\u4E0E\u670D\u52A1\u5668\u5730\u5740\u662F\u5426\u4E00\u81F4
Dec-DingTalkSyn_Debugger-Set-Level=\u8BBE\u7F6E\u65E5\u5FD7\u7EA7\u522B
Dec-DingTalkSyn_Debugger-Level=\u65E5\u5FD7\u7EA7\u522B
Dec-DingTalkSyn_Debugger-Parameter-List=\u53C2\u6570\u5217\u8868
Dec-DingTalkSyn_Debugger-Content=\u8C03\u8BD5\u5185\u5BB9
Dec-DingTalkSyn_Debugger-Type-Get-Access-Token=\u83B7\u53D6access_token
Dec-DingTalkSyn_Debugger-Type-Check-Ip=\u68C0\u67E5ip\u767D\u540D\u5355
Dec-DingTalkSyn_Debugger-Start-Check=\u5F00\u59CB\u68C0\u6D4B
Dec-DingTalkSyn_Debugger-Show-Result=\u68C0\u6D4B\u7ED3\u679C
Dec-DingTalkSyn_Debugger-Type-Check-Request-Time=\u68C0\u6D4B\u8BF7\u6C42\u8017\u65F6
Dec-DingTalkSyn_Debugger-Type-Check-Request-Time-Result=\u68C0\u6D4B\u7ED3\u679C
Dec-DingTalkSyn_Debugger-Tip-Curl-Invalid=\u63D0\u793A\uFF1A\u670D\u52A1\u5668\u7CFB\u7EDF\u82E5\u4E3Awindows\u5219\u9700\u8981\u5B89\u88C5curl\u5DE5\u5177\u624D\u80FD\u652F\u6301\u68C0\u6D4B
Dec-DingTalkSyn_Debugger-DownLoad_Log=\u4E0B\u8F7D\u65E5\u5FD7
Dec-DingTalkSyn_Click-To-Download=\u70B9\u51FB\u4E0B\u8F7D
Dec-DingTalkSyn_Download-Fail=\u4E0B\u8F7D\u5931\u8D25
Dec-DingTalkSyn_Not_Null=\u4E0D\u53EF\u4E3A\u7A7A
Dec-DingTalkSyn_ErrorDetail=\u9519\u8BEF\u4FE1\u606F
Dec-DingTalkSyn_Debugger-Check-Ip-Result=\u68C0\u67E5\u7ED3\u679C
Dec-DingTalkSyn_Debugger-Get-Token=access_token
Dec-DingTalkSyn_Agent_Deleted_Tip=\u65E0\u6CD5\u83B7\u53D6\u8BE5\u9489\u9489\u5E94\u7528\uFF0C\u8BF7\u68C0\u67E5\u914D\u7F6E\u9879\u662F\u5426\u6709\u8BEF
Dec-DingTalkSyn_Parse_Parameters=\u89E3\u6790\u53C2\u6570\u503C
Dec-DingTalkSyn_Parse_Parameters_Tip=\u5FAE\u4FE1\uFF0F\u9489\u9489\u96C6\u6210\u94FE\u63A5\u5FC5\u987B\u52FE\u9009\u89E3\u6790\u53C2\u6570\u503C\uFF0C\u5426\u5219\u5C06\u5BFC\u81F4\u53C2\u6570\u4E22\u5931\uFF1B\u6A21\u677F\u6D88\u606F\u63A8\u9001\u7684\u6D88\u606F\u94FE\u63A5\u53EF\u9009\u62E9\u4E0D\u89E3\u6790\u53C2\u6570\u503C\uFF0C\u4ECE\u800C\u5B9E\u73B0\u63A8\u9001\u65F6\u7684\u5B9E\u65F6\u516C\u5F0F\u8BA1\u7B97\u3002
Dec-DingTalkSyn_Enterprise_Agent=\u9489\u9489\u5E94\u7528
Dec-DingTalkSyn_Chatgroup_Name=\u9489\u9489\u7FA4\u540D\u79F0
Dec-DingTalkSyn_Chat_Group=\u9489\u9489\u7FA4
Dec-DingTalkSyn_New_Chat_Group=\u65B0\u5EFA\u9489\u9489\u7FA4
Dec-DingTalkSyn_Delete_ChatGroup_Confirm=\u786E\u8BA4\u5220\u9664\u9489\u9489\u7FA4\uFF1F
Dec-DingTalkSyn_Chat_Group_Member_Tip=\u9664\u7FA4\u4E3B\u5916\uFF0C\u4E0D\u53EF\u5C11\u4E8E2\u4EBA
Dec-DingTalkSyn_Chat_Group_Leader=\u7FA4\u4E3B
Dec-DingTalkSyn_Chat_Group_Member=\u7FA4\u6210\u5458
Dec-DingTalkSyn_New_Chat_Group_Tip1=\u7FA4\u6210\u5458\u8D85\u8FC730\u4EBA\u65F6\uFF0C\u5EFA\u8BAE\u5728\u9489\u9489\u5BA2\u6237\u7AEF\u6DFB\u52A0\u66F4\u591A\u7FA4\u6210\u5458\u3002
Dec-DingTalkSyn_New_Chat_Group_Tip2=\u5BA2\u6237\u7AEF\u6DFB\u52A0\u7684\u6210\u5458\u82E5\u4E0D\u5728\u5E94\u7528\u53EF\u89C1\u8303\u56F4\u5185\uFF0C\u5C06\u65E0\u6CD5\u5355\u70B9\u767B\u5F55\u67E5\u770B\u6A21\u677F\u3002
Dec-DingTalkSyn_New_Chat_Group_Message=\u60A8\u5DF2\u52A0\u5165\u7FA4\u804A
Dec-DingTalkSyn_Common_Error_Tip=\u53D1\u751F\u9519\u8BEF\uFF0C\u9519\u8BEF\u7801\u4E3A\uFF1A
Dec-DingTalkSyn_Chat_Group_Name_Length_Tip=\u7FA4\u540D\u79F0\u957F\u5EA6\u965020\u4E2A\u5B57\u7B26
Dec-DingTalkSyn_Create-Chat-Group-Fail=\u521B\u5EFA\u9489\u9489\u7FA4\u5931\u8D25
Dec-DingTalkSyn_Output_User_Empty=\u63A8\u9001\u4EBA\u4E3A\u7A7A\uFF01
Dec-DingTalkSyn_Message_Agent=\u5E94\u7528\u6D88\u606F
Dec-DingTalkSyn_Message_Group=\u7FA4\u6D88\u606F
Dec-DingTalkSyn_DingTalkSyn=\u9489\u9489
Dec-DingTalkSyn_Output_User_Fail_Partly_Header=\u4E2A\u7528\u6237\u63A8\u9001\u5931\u8D25\uFF1A
Dec-DingTalkSyn_Output_User_Fail_Partly_Tip=...\uFF0C\u53EF\u5728\u65E5\u5FD7\u4E2D\u67E5\u770B\u5B8C\u6574\u7528\u6237\u540D\u5355
Dec-DingTalkSyn_Output_Group_Fail_Partly_Header=\u4E2A\u7FA4\u63A8\u9001\u5931\u8D25\uFF1A
Dec-DingTalkSyn_Output_Group_Fail_Partly_Tip=...\uFF0C\u53EF\u5728\u65E5\u5FD7\u4E2D\u67E5\u770B\u5B8C\u6574\u7FA4\u540D\u5355
Dec-DingTalkSyn_User_Match_Dec_User_Fail=\u9489\u9489\u7528\u6237\u5339\u914D\u5E73\u53F0\u7528\u6237\u5931\u8D25\uFF01

24
src/main/resources/com/fr/plugin/mqh/dingtalksyn/web/codePage.html

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>DingTalk</title>
<script src="${openJs}"></script>
</head>
<body>
<script>
dd.ready(function () {
dd.runtime.permission.requestAuthCode({
corpId: "${corpId}",
onSuccess: function (result) {
window.open("${remoteServletURL}" + result.code);
},
onFail: function (err) {
}
});
});
</script>
</body>
</html>

1
src/main/resources/com/fr/plugin/mqh/dingtalksyn/web/dingtalk.open.js

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save