/// <summary> /// 期次作品互评分配 /// </summary> /// <param name="periodId"></param> /// <param name="resulDt"></param> public static void WorksAlloting(long periodId) { //long workscount = long.Parse(DAL.Works.GetWorksNumByPeriodID(periodId).Tables[0].Rows[0][0].ToString());//获取当前期次上传的作品数量,不包含样例作品 long allotNum = BLL.Period.SetallotNum(DAL.Works.GetWorksNumByPeriodID(periodId)); List <long?> dtWaitedUser = DAL.User.GetUserIdByPeriodId(periodId); //初始化数据表以保存待分配的用户ID if (dtWaitedUser.Count > 0) //确定本期次可以参与互评的人数 { for (int i = 0; i < dtWaitedUser.Count; i++) { long expertId = (long)dtWaitedUser[i]; List <CSVWorksForMe> vWorksForMe = DAL.Works.GetWorksForMeByPeriodId(periodId, expertId); long hasAlloted = vWorksForMe.Count; if (hasAlloted < allotNum) //获取该用户已经分配的作品数,若未满则继续分配,否则则跳过 { List <ContestDll.Works> dtWaitedWorks = DAL.Works.GetWorksToAllot(expertId, periodId, allotNum); // if (dtWaitedWorks.Count > 0) { string[] arrayWaitedWorks = DAL.Common.TableTostrArray(dtWaitedWorks); //待分配作品表转化为数组 long shortOf = allotNum - hasAlloted; //获取该用户还差需要分配的作品数 string[] arrayToAllot = DAL.Common.GetRandomsArray(shortOf, arrayWaitedWorks); for (int j = 0; j < arrayToAllot.Length; j++)//插入评分分配新纪录 { long worksId = long.Parse(arrayToAllot[j].ToString()); CSWorksExpertUser dr = new CSWorksExpertUser(); dr.WorksID = worksId; //作品ID dr.ExpertID = expertId; //评分用户ID dr.Flag = 1; long aaa = DAL.Works.InsertWorksComments(dr); //为作品分配计数+1,最后一次重置作品状态为2:已分配,评分中 ContestDll.Works dtAllotTimes = DAL.Works.GetWorksAllotTimesByWorsID(worksId); int allottimes = (int)dtAllotTimes.AllotTimes; ContestDll.Works drAllotTimes = dtAllotTimes; drAllotTimes.WorksID = worksId; drAllotTimes.AllotTimes = allottimes + 1; if (allottimes == allotNum - 1) { drAllotTimes.WorksState = 2; //最后一次分配,将作品状态置为2:作品评分中 } else { drAllotTimes.WorksState = (int)drAllotTimes.WorksState; //分配未完成,保持状态不变 } DAL.Works.UpdateWorksAllotTimes(drAllotTimes); } } } } } }
/// <summary> /// 加入新记录 /// </summary> /// <param name="dr"></param> /// <returns></returns> public static long InsertWorksComments(CSWorksExpertUser dr) { using (ContestEntities db = new ContestEntities()) { WorksComments dr1 = new WorksComments(); dr1.WorksID = dr.WorksID; dr1.UserID = dr.ExpertID; dr1.Flag = 1; db.WorksComments.Add(dr1); db.SaveChanges(); return(dr1.CommentsID); } }