Browse Source

Merge branch 'dev_wx_msg' into dev_temp

# Conflicts:
#	epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectProcessServiceImpl.java
#	epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
master
sunyuchao 5 years ago
parent
commit
de03d524f0
  1. 3
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/constant/ActMessageConstant.java
  2. 17
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActServiceImpl.java
  3. 37
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/WorkActUserServiceImpl.java
  4. 4
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/WxmpMsgSendRecordDTO.java
  5. 5
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/dto/form/WxSubscribeMessageFormDTO.java
  6. 24
      epmet-module/epmet-message/epmet-message-server/pom.xml
  7. 49
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/config/AsyncConfig.java
  8. 18
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/constant/WxmpMessageConstant.java
  9. 18
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/controller/WxmpMessageController.java
  10. 3
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/dao/WxmpResiUserSubscribeDao.java
  11. 3
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/dao/WxmpWorkUserSubscribeDao.java
  12. 5
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/entity/WxmpMsgSendRecordEntity.java
  13. 3
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/excel/WxmpMsgSendRecordExcel.java
  14. 25
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/properties/ThreadProperties.java
  15. 126
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/WxmpMessageServiceImpl.java
  16. 8
      epmet-module/epmet-message/epmet-message-server/src/main/resources/bootstrap.yml
  17. 2
      epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/WxmpMsgSendRecordDao.xml
  18. 1
      epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/WxmpResiUserSubscribeDao.xml
  19. 1
      epmet-module/epmet-message/epmet-message-server/src/main/resources/mapper/WxmpWorkUserSubscribeDao.xml
  20. 27
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CustomerTemplateListFormDTO.java
  21. 30
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/CustomerTemplateListResultDTO.java
  22. 15
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PersonalTemplateController.java
  23. 9
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PersonalTemplateDao.java
  24. 9
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PersonalTemplateService.java
  25. 12
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PersonalTemplateServiceImpl.java
  26. 43
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/enums/WxMaErrorMsgEnum.java
  27. 15
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PersonalTemplateDao.xml
  28. 9
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/constant/UserMessageConstant.java
  29. 77
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
  30. 4
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java
  31. 9
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/UserMessageConstant.java
  32. 38
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectProcessServiceImpl.java
  33. 47
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  34. 4
      epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectStaffDao.xml
  35. 23
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java
  36. 8
      epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/utils/ModuleConstant.java
  37. 12
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/constant/UserMessageConstant.java
  38. 46
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java
  39. 31
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java
  40. 5
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/constant/PartyMemberMessageConstant.java
  41. 16
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/PartyMemberConfirmServiceImpl.java
  42. 16
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/warmhearted/service/impl/ResiWarmheartedApplyServiceImpl.java

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,请注意查看";
}

17
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,25 @@ 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("给审核通过的用户发送消息成功");
}
Result wxmpMsg = epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
if (wxmpMsg.success()) {
logger.info("给审核通过的用户推送微信订阅消息成功");
}
}
}

37
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,38 @@ 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);
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

4
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

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

@ -54,4 +54,9 @@ public class WxSubscribeMessageFormDTO implements Serializable {
@NotNull(message = "消息时间不能为空")
private Date messageTime;
/**
* 网格id-居民端用
*/
private String gridId;
}

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

@ -165,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>
@ -197,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>
@ -229,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>
@ -258,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();
}
}

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";

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

@ -17,6 +17,7 @@
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;
@ -26,10 +27,13 @@ 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.*;
import java.util.List;
import java.util.concurrent.ExecutorService;
/**
@ -42,12 +46,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
@ -74,7 +83,16 @@ public class WxmpMessageController {
for (WxSubscribeMessageFormDTO wxSubscribeMessageFormDTO : msgList) {
ValidatorUtils.validateEntity(wxSubscribeMessageFormDTO);
}
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();
}

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

@ -67,13 +67,12 @@ public interface WxmpResiUserSubscribeDao extends BaseDao<WxmpResiUserSubscribeE
/**
* @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);
String getResiSubscribeTemplateId(@Param("openId") String openId, @Param("customerId") String customerId);
WxmpResiUserSubscribeEntity getWxResiSubscribe(@Param("userId") String userId, @Param("customerId") String customerId,
@Param("templateId") String templateId);

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

@ -68,13 +68,12 @@ public interface WxmpWorkUserSubscribeDao extends BaseDao<WxmpWorkUserSubscribeE
/**
* @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);
String getWorkSubscribeTemplateId(@Param("openId") String openId, @Param("customerId") String customerId);
WxmpWorkUserSubscribeEntity getWxWorkSubscribe(@Param("userId") String userId,
@Param("customerId") String customerId,

5
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
*/

