You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

554 lines
23 KiB

2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Http;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Microsoft.Extensions.Configuration;
  5. using Shentun.Peis.Enums;
  6. using Shentun.Peis.GuideTypes;
  7. using Shentun.Peis.Models;
  8. using Shentun.Peis.PatientRegisters;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using Volo.Abp;
  15. using Volo.Abp.Application.Services;
  16. using Volo.Abp.Domain.Repositories;
  17. using Volo.Abp.Identity;
  18. namespace Shentun.Peis.RegisterCheckPictures
  19. {
  20. /// <summary>
  21. /// 体检登记组合项目图片
  22. /// </summary>
  23. [ApiExplorerSettings(GroupName = "Work")]
  24. [Authorize]
  25. public class RegisterCheckPictureAppService : ApplicationService
  26. {
  27. private readonly IRepository<IdentityUser, Guid> _userRepository;
  28. private readonly IRepository<RegisterCheckPicture, Guid> _registerCheckPictureRepository;
  29. private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
  30. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  31. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  32. private readonly IRepository<LisRequest, Guid> _lisRequestRepository;
  33. private readonly RegisterCheckPictureManager _registerCheckPictureManager;
  34. private readonly IConfiguration _configuration;
  35. public RegisterCheckPictureAppService(
  36. IRepository<RegisterCheckPicture, Guid> registerCheckPictureRepository,
  37. RegisterCheckPictureManager registerCheckPictureManager,
  38. IRepository<IdentityUser, Guid> userRepository,
  39. IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
  40. IConfiguration configuration,
  41. IRepository<RegisterCheck, Guid> registerCheckRepository,
  42. IRepository<PatientRegister, Guid> patientRegisterRepository,
  43. IRepository<LisRequest, Guid> lisRequestRepository)
  44. {
  45. _registerCheckPictureRepository = registerCheckPictureRepository;
  46. _registerCheckPictureManager = registerCheckPictureManager;
  47. _userRepository = userRepository;
  48. _registerCheckAsbitemRepository = registerCheckAsbitemRepository;
  49. _configuration = configuration;
  50. _registerCheckRepository = registerCheckRepository;
  51. _patientRegisterRepository = patientRegisterRepository;
  52. _lisRequestRepository = lisRequestRepository;
  53. }
  54. /// <summary>
  55. /// 根据RegisterCheckId获取列表
  56. /// </summary>
  57. /// <param name="RegisterCheckId">RegisterCheck表ID</param>
  58. /// <returns></returns>
  59. [HttpGet("api/app/registercheckpicture/getregistercheckpictureinregistercheckid")]
  60. public async Task<List<RegisterCheckPictureDto>> GetRegisterCheckPictureInRegisterCheckIdAsync(Guid RegisterCheckId)
  61. {
  62. var query = from a in await _registerCheckPictureRepository.GetQueryableAsync()
  63. join b in await _userRepository.GetQueryableAsync() on a.CreatorId equals b.Id into bb
  64. from ab in bb.DefaultIfEmpty()
  65. join c in await _userRepository.GetQueryableAsync() on a.LastModifierId equals c.Id into cc
  66. from ac in cc.DefaultIfEmpty()
  67. where a.RegisterCheckId == RegisterCheckId
  68. select new
  69. {
  70. a,
  71. CreatorName = ab != null ? ab.Surname : "",
  72. LastModifierName = ac != null ? ac.Surname : ""
  73. };
  74. var entlistdto = query.Select(s => new RegisterCheckPictureDto
  75. {
  76. Id = s.a.Id,
  77. RegisterCheckId = s.a.RegisterCheckId,
  78. CreationTime = s.a.CreationTime,
  79. CreatorId = s.a.CreatorId,
  80. DisplayOrder = s.a.DisplayOrder,
  81. IsPrint = s.a.IsPrint,
  82. LastModificationTime = s.a.LastModificationTime,
  83. LastModifierId = s.a.LastModifierId,
  84. PictureFilename = s.a.PictureFilename,
  85. LastModifierName = s.LastModifierName,
  86. CreatorName = s.CreatorName
  87. }).OrderBy(o => o.DisplayOrder).ToList();
  88. return entlistdto;
  89. }
  90. /// <summary>
  91. /// 创建以及更新 批量操作 排序值不传就默认按传过来的顺序生成
  92. /// </summary>
  93. /// <param name="input"></param>
  94. /// <returns></returns>
  95. [HttpPost("api/app/registercheckpicture/UpdateRegisterCheckPictureStatusMany")]
  96. public async Task UpdateRegisterCheckPictureStatusManyAsync(List<UpdateRegisterCheckPictureStatusManyDto> input)
  97. {
  98. if (!input.Any())
  99. {
  100. throw new UserFriendlyException("请求参数有误");
  101. }
  102. List<RegisterCheckPicture> entlist_insert = new List<RegisterCheckPicture>();
  103. List<RegisterCheckPicture> entlist_update = new List<RegisterCheckPicture>();
  104. string PicName = DateTime.Now.ToString("yyyyMMddHHmmss");
  105. foreach (var item in input)
  106. {
  107. var ent = await _registerCheckPictureRepository.FirstOrDefaultAsync(m => m.Id == item.RegisterCheckPictureId);
  108. if (ent != null)
  109. {
  110. ent.DisplayOrder = input.IndexOf(item) + 1;
  111. // ent.PictureFilename = item.PictureFilename;
  112. ent.IsPrint = item.IsPrint;
  113. entlist_update.Add(ent);
  114. }
  115. }
  116. if (entlist_update.Any())
  117. {
  118. await _registerCheckPictureRepository.UpdateManyAsync(entlist_update);
  119. }
  120. }
  121. /// <summary>
  122. /// 图片上传功能 base64 支持批量
  123. /// </summary>
  124. /// <param name="input"></param>
  125. /// <returns></returns>
  126. /// <exception cref="UserFriendlyException"></exception>
  127. [HttpPost("api/app/registercheckpicture/uploadregistercheckpicturemany")]
  128. public async Task<List<string>> UploadRegisterCheckPictureManyAsync(UploadRegisterCheckPictureManyDto input)
  129. {
  130. Random rd = new Random();
  131. string AbsolutePath = _configuration.GetValue<string>("VirtualPath:RealPath");
  132. string AbsoluteName = _configuration.GetValue<string>("VirtualPath:Alias");
  133. List<string> msg = new List<string>();
  134. if (!input.PictureBaseStrs.Any())
  135. {
  136. throw new UserFriendlyException("请求参数有误");
  137. }
  138. string PatientRegisterId = "";
  139. var patientRegisterCompleteFlag = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  140. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  141. where registerCheck.Id == input.RegisterCheckId
  142. select new
  143. {
  144. CompleteFlag = patientRegister.CompleteFlag
  145. }).ToList();
  146. if (patientRegisterCompleteFlag.Count == 0)
  147. throw new UserFriendlyException("体检人员不存在");
  148. if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
  149. throw new UserFriendlyException("预登记人员不能导入图片");
  150. if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.SumCheck)
  151. throw new UserFriendlyException("已总检人员不能导入图片");
  152. List<RegisterCheckPicture> entlist_insert = new List<RegisterCheckPicture>();
  153. foreach (var item in input.PictureBaseStrs)
  154. {
  155. //string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath(AbsolutePath, item,
  156. // PatientRegisterId,
  157. // input.RegisterCheckId.ToString(),
  158. // PicName + "_" + (input.PictureBaseStrs.IndexOf(item) + 1));
  159. string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath(AbsolutePath, item.FileName, item.PictureBaseStr,
  160. PatientRegisterId,
  161. input.RegisterCheckId.ToString(), AbsoluteName);
  162. if (string.IsNullOrEmpty(PictureUrl))
  163. {
  164. throw new UserFriendlyException("图片数据有误");
  165. }
  166. var ent = await _registerCheckPictureRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == input.RegisterCheckId
  167. && m.PictureFilename == PictureUrl);
  168. if (ent != null)
  169. {
  170. ent.PictureFilename = PictureUrl;
  171. await _registerCheckPictureRepository.UpdateAsync(ent);
  172. }
  173. else
  174. {
  175. ent = new RegisterCheckPicture
  176. {
  177. DisplayOrder = input.PictureBaseStrs.IndexOf(item) + 1,
  178. IsPrint = 'Y',
  179. PictureFilename = PictureUrl,
  180. RegisterCheckId = input.RegisterCheckId,
  181. PictureFileType = input.PictureFileType
  182. };
  183. await _registerCheckPictureRepository.InsertAsync(ent);
  184. }
  185. msg.Add(PictureUrl);
  186. }
  187. return msg;
  188. }
  189. /// <summary>
  190. /// 图片上传功能 文件流 支持批量
  191. /// </summary>
  192. /// <param name="files"></param>
  193. /// <param name="RegisterCheckId"></param>
  194. /// <returns></returns>
  195. /// <exception cref="UserFriendlyException"></exception>
  196. [RemoteService(false)]
  197. [HttpPost("api/app/registercheckpicture/uploadregistercheckpicturefilemany")]
  198. public async Task<List<string>> UploadRegisterCheckPictureFileManyAsync([FromForm(Name = "file")] List<IFormFile> files, Guid RegisterCheckId)
  199. {
  200. Random rd = new Random();
  201. string AbsolutePath = _configuration.GetValue<string>("VirtualPath:RealPath");
  202. List<string> msg = new List<string>();
  203. if (!files.Any())
  204. {
  205. throw new UserFriendlyException("请求参数有误");
  206. }
  207. string PatientRegisterId = "";
  208. var registerAsbitemEntity = await _registerCheckAsbitemRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == RegisterCheckId);
  209. if (registerAsbitemEntity != null)
  210. {
  211. PatientRegisterId = registerAsbitemEntity.PatientRegisterId.ToString();
  212. }
  213. else
  214. {
  215. throw new UserFriendlyException("体检人员不存在");
  216. }
  217. string PicName = DateTime.Now.ToString("yyyyMMddHHmmss") + rd.Next(1000, 9999);
  218. List<RegisterCheckPicture> entlist_insert = new List<RegisterCheckPicture>();
  219. foreach (var item in files)
  220. {
  221. string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath2(AbsolutePath, item,
  222. PatientRegisterId,
  223. RegisterCheckId.ToString(),
  224. PicName + "_" + (files.IndexOf(item) + 1));
  225. if (string.IsNullOrEmpty(PictureUrl))
  226. {
  227. throw new UserFriendlyException("图片数据有误");
  228. }
  229. var ent = new RegisterCheckPicture
  230. {
  231. DisplayOrder = files.IndexOf(item) + 1,
  232. IsPrint = 'N',
  233. PictureFilename = PictureUrl,
  234. RegisterCheckId = RegisterCheckId
  235. };
  236. entlist_insert.Add(ent);
  237. msg.Add(PictureUrl);
  238. }
  239. if (entlist_insert.Any())
  240. {
  241. await _registerCheckPictureRepository.InsertManyAsync(entlist_insert);
  242. }
  243. return msg;
  244. }
  245. /// <summary>
  246. /// 删除 批量
  247. /// </summary>
  248. /// <param name="ids"></param>
  249. /// <returns></returns>
  250. /// <exception cref="UserFriendlyException"></exception>
  251. [HttpPost("api/app/registercheckpicture/deleteregistercheckpicturemany")]
  252. public async Task DeleteRegisterCheckPictureManyAsync(List<Guid> ids)
  253. {
  254. if (ids.Any())
  255. {
  256. var patientRegisterCompleteFlag = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  257. join registerCheck in await _registerCheckRepository.GetQueryableAsync()
  258. on patientRegister.Id equals registerCheck.PatientRegisterId
  259. join registerCheckPicture in await _registerCheckPictureRepository.GetQueryableAsync()
  260. on registerCheck.Id equals registerCheckPicture.RegisterCheckId
  261. where ids.Contains(registerCheckPicture.Id)
  262. select new
  263. {
  264. CompleteFlag = patientRegister.CompleteFlag
  265. }).ToList();
  266. if (patientRegisterCompleteFlag.Count == 0)
  267. throw new UserFriendlyException("Id不存在");
  268. if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.SumCheck)
  269. {
  270. throw new UserFriendlyException("已总检人员不能删除图片");
  271. }
  272. await _registerCheckPictureRepository.DeleteAsync(m => ids.Contains(m.Id));
  273. }
  274. else
  275. {
  276. throw new UserFriendlyException("请求参数有误");
  277. }
  278. }
  279. /// <summary>
  280. /// 导入检查图片 根据检查单号
  281. /// </summary>
  282. /// <returns></returns>
  283. [HttpPost("api/app/RegisterCheckPicture/ImportRegisterCheckPicture")]
  284. public async Task ImportRegisterCheckPictureAsync(ImportRegisterCheckPictureInputDto input)
  285. {
  286. var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.CheckRequestNo == input.CheckRequestNo);
  287. if (registerCheckEnt == null)
  288. throw new UserFriendlyException("检查条码号不正确");
  289. if (string.IsNullOrWhiteSpace(input.PictureBase64))
  290. throw new UserFriendlyException("图片不能为空");
  291. var pic = new List<UploadRegisterCheckPictureManyPictureBaseStrsDto>();
  292. pic.Add(new UploadRegisterCheckPictureManyPictureBaseStrsDto
  293. {
  294. FileName = input.PictureName,
  295. PictureBaseStr = input.PictureBase64
  296. });
  297. await UploadRegisterCheckPictureManyAsync(new UploadRegisterCheckPictureManyDto
  298. {
  299. PictureBaseStrs = pic,
  300. PictureFileType = '0',
  301. RegisterCheckId = registerCheckEnt.Id
  302. });
  303. }
  304. /// <summary>
  305. /// 导入检查图片 根据人员条码号+项目ID
  306. /// </summary>
  307. /// <returns></returns>
  308. [HttpPost("api/app/RegisterCheckPicture/ImportRegisterCheckPictureByPatientRegisterNo")]
  309. public async Task ImportRegisterCheckPictureByPatientRegisterNoAsync(ImportRegisterCheckPictureByPatientRegisterNoInputDto input)
  310. {
  311. var registerCheckList = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  312. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  313. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  314. where patientRegister.PatientRegisterNo == input.PatientRegisterNo && registerCheckAsbitem.AsbitemId == input.AsbitemId
  315. select registerCheck).ToList();
  316. if (!registerCheckList.Any())
  317. throw new UserFriendlyException("人员信息或项目信息不正确");
  318. if (string.IsNullOrWhiteSpace(input.PictureBase64))
  319. throw new UserFriendlyException("图片不能为空");
  320. var pic = new List<UploadRegisterCheckPictureManyPictureBaseStrsDto>();
  321. pic.Add(new UploadRegisterCheckPictureManyPictureBaseStrsDto
  322. {
  323. FileName = input.PictureName,
  324. PictureBaseStr = input.PictureBase64
  325. });
  326. foreach (var registerCheck in registerCheckList)
  327. {
  328. await UploadRegisterCheckPictureManyAsync(new UploadRegisterCheckPictureManyDto
  329. {
  330. PictureBaseStrs = pic,
  331. PictureFileType = '0',
  332. RegisterCheckId = registerCheck.Id
  333. });
  334. }
  335. }
  336. /// <summary>
  337. /// 导入检查图片 根据检验申请号
  338. /// </summary>
  339. /// <returns></returns>
  340. [HttpPost("api/app/RegisterCheckPicture/ImportRegisterCheckPictureByLisRequestNo")]
  341. public async Task ImportRegisterCheckPictureByLisRequestNoAsync(ImportRegisterCheckPictureByLisRequestNoInputDto input)
  342. {
  343. var registerCheckList = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
  344. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  345. join lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id
  346. where lisRequest.LisRequestNo == input.LisRequestNo && registerCheckAsbitem.AsbitemId == input.AsbitemId
  347. select registerCheck).ToList();
  348. if (!registerCheckList.Any())
  349. throw new UserFriendlyException("人员信息或项目信息不正确");
  350. if (string.IsNullOrWhiteSpace(input.PictureBase64))
  351. throw new UserFriendlyException("图片不能为空");
  352. var pic = new List<UploadRegisterCheckPictureManyPictureBaseStrsDto>();
  353. pic.Add(new UploadRegisterCheckPictureManyPictureBaseStrsDto
  354. {
  355. FileName = input.PictureName,
  356. PictureBaseStr = input.PictureBase64
  357. });
  358. foreach (var registerCheck in registerCheckList)
  359. {
  360. await UploadRegisterCheckPictureManyAsync(new UploadRegisterCheckPictureManyDto
  361. {
  362. PictureBaseStrs = pic,
  363. PictureFileType = '0',
  364. RegisterCheckId = registerCheck.Id
  365. });
  366. }
  367. }
  368. /// <summary>
  369. /// 仪器采图接口
  370. /// </summary>
  371. /// <param name="input"></param>
  372. /// <returns></returns>
  373. /// <exception cref="UserFriendlyException"></exception>
  374. [HttpPost("api/app/RegisterCheckPicture/InstrumentMapping")]
  375. public async Task<List<string>> InstrumentMappingAsync(InstrumentMappingDto input)
  376. {
  377. Random rd = new Random();
  378. string AbsolutePath = _configuration.GetValue<string>("PacsVirtualPath:RealPath");
  379. string AbsoluteName = _configuration.GetValue<string>("PacsVirtualPath:Alias");
  380. List<string> msg = new List<string>();
  381. if (!input.PictureBaseStrs.Any())
  382. {
  383. throw new UserFriendlyException("请求参数有误");
  384. }
  385. string PatientRegisterId = "";
  386. var patientRegisterCompleteFlag = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  387. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  388. where registerCheck.Id == input.RegisterCheckId
  389. select new
  390. {
  391. CompleteFlag = patientRegister.CompleteFlag
  392. }).ToList();
  393. if (patientRegisterCompleteFlag.Count == 0)
  394. throw new UserFriendlyException("体检人员不存在");
  395. if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
  396. throw new UserFriendlyException("预登记人员不能导入图片");
  397. if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.SumCheck)
  398. throw new UserFriendlyException("已总检人员不能导入图片");
  399. List<RegisterCheckPicture> entlist_insert = new List<RegisterCheckPicture>();
  400. foreach (var item in input.PictureBaseStrs)
  401. {
  402. string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath(AbsolutePath, item.FileName, item.PictureBaseStr,
  403. PatientRegisterId,
  404. input.RegisterCheckId.ToString(), AbsoluteName);
  405. if (string.IsNullOrEmpty(PictureUrl))
  406. {
  407. throw new UserFriendlyException("图片数据有误");
  408. }
  409. var ent = await _registerCheckPictureRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == input.RegisterCheckId
  410. && m.PictureFilename == PictureUrl);
  411. if (ent != null)
  412. {
  413. ent.PictureFilename = PictureUrl;
  414. await _registerCheckPictureRepository.UpdateAsync(ent);
  415. }
  416. else
  417. {
  418. ent = new RegisterCheckPicture
  419. {
  420. DisplayOrder = input.PictureBaseStrs.IndexOf(item) + 1,
  421. IsPrint = 'Y',
  422. PictureFilename = PictureUrl,
  423. RegisterCheckId = input.RegisterCheckId,
  424. PictureFileType = input.PictureFileType,
  425. LocalPathName = item.LocalPathName
  426. };
  427. await _registerCheckPictureRepository.InsertAsync(ent);
  428. }
  429. msg.Add(PictureUrl);
  430. }
  431. return msg;
  432. }
  433. }
  434. }