SurgeryArrangementService.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package thyyxxk.webserver.service.surgicalmanagement;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.stereotype.Service;
  5. import thyyxxk.webserver.config.exception.ExceptionEnum;
  6. import thyyxxk.webserver.dao.his.surgicalmanagement.SurgeryArrangementDao;
  7. import thyyxxk.webserver.entity.ResultVo;
  8. import thyyxxk.webserver.entity.dictionary.CodeName;
  9. import thyyxxk.webserver.entity.surgeryarrangement.QuerySurgeryParams;
  10. import thyyxxk.webserver.entity.zhuyuanyisheng.shoushu.OpRecord;
  11. import thyyxxk.webserver.service.redislike.RedisLikeService;
  12. import thyyxxk.webserver.utils.ListUtil;
  13. import thyyxxk.webserver.utils.ResultVoUtil;
  14. import thyyxxk.webserver.utils.StringUtil;
  15. import thyyxxk.webserver.utils.TokenUtil;
  16. import java.util.ArrayList;
  17. import java.util.HashMap;
  18. import java.util.List;
  19. import java.util.Map;
  20. @Service
  21. @Slf4j
  22. public class SurgeryArrangementService {
  23. private final SurgeryArrangementDao dao;
  24. private final RedisLikeService redis;
  25. private static final String[] OP_RECORD_COLUMNS = {"room_code", "op_datetime", "remark",
  26. "arrangement_executed", "urgent_clinic_flag", "preoperative_visit", "preoperative_preparation"};
  27. public SurgeryArrangementService(SurgeryArrangementDao dao, RedisLikeService redis) {
  28. this.dao = dao;
  29. this.redis = redis;
  30. }
  31. public ResultVo<Map<String, List<CodeName>>> getDicList() {
  32. Map<String, List<CodeName>> map = new HashMap<>();
  33. map.put("allRooms", dao.selectSurgeryRooms());
  34. map.put("allWards", dao.getAllSurgicalWard());
  35. map.put("surStaffs", dao.selectStaffsByDeptCode("1300000"));
  36. map.put("aneStaffs", dao.selectStaffsByDeptCode("1120000"));
  37. return ResultVoUtil.success(map);
  38. }
  39. public ResultVo<List<OpRecord>> selectSurgeryArrangements(QuerySurgeryParams param) {
  40. QueryWrapper<?> qw = new QueryWrapper<>();
  41. qw.ge("op_datetime", param.getStartTime());
  42. qw.le("op_datetime", param.getEndTime());
  43. if (param.getJzFlag()) {
  44. qw.eq("urgent_clinic_flag", "1");
  45. }
  46. if (!param.getStatus().equals("0")) {
  47. qw.eq("a.status", param.getStatus());
  48. }
  49. if (StringUtil.notBlank(param.getPatNo())) {
  50. qw.eq("a.inpatient_no", param.getPatNo());
  51. }
  52. if (StringUtil.notBlank(param.getWard())) {
  53. qw.eq("a.ward_code", param.getWard());
  54. }
  55. List<OpRecord> list = dao.selectSurgeryArrangements(qw);
  56. if (ListUtil.isBlank(list)) {
  57. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
  58. }
  59. List<OpRecord> canceled = new ArrayList<>();
  60. list.forEach(item -> {
  61. item.setWardName(redis.getDeptName(item.getWardCode()));
  62. item.setApplyDocName(redis.getEmployeeName(item.getApplyDoc()));
  63. item.setDoctorZdName(redis.getEmployeeName(item.getDoctorZd()));
  64. item.setNurseXhName(redis.getEmployeeName(item.getNurseXh()));
  65. item.setNurseQxName(redis.getEmployeeName(item.getNurseQx()));
  66. item.setDoctorMzYsName(redis.getEmployeeName(item.getDoctorMzYs()));
  67. item.setDoctorMzHsName(redis.getEmployeeName(item.getDoctorMzHs()));
  68. if (item.getStatus().equals("d")) {
  69. canceled.add(item);
  70. }
  71. });
  72. list.removeIf(item -> item.getStatus().equals("d"));
  73. list.addAll(canceled);
  74. return ResultVoUtil.success(list);
  75. }
  76. public ResultVo<List<CodeName>> getSurgeryRooms() {
  77. return ResultVoUtil.success(dao.selectSurgeryRooms());
  78. }
  79. public ResultVo<String> updateSurgeryStatus(Integer recordId, String status) {
  80. if (hasArrangementPermission()) {
  81. dao.updateSurgeryStatus(recordId, status);
  82. return ResultVoUtil.success("操作成功。");
  83. }
  84. return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, "操作失败,您没有安排手术的权限。");
  85. }
  86. private boolean isOpRecordColumn(String targetColumn) {
  87. for (String column : OP_RECORD_COLUMNS) {
  88. if (column.equals(targetColumn)) {
  89. return true;
  90. }
  91. }
  92. return false;
  93. }
  94. public ResultVo<String> updateArrangement(Integer recordId, String column, String value) {
  95. if (hasArrangementPermission()) {
  96. String table = isOpRecordColumn(column) ? "op_record" : "op_record_join";
  97. dao.updateArrangement(table, column, value, recordId);
  98. return ResultVoUtil.success();
  99. }
  100. return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, "操作失败,您没有安排手术的权限。");
  101. }
  102. private boolean hasArrangementPermission() {
  103. if (TokenUtil.getTokenUserId().equals("01897")) {
  104. return true;
  105. }
  106. Integer count = dao.selectArrangementPermission(TokenUtil.getTokenUserId());
  107. return null != count && count > 0;
  108. }
  109. }