3
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;

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() {
}
}
}

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

@ -32,14 +32,8 @@ 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.dto.result.StaffBasicInfo;
import com.epmet.dto.result.UserBasicInfo;
import com.epmet.dto.result.WxMsgAuthInfoResultDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.entity.*;
import com.epmet.exception.WxSubscribeException;
import com.epmet.feign.EpmetUserOpenFeignClient;
@ -90,8 +84,8 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
private WxmpUserSubscribeRecordDao subscribeRecordDao;
/**
* @Description 保存系统授权信息
* @return void
* @Description 保存系统授权信息
* @author wxz
* @date 2020.10.21 17:29
*/
@ -139,7 +133,7 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
UserBasicInfoFormDTO userBasicInfoFormDTO = new UserBasicInfoFormDTO();
userBasicInfoFormDTO.setUserId(userId);
openId = epmetUserOpenFeignClient.getUserBasicInfo(userBasicInfoFormDTO).getData().getOpenId();
} else if (WxmpMessageConstant.WORK.equals(clientType)) {
} else if (WxmpMessageConstant.GOV_DB.equals(clientType)) {
StaffBasicInfoFormDTO staffBasicInfoFormDTO = new StaffBasicInfoFormDTO();
staffBasicInfoFormDTO.setStaffId(userId);
openId = epmetUserOpenFeignClient.getStaffBasicInfo(staffBasicInfoFormDTO).getData().getOpenId();
@ -155,7 +149,14 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
}
//获取accessToken
StringBuilder key = new StringBuilder(msg.getCustomerId()).append(":").append(msg.getClientType());
String clientTypeRedis = null;
if (WxmpMessageConstant.RESI.equals(msg.getClientType())) {
clientTypeRedis = WxmpMessageConstant.RESI;
}
if (WxmpMessageConstant.GOV_DB.equals(msg.getClientType())) {
clientTypeRedis = WxmpMessageConstant.GOV_REDIS;
}
StringBuilder key = new StringBuilder(msg.getCustomerId()).append(":").append(clientTypeRedis);
Map<String, Object> authorizerRefreshToken = new HashMap<>();
try {
authorizerRefreshToken = wxmpMessageRedis.getAuthorizerRefreshToken(key.toString());
@ -168,20 +169,35 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
}
//获取模板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 (WxmpMessageConstant.RESI.equals(clientType)) {
// templateId = wxmpResiUserSubscribeDao.getResiSubscribeTemplateId(openId, customerId);
// } else if (WxmpMessageConstant.GOV_DB.equals(clientType)) {
// templateId = wxmpWorkUserSubscribeDao.getWorkSubscribeTemplateId(openId, customerId);
// }
CustomerTemplateListFormDTO customerTemplateListFormDTO = new CustomerTemplateListFormDTO();
customerTemplateListFormDTO.setCustomerId(customerId);
customerTemplateListFormDTO.setPublicId(WxmpMessageConstant.TEMPLATE_TYPE);
List<CustomerTemplateListResultDTO> customerTemplateListResultDTOS = customerTemplateList(customerTemplateListFormDTO);
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)) {
} else if (WxmpMessageConstant.GOV_DB.equals(clientType)) {
count = wxmpWorkUserSubscribeDao.getWorkSubscribeInfo(openId, templateId, customerId);
}
if (count == null) {
@ -199,16 +215,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(msg.getMessageTime())));
//标题
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("&userId=").append(userId);
jsonObject.put(WxmpMessageConstant.PAGE, govPage.toString());
}
//开发环境
if ("dev".equals(envEnum.getCode())) {
@ -229,7 +259,7 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
int decrease = 0;
if (WxmpMessageConstant.RESI.equals(clientType)) {
decrease = wxmpResiUserSubscribeDao.decreaseResiSubscribeCount(openId, templateId, customerId, 1);
} else if (WxmpMessageConstant.WORK.equals(clientType)) {
} else if (WxmpMessageConstant.GOV_DB.equals(clientType)) {
decrease = wxmpWorkUserSubscribeDao.decreaseWorkSubscribeCount(openId, templateId, customerId, 1);
}
if (decrease == 0) {
@ -247,7 +277,7 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
int clear = 0;
if (WxmpMessageConstant.RESI.equals(clientType)) {
clear = wxmpResiUserSubscribeDao.clearResiSubscribeCount(openId, templateId, customerId);
} else if (WxmpMessageConstant.WORK.equals(clientType)) {
} else if (WxmpMessageConstant.GOV_DB.equals(clientType)) {
clear = wxmpWorkUserSubscribeDao.clearWorkSubscribeCount(openId, templateId, customerId);
}
if (clear == 0) {
@ -256,9 +286,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();
@ -289,6 +318,7 @@ 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());
@ -310,7 +340,7 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
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);
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")) {
@ -324,6 +354,28 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
return resultList;
}
/**
* @return
* @Description 查询客户两个端小程序对应的站内信模板Id
* @author sun
*/
private List<CustomerTemplateListResultDTO> customerTemplateList(CustomerTemplateListFormDTO formDTO) {
String url = "https://epmet-cloud.elinkservice.cn/api/third/personaltemplate/templatelist";
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<CustomerTemplateListResultDTO> resultList = (List<CustomerTemplateListResultDTO>) mapToResult.getData();
return resultList;
}
@Override
public WxMsgAuthInfoResultDTO getAuthorizationInfo(String customerId, String clientType, String loginUserId, String templateId) {
return msgSubscribeStatusDao.getUserSubscribeStatusDTO(loginUserId, customerId, clientType, templateId);
@ -377,8 +429,8 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
}
/**
* @Description 保存居民端微信订阅信息
* @return void
* @Description 保存居民端微信订阅信息
* @author wxz
* @date 2020.10.22 09:56
*/
@ -404,8 +456,8 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
}
/**
* @Description 保存工作端订阅信息
* @return void
* @Description 保存工作端订阅信息
* @author wxz
* @date 2020.10.22 14:21
*/
@ -420,7 +472,7 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
insert.setWxOpenId(openId);
insert.setWxSubscribeStatus(wxSubscribeStatus);
wxmpWorkUserSubscribeDao.insert(insert);
return ;
return;
}
if (WxMsgTemplateSubscribeStatus.SUBSCRIBE.equals(wxSubscribeStatus)) {
@ -432,8 +484,8 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
}
/**
* @Description 根据UserId查询居民OpenId
* @return string
* @Description 根据UserId查询居民OpenId
* @author wxz
* @date 2020.10.22 13:35
*/
@ -442,18 +494,18 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
bif.setUserId(userId);
Result<UserBasicInfo> result = epmetUserOpenFeignClient.getUserBasicInfo(bif);
if (!result.success()) {
throw new RenException(String.format("查询居民OpenId失败,userId:%s,错误信息:%s",userId , result.getInternalMsg()));
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));
throw new RenException(String.format("根据userId:%s,没有查询到居民OpenId", userId));
}
return userBasicInfo.getOpenId();
}
/**
* @Description 查询工作人员openId
* @return java.lang.String
* @Description 查询工作人员openId
* @author wxz
* @date 2020.10.22 14:46
*/
@ -462,11 +514,11 @@ public class WxmpMessageServiceImpl implements WxmpMessageService {
form.setStaffId(userId);
Result<StaffBasicInfo> result = epmetUserOpenFeignClient.getStaffBasicInfo(form);
if (!result.success()) {
throw new RenException(String.format("查询工作人员OpenId失败,userId:%s,错误信息:%s",userId , result.getInternalMsg()));
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));
throw new RenException(String.format("根据userId:%s,没有查询到工作人员OpenId", userId));
}
return staffBasicInfo.getOpenId();
}

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

