Jelajahi Sumber

3.2.5 增加学校设置用户初始密码功能

xiaofei 2 tahun lalu
induk
melakukan
09121cb6b9

+ 1 - 0
distributed-print-business/src/main/resources/db/install/teachcloud_db.sql

@@ -319,6 +319,7 @@ CREATE TABLE `basic_school` (
                                 `update_id` bigint DEFAULT NULL COMMENT '更新人',
                                 `update_time` bigint DEFAULT NULL COMMENT '更新时间',
                                 `logo` mediumtext COMMENT '学校logo',
+                                `init_password` VARCHAR(100) NULL COMMENT '该学校用户的初始密码,默认为12345678',
                                 PRIMARY KEY (`id`) USING BTREE,
                                 UNIQUE KEY `code` (`code`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学校表';

+ 5 - 0
distributed-print-business/src/main/resources/db/log/脚本-xiaof.sql

@@ -80,3 +80,8 @@ ALTER TABLE `exam_task_sync`
     ADD COLUMN `total_paper_type` VARCHAR(50) NULL COMMENT '所有卷型' AFTER `paper_type`;
 
 update `exam_task_sync` set total_paper_type = paper_type where total_paper_type is null;
+
+ALTER TABLE `basic_school`
+    ADD COLUMN `init_password` VARCHAR(100) NULL COMMENT '该学校用户的初始密码,默认为12345678' AFTER `logo`;
+
+update `basic_school` set init_password = 'MTIzNDU2Nzg=';

+ 5 - 1
distributed-print-business/src/main/resources/db/upgrade/3.2.5.sql

@@ -100,6 +100,8 @@ ALTER TABLE basic_course MODIFY COLUMN code varchar(100) NOT NULL COMMENT '课
 ALTER TABLE sys_user MODIFY COLUMN mobile_number varchar(30) NULL COMMENT '手机号';
 
 ALTER TABLE `exam_task_sync` CHANGE COLUMN `paper_type` `paper_type` VARCHAR(50) CHARACTER SET 'utf8mb4' NULL DEFAULT NULL COMMENT '试卷类型' ;
+ALTER TABLE `basic_school`
+    ADD COLUMN `init_password` VARCHAR(100) NULL COMMENT '该学校用户的初始密码,默认为12345678' AFTER `logo`;
 
 INSERT INTO `sys_role_privilege` VALUES (506, 10, 576, 1);
 INSERT INTO `sys_role_privilege` VALUES (507, 10, 833, 1);
@@ -163,4 +165,6 @@ UPDATE sys_config
 SET config_value='UTF-8'
 WHERE config_key='sys.txt.charset';
 
-update `exam_task_sync` set total_paper_type = paper_type where total_paper_type is null;
+update `exam_task_sync` set total_paper_type = paper_type where total_paper_type is null;
+
+update `basic_school` set init_password = 'MTIzNDU2Nzg=';

+ 2 - 1
teachcloud-common-api/src/main/java/com/qmth/teachcloud/common/api/api/BasicSchoolController.java

@@ -54,9 +54,10 @@ public class BasicSchoolController {
     public Result update(@RequestParam(value = "id") Long id,
                          @RequestParam(value = "code") String code,
                          @RequestParam(value = "name") String name,
+                         @RequestParam(value = "initPassword") String initPassword,
                          @RequestParam(value = "logo", required = false) MultipartFile logo,
                          @RequestParam(value = "logoMd5") String logoMd5) {
-        return ResultUtil.ok(basicSchoolService.updateSchool(id, code, name, logo, logoMd5));
+        return ResultUtil.ok(basicSchoolService.updateSchool(id, code, name, initPassword, logo, logoMd5));
     }
 }
 

+ 9 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/SchoolDto.java

@@ -16,6 +16,7 @@ public class SchoolDto {
     private String accessSecret;
 
     private String logo;
+    private String initPassword;
 
     public String getId() {
         return id;
@@ -72,4 +73,12 @@ public class SchoolDto {
     public void setLogo(String logo) {
         this.logo = logo;
     }
+
+    public String getInitPassword() {
+        return initPassword;
+    }
+
+    public void setInitPassword(String initPassword) {
+        this.initPassword = initPassword;
+    }
 }

+ 0 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/UserSaveReportParams.java

@@ -134,14 +134,6 @@ public class UserSaveReportParams extends BaseEntity implements Serializable {
         this.enable = true;
     }
 
-    @Override
-    public void insertInfo(Long userId) {
-        super.insertInfo(userId);
-        SysConfigService sysConfigService = SpringContextHolder.getBean(SysConfigService.class);
-        SysConfig sysConfig = sysConfigService.getByKey("sys.user.initPassword");
-        setPassword(Base64Util.encode(StringUtils.isNoneBlank(sysConfig.getConfigValue()) ? sysConfig.getConfigValue().getBytes() : "123456".getBytes()));
-    }
-
     public SyncStatusEnum getSyncStatus() {
         return syncStatus;
     }

+ 3 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -45,6 +45,9 @@ import java.util.stream.Collectors;
 public class SystemConstant {
     private final static Logger log = LoggerFactory.getLogger(SystemConstant.class);
 
+    public static final String INIT_PASSWORD = "12345678";
+    public static final String OLD_INIT_PASSWORD = "123456";
+
     /**
      * 分布式印刷api前缀
      */

+ 15 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicSchool.java

@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.util.Base64Util;
 import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.StringUtils;
 
 import java.io.Serializable;
 import java.util.Objects;
@@ -44,6 +46,10 @@ public class BasicSchool extends BaseEntity implements Serializable {
     @TableField(value = "logo")
     private String logo;
 
+    @ApiModelProperty(value = "用户初始密码")
+    @TableField(value = "init_password")
+    private String initPassword;
+
     public BasicSchool() {
 
     }
@@ -56,6 +62,7 @@ public class BasicSchool extends BaseEntity implements Serializable {
         this.accessSecret = accessSecret;
         setId(id);
         this.enable = true;
+        this.initPassword = Base64Util.encode(SystemConstant.INIT_PASSWORD.getBytes());
     }
 
     public BasicSchool(String code, String name, String accessKey, String accessSecret, String logo) {
@@ -153,4 +160,12 @@ public class BasicSchool extends BaseEntity implements Serializable {
     public void setRemark(String remark) {
         this.remark = remark;
     }
+
+    public String getInitPassword() {
+        return initPassword;
+    }
+
+    public void setInitPassword(String initPassword) {
+        this.initPassword = initPassword;
+    }
 }

+ 0 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysUser.java

@@ -135,14 +135,6 @@ public class SysUser extends BaseEntity implements Serializable {
         this.enable = Objects.isNull(enable) ? true : enable;
     }
 
-    @Override
-    public void insertInfo(Long userId) {
-        super.insertInfo(userId);
-        SysConfigService sysConfigService = SpringContextHolder.getBean(SysConfigService.class);
-        SysConfig sysConfig = sysConfigService.getByKey("sys.user.initPassword");
-        setPassword(Base64Util.encode(StringUtils.isNoneBlank(sysConfig.getConfigValue()) ? sysConfig.getConfigValue().getBytes() : "123456".getBytes()));
-    }
-
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicSchoolService.java

@@ -19,5 +19,5 @@ public interface BasicSchoolService extends IService<BasicSchool> {
 
     List<SchoolDto> listSchool();
 
-    boolean updateSchool(Long id, String code, String name, MultipartFile logo, String logoMd5);
+    boolean updateSchool(Long id, String code, String name, String initPassword, MultipartFile logo, String logoMd5);
 }

+ 30 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicSchoolServiceImpl.java

@@ -1,20 +1,26 @@
 package com.qmth.teachcloud.common.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.bean.dto.SchoolDto;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicSchool;
+import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.mapper.BasicSchoolMapper;
 import com.qmth.teachcloud.common.service.BasicSchoolService;
 import com.qmth.teachcloud.common.service.CommonCacheService;
+import com.qmth.teachcloud.common.service.SysUserService;
+import com.qmth.teachcloud.common.util.Base64Util;
 import com.qmth.teachcloud.common.util.FileStoreUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.util.Base64;
 import java.util.List;
+import java.util.Queue;
 
 /**
  * <p>
@@ -36,13 +42,22 @@ public class BasicSchoolServiceImpl extends ServiceImpl<BasicSchoolMapper, Basic
     @Resource
     CommonCacheService commonCacheService;
 
+    @Resource
+    SysUserService sysUserService;
+
     @Override
     public List<SchoolDto> listSchool() {
-        return this.baseMapper.listSchool();
+        List<SchoolDto> schoolDtos = this.baseMapper.listSchool();
+        for (SchoolDto schoolDto : schoolDtos) {
+            if(StringUtils.isNotBlank(schoolDto.getInitPassword())){
+                schoolDto.setInitPassword(new String(Base64Util.decode(schoolDto.getInitPassword())));
+            }
+        }
+        return schoolDtos;
     }
 
     @Override
-    public boolean updateSchool(Long id, String code, String name, MultipartFile logo, String logoMd5) {
+    public boolean updateSchool(Long id, String code, String name, String initPassword, MultipartFile logo, String logoMd5) {
         BasicSchool basicSchool = this.getById(id);
         basicSchool.setCode(code);
         basicSchool.setName(name);
@@ -58,6 +73,19 @@ public class BasicSchoolServiceImpl extends ServiceImpl<BasicSchoolMapper, Basic
                 commonCacheService.removeSchoolCache(basicSchool.getId());
             }
         }
+
+        // 修改密码时,同步更新上一次初始密码的用户密码
+        String oldInitPassword = Base64Util.encode(SystemConstant.OLD_INIT_PASSWORD.getBytes());
+        String currentInitPassword = basicSchool.getInitPassword();
+        String newInitPassword = Base64Util.encode(initPassword.getBytes());
+        if(StringUtils.isBlank(currentInitPassword) || !currentInitPassword.equals(initPassword)){
+            UpdateWrapper<SysUser> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda().set(SysUser::getPassword, newInitPassword)
+                    .eq(SysUser::getSchoolId, id)
+                    .and(q->q.eq(SysUser::getPassword, oldInitPassword).or().eq(SysUser::getPassword, currentInitPassword));
+            sysUserService.update(updateWrapper);
+        }
+
         return this.updateById(basicSchool);
     }
 }

+ 6 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -182,10 +182,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     @Override
     public boolean resetPassword(Long id) throws NoSuchAlgorithmException {
-        SysConfig sysConfig = sysConfigService.getByKey("sys.user.initPassword");
-        String md5Password = Base64Util.encode(StringUtils.isNoneBlank(sysConfig.getConfigValue()) ? sysConfig.getConfigValue().getBytes() : "123456".getBytes());
-
         SysUser user = this.getById(id);
+        BasicSchool basicSchool = commonCacheService.schoolCache(user.getSchoolId());
+        String md5Password = StringUtils.isNoneBlank(basicSchool.getInitPassword()) ? basicSchool.getInitPassword() : Base64Util.encode(SystemConstant.INIT_PASSWORD.getBytes());
+
         String oldPassword = user.getPassword();
         user.setPassword(md5Password);
 
@@ -543,7 +543,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             userSaveParams.setSchoolId(schoolId);
             SysUser sysUser = gson.fromJson(gson.toJson(userSaveParams), SysUser.class);
             if (Objects.isNull(sysUser.getId())) {//新增用户
+                BasicSchool basicSchool = commonCacheService.schoolCache(schoolId);
                 sysUser.insertInfo(requestUserId);
+                String password = StringUtils.isNoneBlank(basicSchool.getInitPassword()) ? basicSchool.getInitPassword() : Base64Util.encode(SystemConstant.INIT_PASSWORD.getBytes());
+                sysUser.setPassword(password);
                 sysUser.setEnable(true);
                 sysUserService.save(sysUser);
                 resultUserId = sysUser.getId();

+ 1 - 1
teachcloud-common/src/main/resources/mapper/BasicSchoolMapper.xml

@@ -21,7 +21,7 @@
         code, name, enable, access_key, access_secret, remark, create_time, update_time
     </sql>
     <select id="listSchool" resultType="com.qmth.teachcloud.common.bean.dto.SchoolDto">
-        select id, code, name, enable, access_key accessKey, access_secret accessSecret, logo from basic_school where enable = true order by create_time desc
+        select id, code, name, enable, access_key accessKey, access_secret accessSecret, logo, init_password initPassword from basic_school where enable = true order by create_time desc
     </select>
 
 </mapper>