Browse Source

Merge remote-tracking branch 'remotes/origin/dev_wx_msg' into dev

master
jianjun 5 years ago
parent
commit
4002244d03
  1. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/BaseRequestLogAspect.java
  2. 4
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/AppClientConstant.java
  3. 1
      epmet-gateway/src/main/resources/bootstrap.yml
  4. 2
      epmet-module/epmet-ext/epmet-ext-server/src/main/java/com/epmet/constant/ModuleConstant.java
  5. 29
      epmet-module/epmet-ext/epmet-ext-server/src/main/java/com/epmet/controller/OpenUpController.java
  6. 20
      epmet-module/epmet-ext/epmet-ext-server/src/main/java/com/epmet/service/OpenUpService.java
  7. 30
      epmet-module/epmet-ext/epmet-ext-server/src/main/java/com/epmet/service/impl/OpenUpServiceImpl.java
  8. 3
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/constant/ActMessageConstant.java
  9. 18
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActServiceImpl.java
  10. 38
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActUserServiceImpl.java
  11. 7
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/WxMsgTemplateSubscribeStatus.java
  12. 7
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/UserMessageDTO.java
  13. 9
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/WxmpMsgSendRecordDTO.java
  14. 2
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/WxmpTemplateMsgSubscribeStatusDTO.java
  15. 32
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/ActivationSubscribeFormDTO.java
  16. 5
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/UserMessageFormDTO.java
  17. 24
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/WxMsgAuthInfoFormDTO.java
  18. 16
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/WxSubscribeMessageFormDTO.java
  19. 72
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/WxmpMessagePushFormDTO.java
  20. 5
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/result/WxMsgAuthInfoResultDTO.java
  21. 29
      epmet-module/epmet-message/epmet-message-server/pom.xml
  22. 49
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/config/AsyncConfig.java
  23. 11
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/constant/ExtConstant.java
  24. 18
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/constant/WxmpMessageConstant.java
  25. 76
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/controller/WxmpMessageController.java
  26. 69
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/controller/WxmpMessageExtController.java
  27. 36
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/dao/WxmpResiUserSubscribeDao.java
  28. 21
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/dao/WxmpTemplateMsgSubscribeStatusDao.java
  29. 33
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/dao/WxmpWorkUserSubscribeDao.java
  30. 5
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/UserMessageEntity.java
  31. 10
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/WxmpMsgSendRecordEntity.java
  32. 8
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/WxmpTemplateMsgSubscribeStatusEntity.java
  33. 5
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/excel/UserMessageExcel.java
  34. 8
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/excel/WxmpMsgSendRecordExcel.java
  35. 25
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/properties/ThreadProperties.java
  36. 4
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/redis/WxmpMessageRedis.java
  37. 20
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/WxmpMessageExtService.java
  38. 16
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/WxmpMessageService.java
  39. 83
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/WxmpMessageExtServiceImpl.java
  40. 494
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/WxmpMessageServiceImpl.java
  41. 2
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/WxmpMsgSendRecordServiceImpl.java
  42. 10
      epmet-module/epmet-message/epmet-message-server/src/main/resources/bootstrap.yml
  43. 98
      epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.12.2__wxmp_message_template.sql
  44. 1
      epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.12.3__sub_status_add_column.sql
  45. 1
      epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.12.4__wxmp_message_template.sql
  46. 1
      epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.12.5__alter_user_message_add_column.sql
  47. 84
      epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/WxmpMsgSendRecordDao.xml
  48. 68
      epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/WxmpResiUserSubscribeDao.xml
  49. 25
      epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/WxmpTemplateMsgSubscribeStatusDao.xml
  50. 68
      epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/WxmpWorkUserSubscribeDao.xml
  51. 4
      epmet-module/epmet-oss/epmet-oss-server/pom.xml
  52. 7
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AbstractCloudStorageService.java
  53. 54
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AliyunCloudStorageService.java
  54. 6
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/FastDFSCloudStorageService.java
  55. 5
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/LocalCloudStorageService.java
  56. 5
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QcloudCloudStorageService.java
  57. 5
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QiniuCloudStorageService.java
  58. 19
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java
  59. 2
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/OssService.java
  60. 32
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/impl/OssServiceImpl.java
  61. 32
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/WxmpTemplateListFormDTO.java
  62. 30
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/WxmpTemplateListResultDTO.java
  63. 9
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/constant/UserMessageConstant.java
  64. 79
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
  65. 32
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/AgencyInfoFormDTO.java
  66. 22
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/StaffBasicInfoFromDTO.java
  67. 66
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/AgencyInfoResultDTO.java
  68. 5
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/MineResultDTO.java
  69. 31
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/OrganizeTreeDeptResultDTO.java
  70. 31
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/OrganizeTreeGridResultDTO.java
  71. 50
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/OrganizeTreeResultDTO.java
  72. 16
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java
  73. 10
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java
  74. 18
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java
  75. 16
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/StaffController.java
  76. 21
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java
  77. 12
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java
  78. 10
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/StaffService.java
  79. 36
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java
  80. 10
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffServiceImpl.java
  81. 81
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml
  82. 4
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java
  83. 9
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/UserMessageConstant.java
  84. 43
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectProcessServiceImpl.java
  85. 68
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  86. 4
      epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectStaffDao.xml
  87. 27
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java
  88. 8
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/utils/ModuleConstant.java
  89. 16
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/constant/UserMessageConstant.java
  90. 46
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java
  91. 17
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/service/impl/GroupInvitationServiceImpl.java
  92. 35
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java
  93. 9
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/constant/PartyMemberMessageConstant.java
  94. 20
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/PartyMemberConfirmServiceImpl.java
  95. 4
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/warmhearted/constant/ResiWarmUserMessageConstant.java
  96. 22
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/warmhearted/service/impl/ResiWarmheartedApplyServiceImpl.java
  97. 21
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/OrganizeTreeFormDTO.java
  98. 53
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/BasicInfoResultDTO.java
  99. 7
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
  100. 5
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/BaseRequestLogAspect.java

@ -142,7 +142,7 @@ public abstract class BaseRequestLogAspect {
*/
private Result handlerRuntimeException(RuntimeException ex) {
Result result=new Result().error();
result.setInternalMsg(ex.getMessage());
//result.setInternalMsg(ex.getMessage());
return result;
}

4
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/AppClientConstant.java

@ -50,4 +50,8 @@ public interface AppClientConstant {
* 事务流水号每次请求串起来的多个服务拥有相同的流水号,便于日志追踪
*/
String TRANSACTION_SERIAL_KEY = "Transaction-Serial";
/**
* app类型-工作端
*/
String APP_WORK = "work";
}

1
epmet-gateway/src/main/resources/bootstrap.yml

@ -445,6 +445,7 @@ epmet:
- /data/stats/**
- /epmet/ext/**
- /epmetuser/customerstaff/customerlist
- /message/template/**
swaggerUrls:

2
epmet-module/epmet-ext/epmet-ext-server/src/main/java/com/epmet/constant/ModuleConstant.java

@ -14,4 +14,6 @@ public interface ModuleConstant {
String ERROR_EPMET_USER = "调用epmet_user服务查询网格下的所有工作人员失败";
String ERROR_AGENCY = "调用gov_org服务查询组织基本信息失败";
}

29
epmet-module/epmet-ext/epmet-ext-server/src/main/java/com/epmet/controller/OpenUpController.java

@ -11,8 +11,10 @@ import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.service.OpenUpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@ -100,5 +102,28 @@ public class OpenUpController {
return govOrgOpenFeignClient.staffPermissionExt(commonStaffIdFormDTO.getStaffId());
}
/**
* @Description 对外接口-根据组织Id获取组织信息
* @author sun
**/
@PostMapping("agencyinfo")
Result<AgencyInfoResultDTO> agencyInfo(@RequestBody AgencyInfoFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AgencyInfoFormDTO.StaffIdGroup.class);
if (!"agency".equals(formDTO.getOrgType()) && !"grid".equals(formDTO.getOrgType())) {
return new Result<AgencyInfoResultDTO>().error("参数错误,orgType值类型错误!");
}
return new Result<AgencyInfoResultDTO>().ok(openUpService.agencyInfo(formDTO));
}
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据
* @author sun
**/
@PostMapping("organizetree")
Result<OrganizeTreeResultDTO> organizeTree(@RequestBody OrganizeTreeFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO, OrganizeTreeFormDTO.StaffIdGroup.class);
return new Result<OrganizeTreeResultDTO>().ok(openUpService.organizeTree(formDTO));
}
}

20
epmet-module/epmet-ext/epmet-ext-server/src/main/java/com/epmet/service/OpenUpService.java

@ -1,11 +1,7 @@
package com.epmet.service;
import com.epmet.dto.form.StaffSinAgencyFormDTO;
import com.epmet.dto.form.StaffSinDeptFormDTO;
import com.epmet.dto.form.StaffSinGridFormDTO;
import com.epmet.dto.result.StaffSinAgencyResultDTO;
import com.epmet.dto.result.StaffSinDeptResultDTO;
import com.epmet.dto.result.StaffSinGridResultDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import java.util.List;
@ -38,4 +34,16 @@ public interface OpenUpService {
* @date 2020/8/17 9:59 上午
*/
List<StaffSinAgencyResultDTO> staffSinAgency(StaffSinAgencyFormDTO formDTO);
/**
* @Description 对外接口-根据组织Id获取组织信息
* @author sun
**/
AgencyInfoResultDTO agencyInfo(AgencyInfoFormDTO formDTO);
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据
* @author sun
**/
OrganizeTreeResultDTO organizeTree(OrganizeTreeFormDTO formDTO);
}

30
epmet-module/epmet-ext/epmet-ext-server/src/main/java/com/epmet/service/impl/OpenUpServiceImpl.java

@ -6,9 +6,7 @@ import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.ModuleConstant;
import com.epmet.dto.form.*;
import com.epmet.dto.result.StaffSinAgencyResultDTO;
import com.epmet.dto.result.StaffSinDeptResultDTO;
import com.epmet.dto.result.StaffSinGridResultDTO;
import com.epmet.dto.result.*;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.service.OpenUpService;
@ -123,4 +121,30 @@ public class OpenUpServiceImpl implements OpenUpService {
return staffInfoList.getData();
}
/**
* @Description 对外接口-根据组织Id获取组织信息
* @author sun
**/
@Override
public AgencyInfoResultDTO agencyInfo(AgencyInfoFormDTO formDTO) {
Result<AgencyInfoResultDTO> result = govOrgOpenFeignClient.agencyInfo(formDTO);
if (!result.success()){
throw new RenException(result.getInternalMsg());
}
return result.getData();
}
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据
* @author sun
**/
@Override
public OrganizeTreeResultDTO organizeTree(OrganizeTreeFormDTO formDTO) {
Result<OrganizeTreeResultDTO> result = govOrgOpenFeignClient.organizeTree(formDTO.getAgencyId());
if (!result.success()){
throw new RenException(result.getInternalMsg());
}
return result.getData();
}
}

3
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/constant/ActMessageConstant.java

@ -8,6 +8,7 @@ package com.epmet.constant;
*/
public interface ActMessageConstant {
String TITLE="您有一条活动消息";
String WXMP_TITLE="活动消息";
/**
* 报名审核成功给居民端用户发送消息
*/
@ -29,5 +30,5 @@ public interface ActMessageConstant {
/**
* 工作端-重新发布活动通知待审核+已经审核通过的用户
*/
String RE_PUBLISH_ACT="您好,您参与的%s活动,%s,请注意查看";
String RE_PUBLISH_ACT="您参与的%s活动,%s,请注意查看";
}

18
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActServiceImpl.java

@ -24,6 +24,7 @@ import com.epmet.constant.ReadFlagConstant;
import com.epmet.dao.*;
import com.epmet.dto.*;
import com.epmet.dto.form.UserMessageFormDTO;
import com.epmet.dto.form.WxSubscribeMessageFormDTO;
import com.epmet.dto.form.work.*;
import com.epmet.dto.result.ActSponsorResultDTO;
import com.epmet.dto.result.work.*;
@ -31,6 +32,7 @@ import com.epmet.entity.*;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.service.*;
import com.epmet.utils.ModuleConstant;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -680,6 +682,7 @@ public class WorkActServiceImpl implements WorkActService {
List<String> userIdList=actUserRelationDao.selectUserIdList(formDTO.getActId(),ActConstant.ACT_USER_STATUS_PASSED);
if(null!=userIdList&&userIdList.size()>0){
List<UserMessageFormDTO> userMessageFormDTOS=new ArrayList<>();
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
for(String userId:userIdList){
UserMessageFormDTO userMessageFormDTO = new UserMessageFormDTO();
userMessageFormDTO.setCustomerId(actInfoDTO.getCustomerId());
@ -692,11 +695,26 @@ public class WorkActServiceImpl implements WorkActService {
actInfoDTO.getTitle(),
formDTO.getCancelReason()));
userMessageFormDTOS.add(userMessageFormDTO);
//2020.10.26 添加发送微信订阅消息功能 sun
WxSubscribeMessageFormDTO dto = new WxSubscribeMessageFormDTO();
dto.setCustomerId(actInfoDTO.getCustomerId());
dto.setClientType(AppClientConstant.APP_RESI);
dto.setUserId(userId);
dto.setBehaviorType(ActMessageConstant.WXMP_TITLE);
dto.setMessageContent(String.format(ActMessageConstant.ACT_CANCELED, actInfoDTO.getTitle(), formDTO.getCancelReason()));
dto.setMessageTime(new Date());
dto.setGridId("*");
msgList.add(dto);
}
Result sendMessageRes= epmetMessageOpenFeignClient.saveUserMessageList(userMessageFormDTOS);
if(sendMessageRes.success()){
logger.info("给审核通过的用户发送消息成功");
}
logger.info("取消活动,开始推送微信订阅消息");
Result wxmpMsg = epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
if (wxmpMsg.success()) {
logger.info("给审核通过的用户推送微信订阅消息成功");
}
}
}

38
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActUserServiceImpl.java

@ -19,6 +19,7 @@ import com.epmet.dto.ActUserLogDTO;
import com.epmet.dto.ActUserRelationDTO;
import com.epmet.dto.HeartUserInfoDTO;
import com.epmet.dto.form.UserMessageFormDTO;
import com.epmet.dto.form.WxSubscribeMessageFormDTO;
import com.epmet.dto.form.work.AactUserDetailFormDTO;
import com.epmet.dto.form.work.ActIdFormDTO;
import com.epmet.dto.form.work.AuditUserFormDTO;
@ -464,6 +465,8 @@ public class WorkActUserServiceImpl implements WorkActUserService {
actUserLogDao.insert(actUserLogEntity);
//给居民发消息
this.saveUserMessage(actUserRelationEntity,ActConstant.ACT_USER_STATUS_PASSED,actInfo);
//给居民发送微信订阅消息 sun
this.saveWxmpMessage(actUserRelationEntity,ActConstant.ACT_USER_STATUS_PASSED,actInfo);
}
/**
@ -511,6 +514,8 @@ public class WorkActUserServiceImpl implements WorkActUserService {
actUserLogDao.insert(actUserLogEntity);
//给居民发消息
this.saveUserMessage(actUserRelationEntity,ActConstant.ACT_USER_STATUS_REFUSED,actInfo);
//给居民发送微信订阅消息 sun
this.saveWxmpMessage(actUserRelationEntity,ActConstant.ACT_USER_STATUS_REFUSED,actInfo);
}
/**
@ -645,6 +650,39 @@ public class WorkActUserServiceImpl implements WorkActUserService {
}
}
/**
* @param actUserRelationEntity type actInfo
* @author sun
* @description 报名审核--给报名申请人发送微信订阅消息
**/
private void saveWxmpMessage(ActUserRelationEntity actUserRelationEntity, String type, ActInfoEntity actInfo) {
List<WxSubscribeMessageFormDTO> list = new ArrayList<>();
try {
WxSubscribeMessageFormDTO msg = new WxSubscribeMessageFormDTO();
msg.setCustomerId(actInfo.getCustomerId());
msg.setClientType(AppClientConstant.APP_RESI);
msg.setUserId(actUserRelationEntity.getUserId());
msg.setBehaviorType(ActMessageConstant.WXMP_TITLE);
msg.setMessageTime(new Date());
msg.setGridId("*");
if (ActConstant.ACT_USER_STATUS_PASSED.equals(type)) {
msg.setMessageContent(String.format(ActMessageConstant.AUDIT_PASSED, actInfo.getTitle()));
} else if (ActConstant.ACT_USER_STATUS_REFUSED.equals(type)) {
msg.setMessageContent(String.format(ActMessageConstant.AUDIT_REFUSED, actInfo.getTitle(), actUserRelationEntity.getFailureReason()));
}
list.add(msg);
logger.info("活动报名审核,开始推送微信订阅消息");
Result result = epmetMessageOpenFeignClient.sendWxSubscribeMessage(list);
if (result.success()) {
logger.info("审核成功,已成功发送微信订阅消息");
} else {
logger.error("审核成功,发送微信订阅消息失败" + JSON.toJSONString(result));
}
} catch (Exception e) {
logger.error("审核结果,发送微信订阅消息异常", e.getMessage());
}
}
/**
* @return com.epmet.dto.result.work.HistoricalActInfo
* @param userId

7
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/WxMsgTemplateSubscribeStatus.java

@ -0,0 +1,7 @@
package com.epmet.constant;
public interface WxMsgTemplateSubscribeStatus {
//wx订阅状态 订阅状态(订阅:subscribe 取消订阅:unsubscribe)
String SUBSCRIBE = "subscribe";
String UNSUBSCRIBE = "unsubscribe";
}

7
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/UserMessageDTO.java

@ -59,6 +59,11 @@ public class UserMessageDTO implements Serializable {
*/
private String app;
/**
* 调用者
*/
private String referer;
/**
* 消息标题
*/
@ -104,4 +109,4 @@ public class UserMessageDTO implements Serializable {
*/
private Date updatedTime;
}
}

9
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/WxmpMsgSendRecordDTO.java

