Browse Source

Merge remote-tracking branch 'origin/dev_thirdplatform' into dev

master
zxc 5 years ago
parent
commit
cef8f4d41b
  1. 6
      epmet-auth/pom.xml
  2. 49
      epmet-auth/src/main/java/com/epmet/controller/ThirdLoginController.java
  3. 28
      epmet-auth/src/main/java/com/epmet/dto/form/LoginFormDTO.java
  4. 27
      epmet-auth/src/main/java/com/epmet/service/ThirdLoginService.java
  5. 348
      epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java
  6. 6
      epmet-module/epmet-third/epmet-third-client/pom.xml
  7. 27
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/WxLoginFormDTO.java
  8. 11
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/EpmetThirdFeignClient.java
  9. 7
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/feign/fallback/EpmetThirdFeignClientFallback.java
  10. 15
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/CustomerMpController.java
  11. 7
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/CustomerMpDao.java
  12. 10
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/CustomerMpService.java
  13. 2
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/AppLetAuthorizationServiceImpl.java
  14. 38
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/CustomerMpServiceImpl.java
  15. 20
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxLoginConstant.java
  16. 2
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/constant/WxMaCodeConstant.java
  17. 21
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/WxLoginService.java
  18. 89
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/service/impl/WxLoginServiceImpl.java
  19. 14
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CustomerMpDao.xml
  20. 25
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java
  21. 15
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java
  22. 5
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/UserWechatDTO.java
  23. 26
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/WxUserFormDTO.java
  24. 44
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
  25. 25
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java
  26. 13
      epmet-user/epmet-user-server/src/main/java/com/epmet/constant/UserConstant.java
  27. 10
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserController.java
  28. 7
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserService.java
  29. 47
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserServiceImpl.java

6
epmet-auth/pom.xml

@ -122,6 +122,12 @@
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-third-server</artifactId>
<version>0.0.15</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

49
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<UserTokenResultDTO> resiLogin(@RequestBody LoginFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO);
return new Result<UserTokenResultDTO>().ok(thirdLoginService.resiLogin(formDTO));
}
/**
* @param formDTO
* @return
* @Author sun
* @Description 单客户-政府端微信小程序登录
**/
@PostMapping("worklogin")
public Result<UserTokenResultDTO> workLogin(@RequestBody LoginFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO);
return new Result<UserTokenResultDTO>().ok(thirdLoginService.workLogin(formDTO));
}
}

28
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;
}

27
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);
}

348
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<UserWechatDTO> 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<UserDTO> 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<String, Object> 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<UserWechatDTO> result = epmetThirdFeignClient.resiAndWorkLogin(resiLoginFormDTO);
if (!result.success()) {
throw new RenException(result.getCode());
}
UserWechatDTO userWechatDTO = result.getData();
//2.根据openid查询用户是否存在历史登陆信息
Result<StaffLatestAgencyResultDTO> 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<String, Object> 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<String> getDeptartmentIdList(String staffId) {
try {
Result<List<DepartmentListResultDTO>> deptListResult = govOrgOpenFeignClient.getDepartmentListByStaffId(staffId);
if (deptListResult.success()) {
if (!CollectionUtils.isEmpty(deptListResult.getData())) {
Set<String> 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<String> getGridIdList(String staffId) {
Result<List<GridByStaffResultDTO>> result = govOrgOpenFeignClient.listGridsbystaffid(staffId);
if (!result.success()) {
logger.error("登录:查询网格列表,远程调用返回错误:{}", result.getMsg());
return null;
} else {
List<GridByStaffResultDTO> grids = result.getData();
return grids.stream().map(grid -> grid.getGridId()).collect(Collectors.toSet());
}
}
/**
* 根据staffId查询所属的组织机构
*
* @param staffId
*/
public CustomerAgencyDTO getAgencyByStaffId(String staffId) {
Result<CustomerAgencyDTO> result = govOrgOpenFeignClient.getAgencyByStaff(staffId);
if (!result.success()) {
logger.error("登录:查询登录人所属的机关OrgIdPath失败:{}", result.getMsg());
return null;
}
return result.getData();
}
/**
* 查询人员在某机关单位下的角色列表
*
* @param staffId orgId
*/
public List<GovTokenDto.Role> queryGovStaffRoles(String staffId, String orgId) {
StaffRoleFormDTO formDTO = new StaffRoleFormDTO();
formDTO.setStaffId(staffId);
formDTO.setOrgId(orgId);
Result<List<GovStaffRoleDTO>> 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<CustomerAgencyDTO> 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;
}
}

6
epmet-module/epmet-third/epmet-third-client/pom.xml

@ -26,6 +26,12 @@
<version>3.6.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-user-client</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

27
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;
}

11
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<UserWechatDTO> resiAndWorkLogin(WxLoginFormDTO formDTO);
}

7
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<UserWechatDTO> resiAndWorkLogin(WxLoginFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_THIRD_SERVER, "resiAndWorkLogin", formDTO);
}
}

15
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<UserWechatDTO> resiAndWorkLogin(@RequestBody WxLoginFormDTO formDTO) {
return new Result<UserWechatDTO>().ok(customerMpService.resiAndWorkLogin(formDTO));
}
}

7
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/CustomerMpDao.java

