예제 #1
0
        /// <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);
        }
예제 #2
0
 /// <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;
     }
 }
예제 #3
0
 private void UpdateKPIPoint(T_HR_KPIPOINT entType)
 {
     using (KPIPointBll bll = new KPIPointBll())
     {
         bll.UpdateKPIPoint(entType);
     }
 }
예제 #4
0
 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);
     }
 }
예제 #5
0
 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;
 }
예제 #6
0
 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;
 }
예제 #7
0
        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;
        }
예제 #8
0
        /// <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;
        }
예제 #9
0
 /// <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);
     }
 }
예제 #10
0
파일: KPIRecordBll.cs 프로젝트: jjg0519/OA
        /// <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);
        }
예제 #11
0
파일: KPIRecordBll.cs 프로젝트: jjg0519/OA
        /// <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);
            }
        }