HospitalDepartmentController.java 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. package com.ruoyi.web.controller.info;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.Set;
  5. import java.util.stream.Collectors;
  6. import javax.validation.constraints.NotEmpty;
  7. import javax.validation.constraints.NotNull;
  8. import org.springframework.validation.annotation.Validated;
  9. import org.springframework.web.bind.annotation.GetMapping;
  10. import org.springframework.web.bind.annotation.PathVariable;
  11. import org.springframework.web.bind.annotation.PostMapping;
  12. import org.springframework.web.bind.annotation.RequestBody;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.RequestParam;
  15. import org.springframework.web.bind.annotation.RestController;
  16. import com.ruoyi.common.annotation.Log;
  17. import com.ruoyi.common.annotation.RepeatSubmit;
  18. import com.ruoyi.common.core.controller.BaseController;
  19. import com.ruoyi.common.core.domain.PageQuery;
  20. import com.ruoyi.common.core.domain.R;
  21. import com.ruoyi.common.core.page.TableDataInfo;
  22. import com.ruoyi.common.core.validate.AddGroup;
  23. import com.ruoyi.common.core.validate.EditGroup;
  24. import com.ruoyi.common.core.validate.QueryGroup;
  25. import com.ruoyi.common.enums.BusinessType;
  26. import com.ruoyi.common.utils.BeanCopyUtils;
  27. import com.ruoyi.common.utils.CollectionUtils;
  28. import com.ruoyi.common.utils.date.LocalDateTimeUtils;
  29. import com.ruoyi.info.hospital.domain.bo.HospitalDepartmentBo;
  30. import com.ruoyi.info.hospital.domain.bo.HospitalDepartmentRackUpdateBo;
  31. import com.ruoyi.info.hospital.domain.bo.HospitalRackUpdateBo;
  32. import com.ruoyi.info.hospital.domain.vo.DepartmentSimpleInfoVo;
  33. import com.ruoyi.info.hospital.domain.vo.HospitalDepartmentVo;
  34. import com.ruoyi.info.hospital.enums.RackStatusEnum;
  35. import com.ruoyi.info.hospital.service.IHospitalDepartmentService;
  36. import com.ruoyi.info.management.domain.TeacherDepartmentRel;
  37. import com.ruoyi.info.management.service.IManagementTeacherService;
  38. import com.ruoyi.info.management.service.ITeacherDepartmentRelService;
  39. import cn.dev33.satoken.annotation.SaCheckPermission;
  40. import cn.hutool.core.collection.CollUtil;
  41. import cn.hutool.core.util.StrUtil;
  42. import io.swagger.annotations.Api;
  43. import io.swagger.annotations.ApiOperation;
  44. import io.swagger.annotations.ApiParam;
  45. import lombok.RequiredArgsConstructor;
  46. import static com.ruoyi.common.utils.CollectionUtils.*;
  47. /**
  48. * 医院科室信息Controller
  49. *
  50. * @author baifc
  51. * @date 2025-09-20
  52. */
  53. @Validated
  54. @Api(value = "医院科室信息控制器", tags = {"医院科室信息管理"})
  55. @RequiredArgsConstructor
  56. @RestController
  57. @RequestMapping("/info/hospitalDepartment")
  58. public class HospitalDepartmentController extends BaseController {
  59. private final IHospitalDepartmentService iHospitalDepartmentService;
  60. private final ITeacherDepartmentRelService iTeacherDepartmentRelService;
  61. /**
  62. * 分页查询医院科室信息列表
  63. */
  64. @ApiOperation("查询医院科室信息列表")
  65. @SaCheckPermission("info:hospitalDepartment:list")
  66. @GetMapping("/page")
  67. public TableDataInfo<HospitalDepartmentVo> page(@Validated(QueryGroup.class) HospitalDepartmentBo bo, PageQuery pageQuery) {
  68. if (bo.getCreateTimeEnd() != null) {
  69. bo.setCreateTimeEnd(LocalDateTimeUtils.getEndOfDate(bo.getCreateTimeEnd()));
  70. }
  71. return iHospitalDepartmentService.queryPageList(bo, pageQuery);
  72. }
  73. /**
  74. * 获取医院科室信息详细信息
  75. */
  76. @ApiOperation("获取医院科室信息详细信息")
  77. @SaCheckPermission("info:hospitalDepartment:query")
  78. @GetMapping("/info/{id}")
  79. public R<HospitalDepartmentVo> getInfo(@ApiParam("主键")
  80. @NotNull(message = "主键不能为空")
  81. @PathVariable("id") Long id) {
  82. return R.ok(iHospitalDepartmentService.queryById(id));
  83. }
  84. /**
  85. * 新增医院科室信息
  86. */
  87. @ApiOperation("新增医院科室信息")
  88. @SaCheckPermission("info:hospitalDepartment:add")
  89. @Log(title = "医院科室信息", businessType = BusinessType.INSERT)
  90. @RepeatSubmit()
  91. @PostMapping("/add")
  92. public R<Void> add(@Validated(AddGroup.class) @RequestBody HospitalDepartmentBo bo) {
  93. return toAjax(iHospitalDepartmentService.insertByBo(bo) ? 1 : 0);
  94. }
  95. /**
  96. * 修改医院科室信息
  97. */
  98. @ApiOperation("修改医院科室信息")
  99. @SaCheckPermission("info:hospitalDepartment:edit")
  100. @Log(title = "医院科室信息", businessType = BusinessType.UPDATE)
  101. @RepeatSubmit()
  102. @PostMapping("/edit")
  103. public R<Void> edit(@Validated(EditGroup.class) @RequestBody HospitalDepartmentBo bo) {
  104. return toAjax(iHospitalDepartmentService.updateByBo(bo) ? 1 : 0);
  105. }
  106. /**
  107. * 删除医院科室信息
  108. */
  109. @ApiOperation("删除医院科室信息")
  110. @SaCheckPermission("info:hospitalDepartment:remove")
  111. @Log(title = "医院科室信息", businessType = BusinessType.DELETE)
  112. @PostMapping("/del/{ids}")
  113. public R<Void> remove(@ApiParam("主键串")
  114. @NotEmpty(message = "主键不能为空")
  115. @PathVariable Long[] ids) {
  116. return toAjax(iHospitalDepartmentService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
  117. }
  118. /**
  119. * 修改医院科室上下架状态
  120. */
  121. @ApiOperation("修改医院科室上下架状态")
  122. @SaCheckPermission("info:hospitalDepartment:edit")
  123. @Log(title = "修改医院科室上下架状态", businessType = BusinessType.UPDATE)
  124. @PostMapping("/updateRackStatus")
  125. public R<Void> updateRackStatus(@Validated @RequestBody HospitalDepartmentRackUpdateBo bo) {
  126. // 修改医院科室上下架
  127. iHospitalDepartmentService.updateRackStatus(bo);
  128. // TODO 如果是禁用状态 则需要强制踢出小程序端的登录用户
  129. return R.ok();
  130. }
  131. /**
  132. * 获取可关联的科室列表
  133. */
  134. @ApiOperation("获取可关联的科室列表")
  135. @GetMapping("/relList")
  136. public R<List<HospitalDepartmentVo>> relList(@Validated(QueryGroup.class) HospitalDepartmentBo bo) {
  137. bo.setRackStatus(RackStatusEnum.UP.getKey());
  138. List<HospitalDepartmentVo> list = iHospitalDepartmentService.queryByHospitalId(bo);
  139. Set<Long> ids = convertSet(list, HospitalDepartmentVo::getId);
  140. List<TeacherDepartmentRel> relList = iTeacherDepartmentRelService.queryByDepartmentIds(ids);
  141. if (CollUtil.isEmpty(relList)) {
  142. return R.ok(list);
  143. }
  144. // 这里需要判断科室的被关联情况
  145. for (HospitalDepartmentVo hospitalDepartmentVo : list) {
  146. TeacherDepartmentRel rel = findFirst(relList,
  147. r -> r.getDepartmentId().equals(hospitalDepartmentVo.getId()));
  148. if (rel != null && !rel.getTeacherId().equals(bo.getTeacherId())) {
  149. // 如果科室已被关联,且当前老师不是关联的,则不可被关联
  150. hospitalDepartmentVo.setRelFlag(true);
  151. }
  152. }
  153. return R.ok();
  154. }
  155. @ApiOperation("获取科室列表简略信息")
  156. @GetMapping("/simpleList")
  157. public R<List<DepartmentSimpleInfoVo>> getTeacherSimpleInfo(
  158. @RequestParam(value = "hospitalId", required = false) Long hospitalId,
  159. @RequestParam(value = "rackStatus", required = false) String rackStatus) {
  160. HospitalDepartmentBo bo = new HospitalDepartmentBo();
  161. bo.setHospitalId(hospitalId);
  162. if (StrUtil.isNotEmpty(rackStatus)) {
  163. bo.setRackStatus(rackStatus);
  164. }
  165. List<HospitalDepartmentVo> departmentList = iHospitalDepartmentService.queryByHospitalId(bo);
  166. List<DepartmentSimpleInfoVo> simpleDepartmentList = BeanCopyUtils.copyList(departmentList, DepartmentSimpleInfoVo.class);
  167. return R.ok(simpleDepartmentList);
  168. }
  169. }