Browse Source

企业更换管理员流程处理接口

huxz 8 years ago
parent
commit
a30fdafa14

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

@@ -0,0 +1,47 @@
+package com.uas.sso.sso.backend.api;
+
+import com.uas.sso.entity.ChangeAdmin;
+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 com.uas.sso.sso.backend.support.ResultBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Api interface implementations when change admin.
+ *
+ * @author huxz
+ */
+@RestController
+@RequestMapping(path = "/api/user/space/admin")
+public class ChangeAdminController {
+
+    private final ChangeAdminService changeAdminService;
+
+    @Autowired
+    public ChangeAdminController(
+            ChangeAdminService changeAdminService) {
+        this.changeAdminService = changeAdminService;
+    }
+
+    @RequestMapping(method = RequestMethod.POST, path = "//submitChange",
+            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public ResultBean<ChangeAdmin> submitChangeAdminRequest(@RequestBody @Validated ChangeAdminCommit commit) {
+
+        return new ResultBean<>(changeAdminService.submitChangeAdminRequest(commit));
+    }
+
+    @RequestMapping(method = RequestMethod.PUT, path = "//auditChange",
+            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public ResultBean<Boolean> auditChangeAdminRequest(@RequestBody @Validated ChangeAdminAudit audit) {
+
+        return new ResultBean<>(changeAdminService.auditChangeAdminRequest(audit));
+    }
+
+}

+ 20 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/config/ControllerExceptionHandler.java

@@ -2,12 +2,15 @@ package com.uas.sso.sso.backend.config;
 
 import com.uas.sso.sso.backend.support.ResultBean;
 import java.io.IOException;
+import java.util.List;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -55,4 +58,21 @@ public class ControllerExceptionHandler extends ResponseEntityExceptionHandler {
         headers.add("Content-Type", MediaType.APPLICATION_JSON_UTF8_VALUE);
         return handleExceptionInternal(ex, new ResultBean<>(ex), headers, status, request);
     }
+
+    @Override
+    protected ResponseEntity<Object> handleMethodArgumentNotValid(
+            MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status,
+            WebRequest request) {
+        if (logger.isDebugEnabled()) {
+            logger.debug("Validation Error:", ex);
+        }
+
+        // 设置响应结果取参数校验失败第一条原因
+        ResultBean<Object> resultBean = new ResultBean<>(ex);
+        List<ObjectError> allErrors = ex.getBindingResult().getAllErrors();
+        resultBean.setMessage(allErrors.get(0).getDefaultMessage());
+
+        headers.add("Content-Type", MediaType.APPLICATION_JSON_UTF8_VALUE);
+        return handleExceptionInternal(ex, resultBean, headers, status, request);
+    }
 }

+ 78 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/dto/ChangeAdminAudit.java

@@ -0,0 +1,78 @@
+package com.uas.sso.sso.backend.dto;
+
+import com.uas.sso.entity.ChangeAdmin;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import org.hibernate.validator.constraints.Length;
+import org.springframework.util.Assert;
+
+/**
+ * Store change admin info when Admin audits.
+ *
+ * @author huxz
+ */
+public class ChangeAdminAudit {
+
+    /**
+     * 更换管理员提交记录ID
+     */
+    @NotNull(message = "更换管理员提交记录ID不能为空")
+    @Min(value = 0, message = "更换管理员提交记录ID必须大于0")
+    private Long handlerId;
+
+    @NotNull(message = "更换管理员提交记录审核人姓名不能为空")
+    private String auditor;
+
+    @NotNull(message = "审核状态码不能为空")
+    private Short validCode;
+
+    @Length(max = 100, message = "审核不通过原因信息不能超过100字")
+    private String invalidReason;
+
+    public Long getHandlerId() {
+        return handlerId;
+    }
+
+    public void setHandlerId(Long handlerId) {
+        this.handlerId = handlerId;
+    }
+
+    public String getAuditor() {
+        return auditor;
+    }
+
+    public void setAuditor(String auditor) {
+        this.auditor = auditor;
+    }
+
+    public Short getValidCode() {
+        return validCode;
+    }
+
+    public void setValidCode(Short validCode) {
+        this.validCode = validCode;
+    }
+
+    public String getInvalidReason() {
+        return invalidReason;
+    }
+
+    public void setInvalidReason(String invalidReason) {
+        this.invalidReason = invalidReason;
+    }
+
+    public ChangeAdmin fillChangeAdmin(@NotNull ChangeAdmin changeAdmin) {
+        Assert.notNull(changeAdmin, "管理员更换记录不能为空");
+
+        changeAdmin.setAuditor(this.auditor);
+        changeAdmin.setValidCode(this.validCode);
+        changeAdmin.setInvalidReason(this.invalidReason);
+
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        changeAdmin.setValidDate(dateFormat.format(new Date()));
+        return changeAdmin;
+    }
+}

+ 97 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/dto/ChangeAdminCommit.java

@@ -0,0 +1,97 @@
+package com.uas.sso.sso.backend.dto;
+
+import com.uas.sso.entity.ChangeAdmin;
+import java.sql.Timestamp;
+import javax.validation.constraints.NotNull;
+import org.hibernate.validator.constraints.Length;
+
+/**
+ * Store change admin info when enterprise user commit.
+ *
+ * @author huxz
+ */
+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 afterAdminUU;
+
+    @NotNull(message = "联系人手机号不能为空")
+    private String contactTel;
+
+    @NotNull(message = "申请原因不能为空")
+    @Length(max = 100, message = "申请原因不能超过100字")
+    private String changeReason;
+
+    public Long getSubmitterUU() {
+        return submitterUU;
+    }
+
+    public void setSubmitterUU(Long submitterUU) {
+        this.submitterUU = submitterUU;
+    }
+
+    public Long getSpaceUU() {
+        return spaceUU;
+    }
+
+    public void setSpaceUU(Long spaceUU) {
+        this.spaceUU = spaceUU;
+    }
+
+    public Long getBeforeAdminUU() {
+        return beforeAdminUU;
+    }
+
+    public void setBeforeAdminUU(Long beforeAdminUU) {
+        this.beforeAdminUU = beforeAdminUU;
+    }
+
+    public Long getAfterAdminUU() {
+        return afterAdminUU;
+    }
+
+    public void setAfterAdminUU(Long afterAdminUU) {
+        this.afterAdminUU = afterAdminUU;
+    }
+
+    public String getContactTel() {
+        return contactTel;
+    }
+
+    public void setContactTel(String contactTel) {
+        this.contactTel = contactTel;
+    }
+
+    public String getChangeReason() {
+        return changeReason;
+    }
+
+    public void setChangeReason(String changeReason) {
+        this.changeReason = changeReason;
+    }
+
+    public ChangeAdmin generateChangeAdmin() {
+        ChangeAdmin admin = new ChangeAdmin();
+
+        admin.setSubmitterUU(this.submitterUU);
+        admin.setBeforeAdminUU(this.beforeAdminUU);
+        admin.setAfterAdminUU(this.afterAdminUU);
+        admin.setContactTel(this.contactTel);
+        admin.setChangeReason(this.changeReason);
+        admin.setSubmitDate(new Timestamp(System.currentTimeMillis()));
+        admin.setValidCode((short) 1);
+        return admin;
+    }
+}

