diff --git a/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminAccountController.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminAccountController.java
index 0d5f4d6..dbb8dda 100644
--- a/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminAccountController.java
+++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminAccountController.java
@@ -1,6 +1,7 @@
 package com.supwisdom.institute.backend.system.api.v1.admin;
 
 import java.util.HashMap;
+import java.util.List;
 
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
@@ -24,6 +25,7 @@
 import com.supwisdom.institute.backend.common.framework.entity.EntityUtils;
 import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
 import com.supwisdom.institute.backend.system.api.vo.request.AccountCreateRequest;
+import com.supwisdom.institute.backend.system.api.vo.request.AccountDeleteBatchRequest;
 import com.supwisdom.institute.backend.system.api.vo.request.AccountQueryRequest;
 import com.supwisdom.institute.backend.system.api.vo.request.AccountRelateGroupsRequest;
 import com.supwisdom.institute.backend.system.api.vo.request.AccountRelateRolesRequest;
@@ -31,6 +33,7 @@
 import com.supwisdom.institute.backend.system.api.vo.request.AccountRelatedRolesRequest;
 import com.supwisdom.institute.backend.system.api.vo.request.AccountUpdateRequest;
 import com.supwisdom.institute.backend.system.api.vo.response.AccountCreateResponseData;
+import com.supwisdom.institute.backend.system.api.vo.response.AccountDeleteBatchResponseData;
 import com.supwisdom.institute.backend.system.api.vo.response.AccountLoadResponseData;
 import com.supwisdom.institute.backend.system.api.vo.response.AccountQueryResponseData;
 import com.supwisdom.institute.backend.system.api.vo.response.AccountRelateGroupsResponseData;
@@ -414,6 +417,21 @@
     AccountRemoveResponseData data = AccountRemoveResponseData.build(tmp);
     return new DefaultApiResponse<AccountRemoveResponseData>(data);
   }
+  
+  @DeleteMapping(path = "/batch", consumes = MimeTypeUtils.APPLICATION_JSON_VALUE, produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  @ResponseStatus(value = HttpStatus.OK)
+  @ResponseBody
+  public DefaultApiResponse<AccountDeleteBatchResponseData> deleteBatch(
+      @RequestBody AccountDeleteBatchRequest deleteBatchRequest) {
+    
+    System.out.println(deleteBatchRequest.getIds());
+    List<String> ids = deleteBatchRequest.getIds();
+    
+    accountService.deleteBatch(ids);
+    
+    AccountDeleteBatchResponseData data = AccountDeleteBatchResponseData.build(ids);
+    return new DefaultApiResponse<AccountDeleteBatchResponseData>(data);
+  }
 
   /**
    * 
diff --git a/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/AccountDeleteBatchRequest.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/AccountDeleteBatchRequest.java
new file mode 100644
index 0000000..5b5df24
--- /dev/null
+++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/request/AccountDeleteBatchRequest.java
@@ -0,0 +1,21 @@
+package com.supwisdom.institute.backend.system.api.vo.request;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.request.IApiRequest;
+
+public class AccountDeleteBatchRequest implements IApiRequest {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -5886243153431313069L;
+  
+  @Getter
+  @Setter
+  private List<String> ids;
+
+}
diff --git a/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/AccountDeleteBatchResponseData.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/AccountDeleteBatchResponseData.java
new file mode 100644
index 0000000..f712942
--- /dev/null
+++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/AccountDeleteBatchResponseData.java
@@ -0,0 +1,35 @@
+package com.supwisdom.institute.backend.system.api.vo.response;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+/**
+ * @author loie
+ */
+public class AccountDeleteBatchResponseData implements IApiResponseData {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 8625399816385346436L;
+
+  @Getter
+  @Setter
+  private List<String> ids;
+
+  private AccountDeleteBatchResponseData() {
+    
+  }
+  
+  public static AccountDeleteBatchResponseData build(List<String> ids) {
+    AccountDeleteBatchResponseData data = new AccountDeleteBatchResponseData();
+    data.setIds(ids);
+    
+    return data;
+  }
+  
+}
diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/entity/Account.java b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/entity/Account.java
index 71e863f..d241d32 100644
--- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/entity/Account.java
+++ b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/entity/Account.java
@@ -14,6 +14,10 @@
    * 
    */
   private static final long serialVersionUID = 7955624268022038897L;
+  
+  public static final String STATUS_ENABLED = "1";
+  public static final String STATUS_DISABLED = "0";
+  
 
   /**
    * 用户名
@@ -53,7 +57,13 @@
    */
   @Column(name = "NAME")
   private String name;
-  
+
+  /**
+   * 备注
+   */
+  @Column(name = "MEMO")
+  private String memo;
+
   /**
    * 状态（1 启用，0 停用）
    */
diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/service/AccountService.java b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/service/AccountService.java
index 83405ae..9e29e31 100644
--- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/service/AccountService.java
+++ b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/service/AccountService.java
@@ -36,8 +36,35 @@
 
   @Autowired
   private AccountRoleRepository accountRoleRepository;
-
   
+  
+  @Override
+  public Account insert(Account entity) {
+
+    entity.setEnabled(Account.STATUS_ENABLED.equals(entity.getStatus()));
+    entity.setAccountNonExpired(true);
+    entity.setAccountNonLocked(true);
+    entity.setCredentialsNonExpired(true);
+    
+    return super.insert(entity);
+  }
+  
+  @Override
+  public Account update(Account entity) {
+    
+    entity.setEnabled(Account.STATUS_ENABLED.equals(entity.getStatus()));
+
+    return super.update(entity);
+  }
+  
+
+  public void deleteBatch(List<String> ids) {
+    
+    ids.stream().forEach(id -> {
+      this.deleteById(id);
+    });
+  }
+
 
   public Page<AccountGroup> selectAccountGroups(int pageIndex, int pageSize, Map<String, Object> mapBean) {
 
