public MessageGroupOutput AddGroupMember(GroupMemberAddInput input) { // 先得到消息组 var existMessageGroup = _messageGroupRepo.FirstOrDefault(m => m.Id == input.MessageGroupId); if (existMessageGroup == null) { throw new UserFriendlyException("没有对应的消息组"); } // 之前的总人数 var beforeCount = existMessageGroup.Reporter.Count; // 要减去有messagegroupId 但是 hasgroup为false的总数 beforeCount = beforeCount - _reporterInfoRepo.Count(r => r.MessageGroup.Id == input.MessageGroupId && r.HasGroup == false); // 新进的组员 List <ReporterInfoTb> reporterList = new List <ReporterInfoTb>(); // 新的成员 var newMembers = new List <GroupMemberTb>(); var beforeMemberCount = 0; // 得到对应的上报人员 for (var i = 0; i < input.ReporterId.Count; i++) { // 判断此人是否在群组里 var flag = false; // 是否是之前组里的人员 var isBefore = false; foreach (var r in existMessageGroup.Reporter) { if (r.Id == input.ReporterId[i]) { // 如果在组里 并且有组hasGroup不为false if (r.HasGroup == true) { flag = true; break; } else { // 需要重新添加进组 flag = false; isBefore = true; break; } } } if (flag == true) { continue; } try { // 如果是之前组里有过的人员 if (isBefore == true) { var tempId = input.ReporterId[i]; var beforeReporter = _reporterInfoRepo.FirstOrDefault(r => r.Id == tempId); beforeReporter.HasGroup = true; _reporterInfoRepo.InsertOrUpdate(beforeReporter); // 添加到组员表中 var beforeMember = new GroupMemberTb() { MessageGroup = existMessageGroup, Reporter = beforeReporter, Type = 3 }; var id = _groupMemberRepo.InsertAndGetId(beforeMember); beforeMember.Id = id; newMembers.Add(beforeMember); beforeMemberCount++; } else // 如果在上一次的变更队伍后没加入过此队伍 { var tempId = input.ReporterId[i]; var tempReporter = _reporterInfoRepo.FirstOrDefault(r => r.Id == tempId); // 添加进组 reporterList.Add(tempReporter); tempReporter.HasGroup = true; _reporterInfoRepo.InsertOrUpdate(tempReporter); existMessageGroup.Reporter.Add(tempReporter); } } catch (Exception e) { throw new UserFriendlyException(e.ToString()); } } // 如果没有增加任何人 if (0 == (reporterList.Count + beforeMemberCount)) { throw new UserFriendlyException("没有增加任何队员"); } // 得到组员总数 existMessageGroup.GroupTotalNum = beforeCount + (reporterList.Count + beforeMemberCount); // 更新组 _messageGroupRepo.InsertOrUpdate(existMessageGroup); foreach (var r in reporterList) { var groupMember = new GroupMemberTb() { MessageGroup = existMessageGroup, Reporter = r, Type = 3 }; var id = _groupMemberRepo.InsertAndGetId(groupMember); groupMember.Id = id; newMembers.Add(groupMember); } var beforeMembers = _groupMemberRepo.GetAll().Where(g => g.MessageGroup.Id == existMessageGroup.Id).ToList(); beforeMembers.AddRange(newMembers); var outResult = new MessageGroupOutput() { CreateTime = existMessageGroup.CreateTime, GroupName = existMessageGroup.GroupName, GroupTotalNum = existMessageGroup.GroupTotalNum, Id = existMessageGroup.Id, Member = beforeMembers.MapTo <List <ReporterMemberOutput> >(), Photo = existMessageGroup.Photo, Remark = existMessageGroup.Remark, Type = existMessageGroup.Type, Disaster = existMessageGroup.Disaster.MapTo <List <MessageDisasterOutput> >() }; return(outResult); }
public MessageGroupOutput AddMessageGroup(MessageGroupAddInput input) { // 需要指定一个队长 var existReporter = _reporterInfoRepo.FirstOrDefault(r => r.Id == input.ReporterId); if (existReporter == null) { throw new UserFriendlyException("没有对应的上报人员"); } var newMessageGroup = new MessageGroupTb() { CreateTime = DateTime.Now, GroupName = input.GroupName, GroupTotalNum = 1, Remark = input.Remark, Type = input.Type }; try { List <ReporterInfoTb> _reporter = new List <ReporterInfoTb>(); _reporter.Add(existReporter); // 设置为有组了 existReporter.HasGroup = true; _reporterInfoRepo.InsertOrUpdate(existReporter); newMessageGroup.Reporter = _reporter; var id = _messageGroupRepo.InsertOrUpdateAndGetId(newMessageGroup); newMessageGroup.Id = id; var newGroupMember = new GroupMemberTb() { MessageGroup = newMessageGroup, Reporter = existReporter, Type = 1 }; id = _groupMemberRepo.InsertAndGetId(newGroupMember); newGroupMember.Id = id; var Members = new List <GroupMemberTb>(); // 把刚刚增加的成员添加进去 Members.Add(newGroupMember); var outResult = new MessageGroupOutput() { CreateTime = newMessageGroup.CreateTime, GroupName = newMessageGroup.GroupName, GroupTotalNum = newMessageGroup.GroupTotalNum, Id = newMessageGroup.Id, Member = Members.MapTo <List <ReporterMemberOutput> >(), Photo = newMessageGroup.Photo, Remark = newMessageGroup.Remark, Type = newMessageGroup.Type, Disaster = newMessageGroup.Disaster.MapTo <List <MessageDisasterOutput> >() }; return(outResult); } catch (Exception e) { throw new UserFriendlyException(e.ToString()); } }