@ -119,3 +119,11 @@ ribbon:
pagehelper:
helper-dialect: mysql
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@

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

@ -11,6 +11,7 @@
template_id,
user_id,
wx_open_id,
grid_id
behavior_type,
title,
message_content,
@ -30,6 +31,7 @@
#{templateId},
#{userId},
#{wxOpenId},
#{gridId},
#{behaviorType},
#{title},
#{messageContent},

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

@ -44,7 +44,6 @@
where
del_flag = 0
and customer_id = #{customerId}
and template_id = #{templateId}
and wx_open_id = #{openId}
and wx_subscribe_status = 'subscribe'
limit 1

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

@ -50,7 +50,6 @@
where
del_flag = 0
and customer_id = #{customerId}
and template_id = #{templateId}
and wx_open_id = #{openId}
and wx_subscribe_status = 'subscribe'
limit 1

27
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/CustomerTemplateListFormDTO.java

@ -0,0 +1,27 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 获取客户小程序模板列表-接口入参
* @Author sun
*/
@Data
public class CustomerTemplateListFormDTO implements Serializable {
/**
* 客户Id
*/
@NotBlank(message="客户Id不能为空", groups = {AddUserInternalGroup.class})
private String customerId;
/**
* 微信公共模板库模板Id
*/
@NotBlank(message="公共模板Id不能为空", groups = {AddUserInternalGroup.class})
private String publicId;
public interface AddUserInternalGroup {}
}

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

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

