|
@@ -4,6 +4,7 @@ import cn.hutool.crypto.digest.BCrypt;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
import com.lantone.common.api.CommonResult;
|
|
|
import com.lantone.common.constant.AuthConstant;
|
|
|
import com.lantone.common.domain.UserDto;
|
|
@@ -41,6 +42,7 @@ import com.lantone.dblayermbg.entity.User;
|
|
|
import com.lantone.dblayermbg.entity.UserRole;
|
|
|
import com.lantone.dblayermbg.facade.DeptFacade;
|
|
|
import com.lantone.dblayermbg.facade.DeptUserFacade;
|
|
|
+import com.lantone.dblayermbg.facade.DictionaryInfoFacade;
|
|
|
import com.lantone.dblayermbg.facade.DoctorFacade;
|
|
|
import com.lantone.dblayermbg.facade.HospitalFacade;
|
|
|
import com.lantone.dblayermbg.facade.HospitalUserFacade;
|
|
@@ -50,12 +52,17 @@ 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.DictionaryEnum;
|
|
|
import com.lantone.security.enums.HospitalTypeEnum;
|
|
|
import com.lantone.security.enums.RelationEnum;
|
|
|
+import com.lantone.security.enums.ReturnTypeEnum;
|
|
|
import com.lantone.security.service.AuthService;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.security.crypto.factory.PasswordEncoderFactories;
|
|
|
+import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.DigestUtils;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
@@ -96,6 +103,8 @@ public class UserManagementFacade {
|
|
|
private MedoupDoctorFacade medoupDoctorFacade;
|
|
|
@Autowired
|
|
|
private DoctorFacade doctorfacade;
|
|
|
+ @Autowired
|
|
|
+ private DictionaryInfoFacade dictionaryInfoFacade;
|
|
|
|
|
|
public CommonResult login(LoginVO loginVO) {
|
|
|
Map<String, String> params = new HashMap<>();
|
|
@@ -207,7 +216,7 @@ public class UserManagementFacade {
|
|
|
//3.校验插入用户所属组织是否正常
|
|
|
checkHospitals(hospitals);
|
|
|
//4.校验插入用户角色是否正常
|
|
|
- checkRoles(roles);
|
|
|
+// checkRoles(roles);(目前角色校验有问题通过id查不到角色)
|
|
|
//5.用户如果没有医疗组、科室 绑定角色不能选择本医疗组、全部科室除本科室外、本科室数据权限角色
|
|
|
//科室
|
|
|
userDeptCheck(roles, deptFlag);
|
|
@@ -279,7 +288,65 @@ public class UserManagementFacade {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 修改密码
|
|
|
+ *
|
|
|
+ * @param password 原密码
|
|
|
+ * @param modifyPassword 新密码
|
|
|
+ * @return 修改密码是否成功
|
|
|
+ */
|
|
|
+ public Boolean modifyPassword(String password, String modifyPassword) {
|
|
|
+ //使用MD5对原密码和新密码进行加密
|
|
|
+ String MD5Password = BCrypt.hashpw(password);
|
|
|
+ String MD5ModifyPassword = BCrypt.hashpw(modifyPassword);
|
|
|
+ //对传入的密码进行格式验证
|
|
|
+ Long hospitalID = SysUserUtils.getCurrentHospitalId();
|
|
|
+ Boolean regularBoolean = passwordRegular(modifyPassword,hospitalID+"");
|
|
|
+ if(!regularBoolean){
|
|
|
+ Asserts.fail("请输入正确格式的新密码");
|
|
|
+ }
|
|
|
+ String userId = SysUserUtils.getCurrentPrincipleId()+"";
|
|
|
+ User user = userFacade.getOne(new QueryWrapper<User>()
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
+ .eq("status", StatusEnum.Enable.getKey())
|
|
|
+ .eq("id", userId), false);
|
|
|
+ if (null == user) {
|
|
|
+ Asserts.fail("用户不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!BCrypt.checkpw(password, user.getPassword())) {
|
|
|
+ Asserts.fail("原密码错误");
|
|
|
+ }
|
|
|
+ if (password.equals(modifyPassword)) {
|
|
|
+ Asserts.fail("原密码和新密码不能相同");
|
|
|
+ }
|
|
|
+ user.setPassword(MD5ModifyPassword);
|
|
|
+ user.setGmtModified(DateUtil.now());
|
|
|
+ user.setModifier(userId);
|
|
|
+ return userFacade.updateById(user);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
+ /**
|
|
|
+ * 未加密密文正则表达式 至少8个字符,1个大写字母,1个小写字母,1个数字和1个特殊字符:
|
|
|
+ * @param password
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Boolean passwordRegular(String password,String hospitalId){
|
|
|
+ boolean check=true;
|
|
|
+ Map<String, Map<String, String>> dictionaryWithKey = dictionaryInfoFacade.getDicMap(ReturnTypeEnum.INTERFACE.getKey(),
|
|
|
+ Lists.newArrayList(DictionaryEnum.PASSWORD.getKey()+""));
|
|
|
+ if(dictionaryWithKey!=null){
|
|
|
+ Map<String, String> stringStringMap = dictionaryWithKey.get(DictionaryEnum.PASSWORD.getKey()+"");
|
|
|
+ if(stringStringMap!=null) {
|
|
|
+ String regular = stringStringMap.get("check");
|
|
|
+ if(StringUtil.isNotEmpty(regular)) {
|
|
|
+ check = password.matches(regular);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return check;
|
|
|
+ }
|
|
|
/**
|
|
|
* @param roles
|
|
|
* @Description插入角色校验
|
|
@@ -287,10 +354,7 @@ public class UserManagementFacade {
|
|
|
*/
|
|
|
private void checkRoles(List<Long> roles) {
|
|
|
if (ListUtil.isNotEmpty(roles)) {
|
|
|
- if (roles.size() != roleFacade.list(new QueryWrapper<Role>()
|
|
|
- .in("id", roles)
|
|
|
- .eq("status", StatusEnum.Enable.getKey())
|
|
|
- .eq("is_deleted", IsDeleteEnum.N.getKey())).size()) {
|
|
|
+ if (roles.size() != roleFacade.getBaseMapper().getCount(roles,StatusEnum.Enable.getKey(), IsDeleteEnum.N.getKey())) {
|
|
|
Asserts.fail("插入用户角色列表有改动,请刷新页面重新操作");
|
|
|
}
|
|
|
}
|