@ -42,6 +42,10 @@ public class WxmpMsgSendRecordDTO implements Serializable {
* 客户Id 客户Id
*/
private String customerId;
/**
* 网格Id居民端跟网格有关的则有值工作端以及一些居民端和网格没关的存*
*/
private String gridId;
/**
* 所属端类型 居民端:resi 工作端:work
@ -93,6 +97,11 @@ public class WxmpMsgSendRecordDTO implements Serializable {
*/
private String reason;
/**
* 调用方
*/
private String referer;
/**
* 删除标识
*/

2
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/WxmpTemplateMsgSubscribeStatusDTO.java

@ -103,4 +103,6 @@ public class WxmpTemplateMsgSubscribeStatusDTO implements Serializable {
*/
private Date updatedTime;
private Date templateId;
}

32
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/ActivationSubscribeFormDTO.java

@ -0,0 +1,32 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @Description 居民端工作端-重新激活授权页-接口入参
* @author sun
*/
@Data
public class ActivationSubscribeFormDTO {
@NotBlank(message = "客户id不能为空", groups = { UpdateWxSubscribeInfoGroup.class })
private String customerId;
@NotBlank(message = "客户端类型不能为空", groups = { UpdateWxSubscribeInfoGroup.class })
private String clientType;
@NotBlank(message = "模板ID不能为空", groups = { UpdateWxSubscribeInfoGroup.class })
private String templateId;
@NotBlank(message = "'是否总是允许'选项不能为空", groups = { UpdateWxSubscribeInfoGroup.class })
private String alwaysVisit;
/**
* token中用户Id
*/
private String userId;
/**
* 用户对应的openId(居民端一对一工作端一对多)
*/
private String openId;
public interface UpdateWxSubscribeInfoGroup {}
}

5
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/UserMessageFormDTO.java

@ -56,4 +56,9 @@ public class UserMessageFormDTO implements Serializable {
*/
@NotBlank(message = "readFlag不能为空")
private String readFlag;
/**
* 调用者
*/
private String referer;
}

24
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/WxMsgAuthInfoFormDTO.java

@ -8,17 +8,35 @@ import javax.validation.constraints.NotBlank;
public class WxMsgAuthInfoFormDTO {
public interface SaveSysAuthInfoGroup {}
public interface GetAuthInfoGroup {}
public interface SaveWxSubscribeInfoGroup {}
@NotBlank(message = "客户id不能为空", groups = { SaveSysAuthInfoGroup.class })
@NotBlank(message = "客户id不能为空", groups = { SaveSysAuthInfoGroup.class, GetAuthInfoGroup.class, SaveWxSubscribeInfoGroup.class })
private String customerId;
@NotBlank(message = "客户端类型不能为空", groups = { SaveSysAuthInfoGroup.class })
@NotBlank(message = "客户端类型不能为空", groups = { SaveSysAuthInfoGroup.class, GetAuthInfoGroup.class, SaveWxSubscribeInfoGroup.class })
private String clientType;
@NotBlank(message = "是否总是字段不能为空", groups = { SaveSysAuthInfoGroup.class })
@NotBlank(message = "'是否总是允许'选项不能为空", groups = { SaveSysAuthInfoGroup.class })
private String alwaysVisit;
@NotBlank(message = "是否去订阅字段不能为空", groups = { SaveSysAuthInfoGroup.class })
private String subscribeStatus;
@NotBlank(message = "模板ID不能为空", groups = { SaveWxSubscribeInfoGroup.class, GetAuthInfoGroup.class, SaveSysAuthInfoGroup.class })
private String templateId;
@NotBlank(message = "微信'是否总是允许'选项不能为空", groups = { SaveWxSubscribeInfoGroup.class })
private String wxAlwaysVisit;
@NotBlank(message = "微信'是否订阅字段不能为空'", groups = { SaveWxSubscribeInfoGroup.class })
private String wxSubscribeStatus;
@NotBlank(message = "动作类型不能为空", groups = { SaveWxSubscribeInfoGroup.class })
private String behaviorType;
}

16
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/WxSubscribeMessageFormDTO.java

@ -48,4 +48,20 @@ public class WxSubscribeMessageFormDTO implements Serializable {
@NotBlank(message = "消息内容不能为空")
private String messageContent;
/**
* 消息时间
*/
@NotNull(message = "消息时间不能为空")
private Date messageTime;
/**
* 网格id-居民端用
*/
private String gridId;
/**
* 调用方
*/
private String referer;
}

72
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/WxmpMessagePushFormDTO.java

@ -0,0 +1,72 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @description: 微信订阅消息FormDTO
* @author: liushaowen
* @date: 2020/10/21 14:29
*/
@Data
public class WxmpMessagePushFormDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
@NotBlank(message = "客户id不能为空")
private String customerId;
/**
* 客户端类型 居民端:resi 工作端:work
*/
@NotBlank(message = "客户端类型不能为空")
private String app;
/**
* 接收者用户 userId
*/
@NotBlank(message = "接收用户id不能为空")
private String userId;
/**
* 行为类型(存title字段的中间值) 入组申请党员认证等
*/
@NotBlank(message = "行为类型不能为空")
private String title;
/**
* 消息内容
*/
@NotBlank(message = "消息内容不能为空")
private String messageContent;
/**
* 网格id-居民端用
*/
@NotBlank(message = "网格id不能为空")
private String gridId;
/**
* 已读标记
*/
@NotBlank(message = "已读标记不能为空")
private String readFlag;
/**
* 调用方
*/
@NotBlank(message = "调用方不能为空")
private String referer;
/**
* 推送微信订阅Flag
*/
@NotBlank(message = "是否推送订阅Flag不能为空")
private String pushWxmpFlag;
}

5
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/result/WxMsgAuthInfoResultDTO.java

@ -38,4 +38,9 @@ public class WxMsgAuthInfoResultDTO {
* wx订阅状态 订阅状态(订阅:subscribe 取消订阅:unsubscribe)
*/
private String wxSubscribeStatus;
/**
* 微信openId
*/
private String wxOpenId;
}

29
epmet-module/epmet-message/epmet-message-server/pom.xml

@ -25,6 +25,11 @@
<artifactId>epmet-message-client</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-user-client</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-admin-client</artifactId>
@ -160,6 +165,12 @@
<nacos.ip/>
<spring.flyway.enabled>false</spring.flyway.enabled>
<!--线程池配置-->
<thread.pool.core-pool-size>5</thread.pool.core-pool-size>
<thread.pool.max-pool-size>8</thread.pool.max-pool-size>
<thread.pool.queue-capacity>10</thread.pool.queue-capacity>
<thread.pool.keep-alive>30</thread.pool.keep-alive>
</properties>
</profile>
<profile>
@ -192,6 +203,12 @@
<nacos.ip/>
<spring.flyway.enabled>false</spring.flyway.enabled>
<!--线程池配置-->
<thread.pool.core-pool-size>5</thread.pool.core-pool-size>
<thread.pool.max-pool-size>8</thread.pool.max-pool-size>
<thread.pool.queue-capacity>10</thread.pool.queue-capacity>
<thread.pool.keep-alive>30</thread.pool.keep-alive>
</properties>
</profile>
<profile>
@ -224,6 +241,12 @@
<nacos.ip/>
<spring.flyway.enabled>true</spring.flyway.enabled>
<!--线程池配置-->
<thread.pool.core-pool-size>5</thread.pool.core-pool-size>
<thread.pool.max-pool-size>8</thread.pool.max-pool-size>
<thread.pool.queue-capacity>10</thread.pool.queue-capacity>
<thread.pool.keep-alive>30</thread.pool.keep-alive>
</properties>
</profile>
<profile>
@ -253,6 +276,12 @@
<nacos.ip/>
<spring.flyway.enabled>true</spring.flyway.enabled>
<!--线程池配置-->
<thread.pool.core-pool-size>5</thread.pool.core-pool-size>
<thread.pool.max-pool-size>8</thread.pool.max-pool-size>
<thread.pool.queue-capacity>10</thread.pool.queue-capacity>
<thread.pool.keep-alive>30</thread.pool.keep-alive>
</properties>
</profile>
</profiles>

49
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/config/AsyncConfig.java

@ -0,0 +1,49 @@
package com.epmet.config;
import com.epmet.properties.ThreadProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
/**
* 线程池配置类
*/
@Configuration
@EnableConfigurationProperties(ThreadProperties.class)
@EnableAsync
public class AsyncConfig {
@Autowired
private ThreadProperties threadProperties;
@Bean
public Executor executor() {
ThreadProperties.ThreadPoolProperties threadPoolProps = threadProperties.getThreadPool();
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(threadPoolProps.getCorePoolSize());
executor.setMaxPoolSize(threadPoolProps.getMaxPoolSize());
executor.setQueueCapacity(threadPoolProps.getQueueCapacity());
executor.setThreadNamePrefix("epmet-message-");
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
// CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //对拒绝task的处理策略
executor.setKeepAliveSeconds(threadPoolProps.getKeepAlive());
executor.initialize();
return executor;
}
@Bean
public ExecutorService executorService() {
ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) executor();
return executor.getThreadPoolExecutor();
}
}

11
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/constant/ExtConstant.java

@ -0,0 +1,11 @@
package com.epmet.constant;
public interface ExtConstant {
String APP_RESI = "resi";
String APP_WORK = "work";
String APP_GOV = "gov";
String PUSH_WXMP = "1";
}

18
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/constant/WxmpMessageConstant.java

@ -22,7 +22,9 @@ public interface WxmpMessageConstant {
String RESI = "resi";
String WORK = "work";
String GOV_REDIS = "work";
String GOV_DB = "gov";
String ACCESS_TOKEN = "access_token";
@ -30,17 +32,21 @@ public interface WxmpMessageConstant {
String TEMPLATE_ID = "template_id";
String TEMPLATE_TYPE = "1832";
String PAGE = "page";
String TITLE = "title";
String PAGE_URL = "/subpages/mine/pages/message/skip";
String TITLE = "thing5";
int TITLE_LIMIT = 20;
String MESSAGE_CONTENT = "message_content";
String MESSAGE_CONTENT = "thing4";
int MESSAGE_CONTENT_LIMIT = 20;
String MESSAGE_TIME = "message_time";
String MESSAGE_TIME = "date2";
String DATA = "data";
@ -50,10 +56,6 @@ public interface WxmpMessageConstant {
String ERROR = "error";
String PAGE_RESI = "";
String PAGE_WORK = "";
String STATE_DEV = "developer";
String STATE_TEST = "trial";

76
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/controller/WxmpMessageController.java

@ -17,14 +17,19 @@
package com.epmet.controller;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.ActivationSubscribeFormDTO;
import com.epmet.dto.form.GetTemplateListFormDTO;
import com.epmet.dto.form.WxMsgAuthInfoFormDTO;
import com.epmet.dto.form.WxSubscribeMessageFormDTO;
import com.epmet.dto.result.GetTemplateListResultDTO;
import com.epmet.dto.result.WxMsgAuthInfoResultDTO;
import com.epmet.service.WxmpMessageService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@ -32,6 +37,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.concurrent.ExecutorService;
/**
@ -44,12 +50,17 @@ import java.util.List;
@RequestMapping("wxmpmessage")
public class WxmpMessageController {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private WxmpMessageService wxmpMessageService;
@Autowired
private LoginUserUtil loginUserUtil;
@Autowired
private ExecutorService executorService;
/**
* @Description 保存系统自身的弹框授权信息
* @return com.epmet.commons.tools.utils.Result
@ -64,17 +75,28 @@ public class WxmpMessageController {
String clientType = form.getClientType();
String customerId = form.getCustomerId();
String subscribeStatus = form.getSubscribeStatus();
String templateId = form.getTemplateId();
wxmpMessageService.saveSysAuthorizeInfo(customerId, clientType, alwaysVisit, subscribeStatus, loginUserUtil.getLoginUserId());
wxmpMessageService.saveSysAuthorizeInfo(customerId, clientType, alwaysVisit, subscribeStatus, loginUserUtil.getLoginUserId(), templateId);
return new Result();
}
@PostMapping("sendwxsubscribemessage")
public Result sendWxSubscribeMessage(@RequestBody List<WxSubscribeMessageFormDTO> msgList){
for (WxSubscribeMessageFormDTO wxSubscribeMessageFormDTO : msgList) {
ValidatorUtils.validateEntity(wxSubscribeMessageFormDTO);
}
wxmpMessageService.sendWxSubscribeMessage(msgList);
executorService.execute(() -> {
try {
long startTs = System.currentTimeMillis();
wxmpMessageService.sendWxSubscribeMessage(msgList);
long endTs = System.currentTimeMillis();
logger.info("异步发送消息成功,执行时长:{}", endTs - startTs);
} catch (Exception e) {
logger.error("异步发送消息失败,错误信息:{}", ExceptionUtils.getErrorStackTrace(e));
}
});
return new Result();
}
@ -89,4 +111,52 @@ public class WxmpMessageController {
return new Result<List<GetTemplateListResultDTO>>().ok(wxmpMessageService.templateList(formDTO));
}
}
/**
* @Description 查询用户授权信息
* @return
* @author wxz
* @date 2020.10.21 18:15
*/
@PostMapping("get-authorizeinfo")
public Result getAuthorizationInfo(@RequestBody WxMsgAuthInfoFormDTO form) {
ValidatorUtils.validateEntity(form, WxMsgAuthInfoFormDTO.GetAuthInfoGroup.class);
WxMsgAuthInfoResultDTO authorizationInfo = wxmpMessageService.getAuthorizationInfo(
form.getCustomerId(), form.getClientType(),
loginUserUtil.getLoginUserId(), form.getTemplateId());
return new Result().ok(authorizationInfo);
}
/**
* 保存微信订阅的授权信息
* @param form
* @return
*/
@PostMapping("save-wxsubscribe")
public Result saveWxSubscribe(@RequestBody WxMsgAuthInfoFormDTO form) {
ValidatorUtils.validateEntity(form, WxMsgAuthInfoFormDTO.SaveWxSubscribeInfoGroup.class);
String customerId = form.getCustomerId();
String clientType = form.getClientType();
String templateId = form.getTemplateId();
String wxAlwaysVisit = form.getWxAlwaysVisit();
String wxSubscribeStatus = form.getWxSubscribeStatus();
String behaviorType = form.getBehaviorType();
wxmpMessageService.saveWxSubscribe(customerId, clientType, templateId, wxAlwaysVisit, wxSubscribeStatus, behaviorType, loginUserUtil.getLoginUserId());
return new Result();
}
/**
* @return
* @Description 居民端工作端-重新激活授权页
* @author sun
*/
@PostMapping("activationsubscribe")
public Result activationSubscribe(@RequestBody ActivationSubscribeFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, ActivationSubscribeFormDTO.UpdateWxSubscribeInfoGroup.class);
formDTO.setUserId(loginUserUtil.getLoginUserId());
wxmpMessageService.activationSubscribe(formDTO);
return new Result();
}
}

69
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/controller/WxmpMessageExtController.java

@ -0,0 +1,69 @@
package com.epmet.controller;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.WxmpMessagePushFormDTO;
import com.epmet.dto.form.WxmpTemplateListFormDTO;
import com.epmet.dto.result.WxmpTemplateListResultDTO;
import com.epmet.service.WxmpMessageExtService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.concurrent.ExecutorService;
/**
* @description: 外部调用微信订阅controller
* @author: liushaowen
* @date: 2020/11/2 14:51
*/
@RestController
@RequestMapping("template")
public class WxmpMessageExtController {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private WxmpMessageExtService wxmpMessageExtService;
@Autowired
private ExecutorService executorService;
@PostMapping("msgpush")
public Result wxmpMsgPush(@RequestBody List<WxmpMessagePushFormDTO> dtos){
for (WxmpMessagePushFormDTO dto : dtos) {
ValidatorUtils.validateEntity(dto);
}
executorService.execute(() -> {
try {
long startTs = System.currentTimeMillis();
wxmpMessageExtService.pushWxmpMessage(dtos);
long endTs = System.currentTimeMillis();
logger.info("异步发送消息成功,执行时长:{}", endTs - startTs);
} catch (Exception e) {
logger.error("异步发送消息失败,错误信息:{}", ExceptionUtils.getErrorStackTrace(e));
}
});
return new Result();
}
/**
* @return
* @Description (外挂)消息-获取订阅消息模板列表
* @author sun
*/
@PostMapping("wxmptemplatelist")
public Result<List<WxmpTemplateListResultDTO>> wxmpTemplateList(@RequestBody WxmpTemplateListFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, WxmpTemplateListFormDTO.AddUserInternalGroup.class);
if (!AppClientConstant.APP_RESI.equals(formDTO.getClientType()) && !AppClientConstant.APP_WORK.equals(formDTO.getClientType())) {
return new Result<List<WxmpTemplateListResultDTO>>().error("参数错误,clientType值类型错误!");
}
return new Result<List<WxmpTemplateListResultDTO>>().ok(wxmpMessageExtService.wxmpTemplateList(formDTO));
}
}

36
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/dao/WxmpResiUserSubscribeDao.java

@ -36,11 +36,12 @@ public interface WxmpResiUserSubscribeDao extends BaseDao<WxmpResiUserSubscribeE
* @param openId
* @param templateId
* @param customerId
* @param userId
* @return java.lang.Integer
* @Author liushaowen
* @Date 2020/10/22 9:30
*/
Integer getResiSubscribeInfo(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId);
Integer getResiSubscribeInfo(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId,@Param("userId") String userId);
/**
* @Description 减少订阅条数
@ -52,7 +53,7 @@ public interface WxmpResiUserSubscribeDao extends BaseDao<WxmpResiUserSubscribeE
* @Author liushaowen
* @Date 2020/10/22 9:38
*/
int decreaseResiSubscribeCount(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId,@Param("num") int i);
int decreaseResiSubscribeCount(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId,@Param("num") int i,@Param("userId") String userId);
/**
* @Description 清空订阅条数修改订阅状态
@ -63,15 +64,24 @@ public interface WxmpResiUserSubscribeDao extends BaseDao<WxmpResiUserSubscribeE
* @Author liushaowen
* @Date 2020/10/22 13:23
*/
int clearResiSubscribeCount(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId);
/**
* @Description 获取模板id
* @param openId
* @param templateId
* @param customerId
* @return java.lang.Integer
* @Author liushaowen
* @Date 2020/10/23 10:53
*/
String getResiSubscribeTemplateId(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId);
int clearResiSubscribeCount(@Param("openId") String openId,
@Param("templateId") String templateId,
@Param("customerId") String customerId,
@Param("userId") String userId);
WxmpResiUserSubscribeEntity getWxResiSubscribe(@Param("userId") String userId,
@Param("customerId") String customerId,
@Param("templateId") String templateId,
@Param("openId") String openId);
void incrSubscribeCount(@Param("incr") int incr,
@Param("userId") String userId,
@Param("customerId") String customerId,
@Param("templateId")String templateId,
@Param("resiOpenId") String resiOpenId);
void unSubscribe(@Param("userId") String userId,
@Param("customerId") String customerId,
@Param("templateId") String templateId,
@Param("resiOpenId") String resiOpenId);
}

21
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/dao/WxmpTemplateMsgSubscribeStatusDao.java

@ -18,6 +18,7 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.form.ActivationSubscribeFormDTO;
import com.epmet.dto.result.WxMsgAuthInfoResultDTO;
import com.epmet.entity.WxmpTemplateMsgSubscribeStatusEntity;
import org.apache.ibatis.annotations.Mapper;
@ -33,10 +34,22 @@ import org.apache.ibatis.annotations.Param;
public interface WxmpTemplateMsgSubscribeStatusDao extends BaseDao<WxmpTemplateMsgSubscribeStatusEntity> {
WxMsgAuthInfoResultDTO getUserSubscribeStatusDTO(@Param("userId") String userId,
@Param("customerId") String customerId,
@Param("clientType") String clientType);
@Param("customerId") String customerId,
@Param("clientType") String clientType,
@Param("templateId") String templateId,
@Param("openId") String openId);
WxmpTemplateMsgSubscribeStatusEntity getUserSubscribeStatusEntity(@Param("userId") String userId,
@Param("customerId") String customerId,
@Param("clientType") String clientType);
@Param("customerId") String customerId,
@Param("clientType") String clientType,
@Param("templateId") String templateId,
@Param("openId") String openId);
/**
* @return
* @Description 更新用户授权信息
*
* @author sun
*/
int updateUserSubscribe(ActivationSubscribeFormDTO formDTO);
}

33
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/dao/WxmpWorkUserSubscribeDao.java

@ -36,11 +36,12 @@ public interface WxmpWorkUserSubscribeDao extends BaseDao<WxmpWorkUserSubscribeE
* @param openId
* @param templateId
* @param customerId
* @param userId
* @return java.lang.Integer
* @Author liushaowen
* @Date 2020/10/22 9:31
*/
Integer getWorkSubscribeInfo(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId);
Integer getWorkSubscribeInfo(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId,@Param("userId") String userId);
/**
* @Description 减少订阅条数
@ -52,7 +53,7 @@ public interface WxmpWorkUserSubscribeDao extends BaseDao<WxmpWorkUserSubscribeE
* @Author liushaowen
* @Date 2020/10/22 9:38
*/
int decreaseWorkSubscribeCount(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId, @Param("num") int i);
int decreaseWorkSubscribeCount(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId, @Param("num") int decr,@Param("userId") String userId);
/**
* @Description 清空订阅数修改订阅状态
@ -63,16 +64,22 @@ public interface WxmpWorkUserSubscribeDao extends BaseDao<WxmpWorkUserSubscribeE
* @Author liushaowen
* @Date 2020/10/22 13:22
*/
int clearWorkSubscribeCount(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId);
int clearWorkSubscribeCount(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId,@Param("userId") String userId);
/**
* @Description 获取模板id
* @param openId
* @param templateId
* @param customerId
* @return java.lang.String
* @Author liushaowen
* @Date 2020/10/23 10:54
*/
String getWorkSubscribeTemplateId(@Param("openId") String openId, @Param("templateId") String templateId, @Param("customerId") String customerId);
WxmpWorkUserSubscribeEntity getWxWorkSubscribe(@Param("userId") String userId,
@Param("customerId") String customerId,
@Param("templateId") String templateId,
@Param("openId") String openId
);
void incrSubscribeCount(@Param("incr") int incr,
@Param("userId") String userId,
@Param("customerId") String customerId,
@Param("templateId") String templateId,
@Param("openId") String workOpenId);
void unSubscribe(@Param("userId") String userId,
@Param("customerId")String customerId,
@Param("templateId")String templateId,
@Param("workOpenId")String workOpenId);
}

5
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/UserMessageEntity.java

@ -70,4 +70,9 @@ public class UserMessageEntity extends BaseEpmetEntity {
*/
private String readFlag;
/**
* 调用者
*/
private String referer;
}

10
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/WxmpMsgSendRecordEntity.java

