Jelajahi Sumber

添加修改密码方法

songxinlu 3 tahun lalu
induk
melakukan
926a3d384b

+ 23 - 0
common/src/main/java/com/lantone/common/vo/ModifyPasswordVO.java

@@ -0,0 +1,23 @@
+package com.lantone.common.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Description: 修改密码参数
+ * @Author: ztg
+ * @Date: 2018/9/28 13:14
+ */
+@Data
+public class ModifyPasswordVO {
+    @ApiModelProperty(value = "原密码",required = true)
+    @NotBlank(message = "请输入原密码")
+    private String password; //原密码
+    @ApiModelProperty(value = "新密码",required = true)
+    @NotBlank(message = "请输入新密码")
+    private String modifyPassword; //新密码
+}

+ 2 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/RoleMapper.java

@@ -28,4 +28,6 @@ public interface RoleMapper extends BaseMapper<Role> {
     List<GetCreateRoleDTO> getCreateRoles(@Param("creator") Long creator,@Param("softwareId") Long softwareId);
 
     List<UserRoleDTO> getDataAuthRole(@Param("creator") Long creator,@Param("roles")List<Long> roles,@Param("dataTypes")List<Long> dataTypes);
+
+    int getCount(@Param("roles")List<Long> roles,@Param("status") String status,@Param("delete") String delete);
 }

+ 15 - 0
dblayer-mbg/src/main/resources/mapper/RoleMapper.xml

@@ -75,4 +75,19 @@
             </foreach>
         </if>
     </select>
+    <select id="getCount" resultType="java.lang.Integer">
+        SELECT
+            count(id) num
+        FROM
+            sys_role r
+        WHERE
+        r.is_deleted = #{delete}
+        <if test="roles !=null and roles.size!=0">
+            AND r.id IN
+            <foreach collection="roles" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        </if>
+		AND r.`status` = #{status}
+    </select>
 </mapper>

+ 2 - 4
gateway-service/src/main/resources/bootstrap.yml

@@ -34,10 +34,8 @@ spring:
           filters:
             - StripPrefix=1
   redis:
-    database:
-      cache: 8 # cache索引
-      token: 8 # Token索引
-    host: 192.168.2.236  #Redis服务器地址
+    database: 12
+    host: 192.168.2.236 # Redis服务器地址
     port: 6379 # Redis服务器连接端口(本地环境端口6378,其他环境端口是6379)
     password: lantone # Redis服务器连接密码(默认为空)
     jedis:

+ 1 - 1
security-center/src/main/java/com/lantone/security/enums/DictionaryEnum.java

@@ -11,7 +11,7 @@ import lombok.Setter;
 public enum DictionaryEnum implements KeyedNamed {
     TITLE(40, "职称"),
     HOSPITAL_TYPE(43, "组织类型"),
-    PASSWORD(44, "重置密码"),
+    PASSWORD(44, "密码相关"),
     REGION(45, "病区"),
     MANAGE_HIDE_MENU(46, "管理隐藏功能菜单"),
     STATUS(47, "启用禁用"),

+ 2 - 1
security-center/src/main/java/com/lantone/security/facade/DataAuthManagementFacade.java

@@ -45,6 +45,7 @@ import com.lantone.dblayermbg.facade.SoftwareDataAuthFacade;
 import com.lantone.dblayermbg.facade.UserFacade;
 import com.lantone.dblayermbg.service.impl.DataAuthDetailServiceImpl;
 import com.lantone.dblayermbg.service.impl.RoleSoftwareDataAuthServiceImpl;
+import com.lantone.security.annotation.DataAuthFilter;
 import com.lantone.security.enums.DataAuthDataTypeEnum;
 import com.lantone.security.enums.DataAuthDetailTypeEnum;
 import com.lantone.common.enums.IsDeleteEnum;
@@ -499,7 +500,7 @@ public class DataAuthManagementFacade {
             localDataAuthMap.put("notDepts", notDepts);
             localDataAuthMap.put("hospitals", hospitals);
             localDataAuthMap.put("notHospitals", notHospitals);
-            redisService.hSetAll(hospitalId + "_" + userId + "_" + softwareId, localDataAuthMap);
+            redisService.hSetAll("dataAuth:"+hospitalId + "_" + userId + "_" + softwareId, localDataAuthMap);
         }
     }
 }

+ 1 - 1
security-center/src/main/java/com/lantone/security/facade/FuncManagementFacade.java

