diff --git a/epmet-auth/src/main/java/com/epmet/controller/LoginController.java b/epmet-auth/src/main/java/com/epmet/controller/LoginController.java index d7b2bc6dc8..99b094eb1a 100644 --- a/epmet-auth/src/main/java/com/epmet/controller/LoginController.java +++ b/epmet-auth/src/main/java/com/epmet/controller/LoginController.java @@ -3,8 +3,10 @@ package com.epmet.controller; import com.epmet.common.token.dto.form.LoginByPassWordFormDTO; import com.epmet.common.token.dto.form.LoginByWxCodeFormDTO; import com.epmet.common.token.dto.result.UserTokenResultDTO; +import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.constant.Constant; import com.epmet.commons.tools.exception.ErrorCode; +import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.AssertUtils; import com.epmet.commons.tools.validator.ValidatorUtils; @@ -92,9 +94,9 @@ public class LoginController { * @Date 2020/3/18 22:43 **/ @PostMapping(value = "logout") - public Result logout(HttpServletRequest request) { - String token = request.getParameter(Constant.TOKEN_HEADER); - return loginService.logoutByToken(token); + public Result logout(@LoginUser TokenDto tokenDto, HttpServletRequest request) { + //String token = request.getParameter(Constant.TOKEN_HEADER); + return loginService.logoutByToken(tokenDto); } } diff --git a/epmet-auth/src/main/java/com/epmet/feign/EpmetUserFeignClient.java b/epmet-auth/src/main/java/com/epmet/feign/EpmetUserFeignClient.java index 0f2817d272..434c1124c4 100644 --- a/epmet-auth/src/main/java/com/epmet/feign/EpmetUserFeignClient.java +++ b/epmet-auth/src/main/java/com/epmet/feign/EpmetUserFeignClient.java @@ -39,8 +39,8 @@ public interface EpmetUserFeignClient { * @author yinzuomei * @date 2020/3/16 14:48 */ - @PostMapping(value = "epmetuser/customeruser/saveCustomerUser", consumes = MediaType.APPLICATION_JSON_VALUE) - Result saveCustomerUser(CustomerUserDTO customerUserDTO); + @PostMapping(value = "epmetuser/customeruser/saveOrUpdateCustomerUser", consumes = MediaType.APPLICATION_JSON_VALUE) + Result saveOrUpdateCustomerUser(CustomerUserDTO customerUserDTO); /** * @param passwordLoginUserInfoFormDTO diff --git a/epmet-auth/src/main/java/com/epmet/feign/fallback/EpmetUserFeignClientFallback.java b/epmet-auth/src/main/java/com/epmet/feign/fallback/EpmetUserFeignClientFallback.java index bf3b41d5cf..35fd0c2847 100644 --- a/epmet-auth/src/main/java/com/epmet/feign/fallback/EpmetUserFeignClientFallback.java +++ b/epmet-auth/src/main/java/com/epmet/feign/fallback/EpmetUserFeignClientFallback.java @@ -24,8 +24,8 @@ public class EpmetUserFeignClientFallback implements EpmetUserFeignClient { } @Override - public Result saveCustomerUser(CustomerUserDTO customerUserDTO) { - return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "saveCustomerUser", customerUserDTO); + public Result saveOrUpdateCustomerUser(CustomerUserDTO customerUserDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "saveOrUpdateCustomerUser", customerUserDTO); } @Override diff --git a/epmet-auth/src/main/java/com/epmet/service/LoginService.java b/epmet-auth/src/main/java/com/epmet/service/LoginService.java index 444b2c5bbe..dd37bfc58f 100644 --- a/epmet-auth/src/main/java/com/epmet/service/LoginService.java +++ b/epmet-auth/src/main/java/com/epmet/service/LoginService.java @@ -3,6 +3,7 @@ package com.epmet.service; import com.epmet.common.token.dto.form.LoginByPassWordFormDTO; import com.epmet.common.token.dto.form.LoginByWxCodeFormDTO; import com.epmet.common.token.dto.result.UserTokenResultDTO; +import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; /** @@ -30,11 +31,11 @@ public interface LoginService { Result loginByPassword(LoginByPassWordFormDTO formDTO); /** - * @param token + * @param tokenDto * @return com.epmet.commons.tools.utils.Result * @Author yinzuomei * @Description 退出登录 * @Date 2020/3/18 22:44 **/ - Result logoutByToken(String token); + Result logoutByToken(TokenDto tokenDto); } diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java index ab79c52b24..bfe1d83432 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java +++ b/epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java @@ -127,17 +127,68 @@ public class LoginServiceImpl implements LoginService { WxLoginUserInfoFormDTO wxLoginUserInfoFormDTO = new WxLoginUserInfoFormDTO(); wxLoginUserInfoFormDTO.setApp(formDTO.getApp()); wxLoginUserInfoFormDTO.setOpenId(wxMaJscode2SessionResult.getOpenid()); + //1、先根据app、client、openId查询 Result userResult = epmetUserFeignClient.selecWxLoginUserInfo(wxLoginUserInfoFormDTO); String userId = ""; if (!userResult.success()) { throw new RenException("获取用户信息失败" + userResult.getMsg()); } - userId = (String) userResult.getData(); - if (StringUtils.isBlank(userId) && LoginConstant.APP_GOV.equals(formDTO.getApp())) { + userId = userResult.getData(); + //2、如果已经存在userId,则更新微信信息 + if (StringUtils.isNotBlank(userId) && StringUtils.isNotBlank(formDTO.getEncryptedData()) && StringUtils.isNotBlank(formDTO.getIv())) { + this.updateWxInfO(userId,formDTO,wxMaJscode2SessionResult); + } + //3、数据库不存在此用户则创建此用户 + if (StringUtils.isBlank(userId)) { + userId = createEpmtUser(formDTO, wxMaJscode2SessionResult); + } + return userId; + } + + /** + * @return com.epmet.commons.tools.utils.Result + * @param userId + * @param wxMaJscode2SessionResult + * @Author yinzuomei + * @Description 获取用户微信基本信息更新到本地 + * @Date 2020/3/20 19:51 + **/ + private Result updateWxInfO(String userId, + LoginByWxCodeFormDTO formDTO, + WxMaJscode2SessionResult wxMaJscode2SessionResult) { + if (LoginConstant.APP_GOV.equals(formDTO.getApp())) { //查询customer_staff待完善 - } else if (StringUtils.isBlank(userId) && LoginConstant.APP_OPER.equals(formDTO.getApp())) { + + } else if (LoginConstant.APP_OPER.equals(formDTO.getApp())) { //查询oper_user待完善 - } else if (StringUtils.isBlank(userId) && LoginConstant.APP_RESI.equals(formDTO.getApp())) { + + } else if (LoginConstant.APP_RESI.equals(formDTO.getApp())) { + WxMaUserInfo wxMaUserInfo = wxMaServiceUtils.resiWxMaService().getUserService() + .getUserInfo(wxMaJscode2SessionResult.getSessionKey(), + formDTO.getEncryptedData(), + formDTO.getIv()); + CustomerUserDTO customerUserDTO = this.packageCustomerUserDTO(wxMaUserInfo); + customerUserDTO.setId(userId); + epmetUserFeignClient.saveOrUpdateCustomerUser(customerUserDTO); + } + return new Result(); + } + + /** + * @param formDTO + * @param wxMaJscode2SessionResult + * @return java.lang.String + * @Author yinzuomei + * @Description 陌生人首次授权,创建用户信息 + * @Date 2020/3/20 19:42 + **/ + private String createEpmtUser(LoginByWxCodeFormDTO formDTO, WxMaJscode2SessionResult wxMaJscode2SessionResult) { + String userId = ""; + if (LoginConstant.APP_GOV.equals(formDTO.getApp())) { + //查询customer_staff待完善 + } else if (LoginConstant.APP_OPER.equals(formDTO.getApp())) { + //查询oper_user待完善 + } else if (LoginConstant.APP_RESI.equals(formDTO.getApp())) { //查询customer_user CustomerUserDTO customerUserDTO = new CustomerUserDTO(); if (StringUtils.isNotBlank(formDTO.getIv()) && StringUtils.isNotBlank(formDTO.getEncryptedData())) { @@ -150,9 +201,9 @@ public class LoginServiceImpl implements LoginService { customerUserDTO.setWxOpenId(wxMaJscode2SessionResult.getOpenid()); customerUserDTO.setUnionId(wxMaJscode2SessionResult.getUnionid()); } - Result saveCustomerUserResult = epmetUserFeignClient.saveCustomerUser(customerUserDTO); + Result saveCustomerUserResult = epmetUserFeignClient.saveOrUpdateCustomerUser(customerUserDTO); if (!saveCustomerUserResult.success()) { - throw new RenException("创建用户失败" + userResult.getMsg()); + throw new RenException("创建用户失败" + saveCustomerUserResult.getMsg()); } userId = saveCustomerUserResult.getData(); } @@ -286,10 +337,16 @@ public class LoginServiceImpl implements LoginService { @Override - public Result logoutByToken(String token) { + public Result logoutByToken(TokenDto tokenDto) { //记录登出日志 //删除redis + if(null == tokenDto){ + return new Result().error("当前用户信息获取失败!"); + } + + cpUserDetailRedis.logout(tokenDto.getApp() , tokenDto.getClient() , tokenDto.getUserId()); + //web端清空菜单栏和权限,小程序目前又 - return null; + return new Result().ok("退出登录!"); } } diff --git a/epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/enums/ErrorCode.java b/epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/enums/ErrorCode.java index 2f9cdd1376..9296333cac 100644 --- a/epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/enums/ErrorCode.java +++ b/epmet-commons/epmet-common-clienttoken/src/main/java/com/epmet/common/token/enums/ErrorCode.java @@ -18,9 +18,13 @@ public enum ErrorCode implements IErrorCode { ERR10003(10003, "token生成失败,请重试。"), ERR10004(10004, "返回的Object类型不是EsuaResponse,无法添加token!"), ERR10005(10005, "token不能为空"), + ERR10006(10006, "登录超时,请重新登录"), + ERR10007(10007, "当前帐号已在别处登录"), ERR500(500, "Internal Server Error"), ERR501(501, "参数绑定异常"), + ERR401(401, "未授权"), + ERR(ErrorCode.COMMON_ERR_CODE, "其他异常"); diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/AppClientConstant.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/AppClientConstant.java new file mode 100644 index 0000000000..831d52bd91 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/AppClientConstant.java @@ -0,0 +1,28 @@ +package com.epmet.commons.tools.constant; + +/** + * 公用参数常量 + */ +public interface AppClientConstant { + + /** + * app类型-居民端端 + */ + String APP_RESI = "resi"; + /** + * app类型-政府端 + */ + String APP_GOV = "gov"; + /** + * app类型-运营端 + */ + String APP_OPER = "oper"; + /** + * PC端:web + */ + String CLIENT_WEB = "web"; + /** + * 微信小程序:wxmp + */ + String CLIENT_WXMP = "wxmp"; +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/RenException.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/RenException.java index 257df9f2eb..bb3684f41c 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/RenException.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/RenException.java @@ -10,6 +10,7 @@ package com.epmet.commons.tools.exception; import com.epmet.commons.tools.utils.MessageUtils; +import org.apache.commons.lang3.StringUtils; /** * 自定义异常 @@ -42,9 +43,19 @@ public class RenException extends RuntimeException { public RenException(int code, Throwable e, String... params) { super(e); this.code = code; - this.msg = MessageUtils.getMessage(code, params); + + } + + public RenException(int code, String msg){ + this.code = code; + if(StringUtils.isBlank(msg)){ + this.msg = MessageUtils.getMessage(code, msg); + }else{ + this.msg = msg; + } } + public RenException(String msg) { super(msg); this.code = ErrorCode.INTERNAL_SERVER_ERROR; diff --git a/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java b/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java index 02705c0e89..85314a7ae1 100644 --- a/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java +++ b/epmet-gateway/src/main/java/com/epmet/filter/CpAuthGatewayFilterFactory.java @@ -2,11 +2,12 @@ package com.epmet.filter; import com.alibaba.fastjson.JSON; +import com.epmet.common.token.enums.ErrorCode; import com.epmet.commons.tools.constant.Constant; -import com.epmet.commons.tools.exception.ErrorCode; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.CpUserDetailRedis; +import com.epmet.commons.tools.utils.Result; import com.epmet.jwt.JwtTokenUtils; import io.jsonwebtoken.Claims; import org.apache.commons.lang3.StringUtils; @@ -85,16 +86,21 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory().error(ErrorCode.ERR10005.getCode(),ErrorCode.ERR10005.getMsg())); } - TokenDto user = this.getLoginUserInfo(token); - //当前登录用户userId,添加到header中 - if (user != null) { - String redisKey = user.getApp() + "-" + user.getClient() + "-" + user.getUserId(); - logger.info("redisKey=" + redisKey); - ServerHttpRequest build = exchange.getRequest().mutate().header(Constant.APP_USER_KEY, redisKey).build(); - return chain.filter(exchange.mutate().request(build).build()); + try { + //当前登录用户userId,添加到header中 + TokenDto user = this.getLoginUserInfo(token); + if (user != null) { + String redisKey = user.getApp() + "-" + user.getClient() + "-" + user.getUserId(); + logger.info("redisKey=" + redisKey); + ServerHttpRequest build = exchange.getRequest().mutate().header(Constant.APP_USER_KEY, redisKey).build(); + return chain.filter(exchange.mutate().request(build).build()); + } + }catch(RenException e){ + return response(exchange,new Result<>().error(e.getCode(),e.getMsg())); } + return chain.filter(exchange); }; } @@ -103,20 +109,29 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory ORDER BY CONVERT ( b.grid_name USING gbk ) ASC - LIMIT 999999 + ) ) AS c LIMIT #{pageNo}, #{pageSize} diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/CustomerHomeDetailDao.xml b/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/CustomerHomeDetailDao.xml index b5aac36854..2837805242 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/CustomerHomeDetailDao.xml +++ b/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/CustomerHomeDetailDao.xml @@ -34,6 +34,7 @@ SELECT b.COMPONENT_ID, c.COMPONENT_NAME, + c.COMPONENT_FRONT_ID, b.REGION, b.CONFIGURATION, b.DEMO_DATA, diff --git a/epmet-module/resi-guide/resi-guide-server/src/main/java/com/epmet/service/StrangerAccessRecordService.java b/epmet-module/resi-guide/resi-guide-server/src/main/java/com/epmet/service/StrangerAccessRecordService.java index c0c0824075..88c1d1d37d 100644 --- a/epmet-module/resi-guide/resi-guide-server/src/main/java/com/epmet/service/StrangerAccessRecordService.java +++ b/epmet-module/resi-guide/resi-guide-server/src/main/java/com/epmet/service/StrangerAccessRecordService.java @@ -106,5 +106,5 @@ public interface StrangerAccessRecordService extends BaseService getgridhome(TokenDto tokenDTO, StrangerFormDTO formDTO); + Result getgridhome(TokenDto tokenDTO, StrangerFormDTO formDTO) throws Exception; } diff --git a/epmet-module/resi-guide/resi-guide-server/src/main/java/com/epmet/service/impl/StrangerAccessRecordServiceImpl.java b/epmet-module/resi-guide/resi-guide-server/src/main/java/com/epmet/service/impl/StrangerAccessRecordServiceImpl.java index 5858a5b795..f65ec84d32 100644 --- a/epmet-module/resi-guide/resi-guide-server/src/main/java/com/epmet/service/impl/StrangerAccessRecordServiceImpl.java +++ b/epmet-module/resi-guide/resi-guide-server/src/main/java/com/epmet/service/impl/StrangerAccessRecordServiceImpl.java @@ -2,7 +2,9 @@ package com.epmet.service.impl; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.AppClientConstant; import com.epmet.commons.tools.constant.FieldConstant; +import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; @@ -178,7 +180,7 @@ public class StrangerAccessRecordServiceImpl extends BaseServiceImpl getgridhome(TokenDto tokenDTO, StrangerFormDTO formDTO) { + public Result getgridhome(TokenDto tokenDTO, StrangerFormDTO formDTO) throws Exception { //token里边有所属端 userId这些参数 前台传递customerID和gridId //1:调用epmet-user服务查询数据 新建网格记录数据 VisitedFormDTO vi = new VisitedFormDTO(); @@ -188,7 +190,7 @@ public class StrangerAccessRecordServiceImpl extends BaseServiceImpl res = getCustomerHomeData(formDTO.getCustomerId(),tokenDTO.getClient()); + Result res = getCustomerHomeData(formDTO.getCustomerId(),tokenDTO.getApp()); return res; } @@ -200,10 +202,15 @@ public class StrangerAccessRecordServiceImpl extends BaseServiceImpl getCustomerHomeData(String customerId,String clientType){ + public Result getCustomerHomeData(String customerId,String clientType) throws Exception { CustomerHomeFormDTO dto = new CustomerHomeFormDTO(); dto.setCustomerId(customerId); - dto.setClientType(clientType);//居民端 + //居民端 所以参数必须是居民端的参数 否则就是参数错误s + if (AppClientConstant.APP_RESI.equals(clientType)){//居民端 + dto.setClientType(NumConstant.ZERO_STR); + }else { + throw new Exception("参数异常,app端不是指定的居民端,请检查token信息!"); + } return operCustomizeFeignClient.getHomeReleaseByCustomer(dto); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerUserController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerUserController.java index b7661e6243..a0c1dbf677 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerUserController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerUserController.java @@ -114,11 +114,11 @@ public class CustomerUserController { * @Description * @Date 2020/3/16 15:49 **/ - @PostMapping("saveCustomerUser") - public Result saveCustomerUser(@RequestBody CustomerUserDTO customerUserDTO) { + @PostMapping("saveOrUpdateCustomerUser") + public Result saveOrUpdateCustomerUser(@RequestBody CustomerUserDTO customerUserDTO) { //效验数据 ValidatorUtils.validateEntity(customerUserDTO, AddGroup.class, DefaultGroup.class); - return customerUserService.saveCustomerUser(customerUserDTO); + return customerUserService.saveOrUpdateCustomerUser(customerUserDTO); } /** diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/CustomerUserService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/CustomerUserService.java index a8a4950b2b..ae6d9e8613 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/CustomerUserService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/CustomerUserService.java @@ -114,7 +114,7 @@ public interface CustomerUserService extends BaseService { * @Description * @Date 2020/3/16 15:49 **/ - Result saveCustomerUser(CustomerUserDTO customerUserDTO); + Result saveOrUpdateCustomerUser(CustomerUserDTO customerUserDTO); /** * @param passwordLoginUserInfoFormDTO diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerUserServiceImpl.java index c25314656e..c9ffb85093 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerUserServiceImpl.java @@ -136,9 +136,13 @@ public class CustomerUserServiceImpl extends BaseServiceImpl saveCustomerUser(CustomerUserDTO customerUserDTO) { + public Result saveOrUpdateCustomerUser(CustomerUserDTO customerUserDTO) { CustomerUserEntity entity = ConvertUtils.sourceToTarget(customerUserDTO, CustomerUserEntity.class); - insert(entity); + if (StringUtils.isNotBlank(customerUserDTO.getId())) { + insert(entity); + } else { + updateById(entity); + } return new Result().ok(entity.getId()); }