Browse Source

Merge remote-tracking branch 'origin/feature/MasterGroup_mess'

feature/dangjian
李鹏飞 5 years ago
parent
commit
38e2912169
  1. 30
      esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserAnalysisOpenIdFormDTO.java
  2. 10
      esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/SysUserDTO.java
  3. 26
      esua-epdc/epdc-admin/epdc-admin-client/src/main/java/com/elink/esua/epdc/dto/epdc/result/UserWorkAndAnalyOpenIdDTO.java
  4. 40
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/controller/SysUserController.java
  5. 30
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/dao/SysUserDao.java
  6. 10
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/entity/SysUserEntity.java
  7. 29
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/feign/UserRelationFeignClient.java
  8. 16
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/feign/fallback/UserRelationClientFallback.java
  9. 29
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/SysUserService.java
  10. 57
      esua-epdc/epdc-admin/epdc-admin-server/src/main/java/com/elink/esua/epdc/service/impl/SysUserServiceImpl.java
  11. 52
      esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysUserDao.xml
  12. 39
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java
  13. 18
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java
  14. 6
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java
  15. 26
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java
  16. 87
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java
  17. 48
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserAuthorizationDTO.java
  18. 29
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserLoginDTO.java
  19. 25
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/AnalysisUserTokenFormDTO.java
  20. 13
      esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/TemplateData.java
  21. 35
      esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/WxAccessTokenBean.java
  22. 19
      esua-epdc/epdc-commons/epdc-commons-tools-wx-ma/src/main/java/com/elink/esua/epdc/dto/WxMssVo.java
  23. 4
      esua-epdc/epdc-module/epdc-analysis/epdc-analysis-server/src/main/resources/mapper/user/UserAnalysisDao.xml
  24. 25
      esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/SendMessageFormDTO.java
  25. 25
      esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml
  26. 10
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAnalysisUserController.java
  27. 30
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiMessageController.java
  28. 21
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/AdminFeignClient.java
  29. 26
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/ResourceFeignClient.java
  30. 10
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/AdminFeignClientFallback.java
  31. 14
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java
  32. 10
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AnalysisUserService.java
  33. 20
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/MessageService.java
  34. 26
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AnalysisUserServiceImpl.java
  35. 191
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/MessageServiceImpl.java
  36. 91
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/utils/WxSendMessageUtils.java
  37. 28
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/resources/application.yml

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

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

26
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 List<String>workOpenIds;
/**
* 数据端openId集合
*/
private List<String>analyOpenIds;
}

40
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<SysUserDTO>().ok(data);
}
/**
* @describe: 数据端-根据analysisOpenId获取用户信息
* @author wangtong
* @date 2020/5/26 20:00
* @param [analysisOpenId]
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.SysUserDTO>
*/
@GetMapping("getUserInfoBy/{analysisOpenId}")
public Result<SysUserDTO> getSysUserInfoByAnalysisOpenId(@PathVariable("analysisOpenId") String analysisOpenId) {
SysUserDTO data = sysUserService.getSysUserInfoByAnalysisOpenId(analysisOpenId);
return new Result<SysUserDTO>().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<java.util.Map<java.lang.String,java.util.List<java.lang.String>>>
* @Author: wk
* @Date: 2020/5/26
*/
@GetMapping("userRelationWorkAndAnalyOpenId")
public Result<UserWorkAndAnalyOpenIdDTO> userRelationWorkAndAnalyOpenId(){
return sysUserService.selectOpenId();
}
}

30
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<SysUserEntity> {
*/
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<SysUserEntity> {
*/
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<SysUserEntity> {
* @Date: 2020-01-09
*/
List<String> getSysGridLeaderPhone(Long deptId);
/**
* @Description: 根据userId集合查询openId
* @Param: [userIds, type] userId集合,openId类型 1 工作端 2 数据端
* @return: java.util.List<java.lang.String>
* @Author: wk
* @Date: 2020/5/26
*/
List<String>selectListOpenIds(@Param("userIds") List<String> userIds,
@Param("type")String type);
}

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

29
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<java.util.List<java.lang.String>>
* @Author: wk
* @Date: 2020/5/26
*/
@GetMapping(value = "/cloudAnalysis/masterGroup/getUserRelationList")
Result<List<String>> selectUserId();
}

16
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<List<String>> selectUserId() {
return ModuleUtils.feignConError("epdc-cloud-analysis-server", "selectUserId");
}
}

