/// <summary> /// 系统评分 /// </summary> /// <param name="point">KPI考核点</param> /// <param name="lastStepDate">上一步完成时间</param> /// <param name="stepDate">当前完成时间</param> /// <returns></returns> private int SystemScoring(T_HR_KPIPOINT point, DateTime lastStepDate, DateTime stepDate) { if (lastStepDate == null || lastStepDate < new System.DateTime(2010, 6, 30)) return 100; decimal? score; T_HR_SCORETYPE scoreType = point.T_HR_SCORETYPE; //计算完成当前步骤和上一步骤的时间差 TimeSpan ts1 = new TimeSpan(stepDate.Ticks); TimeSpan ts2 = new TimeSpan(lastStepDate.Ticks); TimeSpan ts = ts1.Subtract(ts2).Duration(); // 1s 冉龙军 ////计算完成的时间与预定时间的天数差值 //int finishDays = ts.Days - decimal.ToInt16(scoreType.INITIALPOINT.Value); ////延迟完成,计算扣分 //if (finishDays > 0) // score = scoreType.INITIALSCORE - scoreType.REDUCESCORE * (finishDays / scoreType.COUNTUNIT); ////提前完成,计算加分 //else if (finishDays < 0) // score = scoreType.INITIALSCORE + scoreType.ADDSCORE * (finishDays / scoreType.COUNTUNIT); //else // score = scoreType.INITIALSCORE; ////比较分数上下限 //if (score > scoreType.MAXSCORE) // score = scoreType.MAXSCORE; //else if (score < scoreType.MINSCORE) // score = scoreType.MINSCORE; //计算完成的时间与预定时间的天数差值 int finishDays = ts.Hours - decimal.ToInt16(scoreType.INITIALPOINT.Value); //延迟完成,计算扣分 if (finishDays > 0) if (scoreType.LATERUNIT > 0) { score = 100 - scoreType.REDUCESCORE * (System.Math.Abs(finishDays) / scoreType.LATERUNIT); } else { score = 100; } //提前完成,计算加分 else if (finishDays < 0) if (scoreType.COUNTUNIT > 0) { score = 100 + scoreType.ADDSCORE * (System.Math.Abs(finishDays) / scoreType.COUNTUNIT); } else { score = 100; } else score = 100; //比较分数上下限 if (score > (100 + scoreType.MAXSCORE)) score = 100 + scoreType.MAXSCORE; else if (score < (100 - scoreType.MINSCORE)) score = 100 - scoreType.MINSCORE; // 1e score = score ?? 0; return decimal.ToInt16(score.Value); }
/// <summary> /// 保存KPI明细记录信息 /// </summary> /// <param name="kpiPoint">KPI考核点</param> /// <param name="formCode">业务单号</param> /// <param name="flowID">流程单号</param> /// <param name="lastStepCode">考核步骤单号</param> /// <param name="AppraiseeID">被考核人</param> /// <param name="AppraiserID">考核人</param> /// <param name="score">得分</param> /// <param name="scoretype">考核类型:0、系统评分;1、手动评分;2、抽查打分。</param> private T_HR_KPIRECORD SaveKPIRecord(T_HR_KPIPOINT kpiPoint, string formCode, string flowID, string lastStepCode, string AppraiseeID, string AppraiserID, int score, int scoretype) { using (KPIRecordBll bll = new KPIRecordBll()) { T_HR_KPIRECORD record = bll.SaveKPIRecord(kpiPoint, formCode, flowID, lastStepCode, AppraiseeID, AppraiserID, score, scoretype); return record; } }
private void UpdateKPIPoint(T_HR_KPIPOINT entType) { using (KPIPointBll bll = new KPIPointBll()) { bll.UpdateKPIPoint(entType); } }
private void UpdateKPIPointAndRemind(T_HR_KPIPOINT entType, List<T_HR_KPIREMIND> addList, List<T_HR_KPIREMIND> updateList, List<T_HR_KPIREMIND> delList) { using (KPIPointBll bll = new KPIPointBll()) { bll.UpdateKPIPoint(entType, addList, updateList, delList); } }
public T_HR_KPIRECORD KPIManualScoreByKPIPoint(T_HR_KPIPOINT kpiPoint, string formCode, string flowID, string lastStepCode, string AppraiseeID, string AppraiserID, int score) { //判断是否有KPI点 // 1s 冉龙军 //if (kpiPoint != null) //{ // return SaveKPIRecord(kpiPoint, formCode, flowID, lastStepCode, AppraiseeID, AppraiserID, score, 1); //} if (kpiPoint != null) { return SaveKPIRecord(kpiPoint, formCode, flowID, lastStepCode, AppraiseeID, AppraiserID, score, 1); } // 1e return null; }
public T_HR_KPIRECORD KPIRandomScoreByKPIPoint(T_HR_KPIPOINT kpiPoint, string formCode, string flowID, string lastStepCode, string AppraiseeID, string AppraiserID, int score) { //判断是否有KPI点 if (kpiPoint != null) { return SaveKPIRecord(kpiPoint, formCode, flowID, lastStepCode, AppraiseeID, AppraiserID, score, 2); } return null; }
public int KPISystemScoreByKPIPoint(T_HR_KPIPOINT kpiPoint, string formCode, string flowID, string stepID, DateTime lastStepDate, DateTime stepDate, string AppraiseeID) { // 1s 冉龙军 //stepDate = System.DateTime.Now; // 1e int score = -1; //判断是否有KPI点 // 1s 冉龙军 //if (kpiPoint != null) //{ // score = SystemScoring(kpiPoint, lastStepDate, stepDate); // SaveKPIRecord(kpiPoint, formCode, flowID, stepID, AppraiseeID, AppraiseeID, score, 0); //} if (kpiPoint != null) { // stepDate 当前步骤完成时间(实际是审核完成后, 运行到此的时间, 会有一点误差) stepDate = System.DateTime.Now; score = SystemScoring(kpiPoint, lastStepDate, stepDate); SaveKPIRecord(kpiPoint, formCode, flowID, stepID, AppraiseeID, AppraiseeID, score, 0); } // 1e return score; }
/// <summary> /// 生产一个新的KPIType /// </summary> private void KPIPointFactory() { KPIPoint = new T_HR_KPIPOINT(); // 1s 冉龙军 //KPIPoint.T_HR_SCORETYPE = new T_HR_SCORETYPE(); //KPIPoint.T_HR_SCORETYPE.SCORETYPEID = Guid.NewGuid().ToString(); // 1e KPIPoint.KPIPOINTID = "-1"; KPIPoint.SYSTEMID = modelFlowRelation.COMPANYID;//公司ID KPIPoint.BUSINESSID = modelFlowRelation.MODELFLOWRELATIONID;//业务ID // 1s 冉龙军 //KPIPoint.FLOWID = modelFlowRelation.FLOW_FLOWDEFINE_T.FLOWCODE;//流程ID KPIPoint.FLOWID = modelFlowRelation.FLOW_MODELDEFINE_T.DESCRIPTION;//流程描述 // 1e KPIPoint.STEPID = stepname;//步骤ID KPIPoint.SUMTYPE = "0";//汇总类型是0:“流程”。 KPIPoint.CREATECOMPANYID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].CompanyID; KPIPoint.CREATEDEPARTMENTID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].DepartmentID; KPIPoint.CREATEPOSTID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].PostID; KPIPoint.OWNERCOMPANYID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].CompanyID; KPIPoint.OWNERDEPARTMENTID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].DepartmentID; KPIPoint.OWNERPOSTID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].PostID; KPIPoint.OWNERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; KPIPoint.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; KPIPoint.CREATEDATE = DateTime.Now; KPIPoint.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; KPIPoint.UPDATEDATE = DateTime.Now; }
/// <summary> /// 把KPI类型中的评分标准拷贝到KPI点中 /// </summary> /// <param name="kpiType">KPI类型</param> /// <param name="kpiPoint">KPI点</param> private void CopyScoreType(T_HR_KPITYPE kpiType, T_HR_KPIPOINT kpiPoint) { kpiPoint.T_HR_SCORETYPE.T_HR_RANDOMGROUP = kpiType.T_HR_SCORETYPE.T_HR_RANDOMGROUP; kpiPoint.T_HR_SCORETYPE.ISSYSTEMSCORE = kpiType.T_HR_SCORETYPE.ISSYSTEMSCORE; kpiPoint.T_HR_SCORETYPE.SYSTEMWEIGHT = kpiType.T_HR_SCORETYPE.SYSTEMWEIGHT; kpiPoint.T_HR_SCORETYPE.ISMANUALSCORE = kpiType.T_HR_SCORETYPE.ISMANUALSCORE; kpiPoint.T_HR_SCORETYPE.MANUALWEIGHT = kpiType.T_HR_SCORETYPE.MANUALWEIGHT; kpiPoint.T_HR_SCORETYPE.ISRANDOMSCORE = kpiType.T_HR_SCORETYPE.ISRANDOMSCORE; kpiPoint.T_HR_SCORETYPE.RANDOMWEIGHT = kpiType.T_HR_SCORETYPE.RANDOMWEIGHT; kpiPoint.T_HR_SCORETYPE.INITIALPOINT = kpiType.T_HR_SCORETYPE.INITIALPOINT; kpiPoint.T_HR_SCORETYPE.INITIALSCORE = kpiType.T_HR_SCORETYPE.INITIALSCORE; kpiPoint.T_HR_SCORETYPE.COUNTUNIT = kpiType.T_HR_SCORETYPE.COUNTUNIT; // 1s 冉龙军 kpiPoint.T_HR_SCORETYPE.LATERUNIT = kpiType.T_HR_SCORETYPE.LATERUNIT; // 1e kpiPoint.T_HR_SCORETYPE.ADDSCORE = kpiType.T_HR_SCORETYPE.ADDSCORE; kpiPoint.T_HR_SCORETYPE.REDUCESCORE = kpiType.T_HR_SCORETYPE.REDUCESCORE; kpiPoint.T_HR_SCORETYPE.MAXSCORE = kpiType.T_HR_SCORETYPE.MAXSCORE; kpiPoint.T_HR_SCORETYPE.MINSCORE = kpiType.T_HR_SCORETYPE.MINSCORE; if (kpiPoint.T_HR_SCORETYPE.T_HR_KPIREMIND == null) kpiPoint.T_HR_SCORETYPE.T_HR_KPIREMIND = new ObservableCollection<T_HR_KPIREMIND>(); else kpiPoint.T_HR_SCORETYPE.T_HR_KPIREMIND.Clear(); foreach (T_HR_KPIREMIND remind in kpiType.T_HR_SCORETYPE.T_HR_KPIREMIND) { remind.REMINDID = Guid.NewGuid().ToString(); kpiPoint.T_HR_SCORETYPE.T_HR_KPIREMIND.Add(remind); } }
/// <summary> /// 新建KPIRecord,并初始化 /// </summary> /// <param name="formCode"></param> /// <param name="flowID"></param> /// <param name="stepID"></param> /// <param name="kpiPoint"></param> /// <returns></returns> private T_HR_KPIRECORD InitialKPIRecord(string formCode, string flowID, string stepID, T_HR_KPIPOINT kpiPoint) { T_HR_KPIRECORD record = new T_HR_KPIRECORD(); record.KPIRECORDID = Guid.NewGuid().ToString(); record.T_HR_KPIPOINT = kpiPoint; record.BUSINESSCODE = formCode; record.FLOWRECORDCODE = flowID; record.STEPDETAILCODE = stepID; record.SYSTEMWEIGHT = kpiPoint.T_HR_SCORETYPE.SYSTEMWEIGHT; record.MANUALWEIGHT = kpiPoint.T_HR_SCORETYPE.MANUALWEIGHT; record.RANDOMWEIGHT = kpiPoint.T_HR_SCORETYPE.RANDOMWEIGHT; record.UPDATEDATE = System.DateTime.Now; return(record); }
/// <summary> /// 绩效控件手动打分,并返回结果 /// </summary> /// <param name="kpiPoint"></param> /// <param name="formCode"></param> /// <param name="flowID"></param> /// <param name="lastStepCode"></param> /// <param name="AppraiseeID"></param> /// <param name="AppraiserID"></param> /// <param name="score"></param> /// <param name="scoretype"></param> /// <returns></returns> public T_HR_KPIRECORD SaveKPIRecord(T_HR_KPIPOINT kpiPoint, string formCode, string flowID, string lastStepCode, string AppraiseeID, string AppraiserID, int score, int scoretype) { try { bool isAdd = false; //判断是否为添加的标示。 // 1s 冉龙军 // 改stepID为stepCode(当流程中有重复的步骤时,此方法不可取) //T_HR_KPIRECORD record = GetKPIRecord(formCode, flowID, lastStepCode); T_HR_KPIRECORD record = GetKPIRecord(formCode, flowID, kpiPoint.STEPID); // 1e if (record == null) { isAdd = true; record = InitialKPIRecord(formCode, flowID, lastStepCode, kpiPoint); } // 1s 冉龙军 else { if (record.OWNERCOMPANYID != null && record.OWNERDEPARTMENTID != null && record.OWNERPOSTID != null && record.OWNERID != null) { } else { if (string.IsNullOrEmpty(AppraiseeID)) { } else { // 绩效所有者 using (EmployeeBLL kpiDetailEmployeeBLL = new EmployeeBLL()) { V_EMPLOYEEPOST kpiDetailRecord = kpiDetailEmployeeBLL.GetEmployeeDetailByID(AppraiseeID); if (kpiDetailRecord != null && kpiDetailRecord.EMPLOYEEPOSTS[0] != null && kpiDetailRecord.EMPLOYEEPOSTS[0].T_HR_POST != null && kpiDetailRecord.EMPLOYEEPOSTS[0].T_HR_POST.T_HR_DEPARTMENT != null && kpiDetailRecord.EMPLOYEEPOSTS[0].T_HR_POST.T_HR_DEPARTMENT.T_HR_COMPANY != null) { record.OWNERCOMPANYID = kpiDetailRecord.EMPLOYEEPOSTS[0].T_HR_POST.T_HR_DEPARTMENT.T_HR_COMPANY.COMPANYID; record.OWNERDEPARTMENTID = kpiDetailRecord.EMPLOYEEPOSTS[0].T_HR_POST.T_HR_DEPARTMENT.DEPARTMENTID; record.OWNERPOSTID = kpiDetailRecord.EMPLOYEEPOSTS[0].T_HR_POST.POSTID; record.OWNERID = AppraiseeID; record.CREATEUSERID = AppraiseeID; } } } } } // 1e switch (scoretype) { //系统评分 case 0: record.SYSTEMSCORE = score; record.APPRAISEEID = AppraiseeID; record.UPDATEUSERID = AppraiseeID; break; //手动评分 case 1: record.MANUALSCORE = score; record.APPRAISEEID = AppraiseeID; record.APPRAISERID = AppraiserID; record.UPDATEUSERID = AppraiserID; break; //抽查评分 case 2: record.RANDOMSCORE = score; record.APPRAISEEID = AppraiseeID; record.RANDOMPERSONID = AppraiserID; record.UPDATEUSERID = AppraiserID; break; // 1s 冉龙军 //抽查评分 case 3: record.RANDOMPERSONID = AppraiserID; break; // 1e } //判断打分是否已经全部打完 // 1s 冉龙军 //if ((kpiPoint.T_HR_SCORETYPE.ISSYSTEMSCORE.Trim() == "0" || record.SYSTEMSCORE != null) //不需要机打,或者已经打过 // && (kpiPoint.T_HR_SCORETYPE.ISMANUALSCORE.Trim() == "0" || record.MANUALSCORE != null) //不需要人打,或者已经打过 // && (kpiPoint.T_HR_SCORETYPE.ISRANDOMSCORE.Trim() == "0" || record.RANDOMSCORE != null)) //不需要抽查,或者已经打过 //{ // record.SUMSCORE = CulcalateScore(record); //} #region 全部打完才出总分 //if (kpiPoint != null && kpiPoint.T_HR_SCORETYPE != null) //{ // if ((kpiPoint.T_HR_SCORETYPE.ISSYSTEMSCORE.Trim() == "0" || record.SYSTEMSCORE != null) //不需要机打,或者已经打过 // && (kpiPoint.T_HR_SCORETYPE.ISMANUALSCORE.Trim() == "0" || record.MANUALSCORE != null) // //不需要人打,或者已经打过 // && (kpiPoint.T_HR_SCORETYPE.ISRANDOMSCORE.Trim() == "0" || record.RANDOMSCORE != null)) // //不需要抽查,或者已经打过 // { // record.SUMSCORE = CulcalateScore(record); // } //} #endregion // 计算总分 record.SUMSCORE = CulcalateScore(record); // 1e KPIRecordBll bll = new KPIRecordBll(); record.UPDATEDATE = System.DateTime.Now; //修改时间 if (isAdd) { bll.KPIRecordAdd(record); //添加KPI明细记录 } else { bll.KPIRecordUpdate(record); //修改KPI明细记录 } SumPerformanceBll bllSumPerf = new SumPerformanceBll(); bllSumPerf.SaveMyRecordByKPIRd(record); return(record); } catch (Exception ex) { Utility.SaveLog("绩效控件执行手动打分出错,出错原因:" + ex.ToString()); return(null); } }