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.

279 lines
11 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using BP.WF;
using BP.GPM.WeiXin;
using BP.En;
using BP.DA;
using System.Text;
using BP.Tools;
namespace CCFlow.CCMobile
{
public partial class action : System.Web.UI.Page
{
public string GetVal(string key)
{
string val = this.Request.QueryString[key];
return BP.Tools.DealString.DealStr(val);
}
#region 参数。
public string DoType
{
get
{
return this.GetVal("DoType");
}
}
public string UserNo
{
get
{
return this.GetVal("UserNo");
}
}
public string Password
{
get
{
return this.GetVal("Password");
}
}
#endregion 参数。
/// <summary>
/// 执行方法.
/// </summary>
public void DoTypeAction()
{
switch (this.DoType)
{
case "Login":
BP.Port.Emp emp = new BP.Port.Emp();
emp.No = this.UserNo;
if (emp.IsExits == false)
{
ReturnVal("0");
return;
}
if (emp.Pass == this.Password)
{
BP.WF.Dev2Interface.Port_Login(this.UserNo);
ReturnVal("1");
return;
}
ReturnVal("0");
return;
default:
break;
}
}
public void ReturnVal(string val)
{
if (string.IsNullOrEmpty(val))
val = "";
//组装ajax字符串格式,返回调用客户端
Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "text/html";
Response.Expires = 0;
Response.Write(val);
Response.End();
}
protected void Page_Load(object sender, EventArgs e)
{
if (this.DoType != null)
{
DoTypeAction();
return;
}
string code = this.GetVal("code");
string state = this.GetVal("state"); //执行标记.
//if (state.Equals("TodoList", StringComparison.OrdinalIgnoreCase) == false)
// return;
if (BP.Web.WebUser.No == null)
{
/* 如果当前登录人员帐号为 null .*/
string accessToken = WeiXinEntity.getAccessToken(); //获取 AccessToken
string userId = getUserId(code, accessToken);
User user = FormatToJson.ParseFromJson<User>(userId);
if (string.IsNullOrEmpty(userId) == true)
{
this.Response.Write("@当前登录帐号为空请检查AccessToken是否正确" + accessToken);
return;
}
else
{
BP.Port.Emps emps = new BP.Port.Emps();
int num = emps.Retrieve(BP.Port.EmpAttr.No, user.UserId);
if (num <= 0)
{
//是否使用微信企业号中的组织结构进行登录
if (BP.Difference.SystemConfig.OZType == "1")
{
string url = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=" + accessToken + "&userid=" + user.UserId;
string str = BP.DA.DataType.ReadURLContext(url,4000, Encoding.UTF8);
//人员详细信息
UserEntity userEn = FormatToJson.ParseFromJson<UserEntity>(str);
//所属部门
Array depts = userEn.department as Array;
foreach (object item in depts)
{
BP.Port.Depts dts = new BP.Port.Depts();
url = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=" + accessToken + "&id=" + item;
str = BP.DA.DataType.ReadURLContext(url, 4000, Encoding.UTF8);
//部门详细信息
DeptList mydepts = FormatToJson.ParseFromJson<DeptList>(str);
//如果部门不存在,插入部门信息
if (dts.Retrieve(BP.Port.DeptAttr.No, item) <= 0)
{
foreach (DeptEntity deptMent in mydepts.department)
{
dts = new BP.Port.Depts();
if (dts.Retrieve(BP.Port.DeptAttr.No, item) > 0)
continue;
else
{
BP.Port.Dept dp = new BP.Port.Dept();
dp.No = deptMent.id;
dp.Name = deptMent.name;
dp.ParentNo = deptMent.parentid;
dp.Insert();
}
}
}
else //如果存在,更新部门名称
{
foreach (DeptEntity deptMent in mydepts.department)
{
BP.Port.Dept dp = new BP.Port.Dept(deptMent.id);
dp.Name = deptMent.name;
dp.ParentNo = deptMent.parentid;
dp.Update();
}
}
//插入人员表
BP.Port.Emp emp = new BP.Port.Emp();
emp.No = user.UserId;
emp.DeptNo = item.ToString();
emp.Name = userEn.name;
emp.Tel = userEn.mobile;
emp.Insert();
//插入部门表
BP.Port.DeptEmp deptEmp = new BP.Port.DeptEmp();
deptEmp.MyPK = item + "_" + user.UserId;
deptEmp.DeptNo = item.ToString();
deptEmp.EmpNo = user.UserId;
deptEmp.Insert();
}
//执行登录
BP.WF.Dev2Interface.Port_Login(user.UserId);
}
else
{
emps = new BP.Port.Emps();
num = emps.Retrieve(BP.Port.EmpAttr.Tel, user.UserId);
if (num <= 0)
{
this.Response.Write("@用户名错误,没有找到登录信息:" + accessToken);
return;
}
foreach (BP.Port.Emp emp in emps)
{
BP.WF.Dev2Interface.Port_Login(emp.No);
break;
}
}
}
else
{
BP.WF.Dev2Interface.Port_Login(user.UserId);
}
}
}
if (!state.Contains(','))
Response.Redirect("../CCMobile/" + state + ".htm");
else
{
string[] vals = state.Split(',');
if(vals[0].Contains("URL_") == true)
{
string url = vals[0].Substring(4);
string dummyData = url.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+");
if (dummyData.Length % 4 > 0)
{
dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '=');
}
//Base64位解码
byte[] bytes = Convert.FromBase64String(dummyData);
url = UTF8Encoding.UTF8.GetString(bytes);
Response.Redirect(url);
}
if (vals[0].Contains("MyView") == true)
{
Response.Redirect("../CCMobile/MyView.htm?WorkID=" + vals[1].Replace("WorkID_","") + "&FK_Node=" + vals[2].Replace("FK_Node_","") + "");
}
if (vals[0].Contains("FlowNo"))
{
string[] pks = vals[0].Split('_');
Response.Redirect("../CCMobile/MyFlow.htm?FK_Flow=" + pks[1] + "&state=" + vals[1] + "");
}
}
}
/// <summary>
/// 获得用户ID
/// </summary>
/// <param name="code"></param>
/// <param name="accessToken"></param>
/// <returns></returns>
public string getUserId(string code, string accessToken)
{
string url = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=" + accessToken + "&code=" + code;
return DataType.ReadURLContext(url, 39000, Encoding.UTF8);
}
//获取用户ID
//public string getUserId_bak2020(string code, string accessToken)
//{
// string userId = string.Empty;
// string url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=" + accessToken + "&code=" + code + "&agentid=2";
// try
// {
// User user = new User();
// HttpWebResponse response = new BP.EAI.Plugins.HttpWebResponseUtility().CreateGetHttpResponse(url, 10000, null, null);
// StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
// string str = reader.ReadToEnd();
// user = FormatToJson.ParseFromJson<User>(str);
// reader.Dispose();
// reader.Close();
// if (response != null) response.Close();
// if (user != null)
// userId = user.UserId;
// }
// catch
// {
// }
// return userId;
//}
}
}