@ -43,6 +43,11 @@ public class WxmpMsgSendRecordEntity extends BaseEpmetEntity {
*/
private String customerId;
/**
* 网格Id居民端跟网格有关的则有值工作端以及一些居民端和网格没关的存*
*/
private String gridId;
/**
* 所属端类型 居民端:resi 工作端:work
*/
@ -93,4 +98,9 @@ public class WxmpMsgSendRecordEntity extends BaseEpmetEntity {
*/
private String reason;
/**
* 调用方
*/
private String referer;
}

8
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/WxmpTemplateMsgSubscribeStatusEntity.java

@ -73,4 +73,12 @@ public class WxmpTemplateMsgSubscribeStatusEntity extends BaseEpmetEntity {
*/
private String wxSubscribeStatus;
/**模板id*/
private String templateId;
/**
* 微信openId
*/
private String wxOpenId;
}

5
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/excel/UserMessageExcel.java

@ -49,6 +49,9 @@ public class UserMessageExcel {
@Excel(name = "消息标题")
private String title;
@Excel(name = "调用者")
private String referer;
@Excel(name = "消息通知内容")
private String messageContent;
@ -74,4 +77,4 @@ public class UserMessageExcel {
private Date updatedTime;
}
}

8
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/excel/WxmpMsgSendRecordExcel.java

@ -37,6 +37,9 @@ public class WxmpMsgSendRecordExcel {
@Excel(name = "客户Id 客户Id")
private String customerId;
@Excel(name = "网格Id")
private String gridId;
@Excel(name = "所属端类型 居民端:resi 工作端:work")
private String clientType;
@ -67,6 +70,9 @@ public class WxmpMsgSendRecordExcel {
@Excel(name = "发送失败的原因")
private String reason;
@Excel(name = "调用者")
private String referer;
@Excel(name = "删除标识")
private Integer delFlag;
@ -86,4 +92,4 @@ public class WxmpMsgSendRecordExcel {
private Date updatedTime;
}
}

25
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/properties/ThreadProperties.java

@ -0,0 +1,25 @@
package com.epmet.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 线程池属性类
*/
@ConfigurationProperties(prefix = "thread")
@Data
public class ThreadProperties {
private ThreadPoolProperties threadPool;
@Data
public static class ThreadPoolProperties {
private int corePoolSize;
private int maxPoolSize;
private int queueCapacity;
private int keepAlive;
public ThreadPoolProperties() {
}
}
}

4
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/redis/WxmpMessageRedis.java

@ -2,6 +2,8 @@ package com.epmet.redis;
import com.epmet.commons.tools.redis.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -15,6 +17,7 @@ import java.util.Map;
@Slf4j
@Component
public class WxmpMessageRedis {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private RedisUtils redisUtils;
@ -24,6 +27,7 @@ public class WxmpMessageRedis {
* @author zxc
*/
public Map<String,Object> getAuthorizerRefreshToken(String key){
logger.info("发送微信订阅消息,获取accesstoken的key值:" + key);
Map<String, Object> result = redisUtils.hGetAll("epmet:wechartthird:authorizerrefreshtoken:" + key);
return result;
}

20
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/WxmpMessageExtService.java

@ -0,0 +1,20 @@
package com.epmet.service;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.WxmpMessagePushFormDTO;
import com.epmet.dto.form.WxmpTemplateListFormDTO;
import com.epmet.dto.result.WxmpTemplateListResultDTO;
import java.util.List;
public interface WxmpMessageExtService {
Result pushWxmpMessage(List<WxmpMessagePushFormDTO> dto);
/**
* @return
* @Description 消息-获取订阅消息模板列表
* @author sun
*/
List<WxmpTemplateListResultDTO> wxmpTemplateList(WxmpTemplateListFormDTO formDTO);
}

16
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/WxmpMessageService.java

@ -17,9 +17,11 @@
package com.epmet.service;
import com.epmet.dto.form.ActivationSubscribeFormDTO;
import com.epmet.dto.form.GetTemplateListFormDTO;
import com.epmet.dto.form.WxSubscribeMessageFormDTO;
import com.epmet.dto.result.GetTemplateListResultDTO;
import com.epmet.dto.result.WxMsgAuthInfoResultDTO;
import java.util.List;
@ -31,7 +33,12 @@ import java.util.List;
*/
public interface WxmpMessageService {
void saveSysAuthorizeInfo(String customerId, String clientType, String alwaysVisit, String subscribeStatus, String userId);
void saveSysAuthorizeInfo(String customerId, String clientType, String alwaysVisit, String subscribeStatus, String userId, String templateId);
WxMsgAuthInfoResultDTO getAuthorizationInfo(String customerId, String clientType, String loginUserId, String templateId);
void saveWxSubscribe(String customerId, String clientType, String templateId, String wxAlwaysVisit, String wxSubscribeStatus,
String behaviorType, String userId);
/**
* @Description 发送订阅消息
@ -48,4 +55,11 @@ public interface WxmpMessageService {
* @author sun
*/
List<GetTemplateListResultDTO> templateList(GetTemplateListFormDTO formDTO);
/**
* @return
* @Description 居民端工作端-重新激活授权页
* @author sun
*/
void activationSubscribe(ActivationSubscribeFormDTO formDTO);
}

83
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/WxmpMessageExtServiceImpl.java

@ -0,0 +1,83 @@
package com.epmet.service.impl;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.ExtConstant;
import com.epmet.dto.form.*;
import com.epmet.dto.result.CustomerTemplateListResultDTO;
import com.epmet.dto.result.WxmpTemplateListResultDTO;
import com.epmet.service.UserMessageService;
import com.epmet.service.WxmpMessageExtService;
import com.epmet.service.WxmpMessageService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @description:
* @author: liushaowen
* @date: 2020/11/2 14:54
*/
@Service
public class WxmpMessageExtServiceImpl implements WxmpMessageExtService {
@Autowired
private WxmpMessageService wxmpMessageService;
@Autowired
private UserMessageService userMessageService;
@Autowired
private WxmpMessageServiceImpl wxmpMessageServiceImpl;
@Override
public Result pushWxmpMessage(List<WxmpMessagePushFormDTO> dtos) {
List<WxSubscribeMessageFormDTO> wxmpMsgList = new ArrayList<>();
List<UserMessageFormDTO> userMsgList = new ArrayList<>();
for (WxmpMessagePushFormDTO dto : dtos) {
//站内信
UserMessageFormDTO userMessageFormDTO = new UserMessageFormDTO();
BeanUtils.copyProperties(dto,userMessageFormDTO);
userMessageFormDTO.setTitle("您有一条"+dto.getTitle());
userMsgList.add(userMessageFormDTO);
//如果推送微信订阅flag为"1",推送微信订阅
if (ExtConstant.PUSH_WXMP.equals(dto.getPushWxmpFlag())){
WxSubscribeMessageFormDTO wxSubscribeMessageFormDTO = new WxSubscribeMessageFormDTO();
BeanUtils.copyProperties(dto,wxSubscribeMessageFormDTO);
//设置ClientType
if (ExtConstant.APP_RESI.equals(dto.getApp())){
wxSubscribeMessageFormDTO.setClientType(ExtConstant.APP_RESI);
}
if (ExtConstant.APP_GOV.equals(dto.getApp())){
wxSubscribeMessageFormDTO.setClientType(ExtConstant.APP_WORK);
}
wxSubscribeMessageFormDTO.setBehaviorType(dto.getTitle());
wxSubscribeMessageFormDTO.setMessageTime(new Date());
wxmpMsgList.add(wxSubscribeMessageFormDTO);
}
}
wxmpMessageService.sendWxSubscribeMessage(wxmpMsgList);
return userMessageService.saveUserMessageList(userMsgList);
}
/**
* @return
* @Description 消息-获取订阅消息模板列表
* @author sun
*/
@Override
public List<WxmpTemplateListResultDTO> wxmpTemplateList(WxmpTemplateListFormDTO formDTO) {
List<WxmpTemplateListResultDTO> resultList = new ArrayList<>();
CustomerTemplateListFormDTO dto = ConvertUtils.sourceToTarget(formDTO, CustomerTemplateListFormDTO.class);
List<CustomerTemplateListResultDTO> list = wxmpMessageServiceImpl.customerTemplateList(dto);
list.forEach(l->{
if(formDTO.getClientType().equals(l.getClientType())){
WxmpTemplateListResultDTO result = ConvertUtils.sourceToTarget(l, WxmpTemplateListResultDTO.class);
resultList.add(result);
}
});
return resultList;
}
}

494
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/WxmpMessageServiceImpl.java

@ -19,25 +19,22 @@ package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.enums.EnvEnum;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.exception.ValidateException;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.constant.WxMsgTemplateSubscribeStatus;
import com.epmet.constant.WxmpMessageConstant;
import com.epmet.dao.WxmpResiUserSubscribeDao;
import com.epmet.dao.WxmpTemplateMsgSubscribeStatusDao;
import com.epmet.dao.WxmpUserSubscribeRecordDao;
import com.epmet.dao.WxmpWorkUserSubscribeDao;
import com.epmet.dto.form.GetTemplateListFormDTO;
import com.epmet.dto.form.StaffBasicInfoFormDTO;
import com.epmet.dto.form.UserBasicInfoFormDTO;
import com.epmet.dto.form.WxSubscribeMessageFormDTO;
import com.epmet.dto.result.GetTemplateListResultDTO;
import com.epmet.entity.WxmpMsgSendRecordEntity;
import com.epmet.entity.WxmpTemplateMsgSubscribeStatusEntity;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.entity.*;
import com.epmet.exception.WxSubscribeException;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.redis.WxmpMessageRedis;
@ -48,11 +45,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -85,6 +82,9 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
@Autowired
private WxmpMsgSendRecordService wxmpMsgSendRecordService;
@Autowired
private WxmpUserSubscribeRecordDao subscribeRecordDao;
/**
* @return void
* @Description 保存系统授权信息
@ -92,8 +92,18 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
* @date 2020.10.21 17:29
*/
@Override
public void saveSysAuthorizeInfo(String customerId, String clientType, String alwaysVisit, String subscribeStatus, String userId) {
WxmpTemplateMsgSubscribeStatusEntity userSubscribeStatusEntity = msgSubscribeStatusDao.getUserSubscribeStatusEntity(userId, customerId, clientType);
public void saveSysAuthorizeInfo(String customerId, String clientType, String alwaysVisit, String subscribeStatus, String userId, String templateId) {
String openId = null;
switch (clientType) {
case AppClientConstant.APP_GOV:
openId = getWorkOpenId(userId);
break;
case AppClientConstant.APP_RESI:
openId = getResiOpenId(userId);
break;
}
WxmpTemplateMsgSubscribeStatusEntity userSubscribeStatusEntity = msgSubscribeStatusDao.getUserSubscribeStatusEntity(userId, customerId, clientType, templateId, openId);
if (userSubscribeStatusEntity != null) {
userSubscribeStatusEntity.setAlwaysVisit(alwaysVisit);
userSubscribeStatusEntity.setSubscribeStatus(subscribeStatus);
@ -104,7 +114,9 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
userSubscribeStatusEntity = new WxmpTemplateMsgSubscribeStatusEntity();
userSubscribeStatusEntity.setCustomerId(customerId);
userSubscribeStatusEntity.setClientType(clientType);
userSubscribeStatusEntity.setTemplateId(templateId);
userSubscribeStatusEntity.setAlwaysVisit(alwaysVisit);
userSubscribeStatusEntity.setWxOpenId(openId);
userSubscribeStatusEntity.setSubscribeStatus(subscribeStatus);
userSubscribeStatusEntity.setUserId(userId);
msgSubscribeStatusDao.insert(userSubscribeStatusEntity);
@ -120,7 +132,17 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
@Override
public void sendWxSubscribeMessage(List<WxSubscribeMessageFormDTO> msgList) {
logger.info("待发送订阅消息数量:{}", msgList.size());
if (!(msgList.size() > NumConstant.ZERO)) {
throw new RenException("待发送消息不能为空");
}
int succecssCount = 0;
// 获取templateId
CustomerTemplateListFormDTO customerTemplateListFormDTO = new CustomerTemplateListFormDTO();
customerTemplateListFormDTO.setCustomerId(msgList.get(0).getCustomerId());
customerTemplateListFormDTO.setPublicId(WxmpMessageConstant.TEMPLATE_TYPE);
List<CustomerTemplateListResultDTO> customerTemplateListResultDTOS = customerTemplateList(customerTemplateListFormDTO);
// 获取AccessToken
Map<String,String> accessTokenMap = getAccessToken(msgList.get(0).getCustomerId());
for (WxSubscribeMessageFormDTO msg : msgList) {
try {
String userId = msg.getUserId();
@ -133,51 +155,54 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
if (WxmpMessageConstant.RESI.equals(clientType)) {
UserBasicInfoFormDTO userBasicInfoFormDTO = new UserBasicInfoFormDTO();
userBasicInfoFormDTO.setUserId(userId);
openId = epmetUserOpenFeignClient.getUserBasicInfo(userBasicInfoFormDTO).getData().getOpenId();
} else if (WxmpMessageConstant.WORK.equals(clientType)) {
Result<UserBasicInfo> userBasicInfo = epmetUserOpenFeignClient.getUserBasicInfo(userBasicInfoFormDTO);
if (userBasicInfo.getCode() != 0){
throw new Exception(userBasicInfo.getInternalMsg());
}else {
openId = userBasicInfo.getData().getOpenId();
}
} else if (WxmpMessageConstant.GOV_DB.equals(clientType)) {
StaffBasicInfoFormDTO staffBasicInfoFormDTO = new StaffBasicInfoFormDTO();
staffBasicInfoFormDTO.setStaffId(userId);
openId = epmetUserOpenFeignClient.getStaffBasicInfo(staffBasicInfoFormDTO).getData().getOpenId();
Result<StaffBasicInfo> staffBasicInfo = epmetUserOpenFeignClient.getStaffBasicInfo(staffBasicInfoFormDTO);;
if (staffBasicInfo.getCode() != 0){
throw new Exception(staffBasicInfo.getInternalMsg());
}else {
openId = staffBasicInfo.getData().getOpenId();
}
} else {
throw new WxSubscribeException("clientType有误", "", openId);
}
} catch (Exception e) {
throw new WxSubscribeException("连接User服务失败", "", "");
e.printStackTrace();
throw new WxSubscribeException("获取openId失败:" + e.getMessage(), "", "");
}
if (StringUtils.isBlank(openId)) {
throw new WxSubscribeException("openId获取失败", "", "");
throw new WxSubscribeException("该userId未查询到关联的openId", "", "");
}
//获取accessToken
StringBuilder key = new StringBuilder(msg.getCustomerId()).append(":").append(msg.getClientType());
Map<String, Object> authorizerRefreshToken = new HashMap<>();
try {
authorizerRefreshToken = wxmpMessageRedis.getAuthorizerRefreshToken(key.toString());
} catch (Exception e) {
throw new WxSubscribeException("连接缓存服务器失败", "", openId);
}
String accessToken = (String) authorizerRefreshToken.get(WxmpMessageConstant.AUTHORIZER_ACCESS_TOKEN);
if (StringUtils.isBlank(accessToken)) {
throw new WxSubscribeException("accessToken获取失败", "", openId);
}
//获取模板id
if (WxmpMessageConstant.RESI.equals(clientType)) {
templateId = wxmpResiUserSubscribeDao.getResiSubscribeTemplateId(openId, templateId, customerId);
} else if (WxmpMessageConstant.WORK.equals(clientType)) {
templateId = wxmpWorkUserSubscribeDao.getWorkSubscribeTemplateId(openId, templateId, customerId);
if (customerTemplateListResultDTOS.size() > NumConstant.ZERO) {
for (CustomerTemplateListResultDTO customerTemplateListResultDTO : customerTemplateListResultDTOS) {
if (WxmpMessageConstant.GOV_REDIS.equals(customerTemplateListResultDTO.getClientType())) {
customerTemplateListResultDTO.setClientType(WxmpMessageConstant.GOV_DB);
}
if (clientType.equals(customerTemplateListResultDTO.getClientType())) {
templateId = customerTemplateListResultDTO.getTemplateId();
}
}
} else {
throw new WxSubscribeException("获取模板id失败", "", openId);
}
if (StringUtils.isBlank(templateId)) {
throw new WxSubscribeException("获取模板id失败", "", openId);
}
//判断用户是否有次数
Integer count = null;
if (WxmpMessageConstant.RESI.equals(clientType)) {
count = wxmpResiUserSubscribeDao.getResiSubscribeInfo(openId, templateId, customerId);
} else if (WxmpMessageConstant.WORK.equals(clientType)) {
count = wxmpWorkUserSubscribeDao.getWorkSubscribeInfo(openId, templateId, customerId);
count = wxmpResiUserSubscribeDao.getResiSubscribeInfo(openId, templateId, customerId, userId);
} else if (WxmpMessageConstant.GOV_DB.equals(clientType)) {
count = wxmpWorkUserSubscribeDao.getWorkSubscribeInfo(openId, templateId, customerId, userId);
}
if (count == null) {
//用户未订阅
@ -187,6 +212,17 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
throw new WxSubscribeException("用户可用额度不足", templateId, openId);
}
//获取accessToken
String accessToken = null;
if (WxmpMessageConstant.RESI.equals(clientType)) {
accessToken = accessTokenMap.get("resiToken");
} else if (WxmpMessageConstant.GOV_DB.equals(clientType)) {
accessToken = accessTokenMap.get("govToken");
}
if (StringUtils.isBlank(accessToken)) {
throw new WxSubscribeException("accessToken获取失败"+accessTokenMap.get("errorMsg"), "", openId);
}
//发送消息
JSONObject jsonObject = new JSONObject();
JSONObject data = new JSONObject();
@ -194,16 +230,30 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
jsonObject.put(WxmpMessageConstant.ACCESS_TOKEN, accessToken);
jsonObject.put(WxmpMessageConstant.TOUSER, openId);
jsonObject.put(WxmpMessageConstant.TEMPLATE_ID, templateId);
data.put(WxmpMessageConstant.TITLE, new JSONObject().put("value", ("您有一条" + msg.getBehaviorType()).substring(0, WxmpMessageConstant.TITLE_LIMIT)));
data.put(WxmpMessageConstant.MESSAGE_CONTENT, new JSONObject().put("value", msg.getMessageContent().substring(0, WxmpMessageConstant.MESSAGE_CONTENT_LIMIT)));
data.put(WxmpMessageConstant.MESSAGE_TIME, new JSONObject().put("value", new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date())));
//标题
String title = "您有一条" + msg.getBehaviorType();
JSONObject titleJson = new JSONObject();
titleJson.put("value", title.length() > WxmpMessageConstant.TITLE_LIMIT ? title.substring(0, WxmpMessageConstant.TITLE_LIMIT) : title);
data.put(WxmpMessageConstant.TITLE, titleJson);
//内容
JSONObject contentJson = new JSONObject();
contentJson.put("value", msg.getMessageContent().length() > WxmpMessageConstant.MESSAGE_CONTENT_LIMIT ? msg.getMessageContent().substring(0, WxmpMessageConstant.MESSAGE_CONTENT_LIMIT) : msg.getMessageContent());
data.put(WxmpMessageConstant.MESSAGE_CONTENT, contentJson);
//时间
JSONObject timeJson = new JSONObject();
timeJson.put("value", new SimpleDateFormat("yyyy-MM-dd HH:mm").format(msg.getMessageTime()));
data.put(WxmpMessageConstant.MESSAGE_TIME, timeJson);
jsonObject.put(WxmpMessageConstant.DATA, data);
EnvEnum envEnum = EnvEnum.getCurrentEnv();
//选填项
if (WxmpMessageConstant.RESI.equals(clientType)) {
jsonObject.put(WxmpMessageConstant.PAGE, WxmpMessageConstant.PAGE_RESI);
} else if (WxmpMessageConstant.WORK.equals(clientType)) {
jsonObject.put(WxmpMessageConstant.PAGE, WxmpMessageConstant.PAGE_WORK);
StringBuilder resiPage = new StringBuilder(WxmpMessageConstant.PAGE_URL);
resiPage.append("?customerId=").append(customerId).append("&gridId=").append(msg.getGridId());
jsonObject.put(WxmpMessageConstant.PAGE, resiPage.toString());
} else if (WxmpMessageConstant.GOV_DB.equals(clientType)) {
StringBuilder govPage = new StringBuilder(WxmpMessageConstant.PAGE_URL);
govPage.append("?customerId=").append(customerId).append("&staffId=").append(userId);
jsonObject.put(WxmpMessageConstant.PAGE, govPage.toString());
}
//开发环境
if ("dev".equals(envEnum.getCode())) {
@ -223,9 +273,9 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
//订阅条数-1
int decrease = 0;
if (WxmpMessageConstant.RESI.equals(clientType)) {
decrease = wxmpResiUserSubscribeDao.decreaseResiSubscribeCount(openId, templateId, customerId, 1);
} else if (WxmpMessageConstant.WORK.equals(clientType)) {
decrease = wxmpWorkUserSubscribeDao.decreaseWorkSubscribeCount(openId, templateId, customerId, 1);
decrease = wxmpResiUserSubscribeDao.decreaseResiSubscribeCount(openId, templateId, customerId, 1,userId);
} else if (WxmpMessageConstant.GOV_DB.equals(clientType)) {
decrease = wxmpWorkUserSubscribeDao.decreaseWorkSubscribeCount(openId, templateId, customerId, 1,userId);
}
if (decrease == 0) {
logger.error("消息{}发送成功但订阅条数-1失败", JSON.toJSONString(msg));
@ -241,9 +291,9 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
if (errcode.equals(WxmpMessageConstant.USER_REFUSED)) {
int clear = 0;
if (WxmpMessageConstant.RESI.equals(clientType)) {
clear = wxmpResiUserSubscribeDao.clearResiSubscribeCount(openId, templateId, customerId);
} else if (WxmpMessageConstant.WORK.equals(clientType)) {
clear = wxmpWorkUserSubscribeDao.clearWorkSubscribeCount(openId, templateId, customerId);
clear = wxmpResiUserSubscribeDao.clearResiSubscribeCount(openId, templateId, customerId,userId);
} else if (WxmpMessageConstant.GOV_DB.equals(clientType)) {
clear = wxmpWorkUserSubscribeDao.clearWorkSubscribeCount(openId, templateId, customerId,userId);
}
if (clear == 0) {
logger.error("消息{}发送失败且清空订阅条数失败", JSON.toJSONString(msg));
@ -251,9 +301,8 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
}
//抛出错误
throw new WxSubscribeException(String.valueOf(resultMap.get(WxmpMessageConstant.ERR_MSG)),templateId, openId);
throw new WxSubscribeException(String.valueOf(resultMap.get(WxmpMessageConstant.ERR_MSG)), templateId, openId);
}
succecssCount++;
} catch (Exception e) {
String errMsg = e.getMessage();
@ -284,39 +333,326 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
wxmpMsgSendRecordEntity.setCustomerId(msg.getCustomerId());
wxmpMsgSendRecordEntity.setClientType(msg.getClientType());
wxmpMsgSendRecordEntity.setTemplateId(templateId);
wxmpMsgSendRecordEntity.setGridId(msg.getGridId() == null ? "" : msg.getGridId());
wxmpMsgSendRecordEntity.setUserId(msg.getUserId());
wxmpMsgSendRecordEntity.setWxOpenId(openId);
wxmpMsgSendRecordEntity.setBehaviorType(msg.getBehaviorType());
wxmpMsgSendRecordEntity.setTitle("您有一条" + msg.getBehaviorType());
wxmpMsgSendRecordEntity.setMessageContent(msg.getMessageContent());
wxmpMsgSendRecordEntity.setMessageTime(new Date());
wxmpMsgSendRecordEntity.setMessageTime(msg.getMessageTime());
wxmpMsgSendRecordEntity.setResult(status);
wxmpMsgSendRecordEntity.setReferer(msg.getReferer());
return wxmpMsgSendRecordEntity;
}
/**
* @return
* @Description 居民端工作端-获取客户小程序模板列表
* @author sun
*/
@Override
public List<GetTemplateListResultDTO> templateList(GetTemplateListFormDTO formDTO) {
GetTemplateListFormDTO dto = ConvertUtils.sourceToTarget(formDTO, GetTemplateListFormDTO.class);
String url = "https://epmet-cloud.elinkservice.cn/api/third/personaltemplate/templatelist";
//String url = "http://localhost:8080/api/third/personaltemplate/templatelist";
String data = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(dto)).getData();
logger.info("ThirdLoginServiceImpl.getUserWeChat:httpclient->url:"+url+",结果->"+data);
JSONObject toResult = JSON.parseObject(data);
Result mapToResult = ConvertUtils.mapToEntity(toResult, Result.class);
if (null != toResult.get("code")) {
mapToResult.setCode(((Integer) toResult.get("code")).intValue());
}
if (!mapToResult.success()) {
logger.error("调用epmet_third服务获取小程序消息订阅模板数据失败");
throw new RenException(mapToResult.getCode());
}
List<GetTemplateListResultDTO> resultList = (List<GetTemplateListResultDTO>) mapToResult.getData();
return resultList;
}
//获取AccessToken
private Map<String,String> getAccessToken(String customerId) {
EnvEnum envEnum = EnvEnum.getCurrentEnv();
String resiAccessToken = null;
String govAccessToken = null;
String errorMsg = null;
if (EnvEnum.PROD.getCode().equals(envEnum.getCode())) {
//居民端
StringBuilder resiKey = new StringBuilder(customerId).append(":").append(WxmpMessageConstant.RESI);
Map<String, Object> authorizerRefreshToken = new HashMap<>();
try {
authorizerRefreshToken = wxmpMessageRedis.getAuthorizerRefreshToken(resiKey.toString());
} catch (Exception e) {
errorMsg = e.getMessage();
}
resiAccessToken = (String) authorizerRefreshToken.get(WxmpMessageConstant.AUTHORIZER_ACCESS_TOKEN);
//政府端
StringBuilder govKey = new StringBuilder(customerId).append(":").append(WxmpMessageConstant.GOV_REDIS);
authorizerRefreshToken = new HashMap<>();
try {
authorizerRefreshToken = wxmpMessageRedis.getAuthorizerRefreshToken(resiKey.toString());
} catch (Exception e) {
errorMsg = e.getMessage();
}
govAccessToken = (String) authorizerRefreshToken.get(WxmpMessageConstant.AUTHORIZER_ACCESS_TOKEN);
} else {
String url = "https://epmet-cloud.elinkservice.cn/api/third/pacustomer/tokenlist";
JSONObject postData = new JSONObject();
postData.put("customerId", customerId);
String data = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(postData)).getData();
JSONObject toResult = JSON.parseObject(data);
Result mapToResult = ConvertUtils.mapToEntity(toResult, Result.class);
if (null != toResult.get("code")) {
mapToResult.setCode(((Integer) toResult.get("code")).intValue());
}
if (!mapToResult.success()) {
errorMsg = StringUtils.isBlank(mapToResult.getMsg()) ? mapToResult.getInternalMsg() : mapToResult.getMsg();
}
Object CustomerTokensResultDTO = mapToResult.getData();
JSONObject json = JSON.parseObject(CustomerTokensResultDTO.toString());
CustomerTokensResultDTO customerTokensResultDTO = ConvertUtils.mapToEntity(json, CustomerTokensResultDTO.class);
resiAccessToken = customerTokensResultDTO.getResiAuthorizerToken();
govAccessToken = customerTokensResultDTO.getWorkAuthorizerToken();
}
Map resultMap = new HashMap();
resultMap.put("resiToken",resiAccessToken);
resultMap.put("govToken",govAccessToken);
resultMap.put("errorMsg",errorMsg);
return resultMap;
}
/**
* @return
* @Description 居民端工作端-获取客户小程序模板列表
* @author sun
*/
@Override
public List<GetTemplateListResultDTO> templateList(GetTemplateListFormDTO formDTO) {
GetTemplateListFormDTO dto = ConvertUtils.sourceToTarget(formDTO, GetTemplateListFormDTO.class);
String url = "https://epmet-cloud.elinkservice.cn/api/third/personaltemplate/templatelist";
//String url = "http://localhost:8080/api/third/personaltemplate/templatelist";
String data = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(dto)).getData();
logger.info("ThirdLoginServiceImpl.getUserWeChat:httpclient->url:" + url + ",结果->" + data);
JSONObject toResult = JSON.parseObject(data);
Result mapToResult = ConvertUtils.mapToEntity(toResult, Result.class);
if (null != toResult.get("code")) {
mapToResult.setCode(((Integer) toResult.get("code")).intValue());
}
if (!mapToResult.success()) {
logger.error("调用epmet_third服务获取小程序消息订阅模板数据失败");
throw new RenException(mapToResult.getCode());
}
List<GetTemplateListResultDTO> resultList = (List<GetTemplateListResultDTO>) mapToResult.getData();
return resultList;
/*List<Object> resultList = (List<Object>) mapToResult.getData();
List<CustomerTemplateListResultDTO> list = new ArrayList<>();
//必须转换
for(Object f:resultList){
JSONObject json = JSON.parseObject(f.toString());
CustomerTemplateListResultDTO ff = ConvertUtils.mapToEntity(json, CustomerTemplateListResultDTO.class);
list.add(ff);
}
return list;*/
}
/**
* @return
* @Description 查询客户两个端小程序对应的站内信模板Id
* @author sun
*/
public List<CustomerTemplateListResultDTO> customerTemplateList(CustomerTemplateListFormDTO formDTO) {
String url = "https://epmet-cloud.elinkservice.cn/api/third/personaltemplate/customertemplatelist";
String data = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(formDTO)).getData();
logger.info("ThirdLoginServiceImpl.customerTemplateList:httpclient->url:" + url + ",结果->" + data);
JSONObject toResult = JSON.parseObject(data);
Result mapToResult = ConvertUtils.mapToEntity(toResult, Result.class);
if (null != toResult.get("code")) {
mapToResult.setCode(((Integer) toResult.get("code")).intValue());
}
if (!mapToResult.success()) {
logger.error("调用epmet_third服务获取客户小程序消息订阅模板数据失败");
throw new RenException(mapToResult.getCode());
}
List<Object> resultList = (List<Object>) mapToResult.getData();
List<CustomerTemplateListResultDTO> list = new ArrayList<>();
//必须转换
for (Object f : resultList) {
JSONObject json = JSON.parseObject(f.toString());
CustomerTemplateListResultDTO ff = ConvertUtils.mapToEntity(json, CustomerTemplateListResultDTO.class);
list.add(ff);
}
return list;
}
@Override
public WxMsgAuthInfoResultDTO getAuthorizationInfo(String customerId, String clientType, String loginUserId, String templateId) {
String openId = null;
switch (clientType) {
case AppClientConstant.APP_RESI:
openId = getResiOpenId(loginUserId);
break;
case AppClientConstant.APP_GOV:
openId = getWorkOpenId(loginUserId);
break;
}
return msgSubscribeStatusDao.getUserSubscribeStatusDTO(loginUserId, customerId, clientType, templateId, openId);
}
@Transactional
@Override
public void saveWxSubscribe(String customerId, String clientType, String templateId, String wxAlwaysVisit,
String wxSubscribeStatus, String behaviorType, String userId) {
String openId;
// 1. 用户订阅信息表新增或者更新
if (AppClientConstant.APP_GOV.equals(clientType)) {
// 工作端
openId = getWorkOpenId(userId);
saveWxWorkSubscribe(customerId, templateId, wxSubscribeStatus, userId, openId, wxAlwaysVisit);
} else {
//居民端
openId = getResiOpenId(userId);
saveWxResiSubscribe(customerId, templateId, wxSubscribeStatus, userId, openId, wxAlwaysVisit);
}
// 2.保存行为记录
WxmpUserSubscribeRecordEntity record = new WxmpUserSubscribeRecordEntity();
record.setBehaviorType(behaviorType);
record.setCustomerId(customerId);
record.setTemplateId(templateId);
record.setUserId(userId);
record.setWxAlwaysVisit(wxAlwaysVisit);
record.setWxOpenId(openId);
record.setWxSubscribeStatus(wxSubscribeStatus);
subscribeRecordDao.insert(record);
// 3.更新用户模板订阅状态
WxmpTemplateMsgSubscribeStatusEntity subscribeStatusEntity = msgSubscribeStatusDao.getUserSubscribeStatusEntity(userId, customerId, clientType, templateId, openId);
if (subscribeStatusEntity == null) {
subscribeStatusEntity = new WxmpTemplateMsgSubscribeStatusEntity();
subscribeStatusEntity.setUserId(userId);
subscribeStatusEntity.setWxSubscribeStatus(wxSubscribeStatus);
subscribeStatusEntity.setTemplateId(templateId);
subscribeStatusEntity.setWxAlwaysVisit(wxAlwaysVisit);
subscribeStatusEntity.setCustomerId(customerId);
subscribeStatusEntity.setClientType(clientType);
subscribeStatusEntity.setWxOpenId(openId);
msgSubscribeStatusDao.insert(subscribeStatusEntity);
return;
}
subscribeStatusEntity.setWxAlwaysVisit(wxAlwaysVisit);
subscribeStatusEntity.setWxSubscribeStatus(wxSubscribeStatus);
msgSubscribeStatusDao.updateById(subscribeStatusEntity);
}
/**
* @return void
* @Description 保存居民端微信订阅信息
* @author wxz
* @date 2020.10.22 09:56
*/
private void saveWxResiSubscribe(String customerId, String templateId, String wxSubscribeStatus, String userId,
String openId, String wxAlwaysVisit) {
WxmpResiUserSubscribeEntity wxResiSubscribe = wxmpResiUserSubscribeDao.getWxResiSubscribe(userId, customerId, templateId, openId);
if (wxResiSubscribe == null) {
WxmpResiUserSubscribeEntity insert = new WxmpResiUserSubscribeEntity();
insert.setCount(WxMsgTemplateSubscribeStatus.SUBSCRIBE.equals(wxSubscribeStatus) ? 1 : 0);
insert.setCustomerId(customerId);
insert.setTemplateId(templateId);
insert.setUserId(userId);
insert.setWxOpenId(openId);
insert.setWxSubscribeStatus(wxSubscribeStatus);
wxmpResiUserSubscribeDao.insert(insert);
return;
}
if (WxMsgTemplateSubscribeStatus.SUBSCRIBE.equals(wxSubscribeStatus)) {
wxmpResiUserSubscribeDao.incrSubscribeCount(1, userId, customerId, templateId, openId);
} else if (WxMsgTemplateSubscribeStatus.UNSUBSCRIBE.equals(wxSubscribeStatus) && "yes".equals(wxAlwaysVisit)) {
// 总是+取消
wxmpResiUserSubscribeDao.unSubscribe(userId, customerId, templateId, openId);
wxmpResiUserSubscribeDao.clearResiSubscribeCount(openId, templateId, customerId, userId);
} else {
// 取消
wxmpResiUserSubscribeDao.unSubscribe(userId, customerId, templateId, openId);
}
}
/**
* @return void
* @Description 保存工作端订阅信息
* @author wxz
* @date 2020.10.22 14:21
*/
private void saveWxWorkSubscribe(String customerId, String templateId, String wxSubscribeStatus, String userId,
String openId, String wxAlwaysVisit) {
WxmpWorkUserSubscribeEntity wxWorkSubscribe = wxmpWorkUserSubscribeDao.getWxWorkSubscribe(userId, customerId, templateId, openId);
if (wxWorkSubscribe == null) {
WxmpWorkUserSubscribeEntity insert = new WxmpWorkUserSubscribeEntity();
insert.setCount(WxMsgTemplateSubscribeStatus.SUBSCRIBE.equals(wxSubscribeStatus) ? 1 : 0);
insert.setCustomerId(customerId);
insert.setTemplateId(templateId);
insert.setUserId(userId);
insert.setWxOpenId(openId);
insert.setWxSubscribeStatus(wxSubscribeStatus);
wxmpWorkUserSubscribeDao.insert(insert);
return;
}
if (WxMsgTemplateSubscribeStatus.SUBSCRIBE.equals(wxSubscribeStatus)) {
wxmpWorkUserSubscribeDao.incrSubscribeCount(1, userId, customerId, templateId, openId);
} else if (WxMsgTemplateSubscribeStatus.UNSUBSCRIBE.equals(wxSubscribeStatus) && "yes".equals(wxAlwaysVisit)) {
// 取消订阅+总是
wxmpWorkUserSubscribeDao.unSubscribe(userId, customerId, templateId, openId);
wxmpWorkUserSubscribeDao.clearWorkSubscribeCount(openId, templateId, customerId, userId);
} else {
// 取消订阅+不总是
wxmpWorkUserSubscribeDao.unSubscribe(userId, customerId, templateId, openId);
}
}
/**
* @return string
* @Description 根据UserId查询居民OpenId
* @author wxz
* @date 2020.10.22 13:35
*/
public String getResiOpenId(String userId) {
UserBasicInfoFormDTO bif = new UserBasicInfoFormDTO();
bif.setUserId(userId);
Result<UserBasicInfo> result = epmetUserOpenFeignClient.getUserBasicInfo(bif);
if (!result.success()) {
throw new RenException(String.format("查询居民OpenId失败,userId:%s,错误信息:%s", userId, result.getInternalMsg()));
}
UserBasicInfo userBasicInfo = result.getData();
if (userBasicInfo == null) {
throw new RenException(String.format("根据userId:%s,没有查询到居民OpenId", userId));
}
return userBasicInfo.getOpenId();
}
/**
* @return java.lang.String
* @Description 查询工作人员openId
* @author wxz
* @date 2020.10.22 14:46
*/
public String getWorkOpenId(String userId) {
StaffBasicInfoFormDTO form = new StaffBasicInfoFormDTO();
form.setStaffId(userId);
Result<StaffBasicInfo> result = epmetUserOpenFeignClient.getStaffBasicInfo(form);
if (!result.success()) {
throw new RenException(String.format("查询工作人员OpenId失败,userId:%s,错误信息:%s", userId, result.getInternalMsg()));
}
StaffBasicInfo staffBasicInfo = result.getData();
if (staffBasicInfo == null) {
throw new RenException(String.format("根据userId:%s,没有查询到工作人员OpenId", userId));
}
return staffBasicInfo.getOpenId();
}
/**
* @return
* @Description 居民端工作端-重新激活授权页
* @author sun
*/
@Override
public void activationSubscribe(ActivationSubscribeFormDTO formDTO) {
//1.根据所属端和用户Id查询对应的openId
String openId = "";
if (AppClientConstant.APP_GOV.equals(formDTO.getClientType())) {
// 工作端
openId = getWorkOpenId(formDTO.getUserId());
} else {
//居民端
openId = getResiOpenId(formDTO.getUserId());
}
formDTO.setOpenId(openId);
//2.更新我们自己授权页用户授权状态
if(msgSubscribeStatusDao.updateUserSubscribe(formDTO)<NumConstant.ONE){
throw new RenException("重新激活订阅操作失败");
}
}
}

2
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/WxmpMsgSendRecordServiceImpl.java

@ -104,6 +104,6 @@ public class WxmpMsgSendRecordServiceImpl extends BaseServiceImpl<WxmpMsgSendRec
@Override
@Transactional(rollbackFor = Exception.class)
public int saveRecord(WxmpMsgSendRecordEntity entity) {
return baseDao.saveRecord(entity);
return baseDao.insert(entity);
}
}

10
epmet-module/epmet-message/epmet-message-server/src/main/resources/bootstrap.yml

@ -118,4 +118,12 @@ ribbon:
#pageHelper分页插件
pagehelper:
helper-dialect: mysql
reasonable: false #分页合理化配置,例如输入页码为-1,则自动转化为最小页码1
reasonable: false #分页合理化配置,例如输入页码为-1,则自动转化为最小页码1
thread:
# 线程池配置
threadPool:
corePoolSize: @thread.pool.core-pool-size@
maxPoolSize: @thread.pool.max-pool-size@
queueCapacity: @thread.pool.queue-capacity@
keepAlive: @thread.pool.keep-alive@

98
epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.12.2__wxmp_message_template.sql

@ -0,0 +1,98 @@
CREATE TABLE `wxmp_template_msg_subscribe_status` (
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id ',
`CLIENT_TYPE` varchar(64) NOT NULL COMMENT '所属端类型 居民端:resi 工作端:gov',
`USER_ID` varchar(64) NOT NULL COMMENT '用户Id ',
`TEMPLATE_ID` varchar(64) DEFAULT NULL COMMENT '模板id',
`ALWAYS_VISIT` varchar(32) DEFAULT NULL COMMENT '是否总是访问 是:yes 否:no',
`SUBSCRIBE_STATUS` varchar(32) DEFAULT NULL COMMENT '订阅状态(订阅:subscribe 取消订阅:unsubscribe)',
`WX_ALWAYS_VISIT` varchar(32) DEFAULT NULL COMMENT 'wx是否总是访问 是:yes 否:no',
`WX_SUBSCRIBE_STATUS` varchar(32) DEFAULT NULL COMMENT 'wx订阅状态 (订阅:subscribe 取消订阅:unsubscribe)',
`DEL_FLAG` int(11) NOT NULL COMMENT '删除标识',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户模板消息订阅授权状态表(记录我们自己和微信的授权页用户勾选的状态)';
CREATE TABLE `wxmp_user_subscribe_record` (
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id ',
`TEMPLATE_ID` varchar(64) NOT NULL COMMENT '消息模板Id ',
`USER_ID` varchar(64) NOT NULL COMMENT '用户Id ',
`WX_OPEN_ID` varchar(64) NOT NULL COMMENT 'openId ',
`BEHAVIOR_TYPE` varchar(128) DEFAULT NULL COMMENT '行为类型 (入组申请、党员认证)等',
`WX_ALWAYS_VISIT` varchar(32) DEFAULT NULL COMMENT 'wx是否总是访问 是:yes 否:no',
`WX_SUBSCRIBE_STATUS` varchar(32) DEFAULT NULL COMMENT 'wx订阅状态(订阅:subscribe 取消订阅:unsubscribe)',
`DEL_FLAG` int(11) NOT NULL COMMENT '删除标识',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户触发订阅的行为记录表(同时记录微信授权页每次勾选的状态)';
CREATE TABLE `wxmp_resi_user_subscribe` (
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id ',
`TEMPLATE_ID` varchar(64) NOT NULL COMMENT '消息模板Id',
`USER_ID` varchar(64) NOT NULL COMMENT '用户Id',
`WX_OPEN_ID` varchar(64) NOT NULL COMMENT 'openId ',
`WX_SUBSCRIBE_STATUS` varchar(32) DEFAULT NULL COMMENT 'wx订阅状态,只记录用户最后一次操作的勾选状态 (订阅:subscribe 取消订阅:unsubscribe)',
`COUNT` int(11) DEFAULT NULL COMMENT '可用推送次数',
`DEL_FLAG` int(11) NOT NULL COMMENT '删除标识',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='居民端用户订阅模板消息次数记录表';
CREATE TABLE `wxmp_work_user_subscribe` (
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id ',
`TEMPLATE_ID` varchar(64) NOT NULL COMMENT '消息模板Id ',
`USER_ID` varchar(64) NOT NULL COMMENT '用户Id ',
`WX_OPEN_ID` varchar(64) NOT NULL COMMENT 'openId ',
`WX_SUBSCRIBE_STATUS` varchar(32) DEFAULT NULL COMMENT 'wx订阅状态,只记录用户最后一次操作的勾选状态 (订阅:subscribe 取消订阅:unsubscribe)',
`COUNT` int(11) DEFAULT NULL COMMENT '可用推送次数 ',
`DEL_FLAG` int(11) NOT NULL COMMENT '删除标识',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工作端用户订阅模板消息有效次数记录表 ';
CREATE TABLE `wxmp_msg_send_record` (
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id ',
`GRID_ID` varchar(64) NOT NULL COMMENT '网格Id (居民端跟网格有关的则有值,工作端以及一些居民端和网格没关的存*)',
`CLIENT_TYPE` varchar(64) NOT NULL COMMENT '所属端类型 居民端:resi 工作端:gov',
`TEMPLATE_ID` varchar(64) NOT NULL COMMENT '消息模板Id ',
`USER_ID` varchar(64) NOT NULL COMMENT '用户Id',
`WX_OPEN_ID` varchar(64) NOT NULL COMMENT 'openId ',
`BEHAVIOR_TYPE` varchar(128) NOT NULL COMMENT '行为类型(存title字段的中间值) 入组申请、党员认证等',
`TITLE` varchar(128) NOT NULL COMMENT '消息标题 ',
`MESSAGE_CONTENT` varchar(1024) NOT NULL COMMENT '消息内容 ',
`MESSAGE_TIME` datetime NOT NULL COMMENT '消息时间 ',
`RESULT` varchar(32) NOT NULL COMMENT '发送结果(成功:success 失败:error)',
`REASON` varchar(1024) DEFAULT NULL COMMENT '发送失败的原因,成功可以不记录',
`DEL_FLAG` int(11) NOT NULL COMMENT '删除标识',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息发送记录表';

1
epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.12.3__sub_status_add_column.sql

@ -0,0 +1 @@
alter table wxmp_template_msg_subscribe_status add column WX_OPEN_ID varchar(64) not null ;

1
epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.12.4__wxmp_message_template.sql

@ -0,0 +1 @@
ALTER TABLE wxmp_msg_send_record ADD REFERER VARCHAR(20) COMMENT '调用者';

1
epmet-module/epmet-message/epmet-message-server/src/main/resources/db/migration/V0.3.12.5__alter_user_message_add_column.sql

@ -0,0 +1 @@
ALTER TABLE user_message ADD REFERER VARCHAR(20) COMMENT '调用者';

84
epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/WxmpMsgSendRecordDao.xml

@ -3,46 +3,48 @@
<mapper namespace="com.epmet.dao.WxmpMsgSendRecordDao">
<insert id="saveRecord" parameterType="com.epmet.entity.WxmpMsgSendRecordEntity">
insert into wxmp_msg_send_record
(id,
customer_id,
client_type,
template_id,
user_id,
wx_open_id,
behavior_type,
title,
message_content,
message_time,
result,
reason,
del_flag,
revision,
created_by,
created_time,
updated_by,
updated_time)
values
(MD5(replace(UUID(),'-','')),
#{customerId},
#{clientType},
#{templateId},
#{userId},
#{wxOpenId},
#{behaviorType},
#{title},
#{messageContent},
#{messageTime},
#{result},
#{reason},
0,
0,
'sys',
now(),
'sys',
now()
)
</insert>
<!--<insert id="saveRecord" parameterType="com.epmet.entity.WxmpMsgSendRecordEntity">-->
<!--insert into wxmp_msg_send_record-->
<!--(id,-->
<!--customer_id,-->
<!--client_type,-->
<!--template_id,-->
<!--user_id,-->
<!--wx_open_id,-->
<!--grid_id-->
<!--behavior_type,-->
<!--title,-->
<!--message_content,-->
<!--message_time,-->
<!--result,-->
<!--reason,-->
<!--del_flag,-->
<!--revision,-->
<!--created_by,-->
<!--created_time,-->
<!--updated_by,-->
<!--updated_time)-->
<!--values-->
<!--(MD5(replace(UUID(),'-','')),-->
<!--#{customerId},-->
<!--#{clientType},-->
<!--#{templateId},-->
<!--#{userId},-->
<!--#{wxOpenId},-->
<!--#{gridId},-->
<!--#{behaviorType},-->
<!--#{title},-->
<!--#{messageContent},-->
<!--#{messageTime},-->
<!--#{result},-->
<!--#{reason},-->
<!--0,-->
<!--0,-->
<!--'sys',-->
<!--now(),-->
<!--'sys',-->
<!--now()-->
<!--)-->
<!--</insert>-->
</mapper>

68
epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/WxmpResiUserSubscribeDao.xml

@ -12,42 +12,78 @@
and customer_id = #{customerId}
and template_id = #{templateId}
and wx_open_id = #{openId}
and wx_subscribe_status = 'subscribe'
and user_id = #{userId}
</select>
<update id="decreaseResiSubscribeCount">
update Wxmp_Resi_User_Subscribe
set count = if(count <![CDATA[<]]> 1, 0, count - ${num} )
set count = if(count <![CDATA[<]]> 1, 0, count - ${num} ),
UPDATED_TIME = now()
where
del_flag = 0
and customer_id = #{customerId}
and template_id = #{templateId}
and wx_open_id = #{openId}
and wx_subscribe_status = 'subscribe'
and user_id = #{userId}
</update>
<update id="clearResiSubscribeCount" parameterType="String">
update Wxmp_Resi_User_Subscribe
set count = 0,
wx_subscribe_status = 'unsubscribe'
UPDATED_TIME = now()
where
del_flag = 0
and customer_id = #{customerId}
and template_id = #{templateId}
and wx_open_id = #{openId}
and user_id = #{userId}
</update>
<select id="getResiSubscribeTemplateId" resultType="String">
select
template_id
from Wxmp_Resi_User_Subscribe
where
del_flag = 0
and customer_id = #{customerId}
and template_id = #{templateId}
and wx_open_id = #{openId}
and wx_subscribe_status = 'subscribe'
limit 1
</select>
<!--增加订阅次数-->
<update id="incrSubscribeCount">
update wxmp_resi_user_subscribe
set COUNT=COUNT + #{incr},
WX_SUBSCRIBE_STATUS = 'subscribe',
UPDATED_TIME = now()
where USER_ID = #{userId}
and CUSTOMER_ID = #{customerId}
and TEMPLATE_ID = #{templateId}
and WX_OPEN_ID = #{resiOpenId}
and del_flag = 0
</update>
<!--取消订阅-->
<update id="unSubscribe">
update wxmp_resi_user_subscribe
set WX_SUBSCRIBE_STATUS = 'unsubscribe',
UPDATED_TIME = now()
where USER_ID = #{userId}
and CUSTOMER_ID = #{customerId}
and TEMPLATE_ID = #{templateId}
and WX_OPEN_ID = #{resiOpenId}
and del_flag = 0
</update>
<select id="getWxResiSubscribe" resultType="com.epmet.entity.WxmpResiUserSubscribeEntity">
select id,
customer_id,
template_id,
user_id,
wx_open_id,
wx_subscribe_status,
count,
del_flag,
revision,
created_by,
created_time,
updated_by,
updated_time
from wxmp_resi_user_subscribe
where USER_ID = #{userId}
and CUSTOMER_ID = #{customerId}
and TEMPLATE_ID = #{templateId}
and WX_OPEN_ID = #{openId}
and del_flag = 0
</select>
</mapper>

25
epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/WxmpTemplateMsgSubscribeStatusDao.xml

@ -17,11 +17,14 @@
created_by,
created_time,
updated_by,
updated_time
updated_time,
WX_OPEN_ID
from wxmp_template_msg_subscribe_status status
where USER_ID = #{userId}
and CUSTOMER_ID = #{customerId}
and CLIENT_TYPE = #{clientType}
and TEMPLATE_ID = #{templateId}
and WX_OPEN_ID = #{openId}
</select>
<select id="getUserSubscribeStatusEntity" resultType="com.epmet.entity.WxmpTemplateMsgSubscribeStatusEntity">
@ -38,10 +41,28 @@
created_by,
created_time,
updated_by,
updated_time
updated_time,
WX_OPEN_ID
from wxmp_template_msg_subscribe_status status
where USER_ID = #{userId}
and CUSTOMER_ID = #{customerId}
and CLIENT_TYPE = #{clientType}
and TEMPLATE_ID = #{templateId}
and WX_OPEN_ID = #{openId}
</select>
<update id="updateUserSubscribe">
UPDATE wxmp_template_msg_subscribe_status
SET ALWAYS_VISIT = #{alwaysVisit},
UPDATED_BY = #{userId},
UPDATED_TIME = NOW()
WHERE
del_flag = '0'
AND customer_id = #{customerId}
AND client_type = #{clientType}
AND user_id = #{userId}
AND wx_open_id = #{openId}
AND template_id = #{templateId}
</update>
</mapper>

68
epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/WxmpWorkUserSubscribeDao.xml

@ -2,6 +2,17 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.WxmpWorkUserSubscribeDao">
<update id="incrSubscribeCount">
update wxmp_work_user_subscribe
set COUNT=COUNT + #{incr},
WX_SUBSCRIBE_STATUS = 'subscribe',
UPDATED_TIME = now()
where USER_ID = #{userId}
and CUSTOMER_ID = #{customerId}
and TEMPLATE_ID = #{templateId}
and WX_OPEN_ID = #{openId}
and del_flag =0
</update>
<select id="getWorkSubscribeInfo" parameterType="String" resultType="Integer">
select
@ -9,41 +20,64 @@
from Wxmp_Work_User_Subscribe
where
del_flag =0
and customer_id = #{customerId}
and template_id = #{templateId}
and wx_open_id = #{openId}
and wx_subscribe_status = 'subscribe'
and user_id = #{userId}
</select>
<update id="decreaseWorkSubscribeCount">
update Wxmp_Work_User_Subscribe
set count = if(count &lt; 1, 0, count - ${num} )
set count = if(count &lt; 1, 0, count - ${num} ),
UPDATED_TIME = now()
where
del_flag =0
and customer_id = #{customerId}
and template_id = #{templateId}
and wx_open_id = #{openId}
and wx_subscribe_status = 'subscribe'
and user_id = #{userId}
</update>
<update id="clearWorkSubscribeCount" parameterType="String">
update Wxmp_Work_User_Subscribe
set count = 0,
wx_subscribe_status = 'unsubscribe'
set count = 0, UPDATED_TIME = now()
where
del_flag =0
and customer_id = #{customerId}
and template_id = #{templateId}
and wx_open_id = #{openId}
and user_id = #{userId}
</update>
<select id="getWorkSubscribeTemplateId" resultType="String">
select
template_id
from Wxmp_Work_User_Subscribe
where
del_flag = 0
and customer_id = #{customerId}
and template_id = #{templateId}
and wx_open_id = #{openId}
and wx_subscribe_status = 'subscribe'
limit 1
</select>
<update id="unSubscribe">
update wxmp_work_user_subscribe
set WX_SUBSCRIBE_STATUS = 'unsubscribe',
UPDATED_TIME = now()
where USER_ID = #{userId}
and CUSTOMER_ID = #{customerId}
and TEMPLATE_ID = #{templateId}
and WX_OPEN_ID = #{workOpenId}
and del_flag =0
</update>
<select id="getWxWorkSubscribe" resultType="com.epmet.entity.WxmpWorkUserSubscribeEntity">
select id,
customer_id,
template_id,
user_id,
wx_open_id,
wx_subscribe_status,
count,
del_flag,
revision,
created_by,
created_time,
updated_by,
updated_time
from wxmp_work_user_subscribe
where USER_ID = #{userId}
and CUSTOMER_ID = #{customerId}
and TEMPLATE_ID = #{templateId}
and WX_OPEN_ID = #{openId}
and del_flag =0
</select>
</mapper>

4
epmet-module/epmet-oss/epmet-oss-server/pom.xml

@ -92,6 +92,10 @@
<artifactId>fastdfs-client</artifactId>
<version>${fastdfs.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>
<build>

7
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AbstractCloudStorageService.java

@ -11,6 +11,7 @@ package com.epmet.cloud;
import com.epmet.commons.tools.utils.DateUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.UUID;
@ -75,4 +76,10 @@ public abstract class AbstractCloudStorageService {
*/
public abstract String uploadSuffix(InputStream inputStream, String suffix);
/**
* 文件下载
* sun
*/
public abstract void down() throws IOException;
}

54
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AliyunCloudStorageService.java

@ -9,10 +9,13 @@
package com.epmet.cloud;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.DownloadFileRequest;
import com.aliyun.oss.model.DownloadFileResult;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.exception.ModuleErrorCode;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
@ -54,4 +57,55 @@ public class AliyunCloudStorageService extends AbstractCloudStorageService {
public String uploadSuffix(InputStream inputStream, String suffix) {
return upload(inputStream, getPath(config.getAliyunPrefix(), suffix));
}
@Override
public void down() throws IOException {
OSSClient client = new OSSClient(config.getAliyunEndPoint(), config.getAliyunAccessKeyId(),
config.getAliyunAccessKeySecret());
try {
/*
//方式一
File file = new File("C:/Users/Administrator/Desktop/dd/df.jpg");
client.getObject(new GetObjectRequest(config.getAliyunBucketName(), "epmet/test/20201103/198f3c11490a44eb964c5c8e9989a507.jpg"), file);*/
/*
//方式二
OSSObject oo = client.getObject(config.getAliyunBucketName(), path);
InputStream is = oo.getObjectContent();
OutputStream os = null;
File file = new File("C:/Users/Administrator/Desktop/dd/aa.jpg");
try {
os = new FileOutputStream(file);
int len = 0;
byte[] buffer = new byte[8192];
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
} finally {
os.close();
is.close();
}*/
//方式三
DownloadFileRequest downloadFileRequest = new DownloadFileRequest(config.getAliyunBucketName(), "epmet/test/20201103/198f3c11490a44eb964c5c8e9989a507.jpg");
downloadFileRequest.setDownloadFile("C:/Users/Administrator/Desktop/dd/4.jpg");// 本地下载文件名称
downloadFileRequest.setPartSize(1 * 1024 * 1024);// 分片大小,取值范围为1B~5GB。
downloadFileRequest.setTaskNum(10);//10个任务并发下载,默认值为1
downloadFileRequest.setEnableCheckpoint(true);// 启动断点续传
// 下载文件
DownloadFileResult downloadRes = client.downloadFile(downloadFileRequest);
// 下载成功时,会返回文件元信息。
downloadRes.getObjectMetadata();
// 关闭OSSClient。
client.shutdown();
} catch (Exception e){
throw new RenException(ModuleErrorCode.OSS_UPLOAD_FILE_ERROR, e, "");
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}

6
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/FastDFSCloudStorageService.java

@ -15,6 +15,7 @@ import com.epmet.commons.tools.utils.SpringContextUtils;
import com.epmet.exception.ModuleErrorCode;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
@ -59,4 +60,9 @@ public class FastDFSCloudStorageService extends AbstractCloudStorageService {
public String uploadSuffix(InputStream inputStream, String suffix) {
return upload(inputStream, suffix);
}
@Override
public void down() throws IOException {
}
}

5
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/LocalCloudStorageService.java

@ -53,4 +53,9 @@ public class LocalCloudStorageService extends AbstractCloudStorageService {
public String uploadSuffix(InputStream inputStream, String suffix) {
return upload(inputStream, getPath(config.getLocalPrefix(), suffix));
}
@Override
public void down() throws IOException {
}
}

5
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QcloudCloudStorageService.java

@ -83,4 +83,9 @@ public class QcloudCloudStorageService extends AbstractCloudStorageService {
public String uploadSuffix(InputStream inputStream, String suffix) {
return upload(inputStream, getPath(config.getQcloudPrefix(), suffix));
}
@Override
public void down() throws IOException {
}
}

5
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QiniuCloudStorageService.java

@ -77,4 +77,9 @@ public class QiniuCloudStorageService extends AbstractCloudStorageService {
public String uploadSuffix(InputStream inputStream, String suffix) {
return upload(inputStream, getPath(config.getQiniuPrefix(), suffix));
}
@Override
public void down() throws IOException {
}
}

19
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java

@ -31,12 +31,17 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.apache.http.entity.ContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import springfox.documentation.annotations.ApiIgnore;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Map;
@ -218,4 +223,18 @@ public class OssController {
return ossService.uploadImg(file);
}
/**
* @param byteFile fileName
* @Description 外挂-文件上传
* @Author sun
**/
@PostMapping("ext/upload")
public Result<UploadImgResultDTO> extUpload(@RequestParam("byteFile") byte[] byteFile, @RequestParam("fileName") String fileName) throws IOException {
//public Result<UploadImgResultDTO> extUpload(@RequestParam("file") MultipartFile file, @RequestParam("fileName") String fileName) throws IOException {
//byte[] byteFile = file.getBytes();
InputStream inputStream = new ByteArrayInputStream(byteFile);
MultipartFile filse = new MockMultipartFile(ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);
return ossService.extUpload(filse,fileName);
}
}

2
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/OssService.java

@ -29,4 +29,6 @@ public interface OssService extends BaseService<OssEntity> {
int insertOssEntity(OssEntity ossEntity);
Result<UploadImgResultDTO> uploadImg(MultipartFile file);
Result<UploadImgResultDTO> extUpload(MultipartFile file, String fileName);
}

32
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/impl/OssServiceImpl.java

@ -72,4 +72,36 @@ public class OssServiceImpl extends BaseServiceImpl<OssDao, OssEntity> implement
dto.setUrl(url);
return new Result<UploadImgResultDTO>().ok(dto);
}
@Override
public Result<UploadImgResultDTO> extUpload(MultipartFile file, String fileName) {
try {
OssFactory.build().down();
} catch (IOException e) {
e.printStackTrace();
}
if (file.isEmpty()) {
return new Result<UploadImgResultDTO>().error(ModuleErrorCode.UPLOAD_FILE_EMPTY);
}
//上传文件
String extension = FilenameUtils.getExtension(fileName);
String url = null;
try {
url = OssFactory.build().uploadSuffix(file.getBytes(), extension);
} catch (IOException e) {
e.printStackTrace();
logger.error("图片上传异常");
throw new RenException("图片上传异常");
}
//保存文件信息
OssEntity ossEntity = new OssEntity();
ossEntity.setUrl(url);
baseDao.insert(ossEntity);
//文件信息
UploadImgResultDTO dto = new UploadImgResultDTO();
dto.setUrl(url);
return new Result<UploadImgResultDTO>().ok(dto);
}
}

32
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/WxmpTemplateListFormDTO.java

@ -0,0 +1,32 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 消息-获取订阅消息模板列表-接口入参
* @Author sun
*/
@Data
public class WxmpTemplateListFormDTO implements Serializable {
/**
* 客户Id
*/
@NotBlank(message="客户Id不能为空", groups = {AddUserInternalGroup.class})
private String customerId;
/**
* 微信公共模板库模板Id
*/
@NotBlank(message="公共模板Id不能为空", groups = {AddUserInternalGroup.class})
private String publicId;
/**
* 所属端(居民端:resi 工作端:work)
*/
@NotBlank(message="所属端不能为空", groups = {AddUserInternalGroup.class})
private String clientType;
public interface AddUserInternalGroup {}
}

30
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/WxmpTemplateListResultDTO.java

@ -0,0 +1,30 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 消息-获取订阅消息模板列表-接口返参
* @Author sun
*/
@Data
public class WxmpTemplateListResultDTO implements Serializable {
private static final long serialVersionUID = 6856602932571839314L;
/**
* 模板Id
*/
private String templateId;
/**
* 模板类型站内信提醒
*/
private String templateType;
/**
* 所属端居民端resi 工作端work
*/
private String clientType;
}

9
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/constant/UserMessageConstant.java

@ -10,6 +10,7 @@ public interface UserMessageConstant {
* 消息标题
*/
String ISSUE_TITLE = "您有一条议题消息";
String WXMP_ISSUE_TITLE = "议题消息";
/**
* 项目跟踪-消息标题
*/
@ -18,21 +19,21 @@ public interface UserMessageConstant {
/**
* 议题关闭时选择已解决
*/
String ISSUE_RESOLVED_MSG = "您好,您发表的话题\"%s\"问题已解决,解决方案是:%s";
String ISSUE_RESOLVED_MSG = "您发表的话题\"%s\"问题已解决,解决方案是:%s";
/**
* 议题关闭时选择无需解决
*/
String ISSUE_UNRESOLVED_MSG = "您好,您发表的话题\"%s\"问题无需解决,原因:%s";
String ISSUE_UNRESOLVED_MSG = "您发表的话题\"%s\"问题无需解决,原因:%s";
/**
* 议题转项目消息模板
*/
String ISSUE_SHIFT_PROJECT_MSG = "您好,您发表的话题\"%s\"的问题,已由%s部门处理,请查看。";
String ISSUE_SHIFT_PROJECT_MSG = "您发表的话题\"%s\"的问题,已由%s部门处理,请查看。";
/**
* 议题转项目消息模板
*/
String PROJECT_RESOLVED_MSG = "您好。您收到一条【%s】的新信息,请您尽快处理。";
String PROJECT_RESOLVED_MSG = "您收到一条【%s】的新信息,请您尽快处理。";
}

79
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java

@ -91,6 +91,8 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
private IssueVoteStatisticalDao issueVoteStatisticalDao;
@Autowired
private EpmetUserFeignClient epmetUserFeignClient;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Value("${openapi.scan.server.url}")
private String scanApiUrl;
@Value("${openapi.scan.method.textSyncScan}")
@ -433,6 +435,10 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
if (!saveUserMessageList(topicDTO, messageContent, entity).success()) {
throw new RenException(IssueConstant.SAVE_MSG_EXCEPTION);
}
//4.4:2020.10.26 添加推送微信订阅消息功能 sun
if (!saveWxmpMessageList(topicDTO, messageContent, entity).success()) {
logger.error("议题关闭,推送微信订阅消息失败!");
}
//5:缓存中网格下表决中的议题总数减1
govIssueRedis.subtractWorkGrassrootsIssueRedDotValue(entity.getGridId());
@ -467,6 +473,31 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
}
return messageFeignClient.saveUserMessageList(msgList);
}
/**
* @Description 关闭议题时给话题创建人和议题发起人推送微信订阅消息
* @author sun
*/
private Result saveWxmpMessageList(ResiTopicDTO topicDTO, String messageContent, IssueEntity entity) {
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
//2:分别给话题创建人、议题发起人发送消息
WxSubscribeMessageFormDTO msgDTO = new WxSubscribeMessageFormDTO();
msgDTO.setCustomerId(entity.getCustomerId());
msgDTO.setClientType(AppClientConstant.APP_RESI);
msgDTO.setUserId(topicDTO.getCreatedBy());
msgDTO.setBehaviorType(UserMessageConstant.WXMP_ISSUE_TITLE);
msgDTO.setMessageContent(messageContent);
msgDTO.setMessageTime(new Date());
msgDTO.setGridId(entity.getGridId());
msgList.add(msgDTO);
//话题人和议题人是同一个人时则只发送一条居民消息
if (!topicDTO.getCreatedBy().equals(entity.getCreatedBy())) {
WxSubscribeMessageFormDTO msgIssue = ConvertUtils.sourceToTarget(msgDTO,WxSubscribeMessageFormDTO.class);
msgIssue.setUserId(entity.getCreatedBy());
msgList.add(msgIssue);
}
logger.info("议题关闭,开始推送微信订阅消息");
return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
}
/**
* @param formDTO
@ -582,6 +613,10 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
if (!shiftProjectMessage(issueProjectResultDTO, formDTO, entity).success()) {
throw new RenException(IssueConstant.SAVE_MSG_EXCEPTION);
}
//5-1:2020.10.26 添加给居民端话题创建人、议题发起人以及政府端工作人员推送微信订阅消息功能 sun
if (!wxmpShiftProjectMessage(issueProjectResultDTO, formDTO, entity).success()) {
logger.error("议题转项目,推送微信订阅消息失败!");
}
//6:缓存中网格下表决中的议题总数减1
govIssueRedis.subtractWorkGrassrootsIssueRedDotValue(entity.getGridId());
@ -636,6 +671,50 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
});
return messageFeignClient.saveUserMessageList(msgList);
}
/**
* @Description 议题转项目时给话题创建人议题发起人勾选的工作人员分别推送微信订阅消息
* @author sun
*/
private Result wxmpShiftProjectMessage(IssueProjectResultDTO issueProjectResultDTO, ShiftProjectFormDTO formDTO, IssueEntity entity) {
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
//1:创建话题发起人、议题发表人消息对象
WxSubscribeMessageFormDTO msgDTO = new WxSubscribeMessageFormDTO();
msgDTO.setCustomerId(entity.getCustomerId());
msgDTO.setClientType(AppClientConstant.APP_RESI);
msgDTO.setUserId(formDTO.getTopicDTO().getCreatedBy());
msgDTO.setBehaviorType(UserMessageConstant.WXMP_ISSUE_TITLE);
String topicIssueMessage = String.format(UserMessageConstant.ISSUE_SHIFT_PROJECT_MSG, formDTO.getTopicDTO().getTopicContent(), issueProjectResultDTO.getOrgName());
msgDTO.setMessageContent(topicIssueMessage);
msgDTO.setMessageTime(new Date());
msgDTO.setGridId(entity.getGridId());
msgList.add(msgDTO);
//话题人和议题人是同一个人时则只发送一条居民消息
if (!formDTO.getTopicDTO().getCreatedBy().equals(entity.getCreatedBy())) {
WxSubscribeMessageFormDTO msgIssue = ConvertUtils.sourceToTarget(msgDTO, WxSubscribeMessageFormDTO.class);
msgIssue.setUserId(entity.getCreatedBy());
msgList.add(msgIssue);
}
//2:创建项目工作人员消息对象
String projectStaffMessage = String.format(UserMessageConstant.PROJECT_RESOLVED_MSG, entity.getIssueTitle());
//所选人员如果即在部门下又在网格下则只发一条消息
Map<String,String> map = new HashMap<>();
formDTO.getStaffList().forEach(staff->{
if(!map.containsKey(staff.getStaffId())){
WxSubscribeMessageFormDTO msg = new WxSubscribeMessageFormDTO();
msg.setCustomerId(entity.getCustomerId());
msg.setClientType(AppClientConstant.APP_GOV);
msg.setUserId(staff.getStaffId());
msg.setBehaviorType(UserMessageConstant.WXMP_ISSUE_TITLE);
msg.setMessageContent(projectStaffMessage);
msg.setMessageTime(new Date());
msg.setGridId("*");
msgList.add(msg);
map.put(staff.getStaffId(),staff.getStaffId());
}
});
logger.info("议题转项目,推送微信订阅消息");
return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
}
/**
* @Description

32
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/AgencyInfoFormDTO.java

@ -0,0 +1,32 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 对外接口-根据组织Id获取组织信息-接口入参
* @Author sun
*/
@Data
public class AgencyInfoFormDTO implements Serializable {
private static final long serialVersionUID = -1719033407335647411L;
/**
* 组织或网格Id
*/
@NotBlank(message = "组织或网格Id不能为空", groups = StaffIdGroup.class)
private String orgId;
/**
* 组织或网格类型agency/grid
*/
@NotBlank(message = "组织或网格类型不能为空", groups = StaffIdGroup.class)
private String orgType;
public interface StaffIdGroup extends CustomerClientShowGroup {
}
}

22
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/StaffBasicInfoFromDTO.java

@ -0,0 +1,22 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @author sun
* @dscription
*/
@Data
public class StaffBasicInfoFromDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
@NotBlank(message = "staffId不能为空", groups = {AddUserInternalGroup.class})
String staffId;
public interface AddUserInternalGroup {}
}

66
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/AgencyInfoResultDTO.java

@ -0,0 +1,66 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* 组织信息
*
* @author sun
*/
@Data
public class AgencyInfoResultDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 客户ID
*/
private String customerId;
/**
* 机关组织Id
*/
private String agencyId;
/**
* 机关组织名称
*/
private String agencyName;
/**
* 所有上级名称,-连接
*/
private String allParentName;
/**
* 上级组织机构ID
*/
private String pid;
/**
* 所有上级组织机构ID(以英文:隔开)
*/
private String pids;
/**
* 机关级别社区级community街道:street,区县级: district,市级: city省级:province
*/
private String level;
/**
* 地区编码
*/
private String areaCode;
}

5
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/MineResultDTO.java

@ -50,4 +50,9 @@ public class MineResultDTO implements Serializable {
* 我所属的机关名称
*/
private String myAgencyName;
/**
* 手机号
*/
private String mobile;
}

31
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/OrganizeTreeDeptResultDTO.java

@ -0,0 +1,31 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 外挂-部门信息
* @Auth sun
*/
@Data
public class OrganizeTreeDeptResultDTO implements Serializable {
private static final long serialVersionUID = 1792371558965832432L;
/**
* 部门Id
* */
private String deptId;
/**
* 部门名称
* */
private String deptName;
/**
* 所有上级组织机构ID(以英文:隔开)
*/
private String pids;
/**
* 所有上级名称,-连接
*/
private String allParentName;
}

31
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/OrganizeTreeGridResultDTO.java

@ -0,0 +1,31 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 外挂-网格信息
* @Auth sun
*/
@Data
public class OrganizeTreeGridResultDTO implements Serializable {
private static final long serialVersionUID = -4531574240525562587L;
/**
* 网格Id
* */
private String gridId;
/**
* 网格名称
* */
private String gridName;
/**
* 所有上级组织机构ID(以英文:隔开)
*/
private String pids;
/**
* 所有上级名称,-连接
*/
private String allParentName;
}

50
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/OrganizeTreeResultDTO.java

@ -0,0 +1,50 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据-接口返参
* @Auth sun
*/
@Data
public class OrganizeTreeResultDTO implements Serializable {
private static final long serialVersionUID = 2513553862809278219L;
/**
* 直属机关Id
* */
private String agencyId;
/**
* 直属机关名称
* */
private String agencyName;
/**
* 机关级别社区级community 街道:street, 区县级: district, 市级: city 省级:province
* */
private String level;
/**
* 所有上级组织机构ID(以英文:隔开)
*/
private String pids;
/**
* 所有上级名称,-连接
*/
private String allParentName;
/**
* 直属机关直属网格列表
* */
private List<OrganizeTreeGridResultDTO> gridList = new ArrayList<>();
/**
* 直属机关直属部门列表
* */
private List<OrganizeTreeDeptResultDTO> departmentList = new ArrayList<>();
/**
* 子集机关列表
* */
private List<OrganizeTreeResultDTO> subAgencyList = new ArrayList<>();
}

16
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java

@ -259,4 +259,20 @@ public interface GovOrgOpenFeignClient {
*/
@PostMapping("/gov/org/agency/subagencylist")
Result<SubAgencyResultDTO> subAgencyList(@RequestBody SubAgencyFormDTO formDTO);
/**
* @param formDTO
* @Author sun
* @Description 根据组织Id获取组织信息
*/
@PostMapping("/gov/org/customeragency/agencyinfo")
Result<AgencyInfoResultDTO> agencyInfo(@RequestBody AgencyInfoFormDTO formDTO);
/**
* @param agencyId
* @Author sun
* @Description 获取当前组织及部门网格数据递归查询所有下级数据
*/
@PostMapping("/gov/org/customeragency/organizetree/{agencyId}")
Result<OrganizeTreeResultDTO> organizeTree(@PathVariable("agencyId") String agencyId);
}

10
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java

@ -151,4 +151,14 @@ public class GovOrgOpenFeignClientFallback implements GovOrgOpenFeignClient {
public Result<SubAgencyResultDTO> subAgencyList(SubAgencyFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "subAgencyList", formDTO);
}
@Override
public Result<AgencyInfoResultDTO> agencyInfo(AgencyInfoFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "agencyInfo", formDTO);
}
@Override
public Result<OrganizeTreeResultDTO> organizeTree(String agencyId) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "organizeTree", agencyId);
}
}

18
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java

@ -242,4 +242,22 @@ public class CustomerAgencyController {
public Result<StaffInAgencyListResultDTO> staffInAgencyList(@LoginUser TokenDto tokenDTO) {
return new Result<StaffInAgencyListResultDTO>().ok(customerAgencyService.staffInAgencyList(tokenDTO.getUserId()));
}
/**
* @Description 对外接口-根据组织Id获取组织信息
* @author sun
**/
@PostMapping("agencyinfo")
Result<AgencyInfoResultDTO> agencyInfo(@RequestBody AgencyInfoFormDTO formDTO) {
return new Result<AgencyInfoResultDTO>().ok(customerAgencyService.agencyInfo(formDTO));
}
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据
* @author sun
**/
@PostMapping("organizetree/{agencyId}")
Result<OrganizeTreeResultDTO> organizeTree(@PathVariable("agencyId") String agencyId) {
return new Result<OrganizeTreeResultDTO>().ok(customerAgencyService.organizeTree(agencyId));
}
}

16
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/StaffController.java

@ -8,14 +8,10 @@ import com.epmet.commons.tools.enums.RequirePermissionEnum;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.StaffInfoFromDTO;
import com.epmet.dto.form.StaffSubmitFromDTO;
import com.epmet.dto.form.StaffTransferFormDTO;
import com.epmet.dto.form.StaffsInAgencyFromDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.service.StaffService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -151,4 +147,14 @@ public class StaffController {
staffService.staffTransfer(tokenDto, formDTO);
return new Result();
}
/**
* 根据staffId查询用户基本信息
* @author sun
*/
@PostMapping("staffbasicinfo")
public Result<BasicInfoResultDTO> staffBasicInfo(@RequestBody StaffBasicInfoFromDTO fromDTO) {
ValidatorUtils.validateEntity(fromDTO, StaffBasicInfoFromDTO.AddUserInternalGroup.class);
return staffService.staffBasicInfo(fromDTO);
}
}

21
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java

@ -175,4 +175,25 @@ public interface CustomerAgencyDao extends BaseDao<CustomerAgencyEntity> {
* @Description 查询工作人员所属组织信息
**/
AgencyResultDTO selectAgencyByStaffId(@Param("staffId") String staffId);
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据
* @author sun
**/
OrganizeTreeResultDTO selectorganizeTree(@Param("agencyId") String agencyId);
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据
* @author sun
**/
List<OrganizeTreeGridResultDTO> selectAgencyGridList(@Param("agencyId") String agencyId);
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据
* @author sun
**/
List<OrganizeTreeDeptResultDTO> selectAgencyDeptList(@Param("agencyId") String agencyId);
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据
* @author sun
**/
List<OrganizeTreeResultDTO> selectAllSub(@Param("agencyId") String agencyId);
}

12
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java

@ -213,4 +213,16 @@ public interface CustomerAgencyService extends BaseService<CustomerAgencyEntity>
* @Description 工作端-查询当前人员所属组织及所有下级组织
**/
StaffInAgencyListResultDTO staffInAgencyList(String staffId);
/**
* @Description 对外接口-根据组织Id获取组织信息
* @author sun
**/
AgencyInfoResultDTO agencyInfo(AgencyInfoFormDTO formDTO);
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据
* @author sun
**/
OrganizeTreeResultDTO organizeTree(String agencyId);
}

