using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using System.Data;
using System.Net.Http;
using Newtonsoft.Json;
using System.Net.Http.Headers;
using Newtonsoft.Json.Linq;
namespace YDSP.Core.Controllers
{
[Produces("application/json")]
[Route("api/[controller]/[action]")]
[EnableCors("ydsp")]
public class ValuesController : Controller
{
public static HttpClient httpClient = new HttpClient();
//以下是跟钉钉对接有关方法,
#region 钉钉appId及appSecret
///
/// 钉钉appId及appSecret
///
///
private app GetApp()
{
app a = new app();
string sql = "select * from ZSystemURL where ZSText = 'appkey' select * from ZSystemURL where ZSText = 'appsecret'";
DataSet set = YDSPHepler.GetSet(sql);
foreach (DataRow i in set.Tables[0].Rows)
{
a.appid = Convert.ToString(i["ZSURL"]).Trim();
}
foreach (DataRow i in set.Tables[1].Rows)
{
a.appsecret = Convert.ToString(i["ZSURL"]).Trim();
}
return a;
}
#endregion
#region 获取钉钉接口最终返回userid
[HttpPost]
public SystemUser GetSystem([FromBody]SystemUser s)
{
SystemUser system = new SystemUser();
app a = GetApp();
string access_token = "";
string uid = "";
string name = "";
//获取钉钉access_token
string URL = "https://oapi.dingtalk.com/gettoken?appkey=" + a.appid + "&appsecret=" + a.appsecret;
var responseStr = httpClient.GetAsync(URL).Result.Content.ReadAsStringAsync().Result;
var obj = JsonConvert.DeserializeObject>(responseStr);
foreach (var i in obj)
{
if (i.Key == "access_token")
{
access_token = i.Value;
continue;
}
}
//获取用户钉钉id
URL = "https://oapi.dingtalk.com/user/getuserinfo?access_token=" + access_token + "&code=" + s.UserCode;
responseStr = httpClient.GetAsync(URL).Result.Content.ReadAsStringAsync().Result;
obj = JsonConvert.DeserializeObject>(responseStr);
foreach (var i in obj)
{
if (i.Key == "userid")
{
uid = i.Value;
continue;
}
if (i.Key == "name")
{
name = i.Value;
continue;
}
}
List systemUsers = new List();
try
{
string sql = "select *from ZSystemUser";
DataSet set = YDSPHepler.GetSet(sql);
foreach (DataRow i in set.Tables[0].Rows)
{
SystemUser user = new SystemUser();
user.UserCode = Convert.ToString(i["ZSUserCode"]);
user.UserID = Convert.ToString(i["ZSUserId"]);
user.UserName = Convert.ToString(i["ZSText"]);
user.PWD = Convert.ToString(i["ZSPassword"]);
user.URL = "";
systemUsers.Add(user);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
if (systemUsers.FirstOrDefault(f => f.UserID == uid) == null)
{
if (uid != "")
{
string sql = "insert into ZSystemUser values('', '" + uid + "', '', '')";
YDSPHepler.ExecuteNonQuery(sql);
sql = "select * from ZSystemUser where ZSUserId = '" + uid + "'";
DataSet set = YDSPHepler.GetSet(sql);
foreach (DataRow i in set.Tables[0].Rows)
{
system.UserID = Convert.ToString(i["ZSUserId"]).Trim();
system.UserCode = Convert.ToString(i["ZSUserCode"]).Trim();
system.UserName = Convert.ToString(i["ZSText"]).Trim();
system.PWD = Convert.ToString(i["ZSPassword"]).Trim();
}
}
}
else
{
system = systemUsers.FirstOrDefault(f => f.UserID == uid);
}
return system;
}
#endregion
#region 钉钉修改用户表(根据钉钉id修改usercode)
///
/// 钉钉修改用户表(根据钉钉id修改usercode)
///
///
///
[HttpPost]
public string UpdateZSystemUser([FromBody]SystemUser system)
{
string sql = "update ZSystemUser set ZSUserCode = '" + system.UserCode + "', ZSText = '" + system.UserName + "' where ZSUserId = '" + system.UserID + "'";
try
{
YDSPHepler.ExecuteNonQuery(sql);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return sql;
}
#endregion
#region 钉钉获取钉钉消息接口
///
/// 钉钉获取钉钉消息接口
///
///
///
[HttpPost]
public string GetInformation([FromBody]SystemUser s)
{
app a = GetApp();
string URL = "";
string access_token = "";
//获取钉钉access_token
try
{
URL = "https://oapi.dingtalk.com/gettoken?appkey=" + a.appid + "&appsecret=" + a.appsecret;
var responseStr = httpClient.GetAsync(URL).Result.Content.ReadAsStringAsync().Result;
var obj = JsonConvert.DeserializeObject>(responseStr);
foreach (var i in obj)
{
if (i.Key == "access_token")
{
access_token = i.Value;
continue;
}
}
URL = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token;
OapiMessageSendToConversationRequest oa = new OapiMessageSendToConversationRequest();
oa.userid_list = s.UserID;
string sql = "select * from zsystemurl where ZSText = 'AgentId' select * from zsystemurl where ZSText = '图片地址'";
DataSet set = YDSPHepler.GetSet(sql);
foreach (DataRow i in set.Tables[0].Rows)
{
oa.agent_id = Convert.ToString(i["ZSURL"]);//获取AgentId
}
oa.to_all_user = false;
msgtypeURL msgtypeURL = new msgtypeURL();
msgtypeURL.msgtype = "link";
msgtypeURL.link.messageUrl = s.URL;
foreach (DataRow i in set.Tables[1].Rows)
{
msgtypeURL.link.picUrl = Convert.ToString(i["ZSURL"]);//获取钉钉接口(链接消息的图片参数)
}
msgtypeURL.link.title = s.UserCode;
msgtypeURL.link.text = s.UserName;
string j = Newtonsoft.Json.JsonConvert.SerializeObject(msgtypeURL);//序列化
oa.msg = (JObject)JsonConvert.DeserializeObject(j);
//Newtonsoft.Json.JsonConvert.DeserializeObject(json);
string data = Newtonsoft.Json.JsonConvert.SerializeObject(oa);//序列化
HttpContent httpContent = new StringContent(data);
httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
httpContent.Headers.ContentType.CharSet = "utf-8";
var responseStrs = httpClient.PostAsync(URL, httpContent).Result.Content.ReadAsStringAsync().Result;
var objs = JsonConvert.DeserializeObject>(responseStrs);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
URL = "";
return URL;
}
#endregion
#region 钉钉获取SystemUser主要数据
///
/// 钉钉获取SystemUser主要数据
///
///
[HttpGet("{name}")]
public string GetUser(string name)
{
string sql = "select ZSUserId from zsystemuser where ZSUserCode = '" + name + "'";
DataSet set = YDSPHepler.GetSet(sql);
foreach (DataRow i in set.Tables[0].Rows)
{
sql = Convert.ToString(i["ZSUserId"]);
}
return sql;
}
#endregion
#region 钉钉根据名称绑定单个地址
///
/// 钉钉根据名称绑定单个地址
///
///
///
[HttpGet("{name}")]
public string GetDDSystemURL(string name)
{
string url = "";
try
{
string sql = "select ZSURL from ZSystemURL where ZSText = '" + name + "'";
DataTable table = YDSPHepler.GetData(sql);
foreach (DataRow i in table.Rows)
{
url = Convert.ToString(i["ZSURL"]);
}
}
catch (Exception ex)
{
url = ex.Message;
}
return url;
}
#endregion
#region 钉钉绑定多个地址
///
/// 钉钉绑定多个地址
///
///
///
[HttpPost]
public WorkFlowCaseVM PostSystemURL([FromBody] WorkFlowCaseVM work)
{
WorkFlowCaseVM w = new WorkFlowCaseVM();
string sql = "select ZSURL from ZSystemURL where ZSText = '" + work.ApplicationCode + "' select ZSURL from ZSystemURL where ZSText = '" + work.url + "'";
DataSet set = YDSPHepler.GetSet(sql);
foreach (DataRow i in set.Tables[0].Rows)
{
w.ApplicationCode = Convert.ToString(i["ZSURL"]);
}
foreach (DataRow i in set.Tables[1].Rows)
{
w.url = Convert.ToString(i["ZSURL"]);
}
return w;
}
#endregion
#region 钉钉绑定配置地址
///
/// 钉钉绑定配置地址
///
///
public List GetDDSystemURLList()
{
List items = new List();
string sql = "select * from ZSystemURL";
DataTable table = YDSPHepler.GetData(sql);
foreach (DataRow i in table.Rows)
{
items.Add(new SystemUser()
{
UserID = Convert.ToString(i["ZSID"]),
UserCode = Convert.ToString(i["ZSURL"]),
UserName = Convert.ToString(i["ZSText"]),
URL = null,
PWD = null,
});
}
return items;
}
#endregion
#region 钉钉修改配置地址
///
/// 钉钉修改配置地址
///
///
///
///
[HttpPost]
public List UpdateDDSystemURL([FromBody]List s)
{
try
{
foreach (SystemUser item in s)
{
string updateSQL = @"update ZSystemURL set ZSURL = '" + item.UserCode + "',ZSText = '" + item.UserName + "' " +
" where ZSID =" + item.UserID;
YDSPHepler.ExecuteNonQuery(updateSQL);
}
List items = new List();
string sql = "select * from ZSystemURL";
DataTable table = YDSPHepler.GetData(sql);
foreach (DataRow i in table.Rows)
{
items.Add(new SystemUser()
{
UserID = Convert.ToString(i["ZSID"]),
UserCode = Convert.ToString(i["ZSURL"]),
UserName = Convert.ToString(i["ZSText"]),
URL = null,
PWD = null,
});
}
return items;
}
catch (Exception)
{
return null;
}
}
#endregion
//以上是跟钉钉对接有关方法,以下是跟OA对接有关方法
#region OA获取WorkFlowCase主要数据
///
/// OA获取WorkFlowCase主要数据
///
///
[HttpGet("{caseCode}")]
public WorkFlowCaseVM GetWorkFlowCaseVM(string caseCode)
{
string sql = "select ApplicationCode from WorkFlowCase where CaseCode =" + caseCode;
DataTable table = YDSPHepler.GetData(sql);
WorkFlowCaseVM workFlow = new WorkFlowCaseVM();
foreach (DataRow i in table.Rows)
{
workFlow.ApplicationCode = Convert.ToString(i["ApplicationCode"]);
}
return workFlow;
}
#endregion
#region OA获取表单名称对应界面路径
///
/// OA获取表单名称对应界面路径
///
///
///
[HttpPost]
public WorkFlowCaseVM GetWorkFlowProcedure([FromBody]SystemUser s)
{
string ProcedureName = s.UserName;
WorkFlowCaseVM w = new WorkFlowCaseVM();
string sql = @"select ProcedureName,ApplicationPath from WorkFlowProcedure
group by ProcedureName,ApplicationPath
having ProcedureName = '" + ProcedureName + "' select ZSURL from ZSystemURL where ZSText = '" + s.UserID + "'";
DataSet set = YDSPHepler.GetSet(sql);
foreach (DataRow i in set.Tables[0].Rows)
{
w.ApplicationCode = Convert.ToString(i["ApplicationPath"]).Substring(3).Trim();
}
foreach (DataRow i in set.Tables[1].Rows)
{
w.url = Convert.ToString(i["ZSURL"]);
}
return w;
}
#endregion
#region OA获取SystemUser主要数据
///
/// OA获取SystemUser主要数据
///
///
[HttpPost]
public SystemUser GetUserVM([FromBody]opinions o)
{
string sql = "select UserCode,UserID,UserName from SystemUser where UserCode = " + o.actUserName + " select ZSURL from ZSystemURL where ZSText = '" + o.opinionText + "' select ZSURL from ZSystemURL where ZSText = '" + o.opinionConfirm + "'";
DataSet set = YDSPHepler.GetSet(sql);
SystemUser user = new SystemUser();
foreach (DataRow i in set.Tables[0].Rows)
{
user.UserCode = Convert.ToString(i["UserCode"]);
user.UserID = Convert.ToString(i["UserID"]);
user.UserName = Convert.ToString(i["UserName"]);
}
foreach (DataRow i in set.Tables[1].Rows)
{
user.URL = Convert.ToString(i["ZSURL"]);
}
foreach (DataRow i in set.Tables[2].Rows)
{
user.PWD = Convert.ToString(i["ZSURL"]);
}
return user;
}
#endregion
#region OA根据名称绑定单个地址
///
/// OA根据名称绑定单个地址
///
///
///
[HttpGet("{name}")]
public string GetSystemURL(string name)
{
string url = "";
string sql = "select ZSURL from ZSystemURL where ZSText = '" + name + "'";
DataTable table = YDSPHepler.GetData(sql);
foreach (DataRow i in table.Rows)
{
url = Convert.ToString(i["ZSURL"]);
}
return url;
}
#endregion
#region OA绑定配置地址
///
/// OA绑定配置地址
///
///
public List GetSystemURLList()
{
List items = new List();
string sql = "select * from ZSystemURL";
DataTable table = YDSPHepler.GetData(sql);
foreach (DataRow i in table.Rows)
{
items.Add(new SystemUser()
{
UserID = Convert.ToString(i["ZSID"]),
UserCode = Convert.ToString(i["ZSURL"]),
UserName = Convert.ToString(i["ZSText"]),
URL = null,
PWD = null,
});
}
return items;
}
#endregion
#region OA修改配置地址
///
/// OA修改配置地址
///
///
///
///
[HttpPost]
public List UpdateSystemURL([FromBody]List s)
{
try
{
foreach (SystemUser item in s)
{
string updateSQL = @"update ZSystemURL set ZSURL = '" + item.UserCode + "',ZSText = '" + item.UserName + "' " +
" where ZSID =" + item.UserID;
YDSPHepler.ExecuteNonQuery(updateSQL);
}
List items = new List();
string sql = "select * from ZSystemURL";
DataTable table = YDSPHepler.GetData(sql);
foreach (DataRow i in table.Rows)
{
items.Add(new SystemUser()
{
UserID = Convert.ToString(i["ZSID"]),
UserCode = Convert.ToString(i["ZSURL"]),
UserName = Convert.ToString(i["ZSText"]),
URL = null,
PWD = null,
});
}
return items;
}
catch (Exception)
{
return null;
}
}
#endregion
}
public class opinions
{
public string taskActorName { get; set; }
public string actUserName { get; set; }
public string opinionDate { get; set; }
public string opinionConfirm { get; set; }
public string opinionText { get; set; }
}
///
/// SystemUser视图模型
///
public class SystemUser
{
public string UserCode { get; set; }
public string UserID { get; set; }
public string UserName { get; set; }
public string URL { get; set; }
public string PWD { get; set; }
}
///
/// WorkFlowCaseVM视图模型
///
public class WorkFlowCaseVM
{
public string ApplicationCode { get; set; }
public string url { get; set; }
}
///
/// appId及appSecret
///
public class app
{
public string appid { get; set; }
public string appsecret { get; set; }
}
public class OapiMessageSendToConversationRequest
{
public string userid_list { get; set; }
public string agent_id { get; set; }
public bool to_all_user { get; set; }
public JObject msg { get; set; }
}
public class msgtypeURL
{
public string msgtype { get; set; }
public Link link { get; set; } = new Link();
}
public class Link
{
public string messageUrl { get; set; }
public string picUrl { get; set; }
public string title { get; set; }
public string text { get; set; }
}
}