BuildingService.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using Bowin.Common.Linq.Entity;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using YLShipBuildLandMap.Entity;
  7. using YLShipBuildLandMap.Entity.ViewModel.Build;
  8. using System.Linq;
  9. using System.Linq.Expressions;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using Z.EntityFramework.Plus;
  13. namespace YLShipBuildLandMap.Services.Build
  14. {
  15. public class BuildingService : IBuildingService
  16. {
  17. private YLShipBuildLandMapContext DbContext { get; set; }
  18. public BuildingService(YLShipBuildLandMapContext dbContext)
  19. {
  20. DbContext = dbContext;
  21. }
  22. private IQueryable<BuildingView> GetBuildingQuery(Expression<Func<BdBuilding, bool>> exp)
  23. {
  24. var query = from b in DbContext.BdBuilding.Where(exp)
  25. /*join f in DbContext.BdBuildingFloor on b.BuildingId equals f.BuildingId into dbFloor
  26. from f in dbFloor.DefaultIfEmpty()
  27. group new { floorName = f.Name } by new { b } into g
  28. select new BuildingView
  29. {
  30. BuildingId = g.Key.b.BuildingId,
  31. Name = g.Key.b.Name,
  32. RecordStatus = g.Key.b.RecordStatus,
  33. CreateUserId = g.Key.b.CreateUserId,
  34. CreateTime = g.Key.b.CreateTime,
  35. ModifyTime = g.Key.b.ModifyTime,
  36. ModifyUserId = g.Key.b.ModifyUserId,
  37. FloorList = string.Join(",", g.Select(s => s.floorName)),
  38. };*/
  39. select new BuildingView
  40. {
  41. BuildingId = b.BuildingId,
  42. Name = b.Name,
  43. RecordStatus = b.RecordStatus,
  44. CreateUserId = b.CreateUserId,
  45. CreateTime = b.CreateTime,
  46. ModifyTime = b.ModifyTime,
  47. ModifyUserId = b.ModifyUserId,
  48. FloorList = string.Join("、", b.BdBuildingFloor.OrderBy(f => f.Sort).Select(s => s.Name))
  49. };
  50. return query;
  51. }
  52. public Task<List<BuildingView>> GetBuildingList()
  53. {
  54. return Task.FromResult(GetBuildingQuery(e => true).OrderBy(e => e.Name).ToList());
  55. }
  56. public Task<List<FloorView>> GetFloorList(Guid buildingId)
  57. {
  58. var query = from f in DbContext.BdBuildingFloor
  59. join b in DbContext.BdBuilding on f.BuildingId equals b.BuildingId
  60. where f.BuildingId == buildingId
  61. select new FloorView
  62. {
  63. BuildingFloorId = f.BuildingFloorId,
  64. Name = f.Name,
  65. BuildingName = b.Name,
  66. Sort = f.Sort,
  67. RecordStatus = f.RecordStatus
  68. };
  69. return Task.FromResult(query.OrderBy(e => e.Sort).ToList());
  70. }
  71. public Task<BuildingView> GetBuildingById(Guid? buildingId)
  72. {
  73. if (!buildingId.HasValue)
  74. return Task.FromResult(new BuildingView { BuildingId = Guid.NewGuid() });
  75. return Task.FromResult(GetBuildingQuery(e => e.BuildingId == buildingId).FirstOrDefault());
  76. }
  77. public async Task<int> DeleteBuilding(List<Guid> buildingIdList)
  78. {
  79. var floorIdList = DbContext.BdBuildingFloor.Where(e => buildingIdList.Contains((Guid)e.BuildingId)).Select(s => s.BuildingFloorId).ToList();
  80. var roomIdList = DbContext.BdBuildingFloorRoom.Where(e => floorIdList.Contains(e.BuildingFloorRoomId)).Select(s => s.BuildingFloorRoomId).ToList();
  81. await DbContext.BdDepartmentOrServicePointBmBuildingFloorRoom.Where(e => roomIdList.Contains(e.BuildingFloorRoomId)).DeleteAsync();
  82. await DbContext.BdBuildingFloorRoom.Where(e => roomIdList.Contains(e.BuildingFloorRoomId)).DeleteAsync();
  83. await DbContext.BdBuildingFloor.Where(e => floorIdList.Contains(e.BuildingFloorId)).DeleteAsync();
  84. await DbContext.BdBuilding.Where(e => buildingIdList.Contains(e.BuildingId)).DeleteAsync();
  85. return await this.DbContext.SaveChangesAsync();
  86. }
  87. public async Task<int> DeleteFloor(Guid buildingFloorId)
  88. {
  89. var roomIdList = DbContext.BdBuildingFloorRoom.Where(e => e.BuildingFloorId == buildingFloorId).Select(s => s.BuildingFloorRoomId).ToList();
  90. await DbContext.BdDepartmentOrServicePointBmBuildingFloorRoom.Where(e => roomIdList.Contains(e.BuildingFloorRoomId)).DeleteAsync();
  91. await DbContext.BdBuildingFloorRoom.Where(e => roomIdList.Contains(e.BuildingFloorRoomId)).DeleteAsync();
  92. await DbContext.BdBuildingFloor.Where(e => e.BuildingFloorId == buildingFloorId).DeleteAsync();
  93. return await this.DbContext.SaveChangesAsync();
  94. }
  95. public async Task<int> SaveBuilding(BuildingView data, List<FloorView> floorList, Guid? userId)
  96. {
  97. BdBuilding dbData = DbContext.BdBuilding.FirstOrDefault(e => e.BuildingId == data.BuildingId);
  98. if (dbData != null)
  99. {
  100. dbData.Name = data.Name;
  101. dbData.ModifyTime = DateTime.Now;
  102. dbData.ModifyUserId = userId;
  103. DbContext.BdBuilding.Update(dbData);
  104. }
  105. else
  106. {
  107. dbData = new BdBuilding
  108. {
  109. BuildingId = data.BuildingId,
  110. Name = data.Name,
  111. CreateTime = DateTime.Now,
  112. CreateUserId = userId
  113. };
  114. this.DbContext.Add(dbData);
  115. }
  116. floorList.ForEach(floor =>
  117. {
  118. var dbFloor = this.DbContext.BdBuildingFloor.Where(e => e.BuildingFloorId == floor.BuildingFloorId).FirstOrDefault();
  119. if (dbFloor == null)
  120. {
  121. dbFloor = new BdBuildingFloor
  122. {
  123. BuildingFloorId = Guid.NewGuid(),
  124. BuildingId = dbData.BuildingId,
  125. Name = floor.Name,
  126. Sort = floor.Sort,
  127. CreateTime = DateTime.Now,
  128. CreateUserId = userId
  129. };
  130. this.DbContext.BdBuildingFloor.Add(dbFloor);
  131. }
  132. else
  133. {
  134. dbFloor.Sort = floor.Sort;
  135. dbFloor.Name = floor.Name;
  136. dbFloor.ModifyTime = DateTime.Now;
  137. dbFloor.ModifyUserId = userId;
  138. DbContext.BdBuildingFloor.Update(dbFloor);
  139. }
  140. });
  141. return await this.DbContext.SaveChangesAsync();
  142. }
  143. }
  144. }