DepOrServicePointService.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using YLShipBuildLandMap.Entity;
  5. using System.Linq;
  6. using System.Linq.Expressions;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using Z.EntityFramework.Plus;
  10. using YLShipBuildLandMap.Entity.Extensions;
  11. using Bowin.Common.Linq.Entity;
  12. using YLShipBuildLandMap.Entity.ViewModel.Build;
  13. using Bowin.Common.Linq;
  14. using Bowin.Common.Linq.Entity;
  15. using YLShipBuildLandMap.Entity.ViewModel;
  16. namespace YLShipBuildLandMap.Services.Build
  17. {
  18. public class DepOrServicePointService : IDepOrServicePointService
  19. {
  20. private YLShipBuildLandMapContext DbContext { get; set; }
  21. public DepOrServicePointService(YLShipBuildLandMapContext dbContext)
  22. {
  23. DbContext = dbContext;
  24. }
  25. private IQueryable<DepOrServicePointView> GetDepOrServicePointQuery(Expression<Func<BdDepartmentOrServicePoint, bool>> exp)
  26. {
  27. var query =
  28. from ds in DbContext.BdDepartmentOrServicePoint.Where(exp)
  29. /* join rds in DbContext.BdDepartmentOrServicePointBmBuildingFloorRoom on ds.DepartmentOrServicePointId equals rds.DepartmentOrServicePointId into dbBdDepartmentOrServicePointBmBuildingFloorRoom
  30. from rds in dbBdDepartmentOrServicePointBmBuildingFloorRoom.DefaultIfEmpty()
  31. join r in DbContext.BdBuildingFloorRoom on rds.BuildingFloorRoomId equals r.BuildingFloorRoomId into dbRoom
  32. from r in dbRoom.DefaultIfEmpty()
  33. join f in DbContext.BdBuildingFloor on r.BuildingFloorId equals f.BuildingFloorId into dbFloor
  34. from f in dbFloor.DefaultIfEmpty()
  35. join b in DbContext.BdBuilding on f.BuildingId equals b.BuildingId into dbBuild
  36. from b in dbBuild.DefaultIfEmpty()*/
  37. join room in (
  38. from b in DbContext.BdBuilding
  39. join f in DbContext.BdBuildingFloor on b.BuildingId equals f.BuildingId
  40. join r in DbContext.BdBuildingFloorRoom on f.BuildingFloorId equals r.BuildingFloorId
  41. join rds in DbContext.BdDepartmentOrServicePointBmBuildingFloorRoom on r.BuildingFloorRoomId equals rds.BuildingFloorRoomId
  42. select new
  43. {
  44. rds.DepartmentOrServicePointId,
  45. f.BuildingFloorId,
  46. FloorName = f.Name,
  47. b.BuildingId,
  48. BuildingName = b.Name,
  49. RoomName = r.Name
  50. }
  51. ) on ds.DepartmentOrServicePointId equals room.DepartmentOrServicePointId into dbBdDepartmentOrServicePointBmBuildingFloorRoom
  52. from rds in dbBdDepartmentOrServicePointBmBuildingFloorRoom.DefaultIfEmpty()
  53. group new { rds.RoomName } by new
  54. {
  55. ds.DepartmentOrServicePointId,
  56. ds.Name,
  57. ds.OpenTime,
  58. ds.ContactType,
  59. ds.Description,
  60. ds.RecordStatus,
  61. ds.CreateUserId,
  62. ds.CreateTime,
  63. ds.ModifyTime,
  64. ds.ModifyUserId,
  65. rds.FloorName,
  66. rds.BuildingName,
  67. rds.BuildingId,
  68. rds.BuildingFloorId
  69. } into g
  70. select new DepOrServicePointView
  71. {
  72. DepartmentOrServicePointId = g.Key.DepartmentOrServicePointId,
  73. Name = g.Key.Name,
  74. OpenTime = g.Key.OpenTime,
  75. ContactType = g.Key.ContactType,
  76. Description = g.Key.Description,
  77. RecordStatus = g.Key.RecordStatus,
  78. CreateUserId = g.Key.CreateUserId,
  79. CreateTime = g.Key.CreateTime,
  80. ModifyTime = g.Key.ModifyTime,
  81. ModifyUserId = g.Key.ModifyUserId,
  82. BuildingName = g.Key.BuildingName,
  83. BuildingId = g.Key.BuildingId,
  84. FloorName = g.Key.FloorName,
  85. FloorId = g.Key.BuildingFloorId,
  86. /* RoomName = string.Join("、", g.Select(s => s.RoomName).ToList())*/
  87. };
  88. return query;
  89. }
  90. private IQueryable<DepOrServicePointRoomView> GetDepOrServicePointRoomQuery(Expression<Func<BdDepartmentOrServicePoint, bool>> exp)
  91. {
  92. var query =
  93. from ds in DbContext.BdDepartmentOrServicePoint
  94. join rds in DbContext.BdDepartmentOrServicePointBmBuildingFloorRoom on ds.DepartmentOrServicePointId equals rds.DepartmentOrServicePointId
  95. join r in DbContext.BdBuildingFloorRoom on rds.BuildingFloorRoomId equals r.BuildingFloorRoomId
  96. join f in DbContext.BdBuildingFloor on r.BuildingFloorId equals f.BuildingFloorId
  97. join b in DbContext.BdBuilding on f.BuildingId equals b.BuildingId
  98. select new DepOrServicePointRoomView
  99. {
  100. DepartmentOrServicePointId = ds.DepartmentOrServicePointId,
  101. FloorId = f.BuildingFloorId,
  102. RoomName = r.Name,
  103. RoomSort = r.Sort
  104. };
  105. return query;
  106. }
  107. public IGridResultSet<DepOrServicePointView> GetDepOrServicePointList(int pageIndex, int pageSize, Guid? buildingId, Guid? floorId, string name)
  108. {
  109. Expression<Func<BdDepartmentOrServicePoint, bool>> exp = e => true;
  110. Expression<Func<BdBuilding, bool>> expBuild = e => true;
  111. Expression<Func<BdBuildingFloor, bool>> expFloor = e => true;
  112. exp = exp.AndIf(!string.IsNullOrEmpty(name), e => e.Name.Contains(name.Trim()));
  113. expFloor = expFloor.AndIf(floorId.HasValue, e => e.BuildingFloorId == floorId);
  114. expBuild = expBuild.AndIf(buildingId.HasValue, e => e.BuildingId == buildingId);
  115. var query = GetDepOrServicePointQuery(exp)
  116. .WhereIf(floorId.HasValue, e => e.FloorId == floorId)
  117. .WhereIf(buildingId.HasValue, e => e.BuildingId == buildingId)
  118. .OrderBy(e => e.BuildingName).ThenBy(e => e.FloorName).ThenBy(e => e.Name);
  119. var dataResult = query.ToGridResultSet(pageIndex, pageSize);
  120. var depOrServicePointIdList = dataResult.rows.Select(s => s.DepartmentOrServicePointId).ToList();
  121. var roomList = GetDepOrServicePointRoomQuery(e => depOrServicePointIdList.Contains(e.DepartmentOrServicePointId)).ToList();
  122. dataResult.rows.ForEach(item =>
  123. {
  124. item.RoomName = string.Join("、", roomList.Where(e => e.DepartmentOrServicePointId == item.DepartmentOrServicePointId && e.FloorId == item.FloorId).OrderBy(e => e.RoomSort).Select(s => s.RoomName).ToList());
  125. });
  126. return dataResult;
  127. }
  128. public Task<DepOrServicePointView> GetDepOrServicePointById(Guid? depOrServicePointId)
  129. {
  130. if (depOrServicePointId.HasValue)
  131. {
  132. return Task.FromResult(GetDepOrServicePointQuery(e => e.DepartmentOrServicePointId == depOrServicePointId).FirstOrDefault());
  133. }
  134. else
  135. {
  136. return Task.FromResult(new DepOrServicePointView { DepartmentOrServicePointId = Guid.NewGuid() });
  137. }
  138. }
  139. public async Task<int> Save(DepOrServicePointView data, List<Guid> roomIdList, Guid? userId)
  140. {
  141. BdDepartmentOrServicePoint dbData = DbContext.BdDepartmentOrServicePoint.FirstOrDefault(e => e.DepartmentOrServicePointId == data.DepartmentOrServicePointId);
  142. if (dbData != null)
  143. {
  144. dbData.Name = data.Name;
  145. dbData.Description = data.Description;
  146. dbData.OpenTime = data.OpenTime;
  147. dbData.ModifyTime = DateTime.Now;
  148. dbData.ModifyUserId = userId;
  149. dbData.ContactType = data.ContactType;
  150. DbContext.BdDepartmentOrServicePoint.Update(dbData);
  151. }
  152. else
  153. {
  154. dbData = new BdDepartmentOrServicePoint
  155. {
  156. DepartmentOrServicePointId = data.DepartmentOrServicePointId,
  157. Name = data.Name,
  158. OpenTime = data.OpenTime,
  159. Description = data.Description,
  160. CreateTime = DateTime.Now,
  161. CreateUserId = userId,
  162. RecordStatus = 1,
  163. ContactType = data.ContactType
  164. };
  165. this.DbContext.Add(dbData);
  166. }
  167. await DbContext.BdDepartmentOrServicePointBmBuildingFloorRoom.Where(e => dbData.DepartmentOrServicePointId == e.DepartmentOrServicePointId).DeleteAsync();
  168. this.DbContext.BdDepartmentOrServicePointBmBuildingFloorRoom.AddRange(roomIdList.Select(s => new BdDepartmentOrServicePointBmBuildingFloorRoom
  169. {
  170. BuildingFloorRoomId = s,
  171. DepartmentOrServicePointId = dbData.DepartmentOrServicePointId
  172. }).ToList());
  173. return await this.DbContext.SaveChangesAsync();
  174. }
  175. public async Task<int> Delete(List<Guid> depOrServicePointIdList)
  176. {
  177. await DbContext.BdDepartmentOrServicePointBmBuildingFloorRoom.Where(e => depOrServicePointIdList.Contains(e.DepartmentOrServicePointId)).DeleteAsync();
  178. await DbContext.BdDepartmentOrServicePoint.Where(e => depOrServicePointIdList.Contains(e.DepartmentOrServicePointId)).DeleteAsync();
  179. return await this.DbContext.SaveChangesAsync();
  180. }
  181. public Task<List<RoomView>> GetRoomList(Guid depOrServicePointId)
  182. {
  183. var query = from b in DbContext.BdBuilding
  184. join f in DbContext.BdBuildingFloor on b.BuildingId equals f.BuildingId
  185. join r in DbContext.BdBuildingFloorRoom on f.BuildingFloorId equals r.BuildingFloorId
  186. join deppoint in DbContext.BdDepartmentOrServicePointBmBuildingFloorRoom on r.BuildingFloorRoomId equals deppoint.BuildingFloorRoomId
  187. where deppoint.DepartmentOrServicePointId == depOrServicePointId
  188. select new RoomView
  189. {
  190. BuildingFloorRoomId = r.BuildingFloorRoomId,
  191. BuildingFloorId = r.BuildingFloorId,
  192. BuildingId = b.BuildingId,
  193. Name = r.Name,
  194. CreateTime = r.CreateTime,
  195. CreateUserId = r.CreateUserId,
  196. ModifyTime = r.ModifyTime,
  197. ModifyUserId = r.ModifyUserId,
  198. RecordStatus = r.RecordStatus,
  199. Sort = r.Sort,
  200. BuildingName = b.Name,
  201. FloorName = f.Name,
  202. FloorSort = f.Sort
  203. };
  204. return Task.FromResult(query.OrderBy(e => e.BuildingName).ThenBy(e => e.FloorSort).ThenBy(e => e.Name).ToList());
  205. }
  206. }
  207. }