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 } }