private static void GetSeq(SalResult sr, SalaryResult item) { OleDbConnection conn = null; try { conn = new OleDbConnection(MyHelper.GetPsConnectionString()); conn.Open(); using (OleDbCommand cmd = conn.CreateCommand()) { cmd.CommandText = String.Format("SELECT B.SEQ_NBR AS DEPT_SEQ, A.COMPANY, A.C_GP_DEPT, A.SEQ_NBR AS EMP_SEQ FROM SYSADM.PS_C_GP_DEPT_EMP_C A left join SYSADM.PS_C_GP_DEPT B on A.Company = B.Company AND A.c_gp_dept = B.c_gp_dept where EMPLID='{0}' and a.effdt < date'{1}' and rownum=1 order by a.effdt desc", sr.员工编号, (new DateTime(sr.年度, sr.月份, 1)).AddMonths(1).ToString("yyyy-M-d")); OleDbDataReader rs = cmd.ExecuteReader(); if (rs.Read()) { CompanyInfo company = CompanyInfo.Get((string)rs["COMPANY"]); if (company != null) { item.财务公司 = company.公司名称; } item.财务部门 = (string)rs["C_GP_DEPT"]; item.财务部门序号 = Convert.ToInt32(rs["DEPT_SEQ"]); item.员工序号 = Convert.ToInt32(rs["EMP_SEQ"]); } rs.Close(); } } finally { if (conn != null) { conn.Close(); } } }
public static StringBuilder SychSalaryResult(string calRunId, string payGroup) { StringBuilder sb = new StringBuilder(); CalRunInfo calRun = CalRunInfo.Get(calRunId); if (calRun == null) { sb.Append(String.Format("指定的日历组({0})不存在,无法同步。", calRunId)); return(sb); } if (CheckCalRunFinalized(calRunId) == false) { sb.Append(String.Format("日历组({0})的上表工资计算未完成,不能同步。", calRunId)); return(sb); } List <SalResult> list = SalResult.GetList(calRunId, payGroup); //删除历史数据 SalaryAuditingResult.ClearAuditingResult(calRunId, payGroup); #region 保存PS系统的上表工资数据 foreach (SalResult sr in list) { if (!SychSalaryResult(sr)) { //删除历史数据 SalaryAuditingResult.ClearAuditingResult(calRunId, payGroup); sb.Append("同步工资结果失败:" + sr.ToString <SalResult>()); break; } } #endregion return(sb); }
//根据日历组获取所有工资项 public static List <SalResult> GetList(string calRunId, string payGroup) { List <SalResult> list = new List <SalResult>(); CalRunInfo calRun = CalRunInfo.Get(calRunId); if (calRun == null) { return(list); } OleDbConnection conn = new OleDbConnection(MyHelper.GetPsConnectionString()); using (conn) { OleDbDataReader rs = null; try { conn.Open(); using (OleDbCommand cmd = conn.CreateCommand()) { string payGroupCondition = ""; if (string.IsNullOrEmpty(payGroup) == false) { payGroupCondition = String.Format(" AND GP_PAYGROUP = '{0}'", payGroup); } cmd.CommandText = String.Format("SELECT B.NAME,A.* FROM SYSADM.PS_C_WA_PAY_RSLT A LEFT JOIN PS_PERSONAL_DATA B ON A.EMPLID=B.EMPLID WHERE CAL_RUN_ID='{0}' {1} ORDER BY A.EMPLID", calRunId, payGroupCondition); rs = cmd.ExecuteReader(); while (rs.Read()) { SalResult item = new SalResult(); #region 日历信息 item.日历组 = calRunId; item.期间 = calRun.期间; item.年度 = calRun.年度; item.月份 = calRun.月份; #endregion #region 员工信息 item.姓名 = MyHelper.RemoveNumber((string)rs["NAME"]); item.员工编号 = (string)rs["EMPLID"]; item.员工类型 = (string)rs["C_CHR027"]; EmpInfo empInfo = EmpInfo.员工表.Find(a => a.员工编号 == item.员工编号); if (empInfo != null) { item.身份证号 = empInfo.身份证号; item.财务公司 = empInfo.财务公司; item.财务部门 = empInfo.财务部门; item.财务部门序号 = empInfo.财务部门序号; item.员工序号 = empInfo.员工序号; item.银行账号 = empInfo.银行账号; item.帐户名称 = empInfo.帐户名称; } #endregion #region 所属机构 item.公司编号 = (string)rs["COMPANY"]; item.机构编号 = (string)rs["DEPTID"]; CompanyInfo company = CompanyInfo.Get(item.公司编号); if (company != null) { item.公司名称 = company.公司名称; } DeptInfo dept = DeptInfo.Get(item.机构编号); if (dept != null && dept.所在部门 != null) { item.部门编号 = dept.所在部门.部门编号; item.部门名称 = dept.所在部门.部门名称; } #endregion #region 薪酬体系 item.薪资组 = (string)rs["GP_PAYGROUP"]; item.薪资集合 = (string)rs["SETID_SALARY"]; item.薪酬体系编号 = (string)rs["SAL_ADMIN_PLAN"]; item.薪等编号 = (string)rs["GRADE"]; item.薪级编号 = Convert.ToString(rs["STEP"]); #endregion #region 职务数据 item.职务代码 = (string)rs["JOBCODE"]; //2018-9-10 职务等级以15号为界 //item.职务等级 = (string)rs["SUPV_LVL_ID"]; item.职务等级 = GetSupvLvlId(item.员工编号, item.年度, item.月份); item.职位编号 = (string)rs["POSITION_NBR"]; item.班别 = (string)rs["SHIFT"]; #endregion #region 出勤情况 item.企业排班天数 = Convert.ToDecimal(rs["C_AMT202"]); item.法定工作日天数 = Convert.ToDecimal(rs["C_AMT243"]); item.实际出勤天数 = Convert.ToDecimal(rs["C_AMT198"]); item.法定工作日出勤天数 = Convert.ToDecimal(rs["C_AMT199"]); item.法定节假日出勤天数 = Convert.ToDecimal(rs["C_AMT201"]); item.休息日出勤天数 = Convert.ToDecimal(rs["C_AMT203"]); item.月综合出勤天数 = Convert.ToDecimal(rs["C_AMT204"]); item.工作日延长出勤小时数 = Convert.ToDecimal(rs["C_AMT205"]); #endregion #region 出勤工资 item.法定工作日出勤工资 = Convert.ToDecimal(rs["C_AMT005"]); item.法定节假日出勤工资 = Convert.ToDecimal(rs["C_AMT006"]); item.休息日出勤工资 = Convert.ToDecimal(rs["C_AMT007"]); item.月综合出勤工资 = Convert.ToDecimal(rs["C_AMT009"]); item.工作日延长工作出勤工资 = Convert.ToDecimal(rs["C_AMT010"]); #endregion item.未休年休假工资 = Convert.ToDecimal(rs["C_AMT134"]); #region 社保缴纳 item.养老保险个人缴纳金额 = Convert.ToDecimal(rs["C_AMT170"]); item.医疗保险个人缴纳金额 = Convert.ToDecimal(rs["C_AMT171"]); item.失业保险个人缴纳金额 = Convert.ToDecimal(rs["C_AMT172"]); item.住房公积金个人缴纳金额 = Convert.ToDecimal(rs["C_AMT173"]); item.大病医疗个人缴纳金额 = Convert.ToDecimal(rs["C_AMT292"]); //社保合计 item.社保个人缴纳金额 = Convert.ToDecimal(rs["C_AMT258"]); item.社保公司缴纳金额 = Convert.ToDecimal(rs["C_AMT259"]); //补缴 2015.9.14 item.养老保险个人补缴金额 = Convert.ToDecimal(rs["C_AMT174"]); item.医疗保险个人补缴金额 = Convert.ToDecimal(rs["C_AMT175"]); item.失业保险个人补缴金额 = Convert.ToDecimal(rs["C_AMT176"]); item.住房公积金个人补缴金额 = Convert.ToDecimal(rs["C_AMT177"]); #endregion item.个人所得税金额 = Convert.ToDecimal(rs["C_AMT178"]); //C_AMT265 总的个税(含封闭工资) item.代垫费用 = Convert.ToDecimal(rs["C_AMT262"]); item.挂钩效益工资 = Convert.ToDecimal(rs["C_AMT136"]); item.其他所得 = Convert.ToDecimal(rs["C_AMT138"]); item.其他扣款 = Convert.ToDecimal(rs["C_AMT196"]); item.预留风险金 = Convert.ToDecimal(rs["C_AMT241"]); item.出勤工资 = Convert.ToDecimal(rs["C_AMT252"]); item.实得满勤奖 = Convert.ToDecimal(rs["C_AMT017"]); item.应得满勤奖 = Convert.ToDecimal(rs["C_AMT232"]); item.表工资 = Convert.ToDecimal(rs["C_AMT002"]); item.设定工资 = Convert.ToDecimal(rs["C_AMT003"]); item.基准工资 = Convert.ToDecimal(rs["C_AMT004"]); item.特殊社保的基准工资 = Convert.ToDecimal(rs["C_AMT278"]); item.基数等级与基准工资差额 = Convert.ToDecimal(rs["C_AMT011"]); //item.工资降级 = Convert.ToDecimal(rs["C_AMT008"]) - item.上表工资; //2015.5.20 封闭上表工资 - 上表工资 //2017.7.10 直接读取工资降级数据 item.工资降级 = PsHelper.GetPayDegrade(item.员工编号, calRun.开始日期); if (item.工资降级 < 0) { item.工资降级 = 0; //2015.9.24 } #region 累加器 item.出勤工资 = Convert.ToDecimal(rs["C_AMT252"]); item.津贴补助 = Convert.ToDecimal(rs["C_AMT253"]); item.综合考核工资 = Convert.ToDecimal(rs["C_AMT254"]); item.奖项 = Convert.ToDecimal(rs["C_AMT255"]); item.扣项 = Convert.ToDecimal(rs["C_AMT256"]); #endregion item.交通餐饮补助 = Convert.ToDecimal(rs["C_AMT248"]); item.应税工资额 = Convert.ToDecimal(rs["C_AMT260"]); //含年休假工资(260是不含年休假的工资总额) //即:合计应税工资额 = 应税工资额 + 年休假工资 item.合计应税工资额 = Convert.ToDecimal(rs["C_AMT261"]); item.表工资总额 = Convert.ToDecimal(rs["C_AMT257"]); item.实发工资总额 = Convert.ToDecimal(rs["C_AMT263"]); list.Add(item); } } } finally { if (rs != null) { rs.Close(); } conn.Close(); } } return(list); }
private static bool SychSalaryResult(SalResult sr) { try { SalaryResult item = AddSalaryResult(sr.员工编号, sr.年度, sr.月份); #region 日历信息 item.日历组 = sr.日历组; item.期间 = sr.期间; #endregion item.姓名 = sr.姓名; item.员工类型 = sr.员工类型; item.身份证号 = sr.身份证号; #region 所属机构 item.公司编号 = sr.公司编号; item.机构编号 = sr.机构编号; item.部门编号 = sr.部门编号; item.公司名称 = sr.公司名称; item.部门名称 = sr.部门名称; #endregion #region 财务信息 item.银行账号 = sr.银行账号; item.帐户名称 = sr.帐户名称; GetSeq(sr, item); #endregion #region 薪酬体系 item.薪资组 = sr.薪资组.Trim(); item.薪资集合 = sr.薪资集合; item.薪酬体系编号 = sr.薪酬体系编号; item.薪等编号 = sr.薪等编号; item.薪级编号 = sr.薪级编号; SalaryGrade grade = SalaryGrade.Get(item.薪资集合, item.薪酬体系编号, item.薪等编号, new DateTime(item.年度, item.月份, 1)); if (grade != null) { item.薪等名称 = grade.薪等名称; } PayGroup group = PayGroup.Get(item.薪资组); if (group != null) { item.薪资组名称 = group.中文名; } #endregion #region 职务数据 item.职务代码 = sr.职务代码; item.职务等级 = sr.职务等级; item.职位编号 = sr.职位编号; item.班别 = sr.班别; #endregion #region 出勤情况 item.企业排班天数 = sr.企业排班天数; item.法定工作日天数 = sr.法定工作日天数; item.实际出勤天数 = sr.实际出勤天数; item.法定工作日出勤天数 = sr.法定工作日出勤天数; item.法定节假日出勤天数 = sr.法定节假日出勤天数; item.休息日出勤天数 = sr.休息日出勤天数; item.月综合出勤天数 = sr.月综合出勤天数; item.工作日延长出勤小时数 = sr.工作日延长出勤小时数; #endregion #region 出勤工资 item.法定工作日出勤工资 = sr.法定工作日出勤工资; item.法定节假日出勤工资 = sr.法定节假日出勤工资; item.休息日出勤工资 = sr.休息日出勤工资; item.月综合出勤工资 = sr.月综合出勤工资; item.工作日延长工作出勤工资 = sr.工作日延长工作出勤工资; #endregion item.未休年休假工资 = sr.未休年休假工资; item.特殊社保的基准工资 = sr.特殊社保的基准工资; item.基数等级与基准工资差额 = sr.基数等级与基准工资差额; item.交通餐饮补助 = sr.交通餐饮补助; #region 社保缴纳 item.养老保险个人缴纳金额 = sr.养老保险个人缴纳金额; item.医疗保险个人缴纳金额 = sr.医疗保险个人缴纳金额; item.失业保险个人缴纳金额 = sr.失业保险个人缴纳金额; item.住房公积金个人缴纳金额 = sr.住房公积金个人缴纳金额; item.大病医疗个人缴纳金额 = sr.大病医疗个人缴纳金额; //社保合计 item.社保个人缴纳金额 = sr.社保个人缴纳金额; item.社保公司缴纳金额 = sr.社保公司缴纳金额; #endregion #region 累加器 item.出勤工资 = sr.出勤工资; item.津贴补助 = sr.津贴补助; item.综合考核工资 = sr.综合考核工资; item.奖项 = sr.奖项; item.扣项 = sr.扣项; #endregion #region 工资类别小计 item.挂钩效益工资 = sr.挂钩效益工资; item.其他所得 = sr.其他所得; item.其他扣款 = sr.其他扣款; item.预留风险金 = sr.预留风险金; item.实得满勤奖 = sr.实得满勤奖; item.应得满勤奖 = sr.应得满勤奖; item.表工资 = sr.表工资; item.设定工资 = sr.设定工资; item.基准工资 = sr.基准工资; item.工资降级 = sr.工资降级; item.代垫费用 = sr.代垫费用; item.个人所得税金额 = sr.个人所得税金额; item.表工资总额 = sr.表工资总额; item.应税工资额 = sr.应税工资额; item.合计应税工资额 = sr.合计应税工资额; item.实发工资总额 = sr.实发工资总额; #endregion item.工资职等 = GetGrade(item); item.次同步时间 = DateTime.Now; item.Save(); return(true); } catch (Exception e) { YiKang.Common.WriteToEventLog("同步工资失败:" + e.ToString()); return(false); } }