@ -91,4 +91,11 @@ public interface CustomerMpDao extends BaseDao<CustomerMpEntity> {
*/
Boolean selectAuthFlag(@Param("customerId")String customerId, @Param("clientType")String clientType);
/**
* @param appId
* @return
* @Author sun
* @Description 根据appId查询小程序信息
**/
CustomerMpDTO selectByAppId(@Param("appId") String appId);
}

10
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<CustomerMpEntity> {
* @return java.lang.Boolean
*/
Boolean getAuthFlag(String customerId, String clientType);
/**
* @param formDTO
* @return
* @Author sun
* @Description 校验appId是否有效以及是否授权,校验通过的调用微信API获取用户基本信息
**/
UserWechatDTO resiAndWorkLogin(WxLoginFormDTO formDTO);
}

2
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;

38
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<CustomerMpDao, CustomerMpEntity> implements CustomerMpService {
private static final Logger logger = LoggerFactory.getLogger(CustomerMpServiceImpl.class);
@Autowired
private CustomerMpRedis customerMpRedis;
@Autowired
private WxLoginService wxLoginService;
@Override
public PageData<CustomerMpDTO> page(Map<String, Object> params) {
@ -106,4 +117,29 @@ public class CustomerMpServiceImpl extends BaseServiceImpl<CustomerMpDao, Custom
return baseDao.selectAuthFlag(customerId, clientType);
}
/**
* @param formDTO
* @return
* @Author sun
* @Description 校验appId是否有效以及是否授权,校验通过的调用微信API获取用户基本信息
**/
@Override
public UserWechatDTO resiAndWorkLogin(WxLoginFormDTO formDTO) {
//1.校验appId是否有效以及对应小程序是否已授权
CustomerMpDTO mpDTO = baseDao.selectByAppId(formDTO.getAppId());
if (null == mpDTO) {
logger.error("无效的appId->根据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;
}
}

20
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";
}

2
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";
/**

21
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);
}

89
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<String, Object> 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<String, String> 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<String, Object> 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<String, String> 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;
}
}

14
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/CustomerMpDao.xml

@ -85,4 +85,18 @@
AND CLIENT = #{clientType}
</select>
<select id="selectByAppId" resultType="com.epmet.dto.CustomerMpDTO">
SELECT
id,
customer_id,
client,
app_id,
authorization_flag
FROM
customer_mp
WHERE
del_flag = '0'
AND app_id = #{appId}
</select>
</mapper>

25
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<List<DepartmentListResultDTO>> getDepartmentListByStaffId(@PathVariable("staffId") String staffId);
/**
* @param staffId
* @return
* @Author sun
* @Description 查询工作人员所有的网格
*/
@PostMapping("/gov/org/grid/gridsbystaffid/{staffId}")
Result<List<GridByStaffResultDTO>> listGridsbystaffid(@PathVariable("staffId") String staffId);
}

15
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<List<DepartmentListResultDTO>> getDepartmentListByStaffId(String staffId) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "getDepartmentListByStaffId", staffId);
}
@Override
public Result<List<GridByStaffResultDTO>> listGridsbystaffid(String staffId) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "listGridsbystaffid", staffId);
}
}

5
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;
}

26
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;
}

44
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<GovStaffRoleDTO> getRoleOfCustomer(@RequestBody CustomerRoleFormDTO form);
/**
* 小程序登陆新增或更新微信用户信息
* @author sun
*/
@PostMapping(value = "epmetuser/user/savewxuser")
Result<UserDTO> saveWxUser(@RequestBody WxUserFormDTO wxUserFormDTO);
/**
* @param openId
* @return com.epmet.commons.tools.utils.Result<com.epmet.dto.result.LatestStaffWechatLoginDTO>
* @Author sun
* @Description 获取当前微信上次登录的账号信息
**/
@GetMapping(value = "epmetuser/staffagencyvisited/getlatest/{openId}")
Result<StaffLatestAgencyResultDTO> 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<List<GovStaffRoleDTO>> getRolesOfStaff(StaffRoleFormDTO staffRoleFormDTO);
}

25
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<UserDTO> saveWxUser(WxUserFormDTO wxUserFormDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "saveWxUser", wxUserFormDTO);
}
@Override
public Result<StaffLatestAgencyResultDTO> 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<List<GovStaffRoleDTO>> getRolesOfStaff(StaffRoleFormDTO staffRoleFormDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getRolesOfStaff", staffRoleFormDTO);
}
}

13
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 = "更新用户微信信息失败";
}

10
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserController.java

@ -122,4 +122,14 @@ public class UserController {
return new Result<LoginUserDetailsResultDTO>().ok(govTokenDto);
}
/**
* @param formDTO
* @Author sun
* @Description 小程序微信用户登陆新增或更新用户信息
**/
@PostMapping("savewxuser")
public Result<UserDTO> saveWxUser(@RequestBody WxUserFormDTO formDTO){
return new Result<UserDTO>().ok(userService.saveWxUser(formDTO));
}
}

7
epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserService.java

@ -76,4 +76,11 @@ public interface UserService extends BaseService<UserEntity> {
* @return
*/
LoginUserDetailsResultDTO getLoginUserDetails(String app, String client, String staffId);
/**
* @param formDTO
* @Author sun
* @Description 小程序微信用户登陆新增或更新用户信息
**/
UserDTO saveWxUser(WxUserFormDTO formDTO);
}

47
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<UserDao, UserEntity> 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;
}
}

Loading…
Cancel
Save