医院管理

注册登录
首页医院列表
This commit is contained in:
zhaoyz 2024-03-21 10:03:52 +08:00
parent 47508f9294
commit e17f93d517
11 changed files with 294 additions and 35 deletions

View File

@ -0,0 +1,28 @@
package com.rax.admin.api.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "医院信息")
public class HospitalDTO {
@Schema(description = "主键")
private Long id;
@Schema(description = "医院名称")
private String name;
@Schema(description = "编码")
private String code;
@Schema(description = "医院所在省")
private String province;
@Schema(description = "医院所在市")
private String city;
@Schema(description = "状态,正常 0 冻结 1")
private Boolean status;
}

View File

@ -39,4 +39,16 @@ public class UserDTO extends SysUser {
@Schema(description = "新密码")
private String newpassword1;
/**
* 验证码
*/
@Schema(description = "验证码")
private String code;
/**
* 随机值
*/
@Schema(description = "随机值")
private String randomStr;
}

View File

@ -144,4 +144,10 @@ public class SysUser implements Serializable {
@Schema(description = "邮箱")
private String email;
@Schema(description = "性别")
private String sex;
@Schema(description = "医院")
private String hospital;
}

View File

@ -0,0 +1,56 @@
package com.rax.admin.controller;
import com.rax.admin.api.dto.HospitalDTO;
import com.rax.admin.api.entity.SysHospital;
import com.rax.admin.service.SysHospitalService;
import com.rax.common.core.util.R;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/hospital")
@Tag(description = "hospital", name = "医院管理模块")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class SysHospitalController {
@Autowired
private SysHospitalService sysHospitalService;
@PostMapping("/getHospitalById")
R<SysHospital> getHospitalById(String id) {
return sysHospitalService.getHospitalById(id);
}
@PostMapping("/deleteHospitalById")
R<Boolean> deleteHospitalById(String id) {
return sysHospitalService.deleteHospitalById(id);
}
@PostMapping("/updateHospital")
R<Boolean> updateHospital(HospitalDTO hospitalDTO) {
return sysHospitalService.updateHospital(hospitalDTO);
}
@PostMapping("/saveHospital")
R<Boolean> saveHospital(HospitalDTO hospitalDTO) {
return sysHospitalService.saveHospital(hospitalDTO);
}
@PostMapping("/getHospitalPage")
R<Map> getHospitalPage(String name, long offset, long limit) {
return sysHospitalService.getHospitalList(name, offset, limit);
}
@RequestMapping("/getHospitalList")
R<List> getHospitalList(String name) {
return sysHospitalService.getHospitalList(name);
}
}

View File

@ -0,0 +1,9 @@
package com.rax.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.rax.admin.api.entity.SysHospital;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SysHospitalMapper extends BaseMapper<SysHospital> {
}

View File

@ -0,0 +1,28 @@
package com.rax.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rax.admin.api.dto.HospitalDTO;
import com.rax.admin.api.entity.SysHospital;
import com.rax.common.core.util.R;
import java.util.List;
import java.util.Map;
/**
* 医院信息
*/
public interface SysHospitalService extends IService<SysHospital> {
R<SysHospital> getHospitalById(String id);
R<Boolean> deleteHospitalById(String id);
R<Boolean> updateHospital(HospitalDTO hospitalDTO);
R<Boolean> saveHospital(HospitalDTO hospitalDTO);
R<Map> getHospitalList(String name, long offset, long limit);
R<List> getHospitalList(String name);
}

View File

