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; } } }