15
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/PersonalTemplateController.java

@ -1,7 +1,10 @@
package com.epmet.controller;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.CustomerTemplateListFormDTO;
import com.epmet.dto.form.GetTemplateListFormDTO;
import com.epmet.dto.result.CustomerTemplateListResultDTO;
import com.epmet.dto.result.GetTemplateListResultDTO;
import com.epmet.service.PersonalTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
@ -30,8 +33,20 @@ public class PersonalTemplateController {
*/
@PostMapping("templatelist")
public Result<List<GetTemplateListResultDTO>> templateList(@RequestBody GetTemplateListFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, GetTemplateListFormDTO.AddUserInternalGroup.class);
return new Result<List<GetTemplateListResultDTO>>().ok(personalTemplateService.templateList(formDTO));
}
/**
* @return
* @Description 获取客户两个端站内信模板Id
* @author sun
*/
@PostMapping("customertemplatelist")
public Result<List<CustomerTemplateListResultDTO>> customerTemplateList(@RequestBody CustomerTemplateListFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, CustomerTemplateListFormDTO.AddUserInternalGroup.class);
return new Result<List<CustomerTemplateListResultDTO>>().ok(personalTemplateService.customerTemplateList(formDTO));
}
}

9
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PersonalTemplateDao.java

@ -19,8 +19,10 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.PersonalTemplateDTO;
import com.epmet.dto.form.CustomerTemplateListFormDTO;
import com.epmet.dto.form.GetTemplateListFormDTO;
import com.epmet.dto.result.CustomerTempResultDTO;
import com.epmet.dto.result.CustomerTemplateListResultDTO;
import com.epmet.dto.result.GetTemplateListResultDTO;
import com.epmet.dto.result.TemplateDTO;
import com.epmet.entity.PersonalTemplateEntity;
@ -85,4 +87,11 @@ public interface PersonalTemplateDao extends BaseDao<PersonalTemplateEntity> {
* @author sun
*/
List<GetTemplateListResultDTO> selectTemplateList(GetTemplateListFormDTO formDTO);
/**
* @return
* @Description 获取客户两个端站内信模板Id
* @author sun
*/
List<CustomerTemplateListResultDTO> selectCustomerTemplateList(CustomerTemplateListFormDTO formDTO);
}

9
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PersonalTemplateService.java

@ -20,7 +20,9 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.PersonalTemplateDTO;
import com.epmet.dto.form.CustomerTemplateListFormDTO;
import com.epmet.dto.form.GetTemplateListFormDTO;
import com.epmet.dto.result.CustomerTemplateListResultDTO;
import com.epmet.dto.result.GetTemplateListResultDTO;
import com.epmet.dto.result.TemplateDTO;
import com.epmet.entity.PersonalTemplateEntity;
@ -132,4 +134,11 @@ public interface PersonalTemplateService extends BaseService<PersonalTemplateEnt
* @author sun
*/
List<GetTemplateListResultDTO> templateList(GetTemplateListFormDTO formDTO);
/**
* @return
* @Description 获取客户两个端站内信模板Id
* @author sun
*/
List<CustomerTemplateListResultDTO> customerTemplateList(CustomerTemplateListFormDTO formDTO);
}