29
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<SysUserEntity> {
*/
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<SysUserEntity> {
*/
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<SysUserEntity> {
* @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<java.util.Map<java.lang.String,java.util.List<java.lang.String>>>
* @Author: wk
* @Date: 2020/5/26
*/
Result<UserWorkAndAnalyOpenIdDTO> selectOpenId();
}

57
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<SysUserDao, SysUserEntit
private SysRoleUserService sysRoleUserService;
@Autowired
private SysDeptService sysDeptService;
@Autowired
private UserRelationFeignClient userRelationFeignClient;
@Override
public PageData<SysUserDTO> page(Map<String, Object> params) {
@ -232,7 +237,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntit
// 解绑旧帐户
SysUserEntity entity = new SysUserEntity();
entity.setId(userDto.getId());
entity.setOpenId("");
entity.setWorkOpenId("");
baseDao.updateById(entity);
}
// 绑定新账户
@ -241,11 +246,36 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntit
return new Result();
}
@Override
public Result modifyAnalysisOpenIdByUsername(SysUserAnalysisOpenIdFormDTO sysUserOpenIdFormDto) {
// 查询当前openId是否绑定过账户
SysUserDTO userDto = this.getSysUserInfoByAnalysisOpenId(sysUserOpenIdFormDto.getAnalysisOpenId());
if (null != userDto) {
// 解绑旧帐户
SysUserEntity entity = new SysUserEntity();
entity.setId(userDto.getId());
entity.setAnalysisOpenId("");
baseDao.updateById(entity);
}
// 绑定新账户
baseDao.updateAnalysisOpenIdByUsername(sysUserOpenIdFormDto);
return new Result();
}
@Override
public SysUserDTO getSysUserInfoByOpenId(String openId) {
return baseDao.selectOneOfSysUserByOpenId(openId);
}
@Override
public SysUserDTO getSysUserInfoByAnalysisOpenId(String analysisOpenId) {
return baseDao.selectOneOfSysUserByAnalysisOpenId(analysisOpenId);
}
@Override
public void updateUserOpenId(Long userId) {
baseDao.updateUserOpenId(userId);
@ -302,5 +332,30 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntit
return new Result().ok(true);
}
/**
* @Description: 根据userId查询 工作端和数据端userId
* @Param: []
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.Map<java.lang.String,java.util.List<java.lang.String>>>
* @Author: wk
* @Date: 2020/5/26
*/
@Override
public Result<UserWorkAndAnalyOpenIdDTO> selectOpenId() {
UserWorkAndAnalyOpenIdDTO openIdDto = new UserWorkAndAnalyOpenIdDTO();
//1.调用数据分析端-书记在线接口获取userId集合
Result<List<String>> ResultuserIdList = userRelationFeignClient.selectUserId();
List<String> userIds = ResultuserIdList.getData();
if (null == userIds|| userIds.size()==0) {
return new Result().error("获取数据失败,请稍后再试");
}
//2.获得两项openId
List<String> workOpenIds = baseDao.selectListOpenIds(userIds,"1");
// workOpenIds.add("oZCeb5TZc2oBwT4jHb0kDmQsN0Xw");
openIdDto.setWorkOpenIds(workOpenIds);
List<String> AnalysisOpenIds = baseDao.selectListOpenIds(userIds,"2");
openIdDto.setAnalyOpenIds(AnalysisOpenIds);
return new Result<UserWorkAndAnalyOpenIdDTO>().ok(openIdDto);
}
}

52
esua-epdc/epdc-admin/epdc-admin-server/src/main/resources/mapper/SysUserDao.xml