@ -0,0 +1,97 @@
package com.rax.admin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.rax.admin.api.dto.HospitalDTO;
import com.rax.admin.api.entity.SysHospital;
import com.rax.admin.mapper.SysHospitalMapper;
import com.rax.admin.service.SysHospitalService;
import com.rax.common.core.util.R;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class SysHospitalServiceImpl extends ServiceImpl<SysHospitalMapper, SysHospital> implements SysHospitalService {
@Autowired
private SysHospitalMapper sysHospitalMapper;
public R<SysHospital> getHospitalById(String id) {
SysHospital sysHospital = getById(id);
return R.ok(sysHospital);
}
@Override
public R<Boolean> deleteHospitalById(String id) {
boolean status = removeById(id);
return R.ok(status);
}
@Override
public R<Boolean> updateHospital(HospitalDTO hospitalDTO) {
SysHospital sysHospital = new SysHospital();
BeanUtils.copyProperties(hospitalDTO, sysHospital);
boolean status = updateById(sysHospital);
return R.ok(status);
}
@Override
public R<Boolean> saveHospital(HospitalDTO hospitalDTO) {
SysHospital sysHospital = new SysHospital();
BeanUtils.copyProperties(hospitalDTO, sysHospital);
boolean status = save(sysHospital);
return R.ok(status);
}
@Override
public R<Map> getHospitalList(String name, long offset, long limit) {
Page<SysHospital> page = new Page<>();
page.setSize(limit);
page.setCurrent(offset);
QueryWrapper<SysHospital> queryWrapper = new QueryWrapper<>();
if (StringUtils.hasText(name)) {
queryWrapper.checkSqlInjection().like("name", name);
}
queryWrapper.eq("deleted", 0);
List<OrderItem> orderItems = new ArrayList<>();
OrderItem createTimeOrder = new OrderItem();
createTimeOrder.setColumn("create_time");
createTimeOrder.setAsc(false);
orderItems.add(createTimeOrder);
page.setOrders(orderItems);
List<SysHospital> sysHospitals = sysHospitalMapper.selectList(page, queryWrapper);
Long count = sysHospitalMapper.selectCount(queryWrapper);
Map result = new HashMap();
result.put("count", count);
result.put("list", sysHospitals);
return R.ok(result);
}
@Override
public R<List> getHospitalList(String name) {
QueryWrapper<SysHospital> queryWrapper = new QueryWrapper<>();
if (StringUtils.hasText(name)) {
queryWrapper.checkSqlInjection().like("name", name);
}
queryWrapper.eq("deleted", 0);
queryWrapper.orderByDesc("create_time");
String [] columns = {"id", "name", "code", "status", "domain", "province", "city"};
queryWrapper.select(columns);
List sysHospitals = sysHospitalMapper.selectMaps(queryWrapper);
return R.ok(sysHospitals);
}
}

View File

