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.

229 lines
8.4 KiB

6 months ago
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.Extensions.Configuration.UserSecrets;
  4. using Newtonsoft.Json;
  5. using Shentun.PeisReport.Api.Dto;
  6. using SqlSugar;
  7. using System.Data;
  8. namespace Shentun.PeisReport.Api.Controllers
  9. {
  10. [Route("api/[controller]/[action]")]
  11. [ApiController]
  12. [ApiExplorerSettings(GroupName = "QingHaiWuYuanApi")]
  13. public class PeisController : ControllerBase
  14. {
  15. private readonly SqlSugarClient _peisDb;
  16. private readonly IConfiguration _configuration;
  17. private readonly ILogger<PeisController> _logger;
  18. public PeisController(
  19. IConfiguration configuration,
  20. ILogger<PeisController> logger)
  21. {
  22. _configuration = configuration;
  23. _logger = logger;
  24. _peisDb = new SqlSugarClient(new ConnectionConfig()
  25. {
  26. ConnectionString = _configuration.GetSection("ConnectionStrings:Default").Value,
  27. DbType = SqlSugar.DbType.SqlServer,
  28. IsAutoCloseConnection = true
  29. });
  30. }
  31. /// <summary>
  32. /// 根据身份证号码获取体检列表
  33. /// </summary>
  34. /// <param name="input"></param>
  35. /// <returns></returns>
  36. [HttpPost]
  37. public async Task<PatientRegisterListDto> GetPatientRegisterListAsync(IdNoInputDto input)
  38. {
  39. var result = new PatientRegisterListDto
  40. {
  41. Code = 100,
  42. Message = "请求失败"
  43. };
  44. if (string.IsNullOrWhiteSpace(input.IdNo))
  45. {
  46. result.Message = "身份证不能为空";
  47. return result;
  48. }
  49. try
  50. {
  51. var query = await _peisDb.Ado.GetDataTableAsync($"select b.sex_name,a.patient_register_id,a.age,a.barcode_no,a.medical_times," +
  52. $"a.medical_start_date,a.mobile_telephone,a.name as patient_name" +
  53. $" from patient_register as a left join sex as b " +
  54. $" on a.sex_id=b.sex_id where id_card_no='{input.IdNo}' and audit_flag='Y' ");
  55. if (query.Rows.Count > 0)
  56. {
  57. List<PatientRegisterListResultDataDto> patientRegisterList = new List<PatientRegisterListResultDataDto>();
  58. foreach (DataRow row in query.Rows)
  59. {
  60. patientRegisterList.Add(new PatientRegisterListResultDataDto
  61. {
  62. age = row["age"].ToString(),
  63. barcode_no = row["barcode_no"].ToString(),
  64. medical_date = Convert.ToDateTime(row["medical_start_date"].ToString()).ToString("yyyy-MM-dd"),
  65. medical_time = row["medical_times"].ToString(),
  66. mobile_telephone = row["mobile_telephone"].ToString(),
  67. name = row["patient_name"].ToString(),
  68. patient_register_id = row["patient_register_id"].ToString(),
  69. sex = row["sex_name"].ToString()
  70. });
  71. }
  72. result.Message = "请求成功";
  73. result.Data = patientRegisterList;
  74. result.Code = 200;
  75. }
  76. else
  77. {
  78. result.Code = 100;
  79. result.Message = "身份证号未查到体检数据";
  80. }
  81. }
  82. catch (Exception ex)
  83. {
  84. result.Message = ex.Message;
  85. _logger.LogError($"访问GetPatientRegisterListAsync异常,异常信息:{ex.Message}");
  86. }
  87. return result;
  88. }
  89. /// <summary>
  90. /// 根据人员id获取体检报告地址
  91. /// </summary>
  92. /// <param name="input"></param>
  93. /// <returns></returns>
  94. [HttpPost]
  95. public async Task<PeisReportUrlByPatientRegisterIdDto> GetPeisReportUrlByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
  96. {
  97. var result = new PeisReportUrlByPatientRegisterIdDto
  98. {
  99. Code = 100,
  100. Message = "请求失败"
  101. };
  102. if (string.IsNullOrWhiteSpace(input.PatientRegisterId))
  103. {
  104. result.Message = "人员Id不能为空";
  105. return result;
  106. }
  107. try
  108. {
  109. var query = await _peisDb.Ado.GetDataTableAsync($"select name as patient_name from patient_register where patient_register_id='{input.PatientRegisterId}' and create_pdf_flag='1'");
  110. if (query.Rows.Count > 0)
  111. {
  112. string patientName = query.Rows[0]["patient_name"].ToString();
  113. string directoryDate = input.PatientRegisterId.Substring(0, 6);
  114. string hostAddress = _configuration.GetSection("HostAddress").Value;
  115. string reportVirtual = _configuration.GetSection("ReportVirtualPath:RequestPath").Value;
  116. string reportUrl = $"{hostAddress + reportVirtual}/{directoryDate}/{input.PatientRegisterId}({patientName}).pdf";
  117. result.Message = "请求成功";
  118. result.Data = new PeisReportUrlByPatientRegisterIdResultDataDto { peis_report_url = reportUrl };
  119. result.Code = 200;
  120. }
  121. else
  122. {
  123. result.Code = 100;
  124. result.Message = "未上传报告";
  125. }
  126. }
  127. catch (Exception ex)
  128. {
  129. result.Message = ex.Message;
  130. _logger.LogError($"访问GetPeisReportUrlByPatientRegisterIdAsync异常,异常信息:{ex.Message}");
  131. }
  132. return result;
  133. }
  134. /// <summary>
  135. /// 获取当前人员的排队情况
  136. /// </summary>
  137. /// <param name="input"></param>
  138. /// <returns></returns>
  139. [HttpPost]
  140. public async Task<QueueRegisterByBarCodeNoDto> GetQueueRegisterByBarCodeNoAsync(BarCodeNoInputDto input)
  141. {
  142. var result = new QueueRegisterByBarCodeNoDto
  143. {
  144. Code = 100,
  145. Message = "请求失败"
  146. };
  147. if (string.IsNullOrWhiteSpace(input.BarCodeNo))
  148. {
  149. result.Message = "条码不能为空";
  150. return result;
  151. }
  152. try
  153. {
  154. var query = await _peisDb.Ado.GetDataTableAsync($" select a.queue_register_id,a.room_id,c.room_name,b.name as patient_name from queue_register as a " +
  155. $" left join patient_register as b on a.patient_register_id=b.patient_register_id " +
  156. $" left join room as c on a.room_id=c.room_id " +
  157. $" where b.barcode_no='{input.BarCodeNo}' and a.complete_flag='0' and created_date >= convert(varchar(10),getdate(),121)");
  158. if (query.Rows.Count > 0)
  159. {
  160. string patientName = query.Rows[0]["patient_name"].ToString();
  161. string roomId = query.Rows[0]["room_id"].ToString();
  162. string roomName = query.Rows[0]["room_name"].ToString();
  163. string queueRegisterId = query.Rows[0]["queue_register_id"].ToString();
  164. var queueCount = _peisDb.Ado.SqlQuerySingle<int>($" select count(queue_register_id) as pdcount from queue_register " +
  165. $" where room_id='{roomId}' and complete_flag = '0' and queue_register_id<'{queueRegisterId}' and created_date >= convert(varchar(10),getdate(),121)");
  166. result.Message = "请求成功";
  167. result.Data = new QueueRegisterByBarCodeNoResultDataDto
  168. {
  169. patient_name = patientName,
  170. queue_count = queueCount,
  171. room_name = roomName
  172. };
  173. result.Code = 200;
  174. }
  175. else
  176. {
  177. result.Code = 100;
  178. result.Message = "当前无排队信息";
  179. }
  180. }
  181. catch (Exception ex)
  182. {
  183. result.Message = ex.Message;
  184. _logger.LogError($"访问GetQueueRegisterByBarCodeNoAsync异常,异常信息:{ex.Message}");
  185. }
  186. return result;
  187. }
  188. }
  189. }