@ -3,6 +3,13 @@
<mapper namespace="com.elink.esua.epdc.dao.SysUserDao">
<!-- userId 集合 -->
<sql id="foreachUserIdList">
<foreach collection="userIds" item="userId" open="(" separator="," close=")">
#{userId}
</foreach>
</sql>
<select id="getList" resultType="com.elink.esua.epdc.entity.SysUserEntity">
select t1.*, (select t2.name from sys_dept t2 where t2.id=t1.dept_id) deptName from sys_user t1
where t1.del_flag = 0 and t1.super_admin = 0
@ -105,11 +112,26 @@
WHERE
del_flag = 0
AND `status` = 1
AND open_id = #{openId}
AND work_open_id = #{openId}
</select>
<select id="selectOneOfSysUserByAnalysisOpenId" resultType="com.elink.esua.epdc.dto.SysUserDTO">
SELECT
*
FROM
sys_user
WHERE
del_flag = 0
AND `status` = 1
AND analysis_open_id = #{analysisOpenId}
</select>
<update id="updateOpenIdByUsername">
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>
<update id="updateAnalysisOpenIdByUsername">
UPDATE sys_user SET analysis_open_id = #{analysisOpenId} WHERE username = #{username} AND del_flag = 0
</update>
<update id="updateUserOpenId">
@ -152,4 +174,30 @@
AND d.dept_id = #{deptId}
) c
</select>
<select id="selectListOpenIds" resultType="java.lang.String">
SELECT
<if test='type=="1"'>
work_open_id
</if>
<if test='type== "2"'>
analysis_open_id
</if>
FROM
sys_user
WHERE
del_flag = 0
<if test="userIds != null and userIds.size()>0">
AND
id IN <include refid="foreachUserIdList"></include>
</if>
<if test='type=="1"'>
and work_open_id is not null
and work_open_id!=''
</if>
<if test='type== "2"'>
and analysis_open_id is not null
and analysis_open_id!=''
</if>
</select>
</mapper>

39
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<com.elink.esua.epdc.common.token.dto.WorkUserAuthorizationDTO>
*/
@GetMapping(value = "getAnalysisToken")
public Result<AnalysisUserAuthorizationDTO> 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<com.elink.esua.epdc.common.token.dto.AnalysisUserAuthorizationDTO>
*/
@PostMapping(value = "analysisLogin")
@ApiOperation(value = "登录")
public Result<AnalysisUserAuthorizationDTO> analysisLogin(@RequestBody AnalysisUserLoginDTO analysisUserLoginDto) {
//效验数据
ValidatorUtils.validateEntity(analysisUserLoginDto);
Result<AnalysisUserAuthorizationDTO> 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) {

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

6
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<>();

26
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<WorkUserAuthorizationDTO> 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<com.elink.esua.epdc.common.token.dto.AnalysisUserAuthorizationDTO>
*/
Result<AnalysisUserAuthorizationDTO> 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);
}

87
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<WorkUserAuthorizationDTO>().ok(authorization);
}
@Override
public Result<AnalysisUserAuthorizationDTO> analysisLogin(String username, String password) {
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
//获取用户信息
Result<UserDetail> 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<AnalysisUserAuthorizationDTO>().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<AnalysisUserAuthorizationDTO>().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<AnalysisUserAuthorizationDTO>().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> 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<AnalysisUserAuthorizationDTO>().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

48
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<DeptDataScopeDTO> deptDataScopeList;
}

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

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

13
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;//,,依次排下去
}

35
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 +
'}';
}
}

19
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<String, TemplateData> data;//推送文字
}

4
esua-epdc/epdc-module/epdc-analysis/epdc-analysis-server/src/main/resources/mapper/user/UserAnalysisDao.xml

@ -116,7 +116,7 @@
<!--新闻数 通知数 议题数-->
<select id="selectListNewsNoticeEventCount" resultType="com.elink.esua.epdc.dto.user.result.GridOpeningResultDTO">
SELECT
SELECT
dept.id gridId,
COUNT( DISTINCT nne.id ) newsCount,
COUNT( DISTINCT nnn.ID ) noticeCount,
@ -142,7 +142,7 @@
AND dept.id in <include refid="foreachGridIdList"></include>
</if>
GROUP BY
dept.id
dept.id 
</select>
<!--项目数-->

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

25
esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml

