From fb4de894837e6cb761dc690edf011875990dc840 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Mon, 20 Jul 2020 14:31:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=B1=85=E6=B0=91=E7=AB=AF=E3=80=81?= =?UTF-8?q?=E6=94=BF=E5=BA=9C=E7=AB=AF=E7=AC=AC=E4=B8=89=E6=96=B9=E7=99=BB?= =?UTF-8?q?=E9=99=86=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- epmet-auth/pom.xml | 6 + .../controller/ThirdLoginController.java | 49 +++ .../java/com/epmet/dto/form/LoginFormDTO.java | 28 ++ .../com/epmet/service/ThirdLoginService.java | 27 ++ .../service/impl/ThirdLoginServiceImpl.java | 348 ++++++++++++++++++ .../epmet-third/epmet-third-client/pom.xml | 6 + .../com/epmet/dto/form/WxLoginFormDTO.java | 27 ++ .../epmet/feign/EpmetThirdFeignClient.java | 11 + .../EpmetThirdFeignClientFallback.java | 7 + .../controller/CustomerMpController.java | 15 +- .../java/com/epmet/dao/CustomerMpDao.java | 7 + .../com/epmet/service/CustomerMpService.java | 10 + .../service/impl/CustomerMpServiceImpl.java | 38 +- .../epmet/wxapi/constant/WxLoginConstant.java | 20 + .../epmet/wxapi/service/WxLoginService.java | 21 ++ .../service/impl/WxLoginServiceImpl.java | 89 +++++ .../main/resources/mapper/CustomerMpDao.xml | 14 + .../epmet/feign/GovOrgOpenFeignClient.java | 25 +- .../GovOrgOpenFeignClientFallback.java | 15 +- .../java/com/epmet/dto/UserWechatDTO.java | 5 + .../com/epmet/dto/form/WxUserFormDTO.java | 26 ++ .../epmet/feign/EpmetUserOpenFeignClient.java | 44 +++ .../EpmetUserOpenFeignClientFallback.java | 25 ++ .../java/com/epmet/constant/UserConstant.java | 13 + .../com/epmet/controller/UserController.java | 10 + .../java/com/epmet/service/UserService.java | 7 + .../epmet/service/impl/UserServiceImpl.java | 47 ++- 27 files changed, 926 insertions(+), 14 deletions(-) create mode 100644 epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java create mode 100644 epmet-auth/src/main/java/com/epmet/dto/form/LoginFormDTO.java create mode 100644 epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java create mode 100644 epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java create mode 100644 epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/WxLoginFormDTO.java create mode 100644 epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxLoginConstant.java create mode 100644 epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/WxLoginService.java create mode 100644 epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxLoginServiceImpl.java create mode 100644 epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/WxUserFormDTO.java diff --git a/epmet-auth/pom.xml b/epmet-auth/pom.xml index ab11a183fc..1fbf78742e 100644 --- a/epmet-auth/pom.xml +++ b/epmet-auth/pom.xml @@ -122,6 +122,12 @@ 2.0.0 compile + + com.epmet + epmet-third-server + 0.0.15 + compile + diff --git a/epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java b/epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java new file mode 100644 index 0000000000..90be83d3b2 --- /dev/null +++ b/epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java @@ -0,0 +1,49 @@ +package com.epmet.controller; + +import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.dto.form.LoginFormDTO; +import com.epmet.dto.result.UserTokenResultDTO; +import com.epmet.service.ThirdLoginService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description 第三方-居民端、政府端登陆服务 + * @author sun + */ +@RestController +@RequestMapping("thirdlogin") +public class ThirdLoginController { + + @Autowired + private ThirdLoginService thirdLoginService; + + /** + * @param formDTO + * @return + * @Author sun + * @Description 单客户-居民端微信小程序登录 + **/ + @PostMapping("resilogin") + public Result resiLogin(@RequestBody LoginFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO); + return new Result().ok(thirdLoginService.resiLogin(formDTO)); + } + + /** + * @param formDTO + * @return + * @Author sun + * @Description 单客户-政府端微信小程序登录 + **/ + @PostMapping("worklogin") + public Result workLogin(@RequestBody LoginFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO); + return new Result().ok(thirdLoginService.workLogin(formDTO)); + } + +} diff --git a/epmet-auth/src/main/java/com/epmet/dto/form/LoginFormDTO.java b/epmet-auth/src/main/java/com/epmet/dto/form/LoginFormDTO.java new file mode 100644 index 0000000000..f370a728dc --- /dev/null +++ b/epmet-auth/src/main/java/com/epmet/dto/form/LoginFormDTO.java @@ -0,0 +1,28 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @Description 单客户-居民端微信小程序登录 + * @Author sun + */ +@Data +public class LoginFormDTO extends LoginCommonFormDTO implements Serializable { + private static final long serialVersionUID = 7950477424010655108L; + + /** + * 小程序appId + */ + @NotBlank(message = "appId不能为空",groups = {AddUserInternalGroup.class}) + private String appId; + + /** + * 用户微信code + */ + @NotBlank(message = "wxCode不能为空",groups = {AddUserInternalGroup.class}) + private String wxCode; + +} diff --git a/epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java b/epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java new file mode 100644 index 0000000000..4a9d939a93 --- /dev/null +++ b/epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java @@ -0,0 +1,27 @@ +package com.epmet.service; + +import com.epmet.dto.form.LoginFormDTO; +import com.epmet.dto.result.UserTokenResultDTO; + +/** + * @Description 第三方-居民端、政府端登陆服务 + * @author sun + */ +public interface ThirdLoginService { + + /** + * @param formDTO + * @return + * @Author sun + * @Description 单客户-居民端微信小程序登录 + **/ + UserTokenResultDTO resiLogin(LoginFormDTO formDTO); + + /** + * @param formDTO + * @return + * @Author sun + * @Description 单客户-政府端微信小程序登录 + **/ + UserTokenResultDTO workLogin(LoginFormDTO formDTO); +} diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java new file mode 100644 index 0000000000..a809f04a94 --- /dev/null +++ b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java @@ -0,0 +1,348 @@ +package com.epmet.service.impl; + +import com.epmet.common.token.constant.LoginConstant; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.ExceptionUtils; +import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.security.dto.GovTokenDto; +import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.utils.CpUserDetailRedis; +import com.epmet.commons.tools.utils.DateUtils; +import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.CustomerAgencyDTO; +import com.epmet.dto.GovStaffRoleDTO; +import com.epmet.dto.UserDTO; +import com.epmet.dto.UserWechatDTO; +import com.epmet.dto.form.*; +import com.epmet.dto.result.DepartmentListResultDTO; +import com.epmet.dto.result.GridByStaffResultDTO; +import com.epmet.dto.result.StaffLatestAgencyResultDTO; +import com.epmet.dto.result.UserTokenResultDTO; +import com.epmet.feign.EpmetThirdFeignClient; +import com.epmet.feign.EpmetUserOpenFeignClient; +import com.epmet.feign.GovOrgOpenFeignClient; +import com.epmet.jwt.JwtTokenProperties; +import com.epmet.jwt.JwtTokenUtils; +import com.epmet.service.ThirdLoginService; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @author sun + * @Description 第三方-居民端、政府端登陆服务 + */ +@Slf4j +@Service +public class ThirdLoginServiceImpl implements ThirdLoginService { + + private static final Logger logger = LoggerFactory.getLogger(ThirdLoginServiceImpl.class); + @Autowired + private JwtTokenUtils jwtTokenUtils; + @Autowired + private JwtTokenProperties jwtTokenProperties; + @Autowired + private CpUserDetailRedis cpUserDetailRedis; + @Autowired + private EpmetThirdFeignClient epmetThirdFeignClient; + @Autowired + private EpmetUserOpenFeignClient epmetUserOpenFeignClient; + @Autowired + private GovOrgOpenFeignClient govOrgOpenFeignClient; + + /** + * @param formDTO + * @return + * @Author sun + * @Description 单客户-居民端微信小程序登录 + **/ + @Override + public UserTokenResultDTO resiLogin(LoginFormDTO formDTO) { + //1.调用epmet_third服务,校验appId是否有效以及是否授权,校验通过的调用微信API获取用户基本信息 + WxLoginFormDTO resiLoginFormDTO = new WxLoginFormDTO(); + resiLoginFormDTO.setAppId(formDTO.getAppId()); + resiLoginFormDTO.setWxCode(formDTO.getWxCode()); + Result result = epmetThirdFeignClient.resiAndWorkLogin(resiLoginFormDTO); + if (!result.success()) { + throw new RenException(result.getCode()); + } + UserWechatDTO userWechatDTO = result.getData(); + + //2.调用epmet-user服务,新增用户信息(先判断用户是否存在,不存在则新增存在则更新) + WxUserFormDTO wxUserFormDTO = new WxUserFormDTO(); + wxUserFormDTO.setWechatDTO(userWechatDTO); + wxUserFormDTO.setApp(formDTO.getApp()); + Result userResult = epmetUserOpenFeignClient.saveWxUser(wxUserFormDTO); + if (!userResult.success()) { + throw new RenException(result.getCode()); + } + UserDTO userDTO = userResult.getData(); + + //3.生成业务token + String userId = userDTO.getId(); + String token = this.generateToken(formDTO, userId); + + //4.存放Redis + this.saveTokenDto(formDTO, userId, userWechatDTO, token); + + //5.接口返参 + UserTokenResultDTO userTokenResultDTO = new UserTokenResultDTO(); + userTokenResultDTO.setToken(token); + + return userTokenResultDTO; + } + + /** + * @Description 居民端登陆生成业务token的key + **/ + private String generateToken(LoginCommonFormDTO formDTO, String userId) { + Map map = new HashMap<>(); + map.put("app", formDTO.getApp()); + map.put("client", formDTO.getClient()); + map.put("userId", userId); + String token = jwtTokenUtils.createToken(map); + logger.info("app:" + formDTO.getApp() + ";client:" + formDTO.getClient() + ";userId:" + userId + ";生成token[" + token + "]"); + return token; + } + + /** + * @Description 将token存入redis + **/ + private String saveTokenDto(LoginCommonFormDTO formDTO, String userId, UserWechatDTO userWechatDTO, String token) { + int expire = jwtTokenProperties.getExpire(); + TokenDto tokenDto = new TokenDto(); + tokenDto.setApp(formDTO.getApp()); + tokenDto.setClient(formDTO.getClient()); + tokenDto.setUserId(userId); + tokenDto.setOpenId(userWechatDTO.getWxOpenId()); + tokenDto.setSessionKey(userWechatDTO.getSessionKey()); + tokenDto.setUnionId(userWechatDTO.getUnionId()); + tokenDto.setToken(token); + tokenDto.setUpdateTime(System.currentTimeMillis()); + tokenDto.setExpireTime(jwtTokenUtils.getExpiration(token).getTime()); + cpUserDetailRedis.set(tokenDto, expire); + logger.info("截止时间:" + DateUtils.format(jwtTokenUtils.getExpiration(token), "yyyy-MM-dd HH:mm:ss")); + return token; + } + + /** + * @param formDTO + * @return + * @Author sun + * @Description 单客户-政府端微信小程序登录 + **/ + @Override + public UserTokenResultDTO workLogin(LoginFormDTO formDTO) { + //1.调用epmet_third服务,校验appId是否有效以及是否授权,校验通过的调用微信API获取用户基本信息 + WxLoginFormDTO resiLoginFormDTO = new WxLoginFormDTO(); + resiLoginFormDTO.setAppId(formDTO.getAppId()); + resiLoginFormDTO.setWxCode(formDTO.getWxCode()); + Result result = epmetThirdFeignClient.resiAndWorkLogin(resiLoginFormDTO); + if (!result.success()) { + throw new RenException(result.getCode()); + } + UserWechatDTO userWechatDTO = result.getData(); + + //2.根据openid查询用户是否存在历史登陆信息 + Result latestStaffWechat = epmetUserOpenFeignClient.getLatestStaffWechatLoginRecord(userWechatDTO.getWxOpenId()); + if (!latestStaffWechat.success() || null == latestStaffWechat.getData()) { + logger.error(String.format("没有获取到用户最近一次登录账户信息,code[%s],msg[%s]", EpmetErrorCode.PLEASE_LOGIN.getCode(), EpmetErrorCode.PLEASE_LOGIN.getMsg())); + throw new RenException(EpmetErrorCode.PLEASE_LOGIN.getCode()); + } + StaffLatestAgencyResultDTO staffLatestAgencyResultDTO = latestStaffWechat.getData(); + + //3.记录staff_wechat + this.savestaffwechat(staffLatestAgencyResultDTO.getStaffId(), userWechatDTO.getWxOpenId()); + + //4.记录登录日志 + this.saveStaffLoginRecord(staffLatestAgencyResultDTO); + + //5.获取用户token + String token = this.generateGovWxmpToken(staffLatestAgencyResultDTO.getStaffId()); + + //6.保存到redis + this.saveLatestGovTokenDto(staffLatestAgencyResultDTO, userWechatDTO, token); + UserTokenResultDTO userTokenResultDTO = new UserTokenResultDTO(); + userTokenResultDTO.setToken(token); + return userTokenResultDTO; + + } + + /** + * @param userId openid + * @return + * @Author sun + * @Description 保存微信和当前登录用户关系 + **/ + private Result savestaffwechat(String userId, String openid) { + StaffWechatFormDTO staffWechatFormDTO = new StaffWechatFormDTO(); + staffWechatFormDTO.setUserId(userId); + staffWechatFormDTO.setWxOpenId(openid); + return epmetUserOpenFeignClient.saveStaffWechat(staffWechatFormDTO); + } + + /** + * @param latestStaffWechatLoginDTO + * @return + * @Author sun + * @Description 保存登录日志 + **/ + private Result saveStaffLoginRecord(StaffLatestAgencyResultDTO latestStaffWechatLoginDTO) { + StaffLoginAgencyRecordFormDTO staffLoginAgencyRecordFormDTO = new StaffLoginAgencyRecordFormDTO(); + staffLoginAgencyRecordFormDTO.setCustomerId(latestStaffWechatLoginDTO.getCustomerId()); + staffLoginAgencyRecordFormDTO.setStaffId(latestStaffWechatLoginDTO.getStaffId()); + staffLoginAgencyRecordFormDTO.setWxOpenId(latestStaffWechatLoginDTO.getWxOpenId()); + staffLoginAgencyRecordFormDTO.setMobile(latestStaffWechatLoginDTO.getMobile()); + staffLoginAgencyRecordFormDTO.setAgencyId(latestStaffWechatLoginDTO.getAgencyId()); + Result staffLoginRecordResult = epmetUserOpenFeignClient.saveStaffLoginRecord(staffLoginAgencyRecordFormDTO); + return staffLoginRecordResult; + } + + /** + * @Description 生成政府端小程序业务token Key + * @Author sun + **/ + private String generateGovWxmpToken(String staffId) { + Map map = new HashMap<>(); + map.put("app", LoginConstant.APP_GOV); + map.put("client", LoginConstant.CLIENT_WXMP); + map.put("userId", staffId); + String token = jwtTokenUtils.createToken(map); + logger.info("app:" + LoginConstant.APP_GOV + ";client:" + LoginConstant.CLIENT_WXMP + ";userId:" + staffId + ";生成token[" + token + "]"); + return token; + } + + /** + * @Description 保存tokenDto到redis + * @Author sun + **/ + private void saveLatestGovTokenDto(StaffLatestAgencyResultDTO staffLatestAgency, UserWechatDTO userWechatDTO, String token) { + int expire = jwtTokenProperties.getExpire(); + GovTokenDto govTokenDto = new GovTokenDto(); + govTokenDto.setApp(LoginConstant.APP_GOV); + govTokenDto.setClient(LoginConstant.CLIENT_WXMP); + govTokenDto.setUserId(staffLatestAgency.getStaffId()); + govTokenDto.setOpenId(userWechatDTO.getWxOpenId()); + govTokenDto.setSessionKey(userWechatDTO.getSessionKey()); + govTokenDto.setUnionId(userWechatDTO.getUnionId()); + govTokenDto.setToken(token); + govTokenDto.setUpdateTime(System.currentTimeMillis()); + govTokenDto.setExpireTime(jwtTokenUtils.getExpiration(token).getTime()); + govTokenDto.setRootAgencyId(staffLatestAgency.getAgencyId()); + govTokenDto.setCustomerId(staffLatestAgency.getCustomerId()); + + //设置部门,网格,角色列表 + govTokenDto.setDeptIdList(getDeptartmentIdList(staffLatestAgency.getStaffId())); + govTokenDto.setGridIdList(getGridIdList(staffLatestAgency.getStaffId())); + CustomerAgencyDTO agency = getAgencyByStaffId(staffLatestAgency.getStaffId()); + if (agency != null) { + govTokenDto.setAgencyId(agency.getId()); + govTokenDto.setRoleList(queryGovStaffRoles(staffLatestAgency.getStaffId(), agency.getId())); + } + govTokenDto.setOrgIdPath(getOrgIdPath(staffLatestAgency.getStaffId())); + + cpUserDetailRedis.set(govTokenDto, expire); + logger.info("截止时间:" + DateUtils.format(jwtTokenUtils.getExpiration(token), "yyyy-MM-dd HH:mm:ss")); + } + + public Set getDeptartmentIdList(String staffId) { + try { + Result> deptListResult = govOrgOpenFeignClient.getDepartmentListByStaffId(staffId); + if (deptListResult.success()) { + if (!CollectionUtils.isEmpty(deptListResult.getData())) { + Set deptIdLists = deptListResult.getData().stream().map(dept -> dept.getDepartmentId()).collect(Collectors.toSet()); + return deptIdLists; + } + } else { + logger.error("登录:查询部门列表,远程调用返回错误:{}", deptListResult.getMsg()); + } + } catch (Exception e) { + String errorStackTrace = ExceptionUtils.getErrorStackTrace(e); + logger.error("登录:查询部门列表异常:{}", errorStackTrace); + } + return null; + } + + /** + * 根据工作人员ID查询网格ID列表 + * + * @param staffId + * @return + */ + public Set getGridIdList(String staffId) { + Result> result = govOrgOpenFeignClient.listGridsbystaffid(staffId); + if (!result.success()) { + logger.error("登录:查询网格列表,远程调用返回错误:{}", result.getMsg()); + return null; + } else { + List grids = result.getData(); + return grids.stream().map(grid -> grid.getGridId()).collect(Collectors.toSet()); + } + } + + /** + * 根据staffId查询所属的组织机构 + * + * @param staffId + */ + public CustomerAgencyDTO getAgencyByStaffId(String staffId) { + Result result = govOrgOpenFeignClient.getAgencyByStaff(staffId); + if (!result.success()) { + logger.error("登录:查询登录人所属的机关OrgIdPath失败:{}", result.getMsg()); + return null; + } + return result.getData(); + } + + /** + * 查询人员在某机关单位下的角色列表 + * + * @param staffId orgId + */ + public List queryGovStaffRoles(String staffId, String orgId) { + StaffRoleFormDTO formDTO = new StaffRoleFormDTO(); + formDTO.setStaffId(staffId); + formDTO.setOrgId(orgId); + Result> gridResult = epmetUserOpenFeignClient.getRolesOfStaff(formDTO); + if (!CollectionUtils.isEmpty(gridResult.getData())) { + //return gridResult.getData().stream().map(role -> role.getId()).collect(Collectors.toSet()); + return ConvertUtils.sourceToTarget(gridResult.getData(), GovTokenDto.Role.class); + } + return null; + } + + /** + * 查询工作人员的OrgIdPath + * + * @param staffId + * @return + */ + public String getOrgIdPath(String staffId) { + Result result = govOrgOpenFeignClient.getAgencyByStaff(staffId); + if (!result.success()) { + logger.error("登录:查询登录人所属的机关OrgIdPath失败:{}", result.getMsg()); + return null; + } + CustomerAgencyDTO agency = result.getData(); + if (agency != null) { + if ("0".equals(agency.getPid())) { + // 顶级 + return agency.getId(); + } else { + return agency.getPids().concat(":").concat(agency.getId()); + } + } + return null; + } + +} diff --git a/epmet-module/epmet-third/epmet-third-client/pom.xml b/epmet-module/epmet-third/epmet-third-client/pom.xml index 3a2173aa25..3899202cf7 100644 --- a/epmet-module/epmet-third/epmet-third-client/pom.xml +++ b/epmet-module/epmet-third/epmet-third-client/pom.xml @@ -26,6 +26,12 @@ 3.6.0 compile + + com.epmet + epmet-user-client + 2.0.0 + compile + diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/WxLoginFormDTO.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/WxLoginFormDTO.java new file mode 100644 index 0000000000..bd358f8614 --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/WxLoginFormDTO.java @@ -0,0 +1,27 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Author sun + * @Description 小程序居民端登陆-接口入参 + */ +@Data +public class WxLoginFormDTO implements Serializable { + + private static final long serialVersionUID = -6163303184086480522L; + + /** + * 小程序AppId + */ + private String appId; + + /** + * 用户微信code + */ + private String wxCode; + +} diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdFeignClient.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdFeignClient.java index 00e46fc126..a0e14b9d51 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdFeignClient.java +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdFeignClient.java @@ -2,7 +2,9 @@ package com.epmet.feign; import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.UserWechatDTO; import com.epmet.dto.form.SaveUserVisitedFormDTO; +import com.epmet.dto.form.WxLoginFormDTO; import com.epmet.dto.result.CustomerUserResultDTO; import com.epmet.dto.result.InitCustomerResultDTO; import com.epmet.dto.result.SaveUserResultDTO; @@ -84,4 +86,13 @@ public interface EpmetThirdFeignClient { */ @PostMapping(value = "third/wechatthird/refreshtoken") Result refreshAuthorizerAccessTokenJob(); + + /** + * @param formDTO + * @return + * @Author sun + * @Description 校验appId是否有效以及是否授权,校验通过的调用微信API获取用户基本信息 + **/ + @PostMapping(value = "third/customermp/resiandworklogin") + Result resiAndWorkLogin(WxLoginFormDTO formDTO); } diff --git a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdFeignClientFallback.java b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdFeignClientFallback.java index 0a08750106..791c133589 100644 --- a/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdFeignClientFallback.java +++ b/epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdFeignClientFallback.java @@ -3,7 +3,9 @@ package com.epmet.feign.fallback; import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.utils.ModuleUtils; import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.UserWechatDTO; import com.epmet.dto.form.SaveUserVisitedFormDTO; +import com.epmet.dto.form.WxLoginFormDTO; import com.epmet.dto.result.CustomerUserResultDTO; import com.epmet.dto.result.InitCustomerResultDTO; import com.epmet.dto.result.SaveUserResultDTO; @@ -52,4 +54,9 @@ public class EpmetThirdFeignClientFallback implements EpmetThirdFeignClient { public Result refreshAuthorizerAccessTokenJob() { return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "refreshAuthorizerAccessTokenJob"); } + + @Override + public Result resiAndWorkLogin(WxLoginFormDTO formDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "resiAndWorkLogin", formDTO); + } } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/CustomerMpController.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/CustomerMpController.java index fc1cfafafb..24fac10967 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/CustomerMpController.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/CustomerMpController.java @@ -23,9 +23,11 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.AssertUtils; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.group.AddGroup; -import com.epmet.commons.tools.validator.group.UpdateGroup; import com.epmet.commons.tools.validator.group.DefaultGroup; +import com.epmet.commons.tools.validator.group.UpdateGroup; import com.epmet.dto.CustomerMpDTO; +import com.epmet.dto.UserWechatDTO; +import com.epmet.dto.form.WxLoginFormDTO; import com.epmet.excel.CustomerMpExcel; import com.epmet.service.CustomerMpService; import org.springframework.beans.factory.annotation.Autowired; @@ -91,4 +93,15 @@ public class CustomerMpController { ExcelUtils.exportExcelToTarget(response, null, list, CustomerMpExcel.class); } + /** + * @param formDTO + * @return + * @Author sun + * @Description 校验appId是否有效以及是否授权,校验通过的调用微信API获取用户基本信息 + **/ + @PostMapping("resiandworklogin") + public Result resiAndWorkLogin(@RequestBody WxLoginFormDTO formDTO) { + return new Result().ok(customerMpService.resiAndWorkLogin(formDTO)); + } + } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/CustomerMpDao.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/CustomerMpDao.java index 622c42b56e..63e8a0befa 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/CustomerMpDao.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/CustomerMpDao.java @@ -91,4 +91,11 @@ public interface CustomerMpDao extends BaseDao { */ Boolean selectAuthFlag(@Param("customerId")String customerId, @Param("clientType")String clientType); + /** + * @param appId + * @return + * @Author sun + * @Description 根据appId查询小程序信息 + **/ + CustomerMpDTO selectByAppId(@Param("appId") String appId); } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/CustomerMpService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/CustomerMpService.java index cf43427f6a..11cf845183 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/CustomerMpService.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/CustomerMpService.java @@ -20,6 +20,8 @@ package com.epmet.service; import com.epmet.commons.mybatis.service.BaseService; import com.epmet.commons.tools.page.PageData; import com.epmet.dto.CustomerMpDTO; +import com.epmet.dto.UserWechatDTO; +import com.epmet.dto.form.WxLoginFormDTO; import com.epmet.entity.CustomerMpEntity; import java.util.List; @@ -102,4 +104,12 @@ public interface CustomerMpService extends BaseService { * @return java.lang.Boolean */ Boolean getAuthFlag(String customerId, String clientType); + + /** + * @param formDTO + * @return + * @Author sun + * @Description 校验appId是否有效以及是否授权,校验通过的调用微信API获取用户基本信息 + **/ + UserWechatDTO resiAndWorkLogin(WxLoginFormDTO formDTO); } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/CustomerMpServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/CustomerMpServiceImpl.java index 1377699edc..bbc0efef02 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/CustomerMpServiceImpl.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/CustomerMpServiceImpl.java @@ -20,15 +20,23 @@ package com.epmet.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.FieldConstant; +import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.utils.ConvertUtils; -import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.dao.CustomerMpDao; import com.epmet.dto.CustomerMpDTO; +import com.epmet.dto.UserWechatDTO; +import com.epmet.dto.form.WxLoginFormDTO; import com.epmet.entity.CustomerMpEntity; import com.epmet.redis.CustomerMpRedis; import com.epmet.service.CustomerMpService; +import com.epmet.wxapi.service.WxLoginService; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -46,8 +54,11 @@ import java.util.Map; @Service public class CustomerMpServiceImpl extends BaseServiceImpl implements CustomerMpService { + private static final Logger logger = LoggerFactory.getLogger(CustomerMpServiceImpl.class); @Autowired private CustomerMpRedis customerMpRedis; + @Autowired + private WxLoginService wxLoginService; @Override public PageData page(Map params) { @@ -106,4 +117,29 @@ public class CustomerMpServiceImpl extends BaseServiceImpl根据appId未查询到对应的小程序信息,appId:" + formDTO.getAppId()); + throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode()); + } + if (NumConstant.ONE != mpDTO.getAuthorizationFlag()) { + logger.error("当前appId对应的小程序未完成第三方平台授权不允许使用,appId:" + formDTO.getAppId()); + throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode()); + } + + //2.调用微信API获取用户信息 + UserWechatDTO resultMap = wxLoginService.resiAndWorkLogin(formDTO.getAppId(), formDTO.getWxCode(), mpDTO.getCustomerId(), mpDTO.getClient()); + + return resultMap; + } + } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxLoginConstant.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxLoginConstant.java new file mode 100644 index 0000000000..214eec875a --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxLoginConstant.java @@ -0,0 +1,20 @@ +package com.epmet.wxapi.constant; + +/** + * 微信登陆-获取用户信息-API + * @author sun + */ +public interface WxLoginConstant { + + /** + * 第三方平台代小程序实现-小程序登陆-根据wxcode获取openid + */ + String WXCODE_BY_OPENID = "https://api.weixin.qq.com/sns/component/jscode2session"; + + /** + * 获取用户基本信息(UnionID机制) + * 根据小程序token和openid获取用户基本信息 + */ + String OPENID_TO_INFORMATION = "https://api.weixin.qq.com/cgi-bin/user/info"; + +} diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/WxLoginService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/WxLoginService.java new file mode 100644 index 0000000000..457f53af08 --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/WxLoginService.java @@ -0,0 +1,21 @@ +package com.epmet.wxapi.service; + +import com.epmet.dto.UserWechatDTO; + +import java.util.HashMap; + +/** + * 小程序代码管理相关 API(微信登陆) + * 文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1489140610_Uavc4&token=&lang=zh_CN + * @author sun + */ +public interface WxLoginService { + + /** + * @param appId wxCode customerId clientType + * @return + * @Author sun + * @Description 微信登陆获取用户信息 + **/ + UserWechatDTO resiAndWorkLogin(String appId, String wxCode, String customerId, String clientType); +} diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxLoginServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxLoginServiceImpl.java new file mode 100644 index 0000000000..8ae28634de --- /dev/null +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxLoginServiceImpl.java @@ -0,0 +1,89 @@ +package com.epmet.wxapi.service.impl; + +import com.alibaba.fastjson.JSON; +import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.redis.RedisUtils; +import com.epmet.commons.tools.utils.HttpClientManager; +import com.epmet.dto.UserWechatDTO; +import com.epmet.wxapi.constant.WxLoginConstant; +import com.epmet.wxapi.service.WxLoginService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +/** + * 小程序代码管理相关 API(微信登陆) + * 文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1489140610_Uavc4&token=&lang=zh_CN + * @author sun + */ +@Service +public class WxLoginServiceImpl implements WxLoginService { + private static final Logger logger = LoggerFactory.getLogger(WxLoginServiceImpl.class); + + @Value("${third.platform.appId}") + private String componentAppId; + @Autowired + private RedisUtils redisUtils; + + + /** + * @param appId wxCode customerId clientType + * @return + * @Author sun + * @Description 微信登陆获取用户信息 + **/ + @Override + public UserWechatDTO resiAndWorkLogin(String appId, String wxCode, String customerId, String clientType) { + //1.获取用户openid和session_key + Map map = new HashMap<>(); + map.put("appid", appId); + map.put("js_code", wxCode); + map.put("grant_type", "authorization_code"); + map.put("component_appid", componentAppId); + String componentAccessToken = (String) redisUtils.get("epmet:wechartthird:componentaccesstoken"); + map.put("component_access_token", componentAccessToken); + String resultStr = HttpClientManager.getInstance().sendGet(WxLoginConstant.WXCODE_BY_OPENID, map).getData(); + HashMap hashMap = JSON.parseObject(resultStr, HashMap.class); + if (null != hashMap.get("errorCode")) { + logger.error("wxcode换取openid接口调用失败"); + throw new RenException(hashMap.get("errorMsg")); + } + String openid = hashMap.get("openid"); + String sessionKey = hashMap.get("session_key"); + + //2.换取用户基本信息 + //小程序access_token + String access_token = (String) redisUtils.get("epmet:wechartthird:authinfo" + ":" + customerId + ":" + clientType); + Map hash = new HashMap<>(); + hash.put("access_token", access_token); + hash.put("openid", openid); + hash.put("lang", "zh_CN"); + String getStr = HttpClientManager.getInstance().sendGet(WxLoginConstant.OPENID_TO_INFORMATION, map).getData(); + HashMap resultMap = JSON.parseObject(getStr, HashMap.class); + if (null != resultMap.get("errorCode")) { + logger.error("openid和access_token换取微信用户基本信息接口调用失败"); + throw new RenException(resultMap.get("errorMsg")); + } + + //3.返回结果 + UserWechatDTO dto = new UserWechatDTO(); + dto.setSessionKey(sessionKey); + dto.setWxOpenId(resultMap.get("openid")); + dto.setUnionId(resultMap.get("unionid")); + dto.setNickname(resultMap.get("nickname")); + dto.setSex(Integer.parseInt(resultMap.get("sex"))); + dto.setHeadImgUrl(resultMap.get("headimgurl")); + dto.setCountry(resultMap.get("country")); + dto.setProvince(resultMap.get("province")); + dto.setCity(resultMap.get("city")); + dto.setLanguage(resultMap.get("language")); + + return dto; + } + +} \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CustomerMpDao.xml b/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CustomerMpDao.xml index 8167f6e8b4..64e92ef4f6 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CustomerMpDao.xml +++ b/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CustomerMpDao.xml @@ -85,4 +85,18 @@ AND CLIENT = #{clientType} + + \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java index cbfadb76f6..4fbf1e6f59 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java @@ -5,19 +5,14 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.dto.CustomerAgencyDTO; import com.epmet.dto.CustomerPartyBranchDTO; import com.epmet.dto.form.AddAgencyAndStaffFormDTO; -import com.epmet.dto.form.AddRootAgencyFormDTO; import com.epmet.dto.form.ListPartyBranchFormDTO; -import com.epmet.dto.result.ArticleGridResultDTO; -import com.epmet.dto.result.GridInfoResultDTO; -import com.epmet.dto.result.ListPartyBranchResultDTO; -import com.epmet.dto.result.PublishAgencyListResultDTO; +import com.epmet.dto.result.*; import com.epmet.feign.fallback.GovOrgOpenFeignClientFallback; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.Map; /** * 本服务对外开放的API,其他服务通过引用此client调用该服务 @@ -143,4 +138,22 @@ public interface GovOrgOpenFeignClient { **/ @PostMapping("/gov/org/agency/saverootagency") Result saveRootAgency(@RequestBody AddAgencyAndStaffFormDTO agencyAndStaff); + + /** + * @param staffId + * @return + * @Author sun + * @Description 查询人员部门列表 + */ + @PostMapping("/gov/org/department/staff/{staffId}/departmentlist") + Result> getDepartmentListByStaffId(@PathVariable("staffId") String staffId); + + /** + * @param staffId + * @return + * @Author sun + * @Description 查询工作人员所有的网格 + */ + @PostMapping("/gov/org/grid/gridsbystaffid/{staffId}") + Result> listGridsbystaffid(@PathVariable("staffId") String staffId); } diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java index 0c508b7a00..48fa9c84dc 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java @@ -7,10 +7,7 @@ import com.epmet.dto.CustomerAgencyDTO; import com.epmet.dto.CustomerPartyBranchDTO; import com.epmet.dto.form.AddAgencyAndStaffFormDTO; import com.epmet.dto.form.ListPartyBranchFormDTO; -import com.epmet.dto.result.ArticleGridResultDTO; -import com.epmet.dto.result.GridInfoResultDTO; -import com.epmet.dto.result.ListPartyBranchResultDTO; -import com.epmet.dto.result.PublishAgencyListResultDTO; +import com.epmet.dto.result.*; import com.epmet.feign.GovOrgOpenFeignClient; import org.springframework.stereotype.Component; @@ -83,4 +80,14 @@ public class GovOrgOpenFeignClientFallback implements GovOrgOpenFeignClient { public Result saveRootAgency(AddAgencyAndStaffFormDTO agencyAndStaff) { return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "saveRootAgency", agencyAndStaff); } + + @Override + public Result> getDepartmentListByStaffId(String staffId) { + return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "getDepartmentListByStaffId", staffId); + } + + @Override + public Result> listGridsbystaffid(String staffId) { + return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "listGridsbystaffid", staffId); + } } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/UserWechatDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/UserWechatDTO.java index 5f6685c0d6..0a62b41a07 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/UserWechatDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/UserWechatDTO.java @@ -1,5 +1,7 @@ package com.epmet.dto; +import com.fasterxml.jackson.annotation.JacksonInject; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import java.io.Serializable; @@ -105,4 +107,7 @@ public class UserWechatDTO implements Serializable{ * 更新时间 */ private Date updatedTime; + + @JsonIgnore + private String sessionKey; } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/WxUserFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/WxUserFormDTO.java new file mode 100644 index 0000000000..48d2ca307c --- /dev/null +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/WxUserFormDTO.java @@ -0,0 +1,26 @@ +package com.epmet.dto.form; + +import com.epmet.dto.UserWechatDTO; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description 小程序陌生人登陆,新增或更新用户信息-接口入参 + * @Author sun + */ +@Data +public class WxUserFormDTO implements Serializable{ + private static final long serialVersionUID = -7994579456530273809L; + + /** + * 微信用户基本信息 + */ + private UserWechatDTO wechatDTO; + + /** + * 政府端:gov、居民端:resi、运营端:oper + */ + private String app; + +} diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java index 456290260a..c02d4ba8a1 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java @@ -4,11 +4,13 @@ import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.CustomerStaffDTO; import com.epmet.dto.GovStaffRoleDTO; +import com.epmet.dto.UserDTO; import com.epmet.dto.form.*; import com.epmet.dto.result.*; import com.epmet.feign.fallback.EpmetUserOpenFeignClientFallback; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -95,4 +97,46 @@ public interface EpmetUserOpenFeignClient { */ @PostMapping("/epmetuser/staffrole/roleofcustomer") Result getRoleOfCustomer(@RequestBody CustomerRoleFormDTO form); + + /** + * 小程序登陆新增或更新微信用户信息 + * @author sun + */ + @PostMapping(value = "epmetuser/user/savewxuser") + Result saveWxUser(@RequestBody WxUserFormDTO wxUserFormDTO); + + /** + * @param openId + * @return com.epmet.commons.tools.utils.Result + * @Author sun + * @Description 获取当前微信上次登录的账号信息 + **/ + @GetMapping(value = "epmetuser/staffagencyvisited/getlatest/{openId}") + Result getLatestStaffWechatLoginRecord(@PathVariable("openId") String openId); + + /** + * @param staffWechatFormDTO + * @return com.epmet.commons.tools.utils.Result + * @Author sun + * @Description 手机验证码登录时记录微信openId与当前用户的关系 + **/ + @PostMapping(value = "epmetuser/staffwechat/savestaffwechat", consumes = MediaType.APPLICATION_JSON_VALUE) + Result saveStaffWechat(@RequestBody StaffWechatFormDTO staffWechatFormDTO); + + /** + * @param staffLoginHistoryFormDTO + * @return com.epmet.commons.tools.utils.Result + * @Author sun + * @Description 保存登录日志 + **/ + @PostMapping(value = "epmetuser/staffagencyvisited/saveStaffLoginRecord", consumes = MediaType.APPLICATION_JSON_VALUE) + Result saveStaffLoginRecord(StaffLoginAgencyRecordFormDTO staffLoginHistoryFormDTO); + + /** + * @Author sun + * @Description 保存登录日志 + */ + @PostMapping("/epmetuser/staffrole/staffroles") + Result> getRolesOfStaff(StaffRoleFormDTO staffRoleFormDTO); + } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java index 8a63b4a08f..8f3ef4c809 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java @@ -5,6 +5,7 @@ import com.epmet.commons.tools.utils.ModuleUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.CustomerStaffDTO; import com.epmet.dto.GovStaffRoleDTO; +import com.epmet.dto.UserDTO; import com.epmet.dto.form.*; import com.epmet.dto.result.*; import com.epmet.feign.EpmetUserOpenFeignClient; @@ -61,4 +62,28 @@ public class EpmetUserOpenFeignClientFallback implements EpmetUserOpenFeignClien return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getRoleOfCustomer", form); } + @Override + public Result saveWxUser(WxUserFormDTO wxUserFormDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "saveWxUser", wxUserFormDTO); + } + + @Override + public Result getLatestStaffWechatLoginRecord(String openId) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getLatestStaffWechatLoginRecord", openId); + } + + @Override + public Result saveStaffWechat(StaffWechatFormDTO staffWechatFormDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "saveStaffWechat", staffWechatFormDTO); + } + + @Override + public Result saveStaffLoginRecord(StaffLoginAgencyRecordFormDTO staffLoginHistoryFormDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "saveStaffLoginRecord", staffLoginHistoryFormDTO); + } + + @Override + public Result> getRolesOfStaff(StaffRoleFormDTO staffRoleFormDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getRolesOfStaff", staffRoleFormDTO); + } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java index 16fb79e8fd..a82038d368 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java @@ -67,4 +67,17 @@ public interface UserConstant { * inactive未激活,active已激活 */ String ACTIVE="active"; + + /** + * user表新增数据失败 + */ + String SAVE_USER = "新增用户信息失败"; + /** + * user_wechat表新增数据失败 + */ + String SAVE_USER_WECHAT = "新增用户微信信息失败"; + /** + * user_wechat表更新数据失败 + */ + String UPDATE_USER_WECHAT = "更新用户微信信息失败"; } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserController.java index a02a38b24a..9c0f40c8ef 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserController.java @@ -122,4 +122,14 @@ public class UserController { return new Result().ok(govTokenDto); } + /** + * @param formDTO + * @Author sun + * @Description 小程序微信用户登陆,新增或更新用户信息 + **/ + @PostMapping("savewxuser") + public Result saveWxUser(@RequestBody WxUserFormDTO formDTO){ + return new Result().ok(userService.saveWxUser(formDTO)); + } + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserService.java index 1df8d94607..e65ced810c 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserService.java @@ -76,4 +76,11 @@ public interface UserService extends BaseService { * @return */ LoginUserDetailsResultDTO getLoginUserDetails(String app, String client, String staffId); + + /** + * @param formDTO + * @Author sun + * @Description 小程序微信用户登陆,新增或更新用户信息 + **/ + UserDTO saveWxUser(WxUserFormDTO formDTO); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserServiceImpl.java index 621259be47..4d855c7078 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserServiceImpl.java @@ -1,6 +1,8 @@ package com.epmet.service.impl; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.CpUserDetailRedis; import com.epmet.commons.tools.utils.Result; @@ -24,11 +26,9 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import java.util.Date; - /** * @Description * @ClassName UserServiceImpl @@ -182,4 +182,47 @@ public class UserServiceImpl extends BaseServiceImpl implem public LoginUserDetailsResultDTO getLoginUserDetails(String app, String client, String userId) { return cpUserDetailRedis.get(app, client, userId, LoginUserDetailsResultDTO.class); } + + /** + * @param formDTO + * @Author sun + * @Description 小程序微信用户登陆,新增或更新用户信息 + **/ + @Override + public UserDTO saveWxUser(WxUserFormDTO formDTO) { + UserDTO resultDTO = new UserDTO(); + UserWechatDTO wechatDTO = formDTO.getWechatDTO(); + //1.校验用户是否已存在 + WxLoginUserInfoFormDTO dto = new WxLoginUserInfoFormDTO(); + dto.setApp(formDTO.getApp()); + dto.setOpenId(wechatDTO.getWxOpenId()); + UserDTO userDTO = userWechatDao.selectUserDTOByOpenId(dto); + + UserWechatEntity userWechatEntity = ConvertUtils.sourceToTarget(wechatDTO, UserWechatEntity.class); + //2.不存在则新增,存在则更新 + if(null==userDTO||null==userDTO.getId()){ + //user表新增 + UserEntity userEntity = new UserEntity(); + userEntity.setFromApp(UserConstant.APP_RESI); + userEntity.setFromClient(UserConstant.CLIENT_WX); + if(baseDao.insert(userEntity)< NumConstant.ONE){ + throw new RenException(UserConstant.SAVE_USER); + } + //user_wechat表新增 + userWechatEntity.setUserId(userEntity.getId()); + if(userWechatDao.insert(userWechatEntity)< NumConstant.ONE){ + throw new RenException(UserConstant.SAVE_USER_WECHAT); + } + resultDTO.setId(userEntity.getId()); + }else { + wechatDTO.setId(userDTO.getId()); + if(userWechatDao.updateByUserId(wechatDTO)< NumConstant.ONE){ + throw new RenException(UserConstant.UPDATE_USER_WECHAT); + } + resultDTO.setId(userDTO.getId()); + } + + return resultDTO; + } + } From 3195e083cba5c19e6d20d5ed100fe233764f2d2e Mon Sep 17 00:00:00 2001 From: zxc <954985706@qq.com> Date: Mon, 20 Jul 2020 14:45:45 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E5=B9=B3=E5=8F=B0-=E6=8E=88=E6=9D=83=E5=9B=9E?= =?UTF-8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/service/impl/AppLetAuthorizationServiceImpl.java | 2 +- .../main/java/com/epmet/wxapi/constant/WxMaCodeConstant.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/AppLetAuthorizationServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/AppLetAuthorizationServiceImpl.java index eda08707a3..8086122b33 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/AppLetAuthorizationServiceImpl.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/AppLetAuthorizationServiceImpl.java @@ -39,7 +39,7 @@ public class AppLetAuthorizationServiceImpl implements AppLetAuthorizationServic String customerId = paCustomerAgencyDao.getCustomerIdByUserId(userId); //获取预授权码 String preAuthCode = componentVerifyTicketService.preAuthCode(); - String redirectUrl = String.format(WxMaCodeConstant.API_RETURN_REDIRECT_URL, formDTO.getClientType(), customerId); + String redirectUrl = String.format(WxMaCodeConstant.API_RETURN_REDIRECT_URL, customerId,formDTO.getClientType()); String authUrl = String.format(WxMaCodeConstant.API_AUTH_REGISTER_URL, componentAppId, preAuthCode, redirectUrl); result.setUrl(authUrl); return result; diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxMaCodeConstant.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxMaCodeConstant.java index 5cc453ce5e..7cd1607654 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxMaCodeConstant.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxMaCodeConstant.java @@ -34,7 +34,7 @@ public interface WxMaCodeConstant { * 反参授权回调url */ // String API_RETURN_REDIRECT_URL = "https://epmet-dev.elinkservice.cn/api/third/redirectauthcode?client=%s&customerId=%s"; - String API_RETURN_REDIRECT_URL = "https://epmet-cloud.elinkservice.cn/api/third/redirectauthcode?client=%s&customerId=%s"; + String API_RETURN_REDIRECT_URL = "https://epmet-cloud.elinkservice.cn/api/third/redirectauthcode/%s/%s"; // String API_RETURN_REDIRECT_URL = "https://10.10.10.194:8080/api/third/redirectauthcode?client=%s&customerId=%s"; /**