10
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/StaffService.java

@ -2,10 +2,7 @@ package com.epmet.service;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.StaffInfoFromDTO;
import com.epmet.dto.form.StaffSubmitFromDTO;
import com.epmet.dto.form.StaffTransferFormDTO;
import com.epmet.dto.form.StaffsInAgencyFromDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import java.util.List;
@ -103,4 +100,9 @@ public interface StaffService {
*/
void staffTransfer(TokenDto tokenDto, StaffTransferFormDTO fromDTO);
/**
* 根据staffId查询用户基本信息
* @author sun
*/
Result<BasicInfoResultDTO> staffBasicInfo(StaffBasicInfoFromDTO fromDTO);
}

36
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java

@ -994,4 +994,40 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl<CustomerAgencyDao
return resultDTO;
}
/**
* @Description 对外接口-根据组织Id获取组织信息
* @author sun
**/
@Override
public AgencyInfoResultDTO agencyInfo(AgencyInfoFormDTO formDTO) {
AgencyInfoResultDTO resultDTO = new AgencyInfoResultDTO();
String agencyId = formDTO.getOrgId();
//1.判断是否为网格类型,是网格则查询网格基本信息
if("grid".equals(formDTO.getOrgType())){
CustomerGridEntity gridEntity = customerGridDao.selectById(formDTO.getOrgId());
if(null == gridEntity){
logger.error(String.format("根据网格Id未查询到网格数据,网格Id:%s", formDTO.getOrgId()));
throw new RenException("获取网格数据失败,根据网格Id未查询到网格数据");
}
agencyId = gridEntity.getPid();
}
//2.查询组织基本信息
CustomerAgencyEntity entity = baseDao.selectById(agencyId);
if(entity!=null){
resultDTO = ConvertUtils.sourceToTarget(entity, AgencyInfoResultDTO.class);
resultDTO.setAgencyId(entity.getId());
resultDTO.setAgencyName(entity.getOrganizationName());
}
return resultDTO;
}
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据
* @author sun
**/
@Override
public OrganizeTreeResultDTO organizeTree(String agencyId) {
return baseDao.selectorganizeTree(agencyId);
}
}