@ -192,11 +192,18 @@
<wx.ma.appId>wxdd8530c5f4926766</wx.ma.appId>
<wx.ma.secret>5bf4fb813145431b3493a10aa7e041e9</wx.ma.secret>
<!--工作端小程序-->
<work.wx.ma.appId>wx29b074840ef4bfd9</work.wx.ma.appId>
<work.wx.ma.secret>4adb1afccc69f205cdf5b521d74e2aca</work.wx.ma.secret>
<work.wx.ma.appId>wx9f20a46906ab2c3e</work.wx.ma.appId>
<work.wx.ma.secret>dc13065f79429979d9f687d249eb5c4e</work.wx.ma.secret>
<work.wx.ma.template>cwjaIk2GMxKQcSqISFaxsGQYfQwf2V7ercQLEEzFdDQ</work.wx.ma.template>
<!--数据分析端小程序-->
<analysis.wx.ma.appId>wxfa4afaa2b5f9c876</analysis.wx.ma.appId>
<analysis.wx.ma.secret>7db9f049c78c9a6cafa673deebe8330d</analysis.wx.ma.secret>
<analysis.wx.ma.template>wagGg4eAeHu1N2N0o8Vhyan41Gr3DqFBD81o5Lv7XnQ</analysis.wx.ma.template>
<wx.ma.jumpType>trial</wx.ma.jumpType>
<wx.ma.page>pages/index/index</wx.ma.page>
<wx.ma.url>https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=</wx.ma.url>
<wx.ma.lang>zh_CN</wx.ma.lang>
</properties>
</profile>
@ -238,9 +245,16 @@
<!--工作端小程序-->
<work.wx.ma.appId>wx9f20a46906ab2c3e</work.wx.ma.appId>
<work.wx.ma.secret>dc13065f79429979d9f687d249eb5c4e</work.wx.ma.secret>
<work.wx.ma.template>cwjaIk2GMxKQcSqISFaxsGQYfQwf2V7ercQLEEzFdDQ</work.wx.ma.template>
<!--数据分析端小程序-->
<analysis.wx.ma.appId>wxfa4afaa2b5f9c876</analysis.wx.ma.appId>
<analysis.wx.ma.secret>7db9f049c78c9a6cafa673deebe8330d</analysis.wx.ma.secret>
<analysis.wx.ma.template>wagGg4eAeHu1N2N0o8Vhyan41Gr3DqFBD81o5Lv7XnQ</analysis.wx.ma.template>
<wx.ma.jumpType>trial</wx.ma.jumpType>
<wx.ma.page>pages/index/index</wx.ma.page>
<wx.ma.url>https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=</wx.ma.url>
<wx.ma.lang>zh_CN</wx.ma.lang>
</properties>
</profile>
@ -283,9 +297,16 @@
<!--工作端小程序-->
<work.wx.ma.appId>wx9f20a46906ab2c3e</work.wx.ma.appId>
<work.wx.ma.secret>dc13065f79429979d9f687d249eb5c4e</work.wx.ma.secret>
<work.wx.ma.template>cwjaIk2GMxKQcSqISFaxsGQYfQwf2V7ercQLEEzFdDQ</work.wx.ma.template>
<!--数据分析端小程序-->
<analysis.wx.ma.appId>wxfa4afaa2b5f9c876</analysis.wx.ma.appId>
<analysis.wx.ma.secret>7db9f049c78c9a6cafa673deebe8330d</analysis.wx.ma.secret>
<analysis.wx.ma.template>wagGg4eAeHu1N2N0o8Vhyan41Gr3DqFBD81o5Lv7XnQ</analysis.wx.ma.template>
<wx.ma.jumpType>formal</wx.ma.jumpType>
<wx.ma.page>pages/index/index</wx.ma.page>
<wx.ma.url>https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=</wx.ma.url>
<wx.ma.lang>zh_CN</wx.ma.lang>
</properties>
</profile>
</profiles>

10
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<WorkUserAuthorizationDTO> login(@RequestBody WorkUserLoginDTO formDto) {
public Result<AnalysisUserAuthorizationDTO> 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<WorkUserAuthorizationDTO> getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto) {
public Result<AnalysisUserAuthorizationDTO> getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto) {
ValidatorUtils.validateEntity(formDto);
return analysisUserService.getMaToken(formDto);
}

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

