# 用户拓展 在用户现有字段基础上,自定义 **拓展属性字段**,新增拓展表,通过 **user_id** 字段关联用户。 ## 创建实体类 实体类继承自 `ink.wgink.pojo.dtos.user.UserDTO` ```java import ink.wgink.pojo.dtos.user.UserDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; public class UserExpandDTO extends UserDTO { private String userExpandId; private String title; private String company; private String summary; public UserExpandDTO() { } public UserExpandDTO(UserDTO userDTO) { setUserDTO(userDTO); } public void setUserDTO(UserDTO userDTO) { super.setUserId(userDTO.getUserId()); super.setUserUsername(userDTO.getUserUsername()); super.setUserName(userDTO.getUserName()); super.setUserAvatar(userDTO.getUserAvatar()); super.setUserEmail(userDTO.getUserEmail()); super.setUserLatitude(userDTO.getUserLatitude()); super.setUserExpiredDate(userDTO.getUserExpiredDate()); super.setUserLongitude(userDTO.getUserLongitude()); super.setUserPhone(userDTO.getUserPhone()); super.setUserState(userDTO.getUserState()); super.setUserType(userDTO.getUserType()); super.setUserUKey(userDTO.getUserUKey()); super.setDepartmentIds(userDTO.getDepartmentIds()); super.setDepartmentNames(userDTO.getDepartmentNames()); super.setPositionIds(userDTO.getPositionIds()); super.setPositionNames(userDTO.getPositionNames()); super.setRoleIds(userDTO.getRoleIds()); super.setRoleNames(userDTO.getRoleNames()); super.setGmtCreate(userDTO.getGmtCreate()); super.setLastLoginAddress(userDTO.getLastLoginAddress()); super.setLastLoginTime(userDTO.getLastLoginTime()); super.setLoginType(userDTO.getLoginType()); } } ``` ## 新建接口 实现或继承接口 `ink.wgink.interfaces.user.IUserExpandBaseService` 可以直接实现,也可以通过接口继承 ```java import ink.wgink.interfaces.user.IUserExpandBaseService; import java.util.List; import java.util.Map; public interface IUserExpandService extends IUserExpandBaseService { /** * 修改 * * @param userId 用户ID * @param userExpandVO 拓展属性 */ void update(String userId, UserExpandVO userExpandVO); /** * 修改 * * @param token * @param userExpandVO * @throws Exception */ void updateByToken(String token, UserExpandVO userExpandVO) throws Exception; /** * 用户拓展详情 * * @param params * @return */ UserExpandPO getPO(Map params); /** * 用户拓展详情 * * @param userId * @return */ UserExpandPO getPO(String userId); /** * 用户拓展列表 * * @param params * @return */ List listPO(Map params); /** * 详情 * * @param token * @return */ UserExpandDTO getByToken(String token) throws Exception; } ``` ## 实现接口 当方法 `getRoute` 有返回值时,用户列表中会出现 拓展属性 按钮,用户通过点击按钮打开拓展属性的编辑页面。在编辑页面打开时,在 `window.location.href` 上会携带 `userId` 字段。 为了保证唯一,在提交时,需判断用户是否已经有值。如果有值则修改,反之新增。 示例代码中,没有完善的方法可根据情况自行处理。 ```java import ink.wgink.interfaces.user.IUserBaseService; import ink.wgink.pojo.ListPage; import ink.wgink.pojo.dtos.user.UserDTO; import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.util.map.HashMapUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; @Service public class UserExpandServiceImpl implements IUserExpandService { @Autowired private IUserExpandDao userExpandDao; @Autowired private IUserBaseService userBaseService; @Override public void update(String userId, UserExpandVO userExpandVO) { UserExpandPO userExpandPO = getPO(userId); if (userExpandPO != null) { updateInfo(null, userId, userExpandVO); } else { saveInfo(null, userId, userExpandVO); } } @Override public void updateByToken(String token, UserExpandVO userExpandVO) throws Exception { String userId = securityComponent.getAppTokenUser(token).getId(); UserExpandPO userExpandPO = getPO(userId); if (userExpandPO != null) { updateInfo(token, userId, userExpandVO); } else { saveInfo(token, userId, userExpandVO); } } /** * 保存 * * @param token * @param userId * @param userExpandVO */ private void saveInfo(String token, String userId, UserExpandVO userExpandVO) { Map params = HashMapUtil.beanToMap(userExpandVO); params.put("userId", userId); if (StringUtils.isNotBlank(token)) { setAppSaveInfo(token, params); } else { setSaveInfo(params); } userExpandDao.save(params); } /** * 修改 * * @param token * @param userId * @param userExpandVO */ private void updateInfo(String token, String userId, UserExpandVO userExpandVO) { Map params = HashMapUtil.beanToMap(userExpandVO); params.put("userId", userId); if (StringUtils.isNotBlank(token)) { setAppUpdateInfo(token, params); } else { setUpdateInfo(params); } userExpandDao.update(params); } @Override public UserExpandPO getPO(Map params) { return userExpandDao.getPO(params); } @Override public UserExpandPO getPO(String userId) { Map params = getHashMap(2); params.put("userId", userId); return getPO(params); } @Override public List listPO(Map params) { return userExpandDao.listPO(params); } @Override public UserExpandDTO getByToken(String token) throws Exception { String userId = securityComponent.getAppTokenUser(token).getId(); return get(userId); } @Override public String getRoute() { // 编辑页面的路径,只有详情页 return "route/userexpand/get.html"; } private UserExpandDTO getDTO(Map params) { return userExpandDao.get(params); } private UserExpandDTO getDTO(String userId) { Map params = getHashMap(2); params.put("userId", userId); return getDTO(params); } @Override public UserExpandDTO get(String userId) { UserDTO userDTO = userBaseService.get(userId); if (userDTO == null) { return null; } UserExpandDTO userExpandDTO = getDTO(userId); if (userExpandDTO == null) { return new UserExpandDTO(userDTO); } userExpandDTO.setUserDTO(userDTO); return userExpandDTO; } @Override public UserExpandDTO getByUsername(String username) { return null; } @Override public List listByUserIds(List userIds) { return null; } @Override public List listByUsernames(List usernames) { return null; } @Override public List list(Map params) { return null; } @Override public SuccessResultList> listPage(ListPage page) { return null; } @Override public SuccessResultList> listPageByIds(List userIds, ListPage page) { return null; } @Override public SuccessResultList> listPageByExcludeIds(List excludeUserIds, ListPage page) { return null; } @Override public int countDateRange(String startDate, String endDate) { return 0; } @Override public int count() { return 0; } @Override public List listByKeywords(String keywords) { return null; } } ``` ## 页面 ```html
```