Commit 23590039 by guojuxing

权限控制加入gic基础服务版本逻辑

parent abe49ae3
...@@ -142,9 +142,10 @@ public interface TabSysMenuMapper { ...@@ -142,9 +142,10 @@ public interface TabSysMenuMapper {
* @Description: * @Description:

 * @author guojuxing 
 * @author guojuxing
* @param project
 * @param project

* @param versionCode gic商户基础服务版本
* @return java.util.List<com.gic.auth.entity.TabSysMenu>
 * @return java.util.List<com.gic.auth.entity.TabSysMenu>


 */ 
 */
List<TabSysMenu> listMenuTree(@Param("project") String project); List<TabSysMenu> listMenuTree(@Param("project") String project, @Param("versionCode") String versionCode);
List<TabSysMenu> selectByProjectList(@Param("projectList")List<String> projectList); List<TabSysMenu> selectByProjectList(@Param("projectList")List<String> projectList);
......
...@@ -112,9 +112,10 @@ public interface MenuService { ...@@ -112,9 +112,10 @@ public interface MenuService {
* @Description: * @Description:

 * @author guojuxing 
 * @author guojuxing
* @param project
 * @param project

* @param versionCode gic商户基础服务版本
* @return java.util.List<com.gic.auth.dto.MenuDTO>
 * @return java.util.List<com.gic.auth.dto.MenuDTO>


 */ 
 */
List<TabSysMenu> listMenuTree(String project); List<TabSysMenu> listMenuTree(String project, String versionCode);
/** /**
* 根据项目查询 * 根据项目查询
......
...@@ -122,8 +122,8 @@ public class MenuServiceImpl implements MenuService { ...@@ -122,8 +122,8 @@ public class MenuServiceImpl implements MenuService {
} }
@Override @Override
public List<TabSysMenu> listMenuTree(String project) { public List<TabSysMenu> listMenuTree(String project, String versionCode) {
return tabSysMenuMapper.listMenuTree(project); return tabSysMenuMapper.listMenuTree(project, versionCode);
} }
@Override @Override
......
...@@ -61,17 +61,22 @@ public class MenuApiServiceImpl implements MenuApiService { ...@@ -61,17 +61,22 @@ public class MenuApiServiceImpl implements MenuApiService {
} }
@Override @Override
public ServiceResponse<List<MenuDTO>> listUserMenu(Integer userId) { public ServiceResponse<List<MenuDTO>> listUserMenu(Integer userId, String versionCode) {
TabSysUser tabSysUser = userService.getUserById(userId); TabSysUser tabSysUser = userService.getUserById(userId);
if (tabSysUser == null) { if (tabSysUser == null) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "用户不存在"); return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "用户不存在");
} }
if (StringUtils.isBlank(versionCode)) {
return ServiceResponse.success(new ArrayList<>());
}
List<MenuDTO> result; List<MenuDTO> result;
if (tabSysUser.getSuperAdmin().intValue() == 1) { if (tabSysUser.getSuperAdmin().intValue() == 1) {
List<TabSysMenu> temp = new ArrayList<>(); List<TabSysMenu> temp = new ArrayList<>();
//超级管理员 //超级管理员
MenuListQO params = new MenuListQO(); MenuListQO params = new MenuListQO();
params.setVersionCode(versionCode);
params.setMenuType(MenuTypeEnum.PAGE.getCode()); params.setMenuType(MenuTypeEnum.PAGE.getCode());
temp.addAll(this.menuService.listMenu(params)); temp.addAll(this.menuService.listMenu(params));
...@@ -79,7 +84,7 @@ public class MenuApiServiceImpl implements MenuApiService { ...@@ -79,7 +84,7 @@ public class MenuApiServiceImpl implements MenuApiService {
} else { } else {
List<TabSysMenu> menuList = getUserMenuList(userId); List<TabSysMenu> menuList = getUserMenuList(userId);
result = EntityUtil.changeEntityListNew(MenuDTO.class, menuList); result = EntityUtil.changeEntityListNew(MenuDTO.class, menuList);
ServiceResponse<List<MenuDTO>> tempResult = getNoAuthOperationItem(userId, MenuProjectConstants.ALL_CODE); ServiceResponse<List<MenuDTO>> tempResult = getNoAuthOperationItem(userId, MenuProjectConstants.ALL_CODE, versionCode);
result.addAll(tempResult.getResult()); result.addAll(tempResult.getResult());
} }
...@@ -87,18 +92,18 @@ public class MenuApiServiceImpl implements MenuApiService { ...@@ -87,18 +92,18 @@ public class MenuApiServiceImpl implements MenuApiService {
} }
@Override @Override
public ServiceResponse<List<MenuDTO>> getUserMenuOfGic(Integer userId, Integer currentMenu) { public ServiceResponse<List<MenuDTO>> getUserMenuOfGic(Integer userId, Integer currentMenu, String versionCode) {
return getUserLoginMenu(userId, currentMenu, true); return getUserLoginMenu(userId, currentMenu, true, versionCode);
} }
@Override @Override
public ServiceResponse<List<MenuDTO>> getNoAuthOperationItemOfGic(Integer userId) { public ServiceResponse<List<MenuDTO>> getNoAuthOperationItemOfGic(Integer userId, String versionCode) {
return getNoAuthOperationItem(userId, MenuProjectConstants.DEFAULT_PROJECT_CODE); return getNoAuthOperationItem(userId, MenuProjectConstants.DEFAULT_PROJECT_CODE, versionCode);
} }
@Override @Override
public ServiceResponse<List<MenuDTO>> getSuperAdminMenu(Integer userId) { public ServiceResponse<List<MenuDTO>> getSuperAdminMenu(Integer userId, String versionCode) {
return this.getUserMenuOfGic(userId, null); return this.getUserMenuOfGic(userId, null, versionCode);
} }
@Override @Override
...@@ -115,8 +120,8 @@ public class MenuApiServiceImpl implements MenuApiService { ...@@ -115,8 +120,8 @@ public class MenuApiServiceImpl implements MenuApiService {
} }
@Override @Override
public ServiceResponse<List<MenuDTO>> listMenuTreeForRole(String project) { public ServiceResponse<List<MenuDTO>> listMenuTreeForRole(String project, String versionCode) {
List<TabSysMenu> list = menuService.listMenuTree(project); List<TabSysMenu> list = menuService.listMenuTree(project, versionCode);
if (CollectionUtils.isNotEmpty(list)) { if (CollectionUtils.isNotEmpty(list)) {
return ServiceResponse.success(EntityUtil.changeEntityListNew(MenuDTO.class, list)); return ServiceResponse.success(EntityUtil.changeEntityListNew(MenuDTO.class, list));
} }
...@@ -124,8 +129,11 @@ public class MenuApiServiceImpl implements MenuApiService { ...@@ -124,8 +129,11 @@ public class MenuApiServiceImpl implements MenuApiService {
} }
@Override @Override
public ServiceResponse<List<MenuDTO>> listMenuTreeForRoleOfGic() { public ServiceResponse<List<MenuDTO>> listMenuTreeForRoleOfGic(String versionCode) {
return listMenuTreeForRole(MenuProjectConstants.DEFAULT_PROJECT); if (StringUtils.isBlank(versionCode)) {
return ServiceResponse.success(new ArrayList<>());
}
return listMenuTreeForRole(MenuProjectConstants.DEFAULT_PROJECT, versionCode);
} }
@Override @Override
...@@ -831,7 +839,8 @@ public class MenuApiServiceImpl implements MenuApiService { ...@@ -831,7 +839,8 @@ public class MenuApiServiceImpl implements MenuApiService {
* @param isGic
 是否是gic项目 * @param isGic
 是否是gic项目
* @return com.gic.api.base.commons.ServiceResponse<java.util.List<com.gic.auth.dto.MenuDTO>>
 * @return com.gic.api.base.commons.ServiceResponse<java.util.List<com.gic.auth.dto.MenuDTO>>


 */ 
 */
private ServiceResponse<List<MenuDTO>> getUserLoginMenu(Integer userId, Integer currentMenu, boolean isGic) { private ServiceResponse<List<MenuDTO>> getUserLoginMenu(Integer userId, Integer currentMenu, boolean isGic,
String versionCode) {
TabSysUser tabSysUser = userService.getUserById(userId); TabSysUser tabSysUser = userService.getUserById(userId);
if (tabSysUser == null) { if (tabSysUser == null) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "用户不存在"); return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "用户不存在");
...@@ -839,9 +848,14 @@ public class MenuApiServiceImpl implements MenuApiService { ...@@ -839,9 +848,14 @@ public class MenuApiServiceImpl implements MenuApiService {
List<TabSysMenu> resultList; List<TabSysMenu> resultList;
if (StringUtils.isBlank(versionCode)) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "商户还没有订购基础服务");
}
if (tabSysUser.getSuperAdmin().intValue() == 1) { if (tabSysUser.getSuperAdmin().intValue() == 1) {
//超级用户 //超级用户
MenuListQO params = new MenuListQO(); MenuListQO params = new MenuListQO();
params.setVersionCode(versionCode);
params.setMenuType(MenuTypeEnum.PAGE.getCode()); params.setMenuType(MenuTypeEnum.PAGE.getCode());
if (isGic) { if (isGic) {
params.setIsGIC(MenuProjectConstants.DEFAULT_PROJECT_CODE); params.setIsGIC(MenuProjectConstants.DEFAULT_PROJECT_CODE);
...@@ -885,9 +899,10 @@ public class MenuApiServiceImpl implements MenuApiService { ...@@ -885,9 +899,10 @@ public class MenuApiServiceImpl implements MenuApiService {

 * @author guojuxing 
 * @author guojuxing
* @param userId * @param userId
* @param projectCode
 * @param projectCode

* @param versionCode 商户基础服务版本
* @return com.gic.api.base.commons.ServiceResponse<java.util.List<com.gic.auth.dto.MenuDTO>>
 * @return com.gic.api.base.commons.ServiceResponse<java.util.List<com.gic.auth.dto.MenuDTO>>


 */ 
 */
private ServiceResponse<List<MenuDTO>> getNoAuthOperationItem(Integer userId, int projectCode) { private ServiceResponse<List<MenuDTO>> getNoAuthOperationItem(Integer userId, int projectCode, String versionCode) {
TabSysUser tabSysUser = userService.getUserById(userId); TabSysUser tabSysUser = userService.getUserById(userId);
if (tabSysUser == null) { if (tabSysUser == null) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "用户不存在"); return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "用户不存在");
...@@ -922,11 +937,14 @@ public class MenuApiServiceImpl implements MenuApiService { ...@@ -922,11 +937,14 @@ public class MenuApiServiceImpl implements MenuApiService {
operationItemMap.put(menuItem.getItemId(), "1"); operationItemMap.put(menuItem.getItemId(), "1");
} }
} }
//获取配置在权限项内的操作项数据
List<MenuDTO> operationItemListOfAuthItem = getOperationItemOfAuthItem(); List<MenuDTO> operationItemListOfAuthItem = getOperationItemOfAuthItem();
//已配置的操作项需要权限控制
for (MenuDTO menuDTO : operationItemListOfAuthItem) { for (MenuDTO menuDTO : operationItemListOfAuthItem) {
if (!operationItemMap.containsKey(menuDTO.getMenuId())) { if (!operationItemMap.containsKey(menuDTO.getMenuId()) || StringUtils.isBlank(versionCode)
//如果不存在,说明是没有权限的操作项 || menuDTO.getMenuVersion().contains("_" + versionCode + "_")) {
//如果不存在,或者操作项的版本不对
//则是没有权限的操作项
resultList.add(menuDTO); resultList.add(menuDTO);
} }
} }
......
...@@ -306,6 +306,9 @@ ...@@ -306,6 +306,9 @@
<if test="project != null"> <if test="project != null">
and project = #{project} and project = #{project}
</if> </if>
<if test="versionCode != null and versionCode != '' ">
and menu_version like concat('%_', versionCode, '_%' )
</if>
order by level,sort order by level,sort
</select> </select>
...@@ -401,6 +404,9 @@ ...@@ -401,6 +404,9 @@
<if test="project != null"> <if test="project != null">
and project = #{project} and project = #{project}
</if> </if>
<if test="versionCode != null and versionCode != '' ">
and menu_version like concat('%_', versionCode, '_%' )
</if>
<include refid="tree_filter" /> <include refid="tree_filter" />
order by level,sort order by level,sort
......
...@@ -52,26 +52,27 @@ public class LoginController { ...@@ -52,26 +52,27 @@ public class LoginController {
private OperationUserApiService operationUserApiService; private OperationUserApiService operationUserApiService;
@RequestMapping("list-enterprise-by-phone") @RequestMapping("list-enterprise-by-phone")
public RestResponse listUserEnterprise(String phoneNumber){ public RestResponse listUserEnterprise(String phoneNumber) {
if(StringUtils.isBlank(phoneNumber)){ if (StringUtils.isBlank(phoneNumber)) {
return EnterpriseRestResponse.failure(ErrorCode.PARAMETER_ERROR); return EnterpriseRestResponse.failure(ErrorCode.PARAMETER_ERROR);
} }
ServiceResponse<List<UserDTO>> listServiceResponse = this.userApiService.listUserByPhoneNumber(phoneNumber); ServiceResponse<List<UserDTO>> listServiceResponse = this.userApiService.listUserByPhoneNumber(phoneNumber);
if(listServiceResponse.isSuccess()){ if (listServiceResponse.isSuccess()) {
List<UserDTO> result = listServiceResponse.getResult(); List<UserDTO> result = listServiceResponse.getResult();
if(CollectionUtils.isEmpty(result)){ if (CollectionUtils.isEmpty(result)) {
return RestResponse.failure(ErrorCode.SYSTEM_ERROR.getCode(), "用户不存在"); return RestResponse.failure(ErrorCode.SYSTEM_ERROR.getCode(), "用户不存在");
}else { } else {
List<Integer> idList = new ArrayList<>(); List<Integer> idList = new ArrayList<>();
for(UserDTO userDTO : result){ for (UserDTO userDTO : result) {
idList.add(userDTO.getEnterpriseId()); idList.add(userDTO.getEnterpriseId());
} }
ServiceResponse<List<EnterpriseDTO>> serviceResponse = this.enterpriseApiService.listEnterpriseByIds(idList); ServiceResponse<List<EnterpriseDTO>> serviceResponse = this.enterpriseApiService
if(serviceResponse.isSuccess()){ .listEnterpriseByIds(idList);
if (serviceResponse.isSuccess()) {
List<EnterpriseDTO> list = serviceResponse.getResult(); List<EnterpriseDTO> list = serviceResponse.getResult();
if(CollectionUtils.isEmpty(list)){ if (CollectionUtils.isEmpty(list)) {
return RestResponse.failure(ErrorCode.SYSTEM_ERROR.getCode(), "用户不存在"); return RestResponse.failure(ErrorCode.SYSTEM_ERROR.getCode(), "用户不存在");
}else{ } else {
return RestResponse.success(list); return RestResponse.success(list);
} }
} }
...@@ -81,31 +82,32 @@ public class LoginController { ...@@ -81,31 +82,32 @@ public class LoginController {
} }
@RequestMapping("login") @RequestMapping("login")
public RestResponse login(String phoneNumber, Integer enterpriseId, String password){ public RestResponse login(String phoneNumber, Integer enterpriseId, String password) {
if(StringUtils.isBlank(password) || StringUtils.isBlank(phoneNumber) || enterpriseId == null){ if (StringUtils.isBlank(password) || StringUtils.isBlank(phoneNumber) || enterpriseId == null) {
return EnterpriseRestResponse.failure(ErrorCode.PARAMETER_ERROR); return EnterpriseRestResponse.failure(ErrorCode.PARAMETER_ERROR);
} }
Md5Util md5 = new Md5Util(); Md5Util md5 = new Md5Util();
// password 自身作为盐值 // password 自身作为盐值
if(password.length() != 32) { if (password.length() != 32) {
password = md5.encrypt(password + password); password = md5.encrypt(password + password);
} }
ServiceResponse<UserDTO> login = this.userApiService.login(phoneNumber, enterpriseId, password); ServiceResponse<UserDTO> login = this.userApiService.login(phoneNumber, enterpriseId, password);
if(login.isSuccess()){ if (login.isSuccess()) {
UserDTO userDTO = login.getResult(); UserDTO userDTO = login.getResult();
if(userDTO == null){ if (userDTO == null) {
return EnterpriseRestResponse.failure(ErrorCode.LOGIN_ERR); return EnterpriseRestResponse.failure(ErrorCode.LOGIN_ERR);
} }
UserDetail userDetail = new UserDetail(); UserDetail userDetail = new UserDetail();
userDetail.setUserId(userDTO.getUserId()); userDetail.setUserId(userDTO.getUserId());
userDetail.setUserInfo(EntityUtil.changeEntityNew(UserInfo.class, userDTO)); userDetail.setUserInfo(EntityUtil.changeEntityNew(UserInfo.class, userDTO));
ServiceResponse<EnterpriseDTO> enterprise = this.enterpriseApiService.getEnterpriseById(enterpriseId); ServiceResponse<EnterpriseDTO> enterprise = this.enterpriseApiService.getEnterpriseById(enterpriseId);
if(enterprise.isSuccess()){ if (enterprise.isSuccess()) {
EnterpriseDTO enterpriseDTO = enterprise.getResult(); EnterpriseDTO enterpriseDTO = enterprise.getResult();
if(enterpriseDTO != null){ if (enterpriseDTO != null) {
userDetail.setEnterpriseInfo(EntityUtil.changeEntityNew(EnterpriseInfo.class, enterpriseDTO)); userDetail.setEnterpriseInfo(EntityUtil.changeEntityNew(EnterpriseInfo.class, enterpriseDTO));
ServiceResponse<List<MenuDTO>> menuResult = menuApiService.listUserMenu(userDetail.getUserId()); ServiceResponse<List<MenuDTO>> menuResult = menuApiService.listUserMenu(userDetail.getUserId(),
UserDetailUtils.getUserDetail().getEnterpriseInfo().getVersionCode());
if (menuResult.isSuccess()) { if (menuResult.isSuccess()) {
List<MenuDTO> menuList = menuResult.getResult(); List<MenuDTO> menuList = menuResult.getResult();
List<MenuInfo> menuInfoList = EntityUtil.changeEntityListNew(MenuInfo.class, menuList); List<MenuInfo> menuInfoList = EntityUtil.changeEntityListNew(MenuInfo.class, menuList);
...@@ -132,12 +134,12 @@ public class LoginController { ...@@ -132,12 +134,12 @@ public class LoginController {
} }
@RequestMapping("get-login-user-info") @RequestMapping("get-login-user-info")
public RestResponse getLoginUserINfo(){ public RestResponse getLoginUserINfo() {
return RestResponse.success(UserDetailUtils.getUserDetail().getUserInfo()); return RestResponse.success(UserDetailUtils.getUserDetail().getUserInfo());
} }
@RequestMapping("logout") @RequestMapping("logout")
public RestResponse logout(){ public RestResponse logout() {
UserDetailUtils.destory(); UserDetailUtils.destory();
return RestResponse.success(); return RestResponse.success();
} }
......
...@@ -35,7 +35,8 @@ public class MenuController { ...@@ -35,7 +35,8 @@ public class MenuController {
@RequestMapping("login-user-menu") @RequestMapping("login-user-menu")
public RestResponse loginUserMenu(Integer currentMenu) { public RestResponse loginUserMenu(Integer currentMenu) {
Integer userId = UserDetailUtils.getUserDetail().getUserId(); Integer userId = UserDetailUtils.getUserDetail().getUserId();
ServiceResponse<List<MenuDTO>> userMenu = this.menuApiService.getUserMenuOfGic(userId, currentMenu); ServiceResponse<List<MenuDTO>> userMenu = this.menuApiService.getUserMenuOfGic(userId, currentMenu,
UserDetailUtils.getUserDetail().getEnterpriseInfo().getVersionCode());
if (userMenu.isSuccess()) { if (userMenu.isSuccess()) {
return RestResponse.success(userMenu.getResult()); return RestResponse.success(userMenu.getResult());
} }
...@@ -45,7 +46,9 @@ public class MenuController { ...@@ -45,7 +46,9 @@ public class MenuController {
@RequestMapping("login-user-operation-item") @RequestMapping("login-user-operation-item")
public RestResponse loginUserOperationItem() { public RestResponse loginUserOperationItem() {
Integer userId = UserDetailUtils.getUserDetail().getUserId(); Integer userId = UserDetailUtils.getUserDetail().getUserId();
return ResultControllerUtils.commonResult(this.menuApiService.getNoAuthOperationItemOfGic(userId), return ResultControllerUtils.commonResult(
this.menuApiService.getNoAuthOperationItemOfGic(userId,
UserDetailUtils.getUserDetail().getEnterpriseInfo().getVersionCode()),
UserOperationItemAuthVO.class); UserOperationItemAuthVO.class);
} }
...@@ -62,7 +65,8 @@ public class MenuController { ...@@ -62,7 +65,8 @@ public class MenuController {
params.setMenuType(MenuTypeEnum.PAGE.getCode()); params.setMenuType(MenuTypeEnum.PAGE.getCode());
ServiceResponse<List<MenuDTO>> result = menuApiService.listMenuTree(params); ServiceResponse<List<MenuDTO>> result = menuApiService.listMenuTree(params);
if (result.isSuccess()) { if (result.isSuccess()) {
return RestResponse.success(changePageListToTree(MenuLevelConstants.FIRST_LEVEL_PARENT_ID, result.getResult())); return RestResponse
.success(changePageListToTree(MenuLevelConstants.FIRST_LEVEL_PARENT_ID, result.getResult()));
} }
return EnterpriseRestResponse.failure(result); return EnterpriseRestResponse.failure(result);
} }
......
...@@ -62,8 +62,8 @@ public class RoleController { ...@@ -62,8 +62,8 @@ public class RoleController {
} }
} }
ServiceResponse<List<MenuDTO>> gicResult = menuApiService ServiceResponse<List<MenuDTO>> gicResult = menuApiService.listMenuTreeForRoleOfGic(
.listMenuTreeForRole(MenuProjectConstants.DEFAULT_PROJECT); UserDetailUtils.getUserDetail().getEnterpriseInfo().getVersionCode());
vo.setGicMap( vo.setGicMap(
changeListToSelectTree(MenuLevelConstants.FIRST_LEVEL_PARENT_ID, gicResult.getResult(), gicMap)); changeListToSelectTree(MenuLevelConstants.FIRST_LEVEL_PARENT_ID, gicResult.getResult(), gicMap));
...@@ -118,7 +118,8 @@ public class RoleController { ...@@ -118,7 +118,8 @@ public class RoleController {
if (userResponse.isSuccess()) { if (userResponse.isSuccess()) {
UserDTO admin = userResponse.getResult(); UserDTO admin = userResponse.getResult();
Integer userId = admin.getUserId(); Integer userId = admin.getUserId();
ServiceResponse<List<MenuDTO>> menuResponse = menuApiService.getSuperAdminMenu(userId); ServiceResponse<List<MenuDTO>> menuResponse = menuApiService.getSuperAdminMenu(userId,
UserDetailUtils.getUserDetail().getEnterpriseInfo().getVersionCode());
if (menuResponse.isSuccess()) { if (menuResponse.isSuccess()) {
return RestResponse.success(menuResponse.getResult()); return RestResponse.success(menuResponse.getResult());
} else { } else {
...@@ -138,8 +139,8 @@ public class RoleController { ...@@ -138,8 +139,8 @@ public class RoleController {

 */ 
 */
@RequestMapping("/list-gic-menu-tree") @RequestMapping("/list-gic-menu-tree")
public RestResponse listMenuTree() { public RestResponse listMenuTree() {
ServiceResponse<List<MenuDTO>> result = menuApiService ServiceResponse<List<MenuDTO>> result = menuApiService.listMenuTreeForRoleOfGic(
.listMenuTreeForRole(MenuProjectConstants.DEFAULT_PROJECT); UserDetailUtils.getUserDetail().getEnterpriseInfo().getVersionCode());
if (result.isSuccess()) { if (result.isSuccess()) {
return RestResponse.success(changeListToTree(MenuLevelConstants.FIRST_LEVEL_PARENT_ID, result.getResult())); return RestResponse.success(changeListToTree(MenuLevelConstants.FIRST_LEVEL_PARENT_ID, result.getResult()));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment