feat:服务号通知
This commit is contained in:
@@ -10,9 +10,12 @@ import com.cool.store.dto.notice.MessageTemplateCountDTO;
|
||||
import com.cool.store.dto.notice.NoticeDTO;
|
||||
import com.cool.store.dto.store.AuthStoreUserDTO;
|
||||
import com.cool.store.dto.store.StoreAreaDTO;
|
||||
import com.cool.store.dto.wechat.ServiceAccountOpenIdDTO;
|
||||
import com.cool.store.entity.*;
|
||||
import com.cool.store.enums.ErrorCodeEnum;
|
||||
import com.cool.store.enums.notice.*;
|
||||
import com.cool.store.enums.wechat.WechatTemplateDetailEnum;
|
||||
import com.cool.store.enums.wechat.WechatTemplateEnum;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.mapper.StoreGroupMappingMapper;
|
||||
import com.cool.store.mapper.StoreMapper;
|
||||
@@ -20,12 +23,15 @@ import com.cool.store.request.notice.*;
|
||||
import com.cool.store.response.bigdata.ApiResponse;
|
||||
import com.cool.store.service.MessageTemplateService;
|
||||
import com.cool.store.service.StoreService;
|
||||
import com.cool.store.service.wechat.WechatTemplateService;
|
||||
import com.cool.store.utils.CoolDateUtils;
|
||||
import com.cool.store.utils.RedisUtilPool;
|
||||
import com.cool.store.utils.poi.DateUtils;
|
||||
import com.cool.store.vo.PartnerUserInfoVO;
|
||||
import com.cool.store.vo.notice.*;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.gson.JsonObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
@@ -70,9 +76,13 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
|
||||
@Resource
|
||||
MatterConfigDAO matterConfigDAO;
|
||||
@Resource
|
||||
WechatTemplateService wechatTemplateService;
|
||||
@Resource
|
||||
RedisUtilPool redisUtilPool;
|
||||
@Resource
|
||||
TaskExecutor noticeThreadPool;
|
||||
@Resource
|
||||
HyPartnerUserInfoDAO hyPartnerUserInfoDAO;
|
||||
|
||||
|
||||
|
||||
@@ -207,6 +217,36 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
|
||||
JSONObject.toJSONString(request.getStoreInfoList()),
|
||||
JSONObject.toJSONString(request.getUserInfoList()),
|
||||
userId);
|
||||
|
||||
//发送通知
|
||||
Set<String> userIds = authUser.values().stream().flatMap(Collection::stream).collect(Collectors.toSet());
|
||||
|
||||
//分批 查询用户信息
|
||||
List<String> openIdList = new ArrayList<>();
|
||||
Lists.partition(new ArrayList<>(userIds), 100).forEach(x->{
|
||||
List<EnterpriseUserDO> userInfoByUserIds = enterpriseUserDAO.getUserInfoByUserIds(x);
|
||||
//取出用户的手机号,过滤掉空的手机号
|
||||
List<String> mobileList = userInfoByUserIds.stream().filter(user -> StringUtils.isNotBlank(user.getMobile())).map(EnterpriseUserDO::getMobile).collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(mobileList)){
|
||||
List<ServiceAccountOpenIdDTO> serviceAccountOpenIdDTOS = hyPartnerUserInfoDAO.selectLastBindRecord(mobileList);
|
||||
if (CollectionUtils.isNotEmpty(serviceAccountOpenIdDTOS)){
|
||||
//服务号ID
|
||||
openIdList.addAll(serviceAccountOpenIdDTOS.stream().map(ServiceAccountOpenIdDTO::getServiceAccountOpenId).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
MessageTemplateDO messageTemplateDO = list.get(0);
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put(WechatTemplateDetailEnum.CHARACTER_STRING2.getCode(), "ceshi002");
|
||||
data.put(WechatTemplateDetailEnum.THING10.getCode(), messageTemplateDO.getMessageTitle());
|
||||
data.put(WechatTemplateDetailEnum.TIME14.getCode(), DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START_1, messageTemplateDO.getDeadline()));
|
||||
data.put(WechatTemplateDetailEnum.THING25.getCode(), "正新管理有限公司");
|
||||
data.put(WechatTemplateDetailEnum.THING60.getCode(), "上海市-松江区");
|
||||
openIdList.forEach(x->{
|
||||
wechatTemplateService.sendMiniAppTemplate(x, WechatTemplateEnum.QUESTION_NOTICE,data,null);
|
||||
});
|
||||
} catch (Exception e) {
|
||||
log.info("发布流程异常,已取消发布");
|
||||
} finally {
|
||||
|
||||
@@ -127,58 +127,4 @@ public class WechatTemplateService {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void sendTemplateMessageAsync(WechatTemplateMessageDTO messageDTO, WechatCallback callback) {
|
||||
String accessToken = getAccessToken();
|
||||
if (accessToken == null) {
|
||||
log.error("获取access_token失败,无法发送模板消息");
|
||||
callback.onFailure(new IOException("获取access_token失败"));
|
||||
return;
|
||||
}
|
||||
|
||||
String url = String.format("%s?access_token=%s",
|
||||
wechatMpProperties.getSendTemplateMessageUrl(), accessToken);
|
||||
|
||||
okHttpUtil.doPostAsync(url, messageDTO, new okhttp3.Callback() {
|
||||
@Override
|
||||
public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException {
|
||||
try {
|
||||
String result = response.body() != null ? response.body().string() : null;
|
||||
log.info("异步发送模板消息响应: {}", result);
|
||||
|
||||
if (response.isSuccessful() && result != null) {
|
||||
callback.onSuccess(Boolean.TRUE);
|
||||
} else {
|
||||
callback.onFailure(new IOException("请求失败,状态码: " + response.code()));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
callback.onFailure(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(okhttp3.Call call, IOException e) {
|
||||
log.error("异步发送模板消息失败", e);
|
||||
callback.onFailure(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void sendNormalTemplateAsync(String openId, WechatTemplateEnum template,
|
||||
Map<String, Object> data, WechatCallback callback) {
|
||||
WechatTemplateMessageDTO messageDTO = templateMessageBuilder.buildNormalTemplate(openId, template, data);
|
||||
sendTemplateMessageAsync(messageDTO, callback);
|
||||
}
|
||||
|
||||
public void sendMiniAppTemplateAsync(String openId, WechatTemplateEnum template,
|
||||
Map<String, Object> data, String miniAppPagePath, WechatCallback callback) {
|
||||
WechatTemplateMessageDTO messageDTO = templateMessageBuilder.buildMiniappTemplate(
|
||||
openId, template, data, miniAppPagePath);
|
||||
sendTemplateMessageAsync(messageDTO, callback);
|
||||
}
|
||||
|
||||
public interface WechatCallback {
|
||||
void onSuccess(Boolean successFlag);
|
||||
void onFailure(Exception e);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user