using Dapper; using Learun.Application.TwoDevelopment.EducationalAdministration; using Learun.DataBase.Repository; using Learun.Util; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace Learun.Application.TwoDevelopment.LogisticsManagement { /// /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园 /// Copyright (c) 2013-2018 北京泉江科技有限公司 /// 创 建:超级管理员 /// 日 期:2019-04-26 15:02 /// 描 述:学生宿舍管理 /// public class AccommodationService : RepositoryFactory { #region 获取数据 /// /// 获取页面显示列表数据 /// /// 查询参数 /// public IEnumerable GetPageList(Pagination pagination, string queryJson) { try { var strSql = new StringBuilder(); strSql.Append("SELECT "); strSql.Append(@" t.ID, t.Name, t.Address, t.Campus, t.Dept, t.BuildType, t.Major, t.Class, t.Sex, t.Functionary, t.Phone, t.Price, t.Leader, t.StudentID, t.PlanStudentID, t.ParentID, t.Remark, t.Starred, t.HasToilet,t.RoomType, t.ApartmentId,t.UnitId,t.FloorId,t.CheckInStu, a.name as ApartmentName,b.name as UnitName,c.Name as FloorName "); strSql.Append(" FROM Acc_DormitoryBuild t "); strSql.Append(@" left join (select * FROM Acc_DormitoryBuild where BuildType='1') a on t.ApartmentId=a.ID left join(select * FROM Acc_DormitoryBuild where BuildType = '2') b on t.UnitId = b.ID left join(select * FROM Acc_DormitoryBuild where BuildType = '3') c on t.FloorId = c.ID "); strSql.Append(" WHERE 1=1 "); var queryParam = queryJson.ToJObject(); // 虚拟参数 var dp = new DynamicParameters(new { }); if (!queryParam["ParentID"].IsEmpty()) { dp.Add("ParentID", queryParam["ParentID"].ToString(), DbType.String); strSql.Append(" AND t.ParentID =@ParentID "); } //else //{ // strSql.Append(" AND t.BuildType ='4' "); //} if (!queryParam["ApartmentId"].IsEmpty()) { dp.Add("ApartmentId", queryParam["ApartmentId"].ToString(), DbType.String); strSql.Append(" AND t.ApartmentId =@ApartmentId "); } if (!queryParam["UnitId"].IsEmpty()) { dp.Add("UnitId", queryParam["UnitId"].ToString(), DbType.String); strSql.Append(" AND t.UnitId =@UnitId "); } if (!queryParam["FloorId"].IsEmpty()) { dp.Add("FloorId", queryParam["FloorId"].ToString(), DbType.String); strSql.Append(" AND t.FloorId =@FloorId "); } if (!queryParam["Name"].IsEmpty()) { dp.Add("Name", "%" + queryParam["Name"].ToString() + "%", DbType.String); strSql.Append(" AND t.Name Like @Name "); } if (!queryParam["Campus"].IsEmpty()) { dp.Add("Campus", "%" + queryParam["Campus"].ToString() + "%", DbType.String); strSql.Append(" AND t.Campus Like @Campus "); } if (!queryParam["Dept"].IsEmpty()) { dp.Add("Dept", queryParam["Dept"].ToString(), DbType.String); strSql.Append(" AND t.Dept=@Dept "); } if (!queryParam["Class"].IsEmpty()) { dp.Add("Class", queryParam["Class"].ToString(), DbType.String); strSql.Append(" AND t.Class=@Class "); } if (!queryParam["Major"].IsEmpty()) { dp.Add("Major", queryParam["Major"].ToString(), DbType.String); strSql.Append(" AND t.Major=@Major "); } if (!queryParam["Sex"].IsEmpty()) { dp.Add("Sex", queryParam["Sex"].ToString(), DbType.String); strSql.Append(" AND t.Sex = @Sex "); } if (!queryParam["Functionary"].IsEmpty()) { dp.Add("Functionary", "%" + queryParam["Functionary"].ToString() + "%", DbType.String); strSql.Append(" AND t.Functionary Like @Functionary "); } if (!queryParam["Leader"].IsEmpty()) { dp.Add("Leader", "%" + queryParam["Leader"].ToString() + "%", DbType.String); strSql.Append(" AND t.Leader Like @Leader "); } if (!queryParam["NoDistribution"].IsEmpty()) { var noDistribution = queryParam["NoDistribution"].ToString(); if (noDistribution.Contains("dept")) { strSql.Append(" AND (t.Dept is null or len(t.Dept)=0) "); } if (noDistribution.Contains("major")) { strSql.Append(" AND (t.Major is null or len(t.Major)=0) "); } if (noDistribution.Contains("class")) { strSql.Append(" AND (t.Class is null or len(t.Class)=0) "); } if (noDistribution.Contains("room")) { strSql.Append(" AND (t.CheckInStu is null or len(t.CheckInStu)=0 or t.CheckInStu=0) "); } } if (!queryParam["Distribution"].IsEmpty()) { var distribution = queryParam["Distribution"].ToString(); if (distribution.Contains("dept")) { strSql.Append(" AND len(t.Dept)>0 "); } if (distribution.Contains("major")) { strSql.Append(" AND len(t.Major)>0 "); } if (distribution.Contains("class")) { strSql.Append(" AND len(t.Class)>0 "); } if (distribution.Contains("room")) { strSql.Append(" AND t.CheckInStu>0 "); } } if (!queryParam["SqlParameter"].IsEmpty()) { strSql.Append(queryParam["SqlParameter"].ToString()); } return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination).OrderBy(a => a.Name).ThenBy(a => a.Name).ToList(); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } public IEnumerable GetBedListByRoomId(string RoomId) { try { string sql = $"select ID,Name,DNo,StudentID from Acc_DormitoryBuild where BuildType='5' and ParentID='{RoomId}'"; return this.BaseRepository("CollegeMIS").FindList(sql); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } public IEnumerable GetAllList() { try { return this.BaseRepository("CollegeMIS").FindList(); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } public IEnumerable GetClassifyList(Pagination pagination, string queryJson) { try { var strSql = new StringBuilder(); strSql.Append("SELECT "); strSql.Append(@" t.ID, t.Name, t.Address, t.Campus, t.Dept, t.BuildType, t.Major, t.Class, t.Sex, t.Functionary, t.Phone, t.Price, t.Leader, t.StudentID, t.PlanStudentID, t.ParentID, t.Remark, t.Starred, t.HasToilet,t.RoomType, t.ApartmentId,t.UnitId,t.FloorId,t.CheckInStu, a.name as ApartmentName,b.name as UnitName,c.Name as FloorName "); strSql.Append(" FROM Acc_DormitoryBuild t "); strSql.Append(@" left join (select * FROM Acc_DormitoryBuild where BuildType='1') a on t.ApartmentId=a.ID left join(select * FROM Acc_DormitoryBuild where BuildType = '2') b on t.UnitId = b.ID left join(select * FROM Acc_DormitoryBuild where BuildType = '3') c on t.FloorId = c.ID "); strSql.Append(" WHERE 1=1 and (t.BuildType<>'5' and t.BuildType<>'4') "); var queryParam = queryJson.ToJObject(); // 虚拟参数 var dp = new DynamicParameters(new { }); if (!queryParam["ParentID"].IsEmpty()) { dp.Add("ParentID", queryParam["ParentID"].ToString(), DbType.String); strSql.Append(" AND t.ParentID =@ParentID "); } if (!queryParam["keyword"].IsEmpty()) { strSql.Append($" AND t.Name like '%{queryParam["keyword"].ToString()}%' "); } if (!queryParam["ApartmentId"].IsEmpty()) { dp.Add("ApartmentId", queryParam["ApartmentId"].ToString(), DbType.String); strSql.Append(" AND t.ApartmentId =@ApartmentId "); } if (!queryParam["UnitId"].IsEmpty()) { dp.Add("UnitId", queryParam["UnitId"].ToString(), DbType.String); strSql.Append(" AND t.UnitId =@UnitId "); } if (!queryParam["FloorId"].IsEmpty()) { dp.Add("FloorId", queryParam["FloorId"].ToString(), DbType.String); strSql.Append(" AND t.FloorId =@FloorId "); } if (!queryParam["Name"].IsEmpty()) { dp.Add("Name", "%" + queryParam["Name"].ToString() + "%", DbType.String); strSql.Append(" AND t.Name Like @Name "); } return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp).ToList(); //return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination).ToList(); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } internal string GetBuildType(string parentID) { try { var entity = this.BaseRepository("CollegeMIS").FindEntity(a => a.ID == parentID); if (null != entity) { return entity.BuildType; } else { return ""; } } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowBusinessException(ex); } } } public string GetParentBuildType(string keyValue) { try { string sql = $@" select BuildType from [dbo].[Acc_DormitoryBuild] where Id=( select parentid from [dbo].[Acc_DormitoryBuild] where id='{keyValue}')"; var data = this.BaseRepository("CollegeMIS").FindObject(sql); if (data == null) { return ""; } else { return data.ToString(); } } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowBusinessException(ex); } } } internal object GetRoomList(string parentID) { try { var data = this.BaseRepository("CollegeMIS").FindList(); var floor = data.FirstOrDefault(a => a.ID == parentID); var unit = data.FirstOrDefault(a => a.ID == floor.ParentID); var dormitory = data.FirstOrDefault(a => a.ID == unit.ParentID); var rooms = data.Where(a => a.ParentID == parentID) .OrderBy(a => a.Name); List list = new List(); foreach (var room in rooms) { var hasStudentsNum = 0; var bedsNum = 0; var beds = data.Where(a => a.ParentID == room.ID).ToList(); bedsNum = beds.Count; foreach (var bed in beds) { if (!string.IsNullOrEmpty(bed.StudentID)) { hasStudentsNum++; } } floorsInfo floorinfo = new floorsInfo(); floorinfo.dormitory = room; floorinfo.BedNum = bedsNum.ToString(); floorinfo.HasStudentNum = hasStudentsNum.ToString(); floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString(); list.Add(floorinfo); } return new { dormitoryName = dormitory.Name, dormitoryID = dormitory.ID, unitName = unit.Name, unitID = unit.ID, floorName = floor.Name, floorID = floor.ID, rows = list }; } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowBusinessException(ex); } } } internal object GetFloorList(string parentID) { try { var data = this.BaseRepository("CollegeMIS").FindList(); var unit = data.FirstOrDefault(a => a.ID == parentID); var dormitory = data.FirstOrDefault(a => a.ID == unit.ParentID); var floors = data.Where(a => a.ParentID == parentID).OrderBy(a => a.Name).ToList(); List list = new List(); foreach (var floor in floors) { var rooms = data.Where(a => a.ParentID == floor.ID).ToList(); var bedsNum = 0; var hasStudentsNum = 0; foreach (var room in rooms) { var beds = data.Where(a => a.ParentID == room.ID).ToList(); foreach (var bed in beds) { bedsNum++; if (!string.IsNullOrEmpty(bed.StudentID)) { hasStudentsNum++; } } } floorsInfo floorinfo = new floorsInfo(); floorinfo.dormitory = floor; floorinfo.RoomNum = rooms.Count.ToString(); floorinfo.BedNum = bedsNum.ToString(); floorinfo.HasStudentNum = hasStudentsNum.ToString(); floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString(); list.Add(floorinfo); } return new { dormitoryName = dormitory.Name, dormitoryID = dormitory.ID, unitName = unit.Name, unitID = unit.ID, rows = list }; } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowBusinessException(ex); } } } internal object GetUnitList(string ParentID) { try { var data = this.BaseRepository("CollegeMIS").FindList(); var dormitory = data.FirstOrDefault(a => a.ID == ParentID); var Units = data.Where(a => a.ParentID == ParentID).ToList().OrderBy(a => a.Name).ToList(); List list = new List(); foreach (var unit in Units) { var floors = data.Where(a => a.ParentID == unit.ID).ToList(); var roomsNum = 0; var bedsNum = 0; var hasStudentsNum = 0; foreach (var floor in floors) { var rooms = data.Where(a => a.ParentID == floor.ID).ToList(); roomsNum = roomsNum + rooms.Count; foreach (var room in rooms) { var beds = data.Where(a => a.ParentID == room.ID).ToList(); foreach (var bed in beds) { bedsNum++; if (!string.IsNullOrEmpty(bed.StudentID)) { hasStudentsNum++; } } } } floorsInfo floorinfo = new floorsInfo(); floorinfo.dormitory = unit; floorinfo.floorNum = floors.Count.ToString(); floorinfo.BedNum = bedsNum.ToString(); floorinfo.HasStudentNum = hasStudentsNum.ToString(); floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString(); floorinfo.RoomNum = roomsNum.ToString(); list.Add(floorinfo); } return new { rows = list, DormitoryName = dormitory.Name, DormitoryID = dormitory.ID }; } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowBusinessException(ex); } } } public object GetDormitoryList() { try { var data = this.BaseRepository("CollegeMIS").FindList(); var dormitorys = data.Where(a => a.BuildType == "1").ToList().OrderBy(a => a.Name).ToList(); List list = new List(); foreach (var dormitory in dormitorys) { var units = data.Where(a => a.ParentID == dormitory.ID).ToList(); var roomsNum = 0; var bedsNum = 0; var hasStudentsNum = 0; foreach (var unit in units) { var floors = data.Where(a => a.ParentID == unit.ID).ToList(); foreach (var floor in floors) { var rooms = data.Where(a => a.ParentID == floor.ID).ToList(); roomsNum = roomsNum + rooms.Count; foreach (var room in rooms) { var beds = data.Where(a => a.ParentID == room.ID).ToList(); foreach (var bed in beds) { bedsNum++; if (!string.IsNullOrEmpty(bed.StudentID)) { hasStudentsNum++; } } } } } floorsInfo floorinfo = new floorsInfo(); floorinfo.dormitory = dormitory; floorinfo.UnitNum = units.Count.ToString(); if (units.Count > 0) { floorinfo.floorNum = data.Count(a => a.ParentID == units.FirstOrDefault().ID).ToString(); } else { floorinfo.floorNum = "0"; } floorinfo.BedNum = bedsNum.ToString(); floorinfo.HasStudentNum = hasStudentsNum.ToString(); floorinfo.NoStudentNum = (bedsNum - hasStudentsNum).ToString(); floorinfo.RoomNum = roomsNum.ToString(); list.Add(floorinfo); } return list; } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } internal object GetBedList(string parentID) { try { var data = this.BaseRepository("CollegeMIS").FindList(); var room = data.FirstOrDefault(a => a.ID == parentID); var floor = data.FirstOrDefault(a => a.ID == room.ParentID); var unit = data.FirstOrDefault(a => a.ID == floor.ParentID); var dormitory = data.FirstOrDefault(a => a.ID == unit.ParentID); var beds = data.Where(a => a.ParentID == parentID).OrderBy(a => a.Name).ToList(); List list = new List(); foreach (var bed in beds) { floorsInfo floorInfo = new floorsInfo(); floorInfo.dormitory = bed; if (!string.IsNullOrEmpty(bed.StudentID)) { floorInfo.stuInfo = this.BaseRepository("CollegeMIS").FindEntity(a => a.StuNo == bed.StudentID); } list.Add(floorInfo); } return new { rows = list, roomID = room.ID, roomName = room.Name, floorID = floor.ID, floorName = floor.Name, unitID = unit.ID, unitName = unit.Name, dormitoryID = dormitory.ID, dormitoryName = dormitory.Name }; } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } private class floorsInfo { public Acc_DormitoryBuildEntity dormitory { get; set; } public StuInfoBasicEntity stuInfo { get; set; } /// /// 单元数量 /// public string UnitNum { get; set; } /// /// 楼层数量 /// public string floorNum { get; set; } /// /// 房间数量 /// public string RoomNum { get; set; } /// /// 床位数量 /// public string BedNum { get; set; } /// /// 入住人数 /// public string HasStudentNum { get; set; } /// /// 空床数量 /// public string NoStudentNum { get; set; } } /// /// 获取Acc_DormitoryBuild表实体数据 /// 主键 /// /// public Acc_DormitoryBuildEntity GetAcc_DormitoryBuildEntity(string keyValue) { try { return this.BaseRepository("CollegeMIS").FindEntity(keyValue); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } public List GetClassifyTree() { try { return this.BaseRepository("CollegeMIS").FindList(x => (x.BuildType == "2" || x.BuildType == "1")).ToList(); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 获取Acc_DormitoryBuild表实体数据 /// 主键 /// /// public Acc_DormitoryBuildEntity GetAcc_DormitoryBuildEntityByName(string name) { try { return this.BaseRepository("CollegeMIS").FindEntity(x => x.Name == name); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 获取树形数据 /// /// public List GetSqlTreeNew() { try { var aa = this.BaseRepository("CollegeMIS").FindList().OrderBy(a => a.Name).ToList(); var bb = this.BaseRepository("CollegeMIS").FindList(); foreach (var item in aa) { if (!string.IsNullOrEmpty(item.PlanStudentID)) { var bbq = bb.FirstOrDefault(a => a.StuId == item.PlanStudentID); if (bbq != null) { item.Name = $"{item.Name}({bbq.StuName})"; } } } return aa; } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 获取树形数据 /// /// public List GetSqlTree() { try { return this.BaseRepository("CollegeMIS").FindList(a => a.BuildType != "5" && a.BuildType != "4").OrderBy(a => a.sort).ThenBy(a => a.Name).ToList(); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 获取非空床的系部专业 班级 /// /// public List GetSelectData(string strWhere) { try { string sql = @"select distinct dept,d.DeptName,major,m.MajorName,class,c.ClassName from [dbo].[Acc_DormitoryBuild] t join CdDept d on t.dept=d.deptno join CdMajor m on t.major=m.majorno join ClassInfo c on t.class=c.classno where t.ID in ( select parentid from [dbo].[Acc_DormitoryBuild] where BuildType='5' and (studentid is not null and len(studentid)>0) )"; if (!string.IsNullOrEmpty(strWhere)) { sql += " and " + strWhere; } return this.BaseRepository("CollegeMIS").FindList(sql).ToList(); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 获取树形数据(学生归宿) /// /// public List GetSqlTreeForReturn() { try { List list = new List(); var roomSql = @"select * from [dbo].[Acc_DormitoryBuild] where ID in ( select parentid from [dbo].[Acc_DormitoryBuild] where BuildType='5' and (studentid is not null and len(studentid)>0) )"; List roomList = this.BaseRepository("CollegeMIS") .FindList(roomSql).ToList(); list = roomList.Union(list).ToList(); var apartIds = roomList.Select(x => x.ApartmentId).Distinct().ToList(); var unitIds = roomList.Select(x => x.UnitId).Distinct().ToList(); var floorIds = roomList.Select(x => x.FloorId).Distinct().ToList(); var otherList = this.BaseRepository("CollegeMIS").FindList(x => apartIds.Contains(x.ID) || unitIds.Contains(x.ID) || floorIds.Contains(x.ID)).ToList(); list = list.Union(otherList).ToList(); return list.OrderBy(x => x.DNo).OrderBy(x => x.Name).ToList(); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 根据父id获取数据 /// /// 父id /// public DataTable GetTreeByParentId(string parentID) { try { return this.BaseRepository("CollegeMIS").FindTable($"SELECT * FROM dbo.Acc_DormitoryBuild WHERE ParentID = '{parentID}'"); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 根据父id获取数据 /// /// 父id /// public string GetDormitoryInfoByPlanStuNo(string stuNo) { try { var result = ""; if (!string.IsNullOrEmpty(stuNo)) { var dormitorys = this.BaseRepository("CollegeMIS").FindList(); var bed = dormitorys.FirstOrDefault(a => a.PlanStudentID == stuNo); if (bed != null) { var room = dormitorys.FirstOrDefault(a => a.ID == bed.ParentID); var floor = dormitorys.FirstOrDefault(a => a.ID == room.ParentID); var unit = dormitorys.FirstOrDefault(a => a.ID == floor.ParentID); var dor = dormitorys.FirstOrDefault(a => a.ID == unit.ParentID); result = $"{dor.Name} {unit.Name} {floor.Name} {room.Name} {bed.Name}"; } } return result; } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } public string GetDormitoryInfoByStuNo(string stuNo) { try { var result = ""; if (!string.IsNullOrEmpty(stuNo)) { var dormitorys = this.BaseRepository("CollegeMIS").FindList(); var userInfo = this.BaseRepository("CollegeMIS") .FindEntity(a => a.StuNo == stuNo); var bed = dormitorys.FirstOrDefault(a => a.StudentID == userInfo.StuId); if (bed != null) { var room = dormitorys.FirstOrDefault(a => a.ID == bed.ParentID); var floor = dormitorys.FirstOrDefault(a => a.ID == room.ParentID); var unit = dormitorys.FirstOrDefault(a => a.ID == floor.ParentID); var dor = dormitorys.FirstOrDefault(a => a.ID == unit.ParentID); result = $"{dor.Name} {unit.Name} {floor.Name} {room.Name} {bed.Name}"; } } return result; } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } public bool MatchDormitoryInfo(string stuNo, string dormitory, string unit, string floor, string room, string bed, List data) { try { var stuInfo = this.BaseRepository("CollegeMIS").FindEntity(a => a.StuNo == stuNo); var dormitoryInfo = data.FirstOrDefault(a => a.BuildType == "1" && a.Name == dormitory); if (dormitoryInfo != null) { var unitInfo = data.FirstOrDefault(a => a.BuildType == "2" && a.ParentID == dormitoryInfo.ID && a.Name == unit); if (unitInfo != null) { var floorInfo = data.FirstOrDefault(a => a.BuildType == "3" && a.ParentID == unitInfo.ID && a.Name == floor); if (floorInfo != null) { var roomInfo = data.FirstOrDefault(a => a.BuildType == "4" && a.ParentID == floorInfo.ID && a.Name == room); if (roomInfo != null) { var bedInfo = data.FirstOrDefault(a => a.BuildType == "5" && a.ParentID == roomInfo.ID && a.Name == bed); if (bedInfo != null && stuInfo != null) { var oldbedInfo = data.Where(a => a.StudentID == stuInfo.StuId); foreach (var item in oldbedInfo) { item.StudentID = ""; this.BaseRepository("CollegeMIS").Update(item); } bedInfo.StudentID = stuInfo.StuId; bedInfo.StuName = stuInfo.StuName; bedInfo.Dept = stuInfo.DeptNo; bedInfo.Major = stuInfo.MajorNo; bedInfo.Class = stuInfo.ClassNo; bedInfo.Sex = Convert.ToString(stuInfo.GenderNo); this.BaseRepository("CollegeMIS").Update(bedInfo); return true; } } } } } return false; } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } #endregion 获取数据 #region 提交数据 /// /// 删除实体数据 /// 主键 /// /// public void DeleteEntity(string keyValue) { var db = this.BaseRepository("CollegeMIS").BeginTrans(); try { //单个删除 //this.BaseRepository("CollegeMIS").Delete(t => t.ID == keyValue); //多个删除 var keyvalueArr = keyValue.Split(','); foreach (var item in keyvalueArr) { db.Delete(t => t.ID == item); DeleteAll(item); } db.Commit(); } catch (Exception ex) { db.Rollback(); if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } public void DeleteBed(string keyValue, string ParentID) { try { this.BaseRepository("CollegeMIS").Delete(t => t.ID == keyValue); UpdateCheckInNum(ParentID); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } public void DeleteAll(string parentid) { var list = this.BaseRepository("CollegeMIS").FindList(a => a.ParentID == parentid).ToList(); if (list.Count > 0) { foreach (var item in list) { if (item != null) { this.BaseRepository("CollegeMIS").Delete(item); DeleteAll(item.ID); } } } } /// /// 批量添加单元、楼层、房间、床位 /// /// /// /// /// /// public void DormitoryAdd(string keyValue, int elementNum, int floorNum, int roomNum, int bedNum) { try { //获取本楼允许入住的性别 var dormitory = this.BaseRepository("CollegeMIS").FindEntity(a => a.ID == keyValue); var currentUser = LoginUserInfo.Get(); if (elementNum > 0) { List list = new List(); //添加单元 for (int i = 1; i <= elementNum; i++) { var elementEntity = new Acc_DormitoryBuildEntity { ParentID = keyValue, ApartmentId = keyValue, Name = i.ToString() + "单元", DNo = i.ToString(), BuildType = "2",//单元类型 Sex = dormitory.Sex, Address = dormitory.Address, Campus = dormitory.Campus, CreateBy = currentUser.realName, CreateTime = DateTime.Now, Dept = dormitory.Dept, Class = dormitory.Class, Functionary = dormitory.Functionary, Major = dormitory.Major, Phone = dormitory.Phone, Price = dormitory.Price, UpdateBy = currentUser.realName, UpdateTime = DateTime.Now }; elementEntity.Create(); elementEntity.UnitId = elementEntity.ID; list.Add(elementEntity); //添加楼层 if (floorNum > 0) { for (int j = 1; j <= floorNum; j++) { var floorEntity = new Acc_DormitoryBuildEntity { ParentID = elementEntity.ID, ApartmentId = keyValue, UnitId = elementEntity.ID, Name = j.ToString() + "层", DNo = j.ToString(), BuildType = "3",//楼层类型, Sex = dormitory.Sex, Address = dormitory.Address, Campus = dormitory.Campus, CreateBy = currentUser.realName, CreateTime = DateTime.Now, Dept = dormitory.Dept, Class = dormitory.Class, Functionary = dormitory.Functionary, Major = dormitory.Major, Phone = dormitory.Phone, Price = dormitory.Price, UpdateBy = currentUser.realName, UpdateTime = DateTime.Now }; floorEntity.Create(); floorEntity.FloorId = floorEntity.ID; list.Add(floorEntity); //添加房间 if (roomNum > 0) { for (int n = 1; n <= roomNum; n++) { var roomEntity = new Acc_DormitoryBuildEntity { ParentID = floorEntity.ID, ApartmentId = keyValue, UnitId = elementEntity.ID, FloorId = floorEntity.ID, Name = j.ToString() + (n < 10 ? "0" + n.ToString() : n.ToString()) + "室", DNo = j.ToString() + (n < 10 ? "0" + n.ToString() : n.ToString()), BuildType = "4",//房间类型 Sex = dormitory.Sex, Address = dormitory.Address, Campus = dormitory.Campus, CreateBy = currentUser.realName, CreateTime = DateTime.Now, Dept = dormitory.Dept, Class = dormitory.Class, Functionary = dormitory.Functionary, Major = dormitory.Major, Phone = dormitory.Phone, Price = dormitory.Price, RoomType = bedNum, UpdateBy = currentUser.realName, UpdateTime = DateTime.Now, Starred = "3", Leader = "暂无" }; roomEntity.Create(); list.Add(roomEntity); //床位添加 if (bedNum > 0) { for (int m = 1; m <= bedNum; m++) { var bedEntity = new Acc_DormitoryBuildEntity { ParentID = roomEntity.ID, ApartmentId = keyValue, UnitId = elementEntity.ID, FloorId = floorEntity.ID, Name = m.ToString() + "床", DNo = m.ToString(), BuildType = "5", Sex = dormitory.Sex, Address = dormitory.Address, Campus = dormitory.Campus, CreateBy = currentUser.realName, CreateTime = DateTime.Now, Dept = dormitory.Dept, Class = dormitory.Class, Functionary = dormitory.Functionary, Major = dormitory.Major, Phone = dormitory.Phone, Price = dormitory.Price, UpdateBy = currentUser.realName, UpdateTime = DateTime.Now, }; bedEntity.Create(); list.Add(bedEntity); } } } } } } } if (list.Count > 0) { this.BaseRepository("CollegeMIS").Insert(list); } } } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 自动分配宿舍 /// /// 少数民族不能分一块 /// 同一个地方的不能分一块 /// public void Automatic_allocation_accommodation(bool noNation, bool noPlace, string Sex) { try { var boolSex = Convert.ToBoolean(Sex == "1"); //获取所有的宿舍单位 var allBuilds = this.BaseRepository("CollegeMIS").FindList().Where(a => a.Sex == Sex).ToList(); //获取所有已经分配了床位的学生id var hasBedStudentIDs = allBuilds .Where(a => a.BuildType == "5") .Where(a => a.StudentID != null && a.StudentID != "").Select(a => a.StudentID).ToList(); //获取还没有床位的学生 var students = this.BaseRepository("CollegeMIS").FindList() .Where(a => a.GenderNo == boolSex) .Where(a => !hasBedStudentIDs.Contains(a.StuId)) .ToList(); //根据性别获取所有空闲的床位 var allBeds = this.BaseRepository("CollegeMIS").FindList() .Where(a => a.Sex == Sex) .Where(a => a.StudentID == null || a.StudentID == "") .ToList(); if (allBeds.Count() > students.Count()) { #region 普通分配 var beds = new List(); var studentNo = 0; var builds = allBuilds.Where(a => a.BuildType == "1").OrderBy(a => a.Name).ToList(); foreach (var build in builds) { if (studentNo < students.Count()) { var elements = allBuilds.Where(a => a.ParentID == build.ID).OrderBy(a => a.Name).ToList(); foreach (var element in elements) { if (studentNo < students.Count()) { var layers = allBuilds.Where(a => a.ParentID == element.ID).OrderBy(a => a.Name).ToList(); foreach (var layer in layers) { if (studentNo < students.Count()) { var rooms = allBuilds.Where(a => a.ParentID == layer.ID).OrderBy(a => a.Name).ToList(); foreach (var room in rooms) { if (studentNo < students.Count()) { var bedss = allBuilds.Where(a => a.ParentID == room.ID) .Where(a => a.StudentID == null || a.StudentID == "") .OrderBy(a => a.Name).ToList(); foreach (var bed in bedss) { if (studentNo < students.Count()) { bed.StudentID = students[studentNo].StuId; studentNo++; beds.Add(bed); } } } } } } } } } } //打乱 Random ram = new Random(); int currentIndex; string tempValue; for (int i = 0; i < beds.Count(); i++) { currentIndex = ram.Next(0, beds.Count() - i); tempValue = beds[currentIndex].StudentID; beds[currentIndex].StudentID = beds[beds.Count() - 1 - i].StudentID; beds[beds.Count() - 1 - i].StudentID = tempValue; } #endregion 普通分配 #region 同一少数民族的不能在一起 if (noNation) { //var nationals = students.GroupBy(a => a.NationalityNo); //List studentids = new List(); //foreach (var item in nationals) //{ // var studentid=studentid. // studentids.Add() //} var roomsIDs = beds.Where(a => !string.IsNullOrEmpty(a.StudentID)).GroupBy(a => a.ParentID).Select(a => a.Key).ToList(); foreach (var room in roomsIDs) { //获取本宿舍相同民族超过2个学生的民族 var sameNationals = beds.Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s }) .Where(a => a.b.ParentID == room) .Where(a => a.s.NationalityNo != "01") .GroupBy(a => a.s.NationalityNo) .Where(a => a.Count() > 1).ToList(); if (sameNationals.Count > 0) { //获取本宿舍的所有学生所属民族 var theRoomNationals = beds .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s }) .Where(a => a.b.ParentID == room) .Where(a => a.s.NationalityNo != "01" && a.s.NationalityNo != "07") .Select(a => a.s.NationalityNo).ToList(); //获取别的宿舍不含此民族的学生的宿舍 var bedNum = beds.Count(a => a.ParentID == room); var otherRooms = beds.Join(students, a => a.StudentID, b => b.StuId, (a, b) => new { a, b }) .Where(a => !theRoomNationals.Contains(a.b.NationalityNo)) .Select(a => new { a.a.ID, a.a.ParentID }) .GroupBy(a => a.ParentID) .Where(a => a.Count() == bedNum) .ToList(); var changeTime = 0;//调换次数 if (otherRooms.Count > 0 && otherRooms.Count > changeTime) { Acc_DormitoryBuildEntity theBed; Acc_DormitoryBuildEntity otherBed; string tempStudentID; //遍历学生超过俩个的民族 foreach (var national in sameNationals) { //获取此宿舍此民族的学生的床位 var theSameNationalBeds = beds .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s }) .Where(a => a.b.ParentID == room) .Where(a => a.s.NationalityNo == national.Key) .Select(a => a.b.ID).ToList(); //如果是俩个只要换一个就可以 依此类推 for (int j = 0; j < theSameNationalBeds.Count() - 1; j++) { if (otherRooms.Count > j) { //获取将要调换的床位 theBed = beds.FirstOrDefault(a => a.ID == theSameNationalBeds[j]); otherBed = beds.FirstOrDefault(a => a.ParentID == otherRooms[changeTime].Key); tempStudentID = otherBed.StudentID; otherBed.StudentID = theBed.StudentID; theBed.StudentID = tempStudentID; changeTime++; } else { break; } } } } } } } #endregion 同一少数民族的不能在一起 #region 同一地方的不能在一起 if (noPlace) { var roomsIDs = beds.Where(a => !string.IsNullOrEmpty(a.StudentID)).GroupBy(a => a.ParentID).Select(a => a.Key).ToList(); foreach (var room in roomsIDs) { //获取本宿舍相同地方超过2个学生的地方 var sameCitys = beds.Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s }) .Where(a => a.b.ParentID == room) .GroupBy(a => a.s.F_CityId) .Where(a => a.Count() > 1).ToList(); if (sameCitys.Count > 0) { //获取本宿舍的所有学生所属地方 var theRoomCitys = beds .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s }) .Where(a => a.b.ParentID == room) .Select(a => a.s.F_CityId).ToList(); //获取别的宿舍不含此地方的学生的宿舍 var bedNum = beds.Count(a => a.ParentID == room); var otherRooms = beds.Join(students, a => a.StudentID, b => b.StuId, (a, b) => new { a, b }) .Where(a => !theRoomCitys.Contains(a.b.F_CityId)) .Select(a => new { a.a.ID, a.a.ParentID }) .GroupBy(a => a.ParentID) .Where(a => a.Count() == bedNum) .ToList(); var changeTime = 0;//调换次数 if (otherRooms.Count > 0 && otherRooms.Count > changeTime) { Acc_DormitoryBuildEntity theBed; Acc_DormitoryBuildEntity otherBed; string tempStudentID; //遍历学生超过俩个的地方 foreach (var city in sameCitys) { //获取此宿舍此地方的学生的床位 var theSameCityBeds = beds .Join(students, b => b.StudentID, s => s.StuId, (b, s) => new { b, s }) .Where(a => a.b.ParentID == room) .Where(a => a.s.F_CityId == city.Key) .Select(a => a.b.ID).ToList(); //如果是俩个只要换一个就可以 依此类推 for (int j = 0; j < theSameCityBeds.Count() - 1; j++) { if (otherRooms.Count > j) { //获取将要调换的床位 theBed = beds.FirstOrDefault(a => a.ID == theSameCityBeds[j]); otherBed = beds.FirstOrDefault(a => a.ParentID == otherRooms[changeTime].Key); tempStudentID = otherBed.StudentID; otherBed.StudentID = theBed.StudentID; theBed.StudentID = tempStudentID; changeTime++; } else { break; } } } } } } } #endregion 同一地方的不能在一起 this.BaseRepository("CollegeMIS").Update(beds); } } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } throw; } } /// /// 保存实体数据(新增、修改) /// 主键 /// /// public void SaveEntity(string keyValue, Acc_DormitoryBuildEntity entity) { var db = this.BaseRepository("CollegeMIS").BeginTrans(); try { var currentUser = LoginUserInfo.Get(); if (!string.IsNullOrEmpty(keyValue)) { entity.Modify(keyValue); entity.UpdateBy = currentUser.realName; entity.UpdateTime = DateTime.Now; db.Update(entity); //更新下级 var childList = db.FindList(x => x.ParentID == entity.ID); foreach (var childItem in childList) { childItem.Campus = entity.Campus; childItem.Dept = entity.Dept; childItem.Major = entity.Major; childItem.Class = entity.Class; childItem.Sex = entity.Sex; childItem.Functionary = entity.Functionary; childItem.Address = entity.Address; childItem.Phone = entity.Phone; childItem.Price = entity.Price; SaveEntity(childItem.ID, childItem); } db.Commit(); } else { entity.Create(); if (entity.BuildType == "1") { entity.ApartmentId = entity.ID; if (string.IsNullOrEmpty(entity.ParentID) || entity.ParentID == "-1") { var rootNode = this.BaseRepository("CollegeMIS").FindList().FirstOrDefault(a => a.ParentID == null); if (rootNode == null) { var rootEntity = new Acc_DormitoryBuildEntity { Name = "数字化智慧校园" }; rootEntity.Create(); rootEntity.CreateBy = currentUser.realName; rootEntity.CreateTime = DateTime.Now; rootEntity.UpdateBy = currentUser.realName; rootEntity.UpdateTime = DateTime.Now; rootEntity.ApartmentId = rootEntity.ID; entity.ParentID = rootEntity.ID; this.BaseRepository("CollegeMIS").Insert(rootEntity); } else { entity.ParentID = rootNode.ID; } } } else { //上一级 var parentity = this.BaseRepository("CollegeMIS").FindList().FirstOrDefault(a => a.ID == entity.ParentID); switch (parentity.BuildType) { case "1": entity.ApartmentId = parentity.ID; entity.UnitId = entity.ID; break; case "2": { entity.FloorId = entity.ID; entity.UnitId = parentity.ID; entity.ApartmentId = parentity.ApartmentId; } break; case "3": { entity.FloorId = parentity.ID; entity.UnitId = parentity.UnitId; entity.ApartmentId = parentity.ApartmentId; } break; } } entity.CreateBy = currentUser.realName; entity.CreateTime = DateTime.Now; entity.UpdateBy = currentUser.realName; entity.UpdateTime = DateTime.Now; this.BaseRepository("CollegeMIS").Insert(entity); } } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 保存实体数据(新增、修改) /// 主键 /// /// public void SaveBedEntity(string keyValue, string ParentID, Acc_DormitoryBuildEntity entity) { var db = this.BaseRepository("CollegeMIS"); try { db.BeginTrans(); if (!string.IsNullOrEmpty(keyValue)) { entity.Modify(keyValue); db.Update(entity); } else { var parentEntity = db.FindEntity(ParentID); entity.Create(); entity.ApartmentId = parentEntity.ApartmentId; entity.UnitId = parentEntity.UnitId; entity.FloorId = parentEntity.FloorId; entity.ParentID = ParentID; entity.BuildType = "5"; db.Insert(entity); } db.Commit(); UpdateCheckInNum(ParentID); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } private void UpdateCheckInNum(string ParentID) { try { string sql = $@"update [dbo].[Acc_DormitoryBuild] set RoomType=( select count(1) from [dbo].[Acc_DormitoryBuild] where ParentId='{ParentID}' and BuildType='5' ) where ID='{ParentID}' "; this.BaseRepository("CollegeMIS").ExecuteBySql(sql); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } public void SaveDeptClass(string keyValue, Acc_DormitoryBuildEntity entity, int type) { try { if (keyValue.Contains(",")) { keyValue = string.Join("','", keyValue.Split(',')); } string sql = $"update Acc_DormitoryBuild set "; if (type == 1) { sql += $" Dept='{entity.Dept}' "; } else { sql += $"Major='{entity.Major}',Class='{entity.Class}'"; } sql += $" where ID in ('{keyValue}')"; this.BaseRepository("CollegeMIS").ExecuteBySql(sql); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 分配宿舍 /// /// /// public string SaveRoom(string RoomId, List list) { var db = this.BaseRepository("CollegeMIS").BeginTrans(); try { foreach (var entity in list) { //判断该学生是否已分配 if (!string.IsNullOrEmpty(entity.StudentID)) { var count = db.FindList().Count(x => x.StudentID == entity.StudentID && x.ID != entity.ID); if (count > 0) { var stuname = db.FindEntity(x => x.StuNo == entity.StudentID)?.StuName; return "学生" + stuname + "已分配床位,不可重复分配!"; } } //分配床位 string sql = $"update Acc_DormitoryBuild set StudentID='{entity.StudentID}' where ID='{entity.ID}'"; db.ExecuteBySql(sql); } int checkInStu = list.Where(x => x.StudentID != null).Count(); string checkInSql = $"update Acc_DormitoryBuild set CheckInStu='{checkInStu}' where ID='{RoomId}'"; db.ExecuteBySql(checkInSql); db.Commit(); return ""; } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 同步宿舍信息 /// public void SyncData() { var db = this.BaseRepository("CollegeMIS").BeginTrans(); try { string sql = "select 学号,姓名,性别,公寓,单元,楼层,宿舍号,床位号 from t1 where 学号 is not null order by 公寓,单元,楼层,宿舍号,床位号"; DataTable dt = db.FindTable(sql); //var list = db.FindList(); //select * from Acc_DormitoryBuild where parentid= (select ID from Acc_DormitoryBuild where parentid=( select ID from Acc_DormitoryBuild where name='一号学生公寓')); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 按年级清空 /// public void ClearEntity(string Grade) { try { BaseRepository("CollegeMIS").ExecuteBySql($"delete from Acc_DormitoryBuild where StudentID in(select StuNo from StuInfoBasic where Grade ='{Grade}')"); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } public List GetDeptOrMajorOrClass(string strWhere) { try { string sql1 = " select distinct dept,d.DeptName from Acc_DormitoryBuild t join CdDept d on t.dept=d.deptno"; string sql2 = " select distinct major,m.MajorName from Acc_DormitoryBuild t join CdMajor m on t.major=m.majorno"; string sql3 = " select distinct class,c.ClassName from Acc_DormitoryBuild t join ClassInfo c on t.class=c.classno"; string sql = @" where t.ID in ( select parentid from[dbo].[Acc_DormitoryBuild] where BuildType = '5' and(studentid is not null and len(studentid) > 0) )"; if (string.IsNullOrEmpty(strWhere)) { sql = sql1 + sql; } else if (strWhere.Contains("deptno")) { sql = sql2 + sql + " and " + strWhere; } else if (strWhere.Contains("majorno")) { sql = sql3 + sql + " and " + strWhere; } return this.BaseRepository("CollegeMIS").FindList(sql).ToList(); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } #endregion 提交数据 } }