Explorar o código

修改用户解锁时对临时账号重置截止日期

xusl hai 1 ano
pai
achega
a45efa53f6

+ 44 - 26
backend/src/main/java/com/jiayue/ssi/controller/SysUserController.java

@@ -1,5 +1,6 @@
 package com.jiayue.ssi.controller;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.NumberUtil;
@@ -149,6 +150,7 @@ public class SysUserController {
     @PreAuthorize("@ss.hasPermi('system:user:add')")
     @PreventReplay
     public ResponseVO addUser(@RequestBody SysUser user) throws CustomException {
+
         try {
             String username="";
             SysApprove sysApprove = new SysApprove();
@@ -359,7 +361,34 @@ public class SysUserController {
                 // 加密姓名
                 sysApprove.setNickname(SM2CryptUtils.encrypt(nickName, SecretKeyConstants.SERVER_PUBLIC_KEY));
             }
+            // 新增时先判断审批表里待审批
+            QueryWrapper<SysApprove> wrapper1 = new QueryWrapper<>();
+            // 新增操作类型
+            wrapper1.eq("operation", "0");
+            // 待审批
+            wrapper1.eq("approve_status", "0");
+            List<SysApprove> sysApproveList1 = sysApproveService.list(wrapper1);
+            for (SysApprove sysApprove1:sysApproveList1){
+                String approvePhonenumber = SM2CryptUtils.decrypt(sysApprove1.getPhonenumber(), SecretKeyConstants.SERVER_PRIVATE_KEY);
+                String approveMailbox = SM2CryptUtils.decrypt(sysApprove1.getMailbox(), SecretKeyConstants.SERVER_PRIVATE_KEY);
 
+                if (user.getPhonenumber().equals(approvePhonenumber)){
+                    return ResponseVO.fail("手机号码"+user.getPhonenumber() + "在待审批新增操作中存在,不能修改!");
+                }
+                if (user.getMailbox().equals(approveMailbox)){
+                    return ResponseVO.fail("用户邮箱"+user.getMailbox() + "在待审批新增操作中存在,不能修改!");
+                }
+            }
+
+            List<SysUser> sysUserList = sysUserService.queryAllUserByDecrypt();
+            for (SysUser sysUser:sysUserList){
+                if (user.getPhonenumber().equals(sysUser.getPhonenumber()) && user.getId().longValue()!=sysUser.getId().longValue()){
+                    return ResponseVO.fail("手机号码"+user.getPhonenumber() + "存在,不能修改!");
+                }
+                if (user.getMailbox().equals(sysUser.getMailbox()) && user.getId().longValue()!=sysUser.getId().longValue()){
+                    return ResponseVO.fail("用户邮箱"+user.getMailbox() + "存在,不能修改!");
+                }
+            }
             if (user.getExpDate()==null) {
                 user.setExpDate(null);
             }
@@ -601,7 +630,7 @@ public class SysUserController {
     @OperateLog(title = "用户管理", businessType = BusinessType.UNLOCK, auditType = AuditType.SYS,operdesc = "用户账号解锁")
     @PreAuthorize("@ss.hasPermi('system:user:relock')")
     @PreventReplay
-    public ResponseVO relockUser(String id) throws CustomException {
+    public ResponseVO relockUser(String id,String expDate) throws CustomException {
         try {
             if (StringUtils.isEmpty(id)) {
                 return ResponseVO.fail("id不能为空!");
@@ -627,31 +656,20 @@ public class SysUserController {
                 return ResponseVO.fail("只能对【锁定】状态的进行解锁!");
             }
 
-            // 根据id改变状态为注销,提交到审核
-//            SysApprove sysApprove = new SysApprove();
-//            sysApprove.setUsername(sysUser.getUsername());
-//            sysApprove.setNickname(sysUser.getNickname());
-//            sysApprove.setIdcard(sysUser.getIdcard());
-//            sysApprove.setMailbox(sysUser.getMailbox());
-//            sysApprove.setPhonenumber(sysUser.getPhonenumber());
-//            sysApprove.setUsertype(sysUser.getUsertype());
-//            sysApprove.setStatus(sysUser.getStatus());
-//            sysApprove.setMasterId(String.valueOf(sysUser.getId()));
-//            sysApprove.setParameterContent(JSONUtil.parse(sysUser).toString());
-//            // 用户新增插入审批表
-//            sysApprove.setModuleName(ApproveConstants.MODULE_NAME_USER);
-//            sysApprove.setOperation(String.valueOf(ApproveOperaterEnum.RELOCK.getCode()));
-//            sysApprove.setApproveStatus(String.valueOf(ApproveStatusEnum.DSP.getCode()));
-//            sysApprove.setEntityName("SysUser");
-//            boolean bo = sysUserService.addUserByApprove(Long.parseLong(id),sysApprove);
-//            if (bo) {
-//                return ResponseVO.success("解锁用户成功,等待审核管理员进行审核!");
-//            } else {
-//                log.error("解锁用户失败");
-//                return ResponseVO.fail("解锁用户失败");
-//            }
-
-            boolean bo = sysUserService.relockUserById(Integer.parseInt(id));
+            if (StringUtils.isNotBlank(expDate)){
+                Date eDate = DateUtil.parseDate(expDate);
+                // 判断临时账号有效期不能超过30天
+                Calendar calendar = Calendar.getInstance();
+                // 将当前日期增加30天
+                calendar.add(Calendar.DAY_OF_MONTH, 29);
+                // 获取增加30天后的日期
+                Date endDate = calendar.getTime();
+                if (!eDate.before(endDate)){
+                    return ResponseVO.fail("账号截止日期不能超过30天!");
+                }
+            }
+
+            boolean bo = sysUserService.relockUserById(Integer.parseInt(id),expDate);
             if (bo) {
                 return ResponseVO.success("解锁成功");
             } else {

+ 1 - 1
backend/src/main/java/com/jiayue/ssi/service/SysUserService.java

@@ -67,7 +67,7 @@ public interface SysUserService extends IService<SysUser> {
      * @param id
      * @return
      */
-    boolean relockUserById(Integer id);
+    boolean relockUserById(Integer id,String expDate);
     /**
      * 用户授权角色
      *

+ 14 - 2
backend/src/main/java/com/jiayue/ssi/service/impl/SysUserServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jiayue.ssi.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -17,7 +18,9 @@ import com.jiayue.ssi.mapper.SysUserMapper;
 import com.jiayue.ssi.mapper.SysUserRoleMapper;
 import com.jiayue.ssi.service.SysApproveService;
 import com.jiayue.ssi.service.SysUserService;
+import com.jiayue.ssi.util.ResponseVO;
 import com.jiayue.ssi.util.SM2CryptUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
@@ -25,6 +28,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 
 import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -156,9 +161,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      */
     @Override
     @Transactional(propagation= Propagation.REQUIRED, rollbackFor = Exception.class)
-    public boolean relockUserById(Integer id) {
+    public boolean relockUserById(Integer id, String expDate) {
         LambdaUpdateWrapper<SysUser> updateWrapper = new UpdateWrapper<SysUser>().lambda();
-        updateWrapper.eq(SysUser::getId, id).set(SysUser::getStatus, 0).set(SysUser::getLockTime,0);
+        if (StringUtils.isNotBlank(expDate)){
+            Date eDate = DateUtil.parseDate(expDate);
+            updateWrapper.eq(SysUser::getId, id).set(SysUser::getStatus, 0).set(SysUser::getLockTime,0).set(SysUser::getExpDate,eDate);
+        }
+        else{
+            updateWrapper.eq(SysUser::getId, id).set(SysUser::getStatus, 0).set(SysUser::getLockTime,0);
+        }
+
         int count = sysUserMapper.update(new SysUser(), updateWrapper);
         if (count > 0) {
             return true;

+ 106 - 34
ui/src/views/sysManager/userManager/index.vue

@@ -193,20 +193,20 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="手机号码" prop="phonenumber">
-              <el-input style="width: 220px" v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" :disabled="edit"/>
+            <el-form-item label="用户姓名" prop="nickname">
+              <el-input style="width: 220px" v-model="form.nickname" placeholder="请输入用户姓名" maxlength="30"/>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="用户姓名" prop="nickname">
-              <el-input style="width: 220px" v-model="form.nickname" placeholder="请输入用户姓名" maxlength="30"/>
+            <el-form-item label="手机号码" prop="phonenumber">
+              <el-input style="width: 220px" v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="用户邮箱" prop="mailbox">
-              <el-input style="width: 220px" v-model="form.mailbox" placeholder="请输入邮箱" maxlength="50" :disabled="edit"/>
+              <el-input style="width: 220px" v-model="form.mailbox" placeholder="请输入邮箱" maxlength="50"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -230,6 +230,45 @@
       </div>
     </el-dialog>
 
+    <!-- 解锁用户对于临时账号需要弹出页面选择截止日期 -->
+    <el-dialog :title="locktitle" :visible.sync="lockopen" width="430px" append-to-body>
+      <el-form ref="lockform" :model="lockform" width="430px" label-width="120px">
+        <font size="3" color="red">解锁临时账号,需要重置账号截止日期!</font>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="账号截止日期">
+              <el-date-picker
+                style="width: 220px"
+                value-format="yyyy-MM-dd"
+                v-model="lockform.expDate"
+                type="date"
+                placeholder="请选择账号截止日期"
+                :picker-options="pickerOptions">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="输入登录密码">
+              <el-input
+                style="width: 220px"
+                v-model="lockform.password"
+                type="password"
+                auto-complete="off"
+                placeholder="密码"
+                maxlength="20"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="sublockform">确 定</el-button>
+        <el-button @click="lockformcancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
     <!-- 分配角色对话框 -->
     <el-dialog :title="jstitle" :visible.sync="jsopen" width="650px" append-to-body>
       <el-form width="630px" label-width="80px">
@@ -341,12 +380,14 @@ export default {
       total: 0,
       // 用户表格数据
       userList: [],
+      locktitle:"鉴别操作",
       // 弹出层标题
       title: "",
       // 角色分配弹出层标题
       jstitle: "",
       // 是否显示弹出层
       open: false,
+      lockopen:false,
       // 角色是否显示弹出层
       jsopen: false,
       // 默认密码
@@ -355,6 +396,7 @@ export default {
       roleOptions: [],
       // 表单参数
       form: {},
+      lockform:{},
       // 查询参数
       queryParams: {
         username: undefined,
@@ -1020,6 +1062,30 @@ export default {
       this.title = "修改用户";
       this.edit = true;
     },
+
+    // 取消按钮
+    lockformcancel() {
+      this.lockopen = false;
+      this.lockform = {}
+    },
+    sublockform(){
+      if (this.lockform.expDate==null || this.lockform.expDate==undefined){
+        this.$message({
+          type: 'warning',
+          message: '请选择截止日期!'
+        });
+        return
+      }
+      if (this.lockform.password==null || this.lockform.password==undefined){
+        this.$message({
+          type: 'warning',
+          message: '请输入登录密码!'
+        });
+        return
+      }
+      const _selectData = this.$refs.userTable.getRadioRecord(true)
+      this.doRelock(_selectData, this.lockform.password,this.lockform.expDate)
+    },
     /** 解锁按钮操作 */
     handleRelock() {
       const _selectData = this.$refs.userTable.getRadioRecord(true)
@@ -1052,40 +1118,44 @@ export default {
         return
       }
 
-      this.$prompt('请输入登录密码', '鉴别操作', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        inputType: 'password',
-        // customClass:'no-autofill-pwd',
-        inputValidator: (val) => {
-          if (val === null || val.length < 1 || val.length > 20) {
-            return false;
-          }
-        },
-        inputErrorMessage: '不能为空,最多可录入20个字符',
-        beforeClose(action, instance, done) {
-          if (action === "confirm") {
-            instance.$refs["confirm"].$el.onclick = (function (e) {
-              e = e || window.event;
-              if (e.detail != 0) {
-                done();
-              }
-            })();
-          } else {
-            done();
+      // 判断是否临时账号
+      if (_selectData.expDate){
+        this.lockopen = true
+      }
+      else{
+        this.$prompt('请输入登录密码', '鉴别操作', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          inputType: 'password',
+          // customClass:'no-autofill-pwd',
+          inputValidator: (val) => {
+            if (val === null || val.length < 1 || val.length > 20) {
+              return false;
+            }
+          },
+          inputErrorMessage: '不能为空,最多可录入20个字符',
+          beforeClose(action, instance, done) {
+            if (action === "confirm") {
+              instance.$refs["confirm"].$el.onclick = (function (e) {
+                e = e || window.event;
+                if (e.detail != 0) {
+                  done();
+                }
+              })();
+            } else {
+              done();
+            }
           }
-        }
-      }).then(async ({value}) => {
-        this.doRelock(_selectData, value)
-      }).catch((e) => {
-      })
-
-
+        }).then(async ({value}) => {
+          this.doRelock(_selectData, value)
+        }).catch((e) => {
+        })
+      }
     },
     /**
      * 解锁提交
      */
-    doRelock: debounce(async function (_selectData, againPwd) {
+    doRelock: debounce(async function (_selectData, againPwd,expDate) {
       let sysTime
       let lk
       await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {
@@ -1096,6 +1166,7 @@ export default {
       const param = {
         id: _selectData.id,
         againPwd: againPwd,
+        expDate:expDate,
         sysTime: sysTime,
         lk: lk
       }
@@ -1106,6 +1177,7 @@ export default {
             message: res.data
           });
           this.getList();
+          this.lockformcancel();
         } else {
           this.$message({
             type: 'error',