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

11 months ago
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.FK_Dept = 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.FK_Dept = item.ToString();
deptEmp.FK_Emp = 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;
//}
}
}