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