@ -1,3 +1,6 @@ |
|||||||
# open-JSD-8690 |
# open-JSD-8690 |
||||||
|
|
||||||
JSD-8690 开源任务材料 |
JSD-8690 云之家推送示例 开源任务材料\ |
||||||
|
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||||
|
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||||
|
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系hugh处理。 |
@ -0,0 +1,52 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||||
|
<plugin> |
||||||
|
<id>com.fr.plugin.xxxx.10</id> |
||||||
|
<name><![CDATA[单点10]]></name> |
||||||
|
<active>yes</active> |
||||||
|
<version>2.0.7.2</version> |
||||||
|
<env-version>10.0</env-version> |
||||||
|
<jartime>2019-03-10</jartime> |
||||||
|
<vendor>fr.open</vendor> |
||||||
|
<description><![CDATA[]]></description> |
||||||
|
<function-recorder class="com.fr.plugin.core.MySystemOption"/> |
||||||
|
<change-notes> |
||||||
|
<![CDATA[ |
||||||
|
<p>[2019-11-6]项目启动</p> |
||||||
|
<p>[2020-01-14]修复推送问题</p> |
||||||
|
]]> |
||||||
|
</change-notes> |
||||||
|
<main-package>com.fr.plugin.core</main-package> |
||||||
|
<!--插件生命周期接口--> |
||||||
|
<lifecycle-monitor class="com.fr.plugin.core.MyLifeCycleMonitor"/> |
||||||
|
<extra-decision> |
||||||
|
<!--插件注入js--> |
||||||
|
<SystemOptionProvider class="com.fr.plugin.core.MySystemOption"/> |
||||||
|
<!--插件注入HttpHandler--> |
||||||
|
<HttpHandlerProvider class="com.fr.plugin.core.MyHttpHander"/> |
||||||
|
<!--插件注入AccessProvider--> |
||||||
|
<AccessProvider class="com.fr.plugin.core.MySingleLoginAccessProvider"/> |
||||||
|
<!--插件注入定时调度相关的数据库--> |
||||||
|
<DecisionDBAccessProvider class="com.fr.plugin.core.MyDecisionDBAccess"/> |
||||||
|
<!--插件注入处理公式的类--> |
||||||
|
<OutputFormulaProvider class="com.fr.plugin.core.MyFormulaProvider"/> |
||||||
|
<!--插件注入短链--> |
||||||
|
<URLAliasProvider class="com.fr.plugin.core.MyUrlAliasProvider"/> |
||||||
|
|
||||||
|
<GlobalRequestFilterProvider class="com.fr.plugin.core.LoginFilter"/> |
||||||
|
</extra-decision> |
||||||
|
<extra-core> |
||||||
|
<!--插件注入国际化--> |
||||||
|
<LocaleFinder class="com.fr.plugin.core.MyLocalFinder"/> |
||||||
|
<!--插件注入数据库--> |
||||||
|
<DBAccessProvider class="com.fr.plugin.core.MyCoreDBAccess"/> |
||||||
|
<!--插件注入数据库--> |
||||||
|
<DBAccessProvider class="com.fr.plugin.core.MyCoreDBAccess"/> |
||||||
|
</extra-core> |
||||||
|
<extra-report> |
||||||
|
<!--插件模板消息推送--> |
||||||
|
<MessageObjectProvider class="com.fr.plugin.core.MeixinMessageObject"/> |
||||||
|
</extra-report> |
||||||
|
|
||||||
|
</plugin> |
||||||
|
|
||||||
|
|
@ -0,0 +1,56 @@ |
|||||||
|
package com.fr.plugin.beans; |
||||||
|
|
||||||
|
import com.fr.json.JSONException; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.stable.db.data.BaseDataRecord; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
public class MyAgentBean extends BaseDataRecord implements Serializable { |
||||||
|
private String agentName; |
||||||
|
private String sysKey; |
||||||
|
private String secret; |
||||||
|
|
||||||
|
public MyAgentEntity createEntity(MyAgentEntity var1) { |
||||||
|
var1.setId(this.getId()); |
||||||
|
var1.setAgentName(this.agentName); |
||||||
|
var1.setSecret(this.secret); |
||||||
|
var1.setSysKey(this.sysKey); |
||||||
|
return var1; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSysKey() { |
||||||
|
return sysKey; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSysKey(String sysKey) { |
||||||
|
this.sysKey = sysKey; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSecret() { |
||||||
|
return secret; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSecret(String secret) { |
||||||
|
this.secret = secret; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAgentName() { |
||||||
|
return this.agentName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAgentName(String var1) { |
||||||
|
this.agentName = var1; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public JSONObject toJSONObject() throws JSONException { |
||||||
|
JSONObject var1 = JSONObject.create(); |
||||||
|
var1.put("id", this.getId()); |
||||||
|
var1.put("agentName", this.agentName); |
||||||
|
var1.put("sysKey", this.sysKey); |
||||||
|
var1.put("secret", this.secret); |
||||||
|
return var1; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,90 @@ |
|||||||
|
package com.fr.plugin.beans; |
||||||
|
|
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONException; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.entitys.MyDepEntity; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
|
||||||
|
public class MyDepBean implements Serializable { |
||||||
|
private String name; |
||||||
|
private String depName; |
||||||
|
private String id; |
||||||
|
private int order; |
||||||
|
private String parentId; |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
|
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
public String getDepName() { |
||||||
|
return depName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDepName(String depName) { |
||||||
|
this.depName = depName; |
||||||
|
} |
||||||
|
|
||||||
|
public String getId() { |
||||||
|
return id; |
||||||
|
} |
||||||
|
|
||||||
|
public void setId(String id) { |
||||||
|
this.id = id; |
||||||
|
} |
||||||
|
|
||||||
|
public int getOrder() { |
||||||
|
return order; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOrder(int order) { |
||||||
|
this.order = order; |
||||||
|
} |
||||||
|
|
||||||
|
public String getParentId() { |
||||||
|
return parentId; |
||||||
|
} |
||||||
|
|
||||||
|
public void setParentId(String parentId) { |
||||||
|
this.parentId = parentId; |
||||||
|
} |
||||||
|
public JSONObject createJSONConfig() throws JSONException { |
||||||
|
JSONObject var1 = JSONObject.create(); |
||||||
|
var1.put("id", this.getId()); |
||||||
|
var1.put("text", this.getName()); |
||||||
|
var1.put("pId", this.getParentId()); |
||||||
|
var1.put("value", this.getDepName()); |
||||||
|
return var1; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return "MyDepBean{" + |
||||||
|
"name='" + name + '\'' + |
||||||
|
", depName='" + depName + '\'' + |
||||||
|
", id='" + id + '\'' + |
||||||
|
", order=" + order + |
||||||
|
", parentId='" + parentId + '\'' + |
||||||
|
'}'; |
||||||
|
} |
||||||
|
|
||||||
|
public JSONArray generateDepartmentTree() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public MyDepEntity createEntity(){ |
||||||
|
MyDepEntity bean=new MyDepEntity(); |
||||||
|
bean.setDepName(this.depName); |
||||||
|
bean.setId(this.getId()); |
||||||
|
bean.setName(this.name); |
||||||
|
bean.setParentId(this.parentId); |
||||||
|
bean.setTop1(this.order); |
||||||
|
return bean; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,171 @@ |
|||||||
|
package com.fr.plugin.beans; |
||||||
|
|
||||||
|
import com.fr.decision.system.bean.message.MessageUrlType; |
||||||
|
import com.fr.decision.system.bean.message.MobileMessageType; |
||||||
|
import com.fr.plugin.entitys.OutputMyEntity; |
||||||
|
import com.fr.schedule.base.bean.output.BaseOutputAction; |
||||||
|
import com.fr.schedule.base.entity.AbstractScheduleEntity; |
||||||
|
import com.fr.schedule.base.type.RunType; |
||||||
|
import com.fr.third.fasterxml.jackson.annotation.JsonSubTypes; |
||||||
|
|
||||||
|
@JsonSubTypes.Type( |
||||||
|
value = MyOutputBean.class, |
||||||
|
name = "Outputxxxx" |
||||||
|
) |
||||||
|
public class MyOutputBean extends BaseOutputAction { |
||||||
|
private int terminal = 64; |
||||||
|
private String sysKey = null; |
||||||
|
private String subject; |
||||||
|
private String content; |
||||||
|
private int linkOpenType; |
||||||
|
private String customizeLink; |
||||||
|
private int type; |
||||||
|
private String mediaId; |
||||||
|
private String agentId; |
||||||
|
private int runType; |
||||||
|
private int platform; |
||||||
|
private int messageType; |
||||||
|
public String getAgentId() { |
||||||
|
return agentId; |
||||||
|
} |
||||||
|
|
||||||
|
public int getPlatform() { |
||||||
|
return platform; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPlatform(int platform) { |
||||||
|
this.platform = platform; |
||||||
|
} |
||||||
|
|
||||||
|
public int getMessageType() { |
||||||
|
return messageType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setMessageType(int messageType) { |
||||||
|
this.messageType = messageType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAgentId(String agentId) { |
||||||
|
this.agentId = agentId; |
||||||
|
} |
||||||
|
|
||||||
|
public int getTerminal() { |
||||||
|
return terminal; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTerminal(int terminal) { |
||||||
|
this.terminal = terminal; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSysKey() { |
||||||
|
return sysKey; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSysKey(String sysKey) { |
||||||
|
this.sysKey = sysKey; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSubject() { |
||||||
|
return subject; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSubject(String subject) { |
||||||
|
this.subject = subject; |
||||||
|
} |
||||||
|
|
||||||
|
public String getContent() { |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContent(String content) { |
||||||
|
this.content = content; |
||||||
|
} |
||||||
|
|
||||||
|
public int getLinkOpenType() { |
||||||
|
return linkOpenType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLinkOpenType(int linkOpenType) { |
||||||
|
this.linkOpenType = linkOpenType; |
||||||
|
} |
||||||
|
|
||||||
|
public String getCustomizeLink() { |
||||||
|
return customizeLink; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCustomizeLink(String customizeLink) { |
||||||
|
this.customizeLink = customizeLink; |
||||||
|
} |
||||||
|
|
||||||
|
public int getType() { |
||||||
|
return type; |
||||||
|
} |
||||||
|
|
||||||
|
public void setType(int type) { |
||||||
|
this.type = type; |
||||||
|
} |
||||||
|
|
||||||
|
public String getMediaId() { |
||||||
|
return mediaId; |
||||||
|
} |
||||||
|
|
||||||
|
public void setMediaId(String mediaId) { |
||||||
|
this.mediaId = mediaId; |
||||||
|
} |
||||||
|
|
||||||
|
public int getRunType() { |
||||||
|
return runType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRunType(int runType) { |
||||||
|
this.runType = runType; |
||||||
|
} |
||||||
|
//这里直接关联第一步的entity类
|
||||||
|
public Class<? extends AbstractScheduleEntity> outputActionEntityClass() { |
||||||
|
return OutputMyEntity.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public AbstractScheduleEntity createOutputActionEntity() { |
||||||
|
OutputMyEntity var1 = new OutputMyEntity(); |
||||||
|
var1.setId(this.getId()); |
||||||
|
var1.setTerminal(this.getTerminal()); |
||||||
|
var1.setSysKey(this.getSysKey()); |
||||||
|
var1.setSubject(this.getSubject()); |
||||||
|
var1.setContent(this.getContent()); |
||||||
|
var1.setLinkOpenType(this.getLinkOpenType()); |
||||||
|
var1.setCustomizeLink(this.getCustomizeLink()); |
||||||
|
var1.setType(this.getType()); |
||||||
|
var1.setAgentId(this.getAgentId()); |
||||||
|
var1.setMediaId(this.getMediaId()); |
||||||
|
var1.setMessageType(this.getMessageType()); |
||||||
|
var1.setPlatform(this.getPlatform()); |
||||||
|
var1.setActionName(this.getActionName()); |
||||||
|
var1.setResultURL(this.getResultURL()); |
||||||
|
// var1.setRunType(this.runType());
|
||||||
|
// var1.setExecuteByUser(this.willExecuteByUser());
|
||||||
|
return var1; |
||||||
|
} |
||||||
|
|
||||||
|
// @Override
|
||||||
|
// public OutputMyEntity createEntity() {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
public MyOutputBean() { |
||||||
|
this.linkOpenType = MessageUrlType.INNER.toInt(); |
||||||
|
this.type = MobileMessageType.TEXT.toInt(); |
||||||
|
this.runType = RunType.CLIENT_NOTIFICATION.getValue(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean willExecuteByUser() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public RunType runType() { |
||||||
|
|
||||||
|
return RunType.CLIENT_NOTIFICATION; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,144 @@ |
|||||||
|
package com.fr.plugin.beans; |
||||||
|
|
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.entitys.MyUserEntity; |
||||||
|
import com.fr.schedule.base.bean.output.BaseOutputAction; |
||||||
|
import com.fr.schedule.base.type.RunType; |
||||||
|
import com.fr.stable.db.data.BaseDataRecord; |
||||||
|
import com.fr.third.fasterxml.jackson.annotation.JsonSubTypes; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
@JsonSubTypes.Type( |
||||||
|
value = MyUserBean.class, |
||||||
|
name = "UserBean" |
||||||
|
) |
||||||
|
public class MyUserBean extends BaseDataRecord implements Serializable { |
||||||
|
|
||||||
|
private String openId; |
||||||
|
private String name; |
||||||
|
private String photoUrl; |
||||||
|
private String phone; |
||||||
|
private String jobNo; |
||||||
|
private String department; |
||||||
|
private int status; |
||||||
|
private String fsUserName; |
||||||
|
|
||||||
|
public String getFsUserName() { |
||||||
|
return fsUserName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFsUserName(String fsUserName) { |
||||||
|
this.fsUserName = fsUserName; |
||||||
|
} |
||||||
|
|
||||||
|
public MyUserEntity createEntity() { |
||||||
|
MyUserEntity var1=new MyUserEntity(); |
||||||
|
var1.setId(this.getOpenId()); |
||||||
|
var1.setStatus(this.getStatus()); |
||||||
|
var1.setPhotoUrl(this.getPhotoUrl()); |
||||||
|
var1.setJobNo(this.jobNo); |
||||||
|
var1.setPhone(this.phone); |
||||||
|
var1.setName(this.name); |
||||||
|
var1.setDepartment(this.department); |
||||||
|
var1.setStatus(this.status); |
||||||
|
var1.setOpenId(this.openId); |
||||||
|
var1.setFsUserName(this.fsUserName); |
||||||
|
return var1; |
||||||
|
} |
||||||
|
|
||||||
|
public String getPhone() { |
||||||
|
return phone; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPhone(String phone) { |
||||||
|
this.phone = phone; |
||||||
|
} |
||||||
|
|
||||||
|
public String getOpenId() { |
||||||
|
return openId; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOpenId(String openId) { |
||||||
|
this.openId = openId; |
||||||
|
} |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
|
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
public String getPhotoUrl() { |
||||||
|
return photoUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPhotoUrl(String photoUrl) { |
||||||
|
this.photoUrl = photoUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getJobNo() { |
||||||
|
return jobNo; |
||||||
|
} |
||||||
|
|
||||||
|
public void setJobNo(String jobNo) { |
||||||
|
this.jobNo = jobNo; |
||||||
|
} |
||||||
|
|
||||||
|
public String getDepartment() { |
||||||
|
return department; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDepartment(String department) { |
||||||
|
this.department = department; |
||||||
|
} |
||||||
|
|
||||||
|
public int getStatus() { |
||||||
|
return status; |
||||||
|
} |
||||||
|
|
||||||
|
public void setStatus(int status) { |
||||||
|
this.status = status; |
||||||
|
} |
||||||
|
|
||||||
|
public JSONObject createJSONConfig() { |
||||||
|
JSONObject var1 = JSONObject.create(); |
||||||
|
var1.put("userid", this.getOpenId()); |
||||||
|
var1.put("name", this.getName()); |
||||||
|
var1.put("mobile", this.getPhone()); |
||||||
|
var1.put("departmentName", department); |
||||||
|
var1.put("fsUserName",fsUserName); |
||||||
|
return var1; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return "MyUserBean{" + |
||||||
|
"openId='" + openId + '\'' + |
||||||
|
", name='" + name + '\'' + |
||||||
|
", photoUrl='" + photoUrl + '\'' + |
||||||
|
", phone='" + phone + '\'' + |
||||||
|
", jobNo='" + jobNo + '\'' + |
||||||
|
", department='" + department + '\'' + |
||||||
|
", status=" + status + |
||||||
|
", fsUserName='" + fsUserName + '\'' + |
||||||
|
'}'; |
||||||
|
} |
||||||
|
|
||||||
|
/// "openId":String, //人员的openid
|
||||||
|
// "name":String, //姓名
|
||||||
|
// "photoUrl":String, //头像URL
|
||||||
|
// "phone":String, //手机号码
|
||||||
|
// "isHidePhone":String, //是否在通讯录中隐藏手机号码,0: 不隐藏; 1: 隐藏,默认为0
|
||||||
|
// "email":String, //邮箱
|
||||||
|
// "department":String, //组织长名称
|
||||||
|
// "jobNo":String, //企业工号
|
||||||
|
// "jobTitle":String, //职位
|
||||||
|
// "gender":int, //性别,0: 不确定; 1: 男; 2: 女
|
||||||
|
// "status":int, //状态 0: 注销,1: 正常,2: 禁用
|
||||||
|
// "orgUserType":int //是否部门负责人 0:否, 1:是
|
||||||
|
// "positiveDate":String,//转正日期,格式如:"2018-01-01"
|
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.fr.plugin.beans.msg; |
||||||
|
|
||||||
|
import com.fr.decision.system.message.type.MessageType; |
||||||
|
|
||||||
|
public class MyMessageType extends MessageType { |
||||||
|
public static final MyMessageType KEY = new MyMessageType(); |
||||||
|
public static final String TEXT = "text"; |
||||||
|
public static final String FILE = "file"; |
||||||
|
public static final String NEWS = "news"; |
||||||
|
@Override |
||||||
|
public int toInteger() { |
||||||
|
return 518; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,201 @@ |
|||||||
|
package com.fr.plugin.config; |
||||||
|
|
||||||
|
import com.fr.config.ConfigContext; |
||||||
|
import com.fr.config.DefaultConfiguration; |
||||||
|
import com.fr.config.holder.Conf; |
||||||
|
import com.fr.config.holder.factory.Holders; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
public class MyConfig extends DefaultConfiguration { |
||||||
|
private static volatile MyConfig config = null; |
||||||
|
private Conf<String> appId = Holders.simple(StringUtils.EMPTY); |
||||||
|
private Conf<String> eid = Holders.simple(StringUtils.EMPTY); |
||||||
|
private Conf<String> secret = Holders.simple(StringUtils.EMPTY); |
||||||
|
private Conf<String> url = Holders.simple(StringUtils.EMPTY); |
||||||
|
private Conf<String> readKey = Holders.simple(StringUtils.EMPTY); |
||||||
|
private Conf<String> match = Holders.simple(StringUtils.EMPTY); |
||||||
|
private Conf<String> scanId = Holders.simple(StringUtils.EMPTY); |
||||||
|
private Conf<String> scanSecret = Holders.simple(StringUtils.EMPTY); |
||||||
|
|
||||||
|
private Conf<String> pushUrl = Holders.simple(StringUtils.EMPTY); |
||||||
|
|
||||||
|
private Conf<String> authUrl = Holders.simple(StringUtils.EMPTY); |
||||||
|
|
||||||
|
private Conf<String> accessToken = Holders.simple(StringUtils.EMPTY); |
||||||
|
private Conf<String> appKey = Holders.simple(StringUtils.EMPTY); |
||||||
|
private volatile boolean isAuthorityInited = false; |
||||||
|
private volatile boolean isDBAccessAvailable = false; |
||||||
|
private volatile boolean isThreadAlreadyStart = false; |
||||||
|
private Conf<String> lastSyncUserTime = Holders.simple(StringUtils.EMPTY); |
||||||
|
private Conf<String> lastSyncDepTime = Holders.simple(StringUtils.EMPTY); |
||||||
|
private Conf<String> synToken = Holders.simple(StringUtils.EMPTY); |
||||||
|
|
||||||
|
public static MyConfig getInstance() { |
||||||
|
if (config == null) { |
||||||
|
config = ConfigContext.getConfigInstance(MyConfig.class); |
||||||
|
} |
||||||
|
return config; |
||||||
|
} |
||||||
|
|
||||||
|
public String getLastSyncUserTime() { |
||||||
|
return lastSyncUserTime.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setLastSyncUserTime(String lastSyncUserTime) { |
||||||
|
this.lastSyncUserTime.set(lastSyncUserTime); |
||||||
|
} |
||||||
|
|
||||||
|
public String getLastSyncDepTime() { |
||||||
|
return lastSyncDepTime.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setSynToken(String token) { |
||||||
|
this.synToken.set(token); |
||||||
|
} |
||||||
|
|
||||||
|
public String getSynToken() { |
||||||
|
return synToken.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setLastSyncDepTime(String lastSyncDepTime) { |
||||||
|
this.lastSyncDepTime.set(lastSyncDepTime); |
||||||
|
} |
||||||
|
|
||||||
|
public String getAppId() { |
||||||
|
return appId.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setAppId(String appId) { |
||||||
|
this.appId.set(appId); |
||||||
|
} |
||||||
|
|
||||||
|
public String getEid() { |
||||||
|
return eid.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setEid(String eid) { |
||||||
|
this.eid.set(eid); |
||||||
|
} |
||||||
|
|
||||||
|
public String getSecret() { |
||||||
|
return secret.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setSecret(String secret) { |
||||||
|
this.secret.set(secret); |
||||||
|
} |
||||||
|
|
||||||
|
public String getUrl() { |
||||||
|
return url.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setUrl(String url) { |
||||||
|
this.url.set(url); |
||||||
|
} |
||||||
|
|
||||||
|
public String getReadKey() { |
||||||
|
return readKey.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setReadKey(String readKey) { |
||||||
|
this.readKey.set(readKey); |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isAuthorityInited() { |
||||||
|
return isAuthorityInited; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAuthorityInited(boolean authorityInited) { |
||||||
|
isAuthorityInited = authorityInited; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isDBAccessAvailable() { |
||||||
|
return isDBAccessAvailable; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDBAccessAvailable(boolean DBAccessAvailable) { |
||||||
|
isDBAccessAvailable = DBAccessAvailable; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isThreadAlreadyStart() { |
||||||
|
return isThreadAlreadyStart; |
||||||
|
} |
||||||
|
|
||||||
|
public void setThreadAlreadyStart(boolean threadAlreadyStart) { |
||||||
|
isThreadAlreadyStart = threadAlreadyStart; |
||||||
|
} |
||||||
|
|
||||||
|
public String getMatch() { |
||||||
|
return match.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setMatch(String match) { |
||||||
|
this.match.set(match); |
||||||
|
} |
||||||
|
|
||||||
|
public String getScanId() { |
||||||
|
return scanId.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setScanId(String scanId) { |
||||||
|
this.scanId.set(scanId); |
||||||
|
} |
||||||
|
|
||||||
|
public String getScanSecret() { |
||||||
|
return scanSecret.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setScanSecret(String scanSecret) { |
||||||
|
this.scanSecret.set(scanSecret); |
||||||
|
} |
||||||
|
|
||||||
|
public String getAccessToken() { |
||||||
|
return accessToken.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setAccessToken(String accessToken) { |
||||||
|
this.accessToken.set(accessToken); |
||||||
|
} |
||||||
|
|
||||||
|
public String getAuthUrl() { |
||||||
|
return authUrl.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setAuthUrl(String authUrl) { |
||||||
|
this.authUrl.set(authUrl); |
||||||
|
} |
||||||
|
|
||||||
|
public String getAppKey() { |
||||||
|
return appKey.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setAppKey(String appKey) { |
||||||
|
this.appKey.set(appKey); |
||||||
|
} |
||||||
|
|
||||||
|
public String getPushUrl() { |
||||||
|
return pushUrl.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setPushUrl(String pushUrl) { |
||||||
|
this.pushUrl.set(pushUrl); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Object clone() throws CloneNotSupportedException { |
||||||
|
MyConfig clone = (MyConfig) super.clone(); |
||||||
|
clone.secret = (Conf<String>) secret.clone(); |
||||||
|
clone.appId = (Conf<String>) appId.clone(); |
||||||
|
clone.eid = (Conf<String>) eid.clone(); |
||||||
|
clone.url = (Conf<String>) url.clone(); |
||||||
|
clone.readKey = (Conf<String>) readKey.clone(); |
||||||
|
clone.match = (Conf<String>) match.clone(); |
||||||
|
|
||||||
|
clone.scanId = (Conf<String>) scanId.clone(); |
||||||
|
clone.lastSyncUserTime = (Conf<String>) lastSyncUserTime.clone(); |
||||||
|
clone.lastSyncDepTime = (Conf<String>) lastSyncDepTime.clone(); |
||||||
|
clone.synToken = (Conf<String>) synToken.clone(); |
||||||
|
clone.scanSecret = (Conf<String>) scanSecret.clone(); |
||||||
|
return clone; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,79 @@ |
|||||||
|
package com.fr.plugin.config; |
||||||
|
|
||||||
|
import com.fr.config.holder.Conf; |
||||||
|
import com.fr.config.holder.factory.Holders; |
||||||
|
import com.fr.plugin.constant.Week; |
||||||
|
|
||||||
|
|
||||||
|
public class MyTimingTaskConfig { |
||||||
|
private Conf<Boolean> executeTimingTask; |
||||||
|
private Conf<Integer> timingTaskFrequencyType; |
||||||
|
private Conf<Integer> timingTaskStartDay; |
||||||
|
private Conf<String> timingTaskStartHour; |
||||||
|
private Conf<String> timingTaskStartMinute; |
||||||
|
|
||||||
|
public MyTimingTaskConfig() { |
||||||
|
this.executeTimingTask = Holders.simple(false); |
||||||
|
this.timingTaskFrequencyType = Holders.simple(0); |
||||||
|
this.timingTaskStartDay = Holders.simple(Week.MONDAY.getDay()); |
||||||
|
this.timingTaskStartHour = Holders.simple("00"); |
||||||
|
this.timingTaskStartMinute = Holders.simple("00"); |
||||||
|
} |
||||||
|
|
||||||
|
public MyTimingTaskConfig(boolean var1, int var2, String var3, String var4) { |
||||||
|
this.executeTimingTask = Holders.simple(false); |
||||||
|
this.timingTaskFrequencyType = Holders.simple(0); |
||||||
|
this.timingTaskStartDay = Holders.simple(Week.MONDAY.getDay()); |
||||||
|
this.timingTaskStartHour = Holders.simple("00"); |
||||||
|
this.timingTaskStartMinute = Holders.simple("00"); |
||||||
|
this.executeTimingTask.set(var1); |
||||||
|
this.timingTaskFrequencyType.set(var2); |
||||||
|
this.timingTaskStartHour.set(var3); |
||||||
|
this.timingTaskStartMinute.set(var4); |
||||||
|
} |
||||||
|
|
||||||
|
MyTimingTaskConfig(boolean var1, int var2, int var3, String var4, String var5) { |
||||||
|
this(var1, var2, var4, var5); |
||||||
|
this.timingTaskStartDay.set(var3); |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isExecuteTimingTask() { |
||||||
|
return (Boolean)this.executeTimingTask.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setExecuteTimingTask(boolean var1) { |
||||||
|
this.executeTimingTask.set(var1); |
||||||
|
} |
||||||
|
|
||||||
|
public int getTimingTaskFrequencyType() { |
||||||
|
return (Integer)this.timingTaskFrequencyType.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setTimingTaskFrequencyType(int var1) { |
||||||
|
this.timingTaskFrequencyType.set(var1); |
||||||
|
} |
||||||
|
|
||||||
|
public int getTimingTaskStartDay() { |
||||||
|
return (Integer)this.timingTaskStartDay.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setTimingTaskStartDay(int var1) { |
||||||
|
this.timingTaskStartDay.set(var1); |
||||||
|
} |
||||||
|
|
||||||
|
public String getTimingTaskStartHour() { |
||||||
|
return (String)this.timingTaskStartHour.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setTimingTaskStartHour(String var1) { |
||||||
|
this.timingTaskStartHour.set(var1); |
||||||
|
} |
||||||
|
|
||||||
|
public String getTimingTaskStartMinute() { |
||||||
|
return (String)this.timingTaskStartMinute.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setTimingTaskStartMinute(String var1) { |
||||||
|
this.timingTaskStartMinute.set(var1); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
package com.fr.plugin.constant; |
||||||
|
|
||||||
|
|
||||||
|
public enum Week { |
||||||
|
SUNDAY("SUN", 0), |
||||||
|
MONDAY("MON", 1), |
||||||
|
TUESDAY("TUE", 2), |
||||||
|
WEDNESDAY("WED", 3), |
||||||
|
THURSDAY("THU", 4), |
||||||
|
FRIDAY("FRI", 5), |
||||||
|
SATURDAY("STA", 6); |
||||||
|
|
||||||
|
private int day; |
||||||
|
private String dayName; |
||||||
|
|
||||||
|
private Week(String var3, int var4) { |
||||||
|
this.dayName = var3; |
||||||
|
this.day = var4; |
||||||
|
} |
||||||
|
|
||||||
|
public int getDay() { |
||||||
|
return this.day; |
||||||
|
} |
||||||
|
|
||||||
|
public String getDayName() { |
||||||
|
return this.dayName; |
||||||
|
} |
||||||
|
|
||||||
|
public static Week getWeek(int var0) { |
||||||
|
switch(var0) { |
||||||
|
case 0: |
||||||
|
return SUNDAY; |
||||||
|
case 1: |
||||||
|
return MONDAY; |
||||||
|
case 2: |
||||||
|
return TUESDAY; |
||||||
|
case 3: |
||||||
|
return WEDNESDAY; |
||||||
|
case 4: |
||||||
|
return THURSDAY; |
||||||
|
case 5: |
||||||
|
return FRIDAY; |
||||||
|
case 6: |
||||||
|
return SATURDAY; |
||||||
|
default: |
||||||
|
return MONDAY; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,162 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.data.NetworkHelper; |
||||||
|
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||||
|
import com.fr.decision.mobile.terminal.TerminalHandler; |
||||||
|
import com.fr.decision.webservice.v10.login.LoginService; |
||||||
|
import com.fr.decision.webservice.v10.login.TokenResource; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.web.Device; |
||||||
|
import com.fr.third.org.apache.commons.lang3.RandomStringUtils; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.FilterChain; |
||||||
|
import javax.servlet.FilterConfig; |
||||||
|
import javax.servlet.http.Cookie; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.nio.charset.StandardCharsets; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.Base64; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.zip.Deflater; |
||||||
|
|
||||||
|
public class LoginFilter extends AbstractGlobalRequestFilterProvider { |
||||||
|
@Override |
||||||
|
public String filterName() { |
||||||
|
return "cloudPriFilter"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] urlPatterns() { |
||||||
|
return new String[]{ |
||||||
|
"/decision/login", |
||||||
|
"/decision/url/mobile", |
||||||
|
"/decision/view/form", |
||||||
|
"/decision/view/report", |
||||||
|
"/decision/schedule/*" |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void init(FilterConfig filterConfig) { |
||||||
|
super.init(filterConfig); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { |
||||||
|
try { |
||||||
|
if (ComparatorUtils.equalsIgnoreCase(req.getMethod(), "get")) { |
||||||
|
if (isLogin(req)) { |
||||||
|
filterChain.doFilter(req, res); |
||||||
|
} else { |
||||||
|
if (ComparatorUtils.equalsIgnoreCase(req.getParameter("isAdmin"), "1")) { |
||||||
|
filterChain.doFilter(req, res); |
||||||
|
} else { |
||||||
|
getlogin(req, res); |
||||||
|
} |
||||||
|
} |
||||||
|
} else { |
||||||
|
filterChain.doFilter(req, res); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isLogin(HttpServletRequest request) { |
||||||
|
String oldToken = TokenResource.COOKIE.getToken(request); |
||||||
|
return oldToken != null && checkTokenValid(request, (String) oldToken); |
||||||
|
} |
||||||
|
|
||||||
|
private boolean checkTokenValid(HttpServletRequest req, String token) { |
||||||
|
try { |
||||||
|
Device device = NetworkHelper.getDevice(req); |
||||||
|
LoginService.getInstance().loginStatusValid(token, TerminalHandler.getTerminal(req, device)); |
||||||
|
return true; |
||||||
|
} catch (Exception ignore) { |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
//登录页面
|
||||||
|
public static void getlogin(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||||
|
String callBackUrl = ""; |
||||||
|
String callBack = request.getParameter("callBack"); |
||||||
|
if (StringUtils.isNotBlank(callBack)) { |
||||||
|
callBackUrl = callBack; |
||||||
|
} |
||||||
|
String pathInfo = request.getPathInfo(); |
||||||
|
String originalURL = WebUtils.getOriginalURL(request); |
||||||
|
if (pathInfo.contains("/schedule")) { |
||||||
|
callBackUrl = MyConfig.getInstance().getUrl() + pathInfo + "?" + request.getQueryString(); |
||||||
|
} |
||||||
|
if (pathInfo.contains("/view/form")) { |
||||||
|
callBackUrl = MyConfig.getInstance().getUrl() + pathInfo + "?" + request.getQueryString(); |
||||||
|
} |
||||||
|
if (pathInfo.contains("/view/report")) { |
||||||
|
callBackUrl = MyConfig.getInstance().getUrl() + pathInfo + "?" + request.getQueryString(); |
||||||
|
} |
||||||
|
if (pathInfo.contains("url/mobile")) { |
||||||
|
callBackUrl = MyConfig.getInstance().getUrl() + "/url/mobile"; |
||||||
|
} |
||||||
|
if (StringUtils.isNotBlank(callBackUrl)) { |
||||||
|
FineLoggerFactory.getLogger().error("--------获取地址:{} 回调地址:{} 已经添加到cookies", originalURL, callBackUrl); |
||||||
|
|
||||||
|
setCookie(response,"saml_callBack",callBackUrl); |
||||||
|
} |
||||||
|
MyConfig instance = MyConfig.getInstance(); |
||||||
|
String servie = instance.getUrl(); |
||||||
|
String requestURI = servie + "/url/saml_login_callback"; |
||||||
|
String samlRequest = ""; |
||||||
|
// 设置当前访问时间
|
||||||
|
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'"); |
||||||
|
Date now = new Date(); |
||||||
|
// 设置samlRequest信息
|
||||||
|
String samlRequestString = new StringBuilder().append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><samlp:AuthnRequest xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" ID=\"").append(RandomStringUtils.random(40, true, false)).append("\" Version=\"2.0\" IssueInstant=\"").append(fmt.format(now)).append("\" ProtocolBinding=\"urn:oasis:names.tc:SAML:2.0:bindings:HTTP-Redirect\" ProviderName=\"samldemo\" AssertionConsumerServiceURL=\"").append(requestURI).append("\"/>").toString(); |
||||||
|
samlRequest = encoding(samlRequestString); |
||||||
|
String idm = instance.getAuthUrl(); |
||||||
|
if (StringUtils.isBlank(idm)) { |
||||||
|
idm = "https://testlogin.idm.huafagroup.com:25443/siam/login"; |
||||||
|
} |
||||||
|
Map<String, Object> map = new HashMap<String, Object>(); |
||||||
|
map.put("loginURL", idm); |
||||||
|
map.put("samlRequest", samlRequest); |
||||||
|
map.put("requestURI", requestURI); |
||||||
|
String errorTemplate = "/com/fr/plugin/web/LoginRequire.html"; |
||||||
|
WebUtils.writeOutTemplate(errorTemplate, response, map); |
||||||
|
} |
||||||
|
private static void setCookie(HttpServletResponse response, String name, String value) { |
||||||
|
Cookie cookie = new Cookie(name, value); |
||||||
|
cookie.setPath("/"); |
||||||
|
response.addCookie(cookie); |
||||||
|
} |
||||||
|
|
||||||
|
private static String encoding(String originalString) { |
||||||
|
|
||||||
|
String outputString = null; |
||||||
|
|
||||||
|
// 将原始包变成bin byte[]
|
||||||
|
byte[] binByte = originalString.getBytes(StandardCharsets.UTF_8); |
||||||
|
|
||||||
|
// 将bin byte[]压缩
|
||||||
|
byte[] output = new byte[1000]; |
||||||
|
Deflater compresser = new Deflater(Deflater.BEST_COMPRESSION, true); |
||||||
|
compresser.setInput(binByte); // 要压缩的数据包
|
||||||
|
compresser.finish(); // 完成
|
||||||
|
compresser.deflate(output); // 压缩,返回的是数据包经过缩缩后的大小
|
||||||
|
|
||||||
|
// 将压缩后的 bin byte[]变为 base64 byte[]
|
||||||
|
byte[] base64Input = Base64.getEncoder().encode(output); |
||||||
|
// 将 base64 byte[]变为base64 String
|
||||||
|
outputString = new String(base64Input, StandardCharsets.UTF_8); |
||||||
|
return outputString; |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.web.struct.Component; |
||||||
|
import com.fr.web.struct.browser.RequestClient; |
||||||
|
import com.fr.web.struct.category.FileType; |
||||||
|
import com.fr.web.struct.category.ScriptPath; |
||||||
|
import com.fr.web.struct.category.StylePath; |
||||||
|
|
||||||
|
public class LoginsComponent extends Component { |
||||||
|
public static LoginsComponent KEY = new LoginsComponent(); |
||||||
|
|
||||||
|
public LoginsComponent() { |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public ScriptPath script(RequestClient var1) { |
||||||
|
return ScriptPath.build("com.fr.decision.web.i18n.I18nTextGenerator&t="+System.currentTimeMillis(), FileType.CLASS); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.decision.system.message.image.MessageImage; |
||||||
|
import com.fr.decision.system.message.type.MessageType; |
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.beans.msg.MyMessageType; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.report.fun.impl.AbstractMessageObjectProvider; |
||||||
|
import com.fr.stable.collections.combination.Pair; |
||||||
|
@EnableMetrics |
||||||
|
public class MeixinMessageObject extends AbstractMessageObjectProvider { |
||||||
|
@Override |
||||||
|
public MessageType getMessageType() { |
||||||
|
return MyMessageType.KEY; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Pair<String, String>[] getValueEditorItems() { |
||||||
|
return new Pair[0]; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
@Focus(id = "com.fr.plugin.meixin.10", text = "sendMessage", source = Original.PLUGIN) |
||||||
|
public void sendMessage(MessageImage messageContent) { |
||||||
|
|
||||||
|
System.out.println(messageContent); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.web.struct.Component; |
||||||
|
import com.fr.web.struct.category.ScriptPath; |
||||||
|
import com.fr.web.struct.category.StylePath; |
||||||
|
|
||||||
|
public class MyComponent extends Component { |
||||||
|
public static MyComponent KEY = new MyComponent(); |
||||||
|
|
||||||
|
public MyComponent() { |
||||||
|
} |
||||||
|
|
||||||
|
public ScriptPath script() { |
||||||
|
return ScriptPath.build("/com/fr/plugin/web/js/meixin.js"); |
||||||
|
} |
||||||
|
|
||||||
|
public StylePath style() { |
||||||
|
return StylePath.build("/com/fr/plugin/web/css/cloud_home.css"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,84 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.dao.MyAgentDao; |
||||||
|
import com.fr.plugin.dao.MyDepDao; |
||||||
|
import com.fr.plugin.dao.MyUserDao; |
||||||
|
import com.fr.plugin.dao.PushDao; |
||||||
|
import com.fr.plugin.db.AbstractDBAccessProvider; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.entitys.MyDepEntity; |
||||||
|
import com.fr.plugin.entitys.MyUserEntity; |
||||||
|
import com.fr.plugin.entitys.PushEntity; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.stable.db.accessor.DBAccessor; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.dao.DAOProvider; |
||||||
|
|
||||||
|
import java.util.Timer; |
||||||
|
import java.util.TimerTask; |
||||||
|
|
||||||
|
public class MyCoreDBAccess extends AbstractDBAccessProvider { |
||||||
|
private static DBAccessor accessor; |
||||||
|
public static DBAccessor getAccessor() { |
||||||
|
return accessor; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public DAOProvider[] registerDAO() { |
||||||
|
return new DAOProvider[]{ |
||||||
|
new DAOProvider() { |
||||||
|
public Class getEntityClass() { |
||||||
|
return MyAgentEntity.class; |
||||||
|
} |
||||||
|
|
||||||
|
public Class<? extends BaseDAO> getDAOClass() { |
||||||
|
return MyAgentDao.class; |
||||||
|
} |
||||||
|
}, |
||||||
|
new DAOProvider() { |
||||||
|
public Class getEntityClass() { |
||||||
|
return MyUserEntity.class; |
||||||
|
} |
||||||
|
|
||||||
|
public Class<? extends BaseDAO> getDAOClass() { |
||||||
|
return MyUserDao.class; |
||||||
|
} |
||||||
|
}, |
||||||
|
new DAOProvider() { |
||||||
|
public Class getEntityClass() { |
||||||
|
return MyDepEntity.class; |
||||||
|
} |
||||||
|
|
||||||
|
public Class<? extends BaseDAO> getDAOClass() { |
||||||
|
return MyDepDao.class; |
||||||
|
} |
||||||
|
}, |
||||||
|
new DAOProvider() { |
||||||
|
public Class getEntityClass() { |
||||||
|
return PushEntity.class; |
||||||
|
} |
||||||
|
|
||||||
|
public Class<? extends BaseDAO> getDAOClass() { |
||||||
|
return PushDao.class; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onDBAvailable(DBAccessor dbAccessor) { |
||||||
|
accessor = dbAccessor; |
||||||
|
MyConfig.getInstance().setDBAccessAvailable(true); |
||||||
|
// MyUtils.startSyncThread();
|
||||||
|
Timer timer = new Timer(); |
||||||
|
timer.schedule(new TimerTask() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
FineLoggerFactory.getLogger().info("开始同步部门和用户数据--用户数据--线程启动"); |
||||||
|
// new MyStartupThred().start();
|
||||||
|
} |
||||||
|
}, 2000, 60 * 60 * 1000); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,186 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.beans.MyDepBean; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.dao.MyDepDao; |
||||||
|
import com.fr.plugin.dao.MyUserDao; |
||||||
|
import com.fr.plugin.entitys.MyDepEntity; |
||||||
|
import com.fr.plugin.entitys.MyUserEntity; |
||||||
|
import com.fr.plugin.utils.WebUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.condition.QueryCondition; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
|
||||||
|
import java.util.*; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
public class MyCorpManager { |
||||||
|
// private List<WeiXinCorp> corpList;
|
||||||
|
private List<MyDepBean> depList = new ArrayList<>(); |
||||||
|
|
||||||
|
private MyCorpManager() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public static MyCorpManager getInstance() { |
||||||
|
return MyCorpManager.HOLDER.INSTANCE; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public JSONArray generateDepartmentTree() { |
||||||
|
JSONArray var1 = new JSONArray(); |
||||||
|
try { |
||||||
|
this.depList = this.getDepFormDB(); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
if (this.depList.isEmpty()) { |
||||||
|
return new JSONArray(); |
||||||
|
} |
||||||
|
// Map<String, JSONObject> parentTree = new HashMap<>();
|
||||||
|
for (MyDepBean depBean : this.depList) { |
||||||
|
var1.add(depBean.createJSONConfig()); |
||||||
|
} |
||||||
|
return var1; |
||||||
|
} |
||||||
|
|
||||||
|
private List<MyDepBean> getDepFormDB() throws Exception { |
||||||
|
List<MyDepEntity> entities = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<MyDepEntity>>() { |
||||||
|
@Override |
||||||
|
public List<MyDepEntity> run(DAOContext daoContext) throws Exception { |
||||||
|
return daoContext.getDAO(MyDepDao.class).find(QueryFactory.create()); |
||||||
|
} |
||||||
|
}); |
||||||
|
return entities.stream().map(MyDepEntity::createBean).collect(Collectors.toList()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void syncDepList() throws Exception { |
||||||
|
MyConfig instance = MyConfig.getInstance(); |
||||||
|
String eid = instance.getEid(); |
||||||
|
String readKey = instance.getReadKey(); |
||||||
|
if (StringUtils.isNotBlank(eid) && StringUtils.isNotBlank(readKey)) { |
||||||
|
List<MyDepBean> allDep = WebUtils.getAllDep(eid, readKey); |
||||||
|
Logger logger = LoggerFactory.getLogger("部门同步"); |
||||||
|
List<String> idsFromService = new ArrayList<>(allDep.size()); |
||||||
|
if (allDep.isEmpty()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
int count=0; |
||||||
|
for (MyDepBean depBean : allDep) { |
||||||
|
String id = depBean.getId(); |
||||||
|
idsFromService.add(id); |
||||||
|
if (depNotExist(id)) { |
||||||
|
logger.error("同步一个新的部门:{}", depBean.getName()); |
||||||
|
save(depBean.createEntity()); |
||||||
|
logger.error("同步一个新的部门:{} 完成", depBean.getName()); |
||||||
|
} else { |
||||||
|
logger.error("同步更新部门:{}", depBean.getName()); |
||||||
|
update(depBean.createEntity()); |
||||||
|
logger.error("同步更新部门完成:{}", depBean.getName()); |
||||||
|
} |
||||||
|
count++; |
||||||
|
} |
||||||
|
logger.error("共处理更新{}个部门",count); |
||||||
|
int delCount=0; |
||||||
|
List<String> allDepId = findAllDepId(); |
||||||
|
if (allDepId.removeAll(idsFromService)) { |
||||||
|
for (String id : allDepId) { |
||||||
|
logger.error("删除了一个部门:{}",id); |
||||||
|
delCount++; |
||||||
|
remove(id); |
||||||
|
} |
||||||
|
} |
||||||
|
logger.error("共处理删除{}个部门",delCount); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private List<String> findAllDepId() throws Exception { |
||||||
|
List<MyDepEntity> entityList = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<MyDepEntity>>() { |
||||||
|
public List<MyDepEntity> run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
return content.getDAO(MyDepDao.class).find(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
List<String> ids = new ArrayList<>(entityList.size()); |
||||||
|
for (MyDepEntity entity : entityList) { |
||||||
|
ids.add(entity.getId()); |
||||||
|
} |
||||||
|
return ids; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean depNotExist(final String id) throws Exception { |
||||||
|
return MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<MyDepEntity>>() { |
||||||
|
@Override |
||||||
|
public List<MyDepEntity> run(DAOContext daoContext) throws Exception { |
||||||
|
return daoContext.getDAO(MyDepDao.class).find(QueryFactory.create().addRestriction(RestrictionFactory.eq("id", id))); |
||||||
|
} |
||||||
|
}).isEmpty(); |
||||||
|
} |
||||||
|
|
||||||
|
public void saveOrUpdateDep(MyDepBean depBean) throws Exception { |
||||||
|
String id = depBean.getId(); |
||||||
|
if (depNotExist(id)) { |
||||||
|
save(depBean.createEntity()); |
||||||
|
} else { |
||||||
|
update(depBean.createEntity()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private boolean save(final MyDepEntity entity) throws Exception { |
||||||
|
return MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<MyDepEntity>() { |
||||||
|
@Override |
||||||
|
public MyDepEntity run(DAOContext daoContext) throws Exception { |
||||||
|
daoContext.getDAO(MyDepDao.class).add(entity); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}) == null; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private void remove(final String id) throws Exception { |
||||||
|
MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<MyDepEntity>() { |
||||||
|
@Override |
||||||
|
public MyDepEntity run(DAOContext daoContext) throws Exception { |
||||||
|
daoContext.getDAO(MyDepDao.class).remove(id); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private boolean update(final MyDepEntity entity) throws Exception { |
||||||
|
return MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<MyDepEntity>() { |
||||||
|
@Override |
||||||
|
public MyDepEntity run(DAOContext daoContext) throws Exception { |
||||||
|
daoContext.getDAO(MyDepDao.class).update(entity); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}) == null; |
||||||
|
} |
||||||
|
|
||||||
|
public void removeDep(MyDepBean depBean) throws Exception { |
||||||
|
FineLoggerFactory.getLogger().error("移除了一个部门:{},id :{}", depBean.getDepName(), depBean.getId()); |
||||||
|
MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<MyDepEntity>() { |
||||||
|
@Override |
||||||
|
public MyDepEntity run(DAOContext daoContext) throws Exception { |
||||||
|
daoContext.getDAO(MyDepDao.class).remove(depBean.getId()); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private static class HOLDER { |
||||||
|
private static final MyCorpManager INSTANCE = new MyCorpManager(); |
||||||
|
|
||||||
|
private HOLDER() { |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.decision.plugin.db.AbstractDecisionDBAccessProvider; |
||||||
|
import com.fr.plugin.dao.MyAgentDao; |
||||||
|
import com.fr.plugin.dao.MyEntityDao; |
||||||
|
import com.fr.plugin.db.AbstractDBAccessProvider; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.entitys.OutputMyEntity; |
||||||
|
import com.fr.stable.db.accessor.DBAccessor; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.dao.DAOProvider; |
||||||
|
public class MyDecisionDBAccess extends AbstractDecisionDBAccessProvider { |
||||||
|
private static DBAccessor accessor; |
||||||
|
|
||||||
|
@Override |
||||||
|
|
||||||
|
public DAOProvider[] registerDAO() { |
||||||
|
return new DAOProvider[]{new DAOProvider() { |
||||||
|
public Class getEntityClass() { |
||||||
|
return OutputMyEntity.class; |
||||||
|
} |
||||||
|
|
||||||
|
public Class<? extends BaseDAO> getDAOClass() { |
||||||
|
return MyEntityDao.class; |
||||||
|
} |
||||||
|
}}; |
||||||
|
} |
||||||
|
|
||||||
|
public static DBAccessor getAccessor() { |
||||||
|
return accessor; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onDBAvailable(DBAccessor dbAccessor) { |
||||||
|
accessor = dbAccessor; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.main.workbook.ResultWorkBook; |
||||||
|
import com.fr.plugin.beans.MyOutputBean; |
||||||
|
import com.fr.plugin.entitys.OutputMyEntity; |
||||||
|
import com.fr.schedule.base.provider.impl.AbstractOutputFormulaProvider; |
||||||
|
import com.fr.schedule.extension.report.util.ScheduleParameterUtils; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class MyFormulaProvider extends AbstractOutputFormulaProvider<MyOutputBean, ResultWorkBook> { |
||||||
|
@Override |
||||||
|
public void dealWithFormulaParam(MyOutputBean myOutputBean, ResultWorkBook resultWorkBook, List<Map<String, Object>> list) throws Exception { |
||||||
|
myOutputBean.setSubject(ScheduleParameterUtils.dealWithParameter(myOutputBean.getSubject(), list.get(0), resultWorkBook)); |
||||||
|
myOutputBean.setContent(ScheduleParameterUtils.dealWithParameter(myOutputBean.getContent(), list.get(0), resultWorkBook)); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getActionClassName() { |
||||||
|
return MyOutputBean.class.getName(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.decision.fun.HttpHandler; |
||||||
|
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; |
||||||
|
import com.fr.plugin.web.hander.*; |
||||||
|
import com.fr.plugin.web.hander.member.*; |
||||||
|
|
||||||
|
public class MyHttpHander extends AbstractHttpHandlerProvider { |
||||||
|
HttpHandler[] actions = new HttpHandler[]{ |
||||||
|
new MyCheckLicenseHandler(), |
||||||
|
new GetAgentHandler(), |
||||||
|
new SingleLoginHandler(), |
||||||
|
new GetConfigHandler(), |
||||||
|
new SaveConfigHandler(), |
||||||
|
new SaveAgentHandler(), |
||||||
|
new DelAgentHander(), |
||||||
|
new GetDepTree(), |
||||||
|
new SaveMatch(), |
||||||
|
new LanlingLogin(), |
||||||
|
new GetMatch(), |
||||||
|
new GetMemberHandler(), |
||||||
|
new SaveRelation(), |
||||||
|
new SynUserHander(), |
||||||
|
new ScanLoginHandler(), |
||||||
|
new PCLoginHandler(), |
||||||
|
new SycHookHander(), |
||||||
|
new GetImageHandler(), |
||||||
|
new pushBeanHandler()//推送接收器
|
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
public HttpHandler[] registerHandlers() { |
||||||
|
return actions; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.decision.authority.AuthorityContext; |
||||||
|
import com.fr.decision.authority.event.AfterInitEvent; |
||||||
|
import com.fr.event.EventDispatcher; |
||||||
|
import com.fr.event.Listener; |
||||||
|
import com.fr.plugin.beans.MyOutputBean; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.context.PluginContext; |
||||||
|
import com.fr.plugin.entitys.OutputMyEntity; |
||||||
|
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||||
|
import com.fr.schedule.feature.ScheduleOutputActionEntityRegister; |
||||||
|
import com.fr.schedule.feature.event.ScheduleTaskChangeEvent; |
||||||
|
import com.fr.schedule.feature.event.ScheduleTaskChangeInfo; |
||||||
|
import com.fr.schedule.feature.output.OutputActionHandler; |
||||||
|
|
||||||
|
public class MyLifeCycleMonitor extends AbstractPluginLifecycleMonitor { |
||||||
|
@Override |
||||||
|
public void afterRun(PluginContext pluginContext) { |
||||||
|
this.registerOutputHandler(); |
||||||
|
this.addScheduleTableRelation(); |
||||||
|
AuthorityContext.getInstance().dispatchAfterInitEvent(new AfterInitEvent() { |
||||||
|
public void run() { |
||||||
|
MyConfig.getInstance().setAuthorityInited(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private void registerOutputHandler() { |
||||||
|
OutputActionHandler.registerHandler(new MyOutputActionHandler(), MyOutputBean.class.getName()); |
||||||
|
} |
||||||
|
|
||||||
|
private void addScheduleTableRelation() { |
||||||
|
ScheduleOutputActionEntityRegister.getInstance().addClass(OutputMyEntity.class); |
||||||
|
} |
||||||
|
|
||||||
|
private void removeScheduleTableRelation() { |
||||||
|
ScheduleOutputActionEntityRegister.getInstance().removeClass(OutputMyEntity.class); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void beforeStop(PluginContext pluginContext) { |
||||||
|
this.removeScheduleTableRelation(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.stable.fun.impl.AbstractLocaleFinder; |
||||||
|
|
||||||
|
public class MyLocalFinder extends AbstractLocaleFinder { |
||||||
|
private static final int CURRENT_LEVEL = 1; |
||||||
|
public int currentAPILevel() { |
||||||
|
return CURRENT_LEVEL; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String find() { |
||||||
|
return "com/fr/plugin/core/local/i18"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,417 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.base.ServerConfig; |
||||||
|
import com.fr.decision.system.bean.message.MessageUrlType; |
||||||
|
import com.fr.general.FRLogger; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.beans.MyOutputBean; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.dao.PushDao; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.entitys.PushEntity; |
||||||
|
import com.fr.plugin.utils.*; |
||||||
|
import com.fr.schedule.base.constant.ScheduleConstants; |
||||||
|
import com.fr.schedule.feature.output.OutputActionHandler; |
||||||
|
import com.fr.stable.CodeUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.third.org.apache.commons.lang3.RandomStringUtils; |
||||||
|
|
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.UUID; |
||||||
|
|
||||||
|
public class MyOutputActionHandler extends OutputActionHandler<MyOutputBean> { |
||||||
|
|
||||||
|
private static final int NEWS_MESSAGE = 2; |
||||||
|
private static final int TERMINATE_TYPE = 107; |
||||||
|
private static final int LINKTYPE = 0; |
||||||
|
private static final int PUSH2PC = 1; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void doAction(MyOutputBean myOutputBean, Map<String, Object> map) throws Exception { |
||||||
|
String[] files = (String[]) map.get(ScheduleConstants.OUTPUT_FILES); |
||||||
|
Object username = map.get("username"); |
||||||
|
String[] names = new String[0]; |
||||||
|
|
||||||
|
if (username != null) { |
||||||
|
String s = username.toString(); |
||||||
|
if (StringUtils.isNotBlank(s)) { |
||||||
|
names = new String[]{ |
||||||
|
s |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (names.length == 0) { |
||||||
|
names = (String[]) map.get(ScheduleConstants.USERNAMES); |
||||||
|
} |
||||||
|
|
||||||
|
MyConfig instance = MyConfig.getInstance(); |
||||||
|
/** |
||||||
|
* { |
||||||
|
* text:"图文", |
||||||
|
value:"1" |
||||||
|
* }, |
||||||
|
*RepConfig{ |
||||||
|
*RepConfig text:"纯图", |
||||||
|
*RepConfig value:"2" |
||||||
|
*RepConfig}, |
||||||
|
*RepConfig{ |
||||||
|
*RepConfig text:"纯文字", |
||||||
|
*RepConfig value:"3" |
||||||
|
*RepConfig} |
||||||
|
*/ |
||||||
|
MyAgentEntity agent = MyUtils.getAgentById(myOutputBean.getAgentId()); |
||||||
|
if (agent == null) { |
||||||
|
FineLoggerFactory.getLogger().error("获取agentId为空{}", myOutputBean.getAgentId()); |
||||||
|
return; |
||||||
|
} |
||||||
|
String secret = agent.getSecret(); |
||||||
|
String sysKey = agent.getSysKey(); |
||||||
|
int messageType = myOutputBean.getMessageType(); |
||||||
|
int platform = myOutputBean.getPlatform(); |
||||||
|
pushToDevice(myOutputBean, map, platform, messageType, userToStr(names), sysKey, secret); |
||||||
|
} |
||||||
|
|
||||||
|
private void pushToPc(MyOutputBean myOutputBean, Map<String, Object> map, String usersStr, String sysKey, String pushSecret, int messageType) throws Exception { |
||||||
|
String pcUrl = getResultUrl(map); |
||||||
|
//3.建立信息bean
|
||||||
|
String content = myOutputBean.getContent();//消息内容-需要
|
||||||
|
String title = myOutputBean.getSubject();//标题-需要
|
||||||
|
|
||||||
|
if (messageType == 1) { |
||||||
|
PushObject bmm = new PushObject(); |
||||||
|
bmm.setTitle(title); |
||||||
|
bmm.setSummary(content); |
||||||
|
bmm.setJumpUrl(pcUrl);//pc页面,
|
||||||
|
String appUrl = getResultUrl(map); |
||||||
|
bmm.setExtras("{\"appUrl\":\"" + appUrl + "\"}"); |
||||||
|
bmm.setCoverImgUrl(""); |
||||||
|
bmm.setShareRange("0"); |
||||||
|
String pushPc = myOutputBean.getPlatform() + "";//0pc&app 1pc 2 app
|
||||||
|
if (com.fr.stable.StringUtils.isNotBlank(pushPc)) { |
||||||
|
bmm.setOpenType(pushPc); |
||||||
|
} else { |
||||||
|
bmm.setOpenType("3"); |
||||||
|
} |
||||||
|
// String usersStr = this.userToStr(users);//转成user,
|
||||||
|
bmm.setBatchToUsers(usersStr); |
||||||
|
String url = MyConfig.getInstance().getPushUrl(); |
||||||
|
String pushImageAndTextUrl = url + "/mpm/v5/open/templatemsg/createAndPush"; |
||||||
|
String accessToken = MyConfig.getInstance().getAccessToken(); |
||||||
|
PushUtils.push(pushImageAndTextUrl, pushSecret, sysKey, accessToken, bmm, usersStr); |
||||||
|
} else if (messageType == 2) { |
||||||
|
String url = MyConfig.getInstance().getPushUrl(); |
||||||
|
// PushUtils.pushImage(url, usersStr, title, "", )
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private String userToStr(String[] users) { |
||||||
|
StringBuffer sb = new StringBuffer(); |
||||||
|
for (int i = 0; i < users.length; i++) { |
||||||
|
sb.append(users[i]); |
||||||
|
if (i != users.length - 1) { |
||||||
|
sb.append(","); |
||||||
|
} |
||||||
|
} |
||||||
|
return String.valueOf(sb); |
||||||
|
} |
||||||
|
|
||||||
|
private String convertPCAndMob(int plantform) { |
||||||
|
if (plantform == 0) { |
||||||
|
return "3"; |
||||||
|
} else if (plantform == 1) { |
||||||
|
return "1"; |
||||||
|
} else if (plantform == 2) { |
||||||
|
return "2"; |
||||||
|
} |
||||||
|
return "1"; |
||||||
|
} |
||||||
|
|
||||||
|
public void pushToDevice(MyOutputBean myOutputBean, Map<String, Object> map, int platform, int messageType, String usersStr, String sysKey, String pushSecret) throws Exception { |
||||||
|
String url = MyConfig.getInstance().getPushUrl(); |
||||||
|
String pushImageAndTextUrl = url + "/mpm/v5/open/templatemsg/createAndPush"; |
||||||
|
String accessToken = MyConfig.getInstance().getAccessToken(); |
||||||
|
String pushImageUrl = url + "/mpm/v5/open/image/push"; |
||||||
|
String pushTextUrl = url + "/mpm/v5/open/textmsg/push"; |
||||||
|
String customizeLink = myOutputBean.getCustomizeLink(); |
||||||
|
if (StringUtils.isNotBlank(customizeLink)) { |
||||||
|
if (!customizeLink.startsWith("http")) { |
||||||
|
customizeLink = "http://" + customizeLink; |
||||||
|
} |
||||||
|
} |
||||||
|
if (messageType == 1) {//图文
|
||||||
|
String pcUrl = getResultUrl(map); |
||||||
|
if (StringUtils.isNotBlank(customizeLink)) { |
||||||
|
pcUrl = customizeLink; |
||||||
|
} |
||||||
|
String content = myOutputBean.getContent();//消息内容-需要
|
||||||
|
String title = myOutputBean.getSubject();//标题-需要
|
||||||
|
String picId = myOutputBean.getMediaId();//传入的图片id
|
||||||
|
PushObject bmm = new PushObject(); |
||||||
|
if (StringUtils.isNotBlank(picId)) { |
||||||
|
String picUrl = this.getPicUrl(picId);//获取图片的id
|
||||||
|
bmm.setCoverImgUrl(picUrl); |
||||||
|
} |
||||||
|
bmm.setTitle(title); |
||||||
|
bmm.setSummary(content); |
||||||
|
bmm.setJumpUrl(pcUrl);//pc页面,
|
||||||
|
String appUrl = createScheduleEntryUrl(myOutputBean, map); |
||||||
|
if (StringUtils.isNotBlank(customizeLink)) { |
||||||
|
appUrl = customizeLink; |
||||||
|
} |
||||||
|
bmm.setExtras("{\"appUrl\":\"" + appUrl + "\"}"); |
||||||
|
bmm.setShareRange("0"); |
||||||
|
//0pc&app 1pc 2 app
|
||||||
|
bmm.setOpenType(convertPCAndMob(platform)); |
||||||
|
bmm.setBatchToUsers(usersStr); |
||||||
|
PushUtils.push(pushImageAndTextUrl, pushSecret, sysKey, accessToken, bmm, usersStr); |
||||||
|
} else if (2 == messageType) {//单图
|
||||||
|
PushImageBean pushImageBean = new PushImageBean(); |
||||||
|
String picId = myOutputBean.getMediaId();//传入的图片id
|
||||||
|
String picUrl = this.getPicUrl(picId);//获取图片的id
|
||||||
|
pushImageBean.setImageurl(picUrl); |
||||||
|
pushImageBean.setFilterUser(usersStr); |
||||||
|
String media_id = PushUtils.pushTextOrImage(pushImageUrl, pushImageBean, sysKey, pushSecret); |
||||||
|
// FRContext.getLogger().info("推送成功id 为:" + media_id);
|
||||||
|
// String pcUrl = getResultUrl(map);
|
||||||
|
// if(StringUtils.isNotBlank(myOutputBean.getCustomizeLink())){
|
||||||
|
// pcUrl=myOutputBean.getCustomizeLink();
|
||||||
|
// }
|
||||||
|
// String content = myOutputBean.getContent();//消息内容-需要
|
||||||
|
// String title = myOutputBean.getSubject();//标题-需要
|
||||||
|
// String picId = myOutputBean.getMediaId();//传入的图片id
|
||||||
|
// String picUrl = this.getPicUrl(picId);//获取图片的id
|
||||||
|
// PushObject bmm = new PushObject();
|
||||||
|
//// bmm.setTitle(title);
|
||||||
|
//
|
||||||
|
//// bmm.setJumpUrl(pcUrl);//pc页面,
|
||||||
|
//// String appUrl = createScheduleEntryUrl(myOutputBean, map);
|
||||||
|
//// if(StringUtils.isNotBlank(myOutputBean.getCustomizeLink())){
|
||||||
|
//// appUrl=myOutputBean.getCustomizeLink();
|
||||||
|
//// }
|
||||||
|
//// bmm.setExtras("{\"appUrl\":\"" + appUrl + "\"}");
|
||||||
|
// bmm.setCoverImgUrl(picUrl);
|
||||||
|
// bmm.setShareRange("0");
|
||||||
|
// //0pc&app 1pc 2 app
|
||||||
|
// bmm.setOpenType(convertPCAndMob(platform));
|
||||||
|
// bmm.setBatchToUsers(usersStr);
|
||||||
|
// PushUtils.push(pushImageAndTextUrl, pushSecret, sysKey, accessToken, bmm, usersStr);
|
||||||
|
} else {//文字
|
||||||
|
PushTextBean pushTextBean = new PushTextBean(); |
||||||
|
String content = myOutputBean.getSubject() + " \n" + myOutputBean.getContent();//消息内容-需要
|
||||||
|
pushTextBean.setText(content); |
||||||
|
pushTextBean.setFilterUser(usersStr); |
||||||
|
String media_id = PushUtils.pushTextOrImage(pushTextUrl, pushTextBean, sysKey, pushSecret); |
||||||
|
//// FRContext.getLogger().info("推送成功id 为:" + media_id);
|
||||||
|
// String pcUrl = getResultUrl(map);
|
||||||
|
// String picId = myOutputBean.getMediaId();//传入的图片id
|
||||||
|
// PushObject bmm = new PushObject();
|
||||||
|
//// if (StringUtils.isNotBlank(picId)) {
|
||||||
|
//// String picUrl = this.getPicUrl(picId);//获取图片的id
|
||||||
|
//// bmm.setCoverImgUrl(picUrl);
|
||||||
|
//// }
|
||||||
|
//// String picUrl = this.getPicUrl( picId);//获取图片的id
|
||||||
|
//// bmm.setTitle(title);
|
||||||
|
// String content = myOutputBean.getContent();//消息内容-需要
|
||||||
|
// String title = myOutputBean.getSubject();//标题-需要
|
||||||
|
// bmm.setSummary(title+"\n"+content);
|
||||||
|
// bmm.setTitle("");
|
||||||
|
//// bmm.setSummary(content);
|
||||||
|
//// if(StringUtils.isNotBlank(myOutputBean.getCustomizeLink())){
|
||||||
|
//// pcUrl=myOutputBean.getCustomizeLink();
|
||||||
|
//// }
|
||||||
|
//
|
||||||
|
//// bmm.setJumpUrl(pcUrl);//pc页面,
|
||||||
|
// String appUrl = createScheduleEntryUrl(myOutputBean, map);
|
||||||
|
// if (StringUtils.isNotBlank(customizeLink)) {
|
||||||
|
// appUrl = customizeLink;
|
||||||
|
// }
|
||||||
|
//// bmm.setExtras("{\"appUrl\":\"" + appUrl + "\"}");
|
||||||
|
// bmm.setShareRange("0");
|
||||||
|
// //0pc&app 1pc 2 app
|
||||||
|
// bmm.setOpenType(convertPCAndMob(platform));
|
||||||
|
// bmm.setBatchToUsers(usersStr);
|
||||||
|
// PushUtils.push(pushImageAndTextUrl, pushSecret, sysKey, accessToken, bmm, usersStr);
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private String getPicUrl(String picId) { |
||||||
|
String reportServer = getUrl(); |
||||||
|
StringBuffer sb = new StringBuffer(); |
||||||
|
sb.append(reportServer).append("/url/getImage?imageId=").append(picId); |
||||||
|
return String.valueOf(sb); |
||||||
|
} |
||||||
|
|
||||||
|
// /**
|
||||||
|
// * @param obj 前端定时任务信息
|
||||||
|
// * @return 拼接报表打开的地址:已包含单点登录地址
|
||||||
|
// * @throws Exception
|
||||||
|
// */
|
||||||
|
// private String getEntryUrl(Map<String,String> obj, boolean ispc) throws Exception {
|
||||||
|
// String strTemp = "";
|
||||||
|
// //1.获取当前报表服务器外网地址
|
||||||
|
// String reportServer = getUrl();
|
||||||
|
// //2.拼接报表地址路径
|
||||||
|
// int linkType = obj.optInt("linkType");
|
||||||
|
// String withLink = obj.optString("withLink");
|
||||||
|
// String groupId = obj.optString("groupId");
|
||||||
|
//
|
||||||
|
// if (linkType == LINKTYPE) {
|
||||||
|
// String taskName = obj.optString("taskName");//任务名称
|
||||||
|
// String fireTime = obj.optString("fireTime");
|
||||||
|
// String currentRes = obj.optString("currentRes");
|
||||||
|
// currentRes = CodeUtils.encodeURIComponent(currentRes);
|
||||||
|
// boolean showType = (obj.optInt("showType") != 2);//显示类别
|
||||||
|
// StringBuffer sb = new StringBuffer();
|
||||||
|
// String op = ispc ? "sch" : "h5";
|
||||||
|
// sb.append(reportServer)
|
||||||
|
// .append("?op=").append(op).append("&taskName=").append(taskName);
|
||||||
|
// FRContext.getLogger().info("当前推送的是pc:" + ispc + " op=" + op + " taskName=" + taskName);
|
||||||
|
// if (!ispc) {
|
||||||
|
// sb.append("&cmd=entry_cprurl");
|
||||||
|
// }
|
||||||
|
// sb.append("&fireTime=").append(fireTime).append("¤tRes=").append(currentRes).append("&groupId=").append(groupId).append("&__bypagesize__=").append(showType);
|
||||||
|
// strTemp = String.valueOf(sb);
|
||||||
|
// } else {
|
||||||
|
// URI reportServerTemp = new URI(reportServer);
|
||||||
|
// withLink = reportServerTemp.resolve(withLink).toString();
|
||||||
|
// if (withLink.contains("?")) {
|
||||||
|
// withLink = withLink + "&groupId=" + groupId;
|
||||||
|
// } else {
|
||||||
|
// withLink = withLink + "?groupId=" + groupId;
|
||||||
|
// }
|
||||||
|
// strTemp = withLink;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// //返回
|
||||||
|
// strTemp = getAuthLoginUrl(strTemp);
|
||||||
|
// FRContext.getLogger().info("当前推送完整url:" + strTemp);
|
||||||
|
// return strTemp;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
public static String getUrl() { |
||||||
|
return MyConfig.getInstance().getUrl(); |
||||||
|
} |
||||||
|
|
||||||
|
private JSONObject delImageSource(String title, String desc, String url, String appId, String pic) { |
||||||
|
JSONObject jsonObject = JSONObject.create(); |
||||||
|
jsonObject.put("model", 2);//2:单条图文混排模板
|
||||||
|
jsonObject.put("todo", 0); |
||||||
|
jsonObject.put("sourceid", ""); |
||||||
|
JSONArray list = JSONArray.create(); |
||||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); |
||||||
|
String time = dateFormat.format(new Date()); |
||||||
|
JSONObject model = JSONObject.create(); |
||||||
|
model.put("date", time); |
||||||
|
model.put("title", title); |
||||||
|
model.put("text", desc); |
||||||
|
model.put("zip", ""); |
||||||
|
model.put("url", url); |
||||||
|
model.put("appid", appId); |
||||||
|
model.put("name", RandomStringUtils.randomAlphabetic(5) + ".png"); |
||||||
|
model.put("pic", pic); |
||||||
|
list.add(model); |
||||||
|
jsonObject.put("list", list); |
||||||
|
return jsonObject; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 生成h5地址 |
||||||
|
* |
||||||
|
* @param myBean |
||||||
|
* @param params |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
|
||||||
|
public static String createScheduleEntryUrl(MyOutputBean myBean, Map<String, Object> params) throws Exception { |
||||||
|
String callBack = ""; |
||||||
|
String baseUrl = MyConfig.getInstance().getUrl(); |
||||||
|
FRLogger.getLogger().error("当前推送的信息:" + myBean.toString()); |
||||||
|
FRLogger.getLogger().error("参数:" + params.toString()); |
||||||
|
if (myBean.getLinkOpenType() == MessageUrlType.INNER.toInt()) { |
||||||
|
String taskName = CodeUtils.encodeURIComponent((String) params.get("taskName")); |
||||||
|
String savePath = URLEncoder.encode((String) params.get("saveDirectory"), "UTF-8"); |
||||||
|
savePath = URLEncoder.encode(savePath, "UTF-8"); |
||||||
|
// String savePath = (String) params.get("saveDirectory");
|
||||||
|
// savePath = savePath.replaceAll("\\+", "%20");
|
||||||
|
String showtype = (String) params.get("showType"); |
||||||
|
int taskType = (Integer) params.get("taskType"); |
||||||
|
String username = (String) params.get("username"); |
||||||
|
callBack = baseUrl + "/schedule/result?taskName=" + taskName + "&username=" + username + "&path=" + savePath + "&showType=" + showtype + "&taskType=" + taskType + "&op=h5&terminal=H5"; |
||||||
|
// callBack = CodeUtils.encodeURIComponent(callBack);
|
||||||
|
} else { |
||||||
|
// callBack = CodeUtils.encodeURIComponent(myBean.getCustomizeLink());
|
||||||
|
callBack = myBean.getCustomizeLink(); |
||||||
|
} |
||||||
|
PushEntity entity = new PushEntity(); |
||||||
|
entity.setOpenType(1); |
||||||
|
entity.setUrl(callBack); |
||||||
|
String id = UUID.randomUUID().toString(); |
||||||
|
entity.setPushId(id); |
||||||
|
entity.setId(id); |
||||||
|
try { |
||||||
|
MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<Object>() { |
||||||
|
@Override |
||||||
|
public Object run(DAOContext daoContext) throws Exception { |
||||||
|
daoContext.getDAO(PushDao.class).add(entity); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
// return baseUrl+"/plugin/public/com.fr.plugin.meixin.10/zch/pushBean?id="+id;
|
||||||
|
// String url = baseUrl + "/plugin/public/com.fr.plugin.meixin.10/zch/login?callBack=" + callBack;
|
||||||
|
return callBack; |
||||||
|
// return "https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E6%88%90%E9%83%BD%E9%BA%BB%E8%BE%A3%E5%85%94%E5%A4%B4&rsv_pq=df6696af003bcde2&rsv_t=d4f5SCFCDvdN0%2BJOeALgYYCpRAeM3meoVqEvGtxz%2BWRE7s%2FDHKJ0XcbjNt8&rqlang=cn&rsv_dl=ts_0&rsv_enter=1&rsv_sug3=18&rsv_sug1=14&rsv_sug7=100&rsv_sug2=0&prefixsug=%25E6%2588%2590%25E9%2583%25BD%25E9%25BA%25BB%25E8%25BE%25A3&rsp=0&inputT=10785&rsv_sug4=10785";
|
||||||
|
} |
||||||
|
|
||||||
|
// public static String toBase64(InputStream paramInputStream) {
|
||||||
|
// byte[] arrayOfByte = IOUtils.inputStream2Bytes(paramInputStream);
|
||||||
|
// return Base64.encode(arrayOfByte);
|
||||||
|
// }
|
||||||
|
|
||||||
|
private String getResultUrl(Map<String, Object> params) { |
||||||
|
ServerConfig.getInstance().getReportServletMapping(); |
||||||
|
String url = MyConfig.getInstance().getUrl() + "/schedule/result?taskName=%s&username=%s&path=%s&showType=%s&taskType=%s"; |
||||||
|
String taskName = CodeUtils.encodeURIComponent((String) params.get("taskName")); |
||||||
|
String saveDirectory = CodeUtils.encodeURIComponent((String) params.get("saveDirectory")); |
||||||
|
saveDirectory = saveDirectory.replaceAll("\\+", "%20"); |
||||||
|
String showType = (String) params.get("showType"); |
||||||
|
int taskType = (Integer) params.get("taskType"); |
||||||
|
String username = (String) params.get("username"); |
||||||
|
String callBack = String.format(url, taskName, username, saveDirectory, showType, taskType); |
||||||
|
PushEntity entity = new PushEntity(); |
||||||
|
entity.setOpenType(1); |
||||||
|
entity.setUrl(callBack); |
||||||
|
String id = UUID.randomUUID().toString(); |
||||||
|
entity.setPushId(id); |
||||||
|
entity.setId(id); |
||||||
|
String baseUrl = MyConfig.getInstance().getUrl(); |
||||||
|
try { |
||||||
|
MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<Object>() { |
||||||
|
@Override |
||||||
|
public Object run(DAOContext daoContext) throws Exception { |
||||||
|
daoContext.getDAO(PushDao.class).add(entity); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
// return baseUrl+"/plugin/public/com.fr.plugin.meixin.10/zch/pushBean?id="+id;
|
||||||
|
return callBack; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
|
||||||
|
@FunctionRecorder |
||||||
|
public class MyRequest { |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractAccessProvider; |
||||||
|
|
||||||
|
public class MySingleLoginAccessProvider extends AbstractAccessProvider { |
||||||
|
@Override |
||||||
|
public boolean access(String username, String password, String ticket) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import java.io.PrintWriter; |
||||||
|
import java.io.StringWriter; |
||||||
|
|
||||||
|
public class MyStartupThred extends Thread { |
||||||
|
|
||||||
|
public void run() { |
||||||
|
try { |
||||||
|
if (StringUtils.isBlank(MyConfig.getInstance().getEid())) { |
||||||
|
FineLoggerFactory.getLogger().error("未配置环境,结束。"); |
||||||
|
return; |
||||||
|
} |
||||||
|
FineLoggerFactory.getLogger().error("同步用户和同步部门开始"); |
||||||
|
// MyCorpManager.getInstance().syncDepList();
|
||||||
|
FineLoggerFactory.getLogger().error("部门完成"); |
||||||
|
// MyUserSyncManager.getInstance().synUserList();
|
||||||
|
FineLoggerFactory.getLogger().error("用户完成"); |
||||||
|
FineLoggerFactory.getLogger().error("同步用户和同步部门完成"); |
||||||
|
} catch (Exception var2) { |
||||||
|
var2.printStackTrace(); |
||||||
|
StringWriter writer = new StringWriter(); |
||||||
|
PrintWriter printWriter = new PrintWriter(writer); |
||||||
|
var2.printStackTrace(printWriter); |
||||||
|
String s = writer.getBuffer().toString(); |
||||||
|
FineLoggerFactory.getLogger().error("同步用户和同步部门出错:{},\n ex detail:{}", var2.getMessage(), s); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractSystemOptionProvider; |
||||||
|
import com.fr.decision.web.MainComponent; |
||||||
|
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.fr.web.struct.Atom; |
||||||
|
|
||||||
|
@FunctionRecorder |
||||||
|
public class MySystemOption extends AbstractSystemOptionProvider { |
||||||
|
public MySystemOption() { |
||||||
|
System.out.println("初始化了哦"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
@ExecuteFunctionRecord |
||||||
|
public String id() { |
||||||
|
return "MeixinSystemOption"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String displayName() { |
||||||
|
return "云家插件10"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int sortIndex() { |
||||||
|
return 2; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Atom attach() { |
||||||
|
return MainComponent.KEY; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Atom client() { |
||||||
|
return MyComponent.KEY; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractURLAliasProvider; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAlias; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAliasFactory; |
||||||
|
|
||||||
|
public class MyUrlAliasProvider extends AbstractURLAliasProvider { |
||||||
|
@Override |
||||||
|
public URLAlias[] registerAlias() { |
||||||
|
return new URLAlias[]{ |
||||||
|
//第一个参数就是就是别名地址,第二个就是HttpHandler中设置的地址,第三个参数就是设置该请求是否公开(需要和对应的HttpHandler.isPublic方法返回一直,要不然会报错404),返回的是一个非通配
|
||||||
|
URLAliasFactory.createPluginAlias("/saml_login_callback", "/hf/login", true), |
||||||
|
URLAliasFactory.createPluginAlias("/getImage", "/getImage", true) |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,279 @@ |
|||||||
|
package com.fr.plugin.core; |
||||||
|
|
||||||
|
import com.fr.decision.authority.AuthorityContext; |
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.webservice.bean.user.UserBean; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.log.FineLoggerProvider; |
||||||
|
import com.fr.plugin.beans.MyDepBean; |
||||||
|
import com.fr.plugin.beans.MyUserBean; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.dao.MyAgentDao; |
||||||
|
import com.fr.plugin.dao.MyUserDao; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.entitys.MyUserEntity; |
||||||
|
import com.fr.plugin.utils.WebUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.condition.QueryCondition; |
||||||
|
import com.fr.stable.query.restriction.Restriction; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
public class MyUserSyncManager { |
||||||
|
List<MyUserBean> list = new ArrayList<>(); |
||||||
|
|
||||||
|
public static MyUserSyncManager getInstance() { |
||||||
|
return MyUserSyncManager.HOLDER.INSTANCE; |
||||||
|
} |
||||||
|
|
||||||
|
private MyUserSyncManager() { |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 同步用户,先把数据库中的所有用户查询出来, |
||||||
|
*/ |
||||||
|
public void synUserList() throws Exception { |
||||||
|
MyConfig instance = MyConfig.getInstance(); |
||||||
|
String eid = instance.getEid(); |
||||||
|
String readKey = instance.getReadKey(); |
||||||
|
FineLoggerProvider logger = FineLoggerFactory.getLogger(); |
||||||
|
if (StringUtils.isNotBlank(eid) && StringUtils.isNotBlank(readKey)) { |
||||||
|
int page = 0; |
||||||
|
List<String > allIdsFormService=new ArrayList<>(); |
||||||
|
while (true) { |
||||||
|
List<MyUserBean> userByPage = WebUtils.getUserByPage(eid, readKey, page); |
||||||
|
if (userByPage.isEmpty()) { |
||||||
|
break; |
||||||
|
} |
||||||
|
for (MyUserBean myUserBean : userByPage) { |
||||||
|
String openId = myUserBean.getOpenId(); |
||||||
|
allIdsFormService.add(openId); |
||||||
|
if (userNotExist(openId)) { |
||||||
|
MyUserEntity entity = myUserBean.createEntity(); |
||||||
|
save(entity); |
||||||
|
} else { |
||||||
|
MyUserEntity entity = myUserBean.createEntity(); |
||||||
|
update(entity); |
||||||
|
} |
||||||
|
} |
||||||
|
logger.error("同步用户第:{}页", page); |
||||||
|
page++; |
||||||
|
} |
||||||
|
List<String> allUserId = findAllUserId(); |
||||||
|
allUserId.removeAll(allIdsFormService);//减去服务端的ids,得到一个
|
||||||
|
if (!allUserId.isEmpty()) { |
||||||
|
for (String s : allUserId) { |
||||||
|
logger.error("删除了一个用户:{}",s); |
||||||
|
remove(s); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private List<String> findAllUserId() throws Exception { |
||||||
|
List<MyUserEntity> entityList = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<MyUserEntity>>() { |
||||||
|
public List<MyUserEntity> run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
return content.getDAO(MyUserDao.class).find(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
List<String >ids=new ArrayList<>(entityList.size()); |
||||||
|
for (MyUserEntity entity : entityList) { |
||||||
|
ids.add(entity.getOpenId()); |
||||||
|
} |
||||||
|
return ids; |
||||||
|
} |
||||||
|
public void saveOrUpdateUser(MyUserBean userBean) throws Exception { |
||||||
|
String openId = userBean.getOpenId(); |
||||||
|
if (userNotExist(openId)) { |
||||||
|
MyUserEntity entity = userBean.createEntity(); |
||||||
|
save(entity); |
||||||
|
} else { |
||||||
|
MyUserEntity entity = userBean.createEntity(); |
||||||
|
update(entity); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private boolean userNotExist(final String openid) throws Exception { |
||||||
|
return MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<MyUserEntity>>() { |
||||||
|
public List<MyUserEntity> run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("openId", openid)); |
||||||
|
return content.getDAO(MyUserDao.class).find(queryCondition); |
||||||
|
} |
||||||
|
}).isEmpty(); |
||||||
|
} |
||||||
|
private void remove(final String openId) throws Exception { |
||||||
|
MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<MyUserEntity>() { |
||||||
|
public MyUserEntity run(DAOContext content) throws Exception { |
||||||
|
content.getDAO(MyUserDao.class).remove(QueryFactory.create().addRestriction(RestrictionFactory.eq("openId",openId))); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
private void save(final MyUserEntity entity) throws Exception { |
||||||
|
MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<MyUserEntity>() { |
||||||
|
public MyUserEntity run(DAOContext content) throws Exception { |
||||||
|
content.getDAO(MyUserDao.class).add(entity); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private void update(final MyUserEntity entity) throws Exception { |
||||||
|
MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<MyUserEntity>() { |
||||||
|
public MyUserEntity run(DAOContext content) throws Exception { |
||||||
|
content.getDAO(MyUserDao.class).update(entity); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 通过部门长名取用户 |
||||||
|
* |
||||||
|
* @param depName |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<MyUserBean> getDepartmentUserList(final String depName, final int start, final int size) throws Exception { |
||||||
|
if (StringUtils.isNotBlank(depName)) { |
||||||
|
List<MyUserEntity> entityList = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<MyUserEntity>>() { |
||||||
|
public List<MyUserEntity> run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.and(RestrictionFactory.like("department", depName + "%"), RestrictionFactory.eq("status", 1))); |
||||||
|
queryCondition.setSkip(start); |
||||||
|
queryCondition.setCount(size); |
||||||
|
return content.getDAO(MyUserDao.class).find(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
return entityList.stream().map(MyUserEntity::createBean).collect(Collectors.toList()); |
||||||
|
} else { |
||||||
|
List<MyUserEntity> entityList = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<MyUserEntity>>() { |
||||||
|
public List<MyUserEntity> run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("status", 1)); |
||||||
|
queryCondition.setSkip(start); |
||||||
|
queryCondition.setCount(size); |
||||||
|
return content.getDAO(MyUserDao.class).find(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
return entityList.stream().map(MyUserEntity::createBean).collect(Collectors.toList()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static User getFSUserByPhone(String phone) throws Exception { |
||||||
|
return AuthorityContext.getInstance().getUserController().findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("mobile", phone))); |
||||||
|
} |
||||||
|
|
||||||
|
public static User getFSUserByName(String name) throws Exception { |
||||||
|
return AuthorityContext.getInstance().getUserController().findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("userName", name))); |
||||||
|
} |
||||||
|
|
||||||
|
public List<MyUserBean> getUserList(final String key, final int start, final int count) throws Exception { |
||||||
|
List<MyUserEntity> entityList = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<MyUserEntity>>() { |
||||||
|
public List<MyUserEntity> run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.or(RestrictionFactory.like("name", "%" + key + "%"), RestrictionFactory.like("phone", "%" + key + "%"))); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("status", 1)); |
||||||
|
queryCondition.setSkip(start); |
||||||
|
queryCondition.setCount(count); |
||||||
|
System.out.println(queryCondition); |
||||||
|
return content.getDAO(MyUserDao.class).find(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
return entityList.stream().map(MyUserEntity::createBean).collect(Collectors.toList()); |
||||||
|
} |
||||||
|
|
||||||
|
public long countUserList(final String key) throws Exception { |
||||||
|
|
||||||
|
return MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<Long>() { |
||||||
|
public Long run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.or(RestrictionFactory.like("name", "%" + key + "%"), RestrictionFactory.like("phone", "%" + key + "%"))); |
||||||
|
System.out.println(queryCondition); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("status", 1)); |
||||||
|
return content.getDAO(MyUserDao.class).count(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
public Long countDepartmentUserList(String depName) throws Exception { |
||||||
|
if (StringUtils.isBlank(depName)) { |
||||||
|
return MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<Long>() { |
||||||
|
public Long run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("status", 1)); |
||||||
|
System.out.println(queryCondition); |
||||||
|
return content.getDAO(MyUserDao.class).count(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
} else { |
||||||
|
return MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<Long>() { |
||||||
|
public Long run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("status", 1)); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.like("department", depName + "%")); |
||||||
|
System.out.println(queryCondition); |
||||||
|
return content.getDAO(MyUserDao.class).count(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public MyUserBean getUserByOpenId(final String openid) throws Exception { |
||||||
|
MyUserEntity entity = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<MyUserEntity>() { |
||||||
|
public MyUserEntity run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("openId", openid)); |
||||||
|
System.out.println(queryCondition); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("status", 1)); |
||||||
|
return content.getDAO(MyUserDao.class).findOne(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
return entity == null ? null : entity.createBean(); |
||||||
|
} |
||||||
|
|
||||||
|
public MyUserEntity getUserByFrName(String names) throws Exception { |
||||||
|
MyUserEntity entity = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<MyUserEntity>() { |
||||||
|
public MyUserEntity run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("fsUserName", names)); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("status", 1)); |
||||||
|
System.out.println(queryCondition); |
||||||
|
return content.getDAO(MyUserDao.class).findOne(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
return entity; |
||||||
|
} |
||||||
|
|
||||||
|
public MyUserEntity getUserByPhone(final String mobile) throws Exception { |
||||||
|
MyUserEntity entity = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<MyUserEntity>() { |
||||||
|
public MyUserEntity run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("phone", mobile)); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("status", 1)); |
||||||
|
System.out.println(queryCondition); |
||||||
|
return content.getDAO(MyUserDao.class).findOne(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
return entity; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private static class HOLDER { |
||||||
|
private static final MyUserSyncManager INSTANCE = new MyUserSyncManager(); |
||||||
|
|
||||||
|
private HOLDER() { |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.fr.plugin.dao; |
||||||
|
|
||||||
|
import com.fr.plugin.beans.MyAgentBean; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.entitys.OutputMyEntity; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.session.DAOSession; |
||||||
|
|
||||||
|
public class MyAgentDao extends BaseDAO<MyAgentEntity> { |
||||||
|
public MyAgentDao(DAOSession daoSession) { |
||||||
|
super(daoSession); |
||||||
|
} |
||||||
|
|
||||||
|
protected Class<MyAgentEntity> getEntityClass() { |
||||||
|
return MyAgentEntity.class; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package com.fr.plugin.dao; |
||||||
|
|
||||||
|
import com.fr.plugin.entitys.MyDepEntity; |
||||||
|
import com.fr.plugin.entitys.MyUserEntity; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.session.DAOSession; |
||||||
|
|
||||||
|
public class MyDepDao extends BaseDAO<MyDepEntity> { |
||||||
|
public MyDepDao(DAOSession daoSession) { |
||||||
|
super(daoSession); |
||||||
|
} |
||||||
|
protected Class<MyDepEntity> getEntityClass() { |
||||||
|
return MyDepEntity.class; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.fr.plugin.dao; |
||||||
|
|
||||||
|
import com.fr.plugin.entitys.OutputMyEntity; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.session.DAOSession; |
||||||
|
|
||||||
|
public class MyEntityDao extends BaseDAO<OutputMyEntity> { |
||||||
|
public MyEntityDao(DAOSession daoSession) { |
||||||
|
super(daoSession); |
||||||
|
} |
||||||
|
protected Class<OutputMyEntity> getEntityClass() { |
||||||
|
return OutputMyEntity.class; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package com.fr.plugin.dao; |
||||||
|
|
||||||
|
import com.fr.plugin.entitys.MyUserEntity; |
||||||
|
import com.fr.plugin.entitys.OutputMyEntity; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.session.DAOSession; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class MyUserDao extends BaseDAO<MyUserEntity> { |
||||||
|
public MyUserDao(DAOSession daoSession) { |
||||||
|
super(daoSession); |
||||||
|
} |
||||||
|
protected Class<MyUserEntity> getEntityClass() { |
||||||
|
return MyUserEntity.class; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package com.fr.plugin.dao; |
||||||
|
|
||||||
|
import com.fr.plugin.entitys.PushEntity; |
||||||
|
import com.fr.stable.db.dao.BaseDAO; |
||||||
|
import com.fr.stable.db.session.DAOSession; |
||||||
|
|
||||||
|
public class PushDao extends BaseDAO<PushEntity> { |
||||||
|
public PushDao(DAOSession daoSession) { |
||||||
|
super(daoSession); |
||||||
|
} |
||||||
|
|
||||||
|
protected Class<PushEntity> getEntityClass() { |
||||||
|
return PushEntity.class; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,83 @@ |
|||||||
|
package com.fr.plugin.entitys; |
||||||
|
|
||||||
|
import com.fr.plugin.beans.MyAgentBean; |
||||||
|
import com.fr.stable.db.entity.BaseEntity; |
||||||
|
import com.fr.third.javax.persistence.Column; |
||||||
|
import com.fr.third.javax.persistence.Entity; |
||||||
|
import com.fr.third.javax.persistence.Table; |
||||||
|
|
||||||
|
@Entity |
||||||
|
@Table( |
||||||
|
name = "fine_xxxx_zch_agent" |
||||||
|
) |
||||||
|
public class MyAgentEntity extends BaseEntity { |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "agentName" |
||||||
|
) |
||||||
|
private String agentName = ""; |
||||||
|
@Column( |
||||||
|
name = "sysKey" |
||||||
|
) |
||||||
|
private String sysKey = ""; |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "secret" |
||||||
|
) |
||||||
|
private String secret = ""; |
||||||
|
|
||||||
|
|
||||||
|
public MyAgentBean createBean(MyAgentBean var1) { |
||||||
|
var1.setId(this.getId()); |
||||||
|
var1.setAgentName(this.getAgentName()); |
||||||
|
var1.setSecret(this.getSecret()); |
||||||
|
var1.setSysKey(this.getSysKey()); |
||||||
|
return var1; |
||||||
|
} |
||||||
|
|
||||||
|
public MyAgentEntity id(String var1) { |
||||||
|
this.setId(var1); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAgentName() { |
||||||
|
return this.agentName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAgentName(String var1) { |
||||||
|
this.agentName = var1; |
||||||
|
} |
||||||
|
|
||||||
|
public MyAgentEntity agentName(String var1) { |
||||||
|
this.setAgentName(var1); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public MyAgentEntity sysKey(String sysKey) { |
||||||
|
this.sysKey = sysKey; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSecret() { |
||||||
|
return this.secret; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSecret(String var1) { |
||||||
|
this.secret = var1; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSysKey() { |
||||||
|
return sysKey; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSysKey(String sysKey) { |
||||||
|
this.sysKey = sysKey; |
||||||
|
} |
||||||
|
|
||||||
|
public MyAgentEntity secret(String var1) { |
||||||
|
this.setSecret(var1); |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,72 @@ |
|||||||
|
package com.fr.plugin.entitys; |
||||||
|
|
||||||
|
import com.fr.plugin.beans.MyDepBean; |
||||||
|
import com.fr.stable.db.entity.BaseEntity; |
||||||
|
import com.fr.third.javax.persistence.Column; |
||||||
|
import com.fr.third.javax.persistence.Entity; |
||||||
|
import com.fr.third.javax.persistence.Table; |
||||||
|
|
||||||
|
@Entity |
||||||
|
@Table( |
||||||
|
name = "fine_xxxx_zch_dep" |
||||||
|
) |
||||||
|
public class MyDepEntity extends BaseEntity { |
||||||
|
@Column( |
||||||
|
name = "name" |
||||||
|
) |
||||||
|
private String name; |
||||||
|
@Column( |
||||||
|
name = "depName" |
||||||
|
) |
||||||
|
private String depName; |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "top1" |
||||||
|
) |
||||||
|
private int top1; |
||||||
|
@Column( |
||||||
|
name = "parentId" |
||||||
|
) |
||||||
|
private String parentId; |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
|
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
public String getDepName() { |
||||||
|
return depName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDepName(String depName) { |
||||||
|
this.depName = depName; |
||||||
|
} |
||||||
|
|
||||||
|
public int getTop1() { |
||||||
|
return top1; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTop1(int top) { |
||||||
|
this.top1 = top; |
||||||
|
} |
||||||
|
|
||||||
|
public String getParentId() { |
||||||
|
return parentId; |
||||||
|
} |
||||||
|
|
||||||
|
public void setParentId(String parentId) { |
||||||
|
this.parentId = parentId; |
||||||
|
} |
||||||
|
public MyDepBean createBean(){ |
||||||
|
MyDepBean bean=new MyDepBean(); |
||||||
|
bean.setDepName(this.depName); |
||||||
|
bean.setId(this.getId()); |
||||||
|
bean.setName(this.name); |
||||||
|
bean.setParentId(this.parentId); |
||||||
|
bean.setOrder(this.top1); |
||||||
|
return bean; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,139 @@ |
|||||||
|
package com.fr.plugin.entitys; |
||||||
|
|
||||||
|
import com.fr.plugin.beans.MyAgentBean; |
||||||
|
import com.fr.plugin.beans.MyUserBean; |
||||||
|
import com.fr.stable.db.entity.BaseEntity; |
||||||
|
import com.fr.third.javax.persistence.Column; |
||||||
|
import com.fr.third.javax.persistence.Entity; |
||||||
|
import com.fr.third.javax.persistence.Table; |
||||||
|
|
||||||
|
@Entity |
||||||
|
@Table( |
||||||
|
name = "fine_xxxx_zch_user" |
||||||
|
) |
||||||
|
public class MyUserEntity extends BaseEntity { |
||||||
|
@Column( |
||||||
|
name = "openId" |
||||||
|
) |
||||||
|
private String openId; |
||||||
|
@Column( |
||||||
|
name = "name" |
||||||
|
) |
||||||
|
private String name; |
||||||
|
@Column( |
||||||
|
name = "photoUrl" |
||||||
|
) |
||||||
|
private String photoUrl; |
||||||
|
@Column( |
||||||
|
name = "jobNo" |
||||||
|
) |
||||||
|
private String jobNo; |
||||||
|
@Column( |
||||||
|
name = "depName" |
||||||
|
) |
||||||
|
private String department; |
||||||
|
@Column( |
||||||
|
name = "status" |
||||||
|
) |
||||||
|
private int status; |
||||||
|
@Column( |
||||||
|
name = "phone" |
||||||
|
) |
||||||
|
private String phone; |
||||||
|
@Column( |
||||||
|
name = "fsUserName" |
||||||
|
) |
||||||
|
private String fsUserName; |
||||||
|
|
||||||
|
public String getFsUserName() { |
||||||
|
return fsUserName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFsUserName(String fsUserName) { |
||||||
|
this.fsUserName = fsUserName; |
||||||
|
} |
||||||
|
|
||||||
|
public String getPhone() { |
||||||
|
return phone; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPhone(String phone) { |
||||||
|
this.phone = phone; |
||||||
|
} |
||||||
|
|
||||||
|
public MyUserBean createBean() { |
||||||
|
MyUserBean var1 =new MyUserBean(); |
||||||
|
var1.setId(this.openId); |
||||||
|
var1.setOpenId(this.getOpenId()); |
||||||
|
var1.setName(this.getName()); |
||||||
|
var1.setDepartment(this.getDepartment()); |
||||||
|
var1.setJobNo(this.getJobNo()); |
||||||
|
var1.setPhotoUrl(this.getPhotoUrl()); |
||||||
|
var1.setStatus(this.getStatus()); |
||||||
|
var1.setPhone(this.getPhone()); |
||||||
|
var1.setFsUserName(this.getFsUserName()); |
||||||
|
return var1; |
||||||
|
} |
||||||
|
|
||||||
|
public String getOpenId() { |
||||||
|
return openId; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOpenId(String openId) { |
||||||
|
this.openId = openId; |
||||||
|
} |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
|
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
public String getPhotoUrl() { |
||||||
|
return photoUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPhotoUrl(String photoUrl) { |
||||||
|
this.photoUrl = photoUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getJobNo() { |
||||||
|
return jobNo; |
||||||
|
} |
||||||
|
|
||||||
|
public void setJobNo(String jobNo) { |
||||||
|
this.jobNo = jobNo; |
||||||
|
} |
||||||
|
|
||||||
|
public String getDepartment() { |
||||||
|
return department; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDepartment(String department) { |
||||||
|
this.department = department; |
||||||
|
} |
||||||
|
|
||||||
|
public int getStatus() { |
||||||
|
return status; |
||||||
|
} |
||||||
|
|
||||||
|
public void setStatus(int status) { |
||||||
|
this.status = status; |
||||||
|
} |
||||||
|
|
||||||
|
/// "openId":String, //人员的openid
|
||||||
|
// "name":String, //姓名
|
||||||
|
// "photoUrl":String, //头像URL
|
||||||
|
// "phone":String, //手机号码
|
||||||
|
// "isHidePhone":String, //是否在通讯录中隐藏手机号码,0: 不隐藏; 1: 隐藏,默认为0
|
||||||
|
// "email":String, //邮箱
|
||||||
|
// "department":String, //组织长名称
|
||||||
|
// "jobNo":String, //企业工号
|
||||||
|
// "jobTitle":String, //职位
|
||||||
|
// "gender":int, //性别,0: 不确定; 1: 男; 2: 女
|
||||||
|
// "status":int, //状态 0: 注销,1: 正常,2: 禁用
|
||||||
|
// "orgUserType":int //是否部门负责人 0:否, 1:是
|
||||||
|
// "positiveDate":String,//转正日期,格式如:"2018-01-01"
|
||||||
|
} |
@ -0,0 +1,219 @@ |
|||||||
|
package com.fr.plugin.entitys; |
||||||
|
|
||||||
|
import com.fr.plugin.beans.MyOutputBean; |
||||||
|
import com.fr.schedule.base.entity.AbstractScheduleEntity; |
||||||
|
import com.fr.schedule.base.entity.output.BaseOutputActionEntity; |
||||||
|
import com.fr.stable.db.entity.TableAssociation; |
||||||
|
import com.fr.third.javax.persistence.Column; |
||||||
|
import com.fr.third.javax.persistence.Entity; |
||||||
|
import com.fr.third.javax.persistence.Table; |
||||||
|
|
||||||
|
@Entity |
||||||
|
@Table( |
||||||
|
name = "fine_xxxx_output" |
||||||
|
) |
||||||
|
@TableAssociation( |
||||||
|
associated = true |
||||||
|
) |
||||||
|
public class OutputMyEntity extends AbstractScheduleEntity { |
||||||
|
private static final String COLUMN_TERMINAL = "terminal"; |
||||||
|
private static final String COLUMN_AGENTID = "agentId"; |
||||||
|
private static final String COLUMN_SUBJECT = "subject"; |
||||||
|
private static final String COLUMN_CONTENT = "content"; |
||||||
|
private static final String COLUMN_LINK_OPEN_TYPE = "linkOpenType"; |
||||||
|
private static final String COLUMN_CUSTOMIZE_LINK = "customizeLink"; |
||||||
|
private static final String COLUMN_TYPE = "type"; |
||||||
|
private static final String COLUMN_MEDIA_ID = "mediaId"; |
||||||
|
@Column( |
||||||
|
name = "terminal" |
||||||
|
) |
||||||
|
private int terminal = 518; |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "messageType" |
||||||
|
) |
||||||
|
private int messageType = 1; |
||||||
|
@Column( |
||||||
|
name = "platform" |
||||||
|
) |
||||||
|
private int platform = 1; |
||||||
|
@Column( |
||||||
|
name = "agentId" |
||||||
|
) |
||||||
|
private String agentId = null; |
||||||
|
@Column( |
||||||
|
name = "subject", |
||||||
|
length = 65536 |
||||||
|
) |
||||||
|
|
||||||
|
private String subject; |
||||||
|
@Column( |
||||||
|
name = "actionName", |
||||||
|
nullable = false |
||||||
|
) |
||||||
|
private String actionName = null; |
||||||
|
@Column( |
||||||
|
name = "content", |
||||||
|
length = 65536 |
||||||
|
) |
||||||
|
private String content; |
||||||
|
@Column( |
||||||
|
name = "linkOpenType" |
||||||
|
) |
||||||
|
private int linkOpenType = -1; |
||||||
|
@Column( |
||||||
|
name = "customizeLink", |
||||||
|
length = 65536 |
||||||
|
) |
||||||
|
private String customizeLink; |
||||||
|
@Column( |
||||||
|
name = "resultURL", |
||||||
|
length = 1000 |
||||||
|
) |
||||||
|
private String resultURL = null; |
||||||
|
@Column( |
||||||
|
name = "outputId" |
||||||
|
) |
||||||
|
private String outputId = null; |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "type" |
||||||
|
) |
||||||
|
private int type; |
||||||
|
@Column( |
||||||
|
name = "mediaId" |
||||||
|
) |
||||||
|
private String mediaId; |
||||||
|
|
||||||
|
@Column( |
||||||
|
name = "sysKey" |
||||||
|
) |
||||||
|
private String sysKey; |
||||||
|
|
||||||
|
|
||||||
|
public OutputMyEntity() { |
||||||
|
} |
||||||
|
|
||||||
|
public int getMessageType() { |
||||||
|
return messageType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setMessageType(int messageType) { |
||||||
|
this.messageType = messageType; |
||||||
|
} |
||||||
|
|
||||||
|
public int getPlatform() { |
||||||
|
return platform; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPlatform(int platform) { |
||||||
|
this.platform = platform; |
||||||
|
} |
||||||
|
|
||||||
|
public MyOutputBean createBean() { |
||||||
|
MyOutputBean var1 = new MyOutputBean(); |
||||||
|
var1.setId(this.getId()); |
||||||
|
var1.setSysKey(this.getSysKey()); |
||||||
|
var1.setTerminal(this.getTerminal()); |
||||||
|
var1.setSubject(this.getSubject()); |
||||||
|
var1.setContent(this.getContent()); |
||||||
|
var1.setLinkOpenType(this.getLinkOpenType()); |
||||||
|
var1.setCustomizeLink(this.getCustomizeLink()); |
||||||
|
var1.setType(this.getType()); |
||||||
|
var1.setMediaId(this.getMediaId()); |
||||||
|
var1.setActionName(this.getActionName()); |
||||||
|
var1.setAgentId(this.getAgentId()); |
||||||
|
var1.setPlatform(this.getPlatform()); |
||||||
|
var1.setMessageType(this.getMessageType()); |
||||||
|
var1.setResultURL(this.getResultURL()); |
||||||
|
return var1; |
||||||
|
} |
||||||
|
public String getActionName() { |
||||||
|
return this.actionName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setActionName(String var1) { |
||||||
|
this.actionName = var1; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSysKey() { |
||||||
|
return sysKey; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSysKey(String sysKey) { |
||||||
|
this.sysKey = sysKey; |
||||||
|
} |
||||||
|
|
||||||
|
public String getResultURL() { |
||||||
|
return this.resultURL; |
||||||
|
} |
||||||
|
|
||||||
|
public void setResultURL(String var1) { |
||||||
|
this.resultURL = var1; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public String getAgentId() { |
||||||
|
return this.agentId; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAgentId(String var1) { |
||||||
|
this.agentId = var1; |
||||||
|
} |
||||||
|
|
||||||
|
public int getTerminal() { |
||||||
|
return this.terminal; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTerminal(int var1) { |
||||||
|
this.terminal = var1; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSubject() { |
||||||
|
return this.subject; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSubject(String var1) { |
||||||
|
this.subject = var1; |
||||||
|
} |
||||||
|
|
||||||
|
public String getContent() { |
||||||
|
return this.content; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContent(String var1) { |
||||||
|
this.content = var1; |
||||||
|
} |
||||||
|
|
||||||
|
public int getLinkOpenType() { |
||||||
|
return this.linkOpenType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLinkOpenType(int var1) { |
||||||
|
this.linkOpenType = var1; |
||||||
|
} |
||||||
|
|
||||||
|
public String getCustomizeLink() { |
||||||
|
return this.customizeLink; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCustomizeLink(String var1) { |
||||||
|
this.customizeLink = var1; |
||||||
|
} |
||||||
|
|
||||||
|
public int getType() { |
||||||
|
return this.type; |
||||||
|
} |
||||||
|
|
||||||
|
public void setType(int var1) { |
||||||
|
this.type = var1; |
||||||
|
} |
||||||
|
|
||||||
|
public String getMediaId() { |
||||||
|
return this.mediaId; |
||||||
|
} |
||||||
|
|
||||||
|
public void setMediaId(String var1) { |
||||||
|
this.mediaId = var1; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
package com.fr.plugin.entitys; |
||||||
|
|
||||||
|
import com.fr.stable.db.entity.BaseEntity; |
||||||
|
import com.fr.third.javax.persistence.Column; |
||||||
|
import com.fr.third.javax.persistence.Entity; |
||||||
|
import com.fr.third.javax.persistence.Table; |
||||||
|
|
||||||
|
@Entity |
||||||
|
@Table( |
||||||
|
name = "fine_xxxx_pushs" |
||||||
|
) |
||||||
|
public class PushEntity extends BaseEntity { |
||||||
|
@Column( |
||||||
|
name = "pushId" |
||||||
|
) |
||||||
|
private String pushId; |
||||||
|
@Column( |
||||||
|
name = "url", |
||||||
|
length = 2048 |
||||||
|
) |
||||||
|
private String url; |
||||||
|
@Column( |
||||||
|
name = "openType" |
||||||
|
) |
||||||
|
private Integer openType; |
||||||
|
public String getPushId() { |
||||||
|
return pushId; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPushId(String pushId) { |
||||||
|
this.pushId = pushId; |
||||||
|
} |
||||||
|
|
||||||
|
public String getUrl() { |
||||||
|
return url; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUrl(String url) { |
||||||
|
this.url = url; |
||||||
|
} |
||||||
|
|
||||||
|
public Integer getOpenType() { |
||||||
|
return openType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOpenType(Integer openType) { |
||||||
|
this.openType = openType; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
public class Filter { |
||||||
|
private String user_id; |
||||||
|
|
||||||
|
public String getUser_id() { |
||||||
|
return user_id; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUser_id(String user_id) { |
||||||
|
this.user_id = user_id; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.fasterxml.jackson.core.JsonGenerator; |
||||||
|
import com.fr.third.fasterxml.jackson.databind.JsonNode; |
||||||
|
import com.fr.third.fasterxml.jackson.databind.ObjectMapper; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.io.StringWriter; |
||||||
|
|
||||||
|
public class JsonUtils { |
||||||
|
private JsonUtils() { |
||||||
|
} |
||||||
|
|
||||||
|
public static JsonNode parseToJsonNode(String json) throws IOException { |
||||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||||
|
if (StringUtils.isBlank(json)) { |
||||||
|
return objectMapper.createObjectNode(); |
||||||
|
} else { |
||||||
|
try { |
||||||
|
return objectMapper.readTree(json); |
||||||
|
} catch (Exception var3) { |
||||||
|
throw new IOException(var3); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static String toJsonString(Object obj) { |
||||||
|
ObjectMapper objectMapper = new ObjectMapper(); |
||||||
|
StringWriter stringWriter = new StringWriter(); |
||||||
|
JsonGenerator jsonGenerator = null; |
||||||
|
try { |
||||||
|
jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(stringWriter); |
||||||
|
objectMapper.writeValue(jsonGenerator, obj); |
||||||
|
} catch (IOException var5) { |
||||||
|
} |
||||||
|
|
||||||
|
return stringWriter.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
import com.fr.plugin.core.MyCoreDBAccess; |
||||||
|
import com.fr.plugin.dao.MyAgentDao; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class MyAgentUtils { |
||||||
|
public static String getAgentIdBySecret(String var9, String var10) { |
||||||
|
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
public static List<MyAgentEntity> getAgentsSortedByTimeStamp() throws Exception { |
||||||
|
return (List) MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<MyAgentEntity>>() { |
||||||
|
public List<MyAgentEntity> run(DAOContext var1) throws Exception { |
||||||
|
return ((MyAgentDao)var1.getDAO(MyAgentDao.class)).find(QueryFactory.create().addSort("timeStamp", true)); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static MyAgentEntity getAgentById(String agentId) throws Exception { |
||||||
|
return MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<MyAgentEntity>() { |
||||||
|
public MyAgentEntity run(DAOContext var1) throws Exception { |
||||||
|
return var1.getDAO(MyAgentDao.class).findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("id",agentId))); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,61 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.PluginLicense; |
||||||
|
import com.fr.plugin.PluginLicenseManager; |
||||||
|
import com.fr.plugin.config.MyTimingTaskConfig; |
||||||
|
import com.fr.plugin.constant.Week; |
||||||
|
import com.fr.plugin.core.MyCoreDBAccess; |
||||||
|
import com.fr.plugin.core.MyStartupThred; |
||||||
|
import com.fr.plugin.dao.MyAgentDao; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.condition.QueryCondition; |
||||||
|
import com.fr.stable.query.restriction.Restriction; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class MyUtils { |
||||||
|
public static boolean isLicenseAvailable() { |
||||||
|
PluginLicense var0 = PluginLicenseManager.getInstance().getPluginLicenseByID("com.fr.plugin.meixin.10"); |
||||||
|
return var0.isAvailable(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static JSONObject createSuccessResponseJSONObject() { |
||||||
|
JSONObject var0 = JSONObject.create(); |
||||||
|
var0.put("errorCode", 0); |
||||||
|
var0.put("status", "success"); |
||||||
|
return var0; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static List getAgentsSortedByTimeStamp() throws Exception { |
||||||
|
return MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<MyAgentEntity>>() { |
||||||
|
public List<MyAgentEntity> run(DAOContext var1) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
return var1.getDAO(MyAgentDao.class).find(queryCondition |
||||||
|
.addSort("id", true)); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public static MyAgentEntity getAgentById(String id) throws Exception { |
||||||
|
return MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<MyAgentEntity>() { |
||||||
|
public MyAgentEntity run(DAOContext var1) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
return var1.getDAO(MyAgentDao.class).findOne(queryCondition.addRestriction(RestrictionFactory.eq("id",id))); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
public static void startUpUserSyncThread() { |
||||||
|
// new MyStartupThred().start();
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
public class PushImageBean implements Serializable { |
||||||
|
private String appKey; |
||||||
|
private Filter filter = new Filter(); |
||||||
|
private String imageurl; |
||||||
|
|
||||||
|
public PushImageBean() { |
||||||
|
String appKey = MyConfig.getInstance().getAppKey(); |
||||||
|
this.appKey=appKey; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAppKey() { |
||||||
|
return appKey; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAppKey(String appKey) { |
||||||
|
this.appKey = appKey; |
||||||
|
} |
||||||
|
|
||||||
|
public Filter getFilter() { |
||||||
|
return filter; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFilterUser(String users) { |
||||||
|
this.filter.setUser_id(users); |
||||||
|
} |
||||||
|
|
||||||
|
public String getImageurl() { |
||||||
|
return imageurl; |
||||||
|
} |
||||||
|
|
||||||
|
public void setImageurl(String imageurl) { |
||||||
|
this.imageurl = imageurl; |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,114 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
public class PushObject { |
||||||
|
|
||||||
|
private String title, |
||||||
|
noticeTitle="", |
||||||
|
summary, |
||||||
|
jumpUrl, |
||||||
|
shareRange="", |
||||||
|
openType, |
||||||
|
createTime, |
||||||
|
coverImgUrl, |
||||||
|
extras="", |
||||||
|
mc_widget_identifier="huafa.push.common", |
||||||
|
batchToUsers; |
||||||
|
|
||||||
|
public PushObject() { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
this.createTime = format.format(new Date()); |
||||||
|
this.openType="3";//都可以打开
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public String getTitle() { |
||||||
|
return title; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTitle(String title) { |
||||||
|
this.title = title; |
||||||
|
} |
||||||
|
|
||||||
|
public String getNoticeTitle() { |
||||||
|
return noticeTitle; |
||||||
|
} |
||||||
|
|
||||||
|
public void setNoticeTitle(String noticeTitle) { |
||||||
|
this.noticeTitle = noticeTitle; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSummary() { |
||||||
|
return summary; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSummary(String summary) { |
||||||
|
this.summary = summary; |
||||||
|
} |
||||||
|
|
||||||
|
public String getJumpUrl() { |
||||||
|
return jumpUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public void setJumpUrl(String jumpUrl) { |
||||||
|
this.jumpUrl = jumpUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getShareRange() { |
||||||
|
return shareRange; |
||||||
|
} |
||||||
|
|
||||||
|
public void setShareRange(String shareRange) { |
||||||
|
this.shareRange = shareRange; |
||||||
|
} |
||||||
|
|
||||||
|
public String getOpenType() { |
||||||
|
return openType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOpenType(String openType) { |
||||||
|
this.openType = openType; |
||||||
|
} |
||||||
|
|
||||||
|
public String getCreateTime() { |
||||||
|
return createTime; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCreateTime(String createTime) { |
||||||
|
this.createTime = createTime; |
||||||
|
} |
||||||
|
|
||||||
|
public String getCoverImgUrl() { |
||||||
|
return coverImgUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCoverImgUrl(String coverImgUrl) { |
||||||
|
this.coverImgUrl = coverImgUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getExtras() { |
||||||
|
return extras; |
||||||
|
} |
||||||
|
|
||||||
|
public void setExtras(String extras) { |
||||||
|
this.extras = extras; |
||||||
|
} |
||||||
|
|
||||||
|
public String getMc_widget_identifier() { |
||||||
|
return mc_widget_identifier; |
||||||
|
} |
||||||
|
|
||||||
|
public void setMc_widget_identifier(String mc_widget_identifier) { |
||||||
|
this.mc_widget_identifier = mc_widget_identifier; |
||||||
|
} |
||||||
|
|
||||||
|
public String getBatchToUsers() { |
||||||
|
return batchToUsers; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBatchToUsers(String batchToUsers) { |
||||||
|
this.batchToUsers = batchToUsers; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,61 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
public class PushTextBean implements Serializable { |
||||||
|
private String appKey; |
||||||
|
private Filter filter = new Filter(); |
||||||
|
private Text text = new Text(); |
||||||
|
|
||||||
|
private String msgtype = "text"; |
||||||
|
|
||||||
|
public PushTextBean() { |
||||||
|
String appKey = MyConfig.getInstance().getAppKey(); |
||||||
|
this.appKey = appKey; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAppKey() { |
||||||
|
return appKey; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAppKey(String appKey) { |
||||||
|
this.appKey = appKey; |
||||||
|
} |
||||||
|
|
||||||
|
public Filter getFilter() { |
||||||
|
return filter; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFilterUser(String users) { |
||||||
|
this.filter.setUser_id(users); |
||||||
|
} |
||||||
|
|
||||||
|
public Text getText() { |
||||||
|
return text; |
||||||
|
} |
||||||
|
|
||||||
|
public void setText(String text) { |
||||||
|
this.text.setContent(text); |
||||||
|
} |
||||||
|
|
||||||
|
public String getMsgtype() { |
||||||
|
return msgtype; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
class Text { |
||||||
|
private String content; |
||||||
|
|
||||||
|
public String getContent() { |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContent(String content) { |
||||||
|
this.content = content; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,266 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.third.fasterxml.jackson.databind.JsonNode; |
||||||
|
|
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStreamReader; |
||||||
|
import java.io.OutputStreamWriter; |
||||||
|
import java.net.HttpURLConnection; |
||||||
|
import java.net.URL; |
||||||
|
import java.nio.charset.StandardCharsets; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class PushUtils { |
||||||
|
private static final int NEWS_MESSAGE = 2; |
||||||
|
private static final int TERMINATE_TYPE = 107; |
||||||
|
private static final int LINKTYPE = 0; |
||||||
|
|
||||||
|
// public static void sendPush(JSONObject params) {
|
||||||
|
// String url = "https://www.yunzhijia.com/pubacc/pubsend";
|
||||||
|
// String s = WebUtils.sendJsonPost(url, params.toString());
|
||||||
|
// JSONObject resp = new JSONObject(s);
|
||||||
|
// String pubId = resp.getString("pubId");
|
||||||
|
// FineLoggerFactory.getLogger().info("华发 推送成功:{}", pubId);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static JSONObject genernateFrom(String no, String pubId, String pubsercet, String nonce, String time) {
|
||||||
|
// JSONObject jsonFrom = new JSONObject();
|
||||||
|
// jsonFrom.put("no", no);
|
||||||
|
// jsonFrom.put("pub", pubId);
|
||||||
|
// jsonFrom.put("nonce", nonce);
|
||||||
|
// jsonFrom.put("time", time);
|
||||||
|
// String pubtoken = sha(no, pubId, pubsercet, nonce, time);
|
||||||
|
// jsonFrom.put("pubtoken", pubtoken);
|
||||||
|
// return jsonFrom;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// private static String sha(String... data) {
|
||||||
|
// Arrays.sort(data);
|
||||||
|
// String join = StringUtils.join(data);
|
||||||
|
// String pubtoken = DigestUtils.sha1Hex(join);
|
||||||
|
// return pubtoken;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* { |
||||||
|
* "code": 0, |
||||||
|
* "msg": "成功", |
||||||
|
* "data": { |
||||||
|
* "errcode": 1, |
||||||
|
* "pushId": "", |
||||||
|
* "errmsg": "推送成功,推送回执:,推送到以下人员:,推送到以下部门:" |
||||||
|
* } |
||||||
|
* |
||||||
|
* @param pushObject |
||||||
|
* @param users |
||||||
|
*/ |
||||||
|
public static boolean push(String url, String pushSecret, String pushSysKey, String accessToken, PushObject pushObject, String users) { |
||||||
|
String body = JsonUtils.toJsonString(pushObject); |
||||||
|
Map<String, Object> params = new HashMap<String, Object>(); |
||||||
|
params.put("appKey", MyConfig.getInstance().getAppKey()); |
||||||
|
params.put("sourceType", "todo"); |
||||||
|
params.put("touser", users); |
||||||
|
params.put("timestamp", System.currentTimeMillis()); |
||||||
|
params.put("accessToken", accessToken); |
||||||
|
String sysKey = pushSysKey; |
||||||
|
params.put("sysKey", sysKey); |
||||||
|
|
||||||
|
String sign = SignUtils.getSign(params, pushSecret); |
||||||
|
params.put("sign", sign); |
||||||
|
String param = SignUtils.pinParam(params); |
||||||
|
url = url + "?" + param; |
||||||
|
FRContext.getLogger().info("请求url:" + url); |
||||||
|
FRContext.getLogger().info("请求body:" + body); |
||||||
|
String s = sendPost(url, body); |
||||||
|
FRContext.getLogger().info("响应内容:" + s); |
||||||
|
|
||||||
|
if (com.fr.stable.StringUtils.isNotBlank(s)) { |
||||||
|
try { |
||||||
|
JsonNode jsonNode = JsonUtils.parseToJsonNode(s); |
||||||
|
String code = jsonNode.get("code").asText(); |
||||||
|
if ("0".equalsIgnoreCase(code)) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
} |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 向指定 URL 发送POST方法的请求 |
||||||
|
* |
||||||
|
* @param url 发送请求的 URL |
||||||
|
* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 |
||||||
|
* @return 所代表远程资源的响应结果 |
||||||
|
*/ |
||||||
|
public static String sendPost(String url, String param) { |
||||||
|
OutputStreamWriter out = null; |
||||||
|
BufferedReader in = null; |
||||||
|
StringBuilder result = new StringBuilder(); |
||||||
|
try { |
||||||
|
URL realUrl = new URL(url); |
||||||
|
HttpURLConnection conn = null; |
||||||
|
conn = (HttpURLConnection) realUrl.openConnection(); |
||||||
|
// 打开和URL之间的连接
|
||||||
|
// 发送POST请求必须设置如下两行
|
||||||
|
conn.setDoOutput(true); |
||||||
|
conn.setDoInput(true); |
||||||
|
conn.setRequestMethod("POST"); // POST方法
|
||||||
|
// 设置通用的请求属性
|
||||||
|
conn.setRequestProperty("accept", "*/*"); |
||||||
|
conn.setRequestProperty("connection", "Keep-Alive"); |
||||||
|
conn.setRequestProperty("user-agent", |
||||||
|
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); |
||||||
|
conn.setRequestProperty("Content-Type", "application/json"); |
||||||
|
conn.connect(); |
||||||
|
// 获取URLConnection对象对应的输出流
|
||||||
|
out = new OutputStreamWriter(conn.getOutputStream(), StandardCharsets.UTF_8); |
||||||
|
// 发送请求参数
|
||||||
|
out.write(param); |
||||||
|
// flush输出流的缓冲
|
||||||
|
out.flush(); |
||||||
|
// 定义BufferedReader输入流来读取URL的响应
|
||||||
|
in = new BufferedReader( |
||||||
|
new InputStreamReader(conn.getInputStream())); |
||||||
|
String line; |
||||||
|
while ((line = in.readLine()) != null) { |
||||||
|
result.append(line); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
} |
||||||
|
//使用finally块来关闭输出流、输入流
|
||||||
|
finally { |
||||||
|
try { |
||||||
|
if (out != null) { |
||||||
|
out.close(); |
||||||
|
} |
||||||
|
if (in != null) { |
||||||
|
in.close(); |
||||||
|
} |
||||||
|
} catch (IOException ex) { |
||||||
|
} |
||||||
|
} |
||||||
|
return result.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
public static String pushTextOrImage(String url, Object pushImageBean, String sysKey, String secrct) { |
||||||
|
String body = JsonUtils.toJsonString(pushImageBean); |
||||||
|
Map<String, Object> params = new HashMap<String, Object>(); |
||||||
|
String accessToken = MyConfig.getInstance().getAccessToken(); |
||||||
|
params.put("sysKey", sysKey); |
||||||
|
params.put("timestamp", System.currentTimeMillis()); |
||||||
|
params.put("accessToken", accessToken); |
||||||
|
String sign = SignUtils.getSign(params, secrct); |
||||||
|
params.put("sign", sign); |
||||||
|
String param = SignUtils.pinParam(params); |
||||||
|
url = url + "?" + param; |
||||||
|
String s = sendPost(url, body); |
||||||
|
FineLoggerFactory.getLogger().error("推送图文响应:{}", s); |
||||||
|
FineLoggerFactory.getLogger().info("请求url:" + url); |
||||||
|
FineLoggerFactory.getLogger().info("请求body:" + body); |
||||||
|
if (com.fr.stable.StringUtils.isNotBlank(s)) { |
||||||
|
try { |
||||||
|
JsonNode jsonNode = JsonUtils.parseToJsonNode(s); |
||||||
|
String code = jsonNode.get("code").asText(); |
||||||
|
if ("0".equalsIgnoreCase(code)) { |
||||||
|
return jsonNode.get("data").get("msg_data_id").asText(); |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建单图推送, |
||||||
|
* 流程1先创建image 2推送 |
||||||
|
* |
||||||
|
* @param url |
||||||
|
* @param pushImageBean |
||||||
|
* @param sysKey |
||||||
|
* @param secrct |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String pushImage(String baseurl, String userId, String title, String sid, String imageUrl, String jumpUrl, int openType, String sysKey, String secrct) { |
||||||
|
Map<String, Object> params = new HashMap<String, Object>(); |
||||||
|
String accessToken = MyConfig.getInstance().getAccessToken(); |
||||||
|
params.put("sysKey", sysKey); |
||||||
|
params.put("timestamp", System.currentTimeMillis()); |
||||||
|
params.put("accessToken", accessToken); |
||||||
|
String sign = SignUtils.getSign(params, secrct); |
||||||
|
params.put("sign", sign); |
||||||
|
String param = SignUtils.pinParam(params); |
||||||
|
String url=baseurl+"/mpm/v5/open/imgtext/upload"; |
||||||
|
url = url + "?" + param; |
||||||
|
//创建图片
|
||||||
|
JSONObject createImage = new JSONObject(); |
||||||
|
createImage.put("sid", sid); |
||||||
|
createImage.put("title", title); |
||||||
|
createImage.put("jump_url", jumpUrl); |
||||||
|
createImage.put("cover_thumb_s", imageUrl); |
||||||
|
createImage.put("openType", openType); |
||||||
|
String createBody = createImage.toString(); |
||||||
|
String s = sendPost(url, createBody); |
||||||
|
FineLoggerFactory.getLogger().error("创建图片响应:{}", s); |
||||||
|
FineLoggerFactory.getLogger().info("请求url:" + url); |
||||||
|
FineLoggerFactory.getLogger().info("请求body:" + createBody); |
||||||
|
String imageId = ""; |
||||||
|
if (com.fr.stable.StringUtils.isNotBlank(s)) { |
||||||
|
try { |
||||||
|
JsonNode jsonNode = JsonUtils.parseToJsonNode(s); |
||||||
|
String code = jsonNode.get("code").asText(); |
||||||
|
if ("0".equalsIgnoreCase(code)) { |
||||||
|
imageId = jsonNode.get("msg_data_id").asText(); |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
} |
||||||
|
} |
||||||
|
/** |
||||||
|
* 推送图片 |
||||||
|
*/ |
||||||
|
url=baseurl+"/mpm/v5/open/imgtext/pushMsg"; |
||||||
|
JSONObject pushImageBean = new JSONObject(); |
||||||
|
pushImageBean.put("appKey", MyConfig.getInstance().getAppKey()); |
||||||
|
JSONObject filter = new JSONObject(); |
||||||
|
filter.put("user_id", userId); |
||||||
|
pushImageBean.put("filter", filter); |
||||||
|
// pushImageBean.put("sid", )
|
||||||
|
JSONObject news = new JSONObject(); |
||||||
|
news.put("media_id", imageId); |
||||||
|
pushImageBean.put("news", pushImageBean); |
||||||
|
params = new HashMap<String, Object>(); |
||||||
|
params.put("sysKey", sysKey); |
||||||
|
params.put("timestamp", System.currentTimeMillis()); |
||||||
|
params.put("accessToken", accessToken); |
||||||
|
sign = SignUtils.getSign(params, secrct); |
||||||
|
params.put("sign", sign); |
||||||
|
param = SignUtils.pinParam(params); |
||||||
|
url = url + "?" + param; |
||||||
|
String json = sendPost(url, pushImageBean.toString()); |
||||||
|
FineLoggerFactory.getLogger().error("创建图片响应:{}", json); |
||||||
|
FineLoggerFactory.getLogger().info("请求url:" + url); |
||||||
|
FineLoggerFactory.getLogger().info("请求body:" + pushImageBean); |
||||||
|
if (com.fr.stable.StringUtils.isNotBlank(json)) { |
||||||
|
try { |
||||||
|
JsonNode jsonNode = JsonUtils.parseToJsonNode(json); |
||||||
|
String code = jsonNode.get("code").asText(); |
||||||
|
if ("0".equalsIgnoreCase(code)) { |
||||||
|
jsonNode.get("msg_id").asText(); |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
import com.fr.base.Base64; |
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.security.PublicKey; |
||||||
|
import java.security.cert.CertificateException; |
||||||
|
import java.security.cert.CertificateFactory; |
||||||
|
|
||||||
|
public class SertUtils { |
||||||
|
final static String str = "xxxxB64"; |
||||||
|
static byte[] bs; |
||||||
|
static PublicKey statePublicKey = null; |
||||||
|
|
||||||
|
static { |
||||||
|
bs = Base64.decode(str); |
||||||
|
} |
||||||
|
|
||||||
|
public static PublicKey getSert() { |
||||||
|
if (statePublicKey != null) { |
||||||
|
return statePublicKey; |
||||||
|
} |
||||||
|
CertificateFactory cf; |
||||||
|
InputStream in2; |
||||||
|
java.security.cert.Certificate c2 = null; |
||||||
|
try { |
||||||
|
cf = CertificateFactory.getInstance("X.509"); |
||||||
|
c2 = cf.generateCertificate(new ByteArrayInputStream(bs)); |
||||||
|
} catch (CertificateException e) { |
||||||
|
} |
||||||
|
statePublicKey = c2.getPublicKey(); |
||||||
|
return statePublicKey; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,52 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
import com.fr.third.springframework.util.DigestUtils; |
||||||
|
|
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.Set; |
||||||
|
|
||||||
|
public class SignUtils { |
||||||
|
|
||||||
|
|
||||||
|
public static String getSign(Map<String, Object> map, String secret) { |
||||||
|
// TreeMap<String, Object> map = new TreeMap<String, Object>(parms);
|
||||||
|
// StringBuilder query = new StringBuilder();
|
||||||
|
// Set<String> set = map.keySet();
|
||||||
|
// query.append(secret);
|
||||||
|
// for (String key : set) {
|
||||||
|
// String value = String.valueOf(map.get(key));
|
||||||
|
// query.append(key).append(value);
|
||||||
|
// }
|
||||||
|
// query.append(secret);
|
||||||
|
// return DigestUtils.md5DigestAsHex(query.toString().getBytes());
|
||||||
|
// 第一步:检查参数是否已经排序
|
||||||
|
String[] keys = map.keySet().toArray(new String[0]); |
||||||
|
Arrays.sort(keys); |
||||||
|
|
||||||
|
// 第二步:把所有参数名和参数值串在一起
|
||||||
|
StringBuilder query = new StringBuilder(); |
||||||
|
|
||||||
|
query.append(secret); |
||||||
|
for (String key : keys) { |
||||||
|
String value = String.valueOf(map.get(key)); |
||||||
|
query.append(key).append(value); |
||||||
|
} |
||||||
|
query.append(secret); |
||||||
|
|
||||||
|
// 第三步:计算签名
|
||||||
|
String sign = DigestUtils.md5DigestAsHex(query.toString().getBytes()); |
||||||
|
return sign; |
||||||
|
} |
||||||
|
|
||||||
|
public static String pinParam(Map<String, Object> parms) { |
||||||
|
StringBuilder query = new StringBuilder(); |
||||||
|
Set<String> set = parms.keySet(); |
||||||
|
for (String key : set) { |
||||||
|
String value = String.valueOf(parms.get(key)); |
||||||
|
query.append(key).append("=").append(value).append("&"); |
||||||
|
} |
||||||
|
|
||||||
|
return query.substring(0, query.length() - 1); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,108 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.beans.MyDepBean; |
||||||
|
import com.fr.plugin.beans.MyUserBean; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.core.MyCorpManager; |
||||||
|
import com.fr.plugin.core.MyUserSyncManager; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.org.apache.commons.lang3.time.DateFormatUtils; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
|
||||||
|
public class SyncThread implements Runnable { |
||||||
|
private String operation; |
||||||
|
|
||||||
|
public SyncThread(String operation) { |
||||||
|
this.operation = operation; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
MyUserSyncManager corpManager = MyUserSyncManager.getInstance(); |
||||||
|
if (ComparatorUtils.equalsIgnoreCase("user", operation)) { |
||||||
|
FineLoggerFactory.getLogger().info("增量同步用户开始"); |
||||||
|
String lastSyncUserTime = MyConfig.getInstance().getLastSyncUserTime();//格式:“2014-08-02 01:40:38”
|
||||||
|
String format = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"); |
||||||
|
if(StringUtils.isBlank(lastSyncUserTime)){ |
||||||
|
lastSyncUserTime=format; |
||||||
|
} |
||||||
|
MyConfig.getInstance().setLastSyncUserTime(format); |
||||||
|
JSONArray userLastSyn = WebUtils.getUserLastSyn(0,lastSyncUserTime); |
||||||
|
int count = 0; |
||||||
|
while (userLastSyn != null && !userLastSyn.isEmpty()) { |
||||||
|
if (userLastSyn.isEmpty()) { |
||||||
|
break; |
||||||
|
} |
||||||
|
int size = userLastSyn.size(); |
||||||
|
for (int i = 0; i < size; i++) { |
||||||
|
JSONObject userJson = userLastSyn.getJSONObject(i); |
||||||
|
int status = userJson.getInt("status"); |
||||||
|
String id = userJson.getString("openId"); |
||||||
|
String photoUrl = userJson.getString("photoUrl"); |
||||||
|
String name = userJson.getString("name"); |
||||||
|
String jobNo = userJson.getString("jobNo"); |
||||||
|
String phone = userJson.getString("phone"); |
||||||
|
String depName = userJson.getString("department"); |
||||||
|
MyUserBean entity = new MyUserBean(); |
||||||
|
entity.setPhone(phone); |
||||||
|
entity.setPhotoUrl(photoUrl); |
||||||
|
entity.setStatus(status); |
||||||
|
entity.setOpenId(id); |
||||||
|
entity.setName(name); |
||||||
|
entity.setDepartment(depName); |
||||||
|
entity.setJobNo(jobNo); |
||||||
|
try { |
||||||
|
corpManager.saveOrUpdateUser(entity); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
count++; |
||||||
|
} |
||||||
|
FineLoggerFactory.getLogger().info("增量同步用户count:{},当前页面:{} 条", count,size); |
||||||
|
userLastSyn = WebUtils.getUserLastSyn(count,lastSyncUserTime); |
||||||
|
} |
||||||
|
FineLoggerFactory.getLogger().info("增量同步用户完成 修改了:{}个用户信息", count); |
||||||
|
} else { |
||||||
|
FineLoggerFactory.getLogger().info("增量同步部门开始"); |
||||||
|
JSONArray depLastSyn = WebUtils.getDepLastSyn(); |
||||||
|
MyCorpManager myCorpManager = MyCorpManager.getInstance(); |
||||||
|
int count = 0; |
||||||
|
if (depLastSyn != null && !depLastSyn.isEmpty()) { |
||||||
|
int size = depLastSyn.size(); |
||||||
|
for (int i = 0; i < size; i++) { |
||||||
|
JSONObject depJson = depLastSyn.getJSONObject(i); |
||||||
|
String id = depJson.getString("id"); |
||||||
|
String pid = depJson.getString("parentId"); |
||||||
|
String name = depJson.getString("name"); |
||||||
|
String depName = depJson.getString("department"); |
||||||
|
int order = depJson.getInt("weights"); |
||||||
|
String opera = depJson.getString(""); |
||||||
|
MyDepBean depBean = new MyDepBean(); |
||||||
|
depBean.setDepName(depName); |
||||||
|
depBean.setId(id); |
||||||
|
depBean.setOrder(order); |
||||||
|
depBean.setParentId(pid); |
||||||
|
depBean.setName(name); |
||||||
|
try { |
||||||
|
if(ComparatorUtils.equalsIgnoreCase(opera,"3")){ |
||||||
|
myCorpManager.removeDep(depBean); |
||||||
|
}else{ |
||||||
|
myCorpManager.saveOrUpdateDep(depBean); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
count++; |
||||||
|
} |
||||||
|
} |
||||||
|
FineLoggerFactory.getLogger().info("增量同步部门完成 修改了:{}个部门信息", count); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,153 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
|
||||||
|
import java.text.DateFormat; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Locale; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.TimeZone; |
||||||
|
|
||||||
|
import com.fr.ftp.util.Base64; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.log.FineLoggerProvider; |
||||||
|
import com.fr.third.org.apache.commons.codec.digest.DigestUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* 由云之家提供,未作修改 |
||||||
|
*/ |
||||||
|
|
||||||
|
public class WebHookUtil { |
||||||
|
|
||||||
|
private static FineLoggerProvider logger = FineLoggerFactory.getLogger(); |
||||||
|
|
||||||
|
public static boolean checkAuth(String appid,String appkey,String content,Map<String,String> headers){ |
||||||
|
boolean ret = false; |
||||||
|
if(content!=null &&headers!=null){ |
||||||
|
String contentType = headers.get("Content-Type"); |
||||||
|
if(contentType==null){ |
||||||
|
contentType = headers.get("content-type"); |
||||||
|
} |
||||||
|
String contentMd5 = headers.get("Content-MD5"); |
||||||
|
if(contentMd5==null){ |
||||||
|
contentMd5 = headers.get("content-md5"); |
||||||
|
} |
||||||
|
String date = headers.get("Date"); |
||||||
|
if(date==null){ |
||||||
|
date = headers.get("date"); |
||||||
|
} |
||||||
|
String auth = headers.get("Authorization"); |
||||||
|
if(auth==null){ |
||||||
|
auth = headers.get("authorization"); |
||||||
|
} |
||||||
|
logger.info("auth header:content-type={},md5={},date={},authorization={}",contentType,contentMd5,date,auth); |
||||||
|
String md5 = WebHookUtil.getContentMd5(content); |
||||||
|
logger.info("auth header:local product MD5={},check={}",md5,(md5!=null&&md5.equals(contentMd5))); |
||||||
|
|
||||||
|
if(md5!=null&&md5.equals(contentMd5)){ |
||||||
|
String authorization = WebHookUtil.getAuthorization( appid, appkey,contentMd5, contentType, date); |
||||||
|
logger.info("auth header:local authorization={},check={}",authorization,(auth!=null&&auth.equals(authorization))); |
||||||
|
if(auth!=null&&auth.equals(authorization)){ |
||||||
|
ret = true; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return ret; |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean checkAuth(String token,String content,Map<String,String> headers){ |
||||||
|
boolean ret = false; |
||||||
|
if(content!=null &&headers!=null){ |
||||||
|
String contentType = headers.get("Content-Type"); |
||||||
|
if(contentType==null){ |
||||||
|
contentType = headers.get("content-type"); |
||||||
|
} |
||||||
|
String contentMd5 = headers.get("Content-MD5"); |
||||||
|
if(contentMd5==null){ |
||||||
|
contentMd5 = headers.get("content-md5"); |
||||||
|
} |
||||||
|
String date = headers.get("Date"); |
||||||
|
if(date==null){ |
||||||
|
date = headers.get("date"); |
||||||
|
} |
||||||
|
String auth = headers.get("Authorization"); |
||||||
|
if(auth==null){ |
||||||
|
auth = headers.get("authorization"); |
||||||
|
} |
||||||
|
logger.info("auth header:content-type={},md5={},date={},authorization={}",contentType,contentMd5,date,auth); |
||||||
|
String md5 = WebHookUtil.getContentMd5(content); |
||||||
|
logger.info("auth header:local product MD5={},check={}",md5,(md5!=null&&md5.equals(contentMd5))); |
||||||
|
|
||||||
|
if(md5!=null&&md5.equals(contentMd5)){ |
||||||
|
String authorization = WebHookUtil.getAuthorization( token,contentMd5, contentType, date); |
||||||
|
logger.info("auth header:local authorization={},check={}",authorization,(auth!=null&&auth.equals(authorization))); |
||||||
|
if(auth!=null&&auth.equals(authorization)){ |
||||||
|
ret = true; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return ret; |
||||||
|
} |
||||||
|
|
||||||
|
public static String getAuthorization(String appid,String appkey,String contentMd5,String contentType,String date){ |
||||||
|
|
||||||
|
String auth = appid +":"+sha(appkey,contentMd5,contentType,date); |
||||||
|
return auth; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static String getAuthorization(String token,String contentMd5,String contentType,String date){ |
||||||
|
|
||||||
|
String auth = sha(token,contentMd5,contentType,date); |
||||||
|
return auth; |
||||||
|
} |
||||||
|
|
||||||
|
public static String sha(String... data){ |
||||||
|
String str = ""; |
||||||
|
int n = data.length; |
||||||
|
for (int i=0;i<n;i++){ |
||||||
|
str =str+data[i]; |
||||||
|
} |
||||||
|
return DigestUtils.sha1Hex(str); |
||||||
|
} |
||||||
|
|
||||||
|
public static String getContentMd5(String content){ |
||||||
|
|
||||||
|
return Base64.encodeBase64String(DigestUtils.md5(content)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static String getGMTTime(){ |
||||||
|
Date d=new Date(); |
||||||
|
DateFormat format=new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z",Locale.US); |
||||||
|
format.setTimeZone(TimeZone.getTimeZone("GMT")); |
||||||
|
|
||||||
|
return format.format(d); |
||||||
|
} |
||||||
|
|
||||||
|
public static Map<Object,Object> getHeaders(String appid,String appkey,String content,String contentType){ |
||||||
|
Map<Object,Object> headers = new HashMap<Object,Object>(); |
||||||
|
String contentMd5 = WebHookUtil.getContentMd5(content); |
||||||
|
String date = WebHookUtil.getGMTTime(); |
||||||
|
|
||||||
|
headers.put("Content-Md5",contentMd5 ); |
||||||
|
headers.put("Content-Type",contentType ); |
||||||
|
headers.put("Date", date); |
||||||
|
headers.put("Authorization", WebHookUtil.getAuthorization(appid,appkey,contentMd5, contentType, date)); |
||||||
|
headers.put("User-Agent", "kingdee yunzhijia webhook client-1.0"); |
||||||
|
|
||||||
|
return headers; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public static Map<String,Object> getCommonParams(String appid, String access_token){ |
||||||
|
Map<String,Object> params=new HashMap<String,Object>(); |
||||||
|
params.put("appid", appid); |
||||||
|
params.put("access_token", access_token); |
||||||
|
return params; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,367 @@ |
|||||||
|
package com.fr.plugin.utils; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.beans.MyDepBean; |
||||||
|
import com.fr.plugin.beans.MyUserBean; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.web.hander.LoginUserModel; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.org.apache.commons.lang3.RandomStringUtils; |
||||||
|
import com.fr.third.org.apache.commons.lang3.time.DateFormatUtils; |
||||||
|
import sun.net.www.protocol.https.HttpsURLConnectionImpl; |
||||||
|
|
||||||
|
import java.io.*; |
||||||
|
import java.net.HttpURLConnection; |
||||||
|
import java.net.URL; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
public class WebUtils { |
||||||
|
public static String post(String path, Map<String, Object> param) { |
||||||
|
String var3 = getParam(param); |
||||||
|
PrintWriter var4 = null; |
||||||
|
BufferedReader var5 = null; |
||||||
|
String var6 = ""; |
||||||
|
|
||||||
|
try { |
||||||
|
URL var7 = new URL(path); |
||||||
|
HttpURLConnection var8 = (HttpURLConnection) var7.openConnection(); |
||||||
|
var8.setRequestProperty("accept", "*/*"); |
||||||
|
var8.setRequestProperty("connection", "Keep-Alive"); |
||||||
|
var8.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); |
||||||
|
var8.setRequestProperty("Accept-Charset", "GBK"); |
||||||
|
var8.setRequestMethod("POST"); |
||||||
|
var8.setDoOutput(true); |
||||||
|
var8.setDoInput(true); |
||||||
|
var4 = new PrintWriter(var8.getOutputStream()); |
||||||
|
var4.print(var3); |
||||||
|
var4.flush(); |
||||||
|
|
||||||
|
String var9; |
||||||
|
for (var5 = new BufferedReader(new InputStreamReader(var8.getInputStream(), "UTF-8")); (var9 = var5.readLine()) != null; var6 = var6 + var9) { |
||||||
|
; |
||||||
|
} |
||||||
|
} catch (Exception var18) { |
||||||
|
var18.printStackTrace(); |
||||||
|
} finally { |
||||||
|
try { |
||||||
|
if (var4 != null) { |
||||||
|
var4.close(); |
||||||
|
} |
||||||
|
|
||||||
|
if (var5 != null) { |
||||||
|
var5.close(); |
||||||
|
} |
||||||
|
} catch (Exception var17) { |
||||||
|
; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
return var6; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 发送json 模式的请求 |
||||||
|
* |
||||||
|
* @param url |
||||||
|
* @param param |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String sendJsonPost(String url, String param) { |
||||||
|
FRContext.getLogger().info("请将后面的内容发送给开发者:" + new String(Base64.getUrlEncoder().encode(param.getBytes()))); |
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
PrintWriter out = null; |
||||||
|
BufferedReader in = null; |
||||||
|
HttpURLConnection conn = null; |
||||||
|
try { |
||||||
|
URL realUrl = new URL(url); |
||||||
|
// 打开和URL之间的连接
|
||||||
|
conn = (HttpURLConnection) realUrl.openConnection(); |
||||||
|
// 设置通用的请求属性
|
||||||
|
conn.setRequestProperty("accept", "*/*"); |
||||||
|
conn.setRequestMethod("POST"); |
||||||
|
conn.setRequestProperty("connection", "Keep-Alive"); |
||||||
|
conn.setRequestProperty("Content-Type", "application/json; charset=GBK"); |
||||||
|
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); |
||||||
|
// 发送POST请求必须设置如下两行
|
||||||
|
conn.setDoOutput(true); |
||||||
|
conn.setDoInput(true); |
||||||
|
// 获取URLConnection对象对应的输出流
|
||||||
|
out = new PrintWriter(conn.getOutputStream()); |
||||||
|
// 发送请求参数
|
||||||
|
if (StringUtils.isNotBlank(param)) { |
||||||
|
out.print(param); |
||||||
|
} |
||||||
|
// flush输出流的缓冲
|
||||||
|
out.flush(); |
||||||
|
// 定义BufferedReader输入流来读取URL的响应
|
||||||
|
in = new BufferedReader(new InputStreamReader(conn.getInputStream())); |
||||||
|
String line; |
||||||
|
sb = new StringBuilder(); |
||||||
|
while ((line = in.readLine()) != null) { |
||||||
|
sb.append(line); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
if (conn != null) { |
||||||
|
InputStream errorStream = ((HttpsURLConnectionImpl) conn).getErrorStream(); |
||||||
|
in = new BufferedReader(new InputStreamReader(errorStream)); |
||||||
|
sb = new StringBuilder(); |
||||||
|
String line; |
||||||
|
try { |
||||||
|
while ((line = in.readLine()) != null) { |
||||||
|
sb.append(line); |
||||||
|
} |
||||||
|
} catch (Exception ee) { |
||||||
|
|
||||||
|
} |
||||||
|
System.out.println("错误响应:=======》" + sb); |
||||||
|
} |
||||||
|
System.out.println("发送 POST 请求出现异常!" + e); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
// 使用finally块来关闭输出流、输入流
|
||||||
|
finally { |
||||||
|
try { |
||||||
|
if (null != in) { |
||||||
|
in.close(); |
||||||
|
} |
||||||
|
if (out != null) { |
||||||
|
out.close(); |
||||||
|
} |
||||||
|
} catch (IOException ex) { |
||||||
|
ex.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
return sb.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
private static String getParam(Map<String, Object> var0) { |
||||||
|
String var1 = ""; |
||||||
|
Set var2 = var0.keySet(); |
||||||
|
Iterator var3 = var2.iterator(); |
||||||
|
|
||||||
|
while (var3.hasNext()) { |
||||||
|
String var4 = (String) var3.next(); |
||||||
|
String var5 = var0.get(var4) + ""; |
||||||
|
|
||||||
|
try { |
||||||
|
var1 = var1 + (var1.length() == 0 ? "" : "&") + URLEncoder.encode(var4, "UTF-8") + "=" + URLEncoder.encode(var5, "UTF-8"); |
||||||
|
} catch (Exception var7) { |
||||||
|
; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return var1; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static String getSyncDepOrUserAccessToken(String eid, String secret) { |
||||||
|
Map<String, Object> parms = new HashMap<String, Object>(); |
||||||
|
parms.put("eid", eid); |
||||||
|
parms.put("secret", secret); |
||||||
|
parms.put("scope", "resGroupSecret"); |
||||||
|
|
||||||
|
return getAccessToken(parms); |
||||||
|
} |
||||||
|
|
||||||
|
public static LoginUserModel getUserInfo(String appid, String acc, String tick) throws Exception { |
||||||
|
String var2 = "https://www.yunzhijia.com/gateway/ticket/user/acquirecontext?accessToken=" + acc; |
||||||
|
JSONObject params = new JSONObject(); |
||||||
|
params.put("appid", appid); |
||||||
|
params.put("ticket", tick); |
||||||
|
String resp = sendJsonPost(var2, params.toString()); |
||||||
|
JSONObject jsonObject = new JSONObject(resp); |
||||||
|
if (jsonObject.getBoolean("success")) { |
||||||
|
JSONObject data = jsonObject.getJSONObject("data"); |
||||||
|
LoginUserModel model = new LoginUserModel(); |
||||||
|
model.setAppid(data.getString("appid")); |
||||||
|
model.setUsername(data.getString("username")); |
||||||
|
model.setUserid(data.getString("userid")); |
||||||
|
model.setJobNo(data.getString("jobNo")); |
||||||
|
model.setOpenid(data.getString("openid")); |
||||||
|
return model; |
||||||
|
} else { |
||||||
|
FRContext.getLogger().info("登陆用户失败,响应:" + resp); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据不同的scope获取accessToken |
||||||
|
* resGroupSecret 组织人员通讯录读取密钥、组织人员通讯录同步密钥、签到数据密钥、时间助手密钥、 |
||||||
|
* 生态圈同步密钥 |
||||||
|
* |
||||||
|
* @param appId |
||||||
|
* @param secret |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getAppAccessToken(String appId, String secret) { |
||||||
|
Map<String, Object> parms = new HashMap<String, Object>(); |
||||||
|
parms.put("appId", appId); |
||||||
|
parms.put("secret", secret); |
||||||
|
parms.put("scope", "app"); |
||||||
|
|
||||||
|
return getAccessToken(parms); |
||||||
|
} |
||||||
|
|
||||||
|
public static String getAccessToken(Map<String, Object> parms) { |
||||||
|
String url = "https://www.yunzhijia.com/gateway/oauth2/token/getAccessToken"; |
||||||
|
parms.put("timestamp", System.currentTimeMillis() + ""); |
||||||
|
String content = post(url, parms); |
||||||
|
FineLoggerFactory.getLogger().error("获取ticket:{}",content); |
||||||
|
JSONObject object = new JSONObject(content); |
||||||
|
Boolean success = object.getBoolean("success"); |
||||||
|
if (success) { |
||||||
|
JSONObject data = object.getJSONObject("data"); |
||||||
|
return data.getString("accessToken"); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public static List<MyUserBean> getUserByPage(String eid, String sect, int page) { |
||||||
|
String url = "https://www.yunzhijia.com/gateway/openimport/open/person/getall?accessToken=" + getSyncDepOrUserAccessToken(eid, sect); |
||||||
|
Map<String, Object> params = new HashMap<>(); |
||||||
|
params.put("nonce", RandomStringUtils.randomAlphabetic(8)); |
||||||
|
params.put("eid", eid); |
||||||
|
JSONObject object = new JSONObject(); |
||||||
|
object.put("begin", page * 1000); |
||||||
|
object.put("count", 1000); |
||||||
|
params.put("data", object.toString()); |
||||||
|
String post = post(url, params); |
||||||
|
JSONObject json = new JSONObject(post); |
||||||
|
List<MyUserBean> list = new ArrayList<>(); |
||||||
|
if (json.getBoolean("success")) { |
||||||
|
JSONArray deps = json.getJSONArray("data"); |
||||||
|
for (int i = 0; i < deps.size(); i++) { |
||||||
|
JSONObject userJson = deps.getJSONObject(i); |
||||||
|
/* |
||||||
|
* 人员 |
||||||
|
"openId":String, //人员的openid
|
||||||
|
"name":String, //姓名
|
||||||
|
"photoUrl":String, //头像URL
|
||||||
|
"phone":String, //手机号码
|
||||||
|
"isHidePhone":String, //是否在通讯录中隐藏手机号码,0: 不隐藏; 1: 隐藏,默认为0
|
||||||
|
"email":String, //邮箱
|
||||||
|
"department":String, //组织长名称
|
||||||
|
"jobNo":String, //企业工号
|
||||||
|
"jobTitle":String, //职位
|
||||||
|
"gender":int, //性别,0: 不确定; 1: 男; 2: 女
|
||||||
|
"status":int, //状态 0: 注销,1: 正常,2: 禁用
|
||||||
|
"orgUserType":int //是否部门负责人 0:否, 1:是
|
||||||
|
*/ |
||||||
|
String id = userJson.getString("openId"); |
||||||
|
String photoUrl = userJson.getString("photoUrl"); |
||||||
|
String name = userJson.getString("name"); |
||||||
|
String jobNo = userJson.getString("jobNo"); |
||||||
|
String phone = userJson.getString("phone"); |
||||||
|
String depName = userJson.getString("department"); |
||||||
|
int status = userJson.getInt("status"); |
||||||
|
MyUserBean entity = new MyUserBean(); |
||||||
|
entity.setPhone(phone); |
||||||
|
entity.setPhotoUrl(photoUrl); |
||||||
|
entity.setStatus(status); |
||||||
|
entity.setOpenId(id); |
||||||
|
entity.setName(name); |
||||||
|
entity.setDepartment(depName); |
||||||
|
entity.setJobNo(jobNo); |
||||||
|
list.add(entity); |
||||||
|
} |
||||||
|
} else { |
||||||
|
FRContext.getLogger().info("同步用户失败,响应:" + post); |
||||||
|
} |
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* sect 组织人员通讯录读取密钥 |
||||||
|
* |
||||||
|
* @param eid |
||||||
|
* @param sect |
||||||
|
*/ |
||||||
|
public static List<MyDepBean> getAllDep(String eid, String sect) { |
||||||
|
String url = "https://www.yunzhijia.com/gateway/openimport/open/dept/getall?accessToken=" + getSyncDepOrUserAccessToken(eid, sect); |
||||||
|
Map<String, Object> params = new HashMap<>(); |
||||||
|
params.put("nonce", RandomStringUtils.randomAlphabetic(8)); |
||||||
|
params.put("eid", eid); |
||||||
|
String post = post(url, params); |
||||||
|
JSONObject json = new JSONObject(post); |
||||||
|
List<MyDepBean> list = new ArrayList<>(); |
||||||
|
if (json.getBoolean("success")) { |
||||||
|
JSONArray deps = json.getJSONArray("data"); |
||||||
|
for (int i = 0; i < deps.size(); i++) { |
||||||
|
JSONObject depJson = deps.getJSONObject(i); |
||||||
|
/** |
||||||
|
* { //组织列表
|
||||||
|
* "id":String, //组织的id
|
||||||
|
* "parentId":String, //组织父Id
|
||||||
|
* "name":String, //组织名称
|
||||||
|
* "department":String, //组织长名称
|
||||||
|
* "weights":int //排序码
|
||||||
|
* } |
||||||
|
*/ |
||||||
|
String id = depJson.getString("id"); |
||||||
|
String pid = depJson.getString("parentId"); |
||||||
|
String name = depJson.getString("name"); |
||||||
|
String depName = depJson.getString("department"); |
||||||
|
int order = depJson.getInt("weights"); |
||||||
|
MyDepBean depBean = new MyDepBean(); |
||||||
|
depBean.setDepName(depName); |
||||||
|
depBean.setId(id); |
||||||
|
depBean.setOrder(order); |
||||||
|
depBean.setParentId(pid); |
||||||
|
depBean.setName(name); |
||||||
|
list.add(depBean); |
||||||
|
} |
||||||
|
} else { |
||||||
|
FRContext.getLogger().info("同步部门失败,响应:" + post); |
||||||
|
} |
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
public static JSONArray getUserLastSyn(int begin ,String lastSyncUserTime) { |
||||||
|
MyConfig myConfig = MyConfig.getInstance(); |
||||||
|
String eid = myConfig.getEid(); |
||||||
|
String sect = myConfig.getReadKey(); |
||||||
|
String url = "https://www.yunzhijia.com/gateway/openimport/open/person/getAtTime?accessToken=" + getSyncDepOrUserAccessToken(eid, sect); |
||||||
|
Map<String, Object> params = new HashMap<>(); |
||||||
|
params.put("eid", eid); |
||||||
|
params.put("time", lastSyncUserTime); |
||||||
|
params.put("begin",begin); |
||||||
|
String post = post(url, params); |
||||||
|
// FineLoggerFactory.getLogger().info("同步的用户数据:{}",post);
|
||||||
|
JSONObject json = new JSONObject(post); |
||||||
|
if (json.getBoolean("success")) { |
||||||
|
return json.getJSONArray("data"); |
||||||
|
} |
||||||
|
return JSONArray.create(); |
||||||
|
} |
||||||
|
|
||||||
|
public static JSONArray getDepLastSyn( ) { |
||||||
|
MyConfig myConfig = MyConfig.getInstance(); |
||||||
|
String eid = myConfig.getEid(); |
||||||
|
String sect = myConfig.getReadKey(); |
||||||
|
String url = "https://www.yunzhijia.com/gateway/openimport/open/dept/getAtTime?accessToken=" + getSyncDepOrUserAccessToken(eid, sect); |
||||||
|
String lastSyncUserTime = myConfig.getLastSyncDepTime();//格式:“2014-08-02 01:40:38”
|
||||||
|
String format = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"); |
||||||
|
if(StringUtils.isBlank(lastSyncUserTime)){ |
||||||
|
lastSyncUserTime=format; |
||||||
|
} |
||||||
|
myConfig.setLastSyncDepTime(format); |
||||||
|
Map<String, Object> params = new HashMap<>(); |
||||||
|
params.put("eid", eid); |
||||||
|
params.put("time", lastSyncUserTime); |
||||||
|
String post = post(url, params); |
||||||
|
FineLoggerFactory.getLogger().info("同步的部门数据:{}",post); |
||||||
|
JSONObject json = new JSONObject(post); |
||||||
|
if (json.getBoolean("success")) { |
||||||
|
JSONArray users = json.getJSONArray("data"); |
||||||
|
return users; |
||||||
|
} |
||||||
|
return JSONArray.create(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package com.fr.plugin.web.hander; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.core.MyCoreDBAccess; |
||||||
|
import com.fr.plugin.dao.MyAgentDao; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class DelAgentHander extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.DELETE; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/agent"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
final String var3 = WebUtils.getHTTPRequestParameter(httpServletRequest, "id"); |
||||||
|
MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<List<MyAgentEntity>>() { |
||||||
|
public List<MyAgentEntity> run(DAOContext var1) throws Exception { |
||||||
|
var1.getDAO(MyAgentDao.class).remove(var3); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
JSONObject var4 = MyUtils.createSuccessResponseJSONObject(); |
||||||
|
WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, var4); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,61 @@ |
|||||||
|
package com.fr.plugin.web.hander; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.PluginLicense; |
||||||
|
import com.fr.plugin.PluginLicenseManager; |
||||||
|
import com.fr.plugin.beans.MyAgentBean; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class GetAgentHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/agent"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
int var3 = WebUtils.getHTTPRequestIntParameter(httpServletRequest, "startIdx", -1); |
||||||
|
int var4 = WebUtils.getHTTPRequestIntParameter(httpServletRequest, "count", -1); |
||||||
|
List var5 = MyUtils.getAgentsSortedByTimeStamp(); |
||||||
|
JSONArray var6 = new JSONArray(); |
||||||
|
JSONObject var7 = MyUtils.createSuccessResponseJSONObject(); |
||||||
|
if (var3 == -1 && var4 == -1) { |
||||||
|
Iterator var11 = var5.iterator(); |
||||||
|
while(var11.hasNext()) { |
||||||
|
MyAgentEntity var12 = (MyAgentEntity)var11.next(); |
||||||
|
var6.put(var12.createBean(new MyAgentBean()).toJSONObject()); |
||||||
|
} |
||||||
|
} else if (var3 > -1 && var4 > -1) { |
||||||
|
int var8 = Math.min(var4 + var3, var5.size()); |
||||||
|
|
||||||
|
for(int var9 = var3; var9 < var8; ++var9) { |
||||||
|
MyAgentEntity var10 = (MyAgentEntity)var5.get(var9); |
||||||
|
var6.put(var10.createBean(new MyAgentBean()).toJSONObject()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
var7.put("total", var5.size()); |
||||||
|
var7.put("agentList", var6); |
||||||
|
WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, var7); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.fr.plugin.web.hander; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.beans.MyAgentBean; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class GetConfigHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/report/server/url"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
JSONObject var3 = MyUtils.createSuccessResponseJSONObject(); |
||||||
|
MyConfig var4 = MyConfig.getInstance(); |
||||||
|
var3.put("reportServerUrl", var4.getUrl()); |
||||||
|
var3.put("authUrl", var4.getAuthUrl()); |
||||||
|
var3.put("pushUrl", var4.getPushUrl()); |
||||||
|
var3.put("appKey", var4.getAppKey()); |
||||||
|
var3.put("accessToken", var4.getAccessToken()); |
||||||
|
|
||||||
|
// var3.put("scanSecret", var4.getScanSecret());
|
||||||
|
// var3.put("scanId", var4.getScanId());
|
||||||
|
WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, var3); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,96 @@ |
|||||||
|
package com.fr.plugin.web.hander; |
||||||
|
|
||||||
|
public class LoginUserModel { |
||||||
|
|
||||||
|
|
||||||
|
private String appid; |
||||||
|
private String xtid; |
||||||
|
private String oid; |
||||||
|
private String eid; |
||||||
|
private String username; |
||||||
|
private String userid; |
||||||
|
private String tid; |
||||||
|
private String deviceId; |
||||||
|
private String openid; |
||||||
|
private String jobNo; |
||||||
|
|
||||||
|
public String getJobNo() { |
||||||
|
return jobNo; |
||||||
|
} |
||||||
|
|
||||||
|
public void setJobNo(String jobNo) { |
||||||
|
this.jobNo = jobNo; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAppid() { |
||||||
|
return appid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAppid(String appid) { |
||||||
|
this.appid = appid; |
||||||
|
} |
||||||
|
|
||||||
|
public String getXtid() { |
||||||
|
return xtid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setXtid(String xtid) { |
||||||
|
this.xtid = xtid; |
||||||
|
} |
||||||
|
|
||||||
|
public String getOid() { |
||||||
|
return oid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOid(String oid) { |
||||||
|
this.oid = oid; |
||||||
|
} |
||||||
|
|
||||||
|
public String getEid() { |
||||||
|
return eid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setEid(String eid) { |
||||||
|
this.eid = eid; |
||||||
|
} |
||||||
|
|
||||||
|
public String getUsername() { |
||||||
|
return username; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUsername(String username) { |
||||||
|
this.username = username; |
||||||
|
} |
||||||
|
|
||||||
|
public String getUserid() { |
||||||
|
return userid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUserid(String userid) { |
||||||
|
this.userid = userid; |
||||||
|
} |
||||||
|
|
||||||
|
public String getTid() { |
||||||
|
return tid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTid(String tid) { |
||||||
|
this.tid = tid; |
||||||
|
} |
||||||
|
|
||||||
|
public String getDeviceId() { |
||||||
|
return deviceId; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDeviceId(String deviceId) { |
||||||
|
this.deviceId = deviceId; |
||||||
|
} |
||||||
|
|
||||||
|
public String getOpenid() { |
||||||
|
return openid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOpenid(String openid) { |
||||||
|
this.openid = openid; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
package com.fr.plugin.web.hander; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.PluginLicense; |
||||||
|
import com.fr.plugin.PluginLicenseManager; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
public class MyCheckLicenseHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/check/license"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
PluginLicense var3 = PluginLicenseManager.getInstance().getPluginLicenseByID("com.fr.plugin.meixin.10"); |
||||||
|
JSONObject var4 = MyUtils.createSuccessResponseJSONObject(); |
||||||
|
boolean var5 = var3.isAvailable(); |
||||||
|
var4.put("authorized", var5); |
||||||
|
WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, var4); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,98 @@ |
|||||||
|
package com.fr.plugin.web.hander; |
||||||
|
|
||||||
|
import com.fr.base.ServerConfig; |
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.webservice.v10.login.LoginService; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.beans.MyUserBean; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.core.MyUserSyncManager; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.plugin.utils.WebUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
public class PCLoginHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/pc/login"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
String ticket = httpServletRequest.getParameter("ticket"); |
||||||
|
String isApp = httpServletRequest.getParameter("isApp"); |
||||||
|
MyConfig instance = MyConfig.getInstance(); |
||||||
|
String secret = instance.getSecret(); |
||||||
|
String appId = instance.getAppId(); |
||||||
|
JSONObject jsonObject = new JSONObject(); |
||||||
|
String appAccessToken = WebUtils.getAppAccessToken(appId, secret); |
||||||
|
if (!MyUtils.isLicenseAvailable()) { |
||||||
|
jsonObject.put("status", -1); |
||||||
|
jsonObject.put("message", "请购买授权后使用"); |
||||||
|
com.fr.web.utils.WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (StringUtils.isNotBlank(appAccessToken)) { |
||||||
|
try { |
||||||
|
LoginUserModel userInfo = WebUtils.getUserInfo(appId, appAccessToken, ticket); |
||||||
|
if (userInfo != null) { |
||||||
|
String openid = userInfo.getOpenid(); |
||||||
|
MyUserSyncManager userSyncManager = MyUserSyncManager.getInstance(); |
||||||
|
MyUserBean userBean = userSyncManager.getUserByOpenId(openid); |
||||||
|
if (userBean == null) { |
||||||
|
jsonObject.put("status", -1); |
||||||
|
jsonObject.put("message", userInfo.getUsername() + "登陆成功,但是未绑定帆软系统用户"); |
||||||
|
com.fr.web.utils.WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
return; |
||||||
|
} |
||||||
|
String fsUserName=""; |
||||||
|
String match = instance.getMatch(); |
||||||
|
if("1".equals(match)){//手机号
|
||||||
|
User byMobile = MyUserSyncManager.getFSUserByPhone(userBean.getPhone()); |
||||||
|
if (byMobile != null) { |
||||||
|
fsUserName=byMobile.getUserName(); |
||||||
|
} |
||||||
|
}else{ |
||||||
|
fsUserName=userBean.getFsUserName(); |
||||||
|
} |
||||||
|
if (StringUtils.isBlank(fsUserName)) { |
||||||
|
jsonObject.put("status", -1); |
||||||
|
jsonObject.put("message", userInfo.getUsername() + "登陆成功,但是未绑定帆软系统用户"); |
||||||
|
com.fr.web.utils.WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
return; |
||||||
|
} |
||||||
|
String callBack = httpServletRequest.getParameter("callBack"); |
||||||
|
LoginService.getInstance().login(httpServletRequest, httpServletResponse, fsUserName, "", ""); |
||||||
|
if (StringUtils.isNotBlank(callBack)) { |
||||||
|
httpServletResponse.sendRedirect(callBack); |
||||||
|
} else { |
||||||
|
String servletName = ServerConfig.getInstance().getServletName(); |
||||||
|
String url = instance.getUrl()+servletName; |
||||||
|
httpServletResponse.sendRedirect(url); |
||||||
|
} |
||||||
|
return; |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
jsonObject.put("status", -1); |
||||||
|
jsonObject.put("message", "登陆失败"); |
||||||
|
com.fr.web.utils.WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,105 @@ |
|||||||
|
package com.fr.plugin.web.hander; |
||||||
|
|
||||||
|
import com.fr.decision.base.util.UUIDUtil; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.core.MyCoreDBAccess; |
||||||
|
import com.fr.plugin.dao.MyAgentDao; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.utils.MyAgentUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class SaveAgentHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.POST; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/agent"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
JSONArray agentArr = new JSONArray(WebUtils.getHTTPRequestParameter(httpServletRequest, "agentArr")); |
||||||
|
JSONArray resp = new JSONArray(); |
||||||
|
|
||||||
|
for(int i = 0; i < agentArr.length(); ++i) { |
||||||
|
String agent_uid = agentArr.optJSONObject(i).optString("id"); |
||||||
|
final boolean agent_exist = StringUtils.isNotBlank(agent_uid); |
||||||
|
if (StringUtils.isEmpty(agent_uid)) { |
||||||
|
agent_uid = UUIDUtil.generate(); |
||||||
|
} |
||||||
|
|
||||||
|
String agent_name = agentArr.optJSONObject(i).optString("agentName"); |
||||||
|
String agent_id = agentArr.optJSONObject(i).optString("sysKey");//公共号编号
|
||||||
|
String secret = agentArr.optJSONObject(i).optString("secret"); |
||||||
|
|
||||||
|
|
||||||
|
List<MyAgentEntity> agent_lists = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<List<MyAgentEntity>>() { |
||||||
|
public List<MyAgentEntity> run(DAOContext content) throws Exception { |
||||||
|
return content.getDAO(MyAgentDao.class) .find(QueryFactory.create()); |
||||||
|
} |
||||||
|
}); |
||||||
|
Iterator var13 = agent_lists.iterator(); |
||||||
|
MyAgentEntity temp_agent; |
||||||
|
while(var13.hasNext()) { |
||||||
|
temp_agent = (MyAgentEntity)var13.next(); |
||||||
|
if (ComparatorUtils.equals(temp_agent.getAgentName(), agent_name) && !agent_exist) { |
||||||
|
WebUtils.flushFailureMessageAutoClose(httpServletRequest, httpServletResponse, 11205018, "存在同名服务号"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if (agent_exist && ComparatorUtils.equals(temp_agent.getAgentName(), agent_name) && !ComparatorUtils.equals(agent_uid, temp_agent.getId())) { |
||||||
|
WebUtils.flushFailureMessageAutoClose(httpServletRequest, httpServletResponse, 11205018, "服务号已经存在"); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// String var16 = MyAgentUtils.getAgentIdBySecret(agent_id, secret);
|
||||||
|
//插入或更新这个公共号,全看id
|
||||||
|
temp_agent = new MyAgentEntity().id(agent_uid) |
||||||
|
.agentName(agent_name) |
||||||
|
.sysKey(agent_id) |
||||||
|
.secret(secret); |
||||||
|
MyAgentEntity finalVar1 = temp_agent; |
||||||
|
MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<MyAgentEntity>() { |
||||||
|
public MyAgentEntity run(DAOContext var1) throws Exception { |
||||||
|
if (agent_exist) { |
||||||
|
var1.getDAO(MyAgentDao.class).update(finalVar1); |
||||||
|
} else { |
||||||
|
var1.getDAO(MyAgentDao.class).add(finalVar1); |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
//
|
||||||
|
|
||||||
|
resp.put(agent_uid); |
||||||
|
} |
||||||
|
|
||||||
|
JSONObject var15 = JSONObject.create(); |
||||||
|
var15.put("errorCode", 0); |
||||||
|
var15.put("agentIds", resp); |
||||||
|
WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, var15); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
package com.fr.plugin.web.hander; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.beans.MyAgentBean; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class SaveConfigHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.POST; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/report/server/url"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
String var3 = WebUtils.getHTTPRequestParameter(httpServletRequest, "reportServerUrl"); |
||||||
|
if (StringUtils.isNotEmpty(var3)) { |
||||||
|
String var4; |
||||||
|
if (var3.contains("?")) { |
||||||
|
var4 = var3.substring(0, var3.indexOf("?")); |
||||||
|
} else { |
||||||
|
var4 = var3; |
||||||
|
} |
||||||
|
// String appId = WebUtils.getHTTPRequestParameter(httpServletRequest, "appId");
|
||||||
|
String pushUrl = WebUtils.getHTTPRequestParameter(httpServletRequest, "pushUrl"); |
||||||
|
String accessToken = WebUtils.getHTTPRequestParameter(httpServletRequest, "accessToken"); |
||||||
|
String appKey = WebUtils.getHTTPRequestParameter(httpServletRequest, "appKey"); |
||||||
|
String authUrl = WebUtils.getHTTPRequestParameter(httpServletRequest, "authUrl"); |
||||||
|
// String scanId = WebUtils.getHTTPRequestParameter(httpServletRequest, "scanId");
|
||||||
|
|
||||||
|
MyConfig myConfig = MyConfig.getInstance(); |
||||||
|
myConfig.setPushUrl(pushUrl); |
||||||
|
myConfig.setAppKey(appKey); |
||||||
|
myConfig.setAccessToken(accessToken); |
||||||
|
myConfig.setAuthUrl(authUrl); |
||||||
|
myConfig.setUrl(var4); |
||||||
|
} |
||||||
|
|
||||||
|
JSONObject var5 = MyUtils.createSuccessResponseJSONObject(); |
||||||
|
WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, var5); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,100 @@ |
|||||||
|
package com.fr.plugin.web.hander; |
||||||
|
|
||||||
|
import com.fr.base.ServerConfig; |
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.webservice.v10.login.LoginService; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.beans.MyUserBean; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.core.MyUserSyncManager; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.plugin.utils.WebUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
public class ScanLoginHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/scan_login"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
String ticket = httpServletRequest.getParameter("ticket"); |
||||||
|
MyConfig instance = MyConfig.getInstance(); |
||||||
|
String secret = instance.getScanSecret(); |
||||||
|
String appId = instance.getScanId(); |
||||||
|
JSONObject jsonObject = new JSONObject(); |
||||||
|
String appAccessToken = WebUtils.getAppAccessToken(appId, secret); |
||||||
|
if (!MyUtils.isLicenseAvailable()) { |
||||||
|
jsonObject.put("status", -1); |
||||||
|
jsonObject.put("message", "请购买授权后使用"); |
||||||
|
com.fr.web.utils.WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (StringUtils.isNotBlank(appAccessToken)) { |
||||||
|
try { |
||||||
|
LoginUserModel userInfo = WebUtils.getUserInfo(appId, appAccessToken, ticket); |
||||||
|
if (userInfo != null) { |
||||||
|
String openid = userInfo.getOpenid(); |
||||||
|
MyUserSyncManager userSyncManager = MyUserSyncManager.getInstance(); |
||||||
|
MyUserBean userBean = userSyncManager.getUserByOpenId(openid); |
||||||
|
if (userBean == null) { |
||||||
|
jsonObject.put("status", -1); |
||||||
|
jsonObject.put("message", userInfo.getUsername() + "登陆成功,但是未绑定帆软系统用户"); |
||||||
|
com.fr.web.utils.WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
return; |
||||||
|
} |
||||||
|
String fsUserName=""; |
||||||
|
String match = instance.getMatch(); |
||||||
|
if("1".equals(match)){//手机号
|
||||||
|
User byMobile = MyUserSyncManager.getFSUserByPhone(userBean.getPhone()); |
||||||
|
if (byMobile != null) { |
||||||
|
fsUserName=byMobile.getUserName(); |
||||||
|
} |
||||||
|
}else{ |
||||||
|
fsUserName=userBean.getFsUserName(); |
||||||
|
} |
||||||
|
if (StringUtils.isBlank(fsUserName)) { |
||||||
|
jsonObject.put("status", -1); |
||||||
|
jsonObject.put("message", userInfo.getUsername() + "登陆成功,但是未绑定帆软系统用户"); |
||||||
|
com.fr.web.utils.WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
return; |
||||||
|
} |
||||||
|
String callBack = httpServletRequest.getParameter("callBack"); |
||||||
|
LoginService.getInstance().login(httpServletRequest, httpServletResponse, fsUserName, "", ""); |
||||||
|
if (StringUtils.isNotBlank(callBack)) { |
||||||
|
httpServletResponse.sendRedirect(callBack); |
||||||
|
} else { |
||||||
|
// jsonObject.put("status", 0);
|
||||||
|
// jsonObject.put("message", userInfo.getUsername() + "登陆成功, 绑定帆软系统用户" + userBean.getFsUserName());
|
||||||
|
String servletName = ServerConfig.getInstance().getServletName(); |
||||||
|
String url = instance.getUrl()+servletName; |
||||||
|
httpServletResponse.sendRedirect(url); |
||||||
|
// com.fr.web.utils.WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject);
|
||||||
|
} |
||||||
|
return; |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
jsonObject.put("status", -1); |
||||||
|
jsonObject.put("message", "登陆失败"); |
||||||
|
com.fr.web.utils.WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,156 @@ |
|||||||
|
package com.fr.plugin.web.hander; |
||||||
|
|
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.webservice.v10.login.LoginService; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.log.FineLoggerProvider; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.plugin.utils.SertUtils; |
||||||
|
import com.fr.stable.CodeUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
import org.w3c.dom.Document; |
||||||
|
import org.w3c.dom.Element; |
||||||
|
import org.w3c.dom.Node; |
||||||
|
import org.w3c.dom.NodeList; |
||||||
|
import org.xml.sax.InputSource; |
||||||
|
|
||||||
|
import javax.servlet.http.Cookie; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import javax.servlet.http.HttpSession; |
||||||
|
import javax.xml.crypto.dom.DOMStructure; |
||||||
|
import javax.xml.crypto.dsig.Reference; |
||||||
|
import javax.xml.crypto.dsig.XMLSignature; |
||||||
|
import javax.xml.crypto.dsig.XMLSignatureFactory; |
||||||
|
import javax.xml.crypto.dsig.dom.DOMValidateContext; |
||||||
|
import javax.xml.parsers.DocumentBuilderFactory; |
||||||
|
import java.io.StringReader; |
||||||
|
import java.security.PublicKey; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class SingleLoginHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/hf/login"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||||
|
MyConfig instance = MyConfig.getInstance(); |
||||||
|
JSONObject jsonObject = new JSONObject(); |
||||||
|
HttpSession session = request.getSession(); |
||||||
|
String loginame = ""; |
||||||
|
FineLoggerProvider logger = FineLoggerFactory.getLogger(); |
||||||
|
logger.error(""); |
||||||
|
logger.info(request.getParameter("SAMLResponse")); |
||||||
|
logger.info(request.getParameter("RelayState")); |
||||||
|
try { |
||||||
|
// 获取认证后信息,首先验证信息有效性,并返回认证信息中的登录账号
|
||||||
|
loginame = validate(request.getParameter("SAMLResponse")); |
||||||
|
UserService userControl = UserService.getInstance(); |
||||||
|
User userByUserName = userControl.getUserByUserName(loginame); |
||||||
|
if (userByUserName != null) { |
||||||
|
String cookieName = "saml_callBack"; |
||||||
|
String login = LoginService.getInstance().login(request, response, loginame); |
||||||
|
//wei : 跨域的时候如果返回相对路径,就又跳到跨域前的url+op=fs了。
|
||||||
|
Cookie samlCallBack = com.fr.third.springframework.web.util.WebUtils.getCookie(request, cookieName); |
||||||
|
FineLoggerFactory.getLogger().error("by cookies 回到系统=====登陆用户:{} 回调地址:{}", loginame, samlCallBack); |
||||||
|
if (samlCallBack != null && StringUtils.isNotBlank(samlCallBack.getValue())) { |
||||||
|
String value = samlCallBack.getValue(); |
||||||
|
deleteCookieByName(request,response,cookieName); |
||||||
|
if (value.contains("decision/login")) { |
||||||
|
response.sendRedirect(instance.getUrl()); |
||||||
|
} else { |
||||||
|
response.sendRedirect(value); |
||||||
|
} |
||||||
|
return; |
||||||
|
} |
||||||
|
FineLoggerFactory.getLogger().error("------回到系统=====登陆用户:{} 回调地址: 去主页", loginame); |
||||||
|
response.sendRedirect(instance.getUrl()); |
||||||
|
} else { |
||||||
|
WebUtils.printAsString(response, "login fail:" + loginame + " not find"); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
} |
||||||
|
com.fr.web.utils.WebUtils.flushSuccessMessageAutoClose(request, response, jsonObject); |
||||||
|
} |
||||||
|
|
||||||
|
private void deleteCookieByName(HttpServletRequest request, HttpServletResponse response, String name) { |
||||||
|
Cookie[] cookies = request.getCookies(); |
||||||
|
if (null == cookies) { |
||||||
|
FineLoggerFactory.getLogger().info("没有cookie"); |
||||||
|
} else { |
||||||
|
for (Cookie cookie : cookies) { |
||||||
|
if (cookie.getName().equals(name)) { |
||||||
|
//设置值为null
|
||||||
|
cookie.setValue(null); |
||||||
|
//立即销毁cookie
|
||||||
|
cookie.setMaxAge(0); |
||||||
|
cookie.setPath("/"); |
||||||
|
FineLoggerFactory.getLogger().info("被删除的cookie名字为:{}", cookie.getName(),cookie.getValue()); |
||||||
|
response.addCookie(cookie); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private String validate(String responseString) throws Exception { |
||||||
|
StringReader sr = new StringReader(responseString); |
||||||
|
String loginName = ""; |
||||||
|
InputSource is = new InputSource(sr); |
||||||
|
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); |
||||||
|
dbf.setNamespaceAware(true); |
||||||
|
Document doc = dbf.newDocumentBuilder().parse(is); |
||||||
|
|
||||||
|
// Search the Signature element
|
||||||
|
NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature"); |
||||||
|
if (nl.getLength() == 0) { |
||||||
|
throw new Exception("Cannot find Signature element"); |
||||||
|
} |
||||||
|
Node signatureNode = nl.item(0); |
||||||
|
|
||||||
|
XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM"); |
||||||
|
XMLSignature signature = fac.unmarshalXMLSignature(new DOMStructure(signatureNode)); |
||||||
|
PublicKey pubKey = SertUtils.getSert(); |
||||||
|
// Create ValidateContext
|
||||||
|
DOMValidateContext valCtx = new DOMValidateContext(pubKey, signatureNode); |
||||||
|
|
||||||
|
// Validate the XMLSignature
|
||||||
|
boolean coreValidity = signature.validate(valCtx); |
||||||
|
|
||||||
|
// Check core validation status
|
||||||
|
if (coreValidity == false) { |
||||||
|
// Check the signature validation status
|
||||||
|
List refs = signature.getSignedInfo().getReferences(); |
||||||
|
for (int i = 0; i < refs.size(); i++) { |
||||||
|
Reference ref = (Reference) refs.get(i); |
||||||
|
boolean refValid = ref.validate(valCtx); |
||||||
|
} |
||||||
|
} else { |
||||||
|
// 获取登录账号节点信息
|
||||||
|
NodeList node = doc.getElementsByTagName("NameID"); |
||||||
|
Element e = (Element) node.item(0); |
||||||
|
loginName = e.getTextContent().trim(); |
||||||
|
} |
||||||
|
return loginName; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
package com.fr.plugin.web.hander.member; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.beans.MyAgentBean; |
||||||
|
import com.fr.plugin.core.MyCorpManager; |
||||||
|
import com.fr.plugin.entitys.MyAgentEntity; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class GetDepTree extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/dep/tree"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
JSONArray var3 = MyCorpManager.getInstance().generateDepartmentTree(); |
||||||
|
JSONObject var4 = MyUtils.createSuccessResponseJSONObject(); |
||||||
|
var4.put("depTree", var3); |
||||||
|
WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, var4); |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.plugin.web.hander.member; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.webservice.v10.attach.AttachmentService; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
|
||||||
|
public class GetImageHandler extends BaseHttpHandler { |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/getImage"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
String imageId = httpServletRequest.getParameter("imageId"); |
||||||
|
AttachmentService.getInstance().showImage(httpServletRequest, httpServletResponse, imageId, "png", false); |
||||||
|
// InputStream inputStream = ResourceIOUtils.read("/assets/temp_attach/" + imageId);
|
||||||
|
// if (inputStream != null) {
|
||||||
|
// httpServletResponse.setContentType("image/png");
|
||||||
|
// IOUtil.copyCompletely(inputStream,httpServletResponse.getOutputStream());
|
||||||
|
// }
|
||||||
|
// WebUtils.printAsString(httpServletResponse, "文件未找到");
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
package com.fr.plugin.web.hander.member; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.core.MyCorpManager; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.third.org.apache.commons.lang3.math.NumberUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
public class GetMatch extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/match/method"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
JSONObject jsonObject = MyUtils.createSuccessResponseJSONObject(); |
||||||
|
MyConfig config = MyConfig.getInstance(); |
||||||
|
if (config != null) { |
||||||
|
String match = config.getMatch(); |
||||||
|
int c = NumberUtils.isDigits(match) ? Integer.parseInt(match) : 1; |
||||||
|
jsonObject.put("matchingFsWay", c); |
||||||
|
} |
||||||
|
WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,95 @@ |
|||||||
|
package com.fr.plugin.web.hander.member; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.beans.MyDepBean; |
||||||
|
import com.fr.plugin.beans.MyUserBean; |
||||||
|
import com.fr.plugin.core.MyUserSyncManager; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class GetMemberHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.POST; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/dep/member"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||||
|
int startIdx = WebUtils.getHTTPRequestIntParameter(request, "startIdx", 0); |
||||||
|
int count = WebUtils.getHTTPRequestIntParameter(request, "count", 10); |
||||||
|
String keyword = WebUtils.getHTTPRequestParameter(request, "keyword"); |
||||||
|
// String var7 = WebUtils.getHTTPRequestParameter(request, "secret");
|
||||||
|
String depId = WebUtils.getHTTPRequestParameter(request, "depId"); |
||||||
|
List<MyUserBean> users; |
||||||
|
Long size = 0L; |
||||||
|
try{ |
||||||
|
if (StringUtils.isNotEmpty(keyword)) { |
||||||
|
users = this.getSelectedUser(keyword, startIdx, count); |
||||||
|
size = this.countSelectedUser(keyword); |
||||||
|
} else { |
||||||
|
MyDepBean var10 = new MyDepBean(); |
||||||
|
var10.setId(""); |
||||||
|
var10.setDepName(depId); |
||||||
|
users = this.getSelectedDepartmentUser(var10, startIdx, count); |
||||||
|
size = this.countSelectedDepartmentUser(var10); |
||||||
|
} |
||||||
|
JSONObject jsonObject = toUserResultJo(users, size); |
||||||
|
JSONObject responseJSONObject = MyUtils.createSuccessResponseJSONObject(); |
||||||
|
responseJSONObject.put("userList", jsonObject); |
||||||
|
WebUtils.flushSuccessMessageAutoClose(request, response, responseJSONObject); |
||||||
|
}catch (Exception e){ |
||||||
|
e.printStackTrace(response.getWriter()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private Long countSelectedDepartmentUser(MyDepBean bean) throws Exception { |
||||||
|
return MyUserSyncManager.getInstance().countDepartmentUserList(bean.getDepName()); |
||||||
|
} |
||||||
|
|
||||||
|
private List<MyUserBean> getSelectedDepartmentUser(MyDepBean bean, int start, int count) throws Exception { |
||||||
|
return MyUserSyncManager.getInstance().getDepartmentUserList(bean.getDepName(), start, count); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private List<MyUserBean> getSelectedUser(String key, int start, int count) throws Exception { |
||||||
|
return MyUserSyncManager.getInstance().getUserList(key, start, count); |
||||||
|
} |
||||||
|
|
||||||
|
private Long countSelectedUser(String key) throws Exception { |
||||||
|
return MyUserSyncManager.getInstance().countUserList(key); |
||||||
|
} |
||||||
|
|
||||||
|
public static JSONObject toUserResultJo(List<MyUserBean> users, Long var1) throws Exception { |
||||||
|
JSONObject var2 = JSONObject.create(); |
||||||
|
JSONArray var3 = JSONArray.create(); |
||||||
|
|
||||||
|
JSONObject var6; |
||||||
|
for (Iterator var4 = users.iterator(); var4.hasNext(); var3.put(var6)) { |
||||||
|
MyUserBean var5 = (MyUserBean) var4.next(); |
||||||
|
var6 = var5.createJSONConfig(); |
||||||
|
} |
||||||
|
|
||||||
|
var2.put("total", var1); |
||||||
|
var2.put("users", var3); |
||||||
|
return var2; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,73 @@ |
|||||||
|
package com.fr.plugin.web.hander.member; |
||||||
|
|
||||||
|
import com.fr.base.ServerConfig; |
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.decision.webservice.v10.login.LoginService; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.jodd.util.Base64; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.PrintWriter; |
||||||
|
import java.io.StringWriter; |
||||||
|
|
||||||
|
public class LanlingLogin extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/lanlin/login"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
String token = httpServletRequest.getParameter("token"); |
||||||
|
String callBack = httpServletRequest.getParameter("callBack"); |
||||||
|
JSONObject jsonObject = new JSONObject(); |
||||||
|
MyConfig instance = MyConfig.getInstance(); |
||||||
|
if (StringUtils.isBlank(token)) { |
||||||
|
jsonObject.put("status", -1); |
||||||
|
jsonObject.put("message", "未找到token"); |
||||||
|
com.fr.web.utils.WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
return; |
||||||
|
} |
||||||
|
try { |
||||||
|
token = Base64.decodeToString(token); |
||||||
|
JSONObject json = new JSONObject(token); |
||||||
|
String username = json.getString("username"); |
||||||
|
User user = UserService.getInstance().getUserByUserName(username); |
||||||
|
if (user != null) { |
||||||
|
LoginService.getInstance().login(httpServletRequest, httpServletResponse, username, "", ""); |
||||||
|
if (StringUtils.isNotBlank(callBack)) { |
||||||
|
httpServletResponse.sendRedirect(callBack); |
||||||
|
return; |
||||||
|
} |
||||||
|
String servletName = ServerConfig.getInstance().getServletName(); |
||||||
|
String url = instance.getUrl() + servletName; |
||||||
|
httpServletResponse.sendRedirect(url); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
StringWriter writer = new StringWriter(); |
||||||
|
PrintWriter printWriter = new PrintWriter(writer); |
||||||
|
e.printStackTrace(printWriter); |
||||||
|
String s = writer.getBuffer().toString(); |
||||||
|
WebUtils.printAsString(httpServletResponse,s); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,40 @@ |
|||||||
|
package com.fr.plugin.web.hander.member; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
public class SaveMatch extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.POST; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/match/method"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
String match= WebUtils.getHTTPRequestParameter(httpServletRequest, "matchingFsWay"); |
||||||
|
JSONObject jsonObject = MyUtils.createSuccessResponseJSONObject(); |
||||||
|
MyConfig config=MyConfig.getInstance(); |
||||||
|
if (config != null) { |
||||||
|
config.setMatch(match); |
||||||
|
} |
||||||
|
WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,62 @@ |
|||||||
|
package com.fr.plugin.web.hander.member; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.config.MyConfig; |
||||||
|
import com.fr.plugin.core.MyCoreDBAccess; |
||||||
|
import com.fr.plugin.dao.MyUserDao; |
||||||
|
import com.fr.plugin.entitys.MyUserEntity; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.condition.QueryCondition; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class SaveRelation extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.POST; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/user/relation"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
String opendId = WebUtils.getHTTPRequestParameter(httpServletRequest, "weiXinUser"); |
||||||
|
String fsUser = WebUtils.getHTTPRequestParameter(httpServletRequest, "fsUser"); |
||||||
|
|
||||||
|
MyUserEntity entity = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<MyUserEntity>() { |
||||||
|
public MyUserEntity run(DAOContext content) throws Exception { |
||||||
|
QueryCondition queryCondition = QueryFactory.create(); |
||||||
|
queryCondition.addRestriction(RestrictionFactory.eq("openId", opendId)); |
||||||
|
return content.getDAO(MyUserDao.class).findOne(queryCondition); |
||||||
|
} |
||||||
|
}); |
||||||
|
entity.setFsUserName(fsUser); |
||||||
|
MyCoreDBAccess.getAccessor().runDMLAction(new DBAction<MyUserEntity>() { |
||||||
|
public MyUserEntity run(DAOContext content) throws Exception { |
||||||
|
content.getDAO(MyUserDao.class).update(entity); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
JSONObject responseJSONObject = MyUtils.createSuccessResponseJSONObject(); |
||||||
|
responseJSONObject.put("id", entity.getId()); |
||||||
|
WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, responseJSONObject); |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,92 @@ |
|||||||
|
package com.fr.plugin.web.hander.member; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.utils.SyncThread; |
||||||
|
import com.fr.plugin.utils.WebHookUtil; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* 接受云之家回调接口 |
||||||
|
*/ |
||||||
|
public class SycHookHander extends BaseHttpHandler { |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/syn_hook"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
String eid = httpServletRequest.getParameter("eid"); |
||||||
|
String eventId = httpServletRequest.getParameter("eventId"); |
||||||
|
String createTime = httpServletRequest.getParameter("createTime"); |
||||||
|
String eventType = httpServletRequest.getParameter("eventType"); |
||||||
|
Enumeration<String> names = httpServletRequest.getHeaderNames(); |
||||||
|
Map<String ,String > header=new HashMap<>(); |
||||||
|
while (names.hasMoreElements()) { |
||||||
|
String key = names.nextElement(); |
||||||
|
String v = httpServletRequest.getHeader(key); |
||||||
|
header.put(key,v); |
||||||
|
} |
||||||
|
String contentBody = "eid=" + eid+ "&eventType=" + eventType + "&eventId=" + eventId+"&createTime="+createTime; |
||||||
|
FineLoggerFactory.getLogger().info(contentBody); |
||||||
|
Map<String,String> paramsMap = new TreeMap<String,String>(); |
||||||
|
paramsMap.put("eid", eid); |
||||||
|
paramsMap.put("eventType", eventType); |
||||||
|
paramsMap.put("eventId", eventId); |
||||||
|
paramsMap.put("createTime", createTime); |
||||||
|
contentBody = mapToString(paramsMap); |
||||||
|
if(WebHookUtil.checkAuth("123", contentBody, header)){ |
||||||
|
FineLoggerFactory.getLogger().info("接收到一个合法推送,内容为: "+contentBody); |
||||||
|
switch (eventType){ |
||||||
|
case "user_enter": |
||||||
|
case "person_update": |
||||||
|
case "user_leave": |
||||||
|
case "user_phone_update": |
||||||
|
new Thread(new SyncThread("user")).start(); |
||||||
|
break; |
||||||
|
case "org_add": |
||||||
|
case "org_update": |
||||||
|
case "org_admin": |
||||||
|
case "org_delete": |
||||||
|
case "person_role": |
||||||
|
new Thread(new SyncThread("dep")).start(); |
||||||
|
break; |
||||||
|
} |
||||||
|
WebUtils.printAsString(httpServletResponse,"ok"); |
||||||
|
}else{ |
||||||
|
FineLoggerFactory.getLogger().info("接收到一个非法推送"); |
||||||
|
WebUtils.printAsString(httpServletResponse,"ok"); |
||||||
|
} |
||||||
|
} |
||||||
|
// 按key字段顺序排序,组装k1=v1&k2=v2形式
|
||||||
|
private String mapToString(Map<String, String> map) { |
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
Set<String> keys = map.keySet(); |
||||||
|
for (String key : keys) { |
||||||
|
sb.append(key).append("=").append(map.get(key)).append("&"); |
||||||
|
} |
||||||
|
if (sb.length() > 0) { |
||||||
|
return sb.substring(0, sb.length() - 1); |
||||||
|
} else { |
||||||
|
return sb.toString(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.plugin.web.hander.member; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.utils.MyUtils; |
||||||
|
import com.fr.third.org.apache.commons.lang3.math.NumberUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
public class SynUserHander extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.POST; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/syn/member"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
JSONObject jsonObject = MyUtils.createSuccessResponseJSONObject(); |
||||||
|
MyUtils.startUpUserSyncThread();//启动一次同步
|
||||||
|
WebUtils.flushSuccessMessageAutoClose(httpServletRequest, httpServletResponse, jsonObject); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.fr.plugin.web.hander; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.plugin.core.MyCoreDBAccess; |
||||||
|
import com.fr.plugin.dao.PushDao; |
||||||
|
import com.fr.plugin.entitys.PushEntity; |
||||||
|
import com.fr.stable.db.action.DBAction; |
||||||
|
import com.fr.stable.db.dao.DAOContext; |
||||||
|
import com.fr.stable.query.QueryFactory; |
||||||
|
import com.fr.stable.query.restriction.RestrictionFactory; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
public class pushBeanHandler extends BaseHttpHandler { |
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.GET; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/xxx/pushBean"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
||||||
|
String id = httpServletRequest.getParameter("id"); |
||||||
|
PushEntity entity = MyCoreDBAccess.getAccessor().runQueryAction(new DBAction<PushEntity>() { |
||||||
|
@Override |
||||||
|
public PushEntity run(DAOContext daoContext) throws Exception { |
||||||
|
return daoContext.getDAO(PushDao.class).findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("pushId", id))); |
||||||
|
} |
||||||
|
}); |
||||||
|
if (entity != null) { |
||||||
|
String url = entity.getUrl(); |
||||||
|
httpServletResponse.sendRedirect(url); |
||||||
|
} |
||||||
|
WebUtils.printAsString(httpServletResponse, "未找到这个推送"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,152 @@ |
|||||||
|
FS-Module-WeiXin_Manager=\u5FAE\u4FE1\u7BA1\u7406 |
||||||
|
FS-Zch_Basic=\u57FA\u672C\u4FE1\u606F |
||||||
|
FS-Schedule-Notification_WeiXin=\u63A8\u9001\u5FAE\u4FE1\u6D88\u606F |
||||||
|
FS-Schedule-Notification_WeiXin_CorpID=\u4F01\u4E1A\u5E94\u7528ID\uFF1A |
||||||
|
FS-Schedule-Notification_WeiXin_Users=\u5FAE\u4FE1\u7528\u6237\uFF1A |
||||||
|
FS-Schedule-Notification_WeiXin_DepID=\u90E8\u95E8ID\uFF1A |
||||||
|
FS-Schedule-Notification_WeiXin_Content=\u6D88\u606F\u5185\u5BB9\uFF1A |
||||||
|
FS-Schedule-Notification_WeiXin_WithLink=\u5B9A\u65F6\u7ED3\u679C\u8BBF\u95EE\u94FE\u63A5 |
||||||
|
FS-Schedule_Mobile-Push-WeiXinId-Not-Null=\u8BF7\u8BBE\u7F6E\u63A8\u9001\u7684\u5FAE\u4FE1\u5E94\u7528 |
||||||
|
FS-Zch_Recive_Data_URL=\u63A5\u6536\u6570\u636EURL |
||||||
|
FS-Zch_Corp_ID=\u5FAE\u4FE1\u4F01\u4E1A\u53F7ID |
||||||
|
FS-Zch_Secret=\u5FAE\u4FE1\u5E94\u7528\u79D8\u94A5 |
||||||
|
FS-Zch_Member_Management=\u5FAE\u4FE1\u6210\u5458\u7BA1\u7406 |
||||||
|
FS-Zch_User_Same_With_FS=\u5FAE\u4FE1\u53F7\u5339\u914D |
||||||
|
FS-Zch_Mobile_Same_With_FS=\u624B\u673A\u8D26\u53F7\u5339\u914D |
||||||
|
FS-Zch_Manual_Matching_FS=\u624B\u52A8\u5339\u914D |
||||||
|
FS-Zch_Custom_Matching_FS=\u81EA\u5B9A\u4E49\u5339\u914D |
||||||
|
FS-Zch_UserID=\u5FAE\u4FE1\u6210\u5458\u540D |
||||||
|
FS-Zch_FSUserName=\u62A5\u8868\u7528\u6237\u540D |
||||||
|
FS-Zch_Name=\u59D3\u540D |
||||||
|
FS-Zch_Department=\u5FAE\u4FE1\u90E8\u95E8 |
||||||
|
FS-Zch_UrlHint=\u670D\u52A1\u5668\u4FDD\u5B58\u7684Url: |
||||||
|
FS-Zch_Refresh_User=\u66F4\u65B0\u901A\u8BAF\u5F55 |
||||||
|
FS-Zch_Mobile=\u5FAE\u4FE1\u6210\u5458\u624B\u673A\u53F7 |
||||||
|
FS-Zch_Matching_Way=\u7528\u6237\u5339\u914D\u65B9\u5F0F |
||||||
|
FS-Zch_Hint=\u63D0\u793A |
||||||
|
FS-Zch_Loading=\u6B63\u5728\u52A0\u8F7D\u7528\u6237... |
||||||
|
FS-Zch_Mobile_Not_Supported=\u5F53\u524DHTML5\u62A5\u8868\u4E0D\u652F\u6301\u6839\u636E\u624B\u673A\u53F7\u5339\u914D\uFF0C\u8BF7\u5347\u7EA7HTML5\u63D2\u4EF6 |
||||||
|
FS-Zch_Mobile-Push-WeiXin-Terminal=\u5FAE\u4FE1\u901A\u77E5 |
||||||
|
FS-Zch_Mobile-Push-WeiXin-AgentID=\u5E94\u7528ID |
||||||
|
FS-Zch_Expired_Error=\u9519\u8BEF\u4EE3\u7801:11100016 \u60A8\u4F7F\u7528\u4E86\u672A\u6CE8\u518C\u7684\u529F\u80FD\u2014\u2014\u5FAE\u4FE1\u96C6\u6210 |
||||||
|
FS-Zch_Expired_Solution=\u5FAE\u4FE1\u529F\u80FD\u672A\u6CE8\u518C\uFF0C\u5982\u9700\u4F7F\u7528\u8BF7\u8054\u7CFB\u9500\u552E |
||||||
|
FS-Zch_Agent_Management=\u5E94\u7528\u7BA1\u7406 |
||||||
|
FS-Zch_Member_Manage=\u6210\u5458\u7BA1\u7406 |
||||||
|
FS-Zch_Agent_Config=\u5E94\u7528\u5FEB\u6377\u914D\u7F6E |
||||||
|
FS-Zch_Agent_Name=\u4F01\u4E1A\u5E94\u7528\u540D\u79F0 |
||||||
|
FS-Zch_Enterprise_WeChat=\u4F01\u4E1A\u5FAE\u4FE1 |
||||||
|
FS-Zch_New_Agent=\u65B0\u5EFA\u5E94\u7528 |
||||||
|
FS-Zch_ReportServer=\u62A5\u8868\u670D\u52A1\u5668 |
||||||
|
FS-Zch_ReportServer_Url=\u62A5\u8868\u670D\u52A1\u5668\u5730\u5740 |
||||||
|
FS-Zch_ReportServer_Tip=\u8BF7\u4F7F\u7528\u4E8C\u7EA7\u6216\u4E8C\u7EA7\u4EE5\u4E0A\u57DF\u540D\uFF0C\u4E14\u9700\u901A\u8FC7ICP\u5907\u6848\uFF0C\u7AEF\u53E3\u63A8\u8350\u4F7F\u752880\u6216443 |
||||||
|
FS-Zch_Save=\u4FDD\u5B58 |
||||||
|
FS-Zch_DeleteAgent_Confirm_Popup=\u786E\u5B9A\u5220\u9664\u6B64\u4F01\u4E1A\u5FAE\u4FE1\u5E94\u7528 |
||||||
|
FS-Zch_Confirm=\u786E\u5B9A |
||||||
|
FS-Zch_Cancel=\u53D6\u6D88 |
||||||
|
FS-Zch_Create_WeiXin_Url=\u751F\u6210\u5FAE\u4FE1\u94FE\u63A5 |
||||||
|
FS-Zch_WeiXin_Url=\u5FAE\u4FE1\u94FE\u63A5 |
||||||
|
FS-Zch_Platform_Page=\u94FE\u63A5\u9875\u9762 |
||||||
|
FS-Zch_Platform=\u51B3\u7B56\u5E73\u53F0 |
||||||
|
FS-Zch_Platform_Report=\u5355\u4E2A\u6A21\u677F |
||||||
|
FS-Zch_Create_Url=\u751F\u6210\u94FE\u63A5 |
||||||
|
FS-Zch_Copy_Url=\u590D\u5236 |
||||||
|
FS-Zch_Modify_Agent=\u4FEE\u6539\u4F01\u4E1A\u5FAE\u4FE1 |
||||||
|
FS-Zch_Attention=\u6CE8\u610F |
||||||
|
FS-Zch_CreateAgent_Not_Null=\u5FAE\u4FE1\u5E94\u7528\u540D\u79F0\uFF0CCorpID\uFF0C\u7BA1\u7406\u7EC4\u51ED\u8BC1\u79D8\u94A5\u4E0D\u53EF\u4E3A\u7A7A |
||||||
|
BI-Basic_Search=\u641C\u7D22 |
||||||
|
FS-Zch_Default_Agent_Name=FineReport\u4F01\u4E1A\u5E94\u7528 |
||||||
|
FS-Zch_Default_Schedule_Agent_Name=\u5E94\u7528(\u5B9A\u65F6\u63A8\u9001) |
||||||
|
FS-Zch_Unknown_Agent=\u7F51\u7EDC\u5F02\u5E38\u6216\u8005\u8BF7\u786E\u8BA4\u5F53\u524D\u4F7F\u7528\u7684CorpId\u548CSecret\u662F\u5426\u6B63\u786E(\u82E5\u4E3A\u7BA1\u7406\u7EC4\u5BC6\u94A5\uFF0C\u8BF7\u6539\u4E3A\u5E94\u7528Secret) |
||||||
|
FS-Zch_Management_Secret=\u60A8\u5F53\u524D\u5E94\u7528\u7684secret\u4E3A\u7BA1\u7406\u7EC4secret\uFF0C\u4E3A\u4E86\u60A8\u6B63\u5E38\u4F7F\u7528\u5FAE\u4FE1\u96C6\u6210\u529F\u80FD\uFF0C\u8BF7\u66FF\u6362\u4E3A\u5E94\u7528secret |
||||||
|
FS-Zch_Copy_Success=\u590D\u5236\u6210\u529F |
||||||
|
FS-Zch_Match_Way=\u5339\u914D\u65B9\u5F0F |
||||||
|
FS-Zch_Match_Setting=\u5339\u914D\u8BBE\u7F6E |
||||||
|
FS-Zch_DataSet=\u6570\u636E\u96C6 |
||||||
|
FS-Zch_UserId=\u5FAE\u4FE1\u7528\u6237\u540D |
||||||
|
FS-Zch_FsUserName=\u62A5\u8868\u7528\u6237\u540D |
||||||
|
FS-Zch_Address_Book=\u901A\u8BAF\u5F55 |
||||||
|
FS-Zch_Member_Update=\u7ACB\u5373\u66F4\u65B0 |
||||||
|
FS-Zch_Set_Update=\u8BBE\u7F6E\u81EA\u52A8\u66F4\u65B0 |
||||||
|
FS-Zch_Start_Update=\u542F\u7528\u81EA\u52A8\u66F4\u65B0 |
||||||
|
FS-Zch_Per=\u6BCF |
||||||
|
FS-Zch_Day=\u5929 |
||||||
|
FS-Zch_Week=\u5468 |
||||||
|
FS-Zch_Hour=\u65F6 |
||||||
|
FS-Zch_Minute=\u5206 |
||||||
|
FS-Zch_Monday=\u5468\u4E00 |
||||||
|
FS-Zch_Tuesday=\u5468\u4E8C |
||||||
|
FS-Zch_Wednesday=\u5468\u4E09 |
||||||
|
FS-Zch_Thursday=\u5468\u56DB |
||||||
|
FS-Zch_Friday=\u5468\u4E94 |
||||||
|
FS-Zch_Saturday=\u5468\u516D |
||||||
|
FS-Zch_Sunday=\u5468\u65E5 |
||||||
|
FS-Zch_Update_Once=\u5B9A\u65F6\u540C\u6B65\u4E00\u6B21 |
||||||
|
FS-Zch_Not_Null=\u4E0D\u5141\u8BB8\u4E3A\u7A7A |
||||||
|
FS-Zch_Save_Agent_Fail=\u5B58\u50A8\u5E94\u7528\u4FE1\u606F\u5931\u8D25 |
||||||
|
FS-Zch_Agent_Name_Exist=\u5E94\u7528\u540D\u79F0\u5DF2\u5B58\u5728 |
||||||
|
FS-Zch_Secret_Exist=secret\u5DF2\u5B58\u5728 |
||||||
|
FS-Zch_Organizational_Structure=\u7EC4\u7EC7\u67B6\u6784 |
||||||
|
FS-Zch_Tag=\u6807\u7B7E |
||||||
|
FS-Zch_Illegal=\u4E0D\u5408\u6CD5 |
||||||
|
FS-Zch_Proxy=\u5FAE\u4FE1\u4EE3\u7406\u8DF3\u8F6C |
||||||
|
FS-Zch_Proxy_Address=\u4EE3\u7406\u670D\u52A1\u5668\u5730\u5740 |
||||||
|
FS-Zch_Test_Proxy_Address=\u6D4B\u8BD5\u8FDE\u63A5 |
||||||
|
FS-Zch_Connection_Success=\u8FDE\u63A5\u6210\u529F |
||||||
|
FS-Zch_Connection_Fail=\u8FDE\u63A5\u5931\u8D25 |
||||||
|
FS-Zch_Test_Connection=\u6D4B\u8BD5\u8FDE\u63A5\u4E2D... |
||||||
|
FS-Zch_Agent_Quick_Config=\u4E3B\u9875\u578B\u5E94\u7528\u5FEB\u901F\u914D\u7F6E |
||||||
|
FS-Zch_One_Key_Config=\u4E00\u952E\u914D\u7F6E |
||||||
|
FS-Zch_One_Key_Config_Tip=\u5F53\u524D\u5E94\u7528\u5DF2\u914D\u7F6E\u4E3B\u9875\u6216\u83DC\u5355\uFF0C\u7EE7\u7EED\u914D\u7F6E\u5C06\u6E05\u7A7A\u539F\u59CB\u8BBE\u7F6E |
||||||
|
FS-Zch_Adress_Book_Secret=\u901A\u8BAF\u5F55\u7BA1\u7406secret |
||||||
|
FS-Zch_Import_Adress_Book=\u5BFC\u5165\u5FAE\u4FE1\u901A\u8BAF\u5F55 |
||||||
|
FS-Zch_Syn_Adress_Book=\u540C\u6B65\u62A5\u8868\u901A\u8BAF\u5F55\u5230\u5FAE\u4FE1 |
||||||
|
FS-Zch_Env_Check=\u5FAE\u4FE1\u96C6\u6210\u73AF\u5883\u914D\u7F6E\u68C0\u6D4B |
||||||
|
FS-Zch_Check_Items=\u68C0\u6D4B\u9879\u76EE |
||||||
|
FS-Zch_Check_Result=\u72B6\u6001 |
||||||
|
FS-Zch_Check_Proposal=\u5EFA\u8BAE |
||||||
|
FS-Zch_Configuring=\u6B63\u5728\u914D\u7F6E\u4E2D... |
||||||
|
FS-Zch_Configure_Success=\u914D\u7F6E\u6210\u529F |
||||||
|
FS-Zch_Configure_Fail=\u4E00\u952E\u914D\u7F6E\u5931\u8D25 |
||||||
|
FS-Zch_Reconfigure=\u8BF7\u91CD\u65B0\u914D\u7F6E |
||||||
|
FS-Zch_Start_With_Http=\u670D\u52A1\u5668\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934 |
||||||
|
FS-Zch_Get-Agent-Fail=\u83B7\u53D6\u5E94\u7528\u5931\u8D25 |
||||||
|
FS-Zch_Sync-Contacts-Tip=\u5F53\u524D\u5FAE\u4FE1\u901A\u8BAF\u5F55\u4E0D\u4E3A\u7A7A\uFF0C\u7EE7\u7EED\u5BFC\u5165\u4F1A\u4E22\u5931\u539F\u59CB\u6210\u5458\u4FE1\u606F |
||||||
|
FS-Zch_Sync-Contacts=\u6B63\u5728\u540C\u6B65\u4E2D... |
||||||
|
FS-Zch_Sync-Contacts-Success=\u5FAE\u4FE1\u901A\u8BAF\u5F55\u5BFC\u5165\u6210\u529F |
||||||
|
FS-Zch_Sync-Contacts-Fail=\u5FAE\u4FE1\u901A\u8BAF\u5F55\u5BFC\u5165\u5931\u8D25 |
||||||
|
FS-Zch_Import-Success=\u6210\u529F\u5BFC\u5165 |
||||||
|
FS-Zch_People=\u4EBA |
||||||
|
FS-Zch_Fail=\u5931\u8D25 |
||||||
|
FS-Zch_Debugger-Content=\u8C03\u8BD5\u5185\u5BB9 |
||||||
|
FS-Zch_Debugger-Type-Basic-Property=\u57FA\u672C\u5C5E\u6027 |
||||||
|
FS-Zch_Debugger-Type-Login=\u5355\u70B9\u767B\u5F55 |
||||||
|
FS-Zch_Debugger-Type-Push-Message=\u63A8\u9001\u6D88\u606F |
||||||
|
FS-Zch_Debugger-WeiXin-Agent=\u5FAE\u4FE1\u5E94\u7528 |
||||||
|
FS-Zch_Debugger-Parameter-List=\u53C2\u6570\u5217\u8868 |
||||||
|
FS-Zch_Debugger-Input-Parameter=\u8F93\u5165\u53C2\u6570 |
||||||
|
FS-Zch_Debugger-WeiXin-User=\u5FAE\u4FE1\u7528\u6237 |
||||||
|
FS-Zch_Debugger-Fs-User=\u62A5\u8868\u7528\u6237 |
||||||
|
FS-Zch_Debugger-Push-User=\u63A8\u9001\u7528\u6237 |
||||||
|
FS-Zch_Debugger-Start-Check=\u5F00\u59CB\u68C0\u6D4B |
||||||
|
FS-Zch_Debugger-Show-Result=\u68C0\u6D4B\u7ED3\u679C |
||||||
|
FS-Zch_Debugger-Get-Token=\u83B7\u53D6token |
||||||
|
FS-Zch_Debugger-Get-Department=\u83B7\u53D6\u90E8\u95E8 |
||||||
|
FS-Zch_Debugger-Get-Domain=\u53EF\u4FE1\u57DF\u540D |
||||||
|
FS-Zch_Debugger-Home-Url=\u4E3B\u9875/\u83DC\u5355\u94FE\u63A5 |
||||||
|
FS-Zch_ErrorCode=\u5FAE\u4FE1\u8FD4\u56DE\u9519\u8BEF\u7801 |
||||||
|
FS-Zch_ErrorMsg=\u9519\u8BEF\u63CF\u8FF0 |
||||||
|
FS-Zch_Solution=\u51ED\u9519\u8BEF\u7801\u53EF\u4EE5\u81F3\u5FAE\u4FE1\u67E5\u770B\u66F4\u591A\u4FE1\u606F |
||||||
|
FS-Zch_Dep=\u90E8\u95E8 |
||||||
|
FS-Zch_Phone=\u624B\u673A\u53F7 |
||||||
|
FS-Zch_ErrorDetail=\u9519\u8BEF\u4FE1\u606F |
||||||
|
FS-Zch_None-Synchronous-User=\u65E0\u53EF\u540C\u6B65\u7528\u6237 |
||||||
|
FS-Zch_NetWork-Anomaly=\u7F51\u7EDC\u5F02\u5E38\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u914D\u7F6E |
||||||
|
FS-Zch_Delete-Agent-Fail=\u5220\u9664\u5E94\u7528\u5931\u8D25 |
||||||
|
FS-Zch_Save-ReportServer-Url-Fail=\u4FDD\u5B58\u670D\u52A1\u5668\u5730\u5740\u5931\u8D25 |
||||||
|
FS-Zch_Get-ReportServer-Url-Fail=\u83B7\u53D6\u670D\u52A1\u5668\u5730\u5740\u5931\u8D25 |
||||||
|
FS-Zch_Tip-Get-ReportServer-Url-Fail=\u8BF7\u914D\u7F6E\u670D\u52A1\u5668\u5730\u5740 |
||||||
|
FS-Zch_Create-Agent-Menu-Fail=\u521B\u5EFA\u5E94\u7528\u83DC\u5355\u5931\u8D25 |
||||||
|
FS-Zch_Get-Agent-Menu-Fail=\u83B7\u53D6\u5E94\u7528\u83DC\u5355\u5931\u8D25 |
||||||
|
FS-Zch_Save-Proxy-Server-Url-Fail=\u5B58\u50A8\u4EE3\u7406\u670D\u52A1\u5668\u5730\u5740\u5931\u8D25 |
||||||
|
FS-Zch_Match-Way-Not-Null=\u5339\u914D\u8BBE\u7F6E\u4E0D\u80FD\u4E3A\u7A7A |
||||||
|
FS-CH_title=\u534E\u53D1\u63D2\u4EF6 |
@ -0,0 +1,152 @@ |
|||||||
|
FS-Module-WeiXin_Manager=WeChart Management |
||||||
|
FS-Zch_Basic=Basic |
||||||
|
FS-Schedule-Notification_WeiXin=Push WeChart Message |
||||||
|
FS-Schedule-Notification_WeiXin_CorpID=CorpID\: |
||||||
|
FS-Schedule-Notification_WeiXin_Users=WeiXin Users\: |
||||||
|
FS-Schedule-Notification_WeiXin_DepID=Department ID\: |
||||||
|
FS-Schedule-Notification_WeiXin_Content=Message\: |
||||||
|
FS-Schedule-Notification_WeiXin_WithLink=Cpr Link |
||||||
|
FS-Schedule_Mobile-Push-WeiXinId-Not-Null=Please set which WeChat app to push. |
||||||
|
FS-Zch_Recive_Data_URL=Recive Data Url |
||||||
|
FS-Zch_Corp_ID=WeChart Corp ID |
||||||
|
FS-Zch_Secret= Agent secret |
||||||
|
FS-Zch_Member_Management=WeChart member management |
||||||
|
FS-Zch_User_Same_With_FS=matching FS user according to the userId |
||||||
|
FS-Zch_Mobile_Same_With_FS=matching FS user according to the phone number |
||||||
|
FS-Zch_Manual_Matching_FS=matching FS user manually |
||||||
|
FS-Zch_Custom_Matching_FS=custom matching |
||||||
|
FS-Zch_UserID=WeChart member name |
||||||
|
FS-Zch_FSUserName=Report user name |
||||||
|
FS-Zch_Name=Name |
||||||
|
FS-Zch_Department=WeChart Department |
||||||
|
FS-Zch_UrlHint=Server Url\: |
||||||
|
FS-Zch_Refresh_User=Refresh |
||||||
|
FS-Zch_Mobile=WeiXin member mobile |
||||||
|
FS-Zch_Matching_Way=The matching way to FS user |
||||||
|
FS-Zch_Hint=Hint |
||||||
|
FS-Zch_Loading=Loading users... |
||||||
|
FS-Zch_Mobile_Not_Supported=The html5 report does not support matching FS user by mobile, please upgrade your html5 plugin |
||||||
|
FS-Zch_Mobile-Push-WeiXin-Terminal=WeiXin |
||||||
|
FS-Zch_Mobile-Push-WeiXin-AgentID=AgentID |
||||||
|
FS-Zch_Expired_Error=Error Code\: 11100016 You are using unregistered function--WeChat integration |
||||||
|
FS-Zch_Expired_Solution=WeChat plugin is not registered. If necessary, please contact sales. |
||||||
|
FS-Zch_Agent_Management=Application management |
||||||
|
FS-Zch_Member_Manage=Member management |
||||||
|
FS-Zch_Agent_Config=Application shortcut configuration |
||||||
|
FS-Zch_Agent_Name=Application name |
||||||
|
FS-Zch_Enterprise_WeChat=Enterprise WeChat |
||||||
|
FS-Zch_New_Agent=Create enterprise application |
||||||
|
FS-Zch_ReportServer=Report server |
||||||
|
FS-Zch_ReportServer_Url=Report server address |
||||||
|
FS-Zch_ReportServer_Tip=Please use level two or above two domain name, and need to record through ICP, port recommended 80 or 443. |
||||||
|
FS-Zch_Save=Save |
||||||
|
FS-Zch_DeleteAgent_Confirm_Popup=Determine to delete the enterprise WeChat application |
||||||
|
FS-Zch_Confirm=Confirm |
||||||
|
FS-Zch_Cancel=Cancel |
||||||
|
FS-Zch_Create_WeiXin_Url=Generating WeChat links |
||||||
|
FS-Zch_WeiXin_Url=WeChat link |
||||||
|
FS-Zch_Platform_Page=Link page |
||||||
|
FS-Zch_Platform=Decision platform |
||||||
|
FS-Zch_Platform_Report=A single model |
||||||
|
FS-Zch_Create_Url=Generating links |
||||||
|
FS-Zch_Copy_Url=Copy |
||||||
|
FS-Zch_Modify_Agent=Revision of enterprise WeChat |
||||||
|
FS-Zch_Attention=Attention |
||||||
|
FS-Zch_CreateAgent_Not_Null=WeChat application name, CorpID, group key management certificate can not be empty |
||||||
|
BI-Basic_Search=Search |
||||||
|
FS-Zch_Default_Agent_Name=FineReport Corp Agent |
||||||
|
FS-Zch_Default_Schedule_Agent_Name=Application (timing task) |
||||||
|
FS-Zch_Unknown_Agent=Network anomaly or please confirm that the CorpId and Secret that are currently used are correct. If you want to manage group key, please change to Secret. |
||||||
|
FS-Zch_Management_Secret=The secret you are currently using is the management group secret. For your normal use of WeChat integration function, please replace it with application secret. |
||||||
|
FS-Zch_Copy_Success=Replicating success |
||||||
|
FS-Zch_Match_Way=Matching method |
||||||
|
FS-Zch_Match_Setting=Matching settings |
||||||
|
FS-Zch_DataSet=data set |
||||||
|
FS-Zch_UserId=weixin userid |
||||||
|
FS-Zch_FsUserName=Report member name |
||||||
|
FS-Zch_Address_Book= Address book |
||||||
|
FS-Zch_Member_Update=Immediate update |
||||||
|
FS-Zch_Set_Update=Setting auto update |
||||||
|
FS-Zch_Start_Update=Enable automatic update |
||||||
|
FS-Zch_Per=Per |
||||||
|
FS-Zch_Day=Day |
||||||
|
FS-Zch_Week=Week |
||||||
|
FS-Zch_Hour=Hour |
||||||
|
FS-Zch_Minute=Minute |
||||||
|
FS-Zch_Monday=Monday |
||||||
|
FS-Zch_Tuesday=Tuesday |
||||||
|
FS-Zch_Wednesday=Wednesday |
||||||
|
FS-Zch_Thursday=Thursday |
||||||
|
FS-Zch_Friday=Friday |
||||||
|
FS-Zch_Saturday=Saturday |
||||||
|
FS-Zch_Sunday=Sunday |
||||||
|
FS-Zch_Update_Once=to update once |
||||||
|
FS-Zch_Not_Null=Not allowed to be empty |
||||||
|
FS-Zch_Save_Agent_Fail=Save agent fail |
||||||
|
FS-Zch_Agent_Name_Exist=The application name has already existed |
||||||
|
FS-Zch_Secret_Exist=Secret already exists |
||||||
|
FS-Zch_Organizational_Structure=organizational structure |
||||||
|
FS-Zch_Tag=Tag |
||||||
|
FS-Zch_Illegal=Illegal |
||||||
|
FS-Zch_Proxy=WeChat proxy jump |
||||||
|
FS-Zch_Proxy_Address=Proxy server address |
||||||
|
FS-Zch_Test_Proxy_Address=Test connection |
||||||
|
FS-Zch_Connection_Success=Connection success |
||||||
|
FS-Zch_Connection_Fail=Connection failed |
||||||
|
FS-Zch_Test_Connection=Test the connection... |
||||||
|
FS-Zch_Agent_Quick_Config=Fast configuration of home page application |
||||||
|
FS-Zch_One_Key_Config=One key configuration |
||||||
|
FS-Zch_One_Key_Config_Tip=The home page or menu has been configured in the current application. The configuration will empty the original settings. |
||||||
|
FS-Zch_Adress_Book_Secret=Address book management secret |
||||||
|
FS-Zch_Import_Adress_Book=Import the WeChat address book |
||||||
|
FS-Zch_Syn_Adress_Book=Sync report to WeChat |
||||||
|
FS-Zch_Env_Check=WeChat integrated environment configuration detection |
||||||
|
FS-Zch_Check_Items=Detection project |
||||||
|
FS-Zch_Check_Result=State |
||||||
|
FS-Zch_Check_Proposal=Proposal |
||||||
|
FS-Zch_Configuring=Configuring... |
||||||
|
FS-Zch_Configure_Success=Configuration success |
||||||
|
FS-Zch_Configure_Fail=One key configuration fail |
||||||
|
FS-Zch_Reconfigure=Please reconfigure |
||||||
|
FS-Zch_Start_With_Http=The server address must begin with HTTP or HTTPS |
||||||
|
FS-Zch_Get-Agent-Fail=Gain application failure |
||||||
|
FS-Zch_Sync-Contacts-Tip=The current WeChat address book is not empty. Continuing importing will lose the original member information. |
||||||
|
FS-Zch_Sync-Contacts=Synchronizing |
||||||
|
FS-Zch_Sync-Contacts-Success=Synchronization success |
||||||
|
FS-Zch_Sync-Contacts-Fail=Synchronization failure |
||||||
|
FS-Zch_Import-Success=Successfully imported |
||||||
|
FS-Zch_People=people |
||||||
|
FS-Zch_Fail=fail |
||||||
|
FS-Zch_Debugger-Content=Debug content |
||||||
|
FS-Zch_Debugger-Type-Basic-Property=Basic property |
||||||
|
FS-Zch_Debugger-Type-Login=Single sign on |
||||||
|
FS-Zch_Debugger-Type-Push-Message=Push message |
||||||
|
FS-Zch_Debugger-WeiXin-Agent=WeChat application |
||||||
|
FS-Zch_Debugger-Parameter-List=Parameter list |
||||||
|
FS-Zch_Debugger-Input-Parameter=Input parameter |
||||||
|
FS-Zch_Debugger-WeiXin-User=WeChat users |
||||||
|
FS-Zch_Debugger-Fs-User=FS Users |
||||||
|
FS-Zch_Debugger-Push-User=Push user |
||||||
|
FS-Zch_Debugger-Start-Check=Start detection |
||||||
|
FS-Zch_Debugger-Show-Result=Detection result |
||||||
|
FS-Zch_Debugger-Get-Token=Get Token |
||||||
|
FS-Zch_Debugger-Get-Department=Access Department |
||||||
|
FS-Zch_Debugger-Get-Domain=Trusted domain name |
||||||
|
FS-Zch_Debugger-Home-Url=Home page / menu link |
||||||
|
FS-Zch_ErrorCode=WeChat returns error code |
||||||
|
FS-Zch_ErrorMsg=Error description |
||||||
|
FS-Zch_Solution=With the error code, you can see more information from WeChat |
||||||
|
FS-Zch_Dep=Department |
||||||
|
FS-Zch_Phone=Mobile |
||||||
|
FS-Zch_ErrorDetail=Error message |
||||||
|
FS-Zch_None-Synchronous-User=Non synchronous user |
||||||
|
FS-Zch_NetWork-Anomaly=Network exception, please check the network configuration |
||||||
|
FS-Zch_Delete-Agent-Fail=Delete application failure |
||||||
|
FS-Zch_Save-ReportServer-Url-Fail=Save server address failure |
||||||
|
FS-Zch_Get-ReportServer-Url-Fail=Getting server address failure |
||||||
|
FS-Zch_Tip-Get-ReportServer-Url-Fail=Please configure the server address |
||||||
|
FS-Zch_Create-Agent-Menu-Fail=Create application menu failure |
||||||
|
FS-Zch_Get-Agent-Menu-Fail=Fail to get the application menu |
||||||
|
FS-Zch_Save-Proxy-Server-Url-Fail=Storage proxy server address failure |
||||||
|
FS-Zch_Match-Way-Not-Null=Matching settings can not be empty |
||||||
|
FS-CH_title=cloud home plugin |
@ -0,0 +1,151 @@ |
|||||||
|
FS-Module-Zch_Manager=\u534E\u53D1\u7BA1\u7406 |
||||||
|
FS-Zch_Basic=\u57FA\u672C\u4FE1\u606F |
||||||
|
FS-Schedule-Notification_WeiXin=\u63A8\u9001\u534E\u53D1\u6D88\u606F |
||||||
|
FS-Schedule-Notification_Zch_CorpID=\u4F01\u4E1A\u5E94\u7528ID\uFF1A |
||||||
|
FS-Schedule-Notification_Zch_Users=\u534E\u53D1\u7528\u6237\uFF1A |
||||||
|
FS-Schedule-Notification_Zch_DepID=\u90E8\u95E8ID\uFF1A |
||||||
|
FS-Schedule-Notification_Zch_Content=\u6D88\u606F\u5185\u5BB9\uFF1A |
||||||
|
FS-Schedule-Notification_Zch_WithLink=\u5B9A\u65F6\u7ED3\u679C\u8BBF\u95EE\u94FE\u63A5 |
||||||
|
FS-Schedule_Mobile-Push-WeiXinId-Not-Null=\u8BF7\u8BBE\u7F6E\u63A8\u9001\u7684\u534E\u53D1\u5E94\u7528 |
||||||
|
FS-Zch_Recive_Data_URL=\u63A5\u6536\u6570\u636EURL |
||||||
|
FS-Zch_Corp_ID=\u534E\u53D1\u4F01\u4E1A\u53F7ID |
||||||
|
FS-Zch_Secret=\u534E\u53D1\u5E94\u7528\u79D8\u94A5 |
||||||
|
FS-Zch_Member_Management=\u534E\u53D1\u6210\u5458\u7BA1\u7406 |
||||||
|
FS-Zch_User_Same_With_FS=\u534E\u53D1\u53F7\u5339\u914D |
||||||
|
FS-Zch_Mobile_Same_With_FS=\u624B\u673A\u8D26\u53F7\u5339\u914D |
||||||
|
FS-Zch_Manual_Matching_FS=\u624B\u52A8\u5339\u914D |
||||||
|
FS-Zch_Custom_Matching_FS=\u81EA\u5B9A\u4E49\u5339\u914D |
||||||
|
FS-Zch_UserID=\u534E\u53D1\u6210\u5458\u540D |
||||||
|
FS-Zch_FSUserName=\u62A5\u8868\u7528\u6237\u540D |
||||||
|
FS-Zch_Name=\u59D3\u540D |
||||||
|
FS-Zch_Department=\u534E\u53D1\u90E8\u95E8 |
||||||
|
FS-Zch_UrlHint=\u670D\u52A1\u5668\u4FDD\u5B58\u7684Url: |
||||||
|
FS-Zch_Refresh_User=\u66F4\u65B0\u901A\u8BAF\u5F55 |
||||||
|
FS-Zch_Mobile=\u534E\u53D1\u6210\u5458\u624B\u673A\u53F7 |
||||||
|
FS-Zch_Matching_Way=\u7528\u6237\u5339\u914D\u65B9\u5F0F |
||||||
|
FS-Zch_Hint=\u63D0\u793A |
||||||
|
FS-Zch_Loading=\u6B63\u5728\u52A0\u8F7D\u7528\u6237... |
||||||
|
FS-Zch_Mobile_Not_Supported=\u5F53\u524DHTML5\u62A5\u8868\u4E0D\u652F\u6301\u6839\u636E\u624B\u673A\u53F7\u5339\u914D\uFF0C\u8BF7\u5347\u7EA7HTML5\u63D2\u4EF6 |
||||||
|
FS-Zch_Mobile-Push-Zch-Terminal=\u534E\u53D1\u901A\u77E5 |
||||||
|
FS-Zch_Mobile-Push-Zch-AgentID=\u5E94\u7528ID |
||||||
|
FS-Zch_Expired_Error=\u9519\u8BEF\u4EE3\u7801:11100016 \u60A8\u4F7F\u7528\u4E86\u672A\u6CE8\u518C\u7684\u529F\u80FD\u2014\u2014\u534E\u53D1\u96C6\u6210 |
||||||
|
FS-Zch_Expired_Solution=\u534E\u53D1\u529F\u80FD\u672A\u6CE8\u518C\uFF0C\u5982\u9700\u4F7F\u7528\u8BF7\u8054\u7CFB\u9500\u552E |
||||||
|
FS-Zch_Agent_Management=\u5E94\u7528\u7BA1\u7406 |
||||||
|
FS-Zch_Member_Manage=\u6210\u5458\u7BA1\u7406 |
||||||
|
FS-Zch_Agent_Config=\u5E94\u7528\u5FEB\u6377\u914D\u7F6E |
||||||
|
FS-Zch_Enterprise_WeChat=\u4F01\u4E1A\u534E\u53D1 |
||||||
|
FS-Zch_New_Agent=\u65B0\u5EFA\u534E\u53D1\u5E94\u7528 |
||||||
|
FS-Zch_ReportServer=\u62A5\u8868\u670D\u52A1\u5668 |
||||||
|
FS-Zch_ReportServer_Url=\u62A5\u8868\u670D\u52A1\u5668\u5730\u5740 |
||||||
|
FS-Zch_ReportServer_Tip=\u8BF7\u4F7F\u7528\u4E8C\u7EA7\u6216\u4E8C\u7EA7\u4EE5\u4E0A\u57DF\u540D\uFF0C\u4E14\u9700\u901A\u8FC7ICP\u5907\u6848\uFF0C\u7AEF\u53E3\u63A8\u8350\u4F7F\u752880\u6216443 |
||||||
|
FS-Zch_Save=\u4FDD\u5B58 |
||||||
|
FS-Zch_DeleteAgent_Confirm_Popup=\u786E\u5B9A\u5220\u9664\u6B64\u4F01\u4E1A\u534E\u53D1\u5E94\u7528 |
||||||
|
FS-Zch_Confirm=\u786E\u5B9A |
||||||
|
FS-Zch_Cancel=\u53D6\u6D88 |
||||||
|
FS-Zch_Create_Zch_Url=\u751F\u6210\u534E\u53D1\u94FE\u63A5 |
||||||
|
FS-Zch_Zch_Url=\u534E\u53D1\u94FE\u63A5 |
||||||
|
FS-Zch_Platform_Page=\u94FE\u63A5\u9875\u9762 |
||||||
|
FS-Zch_Platform=\u51B3\u7B56\u5E73\u53F0 |
||||||
|
FS-Zch_Platform_Report=\u5355\u4E2A\u6A21\u677F |
||||||
|
FS-Zch_Create_Url=\u751F\u6210\u94FE\u63A5 |
||||||
|
FS-Zch_Copy_Url=\u590D\u5236 |
||||||
|
FS-Zch_Modify_Agent=\u4FEE\u6539\u8D44\u6599 |
||||||
|
FS-Zch_Attention=\u6CE8\u610F |
||||||
|
FS-Zch_CreateAgent_Not_Null=\u534E\u53D1\u5E94\u7528\u540D\u79F0\uFF0CCorpID\uFF0C\u7BA1\u7406\u7EC4\u51ED\u8BC1\u79D8\u94A5\u4E0D\u53EF\u4E3A\u7A7A |
||||||
|
BI-Basic_Search=\u641C\u7D22 |
||||||
|
FS-Zch_Default_Agent_Name=FineReport\u4F01\u4E1A\u5E94\u7528 |
||||||
|
FS-Zch_Default_Schedule_Agent_Name=\u5E94\u7528(\u5B9A\u65F6\u63A8\u9001) |
||||||
|
FS-Zch_Unknown_Agent=\u7F51\u7EDC\u5F02\u5E38\u6216\u8005\u8BF7\u786E\u8BA4\u5F53\u524D\u4F7F\u7528\u7684CorpId\u548CSecret\u662F\u5426\u6B63\u786E(\u82E5\u4E3A\u7BA1\u7406\u7EC4\u5BC6\u94A5\uFF0C\u8BF7\u6539\u4E3A\u5E94\u7528Secret) |
||||||
|
FS-Zch_Management_Secret=\u60A8\u5F53\u524D\u5E94\u7528\u7684secret\u4E3A\u7BA1\u7406\u7EC4secret\uFF0C\u4E3A\u4E86\u60A8\u6B63\u5E38\u4F7F\u7528\u534E\u53D1\u96C6\u6210\u529F\u80FD\uFF0C\u8BF7\u66FF\u6362\u4E3A\u5E94\u7528secret |
||||||
|
FS-Zch_Copy_Success=\u590D\u5236\u6210\u529F |
||||||
|
FS-Zch_Match_Way=\u5339\u914D\u65B9\u5F0F |
||||||
|
FS-Zch_Match_Setting=\u5339\u914D\u8BBE\u7F6E |
||||||
|
FS-Zch_DataSet=\u6570\u636E\u96C6 |
||||||
|
FS-Zch_UserId=\u534E\u53D1\u7528\u6237\u540D |
||||||
|
FS-Zch_FsUserName=\u62A5\u8868\u7528\u6237\u540D |
||||||
|
FS-Zch_Address_Book=\u901A\u8BAF\u5F55 |
||||||
|
FS-Zch_Member_Update=\u7ACB\u5373\u66F4\u65B0 |
||||||
|
FS-Zch_Set_Update=\u8BBE\u7F6E\u81EA\u52A8\u66F4\u65B0 |
||||||
|
FS-Zch_Start_Update=\u542F\u7528\u81EA\u52A8\u66F4\u65B0 |
||||||
|
FS-Zch_Per=\u6BCF |
||||||
|
FS-Zch_Day=\u5929 |
||||||
|
FS-Zch_Week=\u5468 |
||||||
|
FS-Zch_Hour=\u65F6 |
||||||
|
FS-Zch_Minute=\u5206 |
||||||
|
FS-Zch_Monday=\u5468\u4E00 |
||||||
|
FS-Zch_Tuesday=\u5468\u4E8C |
||||||
|
FS-Zch_Wednesday=\u5468\u4E09 |
||||||
|
FS-Zch_Thursday=\u5468\u56DB |
||||||
|
FS-Zch_Friday=\u5468\u4E94 |
||||||
|
FS-Zch_Saturday=\u5468\u516D |
||||||
|
FS-Zch_Sunday=\u5468\u65E5 |
||||||
|
FS-Zch_Update_Once=\u5B9A\u65F6\u540C\u6B65\u4E00\u6B21 |
||||||
|
FS-Zch_Not_Null=\u4E0D\u5141\u8BB8\u4E3A\u7A7A |
||||||
|
FS-Zch_Save_Agent_Fail=\u5B58\u50A8\u5E94\u7528\u4FE1\u606F\u5931\u8D25 |
||||||
|
FS-Zch_Agent_Name_Exist=\u5E94\u7528\u540D\u79F0\u5DF2\u5B58\u5728 |
||||||
|
FS-Zch_Secret_Exist=secret\u5DF2\u5B58\u5728 |
||||||
|
FS-Zch_Organizational_Structure=\u7EC4\u7EC7\u67B6\u6784 |
||||||
|
FS-Zch_Tag=\u6807\u7B7E |
||||||
|
FS-Zch_Illegal=\u4E0D\u5408\u6CD5 |
||||||
|
FS-Zch_Proxy=\u534E\u53D1\u4EE3\u7406\u8DF3\u8F6C |
||||||
|
FS-Zch_Proxy_Address=\u4EE3\u7406\u670D\u52A1\u5668\u5730\u5740 |
||||||
|
FS-Zch_Test_Proxy_Address=\u6D4B\u8BD5\u8FDE\u63A5 |
||||||
|
FS-Zch_Connection_Success=\u8FDE\u63A5\u6210\u529F |
||||||
|
FS-Zch_Connection_Fail=\u8FDE\u63A5\u5931\u8D25 |
||||||
|
FS-Zch_Test_Connection=\u6D4B\u8BD5\u8FDE\u63A5\u4E2D... |
||||||
|
FS-Zch_Agent_Quick_Config=\u4E3B\u9875\u578B\u5E94\u7528\u5FEB\u901F\u914D\u7F6E |
||||||
|
FS-Zch_One_Key_Config=\u4E00\u952E\u914D\u7F6E |
||||||
|
FS-Zch_One_Key_Config_Tip=\u5F53\u524D\u5E94\u7528\u5DF2\u914D\u7F6E\u4E3B\u9875\u6216\u83DC\u5355\uFF0C\u7EE7\u7EED\u914D\u7F6E\u5C06\u6E05\u7A7A\u539F\u59CB\u8BBE\u7F6E |
||||||
|
FS-Zch_Adress_Book_Secret=\u901A\u8BAF\u5F55\u7BA1\u7406secret |
||||||
|
FS-Zch_Import_Adress_Book=\u5BFC\u5165\u534E\u53D1\u901A\u8BAF\u5F55 |
||||||
|
FS-Zch_Syn_Adress_Book=\u540C\u6B65\u62A5\u8868\u901A\u8BAF\u5F55\u5230\u534E\u53D1 |
||||||
|
FS-Zch_Env_Check=\u534E\u53D1\u96C6\u6210\u73AF\u5883\u914D\u7F6E\u68C0\u6D4B |
||||||
|
FS-Zch_Check_Items=\u68C0\u6D4B\u9879\u76EE |
||||||
|
FS-Zch_Check_Result=\u72B6\u6001 |
||||||
|
FS-Zch_Check_Proposal=\u5EFA\u8BAE |
||||||
|
FS-Zch_Configuring=\u6B63\u5728\u914D\u7F6E\u4E2D... |
||||||
|
FS-Zch_Configure_Success=\u914D\u7F6E\u6210\u529F |
||||||
|
FS-Zch_Configure_Fail=\u4E00\u952E\u914D\u7F6E\u5931\u8D25 |
||||||
|
FS-Zch_Reconfigure=\u8BF7\u91CD\u65B0\u914D\u7F6E |
||||||
|
FS-Zch_Start_With_Http=\u670D\u52A1\u5668\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934 |
||||||
|
FS-Zch_Get-Agent-Fail=\u83B7\u53D6\u5E94\u7528\u5931\u8D25 |
||||||
|
FS-Zch_Sync-Contacts-Tip=\u5F53\u524D\u534E\u53D1\u901A\u8BAF\u5F55\u4E0D\u4E3A\u7A7A\uFF0C\u7EE7\u7EED\u5BFC\u5165\u4F1A\u4E22\u5931\u539F\u59CB\u6210\u5458\u4FE1\u606F |
||||||
|
FS-Zch_Sync-Contacts=\u6B63\u5728\u540C\u6B65\u4E2D... |
||||||
|
FS-Zch_Sync-Contacts-Success=\u534E\u53D1\u901A\u8BAF\u5F55\u5BFC\u5165\u6210\u529F |
||||||
|
FS-Zch_Sync-Contacts-Fail=\u534E\u53D1\u901A\u8BAF\u5F55\u5BFC\u5165\u5931\u8D25 |
||||||
|
FS-Zch_Import-Success=\u6210\u529F\u5BFC\u5165 |
||||||
|
FS-Zch_People=\u4EBA |
||||||
|
FS-Zch_Fail=\u5931\u8D25 |
||||||
|
FS-Zch_Debugger-Content=\u8C03\u8BD5\u5185\u5BB9 |
||||||
|
FS-Zch_Debugger-Type-Basic-Property=\u57FA\u672C\u5C5E\u6027 |
||||||
|
FS-Zch_Debugger-Type-Login=\u5355\u70B9\u767B\u5F55 |
||||||
|
FS-Zch_Debugger-Type-Push-Message=\u63A8\u9001\u6D88\u606F |
||||||
|
FS-Zch_Debugger-Zch-Agent=\u534E\u53D1\u5E94\u7528 |
||||||
|
FS-Zch_Debugger-Parameter-List=\u53C2\u6570\u5217\u8868 |
||||||
|
FS-Zch_Debugger-Input-Parameter=\u8F93\u5165\u53C2\u6570 |
||||||
|
FS-Zch_Debugger-Zch-User=\u534E\u53D1\u7528\u6237 |
||||||
|
FS-Zch_Debugger-Fs-User=\u62A5\u8868\u7528\u6237 |
||||||
|
FS-Zch_Debugger-Push-User=\u63A8\u9001\u7528\u6237 |
||||||
|
FS-Zch_Debugger-Start-Check=\u5F00\u59CB\u68C0\u6D4B |
||||||
|
FS-Zch_Debugger-Show-Result=\u68C0\u6D4B\u7ED3\u679C |
||||||
|
FS-Zch_Debugger-Get-Token=\u83B7\u53D6token |
||||||
|
FS-Zch_Debugger-Get-Department=\u83B7\u53D6\u90E8\u95E8 |
||||||
|
FS-Zch_Debugger-Get-Domain=\u53EF\u4FE1\u57DF\u540D |
||||||
|
FS-Zch_Debugger-Home-Url=\u4E3B\u9875/\u83DC\u5355\u94FE\u63A5 |
||||||
|
FS-Zch_ErrorCode=\u534E\u53D1\u8FD4\u56DE\u9519\u8BEF\u7801 |
||||||
|
FS-Zch_ErrorMsg=\u9519\u8BEF\u63CF\u8FF0 |
||||||
|
FS-Zch_Solution=\u51ED\u9519\u8BEF\u7801\u53EF\u4EE5\u81F3\u534E\u53D1\u67E5\u770B\u66F4\u591A\u4FE1\u606F |
||||||
|
FS-Zch_Dep=\u90E8\u95E8 |
||||||
|
FS-Zch_Phone=\u624B\u673A\u53F7 |
||||||
|
FS-Zch_ErrorDetail=\u9519\u8BEF\u4FE1\u606F |
||||||
|
FS-Zch_None-Synchronous-User=\u65E0\u53EF\u540C\u6B65\u7528\u6237 |
||||||
|
FS-Zch_NetWork-Anomaly=\u7F51\u7EDC\u5F02\u5E38\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u914D\u7F6E |
||||||
|
FS-Zch_Delete-Agent-Fail=\u5220\u9664\u5E94\u7528\u5931\u8D25 |
||||||
|
FS-Zch_Save-ReportServer-Url-Fail=\u4FDD\u5B58\u670D\u52A1\u5668\u5730\u5740\u5931\u8D25 |
||||||
|
FS-Zch_Get-ReportServer-Url-Fail=\u83B7\u53D6\u670D\u52A1\u5668\u5730\u5740\u5931\u8D25 |
||||||
|
FS-Zch_Tip-Get-ReportServer-Url-Fail=\u8BF7\u914D\u7F6E\u670D\u52A1\u5668\u5730\u5740 |
||||||
|
FS-Zch_Create-Agent-Menu-Fail=\u521B\u5EFA\u5E94\u7528\u83DC\u5355\u5931\u8D25 |
||||||
|
FS-Zch_Get-Agent-Menu-Fail=\u83B7\u53D6\u5E94\u7528\u83DC\u5355\u5931\u8D25 |
||||||
|
FS-Zch_Save-Proxy-Server-Url-Fail=\u5B58\u50A8\u4EE3\u7406\u670D\u52A1\u5668\u5730\u5740\u5931\u8D25 |
||||||
|
FS-Zch_Match-Way-Not-Null=\u5339\u914D\u8BBE\u7F6E\u4E0D\u80FD\u4E3A\u7A7A |
||||||
|
FS-CH_title=\u534E\u53D1\u63D2\u4EF6 |
@ -0,0 +1,32 @@ |
|||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=${charset}"> |
||||||
|
<meta name="author" content="FineReport" /> |
||||||
|
<meta name="Copyright" content="FineReport" /> |
||||||
|
<meta name="description" content="FineReport--Web Reporting Tool" /> |
||||||
|
<meta name="keywords" content="FineReport,Web Reporting Tool" /> |
||||||
|
<title></title> |
||||||
|
<style> |
||||||
|
body{ |
||||||
|
margin: 0; |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
overflow-x: hidden; |
||||||
|
overflow-y: hidden; |
||||||
|
} |
||||||
|
</style> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<form method="post" action="${loginURL}" id='sub'> |
||||||
|
<input type="hidden" name="SAMLRequest" value="${samlRequest}" /> |
||||||
|
<input type="hidden" name="RelayState" value="${requestURI}" /> |
||||||
|
<input type="submit" value="如果没有自动跳转,点我" style="display: none" id="btnSubmit" /> |
||||||
|
<!-- <a href="/webroot/decision/login?isAdmin=1"></a> --> |
||||||
|
</form> |
||||||
|
</body> |
||||||
|
<script> |
||||||
|
setTimeout(function () { |
||||||
|
document.getElementById("btnSubmit").click() |
||||||
|
},0) |
||||||
|
</script> |
||||||
|
</html> |
@ -0,0 +1,19 @@ |
|||||||
|
/* 二维码外框大小 */ |
||||||
|
.wrp_code{ |
||||||
|
width: 100px; |
||||||
|
height: 100px; |
||||||
|
} |
||||||
|
/*二维码图片大小*/ |
||||||
|
.impowerBox .qrcode{ |
||||||
|
width: 100px; |
||||||
|
} |
||||||
|
/*背景颜色*/ |
||||||
|
body{ |
||||||
|
background-color: white !important; |
||||||
|
} |
||||||
|
.title{ |
||||||
|
display: none; |
||||||
|
} |
||||||
|
.info{ |
||||||
|
display: none; |
||||||
|
} |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 29 KiB |