10
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffServiceImpl.java

@ -178,6 +178,7 @@ public class StaffServiceImpl implements StaffService {
result.setRealName(staffDetail.getName());
result.setStaffHeadPhoto(staffDetail.getHeadPhoto());
result.setGender(staffDetail.getGender());
result.setMobile(staffDetail.getMobile());//返参添加手机号 2020.10.27 sun
result.setRoleList(staffDetail.getRoles());
//用户所属机关名称(上级-本级)
result.setAgencyName(agencyName);
@ -255,4 +256,13 @@ public class StaffServiceImpl implements StaffService {
staffTransferRecordDTO.setRemarks(fromDTO.getRemarks());
staffTransferRecordService.save(staffTransferRecordDTO);
}
/**
* 根据staffId查询用户基本信息
* @author sun
*/
@Override
public Result<BasicInfoResultDTO> staffBasicInfo(StaffBasicInfoFromDTO fromDTO) {
return epmetUserOpenFeignClient.getStaffBasicInfo(fromDTO);
}
}

81
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml

@ -292,4 +292,85 @@
AND csa.user_id = #{staffId}
</select>
<!-- sql递归 查询组织、组织下部门、组织下网格基本信息及递归查询下级信息 start-->
<resultMap id="organizeTree" type="com.epmet.dto.result.OrganizeTreeResultDTO">
<id column="agencyId" property="agencyId"/>
<result column="agencyName" property="agencyName"/>
<result column="level" property="level"/>
<result column="pids" property="pids"/>
<result column="allParentName" property="allParentName"/>
<collection property="gridList" column="agencyId" ofType="com.epmet.dto.result.OrganizeTreeGridResultDTO" select="selectAgencyGridList">
<id column="gridId" property="gridId"/>
<result column="gridName" property="gridName"/>
<result column="pids" property="pids"/>
<result column="allParentName" property="allParentName"/>
</collection>
<collection property="departmentList" column="agencyId" ofType="com.epmet.dto.result.OrganizeTreeDeptResultDTO" select="selectAgencyDeptList">
<id column="deptId" property="deptId"/>
<result column="deptName" property="deptName"/>
<result column="pids" property="pids"/>
<result column="allParentName" property="allParentName"/>
</collection>
<collection property="subAgencyList" column="agencyId" ofType="com.epmet.dto.result.ExtStaffPermissionResultDTO" select="selectAllSub">
</collection>
</resultMap>
<select id="selectorganizeTree" resultMap="organizeTree">
SELECT
ca.id AS agencyId,
ca.organization_name AS agencyName,
ca.level AS level,
ca.pids AS pids,
ca.all_parent_name AS allParentName
FROM
customer_agency ca
WHERE
ca.del_flag = '0'
AND ca.id = #{agencyId}
</select>
<select id="selectAgencyGridList" resultType="com.epmet.dto.result.OrganizeTreeGridResultDTO">
SELECT
cg.id AS gridId,
cg.grid_name AS gridName,
CONCAT(ca.pids,if(ca.pids="","",":"),ca.id) AS pids,
CONCAT(ca.all_parent_name,if(ca.all_parent_name="","","-"),ca.organization_name) AS allParentName
FROM
customer_grid cg
LEFT JOIN customer_agency ca ON cg.pid = ca.id
WHERE
cg.del_flag = '0'
AND ca.del_flag = '0'
AND cg.pid = #{agencyId}
</select>
<select id="selectAgencyDeptList" resultType="com.epmet.dto.result.OrganizeTreeDeptResultDTO">
SELECT
cd.id AS deptId,
cd.department_name AS deptName,
CONCAT(ca.pids,if(ca.pids="","",":"),ca.id) AS pids,
CONCAT(ca.all_parent_name,if(ca.all_parent_name="","","-"),ca.organization_name) AS allParentName
FROM
customer_department cd
LEFT JOIN customer_agency ca ON cd.agency_id = ca.id
WHERE
cd.del_flag = '0'
AND ca.del_flag = '0'
AND cd.agency_id = #{agencyId}
</select>
<select id="selectAllSub" resultMap="organizeTree">
SELECT
ca.id AS agencyId,
ca.organization_name AS agencyName,
ca.level AS level,
ca.pids AS pids,
ca.all_parent_name AS allParentName
FROM
customer_agency ca
WHERE
ca.del_flag = '0'
AND ca.pid = #{agencyId}
</select>
<!-- sql递归 查询组织、组织下部门、组织下网格基本信息及递归查询下级信息 end-->
</mapper>

