Prechádzať zdrojové kódy

申请企业更换管理员接口以及测试页面

huxz 7 rokov pred
rodič
commit
56c1cb992a

+ 82 - 0
sso-manage-console-web/src/components/back/BackHome.vue

@@ -0,0 +1,82 @@
+<template>
+  <div>
+    <div class="x-container">
+      <div class="container">
+        <div class="x-content-wrap clearfix" style="margin: 0px -15px;">
+          <div class="x-content">
+            <ul class="nav nav-tabs x-nav-tabs x-navbar-right hidden-xs">
+              <h2 class="hidden-xs"><i class="fa fa-file-text-o"></i> 申请更换管理员
+              </h2></ul>
+            <div class="x-mod x-list x-list-2x x-chunk-list-wrap">
+              <div class="x-mod-body">
+                <div class="x-form-area">
+                  <form>
+                    <div class="form-group">
+                      <label for="spaceUU">所属企业</label>
+                      <input type="text" class="form-control" id="spaceUU" v-model="commitData.spaceUU" placeholder="所属企业UU">
+                    </div>
+                    <div class="form-group">
+                      <label for="submitterUU">申请人</label>
+                      <input type="text" class="form-control" id="submitterUU" v-model="commitData.submitterUU" placeholder="申请人UU">
+                    </div>
+                    <div class="form-group">
+                      <label for="afterAdminUU">新增管理员</label>
+                      <input type="text" class="form-control" id="afterAdminUU" v-model="commitData.afterAdminUU" placeholder="管理员UU">
+                    </div>
+                    <div class="form-group">
+                      <label for="contactTel">联系方式</label>
+                      <input type="text" class="form-control" id="contactTel" v-model="commitData.contactTel" placeholder="申请人联系方式">
+                    </div>
+                    <div class="form-group">
+                      <label>申请原因</label>
+                      <textarea class="form-control" title="changeReason" rows="3" v-model="commitData.changeReason" placeholder="申请原因"></textarea>
+                    </div>
+                    <button type="submit" class="btn btn-default" @click="submitCommit()">Submit</button>
+                  </form>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  import axios from '@/assets/js/axios'
+
+  export default {
+    name: 'BackHome',
+    data () {
+      return {
+        commitData: {
+          submitterUU: null,
+          spaceUU: null,
+          afterAdminUU: null,
+          contactTel: null,
+          changeReason: null
+        }
+      }
+    },
+    methods: {
+      submitCommit () {
+        const success = change => {
+          console.log(change)
+          this.$router.push('/admin')
+        }
+        const error = error => {
+          alert(error)
+        }
+
+        axios.post('/api/user/space/admin//submitChange', this.commitData).then(success).catch(error)
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .x-form-area {
+    margin: 10px 20px;
+  }
+</style>

+ 5 - 0
sso-manage-console-web/src/components/back/index.js

@@ -0,0 +1,5 @@
+import BackHome from './BackHome'
+
+export {
+  BackHome
+}

+ 11 - 1
sso-manage-console-web/src/main.js

@@ -3,7 +3,7 @@
 import Vue from 'vue'
 import App from './App'
 import router from './router'
-import { VueNotifications, options } from '@/assets/js/notifications'
+import {options, VueNotifications} from '@/assets/js/notifications'
 import 'bootstrap/dist/css/bootstrap.min.css'
 import 'font-awesome/css/font-awesome.min.css'
 import './assets/styles/console.css'
@@ -13,6 +13,16 @@ Vue.config.productionTip = false
 // Activate the plugin
 Vue.use(VueNotifications, options)
 
+// Date format filter
+Vue.filter('date', function (value) {
+  if (isNaN(value)) {
+    return ''
+  }
+
+  const date = new Date(Number(value))
+  return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`
+})
+
 /* eslint-disable no-new */
 new Vue({
   el: '#app',

+ 5 - 0
sso-manage-console-web/src/router/index.js

@@ -8,6 +8,7 @@ import UserHome from '@/components/user/UserHome'
 import ChangeAdmin from '@/components/admin/ChangeAdmin'
 import AssetHome from '@/components/asset/AssetHome'
 import SettingsHome from '@/components/settings/SettingsHome'
+import {BackHome} from '@/components/back'
 
 Vue.use(Router)
 
@@ -51,6 +52,10 @@ export default new Router({
     {
       path: '/settings',
       component: SettingsHome
+    },
+    {
+      path: '/admin/back',
+      component: BackHome
     }
   ]
 })

+ 9 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/api/ChangeAdminController.java

@@ -6,6 +6,8 @@ import com.uas.sso.sso.backend.dto.ChangeAdminCommit;
 import com.uas.sso.sso.backend.service.ChangeAdminService;
 import com.uas.sso.sso.backend.support.ResultBean;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -30,6 +32,13 @@ public class ChangeAdminController {
         this.changeAdminService = changeAdminService;
     }
 
+    @RequestMapping(method = RequestMethod.GET, path = "//pagination",
+            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public ResultBean<Page<ChangeAdmin>> showUserByPagination(Pageable page) {
+
+        return new ResultBean<>(changeAdminService.showUserByPagination(page));
+    }
+
     @RequestMapping(method = RequestMethod.POST, path = "//submitChange",
             produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     public ResultBean<ChangeAdmin> submitChangeAdminRequest(@RequestBody @Validated ChangeAdminCommit commit) {

+ 2 - 14
sso-manage-console/src/main/java/com/uas/sso/sso/backend/dto/ChangeAdminCommit.java

@@ -12,17 +12,14 @@ import org.hibernate.validator.constraints.Length;
  */
 public class ChangeAdminCommit {
 
-    @NotNull(message = "更换管理员申请人UU不能为空")
-    private Long submitterUU;
-
     /**
      * 企业UU
      */
     @NotNull(message = "申请企业UU不能为空")
     private Long spaceUU;
 
-    @NotNull(message = "被更换管理员的UU不能为空")
-    private Long beforeAdminUU;
+    @NotNull(message = "更换管理员申请人UU不能为空")
+    private Long submitterUU;
 
     @NotNull(message = "更换成新管理员的UU不能为空")
     private Long afterAdminUU;
@@ -50,14 +47,6 @@ public class ChangeAdminCommit {
         this.spaceUU = spaceUU;
     }
 
-    public Long getBeforeAdminUU() {
-        return beforeAdminUU;
-    }
-
-    public void setBeforeAdminUU(Long beforeAdminUU) {
-        this.beforeAdminUU = beforeAdminUU;
-    }
-
     public Long getAfterAdminUU() {
         return afterAdminUU;
     }
@@ -86,7 +75,6 @@ public class ChangeAdminCommit {
         ChangeAdmin admin = new ChangeAdmin();
 
         admin.setSubmitterUU(this.submitterUU);
-        admin.setBeforeAdminUU(this.beforeAdminUU);
         admin.setAfterAdminUU(this.afterAdminUU);
         admin.setContactTel(this.contactTel);
         admin.setChangeReason(this.changeReason);

+ 41 - 2
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/impl/ChangeAdminServiceImpl.java

@@ -1,18 +1,23 @@
 package com.uas.sso.sso.backend.service.impl;
 
 import com.uas.sso.dao.ChangeAdminDao;
+import com.uas.sso.dao.UserDao;
 import com.uas.sso.dao.UserspaceDao;
 import com.uas.sso.entity.ChangeAdmin;
+import com.uas.sso.entity.User;
 import com.uas.sso.entity.Userspace;
 import com.uas.sso.sso.backend.dto.ChangeAdminAudit;
 import com.uas.sso.sso.backend.dto.ChangeAdminCommit;
 import com.uas.sso.sso.backend.service.ChangeAdminService;
+import java.util.List;
 import javax.validation.constraints.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
+import org.springframework.util.CollectionUtils;
 
 /**
  * An implementations of {@code ChangeAdminService}.
@@ -26,11 +31,14 @@ public class ChangeAdminServiceImpl implements ChangeAdminService {
 
     private final UserspaceDao userspaceDao;
 
+    private final UserDao userDao;
+
     @Autowired
     public ChangeAdminServiceImpl(ChangeAdminDao changeAdminDao,
-            UserspaceDao userspaceDao) {
+            UserspaceDao userspaceDao, UserDao userDao) {
         this.changeAdminDao = changeAdminDao;
         this.userspaceDao = userspaceDao;
+        this.userDao = userDao;
     }
 
     @Override
@@ -40,14 +48,45 @@ public class ChangeAdminServiceImpl implements ChangeAdminService {
     }
 
     @Override
+    @Transactional(rollbackFor = RuntimeException.class)
     public ChangeAdmin submitChangeAdminRequest(@NotNull ChangeAdminCommit commit) {
 
         ChangeAdmin changeAdmin = commit.generateChangeAdmin();
 
+        // 验证企业信息有效性
         Userspace userspace = userspaceDao.findOne(commit.getSpaceUU());
         Assert.notNull(userspace, String.format("企业%d信息不存在", commit.getSpaceUU()));
-
         changeAdmin.setUserspace(userspace);
+
+        // 验证是否存在已申请更换记录
+        List<ChangeAdmin> requestChanges = changeAdminDao
+                .findByUserspaceAndValidCode(userspace, (short) 1);
+        if (!CollectionUtils.isEmpty(requestChanges)) {
+            ChangeAdmin request = requestChanges.get(0);
+            throw new IllegalArgumentException(
+                    String.format("企业%d用户%s已经申请更换管理员", request.getUserspace().getSpaceUU(),
+                            request.getSubmitterName()));
+        }
+
+        // 验证申请人信息有效性
+        User submitter = userDao.findOne(commit.getSubmitterUU());
+        Assert.notNull(submitter, String.format("申请人%d信息不存在", commit.getSubmitterUU()));
+        Assert.isTrue(userspace.getUsers().contains(submitter),
+                String.format("申请人%d不属于企业%d", commit.getSubmitterUU(), commit.getSpaceUU()));
+        changeAdmin.setSubmitterName(submitter.getRealName());
+
+        // 获取前管理员UU
+        User admin = userspace.getAdmin();
+        if (admin != null) {
+            changeAdmin.setBeforeAdminUU(userspace.getAdmin().getUserUU());
+        }
+
+        // 验证新管理员是否合法
+        admin = userDao.findOne(commit.getAfterAdminUU());
+        Assert.notNull(admin, String.format("管理员用户%d信息不存在", commit.getAfterAdminUU()));
+        Assert.isTrue(userspace.getUsers().contains(admin),
+                String.format("管理员用户%d不属于企业%d", commit.getSubmitterUU(), commit.getSpaceUU()));
+
         changeAdmin = changeAdminDao.save(changeAdmin);
 
         return changeAdmin;

+ 1 - 0
sso-manage-console/src/main/resources/config/application-dev.properties

@@ -19,5 +19,6 @@ app.datasource.filters=stat,slf4j
 app.datasource.connectionProperties=druid.stat.mergeSql=false;druid.stat.slowSqlMillis=5000
 
 spring.jpa.show-sql=true
+spring.jpa.hibernate.ddl-auto=update
 
 management.security.enabled=false

+ 4 - 0
sso-server/src/main/java/com/uas/sso/dao/ChangeAdminDao.java

@@ -1,6 +1,8 @@
 package com.uas.sso.dao;
 
 import com.uas.sso.entity.ChangeAdmin;
+import com.uas.sso.entity.Userspace;
+import java.util.List;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
@@ -10,4 +12,6 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
  * @desc
  **/
 public interface ChangeAdminDao extends JpaRepository<ChangeAdmin, Long>, JpaSpecificationExecutor<ChangeAdmin> {
+
+    List<ChangeAdmin> findByUserspaceAndValidCode(Userspace userspace, short i);
 }

+ 14 - 0
sso-server/src/main/java/com/uas/sso/entity/ChangeAdmin.java

@@ -41,6 +41,12 @@ public class ChangeAdmin implements Serializable {
     @Column(name = "submitteruu", nullable = false)
     private Long submitterUU;
 
+    /**
+     * 提交人姓名
+     */
+    @Column(name = "submitter_name")
+    private String submitterName;
+
     /**
      * 提交时间
      */
@@ -193,4 +199,12 @@ public class ChangeAdmin implements Serializable {
     public void setUserspace(Userspace userspace) {
         this.userspace = userspace;
     }
+
+    public String getSubmitterName() {
+        return submitterName;
+    }
+
+    public void setSubmitterName(String submitterName) {
+        this.submitterName = submitterName;
+    }
 }