@@ -146,7 +146,7 @@ public class FuncManagementFacade {
     private void check(Long id, String code) {
         List<Menu> menus = menuFacade.list(new QueryWrapper<Menu>()
                 .eq("code", code)
-                .eq("", IsDeleteEnum.N.getKey()));
+                .eq("is_deleted", IsDeleteEnum.N.getKey()));
         if (id == null) {
             if (ListUtil.isNotEmpty(menus)) {
                 Asserts.fail("该权限标识已存在,请重新输入");

+ 16 - 10
security-center/src/main/java/com/lantone/security/facade/HospitalManagementFacade.java

@@ -194,14 +194,14 @@ public class HospitalManagementFacade {
      * @Description删除组织
      * @Return boolean
      */
-    public boolean deleteHospital(Long hospitalId,String type) {
+    public boolean deleteHospital(Long hospitalId, String type) {
         AtomicBoolean out = new AtomicBoolean(false);
         //禁用科室
         if ((HospitalTypeEnum.DEPT.getKey() + "").equals(type)) {
             return deptFacade.update(new UpdateWrapper<Dept>()
                     .set("is_deleted", IsDeleteEnum.Y.getKey())
-                    .in("id",hospitalId));
-        }else {
+                    .in("id", hospitalId));
+        } else {
             //1.获取该组织及其子组织
             List<Long> hospitals = hospitalFacade.getBaseMapper().getHospitalTreeInfo(hospitalId, null).stream()
                     .map(GetHospitalTreeDTO::getHospitalId).collect(Collectors.toList());
@@ -343,7 +343,7 @@ public class HospitalManagementFacade {
      * @Description禁用启用组织
      * @Return boolean
      */
-    public boolean disableHospital(Long hospitalId, String status,String type) {
+    public boolean disableHospital(Long hospitalId, String status, String type) {
         AtomicBoolean out = new AtomicBoolean(false);
         String selectStatus = "0";
         if (StatusEnum.Enable.getKey().equals(status)) {
@@ -353,10 +353,10 @@ public class HospitalManagementFacade {
         }
         //禁用科室
         if ((HospitalTypeEnum.DEPT.getKey() + "").equals(type)) {
-                return deptFacade.update(new UpdateWrapper<Dept>()
-                        .set("status", status)
-                        .in("id",hospitalId));
-        }else {
+            return deptFacade.update(new UpdateWrapper<Dept>()
+                    .set("status", status)
+                    .in("id", hospitalId));
+        } else {
             //1.获取该组织及其子组织
             List<Long> hospitals = hospitalFacade.getBaseMapper().getHospitalTreeInfo(hospitalId, selectStatus).stream()
                     .map(GetHospitalTreeDTO::getHospitalId).collect(Collectors.toList());
@@ -387,7 +387,7 @@ public class HospitalManagementFacade {
                     }
 
                 });
-            }else {
+            } else {
                 Asserts.fail("该组织不存在,请联系管理员");
             }
         }
@@ -594,7 +594,13 @@ public class HospitalManagementFacade {
      */
     public boolean resetPassword(Long hospitalId) {
         User user = new User();
-        user.setPassword(BCrypt.hashpw(dictionaryInfoFacade.getBaseMapper().getDictionaryInfoByType(DictionaryEnum.PASSWORD.getKey()).get(0).getVal()));
+        String password = dictionaryInfoFacade.getDicMap(ReturnTypeEnum.INTERFACE.getKey(),
+                Lists.newArrayList(DictionaryEnum.PASSWORD.getKey() + ""))
+                .get(DictionaryEnum.PASSWORD.getKey() + "").get("password");
+        if (StringUtil.isEmpty(password)) {
+            Asserts.fail("重置密码失败,请联系管理员");
+        }
+        user.setPassword(BCrypt.hashpw(password));
         user.setId(userFacade.getBaseMapper().getUserByHospitalId(hospitalId));
         return userFacade.updateById(user);
     }

+ 69 - 5
security-center/src/main/java/com/lantone/security/facade/UserManagementFacade.java

@@ -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("插入用户角色列表有改动,请刷新页面重新操作");
             }
         }

+ 11 - 0
security-center/src/main/java/com/lantone/security/web/UserManagementController.java

@@ -10,6 +10,7 @@ import com.lantone.common.dto.UserSoftwareHospitalDTO;
 import com.lantone.common.vo.AddUserVO;
 import com.lantone.common.vo.GetUserPageVO;
 import com.lantone.common.vo.LoginVO;
+import com.lantone.common.vo.ModifyPasswordVO;
 import com.lantone.common.vo.UpdateUserVO;
 import com.lantone.security.facade.UserManagementFacade;
 import io.swagger.annotations.Api;
@@ -105,4 +106,14 @@ public class UserManagementController {
     public CommonResult<Map<String, Object>> getUserHospitals() {
         return CommonResult.success(userManagementFacade.getUserHospitals());
     }
+
+    @ApiOperation(value = "修改密码[by:gaodm]",
+            notes = "password:原密码,必填<br>" +
+                    "modifyPassword:新密码, 必填<br> ")
+    @PostMapping("/midifyPassword")
+    @Transactional
+    public CommonResult<Boolean> midifyPassword(@RequestBody @Valid ModifyPasswordVO modifyPasswordVO) {
+        Boolean flag = userManagementFacade.modifyPassword(modifyPasswordVO.getPassword(), modifyPasswordVO.getModifyPassword());
+        return CommonResult.success(flag);
+    }
 }