4
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java

@ -105,6 +105,10 @@ public interface ProjectConstant {
* 调用user-message服务失败
*/
String SAVE_MSG_EXCEPTION = "发送消息失败";
/**
* 调用user-message服务失败
*/
String SAVE_WXMP_MSG_EXCEPTION = "发送微信订阅消息失败";
/**
* 查询项目表数据失败
*/

9
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/UserMessageConstant.java

@ -11,15 +11,20 @@ public interface UserMessageConstant {
*/
String PROJECT_TITLE = "您有一条项目消息";
/**
* 微信订阅消息部分标题
*/
String WXMP_PROJECT_TITLE = "您有一条项目消息";
/**
* 议题转项目项目流转项目退回消息模板
*/
String PROJECT_RESOLVED_MSG = "您好。您收到一条【%s】的新信息,请您尽快处理。";
String PROJECT_RESOLVED_MSG = "您收到一条【%s】的新信息,请您尽快处理。";
/**
* 项目结案消息模板
*/
String PROJECT_CLOSED_MSG = "您好,您参与的【%s】项目已结案,原因:%s";
String PROJECT_CLOSED_MSG = "您参与的【%s】项目已结案,原因:%s";
/**

43
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectProcessServiceImpl.java

@ -50,6 +50,7 @@ import com.epmet.entity.ProjectOrgRelationEntity;
import com.epmet.entity.ProjectProcessEntity;
import com.epmet.entity.ProjectStaffEntity;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.EpmetUserFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgFeignClient;
@ -59,6 +60,8 @@ import com.epmet.service.ProjectService;
import com.epmet.service.ProjectStaffService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -78,6 +81,7 @@ import java.util.stream.Collectors;
@Slf4j
public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessDao, ProjectProcessEntity> implements ProjectProcessService {
protected static final Logger logger = LoggerFactory.getLogger(ProjectProcessServiceImpl.class);
@Autowired
private ProjectProcessRedis projectProcessRedis;
@Autowired
@ -106,6 +110,8 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessDao
private ProjectDao projectDao;
@Autowired
private EpmetUserOpenFeignClient epmetUserOpenFeignClient;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Override
public PageData<ProjectProcessDTO> page(Map<String, Object> params) {
@ -347,6 +353,12 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessDao
if (!transferMessage(formDTO).success()) {
throw new RenException(ProjectConstant.SAVE_MSG_EXCEPTION);
}
//5:调用epmet-message服务,给项目流转过程中的工作人员发送订阅的微信消息
if (!transferWxmpMessage(formDTO).success()) {
logger.error("项目流转,推送微信订阅消息失败");
//throw new RenException(ProjectConstant.SAVE_WXMP_MSG_EXCEPTION);
}
}
/**
@ -379,6 +391,37 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessDao
});
return messageFeignClient.saveUserMessageList(msgList);
}
/**
* @Description 项目流转给流转工作人员推送订阅的微信消息
* @author sun
*/
private Result transferWxmpMessage(TransferFormDTO formDTO) {
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
ProjectEntity projectEntity = projectService.selectById(formDTO.getProjectId());
if (null == projectEntity) {
throw new RenException(ProjectConstant.SELECT_PROJECT_EXCEPTION);
}
//3:创建项目工作人员消息对象
//所选人员如果即在部门下又在网格下则只发一条消息
Map<String,String> map = new HashMap<>();
String projectStaffMessage = String.format(UserMessageConstant.PROJECT_RESOLVED_MSG, projectEntity.getTitle());
formDTO.getStaffList().forEach(staff->{
if(!map.containsKey(staff.getStaffId())){
WxSubscribeMessageFormDTO msg = new WxSubscribeMessageFormDTO();
msg.setCustomerId(projectEntity.getCustomerId());
msg.setClientType(ProjectConstant.GOV);
msg.setUserId(staff.getStaffId());
msg.setBehaviorType(UserMessageConstant.WXMP_PROJECT_TITLE);
msg.setMessageContent(projectStaffMessage);
msg.setMessageTime(new Date());
msg.setGridId("*");
msgList.add(msg);
map.put(staff.getStaffId(),staff.getStaffId());
}
});
logger.info("项目流转,推送微信订阅消息");
return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
}
/**
* @Description 议题处理进展已转项目

68
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java

@ -47,6 +47,8 @@ import org.apache.commons.collections4.CollectionUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -67,7 +69,7 @@ import java.util.stream.Collectors;
@Service
@Slf4j
public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntity> implements ProjectService {
private Logger logger = LogManager.getLogger(ProjectServiceImpl.class);
@Autowired
private ProjectRedis projectRedis;
@Autowired
@ -90,6 +92,8 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
private EpmetUserOpenFeignClient epmetUserOpenFeignClient;
@Autowired
private OperCrmOpenFeignClient operCrmOpenFeignClient;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Value("${openapi.scan.server.url}")
private String scanApiUrl;
@Value("${openapi.scan.method.textSyncScan}")
@ -442,6 +446,8 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
//通知
List<UserMessageFormDTO> msgList = new ArrayList<>();
//2020.10.26 添加项目结案发送微信订阅消息操作 sun
List<WxSubscribeMessageFormDTO> wxmpMsgList = new ArrayList<>();
//通知项目相关人员
List<ProjectRelatedPersonnelDTO> personnelList = projectRelatedPersonnelService.getPersonnelListByProjectId(fromDTO.getProjectId());
personnelList.forEach(p -> {
@ -454,6 +460,15 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
messageFormDTO.setMessageContent(String.format(UserMessageConstant.PROJECT_CLOSED_MSG, projectEntity.getTitle(), fromDTO.getPublicReply()));
messageFormDTO.setReadFlag(Constant.UNREAD);
msgList.add(messageFormDTO);
WxSubscribeMessageFormDTO msg = new WxSubscribeMessageFormDTO();
msg.setCustomerId(projectEntity.getCustomerId());
msg.setClientType(p.getApp());
msg.setUserId(p.getUserId());
msg.setBehaviorType("项目消息");
msg.setMessageContent(String.format(UserMessageConstant.PROJECT_CLOSED_MSG, projectEntity.getTitle(), fromDTO.getPublicReply()));
msg.setMessageTime(new Date());
msg.setGridId(p.getGridId());
wxmpMsgList.add(msg);
});
//通知项目关联的部门人员
List<String> staffList = projectStaffService.getStaffsByProjectId(fromDTO.getProjectId());
@ -468,8 +483,23 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
messageFormDTO.setMessageContent(String.format(UserMessageConstant.PROJECT_CLOSED_MSG, projectEntity.getTitle(), fromDTO.getPublicReply()));
messageFormDTO.setReadFlag(Constant.UNREAD);
msgList.add(messageFormDTO);
WxSubscribeMessageFormDTO msg = new WxSubscribeMessageFormDTO();
msg.setCustomerId(projectEntity.getCustomerId());
msg.setClientType(AppClientConstant.APP_GOV);
msg.setUserId(s);
msg.setBehaviorType("项目消息");
msg.setMessageContent(String.format(UserMessageConstant.PROJECT_CLOSED_MSG, projectEntity.getTitle(), fromDTO.getPublicReply()));
msg.setMessageTime(new Date());
msg.setGridId("*");
wxmpMsgList.add(msg);
});
messageFeignClient.saveUserMessageList(msgList);
//2020.10.26 发送微信订阅消息 sun
logger.info("项目结案,开始推送微信订阅消息");
Result result = epmetMessageOpenFeignClient.sendWxSubscribeMessage(wxmpMsgList);
if (!result.success()) {
logger.error("项目结案成功,发送微信订阅消息失败" + JSON.toJSONString(result));
}
}
@Override
@ -580,6 +610,23 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
messageFormDTO.setReadFlag(Constant.UNREAD);
msgList.add(messageFormDTO);
messageFeignClient.saveUserMessageList(msgList);
//2020.10.26 添加项目退回给勾选人推送微信订阅消息 sun
List<WxSubscribeMessageFormDTO> wxmpMsgList = new ArrayList<>();
WxSubscribeMessageFormDTO msg = new WxSubscribeMessageFormDTO();
msg.setCustomerId(projectEntity.getCustomerId());
msg.setClientType(AppClientConstant.APP_GOV);
msg.setUserId(projectStaffDTO.getStaffId());
msg.setBehaviorType("项目消息");
msg.setMessageContent(String.format(UserMessageConstant.PROJECT_RESOLVED_MSG, projectEntity.getTitle()));
msg.setMessageTime(new Date());
msg.setGridId("*");
wxmpMsgList.add(msg);
//发送微信订阅消息 sun
logger.info("项目退回,开始推送微信订阅消息");
Result result = epmetMessageOpenFeignClient.sendWxSubscribeMessage(wxmpMsgList);
if (!result.success()) {
logger.error("项目退回成功,发送微信订阅消息失败" + JSON.toJSONString(result));
}
}
@Override
@ -802,6 +849,7 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
**/
@Override
public List<LatestListResultDTO> getClosedProjectList(LatestListFormDTO formDTO) {
return baseDao.selectClosedProjectList(formDTO);
}
@ -1186,6 +1234,8 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
}));
//通知
List<UserMessageFormDTO> msgList = new ArrayList<>();
//10.29 项目滞留提醒添加推送微信消息 sun
List<WxSubscribeMessageFormDTO> wxmpMsgList = new ArrayList<>();
list.forEach(dto -> {
String title;
String msg;
@ -1224,8 +1274,24 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
messageFormDTO.setMessageContent(msg);
messageFormDTO.setReadFlag(Constant.UNREAD);
msgList.add(messageFormDTO);
//10.29 项目滞留提醒添加推送微信消息 sun
WxSubscribeMessageFormDTO wxmp = new WxSubscribeMessageFormDTO();
wxmp.setCustomerId(customerId);
wxmp.setClientType(ProjectConstant.GOV);
wxmp.setUserId(dto.getStaffId());
wxmp.setBehaviorType("项目滞留提醒");
wxmp.setMessageContent(msg);
wxmp.setMessageTime(new Date());
wxmp.setGridId(StrConstant.STAR);
wxmpMsgList.add(wxmp);
});
messageFeignClient.saveUserMessageList(msgList);
logger.info("项目滞留提醒,开始推送微信订阅消息");
Result result = epmetMessageOpenFeignClient.sendWxSubscribeMessage(wxmpMsgList);
if (!result.success()) {
logger.error("项目滞留提醒,发送微信订阅消息失败" + JSON.toJSONString(result));
}
}

