From 9b48b13d3959d92e7d807f17c4db7e94f13b5820 Mon Sep 17 00:00:00 2001 From: luozukai Date: Fri, 8 Mar 2019 14:06:34 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=B6=88=E6=81=AF=E7=BB=84=E4=BB=B6][?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0][=E6=B7=BB=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E9=80=9A=E7=9F=A5]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/iformall/mq/MqBaseConsumer.java | 15 ++-- .../com/iformall/domain/po/SmartAppMsg.java | 68 +++++++++++++++++++ .../com/iformall/enums/EnumMsgRecordType.java | 2 +- .../iformall/mapper/WxMsgRecordMapper.java | 8 ++- .../iformall/service/WxMsgRecordService.java | 6 ++ .../impl/SendSmartAppMsgServiceImpl.java | 63 +++++++++++++++++ .../service/impl/WxMsgRecordServiceImpl.java | 16 +++-- .../resources/mapper/WxMsgRecordMapper.xml | 44 +++++++++--- 8 files changed, 200 insertions(+), 22 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/domain/po/SmartAppMsg.java create mode 100644 mallinkService/src/main/java/com/iformall/service/impl/SendSmartAppMsgServiceImpl.java diff --git a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java index 93e689318..2c2cb48c2 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java +++ b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java @@ -1,14 +1,12 @@ package com.iformall.mq; -import com.iformall.domain.po.BaseMsg; -import com.iformall.domain.po.MailMsg; -import com.iformall.domain.po.WxMsg; -import com.iformall.domain.po.WxMsgRecord; +import com.iformall.domain.po.*; import com.iformall.enums.EnumMsgRecordStatus; import com.iformall.enums.EnumMsgRecordType; import com.iformall.mapper.WxMsgRecordMapper; import com.iformall.service.impl.SendCallBackSmsServiceImpl; import com.iformall.service.impl.SendEmailServiceImpl; +import com.iformall.service.impl.SendSmartAppMsgServiceImpl; import com.iformall.service.impl.SendSmsServiceImpl; import com.iformall.utils.JsonUtil; import lombok.extern.slf4j.Slf4j; @@ -17,6 +15,9 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +/** + * 消息消费入口 + */ @Slf4j @Service public class MqBaseConsumer { @@ -29,6 +30,8 @@ public class MqBaseConsumer { private SendCallBackSmsServiceImpl sendCallBackSmsService; @Autowired private SendEmailServiceImpl sendEmailService; + @Autowired + private SendSmartAppMsgServiceImpl sendSmartAppMsgService; public void doMessage(String message) { log.info("received message: {}", message); @@ -44,11 +47,13 @@ public class MqBaseConsumer { sendCallBackSmsService.send((WxMsg)JsonUtil.readValue(message,WxMsg.class)); }else if(EnumMsgRecordType.EMAIL.getCode().equals(baseMsg.getMsgType())){ sendEmailService.send((MailMsg)JsonUtil.readValue(message,MailMsg.class)); + }else if(EnumMsgRecordType.SMART_APP.getCode().equals(baseMsg.getMsgType())){ + sendSmartAppMsgService.send((SmartAppMsg)JsonUtil.readValue(message,SmartAppMsg.class)); } baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_SUCC.getCode()); wxMsgRecordMapper.update(baseMsg); - }catch (Throwable e){ + }catch (Exception e){ e.printStackTrace(); if(null != baseMsg){ baseMsg.setStatusMessage(e.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/SmartAppMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/SmartAppMsg.java new file mode 100644 index 000000000..d13301b6f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/SmartAppMsg.java @@ -0,0 +1,68 @@ +package com.iformall.domain.po; + +import cn.binarywang.wx.miniapp.bean.WxMaTemplateData; +import java.util.List; + +/** + * @author luozukai + * @date 2019/3/7 10:05 + */ +public class SmartAppMsg extends BaseMsg { + private static final long serialVersionUID = 223232132183760321L; + + private String tenantId; + private String to; + private String from; + private String templateId; + private Integer templateType; + private List templateDataList; + + + public String getTemplateId() { + return templateId; + } + + public void setTemplateId(String templateId) { + this.templateId = templateId; + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public Integer getTemplateType() { + return templateType; + } + + public void setTemplateType(Integer templateType) { + this.templateType = templateType; + } + + public List getTemplateDataList() { + return templateDataList; + } + + public void setTemplateDataList(List templateDataList) { + this.templateDataList = templateDataList; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java index a0b3f47dd..d212db91d 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java @@ -7,7 +7,7 @@ public enum EnumMsgRecordType { SMS(1, "短信"), SMS_CALLBACK(2, "业务短信"), EMAIL(3, "邮件"), - SMART(4, "小程序"), + SMART_APP(4, "小程序"), PUBLIC(5, "公众号"), SYSTEM(6, "系统通知"), ; diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java index 6fbe62f0b..04b6d3343 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java @@ -4,10 +4,14 @@ import com.iformall.common.CommonMapper; import com.iformall.domain.po.BaseMsg; import com.iformall.domain.po.WxMsgRecord; +import java.util.List; + public interface WxMsgRecordMapper extends CommonMapper { void update(BaseMsg record); - - + + List findList(WxMsgRecord record); + + void update(WxMsgRecord record); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxMsgRecordService.java b/mallinkService/src/main/java/com/iformall/service/WxMsgRecordService.java index 4bf015c83..252e9b9c5 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMsgRecordService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMsgRecordService.java @@ -1,7 +1,13 @@ package com.iformall.service; import com.iformall.domain.po.BaseMsg; +import com.iformall.domain.po.WxMsgRecord; +import java.util.List; public interface WxMsgRecordService { void save(BaseMsg baseMsg); + + List findList(WxMsgRecord record); + + void update(WxMsgRecord record); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/SendSmartAppMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/SendSmartAppMsgServiceImpl.java new file mode 100644 index 000000000..f77b3e117 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/SendSmartAppMsgServiceImpl.java @@ -0,0 +1,63 @@ +package com.iformall.service.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.*; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxTemplateMsgMapper; +import com.iformall.service.MsgSendService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + * 发送微信小程序消息 + * @author luozukai + * @date 2019/3/7 16:03 + */ +@Service +public class SendSmartAppMsgServiceImpl implements MsgSendService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxTemplateMsgMapper wxTemplateMsgMapper; + @Autowired + private WxMaService wxMaService; + + @Override + public void send(BaseMsg baseMsg) throws Exception{ + SmartAppMsg smartAppMsg = (SmartAppMsg)baseMsg; + WxTemplateMsg msg = null; + WxMaTemplateMessage templateMessage = null; + + WxTemplateMsg msgQ = new WxTemplateMsg(); + msgQ.setTenantId(smartAppMsg.getTenantId()); + msgQ.setType(smartAppMsg.getTemplateType()); + List list = wxTemplateMsgMapper.select(msgQ); + if (list.size() > 0) { + msg = list.get(0); + } + if (msg == null) { + logger.error("找不到模板Id"); + throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND); + } + /** + * 核销失败 + * 商品名称 {{keyword1.DATA}} + * 核销时间 {{keyword2.DATA}} + * 失败原因 {{keyword3.DATA}} + * 备注 {{keyword4.DATA}} + */ + templateMessage = WxMaTemplateMessage.builder() + .toUser(smartAppMsg.getTo()) + .formId(smartAppMsg.getFrom()) // 微信支付的formId是prepayId + .page("pages/index/index") + .data(smartAppMsg.getTemplateDataList()) + .templateId(smartAppMsg.getTemplateId()) + .emphasisKeyword("keyword1.DATA") + .build(); + wxMaService.getMsgService().sendTemplateMsg(templateMessage); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgRecordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgRecordServiceImpl.java index e3e418d35..2072a79d6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgRecordServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgRecordServiceImpl.java @@ -4,10 +4,9 @@ import com.iformall.domain.po.*; import com.iformall.mapper.*; import com.iformall.service.WxMsgRecordService; import com.iformall.utils.JsonUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; import java.util.UUID; /** @@ -21,18 +20,27 @@ public class WxMsgRecordServiceImpl implements WxMsgRecordService { @Override public void save(BaseMsg data) { + data.setUuid(UUID.randomUUID().toString()); if(data instanceof WxMsgRecord){ WxMsgRecord msgRecord = (WxMsgRecord)data; - msgRecord.setUuid(UUID.randomUUID().toString()); if(msgRecord.getDynamicContentMap() != null && msgRecord.getDynamicContentMap().size() > 0) { msgRecord.setDynamicContent(JsonUtil.obj2Json(msgRecord.getDynamicContentMap())); } wxMsgRecordMapper.insertSelective(msgRecord); }else if(data instanceof WxMsg || data instanceof MailMsg){ WxMsgRecord msgRecord = new WxMsgRecord(); - msgRecord.setUuid(UUID.randomUUID().toString()); msgRecord.setMsgJson(JsonUtil.obj2Json(data)); wxMsgRecordMapper.insertSelective(msgRecord); } } + + @Override + public List findList(WxMsgRecord record) { + return wxMsgRecordMapper.findList(record); + } + + @Override + public void update(WxMsgRecord record) { + wxMsgRecordMapper.update(record); + } } diff --git a/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml b/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml index cb7f821b3..9f0e34fcb 100644 --- a/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml @@ -28,32 +28,56 @@ + + id,tenant_id,domain,msg_type,msg,send_time,model_id,sender,sender_user_id,sender_user_name,receiver,receiver_user_id, + receiver_user_name,msg_status,status_message,createtime,updatetime,uuid,signature,model_type,dynamic_content,msg_json + + + where 1 = 1 - - + and `id` = #{id} - - - - + + and `tenant_id` = #{tenantId} - - + + + and `receiver_user_id` = #{receiverUserId} + + + and `receiver` = #{receiver} + + + and `msg_status` = #{msgStatus} + + + and `domain` = #{domain} + + and id in #{idItem} - order by ${sortColumns} + order by createtime desc update wx_msg_record set updatetime = now() ,msg_status = #{msgStatus} ,status_message = #{statusMessage} - where uuid = #{uuid} + + and uuid = #{uuid} + and id = #{id} + + + +