diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserAnalysisOpenIdFormDTO.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserAnalysisOpenIdFormDTO.java new file mode 100644 index 000000000..0b835b880 --- /dev/null +++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserAnalysisOpenIdFormDTO.java @@ -0,0 +1,30 @@ +package com.elink.esua.epdc.dto; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @program: esua-epdc + * @description: 更新数据端用户analysis_open_id + * @author: wangtong + * @create: 2020-05-26 16:58 + **/ +@Data +public class SysUserAnalysisOpenIdFormDTO implements Serializable { + + private static final long serialVersionUID = -5423801021547753289L; + + /** + * 用户名 + */ + @NotBlank(message = "用户名不能为空") + private String username; + + /** + * 微信analysis_open_id + */ + @NotBlank(message = "微信analysis_open_id不能为空") + private String analysisOpenId; +} \ No newline at end of file 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 d8a35022f..6288e5907 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 @@ -105,4 +105,14 @@ public class SysUserDTO implements Serializable { */ private String openId; + /** + * 工作端微信work_open_id + */ + private String workOpenId; + + /** + * 数据端微信analysis_open_id + */ + private String analysisOpenId; + } diff --git a/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/epdc/result/UserWorkAndAnalyOpenIdDTO.java b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/epdc/result/UserWorkAndAnalyOpenIdDTO.java new file mode 100644 index 000000000..0d23243f0 --- /dev/null +++ b/esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/epdc/result/UserWorkAndAnalyOpenIdDTO.java @@ -0,0 +1,26 @@ +package com.elink.esua.epdc.dto.epdc.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** +* @Description: 书记在线 - 用户id获取工作和数据端openId返回类 +* @Param: +* @return: +* @Author: wk +* @Date: 2020/5/26 +*/ +@Data +public class UserWorkAndAnalyOpenIdDTO implements Serializable { + private static final long serialVersionUID = -1L; + /** + * 工作端openId集合 + */ + private ListworkOpenIds; + /** + * 数据端openId集合 + */ + private ListanalyOpenIds; +} 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 a0ad7c128..756cb2db6 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 @@ -26,6 +26,7 @@ import com.elink.esua.epdc.commons.tools.validator.group.DefaultGroup; import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup; import com.elink.esua.epdc.dto.*; import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; +import com.elink.esua.epdc.dto.epdc.result.UserWorkAndAnalyOpenIdDTO; import com.elink.esua.epdc.excel.SysUserExcel; import com.elink.esua.epdc.service.*; import io.swagger.annotations.Api; @@ -217,6 +218,20 @@ public class SysUserController { return new Result().ok(data); } + /** + * @describe: 数据端-根据analysisOpenId获取用户信息 + * @author wangtong + * @date 2020/5/26 20:00 + * @param [analysisOpenId] + * @return com.elink.esua.epdc.commons.tools.utils.Result + */ + @GetMapping("getUserInfoBy/{analysisOpenId}") + public Result getSysUserInfoByAnalysisOpenId(@PathVariable("analysisOpenId") String analysisOpenId) { + SysUserDTO data = sysUserService.getSysUserInfoByAnalysisOpenId(analysisOpenId); + + return new Result().ok(data); + } + /** * 根据用户ID 获取用户角色权限信息 * @@ -253,6 +268,20 @@ public class SysUserController { return sysUserService.modifyOpenIdByUsername(sysUserOpenIdFormDto); } + /** + * @describe: 数据端:根据用户名更新用户微信analysis_open_id + * @author wangtong + * @date 2020/5/26 17:27 + * @param [sysUserOpenIdFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + */ + @PostMapping("modifyAnalysisOpenId") + public Result modifyAnalysisOpenIdByUsername(@RequestBody SysUserAnalysisOpenIdFormDTO sysUserOpenIdFormDto) { + //效验数据 + ValidatorUtils.validateEntity(sysUserOpenIdFormDto); + return sysUserService.modifyAnalysisOpenIdByUsername(sysUserOpenIdFormDto); + } + /** * 初始化用户数据 */ @@ -476,5 +505,16 @@ public class SysUserController { ValidatorUtils.validateEntity(dto); return sysUserService.modifyPwd(dto); } + /** + * @Description: 根据userId查询 工作端和数据端userId + * @Param: [] + * @return: com.elink.esua.epdc.commons.tools.utils.Result>> + * @Author: wk + * @Date: 2020/5/26 + */ + @GetMapping("userRelationWorkAndAnalyOpenId") + public Result userRelationWorkAndAnalyOpenId(){ + return sysUserService.selectOpenId(); + } } 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 d7902e7d9..796d7dffa 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,10 +8,11 @@ package com.elink.esua.epdc.dao; +import com.elink.esua.epdc.commons.mybatis.dao.BaseDao; +import com.elink.esua.epdc.dto.SysUserAnalysisOpenIdFormDTO; 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; import org.apache.ibatis.annotations.Param; @@ -72,6 +73,15 @@ public interface SysUserDao extends BaseDao { */ void updateOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto); + /** + * @describe: 数据端-根据用户名更新用户微信analysis_open_id + * @author wangtong + * @date 2020/5/26 16:25 + * @param [sysUserOpenIdFormDto] + * @return void + */ + void updateAnalysisOpenIdByUsername(SysUserAnalysisOpenIdFormDTO sysUserOpenIdFormDto); + /** * * 根据openId获取用户信息 @@ -83,6 +93,15 @@ public interface SysUserDao extends BaseDao { */ SysUserDTO selectOneOfSysUserByOpenId(String openId); + /** + * @describe: 根据analysisOpenId获取用户信息 + * @author wangtong + * @date 2020/5/26 17:04 + * @param [analysisOpenId] + * @return com.elink.esua.epdc.dto.SysUserDTO + */ + SysUserDTO selectOneOfSysUserByAnalysisOpenId(String analysisOpenId); + /** * 退出登录 */ @@ -105,4 +124,13 @@ public interface SysUserDao extends BaseDao { * @Date: 2020-01-09 */ List getSysGridLeaderPhone(Long deptId); + /** + * @Description: 根据userId集合查询openId + * @Param: [userIds, type] userId集合,openId类型 1 工作端 2 数据端 + * @return: java.util.List + * @Author: wk + * @Date: 2020/5/26 + */ + ListselectListOpenIds(@Param("userIds") List userIds, + @Param("type")String type); } 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 b034042df..fd6e6dbb9 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 @@ -105,4 +105,14 @@ public class SysUserEntity extends BaseEntity { */ private String openId; + /** + * 工作端openId + */ + private String workOpenId; + + /** + * 数据端openId + */ + private String analysisOpenId; + } diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/feign/UserRelationFeignClient.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/feign/UserRelationFeignClient.java new file mode 100644 index 000000000..aacebfad5 --- /dev/null +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/feign/UserRelationFeignClient.java @@ -0,0 +1,29 @@ +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.feign.fallback.UserRelationClientFallback; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +import java.util.List; + +/** +* @Description: 调用数据分析模块 - 书记在线的用户id +* @Param: +* @return: +* @Author: wk +* @Date: 2020/5/26 +*/ +@FeignClient(name = ServiceConstant.EPDC_CLOUD_ANALYSIS_SERVER, fallback = UserRelationClientFallback.class,url = "http://127.0.0.1:9060") +public interface UserRelationFeignClient { + /** + * @Description: 调用数据分析 - 书记在线的用户名单 + * @Param: [] + * @return: com.elink.esua.epdc.commons.tools.utils.Result> + * @Author: wk + * @Date: 2020/5/26 + */ + @GetMapping(value = "/cloudAnalysis/masterGroup/getUserRelationList") + Result> selectUserId(); +} diff --git a/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/feign/fallback/UserRelationClientFallback.java b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/feign/fallback/UserRelationClientFallback.java new file mode 100644 index 000000000..efe8b2822 --- /dev/null +++ b/esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/feign/fallback/UserRelationClientFallback.java @@ -0,0 +1,16 @@ +package com.elink.esua.epdc.feign.fallback; + +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.UserRelationFeignClient; +import org.springframework.stereotype.Component; + +import java.util.List; +@Component +public class UserRelationClientFallback implements UserRelationFeignClient { + @Override + public Result> selectUserId() { + return ModuleUtils.feignConError("epdc-cloud-analysis-server", "selectUserId"); + } +} 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 d67eee1b9..b76ab2b60 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 @@ -12,9 +12,11 @@ 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.ModifyPwdDTO; +import com.elink.esua.epdc.dto.SysUserAnalysisOpenIdFormDTO; import com.elink.esua.epdc.dto.SysUserDTO; import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; +import com.elink.esua.epdc.dto.epdc.result.UserWorkAndAnalyOpenIdDTO; import com.elink.esua.epdc.entity.SysUserEntity; import java.util.List; @@ -75,6 +77,15 @@ public interface SysUserService extends BaseService { */ SysUserDTO getSysUserInfoByOpenId(String openId); + /** + * @describe: 数据端-根据analysisOpenId获取用户信息 + * @author wangtong + * @date 2020/5/26 19:59 + * @param [openId] + * @return com.elink.esua.epdc.dto.SysUserDTO + */ + SysUserDTO getSysUserInfoByAnalysisOpenId(String analysisOpenId); + /** * 获取部门下的所有用户ID * @@ -95,6 +106,15 @@ public interface SysUserService extends BaseService { */ Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto); + /** + * @describe: 数据端-根据用户名更新用户微信analysis_open_id + * @author wangtong + * @date 2020/5/26 16:12 + * @param [sysUserOpenIdFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + */ + Result modifyAnalysisOpenIdByUsername(SysUserAnalysisOpenIdFormDTO sysUserOpenIdFormDto); + /** * 退出登录 * @param userId @@ -146,4 +166,13 @@ public interface SysUserService extends BaseService { * @return com.elink.esua.epdc.commons.tools.utils.Result */ Result modifyPwd(ModifyPwdDTO dto); + /** + * @Description: 根据userId查询 工作端和数据端userId + * @Param: [] + * @return: com.elink.esua.epdc.commons.tools.utils.Result>> + * @Author: wk + * @Date: 2020/5/26 + */ + Result selectOpenId(); + } 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 a6a5623c0..23c32c192 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 @@ -27,11 +27,14 @@ 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.ModifyPwdDTO; +import com.elink.esua.epdc.dto.SysUserAnalysisOpenIdFormDTO; import com.elink.esua.epdc.dto.SysUserDTO; 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.epdc.result.UserWorkAndAnalyOpenIdDTO; import com.elink.esua.epdc.entity.SysUserEntity; +import com.elink.esua.epdc.feign.UserRelationFeignClient; import com.elink.esua.epdc.service.SysDeptService; import com.elink.esua.epdc.service.SysRoleUserService; import com.elink.esua.epdc.service.SysUserService; @@ -56,6 +59,8 @@ public class SysUserServiceImpl extends BaseServiceImpl page(Map params) { @@ -232,7 +237,7 @@ public class SysUserServiceImpl extends BaseServiceImpl>> + * @Author: wk + * @Date: 2020/5/26 + */ + @Override + public Result selectOpenId() { + UserWorkAndAnalyOpenIdDTO openIdDto = new UserWorkAndAnalyOpenIdDTO(); + //1.调用数据分析端-书记在线接口获取userId集合 + Result> ResultuserIdList = userRelationFeignClient.selectUserId(); + List userIds = ResultuserIdList.getData(); + if (null == userIds|| userIds.size()==0) { + return new Result().error("获取数据失败,请稍后再试"); + } + //2.获得两项openId + List workOpenIds = baseDao.selectListOpenIds(userIds,"1"); +// workOpenIds.add("oZCeb5TZc2oBwT4jHb0kDmQsN0Xw"); + openIdDto.setWorkOpenIds(workOpenIds); + List AnalysisOpenIds = baseDao.selectListOpenIds(userIds,"2"); + openIdDto.setAnalyOpenIds(AnalysisOpenIds); + return new Result().ok(openIdDto); + } + } 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 873cb620e..241f9bf27 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 @@ -3,6 +3,13 @@ + + + + #{userId} + + + + + - UPDATE sys_user SET open_id = #{openId} WHERE username = #{username} AND del_flag = 0 + UPDATE sys_user SET work_open_id = #{openId} WHERE username = #{username} AND del_flag = 0 + + + + UPDATE sys_user SET analysis_open_id = #{analysisOpenId} WHERE username = #{username} AND del_flag = 0 @@ -152,4 +174,30 @@ AND d.dept_id = #{deptId} ) c + + 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 ef2fd2e0d..8dc1ffbfa 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 @@ -18,6 +18,7 @@ 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.SysUserAnalysisOpenIdFormDTO; import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; import com.elink.esua.epdc.service.AuthService; import com.elink.esua.epdc.service.CaptchaService; @@ -103,6 +104,21 @@ public class AuthController { return authService.workLogin(tokenFormDto.getUsername(), null); } + /** + * @describe: 数据端-获取token + * @author wangtong + * @date 2020/5/26 20:21 + * @param [tokenFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + */ + @GetMapping(value = "getAnalysisToken") + public Result getAnalysisToken(@RequestBody AnalysisUserTokenFormDTO tokenFormDto) { + //效验数据 + ValidatorUtils.validateEntity(tokenFormDto); + + return authService.analysisLogin(tokenFormDto.getUsername(), null); + } + /** * * 工作端-用户登录 @@ -127,6 +143,29 @@ public class AuthController { return result; } + + /** + * @describe: 数据端-用户登录 + * @author wangtong + * @date 2020/5/26 15:36 + * @param [analysisUserLoginDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + */ + @PostMapping(value = "analysisLogin") + @ApiOperation(value = "登录") + public Result analysisLogin(@RequestBody AnalysisUserLoginDTO analysisUserLoginDto) { + //效验数据 + ValidatorUtils.validateEntity(analysisUserLoginDto); + Result result = authService.analysisLogin(analysisUserLoginDto.getUsername(), analysisUserLoginDto.getPassword()); + if (result.success()) { + // 解绑上一次登录账户并绑定当前账户 + SysUserAnalysisOpenIdFormDTO sysUserOpenIdFormDto = ConvertUtils.sourceToTarget(analysisUserLoginDto, SysUserAnalysisOpenIdFormDTO.class); + authService.modifyAnalysisOpenId(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 9b3557e17..5bd72abbe 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,12 +8,13 @@ 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 com.elink.esua.epdc.dto.DataScopeDeptList; +import com.elink.esua.epdc.dto.SysUserAnalysisOpenIdFormDTO; +import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; +import com.elink.esua.epdc.feign.fallback.UserFeignClientFallback; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -67,6 +68,16 @@ public interface UserFeignClient { @PostMapping("sys/user/modifyOpenId") Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto); + /** + * @describe: 数据端-根据用户名更新用户微信analysis_open_id + * @author wangtong + * @date 2020/5/26 16:05 + * @param [sysUserOpenIdFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + */ + @PostMapping("sys/user/modifyAnalysisOpenId") + Result modifyAnalysisOpenIdByUsername(SysUserAnalysisOpenIdFormDTO sysUserOpenIdFormDto); + /** * 组装用户部门层级结构 * @@ -88,4 +99,5 @@ public interface UserFeignClient { @GetMapping("sys/user/updateUserOpenId/{userId}") Result updateUserOpenId(@PathVariable("userId") Long userId); + } 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 893db7ec2..74b327ba1 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 @@ -11,6 +11,7 @@ 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.SysUserAnalysisOpenIdFormDTO; import com.elink.esua.epdc.dto.SysUserOpenIdFormDTO; import com.elink.esua.epdc.feign.UserFeignClient; import org.springframework.stereotype.Component; @@ -46,6 +47,11 @@ public class UserFeignClientFallback implements UserFeignClient { return new Result<>(); } + @Override + public Result modifyAnalysisOpenIdByUsername(SysUserAnalysisOpenIdFormDTO sysUserOpenIdFormDto) { + return new Result<>(); + } + @Override public Result packageUserDeptOption(Long userId) { 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 57ae4a103..6bb9a6771 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 @@ -8,13 +8,11 @@ package com.elink.esua.epdc.service; +import com.elink.esua.epdc.common.token.dto.AnalysisUserAuthorizationDTO; 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 com.elink.esua.epdc.dto.*; import java.util.List; @@ -42,6 +40,15 @@ public interface AuthService { */ Result workLogin(String username, String password); + /** + * @describe: 数据端-用户登录 + * @author wangtong + * @date 2020/5/26 15:42 + * @param [username, password] + * @return com.elink.esua.epdc.commons.tools.utils.Result + */ + Result analysisLogin(String username, String password); + /** * * 根据用户名更新用户微信openId @@ -53,6 +60,15 @@ public interface AuthService { */ Result modifyOpenId(SysUserOpenIdFormDTO sysUserOpenIdFormDto); + /** + * @describe: 数据端-根据用户名更新用户微信analysis_open_id + * @author wangtong + * @date 2020/5/26 16:03 + * @param [sysUserOpenIdFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + */ + Result modifyAnalysisOpenId(SysUserAnalysisOpenIdFormDTO sysUserOpenIdFormDto); + /** * 退出 */ @@ -75,4 +91,6 @@ public interface AuthService { * 退出 */ Result logoutUser(Long userId); + + } 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 20fed9ad7..b7c133697 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 @@ -9,6 +9,7 @@ package com.elink.esua.epdc.service.impl; import com.elink.esua.epdc.async.UserDeptTask; +import com.elink.esua.epdc.common.token.dto.AnalysisUserAuthorizationDTO; 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; @@ -33,10 +34,7 @@ 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.dto.*; import com.elink.esua.epdc.enums.UserStatusEnum; import com.elink.esua.epdc.feign.UserFeignClient; import com.elink.esua.epdc.jwt.JwtProperties; @@ -222,6 +220,82 @@ public class AuthServiceImpl implements AuthService { return new Result().ok(authorization); } + @Override + public Result analysisLogin(String username, String password) { + HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); + + //获取用户信息 + Result result = userFeignClient.getByUsername(username); + UserDetail user = result.getData(); + + //授权信息 + AnalysisUserAuthorizationDTO authorization = new AnalysisUserAuthorizationDTO(); + + //登录日志 + 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); + authorization.setRegisterState(NumConstant.ZERO_STR); + 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()); + + 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()); + authorization.setRegisterState(NumConstant.ONE_STR); + + userDeptTask.packageUserDeptOptions(user.getId()); + + return new Result().ok(authorization); + } + @Override public void logout(Long userId) { HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); @@ -279,6 +353,11 @@ public class AuthServiceImpl implements AuthService { return userFeignClient.modifyOpenIdByUsername(sysUserOpenIdFormDto); } + @Override + public Result modifyAnalysisOpenId(SysUserAnalysisOpenIdFormDTO sysUserOpenIdFormDto) { + return userFeignClient.modifyAnalysisOpenIdByUsername(sysUserOpenIdFormDto); + } + /** * 退出登录 * @param userId diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserAuthorizationDTO.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserAuthorizationDTO.java new file mode 100644 index 000000000..385e3035f --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserAuthorizationDTO.java @@ -0,0 +1,48 @@ +package com.elink.esua.epdc.common.token.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @program: esua-epdc + * @description: 数据端用户授权信息 + * @author: wangtong + * @create: 2020-05-26 15:39 + **/ +@Data +public class AnalysisUserAuthorizationDTO implements Serializable { + + private static final long serialVersionUID = 519392456658807347L; + + /** + * 令牌 + */ + private String token; + + /** + * 过期时长,单位秒 + */ + private Integer expire; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 用户标签key + */ + private String userTagKey; + + /** + * 注册状态 0-未注册,1-已注册 + */ + private String registerState; + + /** + * 用户所有角色权限信息 + */ + private List deptDataScopeList; +} \ No newline at end of file diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserLoginDTO.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserLoginDTO.java new file mode 100644 index 000000000..6c4f3bdd1 --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserLoginDTO.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; + +/** + * @program: esua-epdc + * @description: 数据端登录用户信息 + * @author: wangtong + * @create: 2020-05-26 15:32 + **/ +@Data +public class AnalysisUserLoginDTO implements Serializable { + + private static final long serialVersionUID = 3829451481560643039L; + + @NotBlank(message="用户名不能为空") + private String username; + + @NotBlank(message="密码不能为空") + private String password; + + @NotBlank(message="微信code不能为空") + private String wxCode; + + private String analysisOpenId; +} \ No newline at end of file diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserTokenFormDTO.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserTokenFormDTO.java new file mode 100644 index 000000000..4caf6430f --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserTokenFormDTO.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; + +/** + * @program: esua-epdc + * @description: 数据端获取token + * @author: wangtong + * @create: 2020-05-26 20:25 + **/ +@Data +public class AnalysisUserTokenFormDTO implements Serializable { + + private static final long serialVersionUID = 5119156831661625353L; + + @NotNull(message = "用户ID不能为空") + private Long id; + + @NotBlank(message = "用户名不能为空") + private String username; +} \ No newline at end of file diff --git a/esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/TemplateData.java b/esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/TemplateData.java new file mode 100644 index 000000000..2eff3a925 --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/TemplateData.java @@ -0,0 +1,13 @@ +package com.elink.esua.epdc.dto; + +import lombok.Data; + +/** + * @author wanggongfeng + * @date 2020/5/26 15:40 + */ +@Data +public class TemplateData { + //keyword1:信息1,keyword2:信息2,keyword3:信息3,keyword4:信息4,keyword5:参数5 + private String value;//,,依次排下去 +} diff --git a/esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/WxAccessTokenBean.java b/esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/WxAccessTokenBean.java new file mode 100644 index 000000000..5534524ef --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/WxAccessTokenBean.java @@ -0,0 +1,35 @@ +package com.elink.esua.epdc.dto; + +/** + * 获取AccessToken + * @author wanggongfeng + * @date 2020/5/27 14:31 + */ +public class WxAccessTokenBean { + private String access_token; + private int expires_in = -1; + + public String getAccess_token() { + return access_token; + } + + public void setAccess_token(String access_token) { + this.access_token = access_token; + } + + public int getExpires_in() { + return expires_in; + } + + public void setExpires_in(int expires_in) { + this.expires_in = expires_in; + } + + @Override + public String toString() { + return "WxAccessTokenBean{" + + "access_token='" + access_token + '\'' + + ", expires_in=" + expires_in + + '}'; + } +} diff --git a/esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/WxMssVo.java b/esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/WxMssVo.java new file mode 100644 index 000000000..f30afad86 --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/WxMssVo.java @@ -0,0 +1,19 @@ +package com.elink.esua.epdc.dto; + +import lombok.Data; + +import java.util.Map; + +/** + * @author wanggongfeng + * @date 2020/5/26 15:39 + */ +@Data +public class WxMssVo { + private String touser;//用户openid + private String template_id;//模版id + private String page = "pages/index/index";//默认跳到小程序首页 + private String miniprogram_state;// 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 + private String lang = "zh_CN";// 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN + private Map data;//推送文字 +} diff --git a/esua-epdc/epdc-module/epdc-analysis/epdc-analysis-server/src/main/resources/mapper/user/UserAnalysisDao.xml b/esua-epdc/epdc-module/epdc-analysis/epdc-analysis-server/src/main/resources/mapper/user/UserAnalysisDao.xml index 416a0994c..4ad43cf56 100644 --- a/esua-epdc/epdc-module/epdc-analysis/epdc-analysis-server/src/main/resources/mapper/user/UserAnalysisDao.xml +++ b/esua-epdc/epdc-module/epdc-analysis/epdc-analysis-server/src/main/resources/mapper/user/UserAnalysisDao.xml @@ -116,7 +116,7 @@ diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/SendMessageFormDTO.java b/esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/SendMessageFormDTO.java new file mode 100644 index 000000000..f9748a24b --- /dev/null +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/SendMessageFormDTO.java @@ -0,0 +1,25 @@ +package com.elink.esua.epdc.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @program: esua-epdc + * @description: 小程序消息推送DTO + * @author: wangtong + * @create: 2020-05-28 19:14 + **/ +@Data +public class SendMessageFormDTO implements Serializable { + + private static final long serialVersionUID = 1509125233610363568L; + + /** + * type:1 通知 + * 2 话题 + */ + @NotNull(message = "消息推送类型不可为空") + private Integer type; +} \ No newline at end of file diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml b/esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml index a957558a8..9cf284fad 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml @@ -192,11 +192,18 @@ wxdd8530c5f4926766 5bf4fb813145431b3493a10aa7e041e9 - wx29b074840ef4bfd9 - 4adb1afccc69f205cdf5b521d74e2aca + wx9f20a46906ab2c3e + dc13065f79429979d9f687d249eb5c4e + cwjaIk2GMxKQcSqISFaxsGQYfQwf2V7ercQLEEzFdDQ wxfa4afaa2b5f9c876 7db9f049c78c9a6cafa673deebe8330d + wagGg4eAeHu1N2N0o8Vhyan41Gr3DqFBD81o5Lv7XnQ + + trial + pages/index/index + https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token= + zh_CN @@ -238,9 +245,16 @@ wx9f20a46906ab2c3e dc13065f79429979d9f687d249eb5c4e + cwjaIk2GMxKQcSqISFaxsGQYfQwf2V7ercQLEEzFdDQ wxfa4afaa2b5f9c876 7db9f049c78c9a6cafa673deebe8330d + wagGg4eAeHu1N2N0o8Vhyan41Gr3DqFBD81o5Lv7XnQ + + trial + pages/index/index + https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token= + zh_CN @@ -283,9 +297,16 @@ wx9f20a46906ab2c3e dc13065f79429979d9f687d249eb5c4e + cwjaIk2GMxKQcSqISFaxsGQYfQwf2V7ercQLEEzFdDQ wxfa4afaa2b5f9c876 7db9f049c78c9a6cafa673deebe8330d + wagGg4eAeHu1N2N0o8Vhyan41Gr3DqFBD81o5Lv7XnQ + + formal + pages/index/index + https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token= + zh_CN diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAnalysisUserController.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAnalysisUserController.java index a4958a417..f68fc5dd8 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAnalysisUserController.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAnalysisUserController.java @@ -1,15 +1,15 @@ package com.elink.esua.epdc.controller; +import com.elink.esua.epdc.common.token.dto.AnalysisUserAuthorizationDTO; +import com.elink.esua.epdc.common.token.dto.AnalysisUserLoginDTO; 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.annotation.LoginUser; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils; import com.elink.esua.epdc.dto.form.EpdcWorkAppUserMaTokenFormDTO; import com.elink.esua.epdc.dto.user.form.MemberRankFormDTO; -import com.elink.esua.epdc.dto.user.form.UserSortRankFormDTO; import com.elink.esua.epdc.dto.user.form.UserCountDTO; +import com.elink.esua.epdc.dto.user.form.UserSortRankFormDTO; import com.elink.esua.epdc.dto.user.result.OldMemberRankResultDTO; import com.elink.esua.epdc.dto.user.result.UserSortRankResultDTO; import com.elink.esua.epdc.dto.user.result.YoungMemberRankResultDTO; @@ -54,7 +54,7 @@ public class ApiAnalysisUserController { * @since 2020/2/12 10:57 */ @PostMapping("login") - public Result login(@RequestBody WorkUserLoginDTO formDto) { + public Result login(@RequestBody AnalysisUserLoginDTO formDto) { ValidatorUtils.validateEntity(formDto); return analysisUserService.login(formDto); } @@ -69,7 +69,7 @@ public class ApiAnalysisUserController { * @since 2020/2/12 10:58 */ @GetMapping("getToken") - public Result getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto) { + public Result getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto) { ValidatorUtils.validateEntity(formDto); return analysisUserService.getMaToken(formDto); } diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiMessageController.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiMessageController.java index c38b3b255..bd77b595e 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiMessageController.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiMessageController.java @@ -1,11 +1,10 @@ package com.elink.esua.epdc.controller; import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.dto.form.SendMessageFormDTO; import com.elink.esua.epdc.service.MessageService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * @author yujintao @@ -44,4 +43,29 @@ public class ApiMessageController { public Result sendRegisterResult(String userId) { return messageService.sendRegisterResult(userId); } + + /** + * 小程序消息推送 + * + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author wanggonfeng + * @date 2020/05/26 14:18 + */ + @GetMapping("sendMessage") + public Result sendMessage() { + return messageService.sendMessage(); + } + + /** + * @describe: 小程序消息推送 + * @author wangtong + * @date 2020/5/28 19:12 + * @param [] + * @return com.elink.esua.epdc.commons.tools.utils.Result + */ + @PostMapping("sendMessage") + public Result sendMessage(@RequestBody SendMessageFormDTO formDto) { + return messageService.sendMessage(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 2052f30b0..e76b06904 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 @@ -5,6 +5,7 @@ import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dto.*; import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO; import com.elink.esua.epdc.dto.epdc.result.EpdcAppIndexPanelResultDTO; +import com.elink.esua.epdc.dto.epdc.result.UserWorkAndAnalyOpenIdDTO; import com.elink.esua.epdc.feign.fallback.AdminFeignClientFallback; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; @@ -70,6 +71,16 @@ public interface AdminFeignClient { @GetMapping("sys/user/getUserInfo/{openId}") Result getSysUserInfoByOpenId(@PathVariable("openId") String openId); + /** + * @describe: 数据端-根据analysisOpenId获取用户信息 + * @author wangtong + * @date 2020/5/26 20:00 + * @param [openId] + * @return com.elink.esua.epdc.commons.tools.utils.Result + */ + @GetMapping("sys/user/getUserInfoBy/{analysisOpenId}") + Result getSysUserInfoByAnalysisOpenId(@PathVariable("analysisOpenId") String analysisOpenId); + /** * @param mobile * @return com.elink.esua.epdc.commons.tools.utils.Result> @@ -129,4 +140,14 @@ public interface AdminFeignClient { */ @GetMapping(value="sys/dept/getDeptTypeKey", consumes = MediaType.APPLICATION_JSON_VALUE) Result getDeptTypeKey(@RequestParam("deptId") Long deptId); + + /** + * 根据userid获取openId + * + * @return com.elink.esua.epdc.commons.tools.utils.Result<> + * @author wanggonfeng + * @date 2020/05/26 14:18 + */ + @GetMapping("sys/user/userRelationWorkAndAnalyOpenId") + Result userRelationWorkAndAnalyOpenId(); } 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 index 379644e0e..bcb224bc8 100644 --- 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 @@ -1,8 +1,6 @@ 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.common.token.dto.*; 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; @@ -33,6 +31,16 @@ public interface ResourceFeignClient { @GetMapping("auth/getToken") Result getToken(WorkUserTokenFormDTO workUserTokenFormDto); + /** + * @describe: 数据端用户获取token + * @author wangtong + * @date 2020/5/26 20:26 + * @param [workUserTokenFormDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + */ + @GetMapping("auth/getAnalysisToken") + Result getAnalysisToken(AnalysisUserTokenFormDTO analysisUserTokenFormDto); + /** * * 工作端用户登录并获取授权信息 @@ -45,6 +53,18 @@ public interface ResourceFeignClient { @PostMapping("auth/workLogin") Result workLogin(WorkUserLoginDTO workUserLoginDto); + /** + * + * 工作端用户登录并获取授权信息 + * + * @params [workUserLoginDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2019/11/19 20:27 + */ + @PostMapping("auth/analysisLogin") + Result analysisLogin(AnalysisUserLoginDTO analysisUserLoginDto); + /** * 退出登录 * @param userId 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 c6e5d3da8..69aadeefc 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 @@ -39,6 +39,11 @@ public class AdminFeignClientFallback implements AdminFeignClient { return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "getSysUserInfoByOpenId", openId); } + @Override + public Result getSysUserInfoByAnalysisOpenId(String analysisOpenId) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "getSysUserInfoByAnalysisOpenId", analysisOpenId); + } + @Override public Result> indexPanel(String mobile) { return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "indexPanel", mobile); @@ -68,4 +73,9 @@ public class AdminFeignClientFallback implements AdminFeignClient { public Result getDeptTypeKey(Long deptId) { return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "getDeptTypeKey",deptId); } + + @Override + public Result userRelationWorkAndAnalyOpenId() { + return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "userRelationWorkAndAnalyOpenId"); + } } 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 index 74849e24a..856f788d6 100644 --- 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 @@ -1,8 +1,6 @@ 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.common.token.dto.*; 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; @@ -24,11 +22,21 @@ public class ResourceFeignClientFallback implements ResourceFeignClient { return ModuleUtils.feignConError(ServiceConstant.EPDC_AUTH_SERVER, "getToken", workUserTokenFormDto); } + @Override + public Result getAnalysisToken(AnalysisUserTokenFormDTO analysisUserTokenFormDto) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_AUTH_SERVER, "getAnalysisToken", analysisUserTokenFormDto); + } + @Override public Result workLogin(WorkUserLoginDTO workUserLoginDto) { return ModuleUtils.feignConError(ServiceConstant.EPDC_AUTH_SERVER, "workLogin", workUserLoginDto); } + @Override + public Result analysisLogin(AnalysisUserLoginDTO analysisUserLoginDto) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_AUTH_SERVER, "analysisLogin", analysisUserLoginDto); + } + @Override public Result logoutUser(String userId) { return ModuleUtils.feignConError(ServiceConstant.EPDC_AUTH_SERVER, "logoutUser", userId); diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AnalysisUserService.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AnalysisUserService.java index 2b4500a1c..f5ac299b7 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AnalysisUserService.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AnalysisUserService.java @@ -1,12 +1,12 @@ 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.common.token.dto.AnalysisUserAuthorizationDTO; +import com.elink.esua.epdc.common.token.dto.AnalysisUserLoginDTO; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dto.form.EpdcWorkAppUserMaTokenFormDTO; import com.elink.esua.epdc.dto.user.form.MemberRankFormDTO; -import com.elink.esua.epdc.dto.user.form.UserSortRankFormDTO; import com.elink.esua.epdc.dto.user.form.UserCountDTO; +import com.elink.esua.epdc.dto.user.form.UserSortRankFormDTO; import com.elink.esua.epdc.dto.user.result.OldMemberRankResultDTO; import com.elink.esua.epdc.dto.user.result.UserSortRankResultDTO; import com.elink.esua.epdc.dto.user.result.YoungMemberRankResultDTO; @@ -38,7 +38,7 @@ public interface AnalysisUserService { * @author liuchuang * @since 2020/2/12 10:59 */ - Result login(WorkUserLoginDTO formDto); + Result login(AnalysisUserLoginDTO formDto); /** * @@ -49,7 +49,7 @@ public interface AnalysisUserService { * @author liuchuang * @since 2020/2/12 11:00 */ - Result getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto); + Result getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto); /** * @Description 获取党员老龄化排名列表 diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/MessageService.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/MessageService.java index 3f361af47..9836cf733 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/MessageService.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/MessageService.java @@ -1,6 +1,7 @@ package com.elink.esua.epdc.service; import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.dto.form.SendMessageFormDTO; /** * @author yujintao @@ -27,4 +28,23 @@ public interface MessageService { * @date 2019/9/25 15:18 */ Result sendRegisterResult(String userId); + + /** + * 小程序消息推送 + * + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author wanggonfeng + * @date 2020/05/26 14:18 + */ + Result sendMessage(); + + /** + * 小程序消息推送 + * + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author wanggonfeng + * @date 2020/05/26 14:18 + */ + Result sendMessage(SendMessageFormDTO formDto); + } diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AnalysisUserServiceImpl.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AnalysisUserServiceImpl.java index b49883c06..0e2a0f29a 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AnalysisUserServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AnalysisUserServiceImpl.java @@ -2,9 +2,9 @@ package com.elink.esua.epdc.service.impl; 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.common.token.dto.AnalysisUserAuthorizationDTO; +import com.elink.esua.epdc.common.token.dto.AnalysisUserLoginDTO; +import com.elink.esua.epdc.common.token.dto.AnalysisUserTokenFormDTO; import com.elink.esua.epdc.commons.tools.constant.NumConstant; import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; @@ -55,31 +55,31 @@ public class AnalysisUserServiceImpl implements AnalysisUserService { } @Override - public Result login(WorkUserLoginDTO formDto) { + public Result login(AnalysisUserLoginDTO formDto) { // 获取openId String openId = this.getWxMaUser(formDto.getWxCode()).getOpenid(); - formDto.setOpenId(openId); - return resourceFeignClient.workLogin(formDto); + formDto.setAnalysisOpenId(openId); + return resourceFeignClient.analysisLogin(formDto); } @Override - public Result getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto) { + public Result getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto) { // 获取openId - String openId = this.getWxMaUser(formDto.getWxCode()).getOpenid(); + String analysisOpenId = this.getWxMaUser(formDto.getWxCode()).getOpenid(); // 检查当前微信是否已绑定账户 - Result sysUserDtoResult = adminFeignClient.getSysUserInfoByOpenId(openId); + Result sysUserDtoResult = adminFeignClient.getSysUserInfoByAnalysisOpenId(analysisOpenId); if (!sysUserDtoResult.success()) { - return new Result().error(sysUserDtoResult.getMsg()); + return new Result().error(sysUserDtoResult.getMsg()); } SysUserDTO userDto = sysUserDtoResult.getData(); if (null == userDto) { - WorkUserAuthorizationDTO resultDto = new WorkUserAuthorizationDTO(); + AnalysisUserAuthorizationDTO resultDto = new AnalysisUserAuthorizationDTO(); resultDto.setRegisterState(NumConstant.ZERO_STR); - return new Result().ok(resultDto); + return new Result().ok(resultDto); } - return resourceFeignClient.getToken(ConvertUtils.sourceToTarget(userDto, WorkUserTokenFormDTO.class)); + return resourceFeignClient.getAnalysisToken(ConvertUtils.sourceToTarget(userDto, AnalysisUserTokenFormDTO.class)); } @Override diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/MessageServiceImpl.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/MessageServiceImpl.java index ee2f611b9..6a2f0861f 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/MessageServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/MessageServiceImpl.java @@ -2,24 +2,38 @@ package com.elink.esua.epdc.service.impl; import cn.binarywang.wx.miniapp.bean.WxMaTemplateData; import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage; +import com.alibaba.fastjson.JSONObject; +import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.commons.tools.redis.RedisKeys; import com.elink.esua.epdc.commons.tools.redis.RedisUtils; import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.dto.TemplateData; import com.elink.esua.epdc.dto.epdc.form.EpdcDeleteWxFormIdFormDTO; import com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO; +import com.elink.esua.epdc.dto.epdc.result.UserWorkAndAnalyOpenIdDTO; +import com.elink.esua.epdc.dto.form.SendMessageFormDTO; import com.elink.esua.epdc.enums.AppUserAuditStateEnum; +import com.elink.esua.epdc.feign.AdminFeignClient; import com.elink.esua.epdc.feign.MessageFeignClient; import com.elink.esua.epdc.feign.UserFeignClient; import com.elink.esua.epdc.service.MessageService; import com.elink.esua.epdc.utils.WxMaServiceUtils; +import com.elink.esua.epdc.utils.WxSendMessageUtils; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import java.util.List; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicInteger; /** * @author yujintao @@ -36,12 +50,47 @@ public class MessageServiceImpl implements MessageService { @Autowired private UserFeignClient userFeignClient; + @Autowired + private AdminFeignClient adminFeignClient; + @Autowired private WxMaServiceUtils wxMaServiceUtils; @Autowired private RedisUtils redisUtils; + @Value("${wx.message.analysisAppId}") + private String analysisAppId; + + @Value("${wx.message.analysisSecret}") + private String analysisSecret; + + @Value("${wx.message.analysisTemplate}") + private String analysisTemplate; + + @Value("${wx.message.workAppId}") + private String workAppId; + + @Value("${wx.message.workSecret}") + private String workSecret; + + @Value("${wx.message.workTemplate}") + private String workTemplate; + + @Value("${wx.message.jumpType}") + private String jumpType; + + @Value("${wx.message.page}") + private String page; + + @Value("${wx.message.url}") + private String url; + + @Value("${wx.message.lang}") + private String lang; + + + /** * 注册审核失败服务消息模版 */ @@ -57,6 +106,9 @@ public class MessageServiceImpl implements MessageService { */ private static String MA_PAGE = "pages/index/index"; + //创建固定大小为100 的线程池 + private static ExecutorService threadPool = Executors.newFixedThreadPool(100); + /** * 发送六位短信验证码 * @@ -141,4 +193,141 @@ public class MessageServiceImpl implements MessageService { return new Result(); } + /** + * 小程序消息推送demo + * + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author wanggonfeng + * @date 2020/05/26 14:18 + */ + public Result sendMessage() { + // 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 + String miniprogram_state = "trial"; + // 模板ID + String template_id = "wagGg4eAeHu1N2N0o8Vhyan41Gr3DqFBD81o5Lv7XnQ"; + // 用户openID oZCeb5TZc2oBwT4jHb0kDmQsN0Xw + String openId = "oZCeb5TZc2oBwT4jHb0kDmQsN0Xw";//os3585flOvphXsb7XNmYOZtooEro oZCeb5W6GEUCVHG3InnPv1Q6r0f0 + // 小程序跳转页 + String page = "pages/index/index"; + // 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN + String lang = "zh_CN"; + + // 获取access_token + String access_token = WxSendMessageUtils.getAccess_token(analysisAppId, analysisSecret); + // 拼接URL + String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + access_token; + + // 配置模板内容 + Map m = new HashMap<>(5); + TemplateData keyword1 = new TemplateData(); + keyword1.setValue("您有新的话题,请登录小程序查看!"); + m.put("thing1", keyword1); + TemplateData keyword2 = new TemplateData(); + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String dateStr = sdf.format(new Date()); + keyword2.setValue(dateStr); + m.put("time2", keyword2); + + String resultMsg = WxSendMessageUtils.sendMessageByOpenId(openId,url,miniprogram_state,template_id,m,lang,page); + + return new Result().ok(resultMsg); + } + + @Override + public Result sendMessage(SendMessageFormDTO formDto) { + + // 模板ID + String value = ""; + if(1 == formDto.getType()){ + //通知 + value = "您有新的通知,请登录小程序查看!"; + }else if(2 == formDto.getType()){ + //话题 + value = "您有新的话题,请登录小程序查看!"; + }else{ + throw new RenException("消息推送类型错误!"); + } + + // 获取openID + Result userIdsResult = adminFeignClient.userRelationWorkAndAnalyOpenId(); + if(userIdsResult == null || userIdsResult.getData() == null){ + return new Result().error("获取openid失败!"); + } + + // 调用获取openid接口 + UserWorkAndAnalyOpenIdDTO userWorkAndAnalyOpenIdDTO = userIdsResult.getData(); + List analyOpenIdList = userWorkAndAnalyOpenIdDTO.getAnalyOpenIds(); + List workOpenIdList = userWorkAndAnalyOpenIdDTO.getWorkOpenIds(); + + if (null != analyOpenIdList && analyOpenIdList.size() > 0) { + // 获取access_token + String analysis_access_token = WxSendMessageUtils.getAccess_token(analysisAppId, analysisSecret); + // 拼接URL + String analysis_url = url + analysis_access_token; + Integer analysisResult = sendOpenIdListMessage(analyOpenIdList, analysisTemplate,analysis_url,value); + log.info("本次小程序消息推送数据端共【" + analyOpenIdList.size() + "】接收者,发送成功【" + analysisResult + "】条。"); + } + if(null != workOpenIdList && workOpenIdList.size() > 0){ + // 获取access_token + String work_access_token = WxSendMessageUtils.getAccess_token(workAppId, workSecret); + // 拼接URL + String work_url = url + work_access_token; + Integer workResult = sendOpenIdListMessage(workOpenIdList,workTemplate,work_url,value); + log.info("本次小程序消息推送工作端共【" + workOpenIdList.size() + "】接收者,发送成功【" + workResult + "】条。"); + } + + return new Result().ok("消息推送成功!"); + } + + private Integer sendOpenIdListMessage(List openIdList,String templateId,String url,String value){ + AtomicInteger ai = new AtomicInteger(0); + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + List> list = new ArrayList<>(); + for(String openId : openIdList){ + Future future = threadPool.submit(new Callable() { + @Override + public Integer call() throws Exception { + // 配置模板内容 + Map m = new HashMap<>(5); + TemplateData keyword1 = new TemplateData(); + keyword1.setValue(value); + m.put("thing1", keyword1); + TemplateData keyword2 = new TemplateData(); + String dateStr = sdf.format(new Date()); + keyword2.setValue(dateStr); + m.put("time2", keyword2); + //发送消息 + String resultMsg = WxSendMessageUtils.sendMessageByOpenId( + openId, + url, + jumpType, + templateId, + m, + lang, + page); + System.out.println("接收者【" + openId + "】,发送结果【" + resultMsg + "】"); + //解析返回信息 + Map map = JSONObject.parseObject(resultMsg, Map.class); + if (Integer.parseInt(map.get("errcode").toString()) == 0) { + return 0; + } + return 1; + } + }); + list.add(future); + } + //循环接收发送结果,相当于一个使线程同步的过程,这个过程是比较耗时的 + for (int i = 0; i < openIdList.size(); i++) { + try { + int resultStatus = list.get(i).get(); + if (resultStatus == 0) {//发送成功 + ai.incrementAndGet(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return ai.get(); + } + } diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/utils/WxSendMessageUtils.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/utils/WxSendMessageUtils.java new file mode 100644 index 000000000..54fd46070 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/utils/WxSendMessageUtils.java @@ -0,0 +1,91 @@ +package com.elink.esua.epdc.utils; + +import com.elink.esua.epdc.dto.TemplateData; +import com.elink.esua.epdc.dto.WxAccessTokenBean; +import com.elink.esua.epdc.dto.WxMssVo; +import com.google.gson.Gson; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.util.Map; + + +/** + * @Description 微信消息推送工具类 + * @Author wanggongfeng + * @Date 2020/05/28 16:15 + */ +@Slf4j +@Service +public class WxSendMessageUtils { + private static Logger logger = LoggerFactory.getLogger(WxSendMessageUtils.class); + + + private static RestTemplate restTemplate; + private ClientHttpRequestFactory factory; + @Autowired + public void setFactory() { + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setReadTimeout(5000);//ms + factory.setConnectTimeout(15000);//ms + this.factory = factory; + } + @Autowired + public void setRestTemplate() { + this.restTemplate = new RestTemplate(this.factory); + } + + + /** + * + * @param openId 用户openid + * @param url 接口路径 + * @param miniprogram_state 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 + * @param template_id 模板ID + * @param m 模板内容: thing 20字以内(汉字数字字母符号) + * number 32位以内,可带小数 + * letter 32位以内,只能是字母 + * time 24制时间格式(支持+年月日)eg:15:03 或 2020年5月28日 + * 其他可查:https://blog.csdn.net/css_666/article/details/103513916 + * @param lang 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN + * @author wanggonfeng + * @date 2020/05/26 14:18 + */ + public static String sendMessageByOpenId(String openId, String url, String miniprogram_state, String template_id, + Map m,String lang,String page){ + //拼接推送的模版 + WxMssVo wxMssVo = new WxMssVo(); + wxMssVo.setTouser(openId);//用户openid + wxMssVo.setTemplate_id(template_id);//模版id + wxMssVo.setMiniprogram_state(miniprogram_state); + wxMssVo.setData(m); + wxMssVo.setLang(lang); + wxMssVo.setPage(page); + ResponseEntity responseEntity = restTemplate.postForEntity(url, wxMssVo, String.class); + log.error("小程序推送结果={}", responseEntity.getBody()); + return responseEntity.getBody(); + } + + /** + * 获取access_token + * @param appid + * @param appsecret + * @return + * @author wanggonfeng + * @date 2020/05/26 14:18 + */ + public static String getAccess_token(String appid, String appsecret) { + // 获取access_token + String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" + "&appid=" + appid + "&secret=" + appsecret; + String json = restTemplate.getForObject(url, String.class); + WxAccessTokenBean accessToken = new Gson().fromJson(json, WxAccessTokenBean.class); + return accessToken.getAccess_token(); + } +} diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/resources/application.yml b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/resources/application.yml index f8ff3c108..807785c9f 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/resources/application.yml +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/resources/application.yml @@ -155,6 +155,34 @@ wx: # 数据分析端的appId analysis: @analysis.wx.ma.appId@ + message: + message: + # 数据分析端小程序 + # 消息推送的appId + analysisAppId: @analysis.wx.ma.appId@ + # 秘钥 + analysisSecret: @analysis.wx.ma.secret@ + # 模板 + analysisTemplate: @analysis.wx.ma.template@ + + # 工作端小程序 + # 消息推送的appId + workAppId: @work.wx.ma.appId@ + # 秘钥 + workSecret: @work.wx.ma.secret@ + # 模板 + workTemplate: @work.wx.ma.template@ + + # 通用参数 + # 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 + jumpType: @wx.ma.jumpType@ + # 小程序跳转页 + page: @wx.ma.page@ + # 接口路径 + url: @wx.ma.url@ + # 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN + lang: @wx.ma.lang@ + token: