ServicePackDBService.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. using System.Threading.Tasks;
  2. using System.Collections.Generic;
  3. using MongoDB.Driver;
  4. using VitalService.Entities;
  5. using WingServerCommon.Mapper;
  6. using VitalService.Request;
  7. using System;
  8. using WingInterfaceLibrary.Interface.DBVitalInterface;
  9. using WingInterfaceLibrary.Request.DBVitalRequest;
  10. using WingInterfaceLibrary.DTO.Vital;
  11. using WingInterfaceLibrary.Request;
  12. namespace VitalService.Service
  13. {
  14. /// <summary>
  15. /// 服务包数据库服务
  16. /// </summary>
  17. public partial class VitalDatabaseService : IVitalServicePackDBService
  18. {
  19. /// <summary>
  20. /// 创建服务包
  21. /// </summary>
  22. /// <param name="request">create request</param>
  23. /// <returns></returns>
  24. public async Task<string> CreateServicePackAsync(CreateServicePackDBRequest request)
  25. {
  26. var entity = request.MappingTo<ServicePackEntity>();
  27. return await _servicePackDBRepository.InsertOneAsync(entity);
  28. }
  29. /// <summary>
  30. ///获取服务包详情
  31. /// </summary>
  32. /// <param name="request">get request</param>
  33. /// <returns></returns>
  34. public async Task<ServicePackDTO> GetServicePackDetailAsync(GetServicePackDBRequest request)
  35. {
  36. var filter = Builders<ServicePackEntity>.Filter.Eq(x => x.Code, request.Code);
  37. var result = await _servicePackDBRepository.FindOneAsync(filter);
  38. return result.MappingTo<ServicePackDTO>();
  39. }
  40. /// <summary>
  41. /// 获取服务包分页查询
  42. /// </summary>
  43. /// <param name="request">Get page request</param>
  44. /// <returns></returns>
  45. public async Task<PageCollection<ServicePackDTO>> GetServicePackPageAsync(GetServicePackPageDBRequest request)
  46. {
  47. var filter = await _servicePackDBRepository.GetPageFilter(request);
  48. if (request.ServicePackType != null)
  49. {
  50. filter = filter & Builders<ServicePackEntity>.Filter.Where(x => x.ServicePackType == request.ServicePackType);
  51. }
  52. if (!string.IsNullOrWhiteSpace(request.OrganizationCode))
  53. {
  54. filter = filter & Builders<ServicePackEntity>.Filter.Where(x => x.OrganizationCode == null || x.OrganizationCode == "" || x.OrganizationCode == request.OrganizationCode);
  55. }
  56. var pageFilter = new DBPageRequest<ServicePackEntity>
  57. {
  58. PageIndex = request.PageIndex,
  59. PageSize = request.PageSize,
  60. Filter = filter,
  61. Sort = Builders<ServicePackEntity>.Sort.Descending(x => x.CreateTime)
  62. };
  63. var pagedResult = await _servicePackDBRepository.GetPages(pageFilter);
  64. var result = pagedResult.MappingTo<PageCollection<ServicePackDTO>>();
  65. if (result != null && result.PageData != null && result.PageData.Any() && result.PageData.Any(x => !string.IsNullOrWhiteSpace(x.OrganizationCode)))
  66. {
  67. var orgCodes = result.PageData.Select(x => x.OrganizationCode).Distinct();
  68. var filterOrgs = Builders<OrganizationEntity>.Filter.In(f => f.Code, orgCodes);
  69. var orgList = await _organizationDBRepository.FindAllAsync(filterOrgs);
  70. foreach (var item in result.PageData)
  71. {
  72. item.OrganizationName = orgList.FirstOrDefault(x => x.Code == item.OrganizationCode)?.OrganizationName ?? string.Empty;
  73. }
  74. }
  75. return result;
  76. }
  77. /// <summary>
  78. ///删除服务包
  79. /// </summary>
  80. /// <param name="request">remove request</param>
  81. /// <returns></returns>
  82. public async Task<bool> RemovetServicePackAsync(RemovetServicePackDBRequest request)
  83. {
  84. return await _servicePackDBRepository.DeleteOneAsync("Code", request.Code);
  85. }
  86. /// <summary>
  87. ///获取所有服务包列表
  88. /// </summary>
  89. /// <param name="request">get list request</param>
  90. /// <returns></returns>
  91. public async Task<List<ServicePackDTO>> GetServicePackListAsync(GetServicePackListDBRequest request)
  92. {
  93. var filter = Builders<ServicePackEntity>.Filter.In(f => f.Code, request.Codes);
  94. var result = await _servicePackDBRepository.FindAllAsync(filter);
  95. return result.MappingTo<List<ServicePackDTO>>();
  96. }
  97. /// <summary>
  98. /// 更新服务包
  99. /// </summary>
  100. /// <param name="request">update request</param>
  101. /// <returns></returns>
  102. public async Task<bool> UpdateServicePackAsync(UpdateServicePackDBRequest request)
  103. {
  104. var filter = Builders<ServicePackEntity>.Filter.Eq(f => f.Code, request.Code);
  105. var update = Builders<ServicePackEntity>.Update
  106. .Set(f => f.Name, request.Name)
  107. .Set(f => f.ServicePackType, request.ServicePackType)
  108. .Set(f => f.Content, request.Content)
  109. .Set(f => f.OrganizationCode, request.OrganizationCode);
  110. return await _servicePackDBRepository.UpdateOneAsync(filter, update) > 0;
  111. }
  112. /// <summary>
  113. ///设服务包上设置服务项目
  114. /// </summary>
  115. /// <param name="request">update request</param>
  116. /// <returns></returns>
  117. public async Task<bool> UpdateServicePackForItemsAsync(UpdateServicePackForItemsDBRequest request)
  118. {
  119. var filter = Builders<ServicePackEntity>.Filter.Eq(f => f.Code, request.Code);
  120. var update = Builders<ServicePackEntity>.Update
  121. .Set(f => f.Items, request.Items)
  122. .Set(f => f.UpdateTime, DateTime.UtcNow);
  123. return await _servicePackDBRepository.UpdateOneAsync(filter, update) > 0;
  124. }
  125. /// <summary>
  126. /// 创建项目包
  127. /// </summary>
  128. /// <param name="request">create request</param>
  129. /// <returns></returns>
  130. public async Task<string> CreateServiceItemAsync(CreateServiceItemDBRequest request)
  131. {
  132. var entity = request.MappingTo<ServiceItemEntity>();
  133. return await _serviceItemDBRepository.InsertOneAsync(entity);
  134. }
  135. /// <summary>
  136. ///获取项目详情
  137. /// </summary>
  138. /// <param name="request">get request</param>
  139. /// <returns></returns>
  140. public async Task<ServiceItemDTO> GetServiceItemDetailAsync(GetServiceItemDBRequest request)
  141. {
  142. var filter = Builders<ServiceItemEntity>.Filter.Eq(x => x.Code, request.Code);
  143. var result = await _serviceItemDBRepository.FindOneAsync(filter);
  144. return result.MappingTo<ServiceItemDTO>();
  145. }
  146. /// <summary>
  147. /// 获取服务项目分页查询
  148. /// </summary>
  149. /// <param name="request">Get page request</param>
  150. /// <returns></returns>
  151. public async Task<PageCollection<ServiceItemDTO>> GetServiceItemPageAsync(GetServiceItemPageDBRequest request)
  152. {
  153. var filter = await _serviceItemDBRepository.GetPageFilter(request);
  154. if (!string.IsNullOrWhiteSpace(request.OrganizationCode))
  155. {
  156. filter = filter & Builders<ServiceItemEntity>.Filter.Where(x => x.OrganizationCode == null || x.OrganizationCode == "" || x.OrganizationCode == request.OrganizationCode);
  157. }
  158. else
  159. {
  160. var userFilter = Builders<UserEntity>.Filter.Eq(f => f.Code, request.OperationDoctor);
  161. var userEntity = await _userDBRepository.FindOneAsync(userFilter);
  162. if (userEntity != null && userEntity.RoleCode == "Role_SystemAdministrator")
  163. {
  164. if (request.FilterDefaultItems)
  165. {
  166. filter = filter & Builders<ServiceItemEntity>.Filter.Where(x => x.OrganizationCode == null || x.OrganizationCode == "");
  167. }
  168. }
  169. else
  170. {
  171. filter = filter & Builders<ServiceItemEntity>.Filter.Where(x => x.OrganizationCode == null || x.OrganizationCode == "");
  172. }
  173. }
  174. var pageFilter = new DBPageRequest<ServiceItemEntity>
  175. {
  176. PageIndex = request.PageIndex,
  177. PageSize = request.PageSize,
  178. Filter = filter,
  179. Sort = Builders<ServiceItemEntity>.Sort.Descending(x => x.CreateTime)
  180. };
  181. var pagedResult = await _serviceItemDBRepository.GetPages(pageFilter);
  182. var result = pagedResult.MappingTo<PageCollection<ServiceItemDTO>>();
  183. if (result != null && result.PageData != null && result.PageData.Any() && result.PageData.Any(x => !string.IsNullOrWhiteSpace(x.OrganizationCode)))
  184. {
  185. var orgCodes = result.PageData.Select(x => x.OrganizationCode).Distinct();
  186. var filterOrgs = Builders<OrganizationEntity>.Filter.In(f => f.Code, orgCodes);
  187. var orgList = await _organizationDBRepository.FindAllAsync(filterOrgs);
  188. foreach (var item in result.PageData)
  189. {
  190. item.OrganizationName = orgList.FirstOrDefault(x => x.Code == item.OrganizationCode)?.OrganizationName ?? string.Empty;
  191. }
  192. }
  193. return result;
  194. }
  195. /// <summary>
  196. ///删除服务项
  197. /// </summary>
  198. /// <param name="request">remove request</param>
  199. /// <returns></returns>
  200. public async Task<bool> RemovetServiceItemAsync(RemovetServiceItemDBRequest request)
  201. {
  202. return await _serviceItemDBRepository.DeleteOneAsync("Code", request.Code);
  203. }
  204. /// <summary>
  205. ///获取所有服务项集合
  206. /// </summary>
  207. /// <param name="request">get list request</param>
  208. /// <returns></returns>
  209. public async Task<List<ServiceItemDTO>> GetServiceItemListAsync(GetServiceItemListDBRequest request)
  210. {
  211. var filter = Builders<ServiceItemEntity>.Filter.In(f => f.Code, request.Codes);
  212. var result = await _serviceItemDBRepository.FindAllAsync(filter);
  213. return result.MappingTo<List<ServiceItemDTO>>();
  214. }
  215. /// <summary>
  216. /// 更新服务项目
  217. /// </summary>
  218. /// <param name="request">update request</param>
  219. /// <returns></returns>
  220. public async Task<bool> UpdateServiceItemAsync(UpdateServiceItemDBRequest request)
  221. {
  222. var filter = Builders<ServiceItemEntity>.Filter.Eq(f => f.Code, request.Code);
  223. var update = Builders<ServiceItemEntity>.Update
  224. .Set(f => f.Name, request.Name)
  225. .Set(f => f.Content, request.Content)
  226. .Set(f => f.ServiceItemType, request.ServiceItemType)
  227. .Set(f => f.ServiceNumber, request.ServiceNumber)
  228. .Set(f => f.Department, request.Department)
  229. .Set(f => f.GuidancePrice, request.GuidancePrice)
  230. .Set(f => f.AdjustedPrice, request.AdjustedPrice)
  231. .Set(f => f.TotalPrice, request.TotalPrice)
  232. .Set(f => f.PriceExplanation, request.PriceExplanation)
  233. .Set(f => f.OrganizationCode, request.OrganizationCode)
  234. .Set(f => f.UpdateTime, DateTime.UtcNow);
  235. return await _serviceItemDBRepository.UpdateOneAsync(filter, update) > 0;
  236. }
  237. /// <summary>
  238. /// 服务包设定人群分标签
  239. /// </summary>
  240. /// <param name="request">update request</param>
  241. /// <returns></returns>
  242. public async Task<bool> UpdateServicePackForLabelsAsync(UpdateServicePackForLabelsDBRequest request)
  243. {
  244. var filter = Builders<ServicePackEntity>.Filter.Eq(f => f.Code, request.Code);
  245. var update = Builders<ServicePackEntity>.Update
  246. .Set(f => f.Labels, request.Labels)
  247. .Set(f => f.UpdateTime, DateTime.UtcNow);
  248. return await _servicePackDBRepository.UpdateOneAsync(filter, update) > 0;
  249. }
  250. }
  251. }