From b8fac8823e49089ccb3ee586f56d10dcad017426 Mon Sep 17 00:00:00 2001 From: luozukai Date: Fri, 8 Mar 2019 09:56:59 +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=94=B9=E9=80=A0,=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E5=8E=9F=E6=9D=A5=E5=8F=91=E9=80=81=E6=96=B9?= =?UTF-8?q?=E5=BC=8F]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/iformall/domain/po/WxMsgRecord.java | 267 ++++++------------ .../iformall/mapper/WxMsgRecordMapper.java | 8 +- .../main/java/com/iformall/mq/MqProducer.java | 75 ----- .../mq/impl/RocketMqMessageProducer.java | 49 ++-- .../com/iformall/service/MsgSendService.java | 12 +- .../service/impl/SendSmsServiceImpl.java | 94 +++++- .../src/main/resources/mapper/WxMsgRecord.xml | 65 ----- .../resources/mapper/WxMsgRecordMapper.xml | 30 +- 8 files changed, 230 insertions(+), 370 deletions(-) delete mode 100644 mallinkService/src/main/java/com/iformall/mq/MqProducer.java delete mode 100644 mallinkService/src/main/resources/mapper/WxMsgRecord.xml diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java index e019cc5d5..908bcd293 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java @@ -2,225 +2,189 @@ package com.iformall.domain.po; import javax.persistence.Id; import javax.persistence.Table; -import javax.persistence.Transient; -import java.io.Serializable; import java.util.Date; -import java.util.List; +import java.util.Map; @Table(name = "wx_msg_record") -public class WxMsgRecord implements Serializable { +public class WxMsgRecord extends BaseMsg { private static final long serialVersionUID = 18957895653478L; @Id protected Long id; - - @Transient - protected List ids; - @Transient - protected String sortColumns; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getSortColumns() { - return sortColumns; - } - - public List getIds() { - return ids; - } - - public void setIds(List ids) { - this.ids = ids; - } - - //uuid - private String uuid; //租户id private String tenantId; //域1sys 2a端 3c端 4b端 - private String group; - //type - private Integer type; - //msg + private Integer domain; + //msg 消息类型1短信 2回调短信 邮件 3微信小程序模板 4微信公众号模板 5系统通 private String msg; //发送时间 private String sendTime; //model_id private Long modelId; //from,手机号邮件地址等 - private String from; + private String sender; //发送人id - private Long fromUserId; + private Long senderUserId; //发送人姓名 - private String fromUserName; + private String senderUserName; //接收人,手机号邮件地址等 - private String to; + private String receiver; //接收人用户id - private Long toUserId; + private Long receiverUserId; //接收人姓名 - private String toUserName; - //消费结果 - private Integer status; - //消费结果信息 - private String statusMessage; + private String receiverUserName; //签名 private String signature; //模板类型 private Integer modelType; - //动态内容(map结构的json数据) - private String dynamicContent; + //消息json + private String msgJson; private Date createtime; private Date updatetime; - public String getDynamicContent() { - return dynamicContent; - } + //动态替换内容 + private Map dynamicContentMap; + private String dynamicContent; - public void setDynamicContent(String dynamicContent) { - this.dynamicContent = dynamicContent; - } - public Integer getModelType() { - return modelType; + public String getMsgJson() { + return msgJson; } - public void setModelType(Integer modelType) { - this.modelType = modelType; + public void setMsgJson(String msgJson) { + this.msgJson = msgJson; } - public String getSignature() { - return signature; + public Map getDynamicContentMap() { + return dynamicContentMap; } - public void setSignature(String signature) { - this.signature = signature; + + public void setDynamicContentMap(Map dynamicContentMap) { + this.dynamicContentMap = dynamicContentMap; } - public String getUuid() { - return uuid; + public String getDynamicContent() { + return dynamicContent; } - public void setUuid(String uuid) { - this.uuid = uuid; + public void setDynamicContent(String dynamicContent) { + this.dynamicContent = dynamicContent; } - public String getTenantId() { - return tenantId; + public Long getId() { + return id; } - public void setTenantId(String tenantId) { - this.tenantId = tenantId; + public void setId(Long id) { + this.id = id; } - public String getGroup() { - return group; + public Integer getDomain() { + return domain; } - public void setGroup(String group) { - this.group = group; + public void setDomain(Integer domain) { + this.domain = domain; } - public Integer getType() { - return type; + public String getSender() { + return sender; } - public void setType(Integer type) { - this.type = type; + public void setSender(String sender) { + this.sender = sender; } - public String getMsg() { - return msg; + public Long getSenderUserId() { + return senderUserId; } - public void setMsg(String msg) { - this.msg = msg; + public void setSenderUserId(Long senderUserId) { + this.senderUserId = senderUserId; } - public String getSendTime() { - return sendTime; + public String getSenderUserName() { + return senderUserName; } - public void setSendTime(String sendTime) { - this.sendTime = sendTime; + public void setSenderUserName(String senderUserName) { + this.senderUserName = senderUserName; } - public Long getModelId() { - return modelId; + public String getReceiver() { + return receiver; } - public void setModelId(Long modelId) { - this.modelId = modelId; + public void setReceiver(String receiver) { + this.receiver = receiver; } - public String getFrom() { - return from; + public Long getReceiverUserId() { + return receiverUserId; } - public void setFrom(String from) { - this.from = from; + public void setReceiverUserId(Long receiverUserId) { + this.receiverUserId = receiverUserId; } - public Long getFromUserId() { - return fromUserId; + public String getReceiverUserName() { + return receiverUserName; } - public void setFromUserId(Long fromUserId) { - this.fromUserId = fromUserId; + public void setReceiverUserName(String receiverUserName) { + this.receiverUserName = receiverUserName; } - public String getFromUserName() { - return fromUserName; + public Integer getModelType() { + return modelType; } - public void setFromUserName(String fromUserName) { - this.fromUserName = fromUserName; + public void setModelType(Integer modelType) { + this.modelType = modelType; } - public String getTo() { - return to; + public String getSignature() { + return signature; } - public void setTo(String to) { - this.to = to; + public void setSignature(String signature) { + this.signature = signature; } - public Long getToUserId() { - return toUserId; + + public String getTenantId() { + return tenantId; } - public void setToUserId(Long toUserId) { - this.toUserId = toUserId; + public void setTenantId(String tenantId) { + this.tenantId = tenantId; } - public String getToUserName() { - return toUserName; + + public String getMsg() { + return msg; } - public void setToUserName(String toUserName) { - this.toUserName = toUserName; + public void setMsg(String msg) { + this.msg = msg; } - public Integer getStatus() { - return status; + public String getSendTime() { + return sendTime; } - public void setStatus(Integer status) { - this.status = status; + public void setSendTime(String sendTime) { + this.sendTime = sendTime; } - public String getStatusMessage() { - return statusMessage; + public Long getModelId() { + return modelId; } - public void setStatusMessage(String statusMessage) { - this.statusMessage = statusMessage; + public void setModelId(Long modelId) { + this.modelId = modelId; } public Date getCreatetime() { @@ -239,62 +203,5 @@ public class WxMsgRecord implements Serializable { this.updatetime = updatetime; } - public static enum Field - { - Id_ASC("`id` ASC"),Id_DESC("`id` DESC") - ,TenantId_ASC("`tenantId` ASC"),TenantId_DESC("`tenantId` DESC") - ,Name_ASC("`name` ASC"),Name_DESC("`name` DESC") - ,Available_ASC("`available` ASC"),Available_DESC("`available` DESC") - ,Description_ASC("`description` ASC"),Description_DESC("`description` DESC") - ; - private String value; - Field(String value){ - this.value = value; - } - public String getValue() { - return value; - } - public void setCol(String value) { - this.value = value; - } - @Override - public String toString() { - return this.getValue(); - } - } - - public void setSortColumns(WxMsgRecord.Field... fields) - { - if (fields == null || fields.length == 0) { - return; - } - for (int k = 0; k < fields.length; k++) { - if (fields[k] == null) { - return; - } - } - StringBuilder sb = new StringBuilder(fields[0].toString()); - for (int k = 1; k < fields.length; k++) { - sb.append(","); - sb.append(fields[k].toString()); - } - - } - - public void setSortColumns(String sortColumns) - { - if (sortColumns == null || "".equals(sortColumns.trim())) { - return; - } - if (sortColumns.contains(",")) { - String[] cols = sortColumns.split(","); - List fList = new java.util.ArrayList(); - for (int k = 0; k < cols.length; k++) { - fList.add(Field.valueOf(cols[k])); - } - this.setSortColumns(fList.toArray(new Field[fList.size()])); - } else { - this.setSortColumns(Field.valueOf(sortColumns)); - } - } + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java index dc88cb555..6fbe62f0b 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java @@ -1,16 +1,12 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; -import com.iformall.domain.po.MallRole; +import com.iformall.domain.po.BaseMsg; import com.iformall.domain.po.WxMsgRecord; -import org.apache.ibatis.annotations.Param; - -import java.util.List; -import java.util.Map; public interface WxMsgRecordMapper extends CommonMapper { - void update(WxMsgRecord record); + void update(BaseMsg record); diff --git a/mallinkService/src/main/java/com/iformall/mq/MqProducer.java b/mallinkService/src/main/java/com/iformall/mq/MqProducer.java deleted file mode 100644 index 16cfd94f0..000000000 --- a/mallinkService/src/main/java/com/iformall/mq/MqProducer.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.iformall.mq; - -import com.alibaba.druid.support.json.JSONUtils; -import com.iformall.domain.po.WxMsgRecord; -import com.iformall.enums.EnumMsgRecordStatus; -import com.iformall.mapper.WxMsgRecordMapper; -import lombok.extern.slf4j.Slf4j; -import org.apache.rocketmq.client.producer.DefaultMQProducer; -import org.apache.rocketmq.client.producer.SendCallback; -import org.apache.rocketmq.client.producer.SendResult; -import org.apache.rocketmq.common.message.Message; -import org.apache.rocketmq.remoting.common.RemotingHelper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import javax.annotation.PostConstruct; -import java.util.UUID; - -/** - * @Auther: luozukai - * @Date: 2019-01-31 - * @Description: RocketMQ消息生产者 - */ -@Service -@Slf4j -public class MqProducer { - private final Logger log = LoggerFactory.getLogger(this.getClass()); - private static final DefaultMQProducer producer = new DefaultMQProducer("DefaultProducer"); - @Value("${spring.rocketmq.nameServer}") - private String namesrvAddr; - @Autowired - private WxMsgRecordMapper wxMsgRecordMapper; - - @PostConstruct - public void start(){ - try { - producer.setNamesrvAddr(namesrvAddr); - //producer.setRetryTimesWhenSendFailed(5);//重试机制,默认2次 - //producer.setSendMsgTimeout(6000); //默认是3000 - producer.start(); - log.info("Message Producer Start..."); - }catch (Exception e){ - log.error("Message Producer Start Error!!",e); - } - } - - public void sendMessage(WxMsgRecord data, String topic, String tags, String keys) throws Throwable{ - try { - data.setUuid(UUID.randomUUID().toString()); - wxMsgRecordMapper.insert(data); - - byte[] messageBody = JSONUtils.toJSONString(data).getBytes(RemotingHelper.DEFAULT_CHARSET); - Message mqMsg = new Message(topic, tags, keys, messageBody); - producer.send(mqMsg, new SendCallback() { - @Override - public void onSuccess(SendResult sendResult) { - log.info("Message Producer: Send Message Success {}", sendResult); - - data.setStatus(EnumMsgRecordStatus.SEND_SUCC.getCode()); - wxMsgRecordMapper.update(data); - } - - @Override - public void onException(Throwable throwable) { - log.error("Message Producer: Send Message Error (onException)", throwable); - } - }); - } catch (Throwable e) { - e.printStackTrace(); - log.error("Message Producer: Send Message Error (sendMessage)", e); - } - } -} diff --git a/mallinkService/src/main/java/com/iformall/mq/impl/RocketMqMessageProducer.java b/mallinkService/src/main/java/com/iformall/mq/impl/RocketMqMessageProducer.java index 16cfd94f0..f34de661d 100644 --- a/mallinkService/src/main/java/com/iformall/mq/impl/RocketMqMessageProducer.java +++ b/mallinkService/src/main/java/com/iformall/mq/impl/RocketMqMessageProducer.java @@ -1,9 +1,14 @@ -package com.iformall.mq; +package com.iformall.mq.impl; -import com.alibaba.druid.support.json.JSONUtils; +import com.iformall.domain.po.BaseMsg; +import com.iformall.domain.po.WxMsg; import com.iformall.domain.po.WxMsgRecord; import com.iformall.enums.EnumMsgRecordStatus; import com.iformall.mapper.WxMsgRecordMapper; +import com.iformall.mq.MQConfig; +import com.iformall.mq.MqBaseProducer; +import com.iformall.service.WxMsgRecordService; +import com.iformall.utils.JsonUtil; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.SendCallback; @@ -14,31 +19,37 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import java.util.UUID; /** - * @Auther: luozukai + * @Auther: Stormeye * @Date: 2019-01-31 * @Description: RocketMQ消息生产者 */ @Service @Slf4j -public class MqProducer { +@Profile(MQConfig.Impl.ROCKET_MQ) +public class RocketMqMessageProducer implements MqBaseProducer { private final Logger log = LoggerFactory.getLogger(this.getClass()); - private static final DefaultMQProducer producer = new DefaultMQProducer("DefaultProducer"); + @Value("${spring.rocketmq.nameServer}") private String namesrvAddr; + + private static final DefaultMQProducer producer = new DefaultMQProducer("DefaultProducer"); + @Autowired private WxMsgRecordMapper wxMsgRecordMapper; + @Autowired + private WxMsgRecordService wxMsgRecordService; + @PostConstruct public void start(){ try { producer.setNamesrvAddr(namesrvAddr); - //producer.setRetryTimesWhenSendFailed(5);//重试机制,默认2次 - //producer.setSendMsgTimeout(6000); //默认是3000 producer.start(); log.info("Message Producer Start..."); }catch (Exception e){ @@ -46,30 +57,32 @@ public class MqProducer { } } - public void sendMessage(WxMsgRecord data, String topic, String tags, String keys) throws Throwable{ + @Override + public void sendMessage(BaseMsg data, String topic, String tags, String keys) { try { - data.setUuid(UUID.randomUUID().toString()); - wxMsgRecordMapper.insert(data); + wxMsgRecordService.save(data); + + byte[] messageBody = JsonUtil.obj2Json(data).getBytes(RemotingHelper.DEFAULT_CHARSET); - byte[] messageBody = JSONUtils.toJSONString(data).getBytes(RemotingHelper.DEFAULT_CHARSET); Message mqMsg = new Message(topic, tags, keys, messageBody); + producer.send(mqMsg, new SendCallback() { @Override public void onSuccess(SendResult sendResult) { log.info("Message Producer: Send Message Success {}", sendResult); - - data.setStatus(EnumMsgRecordStatus.SEND_SUCC.getCode()); - wxMsgRecordMapper.update(data); +// data.setMsgStatus(EnumMsgRecordStatus.SEND_SUCC.getCode()); +// wxMsgRecordMapper.update(data); } @Override public void onException(Throwable throwable) { - log.error("Message Producer: Send Message Error (onException)", throwable); + log.error("Message Producer: Send Message Error ", throwable); } }); - } catch (Throwable e) { - e.printStackTrace(); - log.error("Message Producer: Send Message Error (sendMessage)", e); + } catch (Exception e) { + log.error("Message Producer: Send Message Error ", e); } + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/MsgSendService.java b/mallinkService/src/main/java/com/iformall/service/MsgSendService.java index 07c69453f..264ef6088 100644 --- a/mallinkService/src/main/java/com/iformall/service/MsgSendService.java +++ b/mallinkService/src/main/java/com/iformall/service/MsgSendService.java @@ -1,12 +1,10 @@ package com.iformall.service; -import com.iformall.domain.po.WxMsgRecord; +import com.iformall.domain.po.BaseMsg; +/** + * 发送消息 + */ public interface MsgSendService { - - void send(WxMsgRecord record); - - - - + void send(BaseMsg baseMsg) throws Exception; } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java index b435f3563..2b120b0d3 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java @@ -1,8 +1,25 @@ package com.iformall.service.impl; -import com.iformall.domain.po.WxMsgRecord; +import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.enums.EnumVerifyCode; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxMsgConfigMapper; +import com.iformall.mapper.WxMsgValidationcodeMapper; +import com.iformall.mapper.WxMsgValidationcodeModelMapper; import com.iformall.service.MsgSendService; +import com.iformall.service.WxMsgValidationcodeService; +import com.iformall.utils.WiwideUtil; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Date; +import java.util.List; +import java.util.Map; /** * @author luozukai @@ -10,9 +27,82 @@ import org.springframework.stereotype.Service; */ @Service public class SendSmsServiceImpl implements MsgSendService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private WxMsgConfigMapper wxMsgConfigMapper; + @Autowired + private WxMsgValidationcodeModelMapper wxMsgValidationcodeModelMapper; + @Autowired + private WxMsgValidationcodeMapper wxMsgValidationcodeMapper; + @Autowired + private WxMsgValidationcodeService wxMsgValidationcodeService; @Override - public void send(WxMsgRecord record) { + public void send(BaseMsg baseMsg) { + WxMsgRecord record = (WxMsgRecord)baseMsg; + WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); + wxMsgValidationcode.setPhone(record.getReceiver()); + wxMsgValidationcode.setTenantId(record.getTenantId()); + wxMsgValidationcode.setType(record.getModelType()); + //3、从短信配置中查询密钥 bid 等信息 + WxMsgConfig wxMsgConfig = new WxMsgConfig(); + wxMsgConfig.setTenantId(record.getTenantId()); + List wxMsgConfigs = wxMsgConfigMapper.findList(wxMsgConfig); + if(CollectionUtils.isEmpty(wxMsgConfigs)){ + throw new MallinkException(ErrorCode.MSG_CONFIG_NOT_FOUND); + } + + wxMsgConfig = wxMsgConfigs.get(0); + + WxMsgValidationcodeModel wxMsgValidationcodeModel = new WxMsgValidationcodeModel(); + wxMsgValidationcodeModel.setTenantId(record.getTenantId()); + wxMsgValidationcodeModel.setType(record.getModelType()); + List modelList = wxMsgValidationcodeModelMapper.findList(wxMsgValidationcodeModel); + if(CollectionUtils.isEmpty(modelList)){ + throw new MallinkException(ErrorCode.MSG_MODEL_NOT_FOUND); + } + + wxMsgValidationcodeModel = wxMsgValidationcodeModelMapper.findList(wxMsgValidationcodeModel).get(0); + + String secret = wxMsgConfig.getSecret(); + String bid = wxMsgConfig.getBid(); + String publickey = wxMsgConfig.getPublickey(); + String phone = record.getReceiver(); + String signature = wxMsgValidationcodeModel.getSignature(); + wxMsgValidationcode.setSignature(signature); + //替换内容 + String msg = wxMsgValidationcodeModel.getContent(); + for (Map.Entry entry : record.getDynamicContentMap().entrySet()) { + msg = msg.replace("{"+entry.getKey()+"}", entry.getValue()); + } + wxMsgValidationcode.setMsg(msg); + + String notifyUrl = wxMsgConfig.getNotifyurl(); + Integer modelId = wxMsgValidationcodeModel.getModelId(); + String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.YES.getCode().toString(), modelId); + JSONObject jsonObjectResult = JSONObject.parseObject(result); + String ret = jsonObjectResult.get("ret").toString(); + String batchNo = jsonObjectResult.get("data").toString(); + if (ret.equals("1")) { + final IdWorker idWorker = IdWorker.get(); + wxMsgValidationcode.setId(idWorker.nextId()); + long currentTime = System.currentTimeMillis() ; + Date createtime=new Date(currentTime); + wxMsgValidationcode.setCreatetime(createtime); + Integer minutes = wxMsgValidationcodeModel.getMinutes(); + if(minutes >0) { + currentTime += minutes * 60 * 1000; + Date expiredate = new Date(currentTime); + wxMsgValidationcode.setExpiretime(expiredate); + } + wxMsgValidationcodeMapper.insertSelective(wxMsgValidationcode); + wxMsgValidationcodeService.addMsgCallback(wxMsgValidationcode,batchNo); + logger.error("短信运营商返回成功,手机号:{}",phone); + }else{ + logger.error("短信运营商返回失败,手机号:{},返回信息:{}",phone,result); + } } + + } diff --git a/mallinkService/src/main/resources/mapper/WxMsgRecord.xml b/mallinkService/src/main/resources/mapper/WxMsgRecord.xml deleted file mode 100644 index 76c387823..000000000 --- a/mallinkService/src/main/resources/mapper/WxMsgRecord.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - `id`,`tenant_id`,`name`,`available`,`description` - - - - where 1 = 1 - - - and `id` = #{id} - - - - - and `tenant_id` = #{tenantId} - - - - - and `name` like concat('%', #{name},'%') - - - - - and `available` like concat('%', #{available},'%') - - - - - and `description` like concat('%', #{description},'%') - - - - and id in - - #{idItem} - - - order by ${sortColumns} - - - - - - - - - - diff --git a/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml b/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml index 132cd4069..cb7f821b3 100644 --- a/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml @@ -4,18 +4,18 @@ - - + + - - - - - - - + + + + + + + @@ -23,14 +23,10 @@ + - - - `id`,`tenant_id`,`group`,`type`,`msg` ,send_time,model_id,from,from_user_id,from_user_name,to,to_user_id,to_user_name - ,status,status_message,createtime,updatetime,uuid,signature,model_type,dynamic_content - where 1 = 1 @@ -53,10 +49,10 @@ order by ${sortColumns} - + update wx_msg_record set updatetime = now() - ,status = #{status} - ,message = #{message} + ,msg_status = #{msgStatus} + ,status_message = #{statusMessage} where uuid = #{uuid}