|
@@ -13,6 +13,7 @@ import com.lantone.common.dto.GetUserDTO;
|
|
|
import com.lantone.common.dto.GetUserHospitalsDTO;
|
|
|
import com.lantone.common.dto.GetUserPageDTO;
|
|
|
import com.lantone.common.dto.SoftwareDTO;
|
|
|
+import com.lantone.common.dto.UserRoleDTO;
|
|
|
import com.lantone.common.dto.UserSoftwareHospitalDTO;
|
|
|
import com.lantone.common.enums.IsDeleteEnum;
|
|
|
import com.lantone.common.enums.StatusEnum;
|
|
@@ -29,6 +30,7 @@ import com.lantone.common.vo.UpdateUserVO;
|
|
|
import com.lantone.dblayermbg.entity.DeptUser;
|
|
|
import com.lantone.dblayermbg.entity.Hospital;
|
|
|
import com.lantone.dblayermbg.entity.HospitalUser;
|
|
|
+import com.lantone.dblayermbg.entity.MedoupDoctor;
|
|
|
import com.lantone.dblayermbg.entity.Role;
|
|
|
import com.lantone.dblayermbg.entity.User;
|
|
|
import com.lantone.dblayermbg.entity.UserRole;
|
|
@@ -36,9 +38,12 @@ import com.lantone.dblayermbg.facade.DeptFacade;
|
|
|
import com.lantone.dblayermbg.facade.DeptUserFacade;
|
|
|
import com.lantone.dblayermbg.facade.HospitalFacade;
|
|
|
import com.lantone.dblayermbg.facade.HospitalUserFacade;
|
|
|
+import com.lantone.dblayermbg.facade.MedoupDoctorFacade;
|
|
|
import com.lantone.dblayermbg.facade.RoleFacade;
|
|
|
import com.lantone.dblayermbg.facade.UserFacade;
|
|
|
import com.lantone.dblayermbg.facade.UserRoleFacade;
|
|
|
+import com.lantone.security.enums.DataAuthDataTypeEnum;
|
|
|
+import com.lantone.security.enums.DataAuthDetailTypeEnum;
|
|
|
import com.lantone.security.enums.HospitalTypeEnum;
|
|
|
import com.lantone.security.enums.RelationEnum;
|
|
|
import com.lantone.security.service.AuthService;
|
|
@@ -81,6 +86,8 @@ public class UserManagementFacade {
|
|
|
private UserRoleFacade userRoleFacade;
|
|
|
@Autowired
|
|
|
private RoleFacade roleFacade;
|
|
|
+ @Autowired
|
|
|
+ private MedoupDoctorFacade medoupDoctorFacade;
|
|
|
|
|
|
public CommonResult login(LoginVO loginVO) {
|
|
|
Map<String, String> params = new HashMap<>();
|
|
@@ -139,8 +146,15 @@ public class UserManagementFacade {
|
|
|
user.setCreator(SysUserUtils.getCurrentPrincipleId() + "");
|
|
|
user.setGmtCreate(DateUtil.now());
|
|
|
user.setPassword(BCrypt.hashpw(user.getPassword()));
|
|
|
+ if (addUserVO.getJobNo() != null) {
|
|
|
+ addUserVO.setDoctorId(addUserVO.getJobNo());
|
|
|
+ }
|
|
|
//1.1校验用户
|
|
|
- checkUser(user.getUsername(),null, addUserVO.getAddHospitalTreeVO().getHospitals(), addUserVO.getRoles());
|
|
|
+ boolean deptFlag = false;
|
|
|
+ if (ListUtil.isNotEmpty(addUserVO.getAddHospitalTreeVO().getDepts())) {
|
|
|
+ deptFlag = true;
|
|
|
+ }
|
|
|
+ checkUser(user, deptFlag, addUserVO.getAddHospitalTreeVO().getHospitals(), addUserVO.getRoles());
|
|
|
try {
|
|
|
if (userFacade.save(user)) {
|
|
|
//2.插入用户所属组织
|
|
@@ -155,32 +169,32 @@ public class UserManagementFacade {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @param usreName
|
|
|
+ * @param user
|
|
|
* @param hospitals 插入用户组织id
|
|
|
* @param roles 插入用户角色id
|
|
|
* @Description用户校验
|
|
|
* @Return void
|
|
|
*/
|
|
|
- private void checkUser(String usreName, Long userId, List<Long> hospitals, List<Long> roles) {
|
|
|
+ private void checkUser(User user, boolean deptFlag, List<Long> hospitals, List<Long> roles) {
|
|
|
|
|
|
//1.当前登录用户、组织是否还存在、能用
|
|
|
loginCheck();
|
|
|
//2.当前用户是否已存在
|
|
|
//添加时判断
|
|
|
- if (userId == null) {
|
|
|
+ if (user.getId() == null) {
|
|
|
if (userFacade.list(new QueryWrapper<User>()
|
|
|
- .eq("username", usreName)
|
|
|
+ .eq("username", user.getUsername())
|
|
|
.eq("is_deleted", IsDeleteEnum.N.getKey())).size() > 0) {
|
|
|
Asserts.fail("该用户已存在,请更换用户名");
|
|
|
}
|
|
|
//修改时判断
|
|
|
} else {
|
|
|
- User user = userFacade.getById(userId);
|
|
|
+ User userTemp = userFacade.getById(user.getId());
|
|
|
//用户名没有变动
|
|
|
- if (!usreName.equals(user.getName())) {
|
|
|
- if(userFacade.list(new QueryWrapper<User>()
|
|
|
- .eq("username", usreName)
|
|
|
- .eq("is_deleted", IsDeleteEnum.N.getKey())).size()>0){
|
|
|
+ if (!user.getUsername().equals(userTemp.getName())) {
|
|
|
+ if (userFacade.list(new QueryWrapper<User>()
|
|
|
+ .eq("username", user.getUsername())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())).size() > 0) {
|
|
|
Asserts.fail("该用户已存在,请更换用户名");
|
|
|
}
|
|
|
}
|
|
@@ -189,6 +203,68 @@ public class UserManagementFacade {
|
|
|
checkHospitals(hospitals);
|
|
|
//4.校验插入用户角色是否正常
|
|
|
checkRoles(roles);
|
|
|
+ //5.用户如果没有医疗组、科室 绑定角色不能选择本医疗组、全部科室除本科室外、本科室数据权限角色
|
|
|
+ //科室
|
|
|
+ if (!deptFlag) {
|
|
|
+ userDeptCheck(roles);
|
|
|
+ }
|
|
|
+ //医疗组(无医生信息,就不会有医疗组;有医生信息无医疗组)
|
|
|
+ boolean groupFlag = false;
|
|
|
+ if (user.getDoctorId() == null) {
|
|
|
+ groupFlag = true;
|
|
|
+ } else {
|
|
|
+ List<MedoupDoctor> medoupDoctors = medoupDoctorFacade.list(new QueryWrapper<MedoupDoctor>()
|
|
|
+ .eq("dcotor_id", user.getDoctorId())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey()));
|
|
|
+ if (ListUtil.isEmpty(medoupDoctors)) {
|
|
|
+ groupFlag = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!groupFlag) {
|
|
|
+ usermedoupCheck();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param
|
|
|
+ * @Description医疗组校验
|
|
|
+ * @Return void
|
|
|
+ */
|
|
|
+ private void usermedoupCheck() {
|
|
|
+
|
|
|
+ //获取当前用户的角色
|
|
|
+ List<Long> dataTypes = new ArrayList<>();
|
|
|
+ dataTypes.add(DataAuthDataTypeEnum.SELF_MEDOUP.getKey() * 1l);
|
|
|
+ List<UserRoleDTO> checkRoles = roleFacade.getBaseMapper()
|
|
|
+ .getDataAuthRole(SysUserUtils.getCurrentPrincipleId(), null, dataTypes);
|
|
|
+ StringBuffer errStr = new StringBuffer();
|
|
|
+ if (ListUtil.isNotEmpty(checkRoles)) {
|
|
|
+ checkRoles.stream().forEach(userRoleDTO -> {
|
|
|
+ errStr.append(userRoleDTO.getRoleName() + ";");
|
|
|
+ });
|
|
|
+ Asserts.fail(errStr.toString() + "角色需要用户填写医生工号并且该医生存在医疗组信息");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param roles
|
|
|
+ * @Description校验用户如果没有科室信息时,是否分配科室数据权限相关的角色
|
|
|
+ * @Return void
|
|
|
+ */
|
|
|
+ private void userDeptCheck(List<Long> roles) {
|
|
|
+ //获取当前用户的角色
|
|
|
+ List<Long> dataTypes = new ArrayList<>();
|
|
|
+ dataTypes.add(DataAuthDataTypeEnum.ALL_DEPT_NOT_SELF.getKey() * 1l);
|
|
|
+ dataTypes.add(DataAuthDataTypeEnum.ALL_SELF_DEPT.getKey() * 1l);
|
|
|
+ List<UserRoleDTO> checkRoles = roleFacade.getBaseMapper()
|
|
|
+ .getDataAuthRole(SysUserUtils.getCurrentPrincipleId(), roles, dataTypes);
|
|
|
+ StringBuffer errStr = new StringBuffer();
|
|
|
+ if (ListUtil.isNotEmpty(checkRoles)) {
|
|
|
+ checkRoles.stream().forEach(userRoleDTO -> {
|
|
|
+ errStr.append(userRoleDTO.getRoleName() + ";");
|
|
|
+ });
|
|
|
+ Asserts.fail(errStr.toString() + "角色需要用户具备科室信息");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -327,12 +403,20 @@ public class UserManagementFacade {
|
|
|
*/
|
|
|
public boolean updateUser(UpdateUserVO updateUserVO) {
|
|
|
//1.删除该用户关联的科室、医院
|
|
|
- //1.1校验用户
|
|
|
- checkUser(updateUserVO.getUsername(),updateUserVO.getId(), updateUserVO.getAddHospitalTreeVO().getHospitals(), updateUserVO.getRoles());
|
|
|
if (delUserHospitalORDept(updateUserVO.getId())) {
|
|
|
+ //工号为医生号
|
|
|
+ if (updateUserVO.getJobNo() != null) {
|
|
|
+ updateUserVO.setDoctorId(updateUserVO.getJobNo());
|
|
|
+ }
|
|
|
User user = new User();
|
|
|
BeanUtils.copyProperties(updateUserVO, user);
|
|
|
user.setPassword(BCrypt.hashpw(user.getPassword()));
|
|
|
+ //1.1校验用户
|
|
|
+ boolean deptFlag = false;
|
|
|
+ if (ListUtil.isNotEmpty(updateUserVO.getAddHospitalTreeVO().getDepts())) {
|
|
|
+ deptFlag = true;
|
|
|
+ }
|
|
|
+ checkUser(user, deptFlag, updateUserVO.getAddHospitalTreeVO().getHospitals(), updateUserVO.getRoles());
|
|
|
if (userFacade.updateById(user)) {
|
|
|
//2.插入用户新关联的医院、科室
|
|
|
return saveUserHospital(updateUserVO.getAddHospitalTreeVO(), updateUserVO.getId(), updateUserVO.getRoles());
|