From 858108fe4d35051e979febf1a37ca00a609a92b1 Mon Sep 17 00:00:00 2001 From: Kurisu Date: Tue, 28 Sep 2021 17:43:14 +0800 Subject: [PATCH] :lipstick: 优化发送接口并新增批量发送接口 --- README.md | 8 ++++---- fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/api/IMessageCenterService.java | 13 ++++++++++++- fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/params/TemplateMessageParam.java | 19 ++++++------------- fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/params/ValidList.java | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ fw-hestia-server/src/main/java/cn/fw/hestia/server/controller/api/MessageCenterServiceImpl.java | 13 +++++++++++-- fw-hestia-service/src/main/java/cn/fw/hestia/service/buz/MessageCenterBizService.java | 46 +++++++++++++++++++++++++++++++++------------- 6 files changed, 208 insertions(+), 33 deletions(-) create mode 100644 fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/params/ValidList.java diff --git a/README.md b/README.md index b706bcc..d50f72b 100644 --- a/README.md +++ b/README.md @@ -13,17 +13,17 @@ ## 2. 接口 ### 发送模板消息 -`IMessageCenterService#send` +`IMessageCenterService#send` 单条 +`IMessageCenterService#sendBatch` 批量 。批量的情况参数为List, 返回值也为List **参数** |参数名|必须|类型|说明| |----|:----:|:----:|:----| -|memberIdSet|是 | Set| 会员id集合| +|memberId|是 | Long| 会员id| |title| 是 | String| 标题| |content|是|String|内容| -|changeType| 是 | String| 变更类型| -|changeResult| 是 | String| 变更结果。| +|extraMap| 否 | HashMap| 额外附带数据| |remark| 否 | String| 备注。| |path| 否 | String| 小程序页面路径。| |paramMap| 否 | HashMap| 跳转小程序所携带的参数。| diff --git a/fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/api/IMessageCenterService.java b/fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/api/IMessageCenterService.java index 864d5f3..7b8992d 100644 --- a/fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/api/IMessageCenterService.java +++ b/fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/api/IMessageCenterService.java @@ -2,6 +2,7 @@ package cn.fw.hestia.sdk.api; import cn.fw.data.base.domain.common.Message; import cn.fw.hestia.sdk.params.TemplateMessageParam; +import cn.fw.hestia.sdk.params.ValidList; import cn.fw.hestia.sdk.result.SendResult; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.DeleteMapping; @@ -9,6 +10,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; @@ -28,7 +30,16 @@ public interface IMessageCenterService { * @return */ @PostMapping("/send") - Message> send(@Valid @RequestBody TemplateMessageParam templateMessageParam); + Message send(@Valid @RequestBody TemplateMessageParam templateMessageParam); + + /** + * 批量发送模板消息 + * + * @param paramList + * @return + */ + @PostMapping("/sendBatch") + Message> sendBatch(@RequestBody @NotEmpty(message = "消息列表不能为空") @Valid ValidList paramList); /** * 撤回消息 diff --git a/fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/params/TemplateMessageParam.java b/fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/params/TemplateMessageParam.java index 2bfdb1c..689d95d 100644 --- a/fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/params/TemplateMessageParam.java +++ b/fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/params/TemplateMessageParam.java @@ -7,7 +7,6 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.util.Map; -import java.util.Set; /** * 模板消息param @@ -27,8 +26,8 @@ public class TemplateMessageParam { /** * 会员id */ - @Size(min = 1, message = "会员id不能为空") - private Set memberIdSet; + @NotNull(message = "会员id不能为空") + private Long memberId; /** * 标题 小程序展示用 * maxLength 32 @@ -42,19 +41,13 @@ public class TemplateMessageParam { @NotBlank(message = "消息内容不能为空") private String content; /** - * 备注 - */ - private String remark; - /** - * 变更类型 + * 额外展示内容 */ - @NotBlank(message = "变更类型不能为空") - private String changeType; + private Map extraMap; /** - * 变更结果 + * 备注 */ - @NotBlank(message = "变更结果不能为空") - private String changeResult; + private String remark; /** * 如需跳转小程序,则是小程序页面路径 */ diff --git a/fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/params/ValidList.java b/fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/params/ValidList.java new file mode 100644 index 0000000..6cf27b0 --- /dev/null +++ b/fw-hestia-sdk/src/main/java/cn/fw/hestia/sdk/params/ValidList.java @@ -0,0 +1,142 @@ +package cn.fw.hestia.sdk.params; + +import javax.validation.Valid; +import java.util.*; + +public class ValidList implements List { + + @Valid + private List list; + + public ValidList() { + this.list = new ArrayList<>(); + } + + public ValidList(List list) { + this.list = list; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + //重写List方法,可省略 + @Override + public int size() { + return list.size(); + } + + @Override + public boolean isEmpty() { + return list.isEmpty(); + } + + @Override + public boolean contains(Object o) { + return list.contains(o); + } + + @Override + public Iterator iterator() { + return list.iterator(); + } + + @Override + public Object[] toArray() { + return list.toArray(); + } + + @Override + public T[] toArray(T[] a) { + return list.toArray(a); + } + + @Override + public boolean add(E e) { + return list.add(e); + } + + @Override + public boolean remove(Object o) { + return list.remove(o); + } + + @Override + public boolean containsAll(Collection c) { + return list.contains(c); + } + + @Override + public boolean addAll(Collection c) { + return list.addAll(c); + } + + @Override + public boolean addAll(int index, Collection c) { + return list.addAll(index, c); + } + + @Override + public boolean removeAll(Collection c) { + return list.removeAll(c); + } + + @Override + public boolean retainAll(Collection c) { + return list.retainAll(c); + } + + @Override + public void clear() { + list.clear(); + } + + @Override + public E get(int index) { + return list.get(index); + } + + @Override + public E set(int index, E element) { + return list.set(index, element); + } + + @Override + public void add(int index, E element) { + list.add(index, element); + } + + @Override + public E remove(int index) { + return list.remove(index); + } + + @Override + public int indexOf(Object o) { + return list.indexOf(o); + } + + @Override + public int lastIndexOf(Object o) { + return list.lastIndexOf(o); + } + + @Override + public ListIterator listIterator() { + return list.listIterator(); + } + + @Override + public ListIterator listIterator(int index) { + return list.listIterator(index); + } + + @Override + public List subList(int fromIndex, int toIndex) { + return list.subList(fromIndex, toIndex); + } +} \ No newline at end of file diff --git a/fw-hestia-server/src/main/java/cn/fw/hestia/server/controller/api/MessageCenterServiceImpl.java b/fw-hestia-server/src/main/java/cn/fw/hestia/server/controller/api/MessageCenterServiceImpl.java index 60b7ba7..0d7fd2f 100644 --- a/fw-hestia-server/src/main/java/cn/fw/hestia/server/controller/api/MessageCenterServiceImpl.java +++ b/fw-hestia-server/src/main/java/cn/fw/hestia/server/controller/api/MessageCenterServiceImpl.java @@ -4,6 +4,7 @@ import cn.fw.common.web.annotation.ControllerMethod; import cn.fw.data.base.domain.common.Message; import cn.fw.hestia.sdk.api.IMessageCenterService; import cn.fw.hestia.sdk.params.TemplateMessageParam; +import cn.fw.hestia.sdk.params.ValidList; import cn.fw.hestia.sdk.result.SendResult; import cn.fw.hestia.service.buz.MessageCenterBizService; import lombok.extern.slf4j.Slf4j; @@ -12,9 +13,9 @@ import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import javax.validation.constraints.NotNull; - import java.util.List; +import static cn.fw.common.businessvalidator.Validator.BV; import static cn.fw.common.web.util.ResultBuilder.success; /** @@ -37,10 +38,18 @@ public class MessageCenterServiceImpl implements IMessageCenterService { @PostMapping("/send") @Override @ControllerMethod("发送模板消息") - public Message> send(@Valid @RequestBody TemplateMessageParam templateMessageParam) { + public Message send(@Valid @RequestBody TemplateMessageParam templateMessageParam) { return success(messageCenterBizService.saveMessage(templateMessageParam)); } + @PostMapping("/sendBatch") + @Override + @ControllerMethod("批量发送模板消息") + public Message> sendBatch(@RequestBody @Valid ValidList paramList) { + BV.isNotEmpty(paramList, () -> "消息列表不能为空"); + return success(messageCenterBizService.saveBatchMessage(paramList)); + } + @Override @DeleteMapping("/revoke") @ControllerMethod("撤回消息") diff --git a/fw-hestia-service/src/main/java/cn/fw/hestia/service/buz/MessageCenterBizService.java b/fw-hestia-service/src/main/java/cn/fw/hestia/service/buz/MessageCenterBizService.java index b2998e5..0b8b51d 100644 --- a/fw-hestia-service/src/main/java/cn/fw/hestia/service/buz/MessageCenterBizService.java +++ b/fw-hestia-service/src/main/java/cn/fw/hestia/service/buz/MessageCenterBizService.java @@ -64,8 +64,21 @@ public class MessageCenterBizService { * @return token */ @Transactional(rollbackFor = Exception.class) - public List saveMessage(TemplateMessageParam templateMessageParam) { - List messageHistory = createBeans(templateMessageParam); + public SendResult saveMessage(TemplateMessageParam templateMessageParam) { + MessageHistory messageHistory = createBeans(templateMessageParam); + messageHistoryService.save(messageHistory); + return new SendResult(messageHistory.getId(), messageHistory.getMemberId()); + } + + /** + * 批量发送 + * + * @param paramList + * @return token + */ + @Transactional(rollbackFor = Exception.class) + public List saveBatchMessage(List paramList) { + List messageHistory = createBeans(paramList); messageHistoryService.saveBatch(messageHistory); List list = new ArrayList<>(); for (MessageHistory history : messageHistory) { @@ -228,23 +241,30 @@ public class MessageCenterBizService { return result; } - private List createBeans(TemplateMessageParam param) { + private List createBeans(List paramList) { List list = new ArrayList<>(); - Set idSet = param.getMemberIdSet(); - BV.isNotEmpty(idSet, () -> "发送的目标用户不能为空"); - for (Long memberId : idSet) { - createBeans(param, memberId); - list.add(createBeans(param, memberId)); + for (TemplateMessageParam param : paramList) { + list.add(createBeans(param)); } return list; } - private MessageHistory createBeans(TemplateMessageParam param, Long memberId) { + private MessageHistory createBeans(TemplateMessageParam param) { MessageHistory messageHistory = new MessageHistory(); - messageHistory.setMemberId(memberId); + messageHistory.setMemberId(param.getMemberId()); messageHistory.setTemplateCode(getTemplateCode()); messageHistory.setTitle(param.getTitle()); - messageHistory.setContent(param.getContent()); + StringBuilder content = new StringBuilder(param.getContent()); + if (!CollectionUtils.isEmpty(param.getExtraMap())) { + content.append("\n"); + for (Map.Entry mapEntry : param.getExtraMap().entrySet()) { + content.append("\n") + .append(mapEntry.getKey()) + .append(":") + .append(mapEntry.getValue()); + } + } + messageHistory.setContent(content.toString()); messageHistory.setRemark(param.getRemark()); messageHistory.setPagePath(param.getPath()); messageHistory.setReadz(Boolean.FALSE); @@ -253,8 +273,8 @@ public class MessageCenterBizService { messageHistory.setSendTime(new Date()); messageHistory.setState(MessageStateEnum.MADA); List keywords = Arrays.asList( - new WxMpTempMessageData(param.getChangeType()), - new WxMpTempMessageData(param.getChangeResult()) + new WxMpTempMessageData(param.getTitle()), + new WxMpTempMessageData("无") ); messageHistory.setKeywords(JSONArray.toJSONString(keywords)); if (!CollectionUtils.isEmpty(param.getParamMap())) { -- libgit2 0.22.2