You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

291 lines
12 KiB
Plaintext

11 months ago
using System;
using System.Data;
using BP.DA;
using BP.En;
using BP.Web;
using BP.Sys;
using BP.GPM.WeiXin;
using BP.GPM.DTalk.DINGTalk;
using BP.GPM.DTalk;
using System.Collections;
using BP.WF;
using BP.WF.Data;
namespace BP.GPM
{
/// <summary>
/// 权限调用API
/// </summary>
public class Dev2Interface
{
#region 菜单权限
#endregion 菜单权限
#region 登陆接口
/// <summary>
/// 用户登陆,此方法是在开发者校验好用户名与密码后执行
/// </summary>
/// <param name="userNo">用户名</param>
/// <param name="Token">安全ID,请参考流程设计器操作手册</param>
public static void Port_Login(string userNo, string sid)
{
string sql = "SELECT SID FROM Port_Emp WHERE No='" + userNo + "'";
DataTable dt = DBAccess.RunSQLReturnTable(sql);
if (dt.Rows.Count == 0)
throw new Exception("用户不存在或者SID错误。");
if (dt.Rows[0]["Token"].ToString() != sid)
throw new Exception("用户不存在或者SID错误。");
BP.Port.Emp emp = new BP.Port.Emp(userNo);
WebUser.SignInOfGener(emp);
return;
}
/// <summary>
/// 用户登陆,此方法是在开发者校验好用户名与密码后执行
/// </summary>
/// <param name="userNo">用户名</param>
public static void Port_Login(string userNo)
{
BP.Port.Emp emp = new BP.Port.Emp(userNo);
WebUser.SignInOfGener(emp);
return;
}
/// <summary>
/// 注销当前登录
/// </summary>
public static void Port_SigOut()
{
WebUser.Exit();
}
/// <summary>
/// 获取未读的消息
/// 用于消息提醒.
/// </summary>
/// <param name="userNo">用户ID</param>
public static string Port_SMSInfo(string userNo)
{
Paras ps = new Paras();
ps.SQL = "SELECT MyPK, EmailTitle FROM sys_sms WHERE SendToEmpID=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SendToEmpID AND IsAlert=0";
ps.Add("SendToEmpID", userNo);
DataTable dt = DBAccess.RunSQLReturnTable(ps);
string strs = "";
foreach (DataRow dr in dt.Rows)
{
strs += "@" + dr[0] + "=" + dr[1].ToString();
}
ps = new Paras();
ps.SQL = "UPDATE sys_sms SET IsAlert=1 WHERE SendToEmpID=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SendToEmpID AND IsAlert=0";
ps.Add("SendToEmpID", userNo);
DBAccess.RunSQL(ps);
return strs;
}
#endregion 登陆接口
#region GPM接口
/// <summary>
/// 获取一个操作人员对于一个系统的权限
/// </summary>
/// <param name="userNo">用户编号</param>
/// <param name="app">系统编号</param>
/// <returns>结果集</returns>
public static DataTable DB_Menus(string userNo, string app)
{
Paras ps = new Paras();
ps.SQL = "SELECT * FROM GPM_EmpMenu WHERE FK_Emp=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "FK_Emp AND FK_App=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "FK_App ";
ps.Add("FK_Emp", userNo);
ps.Add("FK_App", app);
return DBAccess.RunSQLReturnTable(ps);
}
/// <summary>
/// 获取一个操作人员对此应用可以访问的系统
/// </summary>
/// <param name="userNo">用户编号</param>
/// <returns>结果集</returns>
public static DataTable DB_Apps(string userNo)
{
Paras ps = new Paras();
ps.SQL = "SELECT * FROM GPM_EmpApp WHERE FK_Emp=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "FK_Emp ";
ps.Add("FK_Emp", userNo);
return DBAccess.RunSQLReturnTable(ps);
}
#endregion GPM接口
/// <summary>
/// 推送消息到微信
/// </summary>
/// <param name="WorkID">WorkID</param>
/// <param name="sender">发送人</param>
public static MessageErrorModel PushMessageToTelByWeiXin(long WorkID, string sender)
{
//企业应用必须存在
string agentId = BP.Difference.SystemConfig.WX_AgentID ?? null;
if (agentId != null)
{
//获取 AccessToken
string accessToken = BP.GPM.WeiXin.WeiXinEntity.getAccessToken();
//当前业务
GenerWorkFlow gwf = new GenerWorkFlow();
gwf.WorkID = WorkID;
gwf.RetrieveFromDBSources();
//接收人
Monitors empWorks = new Monitors();
QueryObject obj = new QueryObject(empWorks);
obj.AddWhere(MonitorAttr.WorkID, WorkID);
obj.addOr();
obj.AddWhere(MonitorAttr.FID, WorkID);
obj.DoQuery();
//发送给多人的消息格式 zhangsan|lisi|wangwu
//此处根据手机号作为推送人的帐号,便于关联
string toUsers = "";
foreach (Monitor empWork in empWorks)
{
if (toUsers.Length > 0)
toUsers += "|";
Emp emp = new Emp(empWork.FK_Emp);
toUsers += emp.Tel;
}
if (toUsers.Length == 0)
return null;
//消息样式为图文连接
NewsArticles newArticle = new NewsArticles();
//设置消息标题
newArticle.title = "待办:" + gwf.Title;
//设置消息内容主体
string msgConten = "业务名称:" + gwf.FlowName + "\n";
msgConten += "申请人:" + gwf.StarterName + "\n";
msgConten += "申请部门:" + gwf.DeptName + "\n";
msgConten += "当前步骤:" + gwf.NodeName + "\n";
msgConten += "上一步处理人:" + sender + "\n";
newArticle.description = msgConten;
//设置图片连接
string New_Url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + BP.Difference.SystemConfig.WX_CorpID
+ "&redirect_uri=" + BP.Difference.SystemConfig.WX_MessageUrl + "/CCMobile/action.aspx&response_type=code&scope=snsapi_base&state=TodoList#wechat_redirect";
newArticle.url = New_Url;
//http://discuz.comli.com/weixin/weather/icon/cartoon.jpg
newArticle.picurl = BP.Difference.SystemConfig.WX_MessageUrl + "/DataUser/ICON/CCBPM.png";
//加入消息
MsgNews wxMsg = new MsgNews();
wxMsg.Access_Token = accessToken;
wxMsg.agentid = BP.Difference.SystemConfig.WX_AgentID;
wxMsg.touser = toUsers;
wxMsg.articles.Add(newArticle);
//执行发送
return BP.GPM.WeiXin.Glo.PostMsgOfNews(wxMsg);
}
return null;
}
/// <summary>
/// 推送消息到钉钉
/// </summary>
/// <param name="msgType">消息类型</param>
/// <param name="WorkID">WorkID</param>
/// <param name="sender">发送人</param>
public static Ding_Post_ReturnVal PushMessageToTelByDingDing(DingMsgType msgType, long WorkID, string sender)
{
//当前业务
GenerWorkFlow gwf = new GenerWorkFlow();
gwf.WorkID = WorkID;
gwf.RetrieveFromDBSources();
//获取接收人
Monitors empWorks = new Monitors();
QueryObject obj = new QueryObject(empWorks);
obj.AddWhere(MonitorAttr.WorkID, WorkID);
obj.addOr();
obj.AddWhere(MonitorAttr.FID, WorkID);
obj.DoQuery();
//结束不发送消息
if (gwf.WFState == WFState.Complete)
return null;
string toUsers = "";
foreach (Monitor empWork in empWorks)
{
if (toUsers.Length > 0)
toUsers += "|";
Emp emp = new Emp(empWork.FK_Emp);
toUsers += emp.Tel;
}
if (toUsers.Length == 0)
return null;
switch (msgType)
{
//文本类型
case DingMsgType.text:
Ding_Msg_Text msgText = new Ding_Msg_Text();
msgText.Access_Token = DingDing.getAccessToken();
msgText.agentid = BP.Difference.SystemConfig.Ding_AgentID;
msgText.touser = toUsers;
msgText.content = gwf.Title + "\n发送人" + sender + "\n时间" + DataType.CurrentDateTimeCNOfShort;
return DingTalk_Message.Msg_AgentText_Send(msgText);
//连接类型
case DingMsgType.link:
Ding_Msg_Link msgLink = new Ding_Msg_Link();
msgLink.Access_Token = DingDing.getAccessToken();
msgLink.touser = toUsers;
msgLink.agentid = BP.Difference.SystemConfig.Ding_AgentID;
msgLink.messageUrl = BP.Difference.SystemConfig.Ding_MessageUrl + "/CCMobile/login.aspx";
msgLink.picUrl = "@lALOACZwe2Rk";
msgLink.title = gwf.Title;
msgLink.text = "发送人:" + sender + "\n时间" + DataType.CurrentDateTimeCNOfShort;
return DingTalk_Message.Msg_AgentLink_Send(msgLink);
//工作消息类型
case DingMsgType.OA:
string[] users = toUsers.Split('|');
string faildSend = "";
Ding_Post_ReturnVal postVal = null;
foreach (string user in users)
{
Ding_Msg_OA msgOA = new Ding_Msg_OA();
msgOA.Access_Token = DingDing.getAccessToken();
msgOA.agentid = BP.Difference.SystemConfig.Ding_AgentID;
msgOA.touser = user;
msgOA.messageUrl = BP.Difference.SystemConfig.Ding_MessageUrl + "/CCMobile/DingAction.aspx?ActionFrom=message&UserID=" + user
+ "&ActionType=ToDo&FK_Flow=" + gwf.FK_Flow + "&FK_Node=" + gwf.FK_Node
+ "&WorkID=" + WorkID + "&FID=" + gwf.FID;
//00是完全透明ff是完全不透明比较适中的透明度值是 1e
msgOA.head_bgcolor = "FFBBBBBB";
msgOA.head_text = "审批";
msgOA.body_title = gwf.Title;
Hashtable hs = new Hashtable();
hs.Add("流程名", gwf.FlowName);
hs.Add("当前节点", gwf.NodeName);
hs.Add("申请人", gwf.StarterName);
hs.Add("申请时间", gwf.RDT);
msgOA.body_form = hs;
msgOA.body_author = sender;
postVal = DingTalk_Message.Msg_OAText_Send(msgOA);
if (postVal.errcode != "0")
{
if (faildSend.Length > 0)
faildSend += ",";
faildSend += user;
}
}
//有失败消息
if (faildSend.Length > 0)
{
postVal.errcode = "500";
postVal.errmsg = faildSend + "消息发送失败";
}
return postVal;
}
return null;
}
}
}