@ -31,10 +31,12 @@ import org.springframework.beans.BeanUtils;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindingResult;
import java.time.LocalDateTime;
@ -65,8 +67,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
private final CacheManager cacheManager;
private final RedisTemplate redisTemplate;
/**
* 保存用户信息
*
* @param userDto DTO 对象
* @return success/fail
*/
@ -95,7 +100,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
String defaultRole = ParamResolver.getStr("USER_DEFAULT_ROLE");
// 默认角色
SysRole sysRole = sysRoleService
.getOne(Wrappers.<SysRole>lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
.getOne(Wrappers.<SysRole>lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
userDto.setRole(Collections.singletonList(sysRole.getRoleId()));
}
@ -111,6 +116,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 通过查用户的全部信息
*
* @param sysUser 用户
* @return
*/
@ -120,19 +126,19 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
userInfo.setSysUser(sysUser);
// 设置角色列表 ID
List<Long> roleIds = sysRoleService.findRolesByUserId(sysUser.getUserId())
.stream()
.map(SysRole::getRoleId)
.collect(Collectors.toList());
.stream()
.map(SysRole::getRoleId)
.collect(Collectors.toList());
userInfo.setRoles(ArrayUtil.toArray(roleIds, Long.class));
// 设置权限列表menu.permission
Set<String> permissions = new HashSet<>();
roleIds.forEach(roleId -> {
List<String> permissionList = sysMenuService.findMenuByRoleId(roleId)
.stream()
.filter(menu -> StrUtil.isNotEmpty(menu.getPermission()))
.map(SysMenu::getPermission)
.collect(Collectors.toList());
.stream()
.filter(menu -> StrUtil.isNotEmpty(menu.getPermission()))
.map(SysMenu::getPermission)
.collect(Collectors.toList());
permissions.addAll(permissionList);
});
userInfo.setPermissions(ArrayUtil.toArray(permissions, String.class));
@ -141,7 +147,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 分页查询用户信息含有角色信息
* @param page 分页对象
*
* @param page 分页对象
* @param userDTO 参数列表
* @return
*/
@ -152,6 +159,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 通过ID查询用户信息
*
* @param id 用户ID
* @return 用户信息
*/
@ -162,6 +170,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 删除用户
*
* @param ids 用户ID 列表
* @return Boolean
*/
@ -231,6 +240,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 查询全部的用户
*
* @param userDTO 查询条件
* @return list
*/
@ -243,14 +253,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
UserExcelVO excelVO = new UserExcelVO();
BeanUtils.copyProperties(userVO, excelVO);
String roleNameList = userVO.getRoleList()
.stream()
.map(SysRole::getRoleName)
.collect(Collectors.joining(StrUtil.COMMA));
.stream()
.map(SysRole::getRoleName)
.collect(Collectors.joining(StrUtil.COMMA));
excelVO.setRoleNameList(roleNameList);
String postNameList = userVO.getPostList()
.stream()
.map(SysPost::getPostName)
.collect(Collectors.joining(StrUtil.COMMA));
.stream()
.map(SysPost::getPostName)
.collect(Collectors.joining(StrUtil.COMMA));
excelVO.setPostNameList(postNameList);
return excelVO;
}).collect(Collectors.toList());
@ -259,7 +269,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* excel 导入用户, 插入正确的 错误的提示行号
* @param excelVOList excel 列表数据
*
* @param excelVOList excel 列表数据
* @param bindingResult 错误数据
* @return ok fail
*/
@ -279,7 +290,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
Set<String> errorMsg = new HashSet<>();
// 校验用户名是否存在
boolean exsitUserName = userList.stream()
.anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
.anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
if (exsitUserName) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername()));
@ -287,8 +298,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 判断输入的部门名称列表是否合法
Optional<SysDept> deptOptional = deptList.stream()
.filter(dept -> excel.getDeptName().equals(dept.getName()))
.findFirst();
.filter(dept -> excel.getDeptName().equals(dept.getName()))
.findFirst();
if (!deptOptional.isPresent()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptName()));
}
@ -296,8 +307,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 判断输入的角色名称列表是否合法
List<String> roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA);
List<SysRole> roleCollList = roleList.stream()
.filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
.collect(Collectors.toList());
.filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
.collect(Collectors.toList());
if (roleCollList.size() != roleNameList.size()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_ROLENAME_INEXISTENCE, excel.getRoleNameList()));
@ -306,8 +317,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 判断输入的部门名称列表是否合法
List<String> postNameList = StrUtil.split(excel.getPostNameList(), StrUtil.COMMA);
List<SysPost> postCollList = postList.stream()
.filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name)))
.collect(Collectors.toList());
.filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name)))
.collect(Collectors.toList());
if (postCollList.size() != postNameList.size()) {
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_POSTNAME_INEXISTENCE, excel.getPostNameList()));
@ -316,8 +327,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 数据合法情况
if (CollUtil.isEmpty(errorMsg)) {
insertExcelUser(excel, deptOptional, roleCollList, postCollList);
}
else {
} else {
// 数据不合法情况
errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg));
}
@ -357,12 +367,26 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 注册用户 赋予用户默认角色
*
* @param userDto 用户信息
* @return success/false
*/
@Override
@Transactional(rollbackFor = Exception.class)
public R<Boolean> registerUser(UserDTO userDto) {
String codeCache = (String) redisTemplate.opsForValue().get(CacheConstants.DEFAULT_CODE_KEY + userDto.getRandomStr());
if (StringUtils.hasText(codeCache)) {
String code = userDto.getCode();
if (StringUtils.hasText(code)) {
if (!codeCache.equals(code)) {
return R.failed("验证码输入错误");
}
} else {
return R.failed("请输入验证码");
}
} else {
return R.failed("验证码已失效");
}
// 判断用户名是否存在
SysUser sysUser = this.getOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, userDto.getUsername()));
if (sysUser != null) {
@ -374,6 +398,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 锁定用户
*
* @param username 用户名
* @return
*/
@ -412,8 +437,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
String password = ENCODER.encode(userDto.getNewpassword1());
this.update(Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getPassword, password)
.eq(SysUser::getUserId, userVO.getUserId()));
.set(SysUser::getPassword, password)
.eq(SysUser::getUserId, userVO.getUserId()));
return R.ok();
}
@ -427,8 +452,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
if (!ENCODER.matches(password, sysUser.getPassword())) {
log.info("原密码错误");
return R.failed("密码输入错误");
}
else {
} else {
return R.ok();
}
}

View File

@ -77,6 +77,7 @@ security:
- /actuator/**
- /code/**
- /rax/**
- /hospital/getHospitalList
# 临时白名单
- /static/**
# - /topic/**

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.rax.admin.mapper.SysHospitalMapper">
</mapper>

View File

@ -52,10 +52,4 @@ public class MedicineController {
throw new AccessDeniedException("Access is denied");
}
}
/* @MessageMapping("/getMedicineFlag")
@SendTo("/topic/medicineFlag")
public R getMedicineFlag(String id, String name) {
}*/
}