diff --git a/esua-epdc/doc/branch/dev_1118/db/esua_epdc_admin.sql b/esua-epdc/doc/branch/dev_1118/db/esua_epdc_admin.sql new file mode 100644 index 000000000..ce69538eb --- /dev/null +++ b/esua-epdc/doc/branch/dev_1118/db/esua_epdc_admin.sql @@ -0,0 +1,5 @@ +------------------------------------------2019-11-20----------------------------------------------- +-- 用户表新增微信openId字段 +ALTER TABLE sys_user ADD open_id varchar(32) NULL COMMENT '微信openId'; + +------------------------------------------2019-11-20----------------------------------------------- \ No newline at end of file diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DataScopeDeptList.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DataScopeDeptList.java new file mode 100644 index 000000000..5f4ad11ec --- /dev/null +++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/DataScopeDeptList.java @@ -0,0 +1,27 @@ +package com.elink.esua.epdc.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * + * 用户角色部门信息 + * + * @Author:liuchuang + * @Date:2019/11/19 23:21 + */ +@Data +public class DataScopeDeptList implements Serializable { + private static final long serialVersionUID = -7811155461423939389L; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 部门名称 + */ + private String deptName; +} diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserDTO.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserDTO.java index d02e14e46..d8a35022f 100644 --- a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserDTO.java +++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserDTO.java @@ -100,4 +100,9 @@ public class SysUserDTO implements Serializable { */ private String userTagKey; + /** + * 微信openId + */ + private String openId; + } diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserOpenIdFormDTO.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserOpenIdFormDTO.java new file mode 100644 index 000000000..5cbfd7004 --- /dev/null +++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserOpenIdFormDTO.java @@ -0,0 +1,30 @@ +package com.elink.esua.epdc.dto; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * + * 更新用户openId + * + * @Author:liuchuang + * @Date:2019/11/20 9:45 + */ +@Data +public class SysUserOpenIdFormDTO implements Serializable { + private static final long serialVersionUID = 9009918598017070100L; + + /** + * 用户名 + */ + @NotBlank(message = "用户名不能为空") + private String username; + + /** + * 微信openId + */ + @NotBlank(message = "微信openId不能为空") + private String openId; +} diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java index 78dc1448c..9e61b1cdf 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java @@ -188,6 +188,54 @@ public class SysUserController { return new Result().ok(userDetail); } + /** + * + * 根据openId获取用户信息 + * + * @params [openId] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/20 13:54 + */ + @GetMapping("getUserInfo/{openId}") + public Result getSysUserInfoByOpenId(@PathVariable("openId") String openId) { + SysUserDTO data = sysUserService.getSysUserInfoByOpenId(openId); + + return new Result().ok(data); + } + + /** + * + * 根据用户ID 获取用户角色权限信息 + * + * @params [id] + * @return com.elink.esua.epdc.commons.tools.utils.Result> + * @author liuchuang + * @since 2019/11/19 23:36 + */ + @GetMapping("getDataScope") + public Result> getDataScopeList(Long id) { + List data = sysRoleDataScopeService.getDataScopeDetailList(id); + + return new Result>().ok(data); + } + + /** + * + * 根据用户名更新用户微信openId + * + * @params [sysUserOpenIdFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/20 9:52 + */ + @PostMapping("sys/user/modifyOpenId") + public Result modifyOpenIdByUsername(@RequestBody SysUserOpenIdFormDTO sysUserOpenIdFormDto) { + //效验数据 + ValidatorUtils.validateEntity(sysUserOpenIdFormDto); + return sysUserService.modifyOpenIdByUsername(sysUserOpenIdFormDto); + } + /** * 初始化用户数据 */ diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysRoleDataScopeDao.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysRoleDataScopeDao.java index 958a0efa2..9f85f9134 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysRoleDataScopeDao.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysRoleDataScopeDao.java @@ -8,9 +8,9 @@ package com.elink.esua.epdc.dao; +import com.elink.esua.epdc.dto.DataScopeDeptList; import com.elink.esua.epdc.entity.SysRoleDataScopeEntity; import com.elink.esua.epdc.commons.mybatis.dao.BaseDao; -import com.elink.esua.epdc.entity.SysRoleDataScopeEntity; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -34,6 +34,11 @@ public interface SysRoleDataScopeDao extends BaseDao { */ List getDataScopeList(Long userId); + /** + * 获取用户的部门数据权限列表 + */ + List getDataScopeDetailList(Long userId); + /** * 根据角色id,删除角色数据权限关系 * @param roleId 角色id diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysUserDao.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysUserDao.java index b889a1032..7a414de6e 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysUserDao.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysUserDao.java @@ -8,7 +8,8 @@ package com.elink.esua.epdc.dao; -import com.elink.esua.epdc.dto.epdc.GridForLeaderRegisterDTO; +import com.elink.esua.epdc.dto.SysUserDTO; +import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; import com.elink.esua.epdc.entity.SysUserEntity; import com.elink.esua.epdc.commons.mybatis.dao.BaseDao; import org.apache.ibatis.annotations.Mapper; @@ -59,4 +60,26 @@ public interface SysUserDao extends BaseDao { * @since 2019/10/29 16:18 */ List selectListOfUserIdsByDeptId(@Param("deptId") Long deptId); + + /** + * + * 根据用户名更新用户微信openId + * + * @params [sysUserOpenIdFormDto] + * @return void + * @author liuchuang + * @since 2019/11/20 9:59 + */ + void updateOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto); + + /** + * + * 根据openId获取用户信息 + * + * @params [openId] + * @return com.elink.esua.epdc.dto.SysUserDTO + * @author liuchuang + * @since 2019/11/20 13:56 + */ + SysUserDTO selectOneOfSysUserByOpenId(String openId); } diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/entity/SysUserEntity.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/entity/SysUserEntity.java index 8dd6a7662..b034042df 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/entity/SysUserEntity.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/entity/SysUserEntity.java @@ -100,4 +100,9 @@ public class SysUserEntity extends BaseEntity { */ private String userTagKey; + /** + * 用户微信openId + */ + private String openId; + } diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysRoleDataScopeService.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysRoleDataScopeService.java index e21db0eca..f48a520a4 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysRoleDataScopeService.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysRoleDataScopeService.java @@ -9,6 +9,7 @@ package com.elink.esua.epdc.service; import com.elink.esua.epdc.commons.mybatis.service.BaseService; +import com.elink.esua.epdc.dto.DataScopeDeptList; import com.elink.esua.epdc.entity.SysRoleDataScopeEntity; import java.util.List; @@ -33,6 +34,13 @@ public interface SysRoleDataScopeService extends BaseService getDataScopeList(Long userId); + /** + * 获取用户对应的部门数据权限 + * @param userId 用户ID + * @return 返回部门ID列表 + */ + List getDataScopeDetailList(Long userId); + /** * 保存或修改 * @param roleId 角色ID diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java index 55cf6ca13..98d469c70 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java @@ -11,6 +11,7 @@ package com.elink.esua.epdc.service; import com.elink.esua.epdc.commons.mybatis.service.BaseService; import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; import com.elink.esua.epdc.dto.SysUserDTO; import com.elink.esua.epdc.entity.SysUserEntity; @@ -63,6 +64,17 @@ public interface SysUserService extends BaseService { */ Result listGridWhileLeaderRegister(String mobile); + /** + * + * 根据openId获取用户信息 + * + * @params [openId] + * @return com.elink.esua.epdc.dto.SysUserDTO + * @author liuchuang + * @since 2019/11/20 13:56 + */ + SysUserDTO getSysUserInfoByOpenId(String openId); + /** * * 获取部门下的所有用户ID @@ -73,4 +85,15 @@ public interface SysUserService extends BaseService { * @since 2019/10/29 16:14 */ List listOfUserIdsByDeptId(Long deptId); + + /** + * + * 根据用户名更新用户微信openId + * + * @params [sysUserOpenIdFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/20 9:56 + */ + Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto); } diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysRoleDataScopeServiceImpl.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysRoleDataScopeServiceImpl.java index c4cc8a58f..4c7bb2903 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysRoleDataScopeServiceImpl.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysRoleDataScopeServiceImpl.java @@ -11,6 +11,7 @@ package com.elink.esua.epdc.service.impl; import cn.hutool.core.collection.CollUtil; import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; import com.elink.esua.epdc.dao.SysRoleDataScopeDao; +import com.elink.esua.epdc.dto.DataScopeDeptList; import com.elink.esua.epdc.entity.SysRoleDataScopeEntity; import com.elink.esua.epdc.service.SysRoleDataScopeService; import org.springframework.stereotype.Service; @@ -38,6 +39,11 @@ public class SysRoleDataScopeServiceImpl extends BaseServiceImpl getDataScopeDetailList(Long userId) { + return baseDao.getDataScopeDetailList(userId); + } + @Override @Transactional(rollbackFor = Exception.class) public void saveOrUpdate(Long roleId, List deptIdList) { diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java index 4d3972143..954de6d52 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java @@ -25,6 +25,7 @@ import com.elink.esua.epdc.commons.tools.security.user.UserDetail; import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dao.SysUserDao; +import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; import com.elink.esua.epdc.dto.epdc.GridForLeaderRegisterDTO; import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; import com.elink.esua.epdc.dto.SysUserDTO; @@ -217,4 +218,16 @@ public class SysUserServiceImpl extends BaseServiceImpl listOfUserIdsByDeptId(Long deptId) { return baseDao.selectListOfUserIdsByDeptId(deptId); } + + @Override + public Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto) { + baseDao.updateOpenIdByUsername(sysUserOpenIdFormDto); + + return new Result(); + } + + @Override + public SysUserDTO getSysUserInfoByOpenId(String openId) { + return baseDao.selectOneOfSysUserByOpenId(openId); + } } diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysRoleDataScopeDao.xml b/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysRoleDataScopeDao.xml index ae6dc5beb..e314e375f 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysRoleDataScopeDao.xml +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysRoleDataScopeDao.xml @@ -12,6 +12,20 @@ where t1.user_id = #{value} and t1.role_id = t2.role_id + + delete from sys_role_data_scope where role_id = #{value} diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysUserDao.xml b/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysUserDao.xml index 8a3d50bff..eccef143e 100644 --- a/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysUserDao.xml +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysUserDao.xml @@ -88,4 +88,19 @@ AND dept_id = #{deptId} + + + + UPDATE sys_user SET open_id = #{openId} WHERE username = #{username} AND del_flag = 0 + + diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java index a2bebca12..d1a598bff 100644 --- a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java @@ -8,15 +8,17 @@ package com.elink.esua.epdc.controller; -import com.elink.esua.epdc.common.token.dto.TokenDto; +import com.elink.esua.epdc.common.token.dto.*; import com.elink.esua.epdc.commons.tools.constant.Constant; import com.elink.esua.epdc.commons.tools.exception.ErrorCode; import com.elink.esua.epdc.commons.tools.security.user.UserDetail; +import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.validator.AssertUtils; import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils; import com.elink.esua.epdc.dto.AuthorizationDTO; import com.elink.esua.epdc.dto.LoginDTO; +import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; import com.elink.esua.epdc.service.AuthService; import com.elink.esua.epdc.service.CaptchaService; import com.elink.esua.epdc.service.ResourceService; @@ -84,6 +86,47 @@ public class AuthController { return new Result().ok(authorization); } + /** + * + * 工作端-获取token + * + * @params [tokenFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/19 20:46 + */ + @GetMapping(value = "getToken") + public Result getToken(@RequestBody WorkUserTokenFormDTO tokenFormDto) { + //效验数据 + ValidatorUtils.validateEntity(tokenFormDto); + + return authService.workLogin(tokenFormDto.getUsername(), null); + } + + /** + * + * 工作端-用户登录 + * + * @params [workUserLoginDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/19 20:21 + */ + @PostMapping(value = "workLogin") + @ApiOperation(value = "登录") + public Result workLogin(@RequestBody WorkUserLoginDTO workUserLoginDto) { + //效验数据 + ValidatorUtils.validateEntity(workUserLoginDto); + Result result = authService.workLogin(workUserLoginDto.getUsername(), workUserLoginDto.getPassword()); + if (result.success()) { + // 更新用户openId + SysUserOpenIdFormDTO sysUserOpenIdFormDto = ConvertUtils.sourceToTarget(workUserLoginDto, SysUserOpenIdFormDTO.class); + authService.modifyOpenId(sysUserOpenIdFormDto); + } + + return result; + } + @PostMapping(value = "logout") @ApiOperation(value = "退出") public Result logout(HttpServletRequest request) { diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java index 735875216..ca790017b 100644 --- a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java @@ -8,14 +8,19 @@ package com.elink.esua.epdc.feign; +import com.elink.esua.epdc.dto.DataScopeDeptList; +import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; import com.elink.esua.epdc.feign.fallback.UserFeignClientFallback; import com.elink.esua.epdc.commons.tools.constant.ServiceConstant; import com.elink.esua.epdc.commons.tools.security.user.UserDetail; import com.elink.esua.epdc.commons.tools.utils.Result; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; +import java.util.List; + /** * 用户接口 * @@ -39,4 +44,28 @@ public interface UserFeignClient { @GetMapping("sys/user/getByUsername") Result getByUsername(@RequestParam("username") String username); + /** + * + * 根据用户ID获取用户角色权限信息 + * + * @params [id] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/19 23:31 + */ + @GetMapping("sys/user/getDataScope") + Result> getDataScopeList(@RequestParam("id") Long id); + + /** + * + * 根据用户名更新用户微信openId + * + * @params [sysUserOpenIdFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/20 9:52 + */ + @PostMapping("sys/user/modifyOpenId") + Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto); + } diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java index ee760cd1e..8e0e09368 100644 --- a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java @@ -10,9 +10,13 @@ package com.elink.esua.epdc.feign.fallback; import com.elink.esua.epdc.commons.tools.security.user.UserDetail; import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.dto.DataScopeDeptList; +import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; import com.elink.esua.epdc.feign.UserFeignClient; import org.springframework.stereotype.Component; +import java.util.List; + /** * 用户接口 Fallback * @@ -31,4 +35,14 @@ public class UserFeignClientFallback implements UserFeignClient { public Result getByUsername(String username) { return new Result<>(); } + + @Override + public Result> getDataScopeList(Long id) { + return new Result<>(); + } + + @Override + public Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto) { + return new Result<>(); + } } diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java index 48c57434c..6b0061c0f 100644 --- a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java @@ -9,8 +9,14 @@ package com.elink.esua.epdc.service; import com.elink.esua.epdc.common.token.dto.TokenDto; +import com.elink.esua.epdc.common.token.dto.WorkUserAuthorizationDTO; +import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dto.AuthorizationDTO; +import com.elink.esua.epdc.dto.DataScopeDeptList; import com.elink.esua.epdc.dto.LoginDTO; +import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; + +import java.util.List; /** * 认证服务 @@ -25,10 +31,43 @@ public interface AuthService { */ AuthorizationDTO login(LoginDTO login); + /** + * + * 工作端登录 + * + * @params [username, password] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/20 9:30 + */ + Result workLogin(String username, String password); + + /** + * + * 根据用户名更新用户微信openId + * + * @params [sysUserOpenIdFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/20 9:50 + */ + Result modifyOpenId(SysUserOpenIdFormDTO sysUserOpenIdFormDto); + /** * 退出 */ void logout(Long userId); TokenDto getLoginUserInfo(String token); + + /** + * + * 获取用户所有角色权限信息 + * + * @params [id] + * @return java.util.List + * @author liuchuang + * @since 2019/11/19 23:42 + */ + List getDataScopeDetailList(Long id); } diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java index b43cc37dd..8032d27a2 100644 --- a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java @@ -8,7 +8,10 @@ package com.elink.esua.epdc.service.impl; +import com.elink.esua.epdc.common.token.dto.DeptDataScopeDTO; import com.elink.esua.epdc.common.token.dto.TokenDto; +import com.elink.esua.epdc.common.token.dto.WorkUserAuthorizationDTO; +import com.elink.esua.epdc.common.token.dto.WorkUserTokenFormDTO; import com.elink.esua.epdc.common.token.util.CpUserDetailRedis; import com.elink.esua.epdc.commons.tools.constant.Constant; import com.elink.esua.epdc.commons.tools.exception.ErrorCode; @@ -22,11 +25,14 @@ import com.elink.esua.epdc.commons.tools.redis.UserDetailRedis; import com.elink.esua.epdc.commons.tools.security.password.PasswordUtils; import com.elink.esua.epdc.commons.tools.security.user.SecurityUser; import com.elink.esua.epdc.commons.tools.security.user.UserDetail; +import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; import com.elink.esua.epdc.commons.tools.utils.HttpContextUtils; import com.elink.esua.epdc.commons.tools.utils.IpUtils; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dto.AuthorizationDTO; +import com.elink.esua.epdc.dto.DataScopeDeptList; import com.elink.esua.epdc.dto.LoginDTO; +import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; import com.elink.esua.epdc.enums.UserStatusEnum; import com.elink.esua.epdc.feign.UserFeignClient; import com.elink.esua.epdc.jwt.JwtProperties; @@ -39,6 +45,7 @@ import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.Date; +import java.util.List; /** * 认证服务 @@ -127,6 +134,79 @@ public class AuthServiceImpl implements AuthService { return authorization; } + @Override + public Result workLogin(String username, String password) { + HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); + + //获取用户信息 + Result result = userFeignClient.getByUsername(username); + UserDetail user = result.getData(); + + //登录日志 + SysLogLogin log = new SysLogLogin(); + log.setType(LogTypeEnum.LOGIN.value()); + log.setOperation(LoginOperationEnum.LOGIN.value()); + log.setCreateDate(new Date()); + log.setIp(IpUtils.getIpAddr(request)); + log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT)); + log.setIp(IpUtils.getIpAddr(request)); + + //账号不存在 + if (user == null) { + log.setStatus(LoginStatusEnum.FAIL.value()); + log.setCreatorName(username); + logProducer.saveLog(log); + + return new Result().error("账号不存在"); + } + + //密码错误 + if (null != password && !PasswordUtils.matches(password, user.getPassword())) { + log.setStatus(LoginStatusEnum.FAIL.value()); + log.setCreator(user.getId()); + log.setCreatorName(user.getUsername()); + logProducer.saveLog(log); + + return new Result().error("密码错误"); + } + + //账号停用 + if (user.getStatus() == UserStatusEnum.DISABLE.value()) { + log.setStatus(LoginStatusEnum.LOCK.value()); + log.setCreator(user.getId()); + log.setCreatorName(user.getUsername()); + logProducer.saveLog(log); + + return new Result().error("账号已停用"); + } + + //保存到Redis + userDetailRedis.set(user, jwtProperties.getExpire()); + + //登录成功,生成token + String token = jwtUtils.generateToken(user.getId()); + + //授权信息 + WorkUserAuthorizationDTO authorization = new WorkUserAuthorizationDTO(); + authorization.setToken(token); + authorization.setExpire(jwtProperties.getExpire()); + + //登录用户信息 + log.setCreator(user.getId()); + log.setCreatorName(user.getUsername()); + log.setStatus(LoginStatusEnum.SUCCESS.value()); + logProducer.saveLog(log); + + // 获取用户所有角色权限信息 + List dataScopeDeptList = this.getDataScopeDetailList(user.getId()); + authorization.setDeptDataScopeList(ConvertUtils.sourceToTarget(dataScopeDeptList, DeptDataScopeDTO.class)); + + authorization.setDeptName(user.getDeptName()); + authorization.setUserTagKey(user.getTypeKey()); + + return new Result().ok(authorization); + } + @Override public void logout(Long userId) { HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); @@ -168,4 +248,19 @@ public class AuthServiceImpl implements AuthService { cpUserDetailRedis.set(cpUserDetail, expire); return cpUserDetail; } + + @Override + public List getDataScopeDetailList(Long id) { + Result> result = userFeignClient.getDataScopeList(id); + if (result.success()) { + return result.getData(); + } + + return null; + } + + @Override + public Result modifyOpenId(SysUserOpenIdFormDTO sysUserOpenIdFormDto) { + return userFeignClient.modifyOpenIdByUsername(sysUserOpenIdFormDto); + } } diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/DeptDataScopeDTO.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/DeptDataScopeDTO.java new file mode 100644 index 000000000..08d4c5118 --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/DeptDataScopeDTO.java @@ -0,0 +1,27 @@ +package com.elink.esua.epdc.common.token.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * + * 用户所有角色权限信息 + * + * @Author:liuchuang + * @Date:2019/11/19 23:48 + */ +@Data +public class DeptDataScopeDTO implements Serializable { + private static final long serialVersionUID = -6319876948812713836L; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 部门名称 + */ + private String deptName; +} diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/WorkUserAuthorizationDTO.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/WorkUserAuthorizationDTO.java new file mode 100644 index 000000000..17c83983a --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/WorkUserAuthorizationDTO.java @@ -0,0 +1,43 @@ +package com.elink.esua.epdc.common.token.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * + * 工作端用户授权信息 + * + * @Author:liuchuang + * @Date:2019/11/19 20:17 + */ +@Data +public class WorkUserAuthorizationDTO implements Serializable { + private static final long serialVersionUID = -4230190448906007120L; + + /** + * 令牌 + */ + private String token; + + /** + * 过期时长,单位秒 + */ + private Integer expire; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 用户标签key + */ + private String userTagKey; + + /** + * 用户所有角色权限信息 + */ + private List deptDataScopeList; +} diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/WorkUserLoginDTO.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/WorkUserLoginDTO.java new file mode 100644 index 000000000..0e28ca162 --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/WorkUserLoginDTO.java @@ -0,0 +1,29 @@ +package com.elink.esua.epdc.common.token.dto; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * + * 工作端用户登录信息 + * + * @Author:liuchuang + * @Date:2019/11/19 20:19 + */ +@Data +public class WorkUserLoginDTO implements Serializable { + private static final long serialVersionUID = 1905641243346550379L; + + @NotBlank(message="用户名不能为空") + private String username; + + @NotBlank(message="密码不能为空") + private String password; + + @NotBlank(message="微信code不能为空") + private String wxCode; + + private String openId; +} diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/WorkUserTokenFormDTO.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/WorkUserTokenFormDTO.java new file mode 100644 index 000000000..43ac8960f --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/WorkUserTokenFormDTO.java @@ -0,0 +1,25 @@ +package com.elink.esua.epdc.common.token.dto; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * + * 工作端获取token Form DTO + * + * @Author:liuchuang + * @Date:2019/11/19 20:35 + */ +@Data +public class WorkUserTokenFormDTO implements Serializable { + private static final long serialVersionUID = -2239027109939769097L; + + @NotNull(message = "用户ID不能为空") + private Long id; + + @NotBlank(message = "用户名不能为空") + private String username; +} diff --git a/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/AuthFilter.java b/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/AuthFilter.java index ddc5a2aa4..864cf6fcc 100644 --- a/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/AuthFilter.java +++ b/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/AuthFilter.java @@ -51,6 +51,16 @@ public class AuthFilter implements GlobalFilter { */ private List urls; + /** + * 不拦截工作端urls + */ + private List workLoginUrls; + + /** + * 拦截的工作端urls + */ + private List workUrls; + @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); @@ -64,7 +74,10 @@ public class AuthFilter implements GlobalFilter { //获取用户token String token = request.getHeaders().getFirst(Constant.TOKEN_HEADER); if(StringUtils.isBlank(token)){ - token = request.getQueryParams().getFirst(Constant.TOKEN_HEADER); + token = request.getHeaders().getFirst(Constant.AUTHORIZATION_HEADER); + if (StringUtils.isBlank(token)) { + token = request.getQueryParams().getFirst(Constant.TOKEN_HEADER); + } } //资源访问权限 @@ -95,6 +108,18 @@ public class AuthFilter implements GlobalFilter { } private boolean pathMatcher(String requestUri){ + for (String url : workLoginUrls) { + if(antPathMatcher.match(url, requestUri)){ + return true; + } + } + + for (String url : workUrls) { + if(antPathMatcher.match(url, requestUri)){ + return false; + } + } + for (String url : urls) { if(antPathMatcher.match(url, requestUri)){ return true; @@ -110,4 +135,20 @@ public class AuthFilter implements GlobalFilter { public void setUrls(List urls) { this.urls = urls; } + + public List getWorkLoginUrls() { + return workLoginUrls; + } + + public void setWorkLoginUrls(List workLoginUrls) { + this.workLoginUrls = workLoginUrls; + } + + public List getWorkUrls() { + return workUrls; + } + + public void setWorkUrls(List workUrls) { + this.workUrls = workUrls; + } } diff --git a/esua-epdc/epdc-gateway/src/main/resources/application.yml b/esua-epdc/epdc-gateway/src/main/resources/application.yml index 7178201da..b671dc490 100644 --- a/esua-epdc/epdc-gateway/src/main/resources/application.yml +++ b/esua-epdc/epdc-gateway/src/main/resources/application.yml @@ -193,6 +193,11 @@ renren: - /heart/** - /oss/file/download - /ws/** + workLoginUrls: + - /api/work/user/getToken #工作端-获取token + - /api/work/user/login #工作端-登录 + workUrls: + - /api/work/** #工作端接口 epdc: @@ -211,3 +216,4 @@ epdc: - /api/app-user/user/ma/regist # 小程序用户 注册 - /api/app-user/user/ma/gridLeaderRegister # 小程序用户 网格长注册 - /api/app-user/user/ma/v2/getToken # 小程序用户 注册或登录(版本v2) + - /api/work/** #工作端接口不拦截 diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/EpdcWorkAppUserMaTokenFormDTO.java b/esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/EpdcWorkAppUserMaTokenFormDTO.java new file mode 100644 index 000000000..861ee053c --- /dev/null +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/EpdcWorkAppUserMaTokenFormDTO.java @@ -0,0 +1,24 @@ +package com.elink.esua.epdc.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * + * 工作端获取token + * + * @Author:liuchuang + * @Date:2019/11/19 16:53 + */ +@Data +public class EpdcWorkAppUserMaTokenFormDTO implements Serializable { + private static final long serialVersionUID = 1283317301539797996L; + + /** + * 微信code + */ + @NotBlank(message = "微信code不能为空") + private String wxCode; +} diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiGroupController.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiGroupController.java index c7d193ba7..0812ae11c 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiGroupController.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiGroupController.java @@ -179,7 +179,7 @@ public class ApiGroupController { * @since 2019/10/23 16:39 */ @GetMapping("getInviteList") - public Result> getInviteList(@LoginUser TokenDto userDetail, @RequestBody EpdcUserGroupInviteFormDTO formDto) { + public Result> getInviteList(@LoginUser TokenDto userDetail, EpdcUserGroupInviteFormDTO formDto) { return groupService.listOfInviteUsers(userDetail, formDto); } diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiWorkUserController.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiWorkUserController.java index a10cf7651..eeedea769 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiWorkUserController.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiWorkUserController.java @@ -1,11 +1,15 @@ package com.elink.esua.epdc.controller; import com.elink.esua.epdc.common.token.dto.TokenDto; +import com.elink.esua.epdc.common.token.dto.WorkUserAuthorizationDTO; +import com.elink.esua.epdc.common.token.dto.WorkUserLoginDTO; import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils; import com.elink.esua.epdc.dto.epdc.form.EpdcUnauthorizedAmountFromDTO; import com.elink.esua.epdc.dto.epdc.result.EpdcPartyMemberDetailDto; import com.elink.esua.epdc.dto.epdc.form.EpdcAppAuthenticateResidentFormDTO; import com.elink.esua.epdc.dto.epdc.result.EpdcResidentDetailResultDTO; +import com.elink.esua.epdc.dto.form.EpdcWorkAppUserMaTokenFormDTO; import com.elink.esua.epdc.service.WorkUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -33,6 +37,36 @@ public class ApiWorkUserController { @Autowired private WorkUserService workUserService; + /** + * + * 工作端-获取token + * + * @params [formDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/19 17:23 + */ + @GetMapping("getToken") + public Result getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto) { + ValidatorUtils.validateEntity(formDto); + return workUserService.getMaToken(formDto); + } + + /** + * + * 工作端-用户登录 + * + * @params [formDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/19 23:03 + */ + @PostMapping("login") + public Result login(WorkUserLoginDTO formDto) { + ValidatorUtils.validateEntity(formDto); + return workUserService.login(formDto); + } + /** * 获取居民详情(已认证或待认证(提交信息待审核)的居民用户) * diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/AdminFeignClient.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/AdminFeignClient.java index 1adefe60b..3dbc9f824 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/AdminFeignClient.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/AdminFeignClient.java @@ -3,6 +3,7 @@ package com.elink.esua.epdc.feign; import com.elink.esua.epdc.commons.tools.constant.ServiceConstant; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dto.CompleteDeptDTO; +import com.elink.esua.epdc.dto.SysUserDTO; import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; import com.elink.esua.epdc.feign.fallback.AdminFeignClientFallback; import org.springframework.cloud.openfeign.FeignClient; @@ -41,4 +42,16 @@ public interface AdminFeignClient { */ @GetMapping("sys/user/listGridForLeader/{mobile}") Result listGridWhileLeaderRegister(@PathVariable("mobile") String mobile); + + /** + * + * 根据openId获取用户信息 + * + * @params [openId] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/19 17:43 + */ + @GetMapping("sys/user/getUserInfo/{openId}") + Result getSysUserInfoByOpenId(@PathVariable("openId") String openId); } diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/ResourceFeignClient.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/ResourceFeignClient.java new file mode 100644 index 000000000..99c472b6d --- /dev/null +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/ResourceFeignClient.java @@ -0,0 +1,46 @@ +package com.elink.esua.epdc.feign; + +import com.elink.esua.epdc.common.token.dto.WorkUserAuthorizationDTO; +import com.elink.esua.epdc.common.token.dto.WorkUserLoginDTO; +import com.elink.esua.epdc.common.token.dto.WorkUserTokenFormDTO; +import com.elink.esua.epdc.commons.tools.constant.ServiceConstant; +import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.feign.fallback.ResourceFeignClientFallback; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; + +/** + * + * 资源接口 + * + * @Author:liuchuang + * @Date:2019/11/19 18:59 + */ +@FeignClient(name = ServiceConstant.EPDC_AUTH_SERVER, fallback = ResourceFeignClientFallback.class) +public interface ResourceFeignClient { + + /** + * + * 工作端用户获取token + * + * @params [workUserTokenFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/19 20:48 + */ + @GetMapping("auth/getToken") + Result getToken(WorkUserTokenFormDTO workUserTokenFormDto); + + /** + * + * 工作端用户登录并获取授权信息 + * + * @params [workUserLoginDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/19 20:27 + */ + @PostMapping("auth/workLogin") + Result workLogin(WorkUserLoginDTO workUserLoginDto); +} diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/AdminFeignClientFallback.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/AdminFeignClientFallback.java index 227c3b1f8..2e5f0971a 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/AdminFeignClientFallback.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/AdminFeignClientFallback.java @@ -4,6 +4,7 @@ import com.elink.esua.epdc.commons.tools.constant.ServiceConstant; import com.elink.esua.epdc.commons.tools.utils.ModuleUtils; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dto.CompleteDeptDTO; +import com.elink.esua.epdc.dto.SysUserDTO; import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; import com.elink.esua.epdc.feign.AdminFeignClient; import org.springframework.stereotype.Component; @@ -26,4 +27,9 @@ public class AdminFeignClientFallback implements AdminFeignClient { public Result listGridWhileLeaderRegister(String mobile) { return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "listGridWhileLeaderRegister", mobile); } + + @Override + public Result getSysUserInfoByOpenId(String openId) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "getSysUserInfoByOpenId", openId); + } } diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java new file mode 100644 index 000000000..f7503d89b --- /dev/null +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java @@ -0,0 +1,31 @@ +package com.elink.esua.epdc.feign.fallback; + +import com.elink.esua.epdc.common.token.dto.WorkUserAuthorizationDTO; +import com.elink.esua.epdc.common.token.dto.WorkUserLoginDTO; +import com.elink.esua.epdc.common.token.dto.WorkUserTokenFormDTO; +import com.elink.esua.epdc.commons.tools.constant.ServiceConstant; +import com.elink.esua.epdc.commons.tools.utils.ModuleUtils; +import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.feign.ResourceFeignClient; +import org.springframework.stereotype.Component; + +/** + * + * 资源接口 Fallback + * + * @Author:liuchuang + * @Date:2019/11/19 19:00 + */ +@Component +public class ResourceFeignClientFallback implements ResourceFeignClient { + + @Override + public Result getToken(WorkUserTokenFormDTO workUserTokenFormDto) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_AUTH_SERVER, "getToken", workUserTokenFormDto); + } + + @Override + public Result workLogin(WorkUserLoginDTO workUserLoginDto) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_AUTH_SERVER, "workLogin", workUserLoginDto); + } +} diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/WorkUserService.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/WorkUserService.java index ff1c03ce8..b17262943 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/WorkUserService.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/WorkUserService.java @@ -1,5 +1,7 @@ package com.elink.esua.epdc.service; +import com.elink.esua.epdc.common.token.dto.WorkUserAuthorizationDTO; +import com.elink.esua.epdc.common.token.dto.WorkUserLoginDTO; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dto.epdc.form.EpdcAppAuthenticateResidentFormDTO; import com.elink.esua.epdc.dto.epdc.form.EpdcUnauthorizedAmountFromDTO; @@ -8,6 +10,7 @@ import com.elink.esua.epdc.dto.epdc.result.EpdcPartyMemberDetailDto; import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.dto.epdc.form.EpdcWorkUserFromDTO; import com.elink.esua.epdc.dto.epdc.result.EpdcWorkUserResultDTO; +import com.elink.esua.epdc.dto.form.EpdcWorkAppUserMaTokenFormDTO; import java.util.List; import java.util.Map; @@ -19,6 +22,29 @@ import java.util.Map; * @date 2019/11/18 10:48 */ public interface WorkUserService { + + /** + * + * 工作端-获取token + * + * @params [formDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/19 17:28 + */ + Result getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto); + + /** + * + * 工作端-用户登录 + * + * @params [formDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/19 23:04 + */ + Result login(WorkUserLoginDTO formDto); + /** * 获取居民详情(已认证或待认证(提交信息待审核)的居民用户) * @param userId 用户Id diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/WorkUserServiceImpl.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/WorkUserServiceImpl.java index 10a52c8f1..9e64a908d 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/WorkUserServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/WorkUserServiceImpl.java @@ -1,6 +1,14 @@ package com.elink.esua.epdc.service.impl; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import com.elink.esua.epdc.common.token.dto.WorkUserAuthorizationDTO; +import com.elink.esua.epdc.common.token.dto.WorkUserLoginDTO; +import com.elink.esua.epdc.common.token.dto.WorkUserTokenFormDTO; +import com.elink.esua.epdc.commons.tools.exception.RenException; +import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.dto.SysUserDTO; import com.elink.esua.epdc.dto.epdc.form.EpdcAppAuthenticateResidentFormDTO; import com.elink.esua.epdc.dto.epdc.form.EpdcUnauthorizedAmountFromDTO; import com.elink.esua.epdc.dto.epdc.result.EpdcResidentDetailResultDTO; @@ -8,8 +16,13 @@ import com.elink.esua.epdc.dto.epdc.result.EpdcPartyMemberDetailDto; import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.dto.epdc.form.EpdcWorkUserFromDTO; import com.elink.esua.epdc.dto.epdc.result.EpdcWorkUserResultDTO; +import com.elink.esua.epdc.dto.form.EpdcWorkAppUserMaTokenFormDTO; +import com.elink.esua.epdc.feign.AdminFeignClient; +import com.elink.esua.epdc.feign.ResourceFeignClient; import com.elink.esua.epdc.feign.UserFeignClient; import com.elink.esua.epdc.service.WorkUserService; +import me.chanjar.weixin.common.error.WxErrorException; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -27,6 +40,41 @@ public class WorkUserServiceImpl implements WorkUserService { @Autowired private UserFeignClient userFeignClient; + @Autowired + private WxMaService wxMaService; + + @Autowired + private AdminFeignClient adminFeignClient; + + @Autowired + private ResourceFeignClient resourceFeignClient; + + @Override + public Result getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto) { + // 获取openId + String openId = this.getWxMaUser(formDto.getWxCode()).getOpenid(); + + // 检查当前微信是否已绑定账户 + Result sysUserDtoResult = adminFeignClient.getSysUserInfoByOpenId(openId); + if (!sysUserDtoResult.success()) { + return new Result().error(sysUserDtoResult.getMsg()); + } + SysUserDTO userDto = sysUserDtoResult.getData(); + if (null == userDto) { + return new Result().error("用户不存在"); + } + + return resourceFeignClient.getToken(ConvertUtils.sourceToTarget(userDto, WorkUserTokenFormDTO.class)); + } + + @Override + public Result login(WorkUserLoginDTO formDto) { + // 获取openId + String openId = this.getWxMaUser(formDto.getWxCode()).getOpenid(); + formDto.setOpenId(openId); + return resourceFeignClient.workLogin(formDto); + } + /** * 获取居民详情(已认证或待认证(提交信息待审核)的居民用户) * @@ -81,4 +129,27 @@ public class WorkUserServiceImpl implements WorkUserService { fromDto.setUserId(userDetail.getUserId()); return userFeignClient.getUnauthorizedAmount(fromDto); } + + /** + * 解析微信code获取小程序用户信息 + * + * @param wxCode + * @return cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult + * @author work@yujt.net.cn + * @date 2019/9/19 19:32 + */ + private WxMaJscode2SessionResult getWxMaUser(String wxCode) { + WxMaJscode2SessionResult wxMaJscode2SessionResult = null; + try { + wxMaJscode2SessionResult = wxMaService.jsCode2SessionInfo(wxCode); + } catch (WxErrorException e) { + e.printStackTrace(); + } + if (null == wxMaJscode2SessionResult) { + throw new RenException("解析微信用户信息失败"); + } else if (StringUtils.isBlank(wxMaJscode2SessionResult.getOpenid())) { + throw new RenException("获取微信openid失败"); + } + return wxMaJscode2SessionResult; + } } diff --git a/esua-epdc/epdc-module/epdc-group/epdc-group-client/src/main/java/com.elink.esua.epdc/dto/group/form/GroupUserReviewFormDTO.java b/esua-epdc/epdc-module/epdc-group/epdc-group-client/src/main/java/com.elink.esua.epdc/dto/group/form/GroupUserReviewFormDTO.java index ea184a99a..03b090092 100644 --- a/esua-epdc/epdc-module/epdc-group/epdc-group-client/src/main/java/com.elink.esua.epdc/dto/group/form/GroupUserReviewFormDTO.java +++ b/esua-epdc/epdc-module/epdc-group/epdc-group-client/src/main/java/com.elink.esua.epdc/dto/group/form/GroupUserReviewFormDTO.java @@ -27,5 +27,5 @@ public class GroupUserReviewFormDTO implements Serializable { /** * 审核用户 */ - private List userReviewDtoList; + private List members; } diff --git a/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/group/service/impl/UserGroupServiceImpl.java b/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/group/service/impl/UserGroupServiceImpl.java index 5d7601998..c30c4684b 100644 --- a/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/group/service/impl/UserGroupServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-group/epdc-group-server/src/main/java/com.elink.esua.epdc/modules/group/service/impl/UserGroupServiceImpl.java @@ -197,10 +197,10 @@ public class UserGroupServiceImpl extends BaseServiceImpl userGroupEntities = new ArrayList<>(formDto.getUserReviewDtoList().size()); + List userGroupEntities = new ArrayList<>(formDto.getMembers().size()); UserGroupEntity entity = null; for (UserReviewDto userReviewDto: - formDto.getUserReviewDtoList()) { + formDto.getMembers()) { entity = new UserGroupEntity(); entity.setId(userReviewDto.getId()); entity.setState(userReviewDto.getState());