4
epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectStaffDao.xml

@ -41,7 +41,9 @@
LIMIT 1
</select>
<select id="selectStaffsByProjectId" resultType="java.lang.String">
SELECT DISTINCT STAFF_ID FROM project_staff WHERE PROJECT_ID = #{projectId}
SELECT DISTINCT staff_id FROM project_staff WHERE project_id = #{projectId}
UNION
SELECT DISTINCT staff_id FROM project_process WHERE operation = 'created' AND project_id = #{projectId}
</select>
<select id="selectProjectTransferStaffList" resultType="com.epmet.dto.ProjectStaffDTO">

27
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java

@ -58,6 +58,8 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jsoup.helper.StringUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -79,6 +81,7 @@ import java.util.stream.Collectors;
@Slf4j
@Service
public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntity> implements ArticleService {
private Logger logger = LogManager.getLogger(ArticleServiceImpl.class);
@Autowired
private GovOrgOpenFeignClient govOrgOpenFeignClient;
@Autowired
@ -970,6 +973,7 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
if (!isOk) {
this.sendMsg(draftEntity.getCustomerId(), draftEntity.getTitle(), String.format(ModuleConstant.MSG_ARTICLE_PUBLISH_ERROR, draftEntity.getTitle()));
this.wxmpMsg(draftEntity.getCustomerId(), draftEntity.getTitle(), String.format(ModuleConstant.MSG_ARTICLE_PUBLISH_ERROR, draftEntity.getTitle()));
this.updateDraftPublishStatus(draftId, DraftConstant.AUDITFAIL, null);
return null;
}
@ -1047,6 +1051,7 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
} catch (Exception e) {
log.error("scanContent exception", e);
this.sendMsg(draftEntity.getCustomerId(), draftEntity.getTitle(), String.format(ModuleConstant.MSG_ARTICLE_PUBLISH_ERROR, draftEntity.getTitle()));
this.wxmpMsg(draftEntity.getCustomerId(), draftEntity.getTitle(), String.format(ModuleConstant.MSG_ARTICLE_PUBLISH_ERROR, draftEntity.getTitle()));
this.updateDraftPublishStatus(draftId, DraftConstant.AUDITFAIL, null);
}
log.debug("scanContent result:{}", JSON.toJSONString(result));
@ -1084,6 +1089,7 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
} catch (Exception e) {
log.error("scanAllPassPublishArticle update db exception", e);
this.sendMsg(draft.getCustomerId(), draft.getTitle(), String.format(ModuleConstant.MSG_ARTICLE_PUBLISH_ERROR, draft.getTitle()));
this.wxmpMsg(draft.getCustomerId(), draft.getTitle(), String.format(ModuleConstant.MSG_ARTICLE_PUBLISH_ERROR, draft.getTitle()));
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
@ -1145,10 +1151,12 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
auditMsg = ModuleConstant.DRAFT_TITLE;
}
this.sendMsg(draft.getCustomerId(), draft.getTitle(), String.format(ModuleConstant.MSG_AUDIT_CONTENT, draft.getTitle(), auditMsg));
this.wxmpMsg(draft.getCustomerId(), draft.getTitle(), String.format(ModuleConstant.MSG_AUDIT_CONTENT, draft.getTitle(), auditMsg));
}
} catch (Exception e) {
log.error("scanAllPassPublishArticle update db exception", e);
this.sendMsg(draft.getCustomerId(), draft.getTitle(), String.format(ModuleConstant.MSG_ARTICLE_PUBLISH_ERROR, draft.getTitle()));
this.wxmpMsg(draft.getCustomerId(), draft.getTitle(), String.format(ModuleConstant.MSG_ARTICLE_PUBLISH_ERROR, draft.getTitle()));
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(), EpmetErrorCode.SERVER_ERROR.getMsg());
}
}
@ -1170,6 +1178,25 @@ public class ArticleServiceImpl extends BaseServiceImpl<ArticleDao, ArticleEntit
formDTO.setReadFlag(ReadFlagConstant.UN_READ);
return epmetMessageOpenFeignClient.saveUserMessage(formDTO);
}
/**
* @param
* @Description 发布文章审核给发布者推送微信订阅消息
* @Author sun
**/
public Result wxmpMsg(String customerId, String title, String content) {
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
WxSubscribeMessageFormDTO formDTO = new WxSubscribeMessageFormDTO();
formDTO.setCustomerId(customerId);
formDTO.setClientType(AppClientConstant.APP_GOV);
formDTO.setUserId(loginUserUtil.getLoginUserId());
formDTO.setBehaviorType(String.format(ModuleConstant.WXMP_MSG_TITLE, title));
formDTO.setMessageContent(content);
formDTO.setMessageTime(new Date());
formDTO.setGridId("*");
msgList.add(formDTO);
logger.info("发布文章审核,开始推送微信订阅消息");
return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
}
@Override
public void updateDraftPublishStatus(String draftId, String statusFlag, String titleAuditStatus) {

8
epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/utils/ModuleConstant.java

@ -83,16 +83,20 @@ public interface ModuleConstant {
* 文章站内消息标题
*/
String MSG_TITLE = "您有一条文章【%s】的消息";
/**
* 文章微信订阅消息
*/
String WXMP_MSG_TITLE = "文章【%s】的消息";
/**
* 文章未审核通过 消息内容模版
*/
String MSG_AUDIT_CONTENT = "您好,您发布的【%s】文章%s审核未通过,请重新编辑后发布,谢谢。";
String MSG_AUDIT_CONTENT = "您发布的【%s】文章%s审核未通过,请重新编辑后发布,谢谢。";
/**
* 文章发布失败 内部错误导致
* */
String MSG_ARTICLE_PUBLISH_ERROR = "您好,你发布的【%s】文章由于网络错误未发布成功,请重新发布,谢谢。";
String MSG_ARTICLE_PUBLISH_ERROR = "您发布的【%s】文章由于网络错误未发布成功,请重新发布,谢谢。";
/**
* 草稿Id不存在

16
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/constant/UserMessageConstant.java

@ -37,12 +37,12 @@ public interface UserMessageConstant {
/**
* 建组审核驳回时消息模板
* */
String DISAGREE_CREATING_GROUP_MSG_TEMPLATE = "您好,您申请的%s,已被驳回,原因:%s。";
String DISAGREE_CREATING_GROUP_MSG_TEMPLATE = "您申请的%s,已被驳回,原因:%s。";
/**
* 建组审核同意时消息模板
* */
String AGREE_CREATING_GROUP_MSG_TEMPLATE = "您好,您申请的%s,已审核通过。";
String AGREE_CREATING_GROUP_MSG_TEMPLATE = "您申请的%s,已审核通过。";
/**
* 审核建组申请消息名称
@ -62,6 +62,16 @@ public interface UserMessageConstant {
/**
* 组长审核入组申请时的微信订阅behavior
*/
String WX_APPLY_GROUP_BEHAVIOR = "小组消息";
String WX_APPLY_JOIN_GROUP_BEHAVIOR = "小组消息";
/**
* 建组审核的微信订阅behavior
*/
String WX_APPLY_CREATE_GROUP_BEHAVIOR = "建组审核消息";
/**
* 申请建组的微信订阅behavior
*/
String WX_CREATE_GROUP_BEHAVIOR = "建组申请消息";
}

46
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java

@ -21,6 +21,7 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.EpmetRoleKeyConstant;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
@ -34,6 +35,7 @@ import com.epmet.constant.ReadFlagConstant;
import com.epmet.dto.form.*;
import com.epmet.dto.result.UserResiInfoResultDTO;
import com.epmet.dto.result.UserRoleResultDTO;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.modules.constant.UserMessageConstant;
import com.epmet.modules.feign.EpmetMessageFeignClient;
import com.epmet.modules.feign.EpmetUserFeignClient;
@ -122,6 +124,9 @@ public class ResiGroupServiceImpl extends BaseServiceImpl<ResiGroupDao, ResiGrou
@Autowired
private EpmetMessageFeignClient epmetMessageFeignClient;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Override
public PageData<ResiGroupDTO> page(Map<String, Object> params) {
IPage<ResiGroupEntity> page = baseDao.selectPage(
@ -569,6 +574,18 @@ public class ResiGroupServiceImpl extends BaseServiceImpl<ResiGroupDao, ResiGrou
if(!epmetMessageFeignClient.saveUserMessage(userMessageFormDTO).success()){
logger.warn(String.format(ModuleConstant.FAILED_SEND_MESSAGE,String.format(UserMessageConstant.AGREE_CREATING_GROUP_MSG_TEMPLATE,resiGroupDTO.getGroupName())));
}
//发送微信订阅消息
WxSubscribeMessageFormDTO wxSubscribeMessageFormDTO = new WxSubscribeMessageFormDTO();
wxSubscribeMessageFormDTO.setCustomerId(resiGroupDTO.getCustomerId());
wxSubscribeMessageFormDTO.setUserId(resiGroupDTO.getCreatedBy());
wxSubscribeMessageFormDTO.setClientType(AppClientConstant.APP_RESI);
wxSubscribeMessageFormDTO.setGridId(resiGroupDTO.getGridId());
wxSubscribeMessageFormDTO.setBehaviorType(UserMessageConstant.WX_APPLY_CREATE_GROUP_BEHAVIOR);
wxSubscribeMessageFormDTO.setMessageContent(String.format(UserMessageConstant.AGREE_CREATING_GROUP_MSG_TEMPLATE,resiGroupDTO.getGroupName()));
wxSubscribeMessageFormDTO.setMessageTime(new Date());
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
msgList.add(wxSubscribeMessageFormDTO);
epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
//更新政府端:工作-基层治理-党员认证reddot
resiGroupRedis.subtractWorkGrassrootsPartyAuthRedDotValue(resiGroupDTO.getGridId());
return new Result();
@ -615,6 +632,20 @@ public class ResiGroupServiceImpl extends BaseServiceImpl<ResiGroupDao, ResiGrou
if(!epmetMessageFeignClient.saveUserMessage(userMessageFormDTO).success()){
logger.warn(String.format(ModuleConstant.FAILED_SEND_MESSAGE,String.format(UserMessageConstant.DISAGREE_CREATING_GROUP_MSG_TEMPLATE,resiGroupDTO.getGroupName(),disAgreeApplyGroupFormDTO.getRejectReason())));
}
//发送微信订阅消息
WxSubscribeMessageFormDTO wxSubscribeMessageFormDTO = new WxSubscribeMessageFormDTO();
wxSubscribeMessageFormDTO.setCustomerId(resiGroupDTO.getCustomerId());
wxSubscribeMessageFormDTO.setUserId(resiGroupDTO.getCreatedBy());
wxSubscribeMessageFormDTO.setClientType(AppClientConstant.APP_RESI);
wxSubscribeMessageFormDTO.setGridId(resiGroupDTO.getGridId());
wxSubscribeMessageFormDTO.setBehaviorType(UserMessageConstant.WX_APPLY_CREATE_GROUP_BEHAVIOR);
wxSubscribeMessageFormDTO.setMessageContent(String.format(UserMessageConstant.DISAGREE_CREATING_GROUP_MSG_TEMPLATE,resiGroupDTO.getGroupName(),disAgreeApplyGroupFormDTO.getRejectReason()));
wxSubscribeMessageFormDTO.setMessageTime(new Date());
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
msgList.add(wxSubscribeMessageFormDTO);
epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
//更新政府端:工作-基层治理-党员认证reddot
resiGroupRedis.subtractWorkGrassrootsPartyAuthRedDotValue(resiGroupDTO.getGridId());
return new Result();
@ -950,7 +981,9 @@ public class ResiGroupServiceImpl extends BaseServiceImpl<ResiGroupDao, ResiGrou
//3.发送消息
if(staffRoles.success() && null != staffRoles.getData() && staffRoles.getData().size() > 0){
List<UserMessageFormDTO> msgList = new ArrayList<>();
List<WxSubscribeMessageFormDTO> subscribeList = new ArrayList<>();
for(String to : staffRoles.getData()){
//站内信
UserMessageFormDTO msgObj = new UserMessageFormDTO();
msgObj.setApp(ModuleConstant.APP_GOV);
msgObj.setCustomerId(customerId);
@ -960,6 +993,19 @@ public class ResiGroupServiceImpl extends BaseServiceImpl<ResiGroupDao, ResiGrou
msgObj.setTitle(title);
msgObj.setUserId(to);
msgList.add(msgObj);
//微信订阅
WxSubscribeMessageFormDTO subscribeDTO = new WxSubscribeMessageFormDTO();
subscribeDTO.setClientType(ModuleConstant.APP_GOV);
subscribeDTO.setGridId(gridId);
subscribeDTO.setCustomerId(customerId);
subscribeDTO.setUserId(to);
subscribeDTO.setBehaviorType(UserMessageConstant.WX_CREATE_GROUP_BEHAVIOR);
subscribeDTO.setMessageContent(msg);
subscribeDTO.setMessageTime(new Date());
subscribeList.add(subscribeDTO);
}
if (subscribeList.size() > NumConstant.ZERO){
epmetMessageOpenFeignClient.sendWxSubscribeMessage(subscribeList);
}
Result result = epmetMessageFeignClient.saveUserMessageList(msgList);
if(result.success()){

17
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/service/impl/GroupInvitationServiceImpl.java

@ -28,10 +28,7 @@ import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.ReadFlagConstant;
import com.epmet.dto.form.UserEnterGridFormDTO;
import com.epmet.dto.form.UserInvitationFormDTO;
import com.epmet.dto.form.UserMessageFormDTO;
import com.epmet.dto.form.UserResiInfoFormDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.UserInfoOnEnterGridResultDTO;
import com.epmet.dto.result.UserResiInfoResultDTO;
import com.epmet.feign.EpmetMessageOpenFeignClient;
@ -438,6 +435,18 @@ public class GroupInvitationServiceImpl extends BaseServiceImpl<GroupInvitationD
//通知群主
userMessage.setUserId(groupInvitationDTO.getInviterUserId());
Result result = epmetMessageOpenFeignClient.saveUserMessage(userMessage);
//发送微信订阅消息
WxSubscribeMessageFormDTO wxSubscribeMessageFormDTO = new WxSubscribeMessageFormDTO();
wxSubscribeMessageFormDTO.setCustomerId(resiGroupDTO.getCustomerId());
wxSubscribeMessageFormDTO.setUserId(groupInvitationDTO.getInviterUserId());
wxSubscribeMessageFormDTO.setClientType(AppClientConstant.APP_RESI);
wxSubscribeMessageFormDTO.setGridId(resiGroupDTO.getGridId());
wxSubscribeMessageFormDTO.setBehaviorType(UserMessageConstant.WX_APPLY_JOIN_GROUP_BEHAVIOR);
wxSubscribeMessageFormDTO.setMessageContent(messageContent);
wxSubscribeMessageFormDTO.setMessageTime(new Date());
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
msgList.add(wxSubscribeMessageFormDTO);
epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
if (result.success()) {
logger.info("通知群主有新成员入群成功");
} else {

35
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java

@ -271,6 +271,19 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
//通知群主
userMessage.setUserId(groupLeader.getCustomerUserId());
epmetMessageOpenFeignClient.saveUserMessage(userMessage);
//微信订阅
WxSubscribeMessageFormDTO subscribeDTO = new WxSubscribeMessageFormDTO();
subscribeDTO.setClientType(ModuleConstant.APP_RESI);
subscribeDTO.setGridId(resiGroupDTO.getGridId());
subscribeDTO.setCustomerId(resiGroupDTO.getCustomerId());
subscribeDTO.setUserId(groupLeader.getCustomerUserId());
subscribeDTO.setBehaviorType(UserMessageConstant.WX_APPLY_JOIN_GROUP_BEHAVIOR);
subscribeDTO.setMessageContent(messageContent);
subscribeDTO.setMessageTime(new Date());
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
msgList.add(subscribeDTO);
epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
} catch (Exception e) {
logger.error("居民申请入群,给组长发送消息通知异常");
e.printStackTrace();
@ -455,11 +468,13 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
epmetMessageOpenFeignClient.saveUserMessage(userMessage);
//2 给用户发送微信订阅
WxSubscribeMessageFormDTO wxSubscribeMessageFormDTO = new WxSubscribeMessageFormDTO();
wxSubscribeMessageFormDTO.setCustomerId(resiGroupMemberDTO.getCustomerId());
wxSubscribeMessageFormDTO.setCustomerId(resiGroupDTO.getCustomerId());
wxSubscribeMessageFormDTO.setUserId(resiGroupMemberDTO.getCustomerUserId());
wxSubscribeMessageFormDTO.setClientType(AppClientConstant.APP_RESI);
wxSubscribeMessageFormDTO.setBehaviorType(UserMessageConstant.WX_APPLY_GROUP_BEHAVIOR);
wxSubscribeMessageFormDTO.setGridId(resiGroupDTO.getGridId());
wxSubscribeMessageFormDTO.setBehaviorType(UserMessageConstant.WX_APPLY_JOIN_GROUP_BEHAVIOR);
wxSubscribeMessageFormDTO.setMessageContent(messageContent);
wxSubscribeMessageFormDTO.setMessageTime(new Date());
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
msgList.add(wxSubscribeMessageFormDTO);
epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
@ -533,7 +548,9 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
wxSubscribeMessageFormDTO.setCustomerId(resiGroupDTO.getCustomerId());
wxSubscribeMessageFormDTO.setUserId(groupMemeberOperationDTO.getCustomerUserId());
wxSubscribeMessageFormDTO.setClientType(AppClientConstant.APP_RESI);
wxSubscribeMessageFormDTO.setBehaviorType(UserMessageConstant.WX_APPLY_GROUP_BEHAVIOR);
wxSubscribeMessageFormDTO.setGridId(resiGroupDTO.getGridId());
wxSubscribeMessageFormDTO.setBehaviorType(UserMessageConstant.WX_APPLY_JOIN_GROUP_BEHAVIOR);
wxSubscribeMessageFormDTO.setMessageTime(new Date());
wxSubscribeMessageFormDTO.setMessageContent(messageContent);
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
msgList.add(wxSubscribeMessageFormDTO);
@ -625,6 +642,18 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
userMessageFormDTO.setMessageContent(messageContent);
userMessageFormDTO.setReadFlag(ReadFlagConstant.UN_READ);
epmetMessageOpenFeignClient.saveUserMessage(userMessageFormDTO);
//发送微信订阅
WxSubscribeMessageFormDTO subscribeMessageFormDTO = new WxSubscribeMessageFormDTO();
subscribeMessageFormDTO.setClientType(ModuleConstant.APP_RESI);
subscribeMessageFormDTO.setGridId(resiGroupEntity.getGridId());
subscribeMessageFormDTO.setCustomerId(resiGroupEntity.getCustomerId());
subscribeMessageFormDTO.setUserId(resiGroupMemberEntity.getCustomerUserId());
subscribeMessageFormDTO.setBehaviorType(UserMessageConstant.WX_APPLY_JOIN_GROUP_BEHAVIOR);
subscribeMessageFormDTO.setMessageContent(messageContent);
subscribeMessageFormDTO.setMessageTime(new Date());
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
msgList.add(subscribeMessageFormDTO);
epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
result.setMsg(GroupMemberConstant.SLIENT_SUCCESS);
return result;
}

9
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/constant/PartyMemberMessageConstant.java

@ -19,10 +19,15 @@ public interface PartyMemberMessageConstant {
/**
* 党员申请审核通过给申请人发送消息您好您申请的党员已审核通过请查看
*/
String AUDIT_APPROVE_MSG = "您好,您申请的%s党员已审核通过,请查看。";
String AUDIT_APPROVE_MSG = "您申请的%s党员已审核通过,请查看。";
/**
* 党员申请审核驳回给申请人发送消息您好您申请的党员由于不符合条件的原因已被驳回
*/
String AUDIT_REJECT_MSG = "您好,您申请的%s党员,由于不符合条件的原因,已被驳回。";
String AUDIT_REJECT_MSG = "您申请的%s党员,由于不符合条件的原因,已被驳回。";
/**
* 党员申请behavior
*/
String WX_PARTY_AUTH_BEHAVIOR = "党员申请消息";
}

20
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/PartyMemberConfirmServiceImpl.java

@ -645,14 +645,17 @@ public class PartyMemberConfirmServiceImpl implements PartyMemberConfirmService
String messageContent = String.format(userMsg, gridName);
userMessageFormDTO.setMessageContent(messageContent);
userMessageFormDTO.setReadFlag(ReadFlagConstant.UN_READ);
userMessageFormDTO.setUserId(formDTO.getUserId());
//发送微信订阅消息
WxSubscribeMessageFormDTO wxSubscribeMessageFormDTO = new WxSubscribeMessageFormDTO();
wxSubscribeMessageFormDTO.setCustomerId(formDTO.getCustomerId());
wxSubscribeMessageFormDTO.setUserId(formDTO.getUserId());
wxSubscribeMessageFormDTO.setClientType(AppClientConstant.APP_RESI);
wxSubscribeMessageFormDTO.setBehaviorType(ResiWarmUserMessageConstant.WX_WARMHEARTED_BEHAVIOR);
wxSubscribeMessageFormDTO.setGridId(formDTO.getGridId());
wxSubscribeMessageFormDTO.setBehaviorType(PartyMemberMessageConstant.WX_PARTY_AUTH_BEHAVIOR);
wxSubscribeMessageFormDTO.setMessageContent(messageContent);
wxSubscribeMessageFormDTO.setMessageTime(new Date());
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
msgList.add(wxSubscribeMessageFormDTO);
epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
@ -696,9 +699,11 @@ public class PartyMemberConfirmServiceImpl implements PartyMemberConfirmService
//4:遍历找出当前网格的所有网格长并给网格长发消息
List<UserMessageFormDTO> msgList = new ArrayList<>();
List<WxSubscribeMessageFormDTO> subscribeList = new ArrayList<>();
staffList.forEach(staff->{
roleList.forEach(role->{
if(staff.getUserId().equals(role.getStaffId())){
//站内信
UserMessageFormDTO msgDTO = new UserMessageFormDTO();
msgDTO.setCustomerId(formDTO.getCustomerId());
msgDTO.setGridId(formDTO.getGridId());
@ -708,9 +713,22 @@ public class PartyMemberConfirmServiceImpl implements PartyMemberConfirmService
msgDTO.setMessageContent(message);
msgDTO.setReadFlag(ReadFlagConstant.UN_READ);
msgList.add(msgDTO);
//微信订阅
WxSubscribeMessageFormDTO subscribeDTO = new WxSubscribeMessageFormDTO();
subscribeDTO.setClientType(AppClientConstant.APP_GOV);
subscribeDTO.setGridId(formDTO.getGridId());
subscribeDTO.setUserId(staff.getUserId());
subscribeDTO.setCustomerId(formDTO.getCustomerId());
subscribeDTO.setBehaviorType(PartyMemberMessageConstant.WX_PARTY_AUTH_BEHAVIOR);
subscribeDTO.setMessageContent(message);
subscribeDTO.setMessageTime(new Date());
subscribeList.add(subscribeDTO);
}
});
});
if (subscribeList.size() > NumConstant.ZERO){
epmetMessageOpenFeignClient.sendWxSubscribeMessage(subscribeList);
}
if (msgList.size() > NumConstant.ZERO) {
result = epmetMessageOpenFeignClient.saveUserMessageList(msgList);
}

4
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/warmhearted/constant/ResiWarmUserMessageConstant.java

@ -19,12 +19,12 @@ public interface ResiWarmUserMessageConstant {
/**
* 热心居民申请审核通过给申请人发送消息您好您申请的第三网格热心居民已审核通过请查看
*/
String AUDIT_APPROVE_MSG = "您好,您申请的%s热心居民已审核通过,请查看。";
String AUDIT_APPROVE_MSG = "您申请的%s热心居民已审核通过,请查看。";
/**
* 热心居民申请审核驳回给申请人发送消息您好您申请的第三网格热心居民已被驳回原因不符合要求
*/
String AUDIT_REJECT_MSG = "您好,您申请的%s热心居民,已被驳回,原因:%s";
String AUDIT_REJECT_MSG = "您申请的%s热心居民,已被驳回,原因:%s";
/**
* 热心居民申请-微信订阅behavior

22
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/warmhearted/service/impl/ResiWarmheartedApplyServiceImpl.java

@ -66,10 +66,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -268,9 +265,11 @@ public class ResiWarmheartedApplyServiceImpl extends BaseServiceImpl<ResiWarmhea
List<GovStaffRoleResultDTO> roleList = resultList.getData();
//3:遍历找出当前网格的所有网格长并给网格长发消息
List<UserMessageFormDTO> msgList = new ArrayList<>();
List<WxSubscribeMessageFormDTO> subscribeList = new ArrayList<>();
staffList.forEach(staff->{
roleList.forEach(role->{
if(staff.getUserId().equals(role.getStaffId())){
//站内信
UserMessageFormDTO msgDTO = new UserMessageFormDTO();
msgDTO.setCustomerId(formDTO.getCustomerId());
msgDTO.setGridId(formDTO.getGridId());
@ -280,9 +279,22 @@ public class ResiWarmheartedApplyServiceImpl extends BaseServiceImpl<ResiWarmhea
msgDTO.setMessageContent(formDTO.getMessageText());
msgDTO.setReadFlag(ReadFlagConstant.UN_READ);
msgList.add(msgDTO);
//微信订阅
WxSubscribeMessageFormDTO subscribeDTO = new WxSubscribeMessageFormDTO();
subscribeDTO.setClientType(AppClientConstant.APP_GOV);
subscribeDTO.setGridId(formDTO.getGridId());
subscribeDTO.setUserId(staff.getUserId());
subscribeDTO.setCustomerId(formDTO.getCustomerId());
subscribeDTO.setBehaviorType(ResiWarmUserMessageConstant.WX_WARMHEARTED_BEHAVIOR);
subscribeDTO.setMessageContent(formDTO.getMessageText());
subscribeDTO.setMessageTime(new Date());
subscribeList.add(subscribeDTO);
}
});
});
if (subscribeList.size() > NumConstant.ZERO){
epmetMessageOpenFeignClient.sendWxSubscribeMessage(subscribeList);
}
if (msgList.size() > NumConstant.ZERO) {
result = epmetMessageFeignClient.saveUserMessageList(msgList);
}
@ -446,9 +458,11 @@ public class ResiWarmheartedApplyServiceImpl extends BaseServiceImpl<ResiWarmhea
WxSubscribeMessageFormDTO wxSubscribeMessageFormDTO = new WxSubscribeMessageFormDTO();
wxSubscribeMessageFormDTO.setCustomerId(formDTO.getCustomerId());
wxSubscribeMessageFormDTO.setUserId(formDTO.getUserId());
wxSubscribeMessageFormDTO.setGridId(formDTO.getGridId());
wxSubscribeMessageFormDTO.setClientType(AppClientConstant.APP_RESI);
wxSubscribeMessageFormDTO.setBehaviorType(ResiWarmUserMessageConstant.WX_WARMHEARTED_BEHAVIOR);
wxSubscribeMessageFormDTO.setMessageContent(messageContent);
wxSubscribeMessageFormDTO.setMessageTime(new Date());
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
msgList.add(wxSubscribeMessageFormDTO);
epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);

21
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/OrganizeTreeFormDTO.java

@ -0,0 +1,21 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 外挂-获取当前组织及部门网格数据递归查询所有下级数据-接口入参
* @Auth sun
*/
@Data
public class OrganizeTreeFormDTO implements Serializable {
private static final long serialVersionUID = -5093758817860808310L;
@NotBlank(message = "组织Id不能为空" , groups = StaffIdGroup.class)
private String agencyId;
public interface StaffIdGroup extends CustomerClientShowGroup{}
}

53
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/BasicInfoResultDTO.java

@ -0,0 +1,53 @@
package com.epmet.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author sun
* @dscription
*/
@NoArgsConstructor
@Data
public class BasicInfoResultDTO implements Serializable {
private static final long serialVersionUID = 8987281818368677411L;
/**
* 工作人员id,后台userId
*/
private String staffId;
/**
* 头像
*/
private String staffHeadPhoto;
/**
* 真实姓名
*/
private String realName;
/**
* 性别0未知1男2女
*/
private Integer gender;
/**
* 手机号
*/
private String mobile;
/**
* 未禁用enable,已禁用disabled
*/
private String enableFlag;
/**
* inactive未激活active已激活
*/
private String activeFlag;
/**
* 激活时间
*/
private String activeTime;
/**
* fulltime专职parttime兼职
*/
private String workType;
}

7
epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java

@ -327,4 +327,11 @@ public interface EpmetUserOpenFeignClient {
**/
@PostMapping(value = "epmetuser/staffagencyvisited/getstaffbasicinfo")
Result<StaffBasicInfo> getStaffBasicInfo(@RequestBody StaffBasicInfoFormDTO formDTO);
/**
* 根据staffId查询用户基本信息
* @author sun
*/
@PostMapping("/epmetuser/customerstaff/getstaffbasicinfo")
Result<BasicInfoResultDTO> getStaffBasicInfo(@RequestBody StaffBasicInfoFromDTO fromDTO);
}

5
epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java

@ -220,4 +220,9 @@ public class EpmetUserOpenFeignClientFallback implements EpmetUserOpenFeignClien
public Result<StaffBasicInfo> getStaffBasicInfo(StaffBasicInfoFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getStaffBasicInfo", formDTO);
}
@Override
public Result<BasicInfoResultDTO> getStaffBasicInfo(StaffBasicInfoFromDTO fromDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getStaffBasicInfo", fromDTO);
}
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save