using Learun.Application.Organization;
using Learun.Application.WeChat.WeChat;
using Learun.Util;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web.Mvc;
namespace Learun.Application.Web.Areas.LR_WebChatModule.Controllers
{
///
/// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园
/// Copyright (c) 2013-2018 北京泉江科技有限公司
/// 创建人:陈彬彬
/// 日 期:2017.04.01
/// 描 述:企业号部门同步
///
public class OrganizeController : MvcControllerBase
{
private UserIBLL userIBLL = new UserBLL();
private static Access_tokenWithTime mode = new Access_tokenWithTime();
private DepartmentIBLL departmentIBLL = new DepartmentBLL();
private CompanyIBLL companyIBLL = new CompanyBLL();
//List表单数据
private static List Userlist;
#region 视图功能
///
/// 部门主界面
///
///
[HttpGet]
public ActionResult Index()
{
return View();
}
///
/// 同步员工
///
///
[HttpGet]
public ActionResult MemberForm()
{
return View();
}
#endregion
#region 获取数据
///
/// 获取部门列表
///
/// 关键字
///
[HttpGet]
[AjaxOnly]
public ActionResult GetTreeList(string keyword)
{
//获取微信部门数据
WXDepartmentListEntity wXDepartmentList = GetDepartmentList("");
if (wXDepartmentList.errcode != 0)
{
return Fail("微信接口错误码" + wXDepartmentList.errcode + ",错误信息" + wXDepartmentList.errmsg);
}
else
{
//转换成dic数据
Dictionary dir = new Dictionary();
foreach (var item in wXDepartmentList.department)
{
dir.Add(item.id.ToString(), item.name);
}
//获取内部系统公司部门列表
var data = companyIBLL.GetWeChatList(keyword);
//判断是否同步过
foreach (var item in data)
{
if (dir.ContainsKey(item.F_EnCode) && dir[item.F_EnCode] == item.F_FullName + "1")
{
item.F_Fax = "已同步";
}
else
{
item.F_Fax = "未同步";
}
}
return JsonResult(data);
}
}
///
/// 同步部门
///
/// 关键字
///
public ActionResult Sync()
{
//获取微信部门数据
WXDepartmentListEntity wXDepartmentList = GetDepartmentList("");
if (wXDepartmentList.errcode != 0)
{
return Fail("微信接口错误码" + wXDepartmentList.errcode + ",错误信息" + wXDepartmentList.errmsg);
}
else
{
Dictionary dir = new Dictionary();
foreach (var item in wXDepartmentList.department)
{
dir.Add(item.id.ToString(), item.name);
}
var data = companyIBLL.GetWeChatList("");
foreach (var item in data)
{
WX_DepartmentEntity entity = new WX_DepartmentEntity();
if (dir.ContainsKey(item.F_EnCode))
{
//在微信中修改部门
entity.F_WXId = item.F_EnCode.ToInt();
entity.F_Name = item.F_FullName;
var parentEntity = data.Find(i => i.F_CompanyId == item.F_ParentId);
if (parentEntity != null)
{
entity.F_ParentId = parentEntity.F_EnCode.ToInt();
}
else
{
entity.F_ParentId = 1;
}
var res = UpdateDepartment(entity);
if (res.errcode != 0)
{
item.F_Description = "微信接口错误码" + res.errcode + ",错误信息" + res.errmsg;
companyIBLL.SaveEntity(item.F_CompanyId, item);
//return Fail("微信接口错误码" + res.errcode + ",错误信息" + res.errmsg);
continue;
}
}
else
{
entity.F_WXId = item.F_EnCode.ToInt();
entity.F_Name = item.F_FullName + "1";
var parentEntity = data.Find(i => i.F_CompanyId == item.F_ParentId);
if (parentEntity != null)
{
entity.F_ParentId = parentEntity.F_EnCode.ToInt();
}
else
{
entity.F_ParentId = 1;
}
//在微信中创建部门
var res = CreateDepartment(entity);
if (res.errcode != 0)
{
item.F_Description = "微信接口错误码" + res.errcode + ",错误信息" + res.errmsg;
companyIBLL.SaveEntity(item.F_CompanyId, item);
//return Fail("微信接口错误码" + res.errcode + ",错误信息" + res.errmsg);
continue;
}
}
}
return JsonResult(data);
}
}
///
/// 获取微信人员同步左侧部门信息
///
///
[HttpGet]
[AjaxOnly]
public ActionResult GetLeftTree(string parentId)
{
var data = companyIBLL.GetWeChatTree(parentId);
return JsonResult(data);
}
///
/// 获取微信人员同步右侧同步信息
///
/// 微信公司Id
/// 查询关键字
/// 部门Id
///
public ActionResult GetUserPageList(string pagination, string keyword, string companyId, string departmentId)
{
Pagination paginationobj = pagination.ToObject();
//获取内部系统人员列表
var data = userIBLL.GetPageList(companyId, departmentId, paginationobj, keyword,"");
//获取微信员工列表
var wxData = GetUserList("1", 1);
if (wxData.errcode != 0)
{
return Fail("微信接口错误码" + wxData.errcode + ",错误信息" + wxData.errmsg);
}
#region 判断数据是否相同
Dictionary> dic = new Dictionary>();
foreach (var i in wxData.userlist)
{
dic.Add(i.userid, new List { i.name, i.mobile });
}
foreach (var item in data)
{
if (dic.ContainsKey(item.F_Account))
{
if (item.F_RealName != dic[item.F_Account][0])
{
item.F_AnswerQuestion = "未同步";
}
else
{
item.F_AnswerQuestion = "已同步";
}
}
else
{
item.F_AnswerQuestion = "未同步";
}
}
#endregion
Userlist = data;
var jsonData = new
{
rows = data,
total = paginationobj.total,
page = paginationobj.page,
records = paginationobj.records,
};
return JsonResult(jsonData);
}
///
/// 同步员工
///
/// 关键字
///
public ActionResult SyncMember()
{
//获取微信部门数据
UserListEntity wXUserList = GetSimpleUserList("1", 1);
if (wXUserList.errcode != 0)
{
return Fail("微信接口错误码" + wXUserList.errcode + ",错误信息" + wXUserList.errmsg);
}
else
{
Dictionary dir = new Dictionary();
foreach (var item in wXUserList.userlist)
{
dir.Add(item.userid, item.name);
}
//获取当前
var data = userIBLL.GetAllList();
foreach (var item in data)
{
WeChatUserEntity userEntity = new WeChatUserEntity();
if (string.IsNullOrEmpty(item.F_DepartmentId) || string.IsNullOrEmpty(item.F_Mobile)) continue;
if (dir.ContainsKey(item.F_Account))
{
if (dir[item.F_Account] != item.F_RealName)
{
userEntity.name = item.F_RealName;
userEntity.mobile = item.F_Mobile;
userEntity.userid = item.F_Account;
userEntity.enable = 1;
if (item.F_DepartmentId != null)
{
var departmentEntity = departmentIBLL.GetEntity(item.F_DepartmentId);
userEntity.department = new List { departmentEntity == null ? 0 : departmentEntity.F_EnCode.ToInt() };
}
else
{
var companyEntity = companyIBLL.GetEntity(item.F_CompanyId);
userEntity.department = new List { companyEntity == null ? 0 : companyEntity.F_EnCode.ToInt() };
}
//更新微信部门成员
//var res = UpdateWXUser(userEntity);
//if (res.errcode != 0)
//{
// item.F_Description = "微信接口错误码" + res.errcode + ",错误信息" + res.errmsg;
// userIBLL.SaveEntity(item.F_UserId, item);
// return Fail("微信接口错误码" + res.errcode + ",错误信息" + res.errmsg);
// //continue;
//}
}
else
{
continue;
}
}
else
{
userEntity.name = item.F_RealName;
userEntity.mobile = item.F_Mobile;
userEntity.userid = item.F_Account;
userEntity.enable = 1;
if (item.F_DepartmentId != null)
{
var departmentEntity = departmentIBLL.GetEntity(item.F_DepartmentId);
userEntity.department = new List { departmentEntity == null ? 0 : departmentEntity.F_EnCode.ToInt() };
}
else
{
var companyEntity = companyIBLL.GetEntity(item.F_CompanyId);
userEntity.department = new List { companyEntity == null ? 0 : companyEntity.F_EnCode.ToInt() };
}
//创建微部门成员
var res = CreateWXUser(userEntity);
if (res.errcode != 0)
{
item.F_Description = "微信接口错误码" + res.errcode + ",错误信息" + res.errmsg;
userIBLL.SaveEntity(item.F_UserId, item);
//return Fail("微信接口错误码" + res.errcode + ",错误信息" + res.errmsg);
continue;
}
}
}
return Success("");
}
}
#endregion
#region 微信接口方法
///
/// 判断token是否过期
///
///
public Access_TokenEntity IsExistAccess_Token()
{
if (mode.token != null)
{
TimeSpan st1 = new TimeSpan(mode.time.Ticks); //最后刷新的时间
TimeSpan st2 = new TimeSpan(DateTime.Now.Ticks); //当前时间
TimeSpan st = st2 - st1; //两者相差时间
if (st.TotalSeconds > mode.token.expires_in)
{
mode.token = GetToken();
mode.time = DateTime.Now;
}
}
else
{
mode.token = GetToken();
mode.time = DateTime.Now;
}
return mode.token;
}
///
/// 获取微信token
///
///
public Access_TokenEntity GetToken()
{
var corpId = Config.GetValue("CorpId");
var corpSecret = Config.GetValue("CorpSecret");
string url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpId + "&corpsecret=" + corpSecret;
Access_TokenEntity token = new Access_TokenEntity();
token = HttpGet(url).ToObject();
return token;
}
///
/// 获取微信账户
///
/// 用户账户
public GetUserEntity GetWeChatUser(string userId)
{
var token = IsExistAccess_Token();
string url = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=" + token.access_token + "&userid=" + userId;
GetUserEntity account = new GetUserEntity();
account = HttpGet(url).ToObject();
return account;
}
///
/// 获取部门成员
///
///
///
///
public UserListEntity GetSimpleUserList(string departmentId, int fetchchild)
{
var token = IsExistAccess_Token();
string url = "https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token=" + token.access_token + "&department_id=" + departmentId + "&fetch_child=" + fetchchild;
UserListEntity account = new UserListEntity();
account = HttpGet(url).ToObject();
return account;
}
///
/// 获取部门列表
///
///
///
///
public WXDepartmentListEntity GetDepartmentList(string departmentId)
{
var token = IsExistAccess_Token();
string url = " https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=" + token.access_token + "&id=" + departmentId;
WXDepartmentListEntity res = new WXDepartmentListEntity();
res = HttpGet(url).ToObject();
return res;
}
///
/// 获取部门成员详情
///
///
///
///
public UserDetailListEntity GetUserList(string departmentId, int fetchchild)
{
var token = IsExistAccess_Token();
string url = "https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=" + token.access_token + "&department_id=" + departmentId + "&fetch_child=" + fetchchild;
UserDetailListEntity account = new UserDetailListEntity();
account = HttpGet(url).ToObject();
return account;
}
///
/// 创建微信账户
///
///
public ReturnMessageEntity CreateWXUser(WeChatUserEntity account)
{
var token = IsExistAccess_Token();
var url = "https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token=" + token.access_token;
ReturnMessageEntity res = new ReturnMessageEntity();
res = HttpPost(url, account.ToJson()).ToObject();
return res;
}
///
/// 更新微信账户
///
///
public ReturnMessageEntity UpdateWXUser(WeChatUserEntity account)
{
var token = IsExistAccess_Token();
var url = "https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token=" + token.access_token;
ReturnMessageEntity res = new ReturnMessageEntity();
res = HttpPost(url, account.ToJson()).ToObject();
return res;
}
///
/// 删除微信账户
///
///
///
public ReturnMessageEntity DeleteWeChatUser(string userId)
{
var token = IsExistAccess_Token();
string url = "https://qyapi.weixin.qq.com/cgi-bin/user/delete?access_token=" + token.access_token + "&userid=" + userId;
ReturnMessageEntity res = new ReturnMessageEntity();
res = HttpGet(url).ToObject();
return res;
}
///
/// 批量删除微信账户
///
///
///
public ReturnMessageEntity BatchDeleteWeChatUser(List userId)
{
var token = IsExistAccess_Token();
BatchDelete list = new BatchDelete();
list.useridlist = userId;
string url = "https://qyapi.weixin.qq.com/cgi-bin/user/batchdelete?access_token=" + token.access_token;
ReturnMessageEntity res = new ReturnMessageEntity();
res = HttpPost(url, list.ToString()).ToObject();
return res;
}
///
/// 创建微信部门
///
///
///
public WXDepartmentReMsgEntity CreateDepartment(WX_DepartmentEntity entity)
{
WXDepartmentEntity dep = new WXDepartmentEntity();
dep.name = entity.F_Name;
dep.id = entity.F_WXId;
dep.parentid = entity.F_ParentId;
dep.order = entity.F_Order;
var token = IsExistAccess_Token();
var url = "https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token=" + token.access_token;
WXDepartmentReMsgEntity res = new WXDepartmentReMsgEntity();
res = HttpPost(url, dep.ToJson()).ToObject();
return res;
}
///
/// 更新微信部门
///
///
///
public WXDepartmentReMsgEntity UpdateDepartment(WX_DepartmentEntity entity)
{
WXDepartmentEntity dep = new WXDepartmentEntity();
dep.name = entity.F_Name;
dep.id = entity.F_WXId;
dep.parentid = entity.F_ParentId;
dep.order = entity.F_Order;
var token = IsExistAccess_Token();
var url = "https://qyapi.weixin.qq.com/cgi-bin/department/update?access_token=" + token.access_token;
WXDepartmentReMsgEntity res = new WXDepartmentReMsgEntity();
res = HttpPost(url, dep.ToJson()).ToObject();
return res;
}
///
/// 删除微信部门
///
///
///
public ReturnMessageEntity DeleteDepartment(string departmentId)
{
var token = IsExistAccess_Token();
string url = "https://qyapi.weixin.qq.com/cgi-bin/department/delete?access_token=" + token.access_token + "&id=" + departmentId;
ReturnMessageEntity res = new ReturnMessageEntity();
res = HttpGet(url).ToObject();
return res;
}
#endregion
#region 实体类
///
/// token-time类
///
public class Access_tokenWithTime
{
public DateTime time { get; set; }
public Access_TokenEntity token { get; set; }
}
public class BatchDelete
{
public List useridlist { get; set; }
}
#endregion
#region HTTP操作
public string HttpGet(string Url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
public string HttpPost(string Url, string postDataStr)
{
//创建一个HTTP请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
//Post请求方式
request.Method = "POST";
//内容类型
request.ContentType = "application/x-www-form-urlencoded";
//设置参数,并进行URL编码
string paraUrlCoded = postDataStr;//System.Web.HttpUtility.UrlEncode(jsonParas);
byte[] payload;
//将Json字符串转化为字节
payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
//设置请求的ContentLength
request.ContentLength = payload.Length;
//发送请求,获得请求流
Stream writer;
try
{
writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
}
catch (Exception)
{
writer = null;
Console.Write("连接服务器失败!");
}
//将请求参数写入流
writer.Write(payload, 0, payload.Length);
writer.Close();//关闭请求流
HttpWebResponse response;
try
{
//获得响应流
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
response = ex.Response as HttpWebResponse;
}
Stream s = response.GetResponseStream();
Stream postData = Request.InputStream;
StreamReader sRead = new StreamReader(s);
string postContent = sRead.ReadToEnd();
sRead.Close();
return postContent;//返回Json数据
}
#endregion
}
}