+ 28 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/ChangeAdminService.java

@@ -0,0 +1,28 @@
+package com.uas.sso.sso.backend.service;
+
+import com.uas.sso.entity.ChangeAdmin;
+import com.uas.sso.sso.backend.dto.ChangeAdminAudit;
+import com.uas.sso.sso.backend.dto.ChangeAdminCommit;
+import javax.validation.constraints.NotNull;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * Abstract class for operations of change admin record when admin received records.
+ *
+ * @author huxz
+ */
+public interface ChangeAdminService {
+
+    Page<ChangeAdmin> showUserByPagination(Pageable page);
+
+    /**
+     * Just for testing
+     *
+     * @param commit    commit info
+     */
+    @Deprecated
+    ChangeAdmin submitChangeAdminRequest(@NotNull ChangeAdminCommit commit);
+
+    Boolean auditChangeAdminRequest(@NotNull ChangeAdminAudit audit);
+}

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

@@ -0,0 +1,69 @@
+package com.uas.sso.sso.backend.service.impl;
+
+import com.uas.sso.dao.ChangeAdminDao;
+import com.uas.sso.dao.UserspaceDao;
+import com.uas.sso.entity.ChangeAdmin;
+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 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.util.Assert;
+
+/**
+ * An implementations of {@code ChangeAdminService}.
+ *
+ * @author huxz
+ */
+@Service
+public class ChangeAdminServiceImpl implements ChangeAdminService {
+
+    private final ChangeAdminDao changeAdminDao;
+
+    private final UserspaceDao userspaceDao;
+
+    @Autowired
+    public ChangeAdminServiceImpl(ChangeAdminDao changeAdminDao,
+            UserspaceDao userspaceDao) {
+        this.changeAdminDao = changeAdminDao;
+        this.userspaceDao = userspaceDao;
+    }
+
+    @Override
+    public Page<ChangeAdmin> showUserByPagination(Pageable page) {
+
+        return changeAdminDao.findAll(page);
+    }
+
+    @Override
+    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);
+        changeAdmin = changeAdminDao.save(changeAdmin);
+
+        return changeAdmin;
+    }
+
+    @Override
+    public Boolean auditChangeAdminRequest(@NotNull ChangeAdminAudit audit) {
+
+        ChangeAdmin changeAdmin = changeAdminDao.findOne(audit.getHandlerId());
+        Assert.notNull(changeAdmin, String.format("更换管理员记录%s不存在", audit.getHandlerId()));
+
+        changeAdmin = audit.fillChangeAdmin(changeAdmin);
+        changeAdminDao.save(changeAdmin);
+
+        // 更新企业管理信息,并发送通知信息
+
+        return true;
+    }
+}

+ 20 - 1
sso-server/src/main/java/com/uas/sso/entity/ChangeAdmin.java

@@ -1,8 +1,16 @@
 package com.uas.sso.entity;
 
-import javax.persistence.*;
 import java.io.Serializable;
 import java.sql.Timestamp;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
 
 /**
  * @author wangmh
@@ -87,6 +95,9 @@ public class ChangeAdmin implements Serializable {
     @Column(name = "contact_tel")
     private String contactTel;
 
+    @OneToOne(fetch = FetchType.EAGER)
+    private Userspace userspace;
+
     public Long getId() {
         return id;
     }
@@ -174,4 +185,12 @@ public class ChangeAdmin implements Serializable {
     public void setContactTel(String contactTel) {
         this.contactTel = contactTel;
     }
+
+    public Userspace getUserspace() {
+        return userspace;
+    }
+
+    public void setUserspace(Userspace userspace) {
+        this.userspace = userspace;
+    }
 }