ab56a9bcf7
SVN-Revision: r240
1233 lines
46 KiB
C#
1233 lines
46 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using Lskj.Model;
|
|
using Lskj.Core;
|
|
using Lskj.Business.Impl;
|
|
using Lskj.Util;
|
|
using Lskj.Control;
|
|
using Lskj.Data;
|
|
using System.Net;
|
|
using System.Data.SqlClient;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
|
namespace PostToWX
|
|
{
|
|
public partial class Form1 : Form
|
|
{
|
|
public Form1()
|
|
{
|
|
InitializeComponent();
|
|
//DBConfig.Instance.CreateConnection();
|
|
access_Token = GetAccessToken(corpid, corpsecret);
|
|
txtServerName.Text = IniReadValue(company, "serverName");
|
|
txtDBName.Text = IniReadValue(company, "dbName");
|
|
txtUser.Text = IniReadValue(company, "user");
|
|
txtPassword.Text = IniReadValue(company, "password");
|
|
textBox6.Text = IniReadValue(company, "interval");
|
|
if (string.IsNullOrEmpty(textBox6.Text)) textBox6.Text = "30";
|
|
textBox6.LostFocus += new EventHandler(textBox6_LostFocus);
|
|
}
|
|
|
|
bool isExecing = false;
|
|
/// <summary>
|
|
/// 公司id
|
|
/// </summary>
|
|
string corpid = "wwe9e9606de71c3a34";
|
|
/// <summary>
|
|
/// 公司密匙
|
|
/// </summary>
|
|
string corpsecret = "J-oM3Hh5XisrKVkPcxuRD4JJXeF6895g3Rfcdnmz9rE";
|
|
/// <summary>
|
|
/// 接口登录凭证
|
|
/// </summary>
|
|
string access_Token;
|
|
/// <summary>
|
|
/// Log文件夹目录
|
|
/// </summary>
|
|
string folderPath;
|
|
/// <summary>
|
|
/// 日志文件目录
|
|
/// </summary>
|
|
string filePath;
|
|
/// <summary>
|
|
/// ini文件目录
|
|
/// </summary>
|
|
string Path = System.IO.Directory.GetCurrentDirectory() + "\\"+"Setting.ini";
|
|
/// <summary>
|
|
/// ini文件内段落名
|
|
/// </summary>
|
|
string company = "同步工具";
|
|
/// <summary>
|
|
/// 初始时间间隔
|
|
/// </summary>
|
|
int min = 10;
|
|
|
|
/// <summary>
|
|
/// 获取Access_Token
|
|
/// </summary>
|
|
/// <param name="corpid"></param>
|
|
/// <param name="corpsecret"></param>
|
|
/// <returns></returns>
|
|
public string GetAccessToken(string corpid, string corpsecret)
|
|
{
|
|
string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}", corpid, corpsecret);
|
|
AccessResponseMode json = GetUtil.GetJson<AccessResponseMode>(url);
|
|
if (json.errcode != 0)
|
|
{
|
|
string str = "更新Access_Token时失败" + "(" + errorMsg(json.errcode) + ")";
|
|
textBox1.Text += str + "\r\n";
|
|
}
|
|
return json.access_token;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 新建部门
|
|
/// </summary>
|
|
/// <param name="dr"></param>
|
|
public void PostDepartment(DataRow dr)
|
|
{
|
|
string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token={0}", access_Token);
|
|
string department = JsonUtil.ToJsonObject(dr);
|
|
department = department.Substring(1, department.Length - 2);
|
|
DepartmentResponseMode errcode = PostUtil.PostUrl<DepartmentResponseMode>(url, department);
|
|
if (errcode.errcode != 0)
|
|
{
|
|
string str = "新建" + dr["name"].ToString() + "部门->失败" + "(" + errorMsg(errcode.errcode) + ")";
|
|
textBox1.Text += str + "\r\n";
|
|
}
|
|
else
|
|
{
|
|
string sqlupdate = string.Format("update P_EmployeeSpecTab set updateflag = 0 where empspec_id = {0}", dr["id"]);
|
|
SqlHelper.ExecuteNonQuery(sqlupdate);
|
|
//string str = "新建" + dr["name"].ToString() + "部门->成功";
|
|
//textBox1.Text += str + "\r\n";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新部门
|
|
/// </summary>
|
|
/// <param name="dr"></param>
|
|
public void UpdateDepartment(DataRow dr)
|
|
{
|
|
string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/department/update?access_token={0}", access_Token);
|
|
string department = JsonUtil.ToJsonObject(dr);
|
|
department = department.Substring(1, department.Length - 2);
|
|
EmployeeResponseMode errcode = PostUtil.PostUrl<EmployeeResponseMode>(url, department);
|
|
if (errcode.errcode != 0)
|
|
{
|
|
if (errcode.errcode == 60003)
|
|
{
|
|
PostDepartment(dr);
|
|
}
|
|
else
|
|
{
|
|
string str = "更新部门" + dr["name"].ToString() + "->失败" + "(" + errorMsg(errcode.errcode) + ")";
|
|
textBox1.Text += str + "\r\n";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
string sqlupdate = string.Format("update P_EmployeeSpecTab set updateflag = 0 where empspec_id = {0}", dr["id"]);
|
|
SqlHelper.ExecuteNonQuery(sqlupdate);
|
|
//string str = "更新部门" + dr["name"].ToString() + "->成功";
|
|
//textBox1.Text += str + "\r\n";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除部门
|
|
/// </summary>
|
|
/// <param name="userid"></param>
|
|
public void DeleteDepartment(string userid)
|
|
{
|
|
string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/department/delete?access_token={0}&id={1}", access_Token, userid);
|
|
EmployeeResponseMode errcode = GetUtil.GetJson<EmployeeResponseMode>(url);
|
|
if (errcode.errcode != 0)
|
|
{
|
|
if (errcode.errcode == 60003)
|
|
{
|
|
string sqlupdate = string.Format("update P_EmployeeSpecTab set updateflag = 0 where empspec_id = {0}", userid);
|
|
SqlHelper.ExecuteNonQuery(sqlupdate);
|
|
|
|
//string str = "删除部门" + userid + "->成功";
|
|
//textBox1.Text += str + "\r\n";
|
|
}
|
|
else
|
|
{
|
|
string str = "删除部门" + userid + "->失败" + "(" + errorMsg(errcode.errcode) + ")";
|
|
textBox1.Text += str + "\r\n";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
string sqlupdate = string.Format("update P_EmployeeSpecTab set updateflag = 0 where empspec_id = {0}", userid);
|
|
SqlHelper.ExecuteNonQuery(sqlupdate);
|
|
|
|
//string str = "删除部门" + userid + "->成功";
|
|
//textBox1.Text += str + "\r\n";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 写入日志事件
|
|
/// </summary>
|
|
/// <param name="log"></param>
|
|
private void inPut(string log)
|
|
{
|
|
//判断是否存在此TXT文件
|
|
if (!System.IO.File.Exists(filePath))
|
|
{
|
|
FileStream fs1 = new FileStream(filePath, FileMode.Create, FileAccess.Write);//创建写入文件
|
|
StreamWriter sw = new StreamWriter(fs1);
|
|
sw.WriteLine(log);//开始写入值
|
|
sw.Close();
|
|
fs1.Close();
|
|
}
|
|
else
|
|
{
|
|
FileStream fs1 = new FileStream(filePath, FileMode.Append, FileAccess.Write);//获取文件尾行
|
|
StreamWriter sw = new StreamWriter(fs1);
|
|
sw.WriteLine(log);//开始写入值
|
|
sw.Close();
|
|
fs1.Close();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 新建人员
|
|
/// </summary>
|
|
/// <param name="dr"></param>
|
|
public void PostEmployee(DataRow dr)
|
|
{
|
|
string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token={0}", access_Token);
|
|
string employee = JsonUtil.ToJsonObject(dr);
|
|
employee = employee.Substring(1, employee.Length - 2);
|
|
DepartmentResponseMode errcode = PostUtil.PostUrl<DepartmentResponseMode>(url, employee);
|
|
if (errcode.errcode != 0)
|
|
{
|
|
if (errcode.errcode == 60106)
|
|
{
|
|
string sqlupdate = string.Format("update P_EmployeeTab set wxMsg = '{0}' where employeeid = {1}", "邮箱已存在, 新增失败!", dr["userid"]);
|
|
SqlHelper.ExecuteNonQuery(sqlupdate);
|
|
}
|
|
else if (errcode.errcode == 60104)
|
|
{
|
|
string sqlupdate = string.Format("update P_EmployeeTab set wxMsg = '{0}' where employeeid = {1}", "电话号码已存在, 新增失败!", dr["userid"]);
|
|
SqlHelper.ExecuteNonQuery(sqlupdate);
|
|
}
|
|
else
|
|
{
|
|
string str = "新建人员" + dr["name"].ToString() + "->失败:" + errcode.errmsg;
|
|
textBox1.Text += str + "\r\n";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
string sqlupdate = string.Format("update P_EmployeeTab set updateflag = 0,wxMsg='成功' where employeeid = {0}", dr["userid"]);
|
|
SqlHelper.ExecuteNonQuery(sqlupdate);
|
|
|
|
//string str = "新建人员" + dr["name"].ToString() + "->成功";
|
|
//textBox1.Text += str + "\r\n";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新人员
|
|
/// </summary>
|
|
/// <param name="dr"></param>
|
|
public void UpdateEmployee(DataRow dr)
|
|
{
|
|
string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token={0}", access_Token);
|
|
string employee = JsonUtil.ToJsonObject(dr);
|
|
employee = employee.Substring(1, employee.Length - 2);
|
|
EmployeeResponseMode errcode = PostUtil.PostUrl<EmployeeResponseMode>(url, employee);
|
|
if (errcode.errcode != 0)
|
|
{
|
|
if (errcode.errcode == 60111)
|
|
{
|
|
PostEmployee(dr);
|
|
}
|
|
else
|
|
{
|
|
string str = "更新人员" + dr["name"].ToString() + "->失败" + "(" + errorMsg(errcode.errcode) + ")";
|
|
textBox1.Text += str + "\r\n";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
string sqlupdate = string.Format("update P_EmployeeTab set updateflag = 0 where employeeid = {0}", dr["userid"]);
|
|
SqlHelper.ExecuteNonQuery(sqlupdate);
|
|
|
|
//string str = "更新人员" + dr["name"].ToString() + "->成功";
|
|
//textBox1.Text += str + "\r\n";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除人员
|
|
/// </summary>
|
|
/// <param name="userid"></param>
|
|
public void DeleteEmployee(DataRow dr)
|
|
{
|
|
try
|
|
{
|
|
string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/delete?access_token={0}&userid={1}", access_Token,dr["userid"]+"");
|
|
EmployeeResponseMode errcode = GetUtil.GetJson<EmployeeResponseMode>(url);
|
|
if (errcode.errcode != 0)
|
|
{
|
|
if (errcode.errcode == 60111)
|
|
{
|
|
|
|
string str = "删除人员" + dr["EmployeeName"] + "->失败!未存在此userid的人员在企业微信内";
|
|
textBox1.Text += str + "\r\n";
|
|
string sqlupdate = string.Format("update P_EmployeeTab set wxMsg='{1}' where employeeid = {0}", dr["userid"] + "", str);
|
|
SqlHelper.ExecuteNonQuery(sqlupdate);
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
string str = "删除人员" + dr["EmployeeName"] + "->失败" + "(" + errorMsg(errcode.errcode) + ")";
|
|
textBox1.Text += str + "\r\n";
|
|
string sqlupdate = string.Format("update P_EmployeeTab set wxMsg='{1}' where employeeid = {0}", dr["userid"] + "", str);
|
|
SqlHelper.ExecuteNonQuery(sqlupdate);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
string sqlupdate = string.Format("update P_EmployeeTab set updateflag = 0,wxMsg='删除成功' where employeeid = {0}", dr["userid"] + "");
|
|
SqlHelper.ExecuteNonQuery(sqlupdate);
|
|
|
|
//string str = "删除人员" + userid + "->成功";
|
|
//textBox1.Text += str + "\r\n";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
|
|
}
|
|
}
|
|
|
|
public void PostAll()
|
|
{
|
|
if (!this.isExecing)
|
|
{
|
|
try
|
|
{
|
|
this.textBox1.Text += "------------开始同步(" + DateTime.Now + ")--------------\r\n";
|
|
this.isExecing = true;
|
|
|
|
//更新部门
|
|
string sqlupdatedepartment = "select CoAliasName name,dbo.p_getpy(CoAliasName)+CAST(empspec_id as varchar(50)) name_en,empspec_id id,CONVERT(int,right(speciesNo,2)) 'order',isnull((select top 1 empspec_id from P_EmployeeSpecTab where speciesNo=SUBSTRING(b.speciesno,1,len(b.speciesno)-2)),-1) as parentid from P_EmployeeSpecTab b where empspec_ban=0 and updateflag = 1 and empspec_id != 1";
|
|
DataTable dtupdatedepartment = SqlHelper.ExecuteDataTable(sqlupdatedepartment);
|
|
foreach (DataRow dr in dtupdatedepartment.Rows)
|
|
{
|
|
Application.DoEvents();
|
|
UpdateDepartment(dr);
|
|
}
|
|
|
|
//更新人员
|
|
string sqlupdateemployee = @"select employeeid as userid,EmployeeName as name,b.empspec_id as department,case when p_emp_sex='男' then 1 else 2 end as gender,p_emp_idaddress as 'address',
|
|
p_emp_email as email,(select top 1 post_name from P_EmployeePostTab where post_id=p_emp_postid) as position,p_emp_phone as mobile
|
|
from p_employeeTab a,p_EmployeeSpecTab b
|
|
where sign=0 and a.updateflag = 1 and isnull(p_emp_phone,'')<>'' and EmployeeName!='管理员' and a.SpeciesNo=b.SpeciesNo";
|
|
DataTable dtupdateemployee = SqlHelper.ExecuteDataTable(sqlupdateemployee);
|
|
foreach (DataRow dr in dtupdateemployee.Rows)
|
|
{
|
|
Application.DoEvents();
|
|
UpdateEmployee(dr);
|
|
}
|
|
|
|
//删除人员
|
|
string sqldeleteemployee = "select employeeid as userid,EmployeeName from P_EmployeeTab where sign=1 and EmployeeName!='管理员'";
|
|
DataTable dtdeleteemployee = SqlHelper.ExecuteDataTable(sqldeleteemployee);
|
|
|
|
//sqldeleteemployee = "select employeeid as userid,EmployeeName from P_EmployeeTab where sign=1 and EmployeeName='赵丽明'";
|
|
//dtdeleteemployee = SqlHelper.ExecuteDataTable(sqldeleteemployee);
|
|
|
|
foreach (DataRow dr in dtdeleteemployee.Rows)
|
|
{
|
|
Application.DoEvents();
|
|
DeleteEmployee(dr);
|
|
}
|
|
|
|
//删除部门
|
|
string sqldeletedepartment = "select empspec_id as id from P_EmployeeSpecTab where empspec_ban=1 order by LEN(SpeciesNo) desc";
|
|
DataTable dtdeletedepartment = SqlHelper.ExecuteDataTable(sqldeletedepartment);
|
|
foreach (DataRow dr in dtdeletedepartment.Rows)
|
|
{
|
|
Application.DoEvents();
|
|
DeleteDepartment(dr["id"].ToString());
|
|
}
|
|
|
|
this.textBox1.Text += "\r\n------------本次同步完成(" + DateTime.Now + ")--------------";
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
finally
|
|
{
|
|
|
|
this.WriteLocalLog();
|
|
this.isExecing = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 开始刷新按钮事件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void btnRefrash_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
ConnectServer(true);
|
|
timer1.Interval = Convert.ToInt16(textBox6.Text) * 60 * 1000;
|
|
timer1.Enabled = true;
|
|
|
|
this.PostAll();
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新人员计时器事件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void timer1_Tick(object sender, EventArgs e)
|
|
{
|
|
this.PostAll();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 每小时刷新Access_Token
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void timer2_Tick(object sender, EventArgs e)
|
|
{
|
|
access_Token = GetAccessToken(corpid, corpsecret);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 新的响应对象
|
|
/// </summary>
|
|
public class AccessResponseMode
|
|
{
|
|
public int errcode;
|
|
public string errmsg;
|
|
public string access_token;
|
|
public int expires_in;
|
|
}
|
|
public class DepartmentResponseMode
|
|
{
|
|
public int errcode;
|
|
public string errmsg;
|
|
public int id;
|
|
}
|
|
public class EmployeeResponseMode
|
|
{
|
|
public int errcode;
|
|
public string errmsg;
|
|
}
|
|
public void WriteLocalLog()
|
|
{
|
|
try
|
|
{
|
|
//获取程序目录,并完整日志文件夹目录
|
|
folderPath = System.IO.Directory.GetCurrentDirectory() + "\\Log";
|
|
|
|
//TXT日志目录
|
|
filePath = folderPath + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
|
|
|
|
//判断是否存在文件夹
|
|
if (!System.IO.Directory.Exists(folderPath))
|
|
{
|
|
//创建文件夹
|
|
Directory.CreateDirectory(folderPath);
|
|
}
|
|
|
|
string log = textBox1.Text.ToString();
|
|
inPut(log);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 错误码集合
|
|
/// </summary>
|
|
/// <param name="errorcode"></param>
|
|
/// <returns></returns>
|
|
public static String errorMsg(int errorcode)
|
|
{
|
|
String errmsg = "";
|
|
switch (errorcode)
|
|
{
|
|
case -1:
|
|
errmsg = "系统繁忙 ";
|
|
break;
|
|
case 0:
|
|
errmsg = "请求成功 ";
|
|
break;
|
|
case 40001:
|
|
errmsg = "获取access_token时Secret错误,或者access_token无效 ";
|
|
break;
|
|
case 40002:
|
|
errmsg = "不合法的凭证类型";
|
|
break;
|
|
case 40003:
|
|
errmsg = "不合法的UserID";
|
|
break;
|
|
case 40004:
|
|
errmsg = "不合法的媒体文件类型 ";
|
|
break;
|
|
case 40005:
|
|
errmsg = "不合法的文件类型 ";
|
|
break;
|
|
case 40006:
|
|
errmsg = "不合法的文件大小";
|
|
break;
|
|
case 40007:
|
|
errmsg = "不合法的媒体文件id";
|
|
break;
|
|
case 40008:
|
|
errmsg = "不合法的消息类型 ";
|
|
break;
|
|
case 40013:
|
|
errmsg = "不合法的corpid ";
|
|
break;
|
|
case 40014:
|
|
errmsg = "不合法的access_token";
|
|
break;
|
|
case 40015:
|
|
errmsg = "不合法的菜单类型";
|
|
break;
|
|
case 40016:
|
|
errmsg = "不合法的按钮个数";
|
|
break;
|
|
case 40017:
|
|
errmsg = "不合法的按钮类型";
|
|
break;
|
|
case 40018:
|
|
errmsg = "不合法的按钮名字长度";
|
|
break;
|
|
case 40019:
|
|
errmsg = "不合法的按钮KEY长度";
|
|
break;
|
|
case 40020:
|
|
errmsg = "不合法的按钮URL长度 ";
|
|
break;
|
|
case 40021:
|
|
errmsg = "不合法的菜单版本号 ";
|
|
break;
|
|
case 40022:
|
|
errmsg = "不合法的子菜单级数";
|
|
break;
|
|
case 40023:
|
|
errmsg = "不合法的子菜单按钮个数";
|
|
break;
|
|
case 40024:
|
|
errmsg = "不合法的子菜单按钮类型";
|
|
break;
|
|
case 40025:
|
|
errmsg = "不合法的子菜单按钮名字长度";
|
|
break;
|
|
case 40026:
|
|
errmsg = "不合法的子菜单按钮KEY长度";
|
|
break;
|
|
case 40027:
|
|
errmsg = "不合法的子菜单按钮URL长度";
|
|
break;
|
|
case 40028:
|
|
errmsg = "不合法的自定义菜单使用员工";
|
|
break;
|
|
case 40029:
|
|
errmsg = "不合法的oauth_code";
|
|
break;
|
|
case 40031:
|
|
errmsg = "不合法的UserID列表";
|
|
break;
|
|
case 40032:
|
|
errmsg = "不合法的UserID列表长度";
|
|
break;
|
|
case 40033:
|
|
errmsg = "不合法的请求字符,不能包含\\uxxxx格式的字符 ";
|
|
break;
|
|
case 40035:
|
|
errmsg = "不合法的参数 ";
|
|
break;
|
|
case 40038:
|
|
errmsg = "不合法的请求格式 ";
|
|
break;
|
|
case 40039:
|
|
errmsg = "不合法的URL长度";
|
|
break;
|
|
case 40040:
|
|
errmsg = "不合法的插件token";
|
|
break;
|
|
case 40041:
|
|
errmsg = "不合法的插件id";
|
|
break;
|
|
case 40042:
|
|
errmsg = "不合法的插件会话";
|
|
break;
|
|
case 40048:
|
|
errmsg = "url中包含不合法domain";
|
|
break;
|
|
case 40054:
|
|
errmsg = "不合法的子菜单url域名";
|
|
break;
|
|
case 40055:
|
|
errmsg = "不合法的按钮url域名 ";
|
|
break;
|
|
case 40056:
|
|
errmsg = "不合法的agentid";
|
|
break;
|
|
case 40057:
|
|
errmsg = "不合法的callbackurl";
|
|
break;
|
|
case 40058:
|
|
errmsg = "不合法的红包参数 ";
|
|
break;
|
|
case 40059:
|
|
errmsg = "不合法的上报地理位置标志位 ";
|
|
break;
|
|
case 40060:
|
|
errmsg = "设置上报地理位置标志位时没有设置callbackurl";
|
|
break;
|
|
case 40061:
|
|
errmsg = "设置应用头像失败";
|
|
break;
|
|
case 40062:
|
|
errmsg = "不合法的应用模式";
|
|
break;
|
|
case 40063:
|
|
errmsg = "红包参数为空";
|
|
break;
|
|
case 40064:
|
|
errmsg = "管理组名字已存在";
|
|
break;
|
|
case 40065:
|
|
errmsg = "不合法的管理组名字长度";
|
|
break;
|
|
case 40066:
|
|
errmsg = "不合法的部门列表";
|
|
break;
|
|
case 40067:
|
|
errmsg = "标题长度不合法 ";
|
|
break;
|
|
case 40068:
|
|
errmsg = "不合法的标签ID";
|
|
break;
|
|
case 40069:
|
|
errmsg = "不合法的标签ID列表";
|
|
break;
|
|
case 40070:
|
|
errmsg = "列表中所有标签(用户)ID都不合法 ";
|
|
break;
|
|
case 40071:
|
|
errmsg = "不合法的标签名字,标签名字已经存在 ";
|
|
break;
|
|
case 40072:
|
|
errmsg = "不合法的标签名字长度";
|
|
break;
|
|
case 40073:
|
|
errmsg = "不合法的openid";
|
|
break;
|
|
case 40074:
|
|
errmsg = "news消息不支持指定为高保密消息";
|
|
break;
|
|
case 41001:
|
|
errmsg = "缺少access_token参数 ";
|
|
break;
|
|
case 41002:
|
|
errmsg = "缺少corpid参数";
|
|
break;
|
|
case 41003:
|
|
errmsg = "缺少refresh_token参数";
|
|
break;
|
|
case 41004:
|
|
errmsg = "缺少secret参数";
|
|
break;
|
|
case 41005:
|
|
errmsg = "缺少多媒体文件数据";
|
|
break;
|
|
case 41006:
|
|
errmsg = "缺少media_id参数";
|
|
break;
|
|
case 41007:
|
|
errmsg = "缺少子菜单数据";
|
|
break;
|
|
case 41008:
|
|
errmsg = "缺少oauth code";
|
|
break;
|
|
case 41009:
|
|
errmsg = "缺少UserID";
|
|
break;
|
|
case 41010:
|
|
errmsg = "缺少url";
|
|
break;
|
|
case 41011:
|
|
errmsg = "缺少agentid";
|
|
break;
|
|
case 41012:
|
|
errmsg = "缺少应用头像mediaid";
|
|
break;
|
|
case 41013:
|
|
errmsg = "缺少应用名字";
|
|
break;
|
|
case 41014:
|
|
errmsg = "缺少应用描述";
|
|
break;
|
|
case 41015:
|
|
errmsg = "缺少Content";
|
|
break;
|
|
case 41016:
|
|
errmsg = "缺少标题";
|
|
break;
|
|
case 41017:
|
|
errmsg = "缺少标签ID";
|
|
break;
|
|
case 41018:
|
|
errmsg = "缺少标签名字 ";
|
|
break;
|
|
case 42001:
|
|
errmsg = "access_token超时 ";
|
|
break;
|
|
case 42002:
|
|
errmsg = "refresh_token超时";
|
|
break;
|
|
case 42003:
|
|
errmsg = "oauth_code超时 ";
|
|
break;
|
|
case 42004:
|
|
errmsg = "插件token超时";
|
|
break;
|
|
case 43001:
|
|
errmsg = "需要GET请求";
|
|
break;
|
|
case 43002:
|
|
errmsg = "需要POST请求";
|
|
break;
|
|
case 43003:
|
|
errmsg = "需要HTTPS";
|
|
break;
|
|
case 43004:
|
|
errmsg = "需要接收者关注";
|
|
break;
|
|
case 43005:
|
|
errmsg = "需要好友关系";
|
|
break;
|
|
case 43006:
|
|
errmsg = "需要订阅";
|
|
break;
|
|
case 43007:
|
|
errmsg = "需要授权";
|
|
break;
|
|
case 43008:
|
|
errmsg = "需要支付授权";
|
|
break;
|
|
case 43009:
|
|
errmsg = "需要员工已关注";
|
|
break;
|
|
case 43010:
|
|
errmsg = "需要处于回调模式";
|
|
break;
|
|
case 43011:
|
|
errmsg = "需要企业授权";
|
|
break;
|
|
case 44001:
|
|
errmsg = "多媒体文件为空";
|
|
break;
|
|
case 44002:
|
|
errmsg = "POST的数据包为空";
|
|
break;
|
|
case 44003:
|
|
errmsg = "图文消息内容为空";
|
|
break;
|
|
case 44004:
|
|
errmsg = "文本消息内容为空";
|
|
break;
|
|
case 45001:
|
|
errmsg = "多媒体文件大小超过限制";
|
|
break;
|
|
case 45002:
|
|
errmsg = "消息内容超过限制";
|
|
break;
|
|
case 45003:
|
|
errmsg = "标题字段超过限制";
|
|
break;
|
|
case 45004:
|
|
errmsg = "描述字段超过限制";
|
|
break;
|
|
case 45005:
|
|
errmsg = "链接字段超过限制";
|
|
break;
|
|
case 45006:
|
|
errmsg = "图片链接字段超过限制";
|
|
break;
|
|
case 45007:
|
|
errmsg = "语音播放时间超过限制";
|
|
break;
|
|
case 45008:
|
|
errmsg = "图文消息超过限制";
|
|
break;
|
|
case 45009:
|
|
errmsg = "接口调用超过限制";
|
|
break;
|
|
case 45010:
|
|
errmsg = "创建菜单个数超过限制";
|
|
break;
|
|
case 45015:
|
|
errmsg = "回复时间超过限制";
|
|
break;
|
|
case 45016:
|
|
errmsg = "系统分组,不允许修改";
|
|
break;
|
|
case 45017:
|
|
errmsg = "分组名字过长";
|
|
break;
|
|
case 45018:
|
|
errmsg = "分组数量超过上限";
|
|
break;
|
|
case 45024:
|
|
errmsg = "账号数量超过上限";
|
|
break;
|
|
case 46001:
|
|
errmsg = "不存在媒体数据";
|
|
break;
|
|
case 46002:
|
|
errmsg = "不存在的菜单版本";
|
|
break;
|
|
case 46003:
|
|
errmsg = "不存在的菜单数据";
|
|
break;
|
|
case 46004:
|
|
errmsg = "不存在的员工";
|
|
break;
|
|
case 47001:
|
|
errmsg = "解析JSON/XML内容错误";
|
|
break;
|
|
case 48002:
|
|
errmsg = "Api禁用";
|
|
break;
|
|
case 50001:
|
|
errmsg = "redirect_uri未授权";
|
|
break;
|
|
case 50002:
|
|
errmsg = "员工不在权限范围";
|
|
break;
|
|
case 50003:
|
|
errmsg = "应用已停用";
|
|
break;
|
|
case 50004:
|
|
errmsg = "员工状态不正确(未关注状态) ";
|
|
break;
|
|
case 50005:
|
|
errmsg = "企业已禁用";
|
|
break;
|
|
case 60001:
|
|
errmsg = "部门长度不符合限制";
|
|
break;
|
|
case 60002:
|
|
errmsg = "部门层级深度超过限制";
|
|
break;
|
|
case 60003:
|
|
errmsg = "部门不存在";
|
|
break;
|
|
case 60004:
|
|
errmsg = "父亲部门不存在";
|
|
break;
|
|
case 60005:
|
|
errmsg = "不允许删除有成员的部门";
|
|
break;
|
|
case 60006:
|
|
errmsg = "不允许删除有子部门的部门";
|
|
break;
|
|
case 60007:
|
|
errmsg = "不允许删除根部门";
|
|
break;
|
|
case 60008:
|
|
errmsg = "部门名称已存在";
|
|
break;
|
|
case 60009:
|
|
errmsg = "部门名称含有非法字符";
|
|
break;
|
|
case 60010:
|
|
errmsg = "部门存在循环关系";
|
|
break;
|
|
case 60011:
|
|
errmsg = "管理员权限不足,(user/department/agent)无权限";
|
|
break;
|
|
case 60012:
|
|
errmsg = "不允许删除默认应用";
|
|
break;
|
|
case 60013:
|
|
errmsg = "不允许关闭应用";
|
|
break;
|
|
case 60014:
|
|
errmsg = "不允许开启应用";
|
|
break;
|
|
case 60015:
|
|
errmsg = "不允许修改默认应用可见范围";
|
|
break;
|
|
case 60016:
|
|
errmsg = "不允许删除存在成员的标签";
|
|
break;
|
|
case 60017:
|
|
errmsg = "不允许设置企业";
|
|
break;
|
|
case 60102:
|
|
errmsg = "UserID已存在";
|
|
break;
|
|
case 60103:
|
|
errmsg = "手机号码不合法";
|
|
break;
|
|
case 60104:
|
|
errmsg = "手机号码已存在";
|
|
break;
|
|
case 60105:
|
|
errmsg = "邮箱不合法";
|
|
break;
|
|
case 60106:
|
|
errmsg = "邮箱已存在";
|
|
break;
|
|
case 60107:
|
|
errmsg = "微信号不合法";
|
|
break;
|
|
case 60108:
|
|
errmsg = "微信号已存在";
|
|
break;
|
|
case 60109:
|
|
errmsg = "QQ号已存在";
|
|
break;
|
|
case 60110:
|
|
errmsg = "部门个数超出限制";
|
|
break;
|
|
case 60111:
|
|
errmsg = "UserID不存在";
|
|
break;
|
|
case 60112:
|
|
errmsg = "成员姓名不合法";
|
|
break;
|
|
case 60113:
|
|
errmsg = "身份认证信息(微信号/手机/邮箱)不能同时为空 ";
|
|
break;
|
|
case 60114:
|
|
errmsg = "性别不合法";
|
|
break;
|
|
case 60129:
|
|
errmsg = "用户设置了拒绝邀请";
|
|
break;
|
|
|
|
default:
|
|
errmsg = "没有此错误码!" + "(" + errorcode + ")";
|
|
break;
|
|
}
|
|
|
|
return errmsg;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:连接服务器</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2017-08-09 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="isSave">if set to <c>true</c> [is save].</param>
|
|
private void ConnectServer(bool isSave = false)
|
|
{
|
|
|
|
string serverName = this.txtServerName.Text.Trim();
|
|
string dbName = this.txtDBName.Text.Trim();
|
|
string user = this.txtUser.Text.Trim();
|
|
string password = this.txtPassword.Text.Trim();
|
|
|
|
if (string.IsNullOrWhiteSpace(serverName))
|
|
{
|
|
MessageUtil.Show(ResourceKeys.ServerNameIsNull);
|
|
return;
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(dbName))
|
|
{
|
|
MessageUtil.Show(ResourceKeys.ServerDBIsNull);
|
|
return;
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(user))
|
|
{
|
|
MessageUtil.Show("请重新输入用户名");
|
|
return;
|
|
}
|
|
|
|
// 测试数据库连接
|
|
try
|
|
{
|
|
if (CreateConnection())
|
|
{
|
|
if (isSave)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
IniWriteValue(company, "serverName", serverName);
|
|
IniWriteValue(company, "dbName", dbName);
|
|
IniWriteValue(company, "user", user);
|
|
IniWriteValue(company, "password", password);
|
|
MessageUtil.Show(ResourceKeys.ConnectSuccess);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
MessageUtil.Show(ResourceKeys.ConnectFault);
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
MessageUtil.Show(ResourceKeys.ConnectFault);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:创建数据库连接</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2017-08-07 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
|
public bool CreateConnection()
|
|
{
|
|
string connStr = GetConnection();
|
|
if (SqlHelper._connection != null)
|
|
{
|
|
try
|
|
{
|
|
SqlHelper._connection.Close();
|
|
SqlHelper._connection.Dispose();
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
SqlHelper._connection = null;
|
|
}
|
|
try
|
|
{
|
|
SqlHelper._connection = new SqlConnection(connStr);
|
|
SqlHelper._connection.Open();
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Instance.WriteLog(ex.Message);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取连接服务器的字符串
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string GetConnection()
|
|
{
|
|
return string.Format("Server={0};Database={1};Persist Security Info=True;User ID={2};Password={3};Connection Timeout=5;MultipleActiveResultSets=true", txtServerName.Text.ToString(), txtDBName.Text.ToString(), txtUser.Text.ToString(), txtPassword.Text.ToString());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 连接服务器按钮事件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void button1_Click_1(object sender, EventArgs e)
|
|
{
|
|
ConnectServer();
|
|
}
|
|
|
|
/// <summary>
|
|
/// ini文件获取数据
|
|
/// </summary>
|
|
/// <param name="section"></param>
|
|
/// <param name="key"></param>
|
|
/// <param name="defVal"></param>
|
|
/// <param name="retVal"></param>
|
|
/// <param name="size"></param>
|
|
/// <param name="filePath"></param>
|
|
/// <returns></returns>
|
|
[DllImport("kernel32")]
|
|
private static extern int GetPrivateProfileString(string section, string key, string defVal, StringBuilder retVal, int size, string filePath);
|
|
|
|
/// <summary>
|
|
/// ini文件写入数据
|
|
/// </summary>
|
|
/// <param name="section"></param>
|
|
/// <param name="key"></param>
|
|
/// <param name="val"></param>
|
|
/// <param name="filePath"></param>
|
|
/// <returns></returns>
|
|
[DllImport("kernel32")]
|
|
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
|
|
|
|
/// <summary>
|
|
/// 写INI文件
|
|
/// </summary>
|
|
/// <param name="section">段落</param>
|
|
/// <param name="key">键</param>
|
|
/// <param name="iValue">值</param>
|
|
public void IniWriteValue(string section, string key, string iValue)
|
|
{
|
|
WritePrivateProfileString(section, key, iValue, this.Path);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取INI文件
|
|
/// </summary>
|
|
/// <param name="section">段落</param>
|
|
/// <param name="key">键</param>
|
|
/// <returns>返回的键值</returns>
|
|
public string IniReadValue(string section, string key)
|
|
{
|
|
StringBuilder temp = new StringBuilder(255);
|
|
int i = GetPrivateProfileString(section, key, "", temp, 255, this.Path);
|
|
return temp.ToString();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 时间间隔输入框失去焦点事件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void textBox6_LostFocus(object sender, EventArgs e)
|
|
{
|
|
string checkStr = textBox6.Text.ToString();
|
|
if (string.IsNullOrEmpty(checkStr)) textBox6.Text = "30";
|
|
int check = Convert.ToInt32(textBox6.Text.ToString());
|
|
if (check < 30)
|
|
{
|
|
textBox6.Text = "30";
|
|
}
|
|
min = Convert.ToInt32(textBox6.Text.ToString());
|
|
IniWriteValue(company, "interval", textBox6.Text.ToString());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 时间间隔输入框只能输入数字
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void textBox6_KeyPress(object sender, KeyPressEventArgs e)
|
|
{
|
|
if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8)
|
|
{
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
|
|
#region 测试使用按钮及废弃事件
|
|
int length = 10;
|
|
/// <summary>
|
|
/// 删除部门按钮
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void button1_Click(object sender, EventArgs e)
|
|
{
|
|
string sql = string.Format("select empspec_id from P_EmployeeSpecTab where empspec_ban=0 and empspec_id != 1 and len(speciesno) = {0}", length);
|
|
length = length - 2;
|
|
DataTable dt = SqlHelper.ExecuteDataTable(sql);
|
|
foreach (DataRow dr in dt.Rows)
|
|
{
|
|
DeleteDepartment(dr["empspec_id"].ToString());
|
|
}
|
|
}
|
|
|
|
private void Form1_Load(object sender, EventArgs e)
|
|
{
|
|
this.timer1.Interval = Convert.ToInt32(this.textBox6.Text) * 60 * 1000;
|
|
}
|
|
|
|
///// <summary>
|
|
///// 新建部门按钮事件
|
|
///// </summary>
|
|
///// <param name="sender"></param>
|
|
///// <param name="e"></param>
|
|
//private void btnCreateDepartment_Click(object sender, EventArgs e)
|
|
//{
|
|
// //程序开始运行记录
|
|
// string beginInput = "<<新建部门开始时间:" + DateTime.Now.ToLocalTime().ToString() + ">>";
|
|
// textBox1.Text += beginInput + "\r\n";
|
|
|
|
// string sql = "select CoAliasName name,dbo.p_getpy(CoAliasName)+CAST(empspec_id as varchar(50)) name_en,empspec_id id,CONVERT(int,right(speciesNo,2)) 'order',isnull((select top 1 empspec_id from P_EmployeeSpecTab where speciesNo=SUBSTRING(b.speciesno,1,len(b.speciesno)-2)),-1) as parentid from P_EmployeeSpecTab b where empspec_ban=0 and empspec_id != 1";
|
|
// DataTable dt = SqlHelper.ExecuteDataTable(sql);
|
|
// foreach (DataRow dr in dt.Rows)
|
|
// {
|
|
// PostDepartment(dr);
|
|
// }
|
|
// string sqlupdateDelete = "update P_EmployeeSpecTab set updateflag = 0 where empspec_ban = 1 and updateflag = 1";
|
|
// SqlHelper.ExecuteNonQuery(sqlupdateDelete);
|
|
// string record = "<<结束时间:" + DateTime.Now.ToLocalTime().ToString() + ">>";
|
|
// textBox1.Text += record + "\r\n";
|
|
//}
|
|
|
|
///// <summary>
|
|
///// 新建人员按钮事件
|
|
///// </summary>
|
|
///// <param name="sender"></param>
|
|
///// <param name="e"></param>
|
|
//private void btnCreateEmployee_Click(object sender, EventArgs e)
|
|
//{
|
|
// //程序开始运行记录
|
|
// string beginInput = "<<新建人员开始时间:" + DateTime.Now.ToLocalTime().ToString() + ">>";
|
|
// textBox1.Text += beginInput + "\r\n";
|
|
|
|
// string sql = "select top 200 employeeid as userid,EmployeeName as name,b.empspec_id as department,p_emp_sex as gender,p_emp_idaddress as 'address',p_emp_email as email,p_emp_postion as position,p_emp_linkphone1 as mobile from p_employeeTab a,p_EmployeeSpecTab b where sign=0 and EmployeeName!='管理员' and a.SpeciesNo=b.SpeciesNo";
|
|
// DataTable dt = SqlHelper.ExecuteDataTable(sql);
|
|
// foreach (DataRow dr in dt.Rows)
|
|
// {
|
|
// PostEmployee(dr);
|
|
// }
|
|
// string sqlupdateDelete = "update p_employeeTab set updateflag = 0 where sign = 1 and updateflag = 1";
|
|
// SqlHelper.ExecuteNonQuery(sqlupdateDelete);
|
|
// string record = "<<结束时间:" + DateTime.Now.ToLocalTime().ToString() + ">>";
|
|
// textBox1.Text += record + "\r\n";
|
|
//}
|
|
///// <summary>
|
|
///// 停止刷新按钮事件
|
|
///// </summary>
|
|
///// <param name="sender"></param>
|
|
///// <param name="e"></param>
|
|
//private void btnStop_Click(object sender, EventArgs e)
|
|
//{
|
|
// timer1.Enabled = false;
|
|
//}
|
|
#endregion
|
|
}
|
|
}
|