public void AssessCalculate(string schemeUid) { DynamicParameters param = new DynamicParameters(); param.Add("PrmUid", schemeUid); string sql = $"select avg({nameof(PerfExaminer.Score)}) {nameof(PerfExaminer.Score)},{nameof(PerfExaminer.ObjectUid)},{nameof(PerfExaminer.AssessModel)},{nameof(PerfExaminer.Weights)} from PerfExaminer where {nameof(PerfExaminer.ProgramUid)}=@PrmUid and {nameof(PerfExaminer.Score)}>0 group by {nameof(PerfExaminer.ObjectUid)}, {nameof(PerfExaminer.AssessModel)},{nameof(PerfExaminer.Weights)}"; IEnumerable <PerfExaminer> examiners = _dbContext.Query <PerfExaminer>(sql, param); IEnumerable <PerfObject> objectives = _dbContext.QueryWhere <PerfObject>("ProgramUid=@PrmUid", param); if (examiners.Any()) { var examinerScores = examiners.GroupBy(e => e.ObjectUid); foreach (var escore in examinerScores) { var objective = objectives.FirstOrDefault(p => p.Fid == escore.Key); if (objective != null) { double score = 0.0; foreach (var es in escore) { score += (es.Score * es.Weights) / escore.Sum(e => e.Weights); } objective.Score = Math.Round(score, 2); } } _dbContext.UpdateBatchSql(objectives); } //修改考核方案状态为 成绩发布 PerfProgram prm = _dbContext.Get <PerfProgram>(schemeUid); prm.PrmStatus = PerfPrmStatus.Result; _dbContext.Update <PerfProgram>(prm); }
public void CopyScheme(string fid) { PerfProgram program = _dbContext.Get <PerfProgram>(fid); program.Id = -1; program.Fid = ""; program.PrmCode = "copy_" + program.PrmCode; program.PrmName = "copy_" + program.PrmName; program.PrmStatus = PerfPrmStatus.Init; program.CreateBy = ""; program.CreateDate = ""; program.CreateName = ""; program.UpdateBy = ""; program.UpdateDate = ""; program.UpdateName = ""; //拷贝方案 _dbContext.Insert(program); PerfProgram newPrm = program; DynamicParameters param = new DynamicParameters(); param.Add("PrmUid", fid); //获取指标分类 var kpiTypes = _dbContext.QueryWhere <PerfKPIType>("PerfProgram=@PrmUid", param); //获取指标 var kpis = _dbContext.QueryWhere <PerfKPIs>("ProgramUid=@PrmUid", param); kpiTypes.ToList().ForEach((k) => { //获取指标分类下的指标 string ktypeFid = k.Fid; k.Id = -1; k.Fid = ""; k.PerfProgram = newPrm.Fid; k.CreateBy = ""; k.CreateDate = ""; k.CreateName = ""; k.UpdateBy = ""; k.UpdateDate = ""; k.UpdateName = ""; //拷贝指标分类 _dbContext.Insert <PerfKPIType>(k); PerfKPIType newKpiType = k; var selKpis = kpis.Where(kpi => kpi.KpiType == ktypeFid); if (selKpis != null && selKpis.Any()) { selKpis.ToList().ForEach((kpi) => { kpi.Id = -1; kpi.Fid = ""; kpi.ProgramUid = newPrm.Fid; kpi.KpiType = newKpiType.Fid; kpi.CreateBy = ""; kpi.CreateDate = ""; kpi.CreateName = ""; kpi.UpdateBy = ""; kpi.UpdateDate = ""; kpi.UpdateName = ""; //复制指标 _dbContext.Insert <PerfKPIs>(kpi); }); } }); //复制考核对象 var objects = _dbContext.QueryWhere <PerfObject>("ProgramUid=@PrmUid", param); if (objects.Any()) { objects.ToList().ForEach((m) => { m.Id = -1; m.Fid = ""; m.ProgramUid = newPrm.Fid; m.CreateBy = ""; m.CreateDate = ""; m.CreateName = ""; m.UpdateBy = ""; m.UpdateDate = ""; m.UpdateName = ""; _dbContext.Insert <PerfObject>(m); }); } }