using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Xml;
using SuperMap.RealEstate.ServiceModel;
using Business = SuperMap.RealEstate.Personnel.Storage.Business;
using HZQR.Common.Common;
using HZQR.Common;
namespace Personnel.WebSite.Shanxi
{
public class ThirdParty
{
#region 山西OA平台用户同步参数配置
///
/// 山西OA平台用户同步地址
///
protected static string sxWebServiceUrl = ConfigurationManager.AppSettings["sxWebServiceUrl"].ToString();
///
/// 山西OA平台用户同步方法
///
protected static string sxWebServiceMethod = ConfigurationManager.AppSettings["sxWebServiceMethod"].ToString();
///
/// 山西OA平台用户同步安全认证标识
///
protected static string key = "73D08BF08604E2B805166C45D323522E";//CommonHelper.Create32MD5("whir.2011");
///
/// 山西OA平台用户同步serviceKey
///
protected static string serviceKey = "evoserviceKey";
///
/// 山西OA平台用户同步【验证类型,0-不依赖OA帐号登入验证的系统,1-依赖OA认证的登入系统;默认0】
///
protected static string verificationType = "0";
///
/// 山西OA平台用户同步【标识userKey类型,对应关系为:0-帐号,1-userId ,2-身份证号,3-用户简码】
///
protected static string userKeyType = "0";
///
/// 山西OA平台用户同步组织ID
///
protected static int orgid = 78;
#endregion
#region 山西交研、视频系统用户同步方法
public static void SysncUserToThird(int cmd, string userName, string passPort, string userPwd,
string userPhone, int userState, string pageName = "")
{
Task task = Task.Factory.StartNew(() =>
{
#region 同步到安全管控平台
try
{
Shanxi.Models.Result result = Shanxi.sxjsHelper.SyncUser(cmd.ToString(), userName, passPort,
userPwd, userPhone, userState.ToString());
if (result.success == false)
{
if (result.errorCode == "200102")
{
//同步用户信息失败,用户不存在
cmd = 1;//对于对方来说是新增用户
result = Shanxi.sxjsHelper.SyncUser(cmd.ToString(), userName, passPort, userPwd, userPhone, userState.ToString());
if (result.success == false)
{
LogUtil.WriteLog(null, "更新用户信息出错:" + result.msg + ",页面" +
pageName, DateTime.Now.ToString("yyyyMMdd_") + "sxjsEx");//山西交研接口请求出错
}
}
else
{
LogUtil.WriteLog(null, "同步账号失败:" + result.msg + ",页面" +
pageName, DateTime.Now.ToString("yyyyMMdd_") + "sxjsEx");//山西交研接口请求出错
}
}
else
{
LogUtil.WriteLog(null, "同步账号成功:" + passPort,
DateTime.Now.ToString("yyyyMMdd_") + "sxjs");//山西交研接口请求成功
}
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "同步登录账号",
"同步到安全管控平台passPort=" + passPort + ",页面" + pageName);
}
#endregion
#region 同步到视频系统
try
{
Shanxi.Models.VideoResult result = videoHelper.SyncUser(cmd, userName, passPort, userPwd, userPhone, userState.ToString());
if (result.code == 301)
{
//同步用户信息失败,用户已存在
cmd = 2;//对于对方来说是更新
result = videoHelper.SyncUser(cmd, userName, passPort, userPwd, userPhone, userState.ToString());
if (result.code != 200)
{
LogUtil.WriteLog(null, "更新用户信息出错:" + result.msg + ",页面" + pageName,
DateTime.Now.ToString("yyyyMMdd_") + "sxvideoEx");//视频系统接口请求出错
}
}
if (result.code == 302)
{
//同步用户信息失败,用户不存在
cmd = 1;//对于对方来说是新增
result = videoHelper.SyncUser(cmd, userName, passPort, userPwd, userPhone, userState.ToString());
if (result.code != 200)
{
LogUtil.WriteLog(null, "新增用户信息出错:" + result.msg + ",页面" + pageName,
DateTime.Now.ToString("yyyyMMdd_") + "sxvideoEx");//视频系统接口请求出错
}
}
else if (result.code == 200)
{
LogUtil.WriteLog(null, "同步账号成功:" + result.msg + ",页面:" + pageName,
DateTime.Now.ToString("yyyyMMdd_") + "sxvideo");//视频系统接口请求出错
}
else
{
LogUtil.WriteLog(null, "同步账号失败:" + passPort,
DateTime.Now.ToString("yyyyMMdd_") + "sxvideoEx");//视频系统接口请求成功
}
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "同步登录账号", "同步到视频系统passPort=" + passPort + ",页面" + pageName);
}
#endregion
});
}
#endregion
#region 工资相关计算规则
#region 岗位工资计算规则
///
///
///
/// 岗位薪资系数
///
public static double PostCalculate(double radio)
{
double post_base = ConfigurationManager.AppSettings["Post_Base"].ToString().TryParseToDouble();
return Math.Round(radio * post_base, 2);
}
#endregion
#region 加班计算规则
///
/// 加班计算规则
///
/// 固定工资(基础工资、职级工资、年工工资、学历职称工资)
/// 加班类型:1工作日 2双休日 3节假日
/// 加班时间
///
public static double OverTimeCalculate(double regularEarn, int type, double workTime)
{
workTime = workTime * 60;
double dateSalary = regularEarn / 21.75 / 7.5 / 60;
if (type == 1)
dateSalary = dateSalary * workTime * 1.5;
else if (type == 2)
dateSalary = dateSalary * workTime * 2;
else if (type == 3)
dateSalary = dateSalary * workTime * 3;
return Math.Round(dateSalary, 2);
}
#endregion
#region 病假、事假、旷工计算规则
///
///
///
/// 固定工资(基础工资、职级工资、年工工资、学历职称工资)
/// 月绩效工资
/// 岗位工资
/// 请假类型:1事假 2病假
/// 请假时间
/// 工作年限
///
public static double LeaveCalculate(double regularEarn, double performance, double postSalary, int type, double leaveDay, int workYear)
{
double salary = 0;
leaveDay = leaveDay * 60;
regularEarn = regularEarn / 21.75 / 7.5 / 60;
//(月绩效工资+岗位工资)/21.75/7.5工作时/60分钟*(请假时间*60分钟)
double commonValue = (performance + postSalary) / 21.75 / 7.5 / 60 * leaveDay;
if (type == 1)
{
//事假:固定薪资(工资明细前4项相加)/ 21.75 * 0.5*天数 +(月绩效工资+岗位工资)/21.75*天数
salary = regularEarn * 0.5 * leaveDay + commonValue;
}
else if (type == 2)
{
//病假:固定薪资(工资明细前4项相加)/ 21.75 * (根据工作年限系数不同)* 天数+(月绩效工资+岗位工资)/21.75*天数
if (workYear < 5)
salary = regularEarn * 0.4 * leaveDay + commonValue;
else if (workYear >= 5 && workYear < 10)
salary = regularEarn * 0.3 * leaveDay + commonValue;
else if (workYear >= 10 && workYear < 15)
salary = regularEarn * 0.2 * leaveDay + commonValue;
else if (workYear >= 15)
salary = commonValue;
}
return Math.Round(salary, 2);
}
#endregion
#region 月绩效计算规则
///
///
///
/// 岗位工资
/// 月绩效系数
///
public static double PerformanceCalculate(double postSalary)
{
return Math.Round(postSalary * 1.5, 2);
}
#endregion
#endregion
#region 计算员工薪资
public static bool SalaryCalculate(string sqlWhereStaff, string orderBySql, string payDate, int CREATE_STAFF_ID, string staffName, int pageSize, Transaction _Transaction)
{
#region 算薪月份统计
DateTime now = DateTime.Now;
string sqlWhereDate = " TO_CHAR(B.PAID_DATE,'yyyy-MM')='" + payDate + "'";
if ((payDate + "-01").TryParseToDateTime() >= (now.ToString("yyyy-MM") + "-01").TryParseToDateTime())
{
return true;
}
#endregion
#region 查询数据
string sqlRowNum = pageSize > 0 ? "WHERE ROWNUM<=" + pageSize : "";
string sql = string.Format(@" SELECT * FROM(
SELECT A.STAFF_ID,A.STAFF_SEX,A.SERVERPART_ID,A.STAFF_RANK,A.CURRENT_POSITION,A.FIRST_DEGREE,A.HIGHEST_EDUCATION,
A.SKILL_GRADE,A.WORKING_YEARS,A.ISONLY_CHILD,NVL(A.ISLEAD,0) AS ISLEAD,B.PAID_DATE
FROM PERSONNEL_STORAGE.T_STAFF A LEFT JOIN PERSONNEL_STORAGE.T_STAFFSALARY B ON (A.STAFF_ID=B.STAFF_ID AND {0})
WHERE {1}
ORDER BY {2}) {3}", sqlWhereDate, sqlWhereStaff, orderBySql, sqlRowNum);
DataTable dt = new Business.STAFF(_Transaction).ExecuteDataTable(sql);
if (dt.Rows.Count == 0)
{
return true;
}
DataRow[] dr = dt.Select("PAID_DATE is null");
if (dr.Length == 0)
{
return true;
}
//员工-月汇总考核数据
sql = string.Format(@"SELECT STAFF_ID,ATTENDANCE_NUM,ABSENTEEISM_NUM,PERSONAL_LEAVE,SICK_LEAVE,REST,OVERTIME,COMPENSATORY,
NVL(PERSONAL_LEAVE,0)+NVL(SICK_LEAVE,0)+NVL(MARITAL_LEAVE,0)+NVL(MATERNITY_LEAVE,0)+
NVL(ACCOM_MATERNITY_LEAVE,0)+NVL(FUNERAL_LEAVE,0)+NVL(ANNUAL_LEAVE,0)+NVL(PUBLIC_AFFAIRS_LEAVE,0) AS LEAVE_NUM,
WORKDAY_OVERTIME,WEEKEND_OVERTIME,HOLIDAY_OVERTIME
FROM PERSONNEL_STORAGE.T_ATTENDANCEMONTH
WHERE STATISTICS_MONTH='{0}' AND STAFF_ID IN
(SELECT A.STAFF_ID
FROM PERSONNEL_STORAGE.T_STAFF A LEFT JOIN PERSONNEL_STORAGE.T_STAFFSALARY B ON (A.STAFF_ID=B.STAFF_ID AND {1})
WHERE {2})", payDate, sqlWhereDate, sqlWhereStaff);
DataTable dtMonthStatistic = new Business.STAFF(_Transaction).ExecuteDataTable(sql);
#endregion
#region 计算员工薪资
//查询基础工资配置信息
Business.SALARYBASE _SALARYBASE = new Business.SALARYBASE(_Transaction);
_SALARYBASE.SALARYBASE_ID = 1;
bool isExist = _SALARYBASE.Select();
//工资系数模板
Business.SALARYTEMPLATE _SALARYTEMPLATE = new Business.SALARYTEMPLATE(_Transaction);
List list = _SALARYTEMPLATE.FillCollection("WHERE 1=1");
int STAFF_ID = 0;
for (int i = 0; i < dr.Length; i++)
{
STAFF_ID = dr[i]["STAFF_ID"].TryParseToInt();
int workDateYear = 0;
Business.STAFFSALARY _STAFFSALARY = new Business.STAFFSALARY(_Transaction);
#region 计算工资
_STAFFSALARY.STAFF_ID = STAFF_ID;
_STAFFSALARY.CURRENT_POSITION = dr[i]["CURRENT_POSITION"].TryParseToInt();
_STAFFSALARY.STAFF_RANK = dr[i]["STAFF_RANK"].TryParseToInt();
if (isExist)
{
//查询当前工资标识是否存在对应岗位薪资标准,若存在则绑定相应信息,否则初始化展示内容
#region 基本工资
double minimumSalary = _SALARYBASE.MINIMUM_SALARY.TryParseToDouble();
//第一学历系数模板(小于等于3,为本科及以下)
int staffEducation = dr[i]["FIRST_DEGREE"].TryParseToInt() >= 3 ? 3 : dr[i]["FIRST_DEGREE"].TryParseToInt();
Business.SALARYTEMPLATE educationTemplate = list.Where(o => o.SALARYTEMPLATE_TYPE == 1000 &&
o.SALARYTEMPLATE_VALUE == staffEducation).FirstOrDefault();
if (educationTemplate != null)
{
//员工学历对应的系数
double educationRatio = educationTemplate.SALARYTEMPLATE_RATIO.TryParseToDouble();
//基础工资:1700(需要可以手动调整)*系数(本科及以下:1.2 ,硕士:1.5 ,博士 2.0)
_STAFFSALARY.MINIMUM_SALARY = Math.Round(minimumSalary * educationRatio, 2);
}
#endregion
#region 职级系数模板
Business.SALARYTEMPLATE rankLevelTemplate = list.Where(o => o.SALARYTEMPLATE_TYPE == 2000 &&
o.SALARYTEMPLATE_VALUE == dr[i]["STAFF_RANK"].TryParseToInt()).FirstOrDefault();
if (rankLevelTemplate != null)
{
//职称工资
double baseSalary = _STAFFSALARY.MINIMUM_SALARY.TryParseToDouble();//基础工资
//职级工资:基础工资 * 系数
_STAFFSALARY.RANKLEVEL_SALARY = baseSalary * rankLevelTemplate.SALARYTEMPLATE_RATIO.TryParseToDouble();
}
#endregion
#region 工龄(工资/年)
workDateYear = dr[i]["WORKING_YEARS"].TryParseToInt();//工龄
_STAFFSALARY.SENIORITY_SALARY = _SALARYBASE.SENIORITY_SALARY.TryParseToDouble() * workDateYear;//工龄工资/年
#endregion
#region 职称工资模板
double skillLevelSalary = 0;
Business.SALARYTEMPLATE skillLevelTemplate = list.Where(o => o.SALARYTEMPLATE_TYPE == 5000 &&
o.SALARYTEMPLATE_VALUE == dr[i]["SKILL_GRADE"].TryParseToInt()).FirstOrDefault();
if (skillLevelTemplate != null)
{
//职称工资
skillLevelSalary = skillLevelTemplate.SALARYTEMPLATE_RATIO.TryParseToDouble();
}
#endregion
#region 学历工资模板
double educationSalary = 0;
Business.SALARYTEMPLATE educationSalaryTemp = list.Where(o => o.SALARYTEMPLATE_TYPE == 6000 &&
o.SALARYTEMPLATE_VALUE == dr[i]["HIGHEST_EDUCATION"].TryParseToInt()).FirstOrDefault();
if (educationSalaryTemp != null)
{
//学历工资
educationSalary = educationSalaryTemp.SALARYTEMPLATE_RATIO.TryParseToDouble();
}
//最高学历职称工资哪个高取哪个
_STAFFSALARY.SKILLLEVEL_SALARY = skillLevelSalary >= educationSalary ? skillLevelSalary : educationSalary;//学历职称工资
#endregion
#region 岗位工资系数模板
Business.SALARYTEMPLATE positionRatio = list.Where(o => o.SALARYTEMPLATE_TYPE == 4000 &&
o.SALARYTEMPLATE_VALUE == dr[i]["CURRENT_POSITION"].TryParseToInt()).FirstOrDefault();
if (positionRatio != null)
{
//岗位工资
_STAFFSALARY.POSITION_SALARY = PostCalculate(positionRatio.SALARYTEMPLATE_RATIO.TryParseToDouble());
}
#endregion
#region 代扣伙食费
//代扣伙食费根据实际出勤天数 * 每日伙食费
double DailyMealExpense = _SALARYBASE.MEAL_EXPENSE.TryParseToDouble();
int workDay = 0;
//查询出勤天数:CLOCKIN_RESULT,上班打卡结果(1000:正常考勤;2000:迟到;3000:未打卡))
sql = string.Format(@"
SELECT COUNT(0) WORKDAY FROM
PERSONNEL_STORAGE.T_WORKTIME A
WHERE
A.CLOCKIN_RESULT <> 3000 AND A.CLOCKOUT_RESULT <> 3000
AND STAFF_ID = {0}
AND TO_CHAR(A.CLOCK_DATE,'YYYY-MM') = '{1}'", STAFF_ID, payDate);
DataTable dtWork = _SALARYBASE.ExecuteDataTable(sql);
if (dtWork.Rows.Count > 0)
{
workDay = dtWork.Rows[0]["WORKDAY"].TryParseToInt();
}
_STAFFSALARY.MEAL_EXPENSE = DailyMealExpense * workDay;
#endregion
}
#region 月绩效
//string kpiLevel = "A";//默认A级
// //月绩效
//sql = string.Format(@"
//SELECT ASSESSMENT_LEVEL
//FROM PERSONNEL_STORAGE.T_ASSESSMENTSCORE A
//WHERE STAFF_ID = {0} AND
// TO_CHAR(A.ASSESSMENT_DATE,'YYYY-MM') = '{1}'", STAFF_ID, payDate);
//DataTable dtMonth = new Business.ASSESSMENTSCORE(_Transaction).ExecuteDataTable(sql);
//if (dtMonth.Rows.Count > 0)
//{
// kpiLevel = dtMonth.Rows[0]["ASSESSMENT_LEVEL"].ToString();
//}
//考核等级系数模板
//DataTable dtSalaryMonth = new Business.STAFF(_Transaction).ExecuteDataTable(@"
// SELECT A.SALARYTEMPLATE_RATIO FROM PERSONNEL_STORAGE.T_SALARYTEMPLATE A,
// PERSONNEL_STORAGE.T_KPILEVELSCORE B
// WHERE A.SALARYTEMPLATE_TYPE=3000 AND A.SALARYTEMPLATE_VALUE=B.KPILEVEL_VALUE AND
// B.KPILEVEL_NAME='" + kpiLevel + "'");
////Business.SALARYTEMPLATE _TEMPLATE = list.Where(o => o.SALARYTEMPLATE_TYPE == 3000 && o.SALARYTEMPLATE_NAME == kpiLevel).FirstOrDefault();
//if (dtSalaryMonth.Rows.Count > 0)
//{
//月绩效=岗位工资*考核等级系数
_STAFFSALARY.KPI_SALARY_MONTH = PerformanceCalculate(_STAFFSALARY.POSITION_SALARY.TryParseToDouble());
//}
#endregion
//固定工资(基础工资、职级工资、年工工资、学历职称工资)
double regularEarn = _STAFFSALARY.MINIMUM_SALARY.TryParseToDouble() + _STAFFSALARY.RANKLEVEL_SALARY.TryParseToDouble() +
_STAFFSALARY.SENIORITY_SALARY.TryParseToDouble() + _STAFFSALARY.SKILLLEVEL_SALARY.TryParseToDouble();
#region 女工卫生费
//性别1:男;2:女
if (dr[i]["STAFF_SEX"].ToString() == "2")
{
_STAFFSALARY.FEMALE_WORKERS_SALARY = 30.00;//女工卫生费30元
}
#endregion
#region 独生子女费
//是否独生子女:1是 0否
if (dr[i]["ISONLY_CHILD"].ToString() == "1")
{
_STAFFSALARY.ONLYCHILD_SALARY = 50.00;//独生子女50元
}
#endregion
#region 应扣工资
DataRow[] drMonth = dtMonthStatistic.Select("STAFF_ID=" + STAFF_ID);
if (drMonth.Length > 0)
{
//实际出勤少于应出勤天数时,无请假事项的,按旷工扣除全部岗位工资和月绩效工资
if (drMonth[0]["ABSENTEEISM_NUM"].TryParseToDouble() > 0)
{
_STAFFSALARY.DEDUCTION_SALARY = _STAFFSALARY.KPI_SALARY_MONTH + _STAFFSALARY.POSITION_SALARY.TryParseToDouble();
}
else
{
//事假
double personalLeave = ThirdParty.LeaveCalculate(regularEarn, _STAFFSALARY.KPI_SALARY_MONTH.TryParseToDouble(), _STAFFSALARY.POSITION_SALARY.TryParseToDouble(), 1,
drMonth[0]["PERSONAL_LEAVE"].TryParseToDouble(), workDateYear);
//病假
double sickLeave = ThirdParty.LeaveCalculate(regularEarn, _STAFFSALARY.KPI_SALARY_MONTH.TryParseToDouble(), _STAFFSALARY.POSITION_SALARY.TryParseToDouble(), 2,
drMonth[0]["SICK_LEAVE"].TryParseToDouble(), workDateYear);
_STAFFSALARY.DEDUCTION_SALARY = sickLeave + personalLeave;
}
}
#endregion
////值班费
//_STAFFSALARY.DUTY_FEE = 0;
#region 加班费
//固定工资(基础工资、职级工资、年工工资、学历职称工资)
if (drMonth.Length > 0)
{
_STAFFSALARY.OVERTIME_PAY = ThirdParty.OverTimeCalculate(regularEarn, 1, drMonth[0]["WORKDAY_OVERTIME"].TryParseToDouble()) +
ThirdParty.OverTimeCalculate(regularEarn, 2, drMonth[0]["WEEKEND_OVERTIME"].TryParseToDouble()) +
ThirdParty.OverTimeCalculate(regularEarn, 3, drMonth[0]["HOLIDAY_OVERTIME"].TryParseToDouble());
}
#endregion
//其他
//_STAFFSALARY.OTHER_PAY = 0;
//年绩效(女工卫生费+独生子女费+出车补助+值班费+加班工资)
_STAFFSALARY.KPI_SALARY_YEAR = _STAFFSALARY.FEMALE_WORKERS_SALARY.TryParseToDouble() +
_STAFFSALARY.ONLYCHILD_SALARY.TryParseToDouble() +
_STAFFSALARY.DRIVER_SUBSIDY.TryParseToDouble() +
_STAFFSALARY.DUTY_FEE.TryParseToDouble() +
_STAFFSALARY.OVERTIME_PAY.TryParseToDouble();
//应发工资
_STAFFSALARY.WAGES_PAYABLE = _STAFFSALARY.MINIMUM_SALARY.TryParseToDouble() +
_STAFFSALARY.RANKLEVEL_SALARY.TryParseToDouble() +
_STAFFSALARY.SENIORITY_SALARY.TryParseToDouble() +
_STAFFSALARY.SKILLLEVEL_SALARY.TryParseToDouble() +
_STAFFSALARY.POSITION_SALARY.TryParseToDouble() +
_STAFFSALARY.KPI_SALARY_MONTH.TryParseToDouble() +
_STAFFSALARY.KPI_SALARY_YEAR +
_STAFFSALARY.OTHER_PAY.TryParseToDouble() -
_STAFFSALARY.DEDUCTION_SALARY.TryParseToDouble();
////五险一金
//double socialInsurance = _STAFFSALARY.ENDOWMENT_INSURANCE.TryParseToDouble() + _STAFFSALARY.MEDICAL_INSURANCE.TryParseToDouble()
// + _STAFFSALARY.UNEMPLOYMENT_INSURANCE.TryParseToDouble() + _STAFFSALARY.HOUSING_PROVIDENT_FUND.TryParseToDouble();
//实发工资
_STAFFSALARY.FINAL_WAGES = _STAFFSALARY.WAGES_PAYABLE;//+socialInsurance
//实领工资
_STAFFSALARY.TAKE_WAGES = _STAFFSALARY.FINAL_WAGES - _STAFFSALARY.DEDUCTION_TAX.TryParseToDouble() - _STAFFSALARY.MEAL_EXPENSE.TryParseToDouble();
_STAFFSALARY.PAID_STATE = 0;//发放状态(0:未发放;1:已发放)
_STAFFSALARY.CREATE_STAFF_ID = CREATE_STAFF_ID.TryParseToInt();//创建人ID
_STAFFSALARY.CREATE_STAFF_NAME = staffName;//创建人名称
_STAFFSALARY.CREATE_DATE = now;//创建时间
//算薪时间-即计算几月份工资
_STAFFSALARY.PAID_DATE = (payDate + "-01").TryParseToDateTime();
//发放时间
_STAFFSALARY.UPDATE_DATE = (now.Day > 15 ? now.ToString("yyyy-MM") + "-15" : now.ToString("yyyy-MM-dd")).TryParseToDateTime();
_STAFFSALARY.Insert();
#endregion
}
#endregion
return true;
}
#endregion
#region 获取令牌
public static string GetServiceToken(string userKey)
{
LogUtil.WriteLog(null, "开始获取令牌", "同步用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
try
{
string ServiceToken = "";
System.Text.StringBuilder XmlString = new System.Text.StringBuilder();
XmlString.AppendLine($"");
XmlString.AppendLine($"{key}");
XmlString.AppendLine($"getServiceToken");
XmlString.AppendLine($"0");
XmlString.AppendLine($"{serviceKey}");
XmlString.AppendLine($"{verificationType}");
XmlString.AppendLine($"{userKey}");
XmlString.AppendLine($"{userKeyType}");
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
string time = Convert.ToInt64(ts.TotalMilliseconds).ToString();
XmlString.AppendLine($"");
XmlString.AppendLine($"{CommonHelper.Create32MD5(serviceKey + verificationType + userKey + userKeyType + time + "evo")}");
XmlString.AppendLine($"");
Hashtable ht = new Hashtable();
ht.Add("input", XmlString.ToString());
//ht.Add("cmd", "getServiceToken");
//ht.Add("domain", "0");
//ht.Add("serviceKey", serviceKey);
//ht.Add("verificationType", verificationType);
//ht.Add("userKey", userKey);
//ht.Add("userKeyType", userKeyType);
//ht.Add("time", time);
//ht.Add("md5key", CommonHelper.Create32MD5(serviceKey + verificationType + userKey + userKeyType + time + "evo"));
//LogUtil.WriteLog(null, "令牌获取:" + ServiceToken + ";返回值:" + WSHelper.InvokeWebService(sxWebServiceUrl, sxWebServiceMethod, new object[] { XmlString.ToString() }).ToString(),
// "同步用户信息" + DateTime.Now.ToString("yyyy-MM-dd")); ;
XmlDocument xml = WebServiceCaller.QuerySoapWebService(sxWebServiceUrl, sxWebServiceMethod, ht);
XmlNode node = xml.SelectSingleNode("/output");
string result = "0";
foreach (XmlNode child in node.ChildNodes)
{
if (child.Name == "message")
{
XmlNodeList element = ((XmlElement)child).GetElementsByTagName("result");
if (element.Count > 0)
{
result = element[0].InnerText;
}
if (result == "0")
break;
}
else if (child.Name == "data")
{
XmlNodeList element = ((XmlElement)child).GetElementsByTagName("ServiceToken");
if (element.Count > 0)
{
ServiceToken = element[0].InnerText;
}
}
}
LogUtil.WriteLog(null, "令牌获取成功:" + ServiceToken + ";返回值:" + xml.ToString(),
"同步用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
return ServiceToken;
}
catch (Exception ex)
{
//ex.InnerException.Data.
var stack = ex.StackTrace.Trim();
LogUtil.WriteLog(ex, "令牌获取失败:" + stack, "同步用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
return "";
}
}
#endregion
#region 添加用户信息时同步数据
public static bool SysDataAddUser(string STAFF_NAME, string STAFF_SEX,
string User_Passport, string User_PassWord, string ServiceToken = "")
{
try
{
string result = "0";
if (string.IsNullOrWhiteSpace(ServiceToken))
{
ServiceToken = GetServiceToken(User_Passport);
}
if (!string.IsNullOrWhiteSpace(ServiceToken))
{
#region 生成入参报文
System.Text.StringBuilder XmlString = new System.Text.StringBuilder();
XmlString.AppendLine($"");
XmlString.AppendLine($"{key}");
XmlString.AppendLine($"addUser");
XmlString.AppendLine($"0");
XmlString.AppendLine($"{ServiceToken}");
XmlString.AppendLine($"{serviceKey}");
XmlString.AppendLine($"{verificationType}");
XmlString.AppendLine($"{User_Passport}");
XmlString.AppendLine($"{userKeyType}");
XmlString.AppendLine($"{STAFF_NAME}");
XmlString.AppendLine($"");
XmlString.AppendLine($"{User_Passport}");
XmlString.AppendLine($"{User_PassWord}");
XmlString.AppendLine($"{STAFF_SEX}");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"{orgid}");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
#endregion
LogUtil.WriteLog(null, "RequestXml:" + XmlString, "同步用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
Hashtable ht = new Hashtable();
ht.Add("input", XmlString.ToString());
XmlDocument xml = WebServiceCaller.QuerySoapWebService(sxWebServiceUrl, sxWebServiceMethod, ht);
XmlNode node = xml.SelectSingleNode("/output");
foreach (XmlNode child in node.ChildNodes)
{
if (child.Name == "message")
{
XmlNodeList element = ((XmlElement)child).GetElementsByTagName("result");
if (element.Count > 0)
{
result = element[0].InnerText;
}
break;
}
}
LogUtil.WriteLog(null, "添加用户信息时同步数据结果:" + (result == "0" ? "失败" : "成功"),
"同步用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
}
return result == "0" ? false : true;
}
catch (Exception ex)
{
LogUtil.WriteLog(ex, "添加用户信息时同步数据失败", "同步用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
return false;
}
}
#endregion
#region 修改用户信息时同步数据
public static bool SysDataUpdateUser(string STAFF_NAME, string STAFF_SEX, string User_Passport, string User_PassWord, string User_Status)
{
try
{
string result = "0";
string ServiceToken = GetServiceToken(User_Passport);
#region 生成入参报文
System.Text.StringBuilder XmlString = new System.Text.StringBuilder();
XmlString.AppendLine($"");
XmlString.AppendLine($"{key}");
XmlString.AppendLine($"updateUser");
XmlString.AppendLine($"0");
XmlString.AppendLine($"{ServiceToken}");
XmlString.AppendLine($"{serviceKey}");
XmlString.AppendLine($"{verificationType}");
XmlString.AppendLine($"{User_Passport}");
XmlString.AppendLine($"{userKeyType}");
XmlString.AppendLine($"");
XmlString.AppendLine($"{STAFF_NAME}");
XmlString.AppendLine("");
XmlString.AppendLine($"{User_Passport}");
XmlString.AppendLine($"{User_PassWord}");
XmlString.AppendLine($"{STAFF_SEX}");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"{orgid}");//组织班子
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"{User_Status}");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
XmlString.AppendLine($"");
#endregion
LogUtil.WriteLog(null, "RequestXml:" + XmlString, "同步用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
if (!string.IsNullOrWhiteSpace(ServiceToken))
{
Hashtable ht = new Hashtable();
ht.Add("input", XmlString.ToString());
XmlDocument xml = WebServiceCaller.QuerySoapWebService(sxWebServiceUrl, sxWebServiceMethod, ht);
XmlNode node = xml.SelectSingleNode("/output");
foreach (XmlNode child in node.ChildNodes)
{
if (child.Name == "message")
{
XmlNodeList element = ((XmlElement)child).GetElementsByTagName("result");
if (element.Count > 0)
{
result = element[0].InnerText;
if (result == "0")
{
SysDataAddUser(STAFF_NAME, STAFF_SEX, User_Passport, User_PassWord, ServiceToken);
}
}
break;
}
}
LogUtil.WriteLog(null, "修改用户信息时同步数据结果:" + (result == "0" ? "失败" : "成功"),
"同步用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
}
return result == "0" ? false : true;
}
catch (Exception ex)
{
LogUtil.WriteLog(ex, "修改用户信息时同步数据失败", "同步用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
return false;
}
}
#endregion
#region 删除用户信息时同步数据
public static bool SysDataDeleteUser(string userKey)
{
try
{
string result = "0";
string ServiceToken = GetServiceToken(userKey);
if (!string.IsNullOrWhiteSpace(ServiceToken))
{
string id = SysDataGetUserID(userKey, ServiceToken);
if (id == "")
{
return false;
}
#region 生成入参报文
System.Text.StringBuilder XmlString = new System.Text.StringBuilder();
XmlString.AppendLine($"");
XmlString.AppendLine($"{key}");
XmlString.AppendLine($"deleteUserByUserId");
XmlString.AppendLine($"0");
XmlString.AppendLine($"{ServiceToken}");
XmlString.AppendLine($"{serviceKey}");
XmlString.AppendLine($"{verificationType}");
XmlString.AppendLine($"{userKey}");
XmlString.AppendLine($"{userKeyType}");
XmlString.AppendLine($"{id}");
XmlString.AppendLine($"");
#endregion
LogUtil.WriteLog(null, "RequestXml:" + XmlString, "删除用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
Hashtable ht = new Hashtable();
ht.Add("input", XmlString.ToString());
XmlDocument xml = WebServiceCaller.QuerySoapWebService(sxWebServiceUrl, sxWebServiceMethod, ht);
XmlNode node = xml.SelectSingleNode("/output");
foreach (XmlNode child in node.ChildNodes)
{
if (child.Name == "message")
{
XmlNodeList element = ((XmlElement)child).GetElementsByTagName("result");
if (element.Count > 0)
{
result = element[0].InnerText;
}
break;
}
}
LogUtil.WriteLog(null, "删除用户信息时同步数据结果:" + (result == "0" ? "失败" : "成功"),
"删除用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
}
return result == "0" ? false : true;
}
catch (Exception ex)
{
LogUtil.WriteLog(ex, "删除用户信息时同步数据失败", "删除用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
return false;
}
}
#endregion
#region 获取用户ID
public static string SysDataGetUserID(string userKey, string ServiceToken)
{
try
{
string id = "";
if (!string.IsNullOrWhiteSpace(ServiceToken))
{
#region 生成入参报文
System.Text.StringBuilder XmlString = new System.Text.StringBuilder();
XmlString.AppendLine($"");
XmlString.AppendLine($"{key}");
XmlString.AppendLine($"getUserInfoByUserAccounts");
XmlString.AppendLine($"0");
XmlString.AppendLine($"{ServiceToken}");
XmlString.AppendLine($"{serviceKey}");
XmlString.AppendLine($"{verificationType}");
XmlString.AppendLine($"{userKey}");
XmlString.AppendLine($"{userKeyType}");
XmlString.AppendLine($"{userKey}");
XmlString.AppendLine($"");
#endregion
LogUtil.WriteLog(null, "RequestXml:" + XmlString, "获取用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
if (!string.IsNullOrWhiteSpace(ServiceToken))
{
Hashtable ht = new Hashtable();
ht.Add("input", XmlString.ToString());
XmlDocument xml = WebServiceCaller.QuerySoapWebService(sxWebServiceUrl, sxWebServiceMethod, ht);
XmlNode node = xml.SelectSingleNode("/output");
foreach (XmlNode child in node.ChildNodes)
{
if (child.Name == "data")
{
XmlNodeList childElement = ((XmlElement)child).GetElementsByTagName("id");
if (childElement.Count > 0)
{
id = childElement[0].InnerText;
}
break;
}
}
LogUtil.WriteLog(null, "获取用户ID:" + id, "获取用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
}
}
return id;
}
catch (Exception ex)
{
LogUtil.WriteLog(ex, "获取用户ID失败", "获取用户信息" + DateTime.Now.ToString("yyyy-MM-dd"));
return "";
}
}
#endregion
}
}