12
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PersonalTemplateServiceImpl.java

@ -25,7 +25,9 @@ import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.dao.PersonalTemplateDao;
import com.epmet.dto.PersonalTemplateDTO;
import com.epmet.dto.form.CustomerTemplateListFormDTO;
import com.epmet.dto.form.GetTemplateListFormDTO;
import com.epmet.dto.result.CustomerTemplateListResultDTO;
import com.epmet.dto.result.GetTemplateListResultDTO;
import com.epmet.dto.result.TemplateDTO;
import com.epmet.entity.PersonalTemplateEntity;
@ -129,4 +131,14 @@ public class PersonalTemplateServiceImpl extends BaseServiceImpl<PersonalTemplat
return baseDao.selectTemplateList(formDTO);
}
/**
* @return
* @Description 获取客户两个端站内信模板Id
* @author sun
*/
@Override
public List<CustomerTemplateListResultDTO> customerTemplateList(CustomerTemplateListFormDTO formDTO) {
return baseDao.selectCustomerTemplateList(formDTO);
}
}

43
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/wxapi/enums/WxMaErrorMsgEnum.java

@ -476,6 +476,17 @@ public enum WxMaErrorMsgEnum {
CODE_85012(85012, "无效的审核 id"),
CODE_87006(87006, "小游戏不能提交"),
CODE_86007(86007, "小程序禁止提交"),
CODE_85051(85012, "version_desc或者preview_info超限"),
CODE_85092(85092, "preview_info格式错误"),
CODE_85093(85093, "preview_info 视频或者图片个数超限"),
CODE_85094(85094, "需提供审核机制说明信息"),
CODE_86009(86009, "服务商新增小程序代码提审能力被限制"),
CODE_86010(86010, "服务商迭代小程序代码提审能力被限制"),
CODE_9400001(9400001, "该开发小程序已开通小程序直播权限,不支持发布版本。如需发版,请解绑开发小程序后再操作"),
CODE_9402202(9402202, "请勿频繁提交,待上一次操作完成后再提交"),
CODE_87013(87013, "撤回次数达到上限(每天一次,每个月 10 次)"),
CODE_85019(85019, "没有审核版本"),
@ -539,6 +550,38 @@ public enum WxMaErrorMsgEnum {
CODE_200020(200020, "关键词列表 kidList 参数错误"),
CODE_200021(200021, "场景描述 sceneDesc 参数错误"),
CODE_20002(20002, "商品id不存在"),
CODE_1003(1003, "POST参数非法"),
CODE_40005(40005, "上传素材文件格式不对"),
CODE_40006(40006, "上传素材文件大小超出限制"),
CODE_40008(40008, "不合法的消息类型"),
CODE_40010(40010, "不合法的语音文件大小"),
CODE_40011(40011, "不合法的视频文件大小"),
CODE_40012(40012, "不合法的缩略图文件大小"),
CODE_40015(40015, "不合法的菜单类型"),
CODE_40016(40016, "不合法的按钮个数"),
CODE_40017(40017, "不合法的按钮类型"),
CODE_40018(40018, "不合法的按钮名字长度"),
CODE_40019(40019, "不合法的按钮 KEY 长度"),
CODE_40020(40020, "不合法的按钮 URL 长度"),
CODE_40021(40021, "不合法的菜单版本号"),
CODE_40022(40022, "不合法的子菜单级数"),
CODE_40023(40023, "不合法的子菜单按钮个数"),
CODE_40024(40024, "不合法的子菜单按钮类型"),
CODE_40025(40025, "不合法的子菜单按钮名字长度"),
CODE_40026(40026, "不合法的子菜单按钮 KEY 长度"),
CODE_40027(40027, "不合法的子菜单按钮 URL 长度"),
CODE_40028(40028, "不合法的自定义菜单使用用户"),
CODE_40030(40030, "不合法的 refresh_token"),
CODE_40031(40031, "不合法的 openid 列表"),
CODE_40032(40032, "不合法的 openid 列表长度"),
CODE_40033(40033, "不合法的请求字符,不能包含 \\uxxxx 格式的字符"),
CODE_40034(40034, "无效的模板大小"),
CODE_40035(40035, "不合法的参数"),
CODE_40036(40036, "不合法的 template_id 长度"),
CODE_40038(40038, "不合法的请求格式"),
;
private int code;

15
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PersonalTemplateDao.xml

@ -89,4 +89,19 @@
ORDER BY CREATED_TIME DESC
</select>
<select id="selectCustomerTemplateList" resultType="com.epmet.dto.result.CustomerTemplateListResultDTO">
SELECT
pt.title AS "templateType",
pt.pri_tmpl_id AS "templateId",
cm.client AS "clientType"
FROM
personal_template pt
LEFT JOIN customer_mp cm ON pt.app_id = cm.app_id
WHERE
pt.del_flag = '0'
AND cm.del_flag = '0'
AND pt.customer_id = #{customerId}
AND pt.tid = #{publicId}
</select>
</mapper>

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】的新信息,请您尽快处理。";
}

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

@ -92,6 +92,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}")
@ -434,6 +436,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());
@ -468,6 +474,30 @@ 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);
}
return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
}
/**
* @param formDTO
@ -583,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());
@ -637,6 +671,49 @@ 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());
}
});
return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
}
/**
* @Description

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

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

@ -50,6 +50,7 @@ import com.epmet.entity.ProjectEntity;
import com.epmet.entity.ProjectOrgRelationEntity;
import com.epmet.entity.ProjectProcessEntity;
import com.epmet.entity.ProjectStaffEntity;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.feign.EpmetUserFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
@ -107,6 +108,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) {
@ -348,6 +351,11 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessDao
if (!transferMessage(formDTO).success()) {
throw new RenException(ProjectConstant.SAVE_MSG_EXCEPTION);
}
//5:调用epmet-message服务,给项目流转过程中的工作人员发送订阅的微信消息
if (!transferWxmpMessage(formDTO).success()) {
throw new RenException(ProjectConstant.SAVE_WXMP_MSG_EXCEPTION);
}
}
/**
@ -380,6 +388,36 @@ 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());
}
});
return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList);
}
/**
* @Description 议题处理进展已转项目

47
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,22 @@ 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
Result result = epmetMessageOpenFeignClient.sendWxSubscribeMessage(wxmpMsgList);
if (!result.success()) {
logger.error("项目结案成功,发送微信订阅消息失败" + JSON.toJSONString(result));
}
}
@Override
@ -580,6 +609,22 @@ 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
Result result = epmetMessageOpenFeignClient.sendWxSubscribeMessage(wxmpMsgList);
if (!result.success()) {
logger.error("项目退回成功,发送微信订阅消息失败" + JSON.toJSONString(result));
}
}
@Override

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">

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

@ -970,6 +970,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 +1048,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 +1086,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 +1148,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 +1175,24 @@ 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_RESI);
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);
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不存在

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

@ -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.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();
@ -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()){

31
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(currentUserId);
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();
@ -458,7 +471,8 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
wxSubscribeMessageFormDTO.setCustomerId(resiGroupMemberDTO.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<>();
@ -534,7 +548,8 @@ 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.setMessageContent(messageContent);
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
msgList.add(wxSubscribeMessageFormDTO);
@ -626,6 +641,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;
}

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

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

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

@ -651,6 +651,7 @@ public class PartyMemberConfirmServiceImpl implements PartyMemberConfirmService
wxSubscribeMessageFormDTO.setCustomerId(formDTO.getCustomerId());
wxSubscribeMessageFormDTO.setUserId(formDTO.getUserId());
wxSubscribeMessageFormDTO.setClientType(AppClientConstant.APP_RESI);
wxSubscribeMessageFormDTO.setGridId(formDTO.getGridId());
wxSubscribeMessageFormDTO.setBehaviorType(ResiWarmUserMessageConstant.WX_WARMHEARTED_BEHAVIOR);
wxSubscribeMessageFormDTO.setMessageContent(messageContent);
wxSubscribeMessageFormDTO.setMessageTime(new Date());
@ -697,9 +698,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());
@ -709,9 +712,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);
}

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

@ -265,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());
@ -277,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);
}
@ -443,6 +458,7 @@ 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);

Loading…
Cancel
Save