21
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<SysUserDTO> 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<com.elink.esua.epdc.dto.SysUserDTO>
*/
@GetMapping("sys/user/getUserInfoBy/{analysisOpenId}")
Result<SysUserDTO> getSysUserInfoByAnalysisOpenId(@PathVariable("analysisOpenId") String analysisOpenId);
/**
* @param mobile
* @return com.elink.esua.epdc.commons.tools.utils.Result<java.util.List < com.elink.esua.epdc.dto.epdc.result.EpdcIndexPanelResultDTO>>
@ -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<UserWorkAndAnalyOpenIdDTO> userRelationWorkAndAnalyOpenId();
}

26
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<WorkUserAuthorizationDTO> getToken(WorkUserTokenFormDTO workUserTokenFormDto);
/**
* @describe: 数据端用户获取token
* @author wangtong
* @date 2020/5/26 20:26
* @param [workUserTokenFormDto]
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.common.token.dto.AnalysisUserAuthorizationDTO>
*/
@GetMapping("auth/getAnalysisToken")
Result<AnalysisUserAuthorizationDTO> getAnalysisToken(AnalysisUserTokenFormDTO analysisUserTokenFormDto);
/**
*
* 工作端用户登录并获取授权信息
@ -45,6 +53,18 @@ public interface ResourceFeignClient {
@PostMapping("auth/workLogin")
Result<WorkUserAuthorizationDTO> workLogin(WorkUserLoginDTO workUserLoginDto);
/**
*
* 工作端用户登录并获取授权信息
*
* @params [workUserLoginDto]
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.common.token.dto.WorkUserAuthorizationDTO>
* @author liuchuang
* @since 2019/11/19 20:27
*/
@PostMapping("auth/analysisLogin")
Result<AnalysisUserAuthorizationDTO> analysisLogin(AnalysisUserLoginDTO analysisUserLoginDto);
/**
* 退出登录
* @param userId

10
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<SysUserDTO> getSysUserInfoByAnalysisOpenId(String analysisOpenId) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_ADMIN_SERVER, "getSysUserInfoByAnalysisOpenId", analysisOpenId);
}
@Override
public Result<List<EpdcAppIndexPanelResultDTO>> 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");
}
}

14
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<AnalysisUserAuthorizationDTO> getAnalysisToken(AnalysisUserTokenFormDTO analysisUserTokenFormDto) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_AUTH_SERVER, "getAnalysisToken", analysisUserTokenFormDto);
}
@Override
public Result<WorkUserAuthorizationDTO> workLogin(WorkUserLoginDTO workUserLoginDto) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_AUTH_SERVER, "workLogin", workUserLoginDto);
}
@Override
public Result<AnalysisUserAuthorizationDTO> 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);

10
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<WorkUserAuthorizationDTO> login(WorkUserLoginDTO formDto);
Result<AnalysisUserAuthorizationDTO> login(AnalysisUserLoginDTO formDto);
/**
*
@ -49,7 +49,7 @@ public interface AnalysisUserService {
* @author liuchuang
* @since 2020/2/12 11:00
*/
Result<WorkUserAuthorizationDTO> getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto);
Result<AnalysisUserAuthorizationDTO> getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto);
/**
* @Description 获取党员老龄化排名列表

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

26
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<WorkUserAuthorizationDTO> login(WorkUserLoginDTO formDto) {
public Result<AnalysisUserAuthorizationDTO> 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<WorkUserAuthorizationDTO> getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto) {
public Result<AnalysisUserAuthorizationDTO> getMaToken(EpdcWorkAppUserMaTokenFormDTO formDto) {
// 获取openId
String openId = this.getWxMaUser(formDto.getWxCode()).getOpenid();
String analysisOpenId = this.getWxMaUser(formDto.getWxCode()).getOpenid();
// 检查当前微信是否已绑定账户
Result<SysUserDTO> sysUserDtoResult = adminFeignClient.getSysUserInfoByOpenId(openId);
Result<SysUserDTO> sysUserDtoResult = adminFeignClient.getSysUserInfoByAnalysisOpenId(analysisOpenId);
if (!sysUserDtoResult.success()) {
return new Result<WorkUserAuthorizationDTO>().error(sysUserDtoResult.getMsg());
return new Result<AnalysisUserAuthorizationDTO>().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<WorkUserAuthorizationDTO>().ok(resultDto);
return new Result<AnalysisUserAuthorizationDTO>().ok(resultDto);
}
return resourceFeignClient.getToken(ConvertUtils.sourceToTarget(userDto, WorkUserTokenFormDTO.class));
return resourceFeignClient.getAnalysisToken(ConvertUtils.sourceToTarget(userDto, AnalysisUserTokenFormDTO.class));
}
@Override

191
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<String, TemplateData> 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<UserWorkAndAnalyOpenIdDTO> userIdsResult = adminFeignClient.userRelationWorkAndAnalyOpenId();
if(userIdsResult == null || userIdsResult.getData() == null){
return new Result().error("获取openid失败!");
}
// 调用获取openid接口
UserWorkAndAnalyOpenIdDTO userWorkAndAnalyOpenIdDTO = userIdsResult.getData();
List<String> analyOpenIdList = userWorkAndAnalyOpenIdDTO.getAnalyOpenIds();
List<String> 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<String> openIdList,String templateId,String url,String value){
AtomicInteger ai = new AtomicInteger(0);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<Future<Integer>> list = new ArrayList<>();
for(String openId : openIdList){
Future<Integer> future = threadPool.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
// 配置模板内容
Map<String, TemplateData> 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();
}
}

91
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<String, TemplateData> 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<String> 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();
}
}

28
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:

Loading…
Cancel
Save