2025-03-27 15:05:14 +08:00

871 lines
46 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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平台用户同步参数配置
/// <summary>
/// 山西OA平台用户同步地址
/// </summary>
protected static string sxWebServiceUrl = ConfigurationManager.AppSettings["sxWebServiceUrl"].ToString();
/// <summary>
/// 山西OA平台用户同步方法
/// </summary>
protected static string sxWebServiceMethod = ConfigurationManager.AppSettings["sxWebServiceMethod"].ToString();
/// <summary>
/// 山西OA平台用户同步安全认证标识
/// </summary>
protected static string key = "73D08BF08604E2B805166C45D323522E";//CommonHelper.Create32MD5("whir.2011");
/// <summary>
/// 山西OA平台用户同步serviceKey
/// </summary>
protected static string serviceKey = "evoserviceKey";
/// <summary>
/// 山西OA平台用户同步【验证类型0-不依赖OA帐号登入验证的系统1-依赖OA认证的登入系统默认0】
/// </summary>
protected static string verificationType = "0";
/// <summary>
/// 山西OA平台用户同步【标识userKey类型对应关系为:0-帐号1-userId 2-身份证号3-用户简码】
/// </summary>
protected static string userKeyType = "0";
/// <summary>
/// 山西OA平台用户同步组织ID
/// </summary>
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
/// <summary>
///
/// </summary>
/// <param name="radio">岗位薪资系数</param>
/// <returns></returns>
public static double PostCalculate(double radio)
{
double post_base = ConfigurationManager.AppSettings["Post_Base"].ToString().TryParseToDouble();
return Math.Round(radio * post_base, 2);
}
#endregion
#region
/// <summary>
/// 加班计算规则
/// </summary>
/// <param name="regularEarn">固定工资(基础工资、职级工资、年工工资、学历职称工资)</param>
/// <param name="type">加班类型1工作日 2双休日 3节假日 </param>
/// <param name="workTime">加班时间</param>
/// <returns></returns>
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
/// <summary>
///
/// </summary>
/// <param name="regularEarn">固定工资(基础工资、职级工资、年工工资、学历职称工资)</param>
/// <param name="performance">月绩效工资</param>
/// <param name="postSalary">岗位工资</param>
/// <param name="type">请假类型1事假 2病假</param>
/// <param name="leaveDay">请假时间</param>
/// <param name="workYear">工作年限</param>
/// <returns></returns>
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
/// <summary>
///
/// </summary>
/// <param name="postSalary">岗位工资</param>
/// <param name="ratio">月绩效系数</param>
/// <returns></returns>
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<Business.SALARYTEMPLATE> 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($"<input>");
XmlString.AppendLine($"<key>{key}</key>");
XmlString.AppendLine($"<cmd>getServiceToken</cmd>");
XmlString.AppendLine($"<domain>0</domain>");
XmlString.AppendLine($"<serviceKey>{serviceKey}</serviceKey>");
XmlString.AppendLine($"<verificationType>{verificationType}</verificationType>");
XmlString.AppendLine($"<userKey>{userKey}</userKey>");
XmlString.AppendLine($"<userKeyType>{userKeyType}</userKeyType>");
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
string time = Convert.ToInt64(ts.TotalMilliseconds).ToString();
XmlString.AppendLine($"<time>{time}</time>");
XmlString.AppendLine($"<md5key>{CommonHelper.Create32MD5(serviceKey + verificationType + userKey + userKeyType + time + "evo")}</md5key>");
XmlString.AppendLine($"</input>");
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($"<input>");
XmlString.AppendLine($"<key>{key}</key>");
XmlString.AppendLine($"<cmd>addUser</cmd>");
XmlString.AppendLine($"<domain>0</domain>");
XmlString.AppendLine($"<ServiceToken>{ServiceToken}</ServiceToken>");
XmlString.AppendLine($"<serviceKey>{serviceKey}</serviceKey>");
XmlString.AppendLine($"<verificationType>{verificationType}</verificationType>");
XmlString.AppendLine($"<userKey>{User_Passport}</userKey>");
XmlString.AppendLine($"<userKeyType>{userKeyType}</userKeyType>");
XmlString.AppendLine($"<name>{STAFF_NAME}</name>");
XmlString.AppendLine($"<englishname></englishname>");
XmlString.AppendLine($"<accounts>{User_Passport}</accounts>");
XmlString.AppendLine($"<password>{User_PassWord}</password>");
XmlString.AppendLine($"<sex>{STAFF_SEX}</sex>");
XmlString.AppendLine($"<empnumber></empnumber>");
XmlString.AppendLine($"<birthdate></birthdate>");
XmlString.AppendLine($"<email></email>");
XmlString.AppendLine($"<mobilephone></mobilephone>");
XmlString.AppendLine($"<orgid>{orgid}</orgid>");
XmlString.AppendLine($"<rightType></rightType>");
XmlString.AppendLine($"<orgserial></orgserial>");
XmlString.AppendLine($"<empIdCard></empIdCard>");
XmlString.AppendLine($"<empLeaderId></empLeaderId>");
XmlString.AppendLine($"<duty></duty>");
XmlString.AppendLine($"<mobileUserFlag></mobileUserFlag>");
XmlString.AppendLine($"<sidelineorg></sidelineorg>");
XmlString.AppendLine($"<empBusinessPhone></empBusinessPhone>");
XmlString.AppendLine($"<usersimplename></usersimplename>");
XmlString.AppendLine($"<dutyLevel></dutyLevel>");
XmlString.AppendLine($"<chargeLeaderAccounts></chargeLeaderAccounts>");
XmlString.AppendLine($"<deptLeaderAccounts></deptLeaderAccounts>");
XmlString.AppendLine($"<userisactive></userisactive>");
XmlString.AppendLine($"<empdisduty></empdisduty>");
XmlString.AppendLine($"</input>");
#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($"<input>");
XmlString.AppendLine($"<key>{key}</key>");
XmlString.AppendLine($"<cmd>updateUser</cmd>");
XmlString.AppendLine($"<domain>0</domain>");
XmlString.AppendLine($"<ServiceToken>{ServiceToken}</ServiceToken>");
XmlString.AppendLine($"<serviceKey>{serviceKey}</serviceKey>");
XmlString.AppendLine($"<verificationType>{verificationType}</verificationType>");
XmlString.AppendLine($"<userKey>{User_Passport}</userKey>");
XmlString.AppendLine($"<userKeyType>{userKeyType}</userKeyType>");
XmlString.AppendLine($"<id></id>");
XmlString.AppendLine($"<name>{STAFF_NAME}</name>");
XmlString.AppendLine("<englishname></englishname>");
XmlString.AppendLine($"<accounts>{User_Passport}</accounts>");
XmlString.AppendLine($"<password>{User_PassWord}</password>");
XmlString.AppendLine($"<sex>{STAFF_SEX}</sex>");
XmlString.AppendLine($"<empnumber></empnumber>");
XmlString.AppendLine($"<birthdate></birthdate>");
XmlString.AppendLine($"<email></email>");
XmlString.AppendLine($"<mobilephone></mobilephone>");
XmlString.AppendLine($"<orgid>{orgid}</orgid>");//组织班子
XmlString.AppendLine($"<orgserial></orgserial>");
XmlString.AppendLine($"<empIdCard></empIdCard>");
XmlString.AppendLine($"<empLeaderId></empLeaderId>");
XmlString.AppendLine($"<duty></duty>");
XmlString.AppendLine($"<mobileUserFlag></mobileUserFlag>");
XmlString.AppendLine($"<sidelineorg></sidelineorg>");
XmlString.AppendLine($"<empBusinessPhone></empBusinessPhone>");
XmlString.AppendLine($"<userisactive>{User_Status}</userisactive>");
XmlString.AppendLine($"<dutyLevel></dutyLevel>");
XmlString.AppendLine($"<chargeLeaderAccounts></chargeLeaderAccounts>");
XmlString.AppendLine($"<deptLeaderAccounts></deptLeaderAccounts>");
XmlString.AppendLine($"<userisactive></userisactive>");
XmlString.AppendLine($"<empdisduty></empdisduty>");
XmlString.AppendLine($"</input>");
#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($"<input>");
XmlString.AppendLine($"<key>{key}</key>");
XmlString.AppendLine($"<cmd>deleteUserByUserId</cmd>");
XmlString.AppendLine($"<domain>0</domain>");
XmlString.AppendLine($"<ServiceToken>{ServiceToken}</ServiceToken>");
XmlString.AppendLine($"<serviceKey>{serviceKey}</serviceKey>");
XmlString.AppendLine($"<verificationType>{verificationType}</verificationType>");
XmlString.AppendLine($"<userKey>{userKey}</userKey>");
XmlString.AppendLine($"<userKeyType>{userKeyType}</userKeyType>");
XmlString.AppendLine($"<id>{id}</id>");
XmlString.AppendLine($"</input>");
#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($"<input>");
XmlString.AppendLine($"<key>{key}</key>");
XmlString.AppendLine($"<cmd>getUserInfoByUserAccounts</cmd>");
XmlString.AppendLine($"<domain>0</domain>");
XmlString.AppendLine($"<ServiceToken>{ServiceToken}</ServiceToken>");
XmlString.AppendLine($"<serviceKey>{serviceKey}</serviceKey>");
XmlString.AppendLine($"<verificationType>{verificationType}</verificationType>");
XmlString.AppendLine($"<userKey>{userKey}</userKey>");
XmlString.AppendLine($"<userKeyType>{userKeyType}</userKeyType>");
XmlString.AppendLine($"<accounts>{userKey}</accounts>");
XmlString.AppendLine($"</input>");
#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
}
}