diff --git a/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java
index 4a25e22c1c976c5b8d62fb4d06f281cfd00e8592..f5d693db842ef1ce7640cb924b2fe80eb7c13439 100644
--- a/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java
+++ b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntity.java
@@ -6,13 +6,14 @@ import java.util.Objects;
 import com.mortals.framework.ap.SysConstains;
 import com.mortals.framework.model.BaseEntityLong;
 import com.mortals.framework.service.IUser;
+import com.mortals.xhx.base.system.user.model.vo.UserVo;
 
 /**
 *
 * Description:User
 * date: 2021-9-26 16:11:48
 */
-public class UserEntity extends UserEntityExt implements IUser {
+public class UserEntity extends UserVo implements IUser {
     private static final long serialVersionUID = 1632643908537L;
 
 
@@ -126,6 +127,8 @@ public class UserEntity extends UserEntityExt implements IUser {
     */
     private String lastModPwdAddr;
 
+    private String siteIds;
+
     public UserEntity(){
 
     }
@@ -330,7 +333,7 @@ public class UserEntity extends UserEntityExt implements IUser {
 
     @Override
     public String getSiteIds() {
-        return super.getSiteIds();
+        return this.siteIds;
     }
 
     @Override
@@ -338,6 +341,10 @@ public class UserEntity extends UserEntityExt implements IUser {
         return null;
     }
 
+    public void setSiteIds(String siteIds) {
+        this.siteIds = siteIds;
+    }
+
     /**
     * 璁剧疆 绔欑偣id
     * @param siteId
diff --git a/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntityExt.java b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntityExt.java
index 9a73a6bd6b3fea280682085b2b8786d288571656..8c8cff0fa56491367fa5ca41f132f4ff909f2c02 100644
--- a/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntityExt.java
+++ b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntityExt.java
@@ -30,7 +30,6 @@ public class UserEntityExt extends BaseEntityLong {
    private Long expireTime;
 
    private String siteName;
-   private List<Long> roleIds;
    private String siteCode;
 
    private String oldPassword;
diff --git a/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/model/vo/UserVo.java b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/model/vo/UserVo.java
new file mode 100644
index 0000000000000000000000000000000000000000..ed02779044f07d409862f86e88013c02fdecebbd
--- /dev/null
+++ b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/model/vo/UserVo.java
@@ -0,0 +1,44 @@
+package com.mortals.xhx.base.system.user.model.vo;
+
+
+import com.mortals.framework.model.BaseEntityLong;
+import lombok.Data;
+
+/**
+ * 鐢ㄦ埛淇℃伅涓氬姟瑙嗗浘瀵硅薄
+ *
+ * @author zxfei
+ * @date 2022-07-05
+ */
+@Data
+public class UserVo extends BaseEntityLong {
+
+    /**
+     * 绔欑偣鍚嶇О
+     */
+    private String siteName;
+
+    private String roleIds;
+    /**
+     * 鍞竴鏍囪瘑
+     */
+    private String token;
+    /**
+     * 鑿滃崟鏍�
+     */
+    private String menuUrl;
+
+    /**
+     * 鐧诲綍鏃堕棿
+     */
+    private Long loginTime;
+
+    /**
+     * 杩囨湡鏃堕棿
+     */
+    private Long expireTime;
+
+    private String oldPassword;
+    private String newPassword;
+    private String siteIds;
+}
\ No newline at end of file
diff --git a/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/service/UserService.java b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/service/UserService.java
index 81740607144e4ab689cee25c6715889ede0a53b8..c5c2047b84bceb7b30bb23479e06a1360c1fb5b6 100644
--- a/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/service/UserService.java
+++ b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/service/UserService.java
@@ -31,35 +31,7 @@ import java.util.Set;
  */
 
 public interface UserService extends ICRUDCacheService<UserEntity,Long> {
-    /**
-     * 鐢ㄦ埛鐧诲綍
-     *
-     * @param loginName 鐧诲綍鐢ㄦ埛鍚�
-     * @param password  鐧诲綍瀵嗙爜
-     * @param loginIp   鐧诲綍IP
-     * @return
-     * @throws AppException
-     */
-    public UserEntity doLogin(String loginName, String password, String loginIp) throws AppException;
 
-    /**
-     * 鏍¢獙鐢ㄦ埛鍚嶄笌瀵嗙爜鏄惁姝g‘
-     *
-     * @param loginName
-     * @param password
-     * @return
-     * @throws AppException
-     */
-    public UserEntity doCheckUser(String loginName, String password) throws AppException;
-
-    /**
-     * 妫€鏌ョ敤鎴锋槸鍚﹀瓨鍦�
-     *
-     * @param loginName 鐧诲綍鐢ㄦ埛鍚�
-     * @param userId    瀵嗙爜
-     * @return
-     */
-    public boolean existUser(String loginName, Long userId) throws AppException;
 
     /**
      * 閫氳繃鐧诲綍鐢ㄦ埛鑾峰彇鑿滃崟鍔熻兘鏉冮檺
@@ -67,7 +39,7 @@ public interface UserService extends ICRUDCacheService<UserEntity,Long> {
      * @param user
      * @return
      */
-    public List<MenuEntity> findOutlookBarList(IUser user);
+     List<MenuEntity> findOutlookBarList(IUser user);
 
     /**
      * 鏌ヨ鐢ㄦ埛鎵€鏈夋湁鏉冮檺鐨勮彍鍗旾D
@@ -75,47 +47,7 @@ public interface UserService extends ICRUDCacheService<UserEntity,Long> {
      * @param userEntity
      * @return
      */
-    public Set<Long> findAllAuthIds(UserEntity userEntity) throws AppException;
-
-    /**
-     * 鏌ヨ鐢ㄦ埛璁板綍
-     *
-     * @param platformId
-     * @param params
-     * @param currPage
-     * @param prePageResult
-     * @return
-     * @throws AppException
-     */
-    public Result<UserEntity> find(Long platformId, UserEntity params, int currPage, int prePageResult) throws AppException;
-
-    /**
-     * 涓哄鎴峰垱寤虹敤鎴�
-     *
-     * @param currUser     褰撳墠鐢ㄦ埛
-     * @param customerId   瀹㈡埛ID
-     * @param customerName 瀹㈡埛鍚嶇О
-     * @param loginName
-     * @param password
-     * @param userName
-     * @param mobile
-     * @return
-     * @throws AppException
-     */
-    public UserEntity createUser(IUser currUser, Long customerId, String customerName, String loginName, String password,
-                                 String userName, String mobile) throws AppException;
-
-    /**
-     * 鐢ㄦ埛淇敼瀵嗙爜
-     *
-     * @param loginName
-     * @param oldPwd
-     * @param newPwd
-     * @return
-     * @throws AppException
-     */
-    public boolean updateUserPwd(String loginName, String oldPwd, String newPwd) throws AppException;
-
+    Set<Long> findAllAuthIds(UserEntity userEntity) throws AppException;
 
     Rest<Void> refreshUser();
 
diff --git a/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/service/impl/UserServiceImpl.java b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/service/impl/UserServiceImpl.java
index a30e92f97111232c03abf476ae353ed35f556250..dec3b46469357c3f711c2940903e091e56a1cce8 100644
--- a/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/service/impl/UserServiceImpl.java
+++ b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/service/impl/UserServiceImpl.java
@@ -26,6 +26,7 @@ import com.mortals.xhx.base.system.resource.model.ResourceEntity;
 import com.mortals.xhx.base.system.resource.service.ResourceService;
 import com.mortals.xhx.base.system.role.dao.RoleUserDao;
 import com.mortals.xhx.base.system.role.model.RoleUserEntity;
+import com.mortals.xhx.base.system.role.model.RoleUserQuery;
 import com.mortals.xhx.base.system.role.service.RoleUserService;
 import com.mortals.xhx.base.system.user.dao.UserDao;
 import com.mortals.xhx.base.system.user.model.UserEntity;
@@ -79,146 +80,36 @@ public class UserServiceImpl extends AbstractCRUDCacheServiceImpl<UserDao, UserE
     }
 
 
-    private void doHandlerUser(UserEntity entity) throws AppException {
-        if (StringUtils.isNotEmpty(entity.getLoginPwd())) {
-            try {
-                entity.setLoginPwd(SecurityUtil.md5DoubleEncoding(entity.getLoginPwd()));
-            } catch (Exception e) {
-                throw new AppException("瀵嗙爜杞崲寮傚父");
-            }
-        } else {
-            entity.setLoginPwd(null);
-        }
-//        if (entity.isSystemUser()) {
-//            entity.setUserType(UserType.SYSTEM.getValue());
-//        } else {
-//            entity.setUserType(UserType.CUSTOMER.getValue());
-//        }
-    }
-
-    @Override
-    protected void saveBefore(UserEntity entity, Context context) throws AppException {
-        this.doHandlerUser(entity);
-    }
-
     @Override
     protected void saveAfter(UserEntity entity, Context context) throws AppException {
-        if (CollectionUtils.isNotEmpty(entity.getRoleIds())) {
-            List<RoleUserEntity> roleUserEntityList = new ArrayList<>();
-            entity.getRoleIds().stream().forEach(item -> {
-                RoleUserEntity roleUserEntity = new RoleUserEntity();
-                roleUserEntity.setUserId(entity.getId());
-                roleUserEntity.setRoleId(item);
-                roleUserEntityList.add(roleUserEntity);
-            });
-            roleUserDao.insertBatch(roleUserEntityList);
-        }
-    }
-
-    @Override
-    protected void updateBefore(UserEntity entity, Context context) throws AppException {
-        if (entity.getId().longValue() == SysConstains.ADMIN_ID && !context.getUser().isAdmin()) {
-            throw new AppException("浣犳病鏈夋潈闄愭墽琛岃鎿嶄綔");
-        }
-        this.doHandlerUser(entity);
+        updateUserRole(entity);
     }
 
     @Override
     protected void updateAfter(UserEntity entity, Context context) throws AppException {
-        if (CollectionUtils.isNotEmpty(entity.getRoleIds())) {
-            List<RoleUserEntity> roleUserEntityList = new ArrayList<>();
-            entity.getRoleIds().stream().forEach(item -> {
-                RoleUserEntity roleUserEntity = new RoleUserEntity();
-                roleUserEntity.setUserId(entity.getId());
-                roleUserEntity.setRoleId(item);
-                roleUserEntityList.add(roleUserEntity);
-            });
-            RoleUserEntity condition = new RoleUserEntity();
-            condition.setUserId(entity.getId());
-            roleUserDao.delete(condition);
-            roleUserDao.insertBatch(roleUserEntityList);
-        }
+        updateUserRole(entity);
     }
 
-    @Override
-    protected UserEntity findBefore(UserEntity params, Context context) throws AppException {
-//        if (StringUtils.isNotEmpty(params.getDeptIds())) {
-//            params.setDeptIds(StringUtils.fillWithMark(params.getDeptIds(), ","));
-//        }
-        return super.findBefore(params, context);
-    }
-
-    @Override
-    protected UserEntity findBefore(UserEntity params, PageInfo pageInfo, Context context) throws AppException {
-//        if (StringUtils.isNotEmpty(params.getDeptIds())) {
-//            params.setDeptIds(StringUtils.fillWithMark(params.getDeptIds(), ","));
-//        }
-        return super.findBefore(params, pageInfo, context);
+    private void updateUserRole(UserEntity entity) {
+        if (!ObjectUtils.isEmpty(entity.getId()) && entity.getId().longValue() != SysConstains.ADMIN_ID && !ObjectUtils.isEmpty(entity.getRoleIds())) {
+            RoleUserQuery roleUserQuery = new RoleUserQuery();
+            roleUserQuery.setUserId(entity.getId());
+            List<Long> idList = Arrays.asList(entity.getRoleIds().split(",")).stream().map(Long::parseLong).collect(Collectors.toList());
+            roleUserQuery.setRoleIdList(idList);
+            roleUserService.doDistributionRole(roleUserQuery);
+        }
     }
 
     @Override
     protected void findAfter(UserEntity params, PageInfo pageInfo, Context context, List<UserEntity> list) throws AppException {
-        if (CollectionUtils.isNotEmpty(list)) {
-            list.stream().forEach(item -> {
-                RoleUserEntity query = new RoleUserEntity();
-                query.setUserId(item.getId());
-                List<RoleUserEntity> roleUserEntityList = roleUserDao.getList(query);
-                List<Long> roleIds = new ArrayList<>();
-                roleUserEntityList.stream().forEach(role -> {
-                    roleIds.add(role.getRoleId());
-                });
-                item.setRoleIds(roleIds);
-            });
-            //List<RoleUserEntity> roleUserEntityList =
-        }
-    }
-
-    public UserEntity findByLoginName(String loginName) {
-        UserQuery params = new UserQuery();
-        params.setLoginName(loginName);
-        List<UserEntity> userList = super.dao.getList(params);
-        if (userList != null && userList.size() > 0) {
-            return userList.get(0);
-        }
-        return null;
+        list.stream().peek(item -> {
+            RoleUserQuery roleUserQuery = new RoleUserQuery();
+            roleUserQuery.setUserId(item.getId());
+            String roleIds = roleUserService.find(roleUserQuery).stream().map(RoleUserEntity::getRoleId).map(String::valueOf).collect(Collectors.joining(","));
+            item.setRoleIds(roleIds);
+        }).count();
     }
 
-    @Override
-    public UserEntity doLogin(String loginName, String password, String loginIp) throws AppException {
-        UserEntity sysUser = this.findByLoginName(loginName);
-        if (sysUser == null || !sysUser.getLoginName().equals(loginName)) {
-            throw new AppException("鐢ㄦ埛鍚嶄笉瀛樺湪锛�");
-        }
-        try {
-            if (!sysUser.getLoginPwd().equals(SecurityUtil.md5DoubleEncoding(password))) {
-                throw new AppException("鐧诲綍瀵嗙爜閿欒锛�");
-            }
-        } catch (Exception e) {
-            throw new AppException("瀵嗙爜楠岃鍑洪敊锛�", e);
-        }
-        UserEntity update = new UserEntity();
-        update.setId(sysUser.getId());
-        update.setLastLoginAddress(loginIp);
-        update.setLastLoginTime(new Date());
-        this.dao.update(update);
-        return sysUser;
-    }
-
-    @Override
-    public UserEntity doCheckUser(String loginName, String password) throws AppException {
-        UserEntity sysUser = this.findByLoginName(loginName);
-        if (sysUser == null || !sysUser.getLoginName().equals(loginName)) {
-            return null;
-        }
-        try {
-            if (!sysUser.getLoginPwd().equals(SecurityUtil.md5DoubleEncoding(password))) {
-                return null;
-            }
-        } catch (Exception e) {
-            return null;
-        }
-        return sysUser;
-    }
 
     @Override
     public Set<Long> findAllAuthIds(UserEntity userEntity) throws AppException {
@@ -285,79 +176,6 @@ public class UserServiceImpl extends AbstractCRUDCacheServiceImpl<UserDao, UserE
         return outlookBar;
     }
 
-    @Override
-    public Result<UserEntity> find(Long platformId, UserEntity params, int currPage, int prePageResult) throws AppException {
-        PageInfo pageInfo = new PageInfo(prePageResult);
-        pageInfo.setCurrPage(currPage);
-        return super.find(params, pageInfo, null);
-    }
-
-    @Override
-    public UserEntity createUser(IUser currUser, Long customerId, String customerName, String loginName, String password,
-                                 String userName, String mobile) throws AppException {
-        try {
-            UserEntity entity = new UserEntity();
-            entity.initAttrValue();
-            entity.setLoginName(loginName);
-            entity.setRealName(userName);
-            entity.setCustomerId(customerId);
-            entity.setLoginPwd(password);
-            entity.setMobile(mobile);
-            entity.setUserType(UserType.CUSTOMER.getValue());
-            entity.setCreateTime(new Date());
-            if (currUser != null) {
-                entity.setCreateUser(currUser.getLoginName());
-                entity.setCreateUserName(currUser.getRealName());
-            }
-            this.doHandlerUser(entity);
-            dao.insert(entity);
-            return entity;
-        } catch (Exception e) {
-            log.error("缁欏鎴峰垱寤虹敤鎴峰紓甯�-->customerId:" + customerId + ",customerName:" + customerName + ",loginName:" + loginName +
-                    "-->鍘熷洜锛�" + e.getMessage());
-            return null;
-        }
-    }
-
-    @Override
-    public boolean existUser(String loginName, Long userId) throws AppException {
-        UserEntity sysUser = this.findByLoginName(loginName);
-        boolean bRet = false;
-        if (sysUser != null) {
-            if (userId == null || userId == 0 || userId.longValue() != sysUser.getId().longValue()) {
-                bRet = true;
-            }
-        }
-        return bRet;
-    }
-
-    @Override
-    public boolean updateUserPwd(String loginName, String oldPwd, String newPwd) throws AppException {
-        UserEntity sysUser = this.findByLoginName(loginName);
-        if (sysUser == null || !sysUser.getLoginName().equals(loginName)) {
-            throw new AppException("甯愬彿閿欒锛�");
-        }
-        try {
-            if (!sysUser.getLoginPwd().equals(SecurityUtil.md5DoubleEncoding(oldPwd))) {
-                throw new AppException("鍘熷瀵嗙爜閿欒锛�");
-            }
-        } catch (Exception e) {
-            throw new AppException("瀵嗙爜楠岃鍑洪敊锛�", e);
-        }
-        try {
-            sysUser.setLoginPwd(SecurityUtil.md5DoubleEncoding(newPwd));
-            sysUser.setLoginPwd3(sysUser.getLoginPwd2());
-            sysUser.setLoginPwd2(sysUser.getLoginPwd1());
-            sysUser.setLoginPwd1(sysUser.getLoginPwd());
-            sysUser.setLastModPwdTime(new Date());
-        } catch (Exception e) {
-            throw new AppException("瀵嗙爜杞崲寮傚父锛�", e);
-        }
-        dao.update(sysUser);
-        return true;
-    }
-
-
     @Override
     public Rest<Void> refreshUser() {
         UserPdu userPdu = new UserPdu();
@@ -420,6 +238,15 @@ public class UserServiceImpl extends AbstractCRUDCacheServiceImpl<UserDao, UserE
         return Rest.ok();
     }
 
+    @Override
+    protected void removeAfter(Long[] ids, Context context, int result) throws AppException {
+        super.removeAfter(ids, context, result);
+        RoleUserQuery roleUserQuery = new RoleUserQuery();
+        roleUserQuery.setUserIdList(Arrays.asList(ids));
+        Long[] userIds = roleUserService.find(roleUserQuery).stream().map(RoleUserEntity::getId).toArray(Long[]::new);
+        roleUserService.remove(userIds, context);
+    }
+
 
     @Override
     public UserDao getUserDao() {
diff --git a/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/web/UserController.java b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/web/UserController.java
index e216534aa5bff5314fe62c3303c5cc747dd54789..6c0b5318a9fef1e5138e5643f62b6b95dbeaf178 100644
--- a/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/web/UserController.java
+++ b/sample-form-manager/src/main/java/com/mortals/xhx/base/system/user/web/UserController.java
@@ -21,7 +21,10 @@ import com.mortals.framework.common.Rest;
 import com.mortals.framework.service.IUser;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.base.system.role.model.RoleEntity;
+import com.mortals.xhx.base.system.role.model.RoleUserEntity;
+import com.mortals.xhx.base.system.role.model.RoleUserQuery;
 import com.mortals.xhx.base.system.role.service.RoleService;
+import com.mortals.xhx.base.system.role.service.RoleUserService;
 import com.mortals.xhx.common.code.UserStatus;
 import com.mortals.framework.common.IBaseEnum;
 import com.mortals.framework.common.code.UserType;
@@ -55,6 +58,9 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
     @Autowired
     private RoleService roleService;
 
+    @Autowired
+    private RoleUserService roleUserService;
+
     public UserController() {
         super.setModuleDesc("鐢ㄦ埛淇℃伅");
     }
@@ -69,34 +75,6 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
         super.init(model, context);
     }
 
-    @Override
-    protected int editAfter(Long id, Map<String, Object> model, UserEntity entity, Context context) throws AppException {
-        entity.setLoginPwd(null);
-        entity.setLoginPwd1(null);
-        entity.setLoginPwd2(null);
-        entity.setLoginPwd3(null);
-        return 1;
-    }
-
-    @RequestMapping(value = "change/password", method = RequestMethod.POST)
-    public String changePassword(@RequestBody UserEntity entity) {
-
-        IUser user = this.getCurUser();
-        if(user == null){
-            return this.createFailJsonResp("璇峰厛鐧诲綍");
-        }
-        JSONObject ret = new JSONObject();
-        try {
-            service.updateUserPwd(super.getCurUser().getLoginName(), entity.getOldPassword(), entity.getNewPassword());
-            ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
-            ret.put(KEY_RESULT_MSG, "瀵嗙爜淇敼鎴愬姛锛�");
-        } catch (Exception e) {
-            ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
-            ret.put(KEY_RESULT_MSG, super.convertException(e));
-        }
-        return ret.toJSONString();
-    }
-
 
     @PostMapping({"refreshUser"})
     @UnAuth