Просмотр исходного кода

[消息组件][添加][init]

release_toaliyun_real
luozukai 7 лет назад
Родитель
Сommit
ea26d7e5aa
11 измененных файлов: 546 добавлений и 18 удалений
  1. +0
    -2
      mallinkAdmin/src/main/java/com/iformall/UserApplication.java
  2. +14
    -10
      mallinkAdmin/src/main/resources/application-dev.yml
  3. +300
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java
  4. +37
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordStatus.java
  5. +17
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java
  6. +18
    -4
      mallinkService/src/main/java/com/iformall/mq/MqProducer.java
  7. +12
    -0
      mallinkService/src/main/java/com/iformall/service/MsgSendService.java
  8. +18
    -0
      mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java
  9. +65
    -0
      mallinkService/src/main/resources/mapper/WxMsgRecord.xml
  10. +63
    -0
      mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml
  11. +2
    -2
      pom.xml

+ 0
- 2
mallinkAdmin/src/main/java/com/iformall/UserApplication.java Просмотреть файл

@@ -1,7 +1,6 @@
package com.iformall;

import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import org.rocketmq.starter.annotation.EnableRocketMQ;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -19,7 +18,6 @@ import tk.mybatis.spring.annotation.MapperScan;
@EnableSwagger2
@EnableEncryptableProperties
@EnableAsync
@EnableRocketMQ
public class UserApplication {

@Value("${fm.exception}")


+ 14
- 10
mallinkAdmin/src/main/resources/application-dev.yml Просмотреть файл

@@ -53,15 +53,16 @@ spring:
auth: true
starttls:
enable: true
rocketmq:
nameServer: 127.0.0.1:9876
producer:
retry-times-when-send-async-failed: 0
send-msg-timeout: 300000
compress-msg-body-over-howmuch: 4096
max-message-size: 4194304
retry-another-broker-when-not-store-ok: false
retry-times-when-send-failed: 2

#rocketmq:
# name-server: 127.0.0.1:9876
# producer:
# retry-times-when-send-async-failed: 0
# send-msg-timeout: 300000
# compress-msg-body-over-howmuch: 4096
# max-message-size: 4194304
# retry-another-broker-when-not-store-ok: false
# retry-times-when-send-failed: 2

aws:
clientRegion: cn-northwest-1
@@ -92,4 +93,7 @@ logging:
level:
tk.mybatis: debug
com.iformall: debug
path: ./logs/admin
path: ./logs/admin

#rocketMQ
rocketmq.name-server: 127.0.0.1:9876

+ 300
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxMsgRecord.java Просмотреть файл

@@ -0,0 +1,300 @@
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;

@Table(name = "wx_msg_record")
public class WxMsgRecord implements Serializable {
private static final long serialVersionUID = 18957895653478L;

@Id
protected Long id;

@Transient
protected List<Long> 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<Long> getIds() {
return ids;
}

public void setIds(List<Long> 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 String msg;
//发送时间
private String sendTime;
//model_id
private Long modelId;
//from,手机号邮件地址等
private String from;
//发送人id
private Long fromUserId;
//发送人姓名
private String fromUserName;
//接收人,手机号邮件地址等
private String to;
//接收人用户id
private Long toUserId;
//接收人姓名
private String toUserName;
//消费结果
private Integer status;
//消费结果信息
private String statusMessage;
//签名
private String signature;
//模板类型
private Integer modelType;
//动态内容(map结构的json数据)
private String dynamicContent;

private Date createtime;
private Date updatetime;

public String getDynamicContent() {
return dynamicContent;
}

public void setDynamicContent(String dynamicContent) {
this.dynamicContent = dynamicContent;
}

public Integer getModelType() {
return modelType;
}

public void setModelType(Integer modelType) {
this.modelType = modelType;
}

public String getSignature() {
return signature;
}

public void setSignature(String signature) {
this.signature = signature;
}

public String getUuid() {
return uuid;
}

public void setUuid(String uuid) {
this.uuid = uuid;
}

public String getTenantId() {
return tenantId;
}

public void setTenantId(String tenantId) {
this.tenantId = tenantId;
}

public String getGroup() {
return group;
}

public void setGroup(String group) {
this.group = group;
}

public Integer getType() {
return type;
}

public void setType(Integer type) {
this.type = type;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

public String getSendTime() {
return sendTime;
}

public void setSendTime(String sendTime) {
this.sendTime = sendTime;
}

public Long getModelId() {
return modelId;
}

public void setModelId(Long modelId) {
this.modelId = modelId;
}

public String getFrom() {
return from;
}

public void setFrom(String from) {
this.from = from;
}

public Long getFromUserId() {
return fromUserId;
}

public void setFromUserId(Long fromUserId) {
this.fromUserId = fromUserId;
}

public String getFromUserName() {
return fromUserName;
}

public void setFromUserName(String fromUserName) {
this.fromUserName = fromUserName;
}

public String getTo() {
return to;
}

public void setTo(String to) {
this.to = to;
}

public Long getToUserId() {
return toUserId;
}

public void setToUserId(Long toUserId) {
this.toUserId = toUserId;
}

public String getToUserName() {
return toUserName;
}

public void setToUserName(String toUserName) {
this.toUserName = toUserName;
}

public Integer getStatus() {
return status;
}

public void setStatus(Integer status) {
this.status = status;
}

public String getStatusMessage() {
return statusMessage;
}

public void setStatusMessage(String statusMessage) {
this.statusMessage = statusMessage;
}

public Date getCreatetime() {
return createtime;
}

public void setCreatetime(Date createtime) {
this.createtime = createtime;
}

public Date getUpdatetime() {
return updatetime;
}

public void setUpdatetime(Date updatetime) {
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<Field> 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));
}
}
}

+ 37
- 0
mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordStatus.java Просмотреть файл

@@ -0,0 +1,37 @@
package com.iformall.enums;

/**
* Created by luozukai
*/
public enum EnumMsgRecordStatus {
DEFAULT(0, "默认"),
SEND_SUCC(1, "发送成功"),
CONSUME_SUCC(2, "消费成功"),
CONSUME_FAIL(3, "消费失败"),
;

public static EnumMsgRecordStatus getEnum(Integer code) {
for (EnumMsgRecordStatus value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumMsgRecordStatus(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 17
- 0
mallinkService/src/main/java/com/iformall/mapper/WxMsgRecordMapper.java Просмотреть файл

@@ -0,0 +1,17 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.MallRole;
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<WxMsgRecord, String> {

void update(WxMsgRecord record);
}

+ 18
- 4
mallinkService/src/main/java/com/iformall/mq/MqProducer.java Просмотреть файл

@@ -1,5 +1,9 @@
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;
@@ -8,10 +12,11 @@ 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
@@ -25,6 +30,8 @@ public class MqProducer {
private static final DefaultMQProducer producer = new DefaultMQProducer("DefaultProducer");
@Value("${spring.rocketmq.nameServer}")
private String namesrvAddr;
@Autowired
private WxMsgRecordMapper wxMsgRecordMapper;

@PostConstruct
public void start(){
@@ -39,23 +46,30 @@ public class MqProducer {
}
}

public void sendMessage(String data, String topic, String tags, String keys) throws Throwable{
public void sendMessage(WxMsgRecord data, String topic, String tags, String keys) throws Throwable{
try {
byte[] messageBody = data.getBytes(RemotingHelper.DEFAULT_CHARSET);
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 ", throwable);
log.error("Message Producer: Send Message Error (onException)", throwable);
}
});
} catch (Throwable e) {
e.printStackTrace();
log.error("Message Producer: Send Message Error (sendMessage)", e);
}
}
}

+ 12
- 0
mallinkService/src/main/java/com/iformall/service/MsgSendService.java Просмотреть файл

@@ -0,0 +1,12 @@
package com.iformall.service;

import com.iformall.domain.po.WxMsgRecord;

public interface MsgSendService {

void send(WxMsgRecord record);


}

+ 18
- 0
mallinkService/src/main/java/com/iformall/service/impl/SendSmsServiceImpl.java Просмотреть файл

@@ -0,0 +1,18 @@
package com.iformall.service.impl;

import com.iformall.domain.po.WxMsgRecord;
import com.iformall.service.MsgSendService;
import org.springframework.stereotype.Service;

/**
* @author luozukai
* 短信发送实现
*/
@Service
public class SendSmsServiceImpl implements MsgSendService {

@Override
public void send(WxMsgRecord record) {

}
}

+ 65
- 0
mallinkService/src/main/resources/mapper/WxMsgRecord.xml Просмотреть файл

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.MallRoleMapper">
<resultMap id="BaseResultMap" type="com.iformall.domain.po.MallRole">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="available" jdbcType="VARCHAR" property="available" />
<result column="description" jdbcType="VARCHAR" property="description" />
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`name`,`available`,`description`
</sql>

<sql id="dynamicWhereConditions">
where 1 = 1
<if test=" null != id ">
and `id` = #{id}
</if>
<if test=" null != tenantId ">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != name and '' != name ">
and `name` like concat('%', #{name},'%')
</if>
<if test=" null != available ">
and `available` like concat('%', #{available},'%')
</if>
<if test=" null != description ">
and `description` like concat('%', #{description},'%')
</if>
<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns"> order by ${sortColumns} </if>
</sql>
<select id="findList" parameterType="com.iformall.domain.po.MallRole" resultMap="BaseResultMap">
select <include refid="allColumns" /> from mall_role
<include refid="dynamicWhereConditions" />
</select>
<select id="countByName" resultType="java.lang.Integer" parameterType="java.util.HashMap">
select count(1) from mall_role where name=#{name}
<if test="id!=null"> and id !=#{id}</if>
</select>
</mapper>

+ 63
- 0
mallinkService/src/main/resources/mapper/WxMsgRecordMapper.xml Просмотреть файл

@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxMsgRecordMapper">
<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxMsgRecord">
<id column="id" property="id" />
<result column="tenant_id" property="tenantId" />
<result column="group" property="group" />
<result column="type" property="type" />
<result column="msg" property="msg" />
<result column="send_time" property="sendTime" />
<result column="model_id" property="modelId" />
<result column="from" property="from" />
<result column="from_user_id" property="fromUserId" />
<result column="from_user_name" property="fromUserName" />
<result column="to" property="to" />
<result column="to_user_id" property="toUserId" />
<result column="to_user_name" property="toUserName" />
<result column="status" property="status" />
<result column="status_message" property="statusMessage" />
<result column="createtime" property="createtime" />
<result column="updatetime" property="updatetime" />
<result column="uuid" property="uuid" />
<result column="signature" property="signature" />
<result column="model_type" property="modelType" />
<result column="dynamic_content" property="dynamicContent" />


</resultMap>
<sql id="allColumns">
`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
</sql>

<sql id="dynamicWhereConditions">
where 1 = 1
<if test=" null != id ">
and `id` = #{id}
</if>
<if test=" null != tenantId ">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns"> order by ${sortColumns} </if>
</sql>

<update id="update" parameterType="com.iformall.domain.po.WxMsgRecord">
update wx_msg_record set updatetime = now()
<if test=" null != status ">,status = #{status}</if>
<if test=" null != message ">,message = #{message}</if>
where uuid = #{uuid}
</update>

</mapper>

+ 2
- 2
pom.xml Просмотреть файл

@@ -121,9 +121,9 @@

<!-- rocketmq -->
<dependency>
<groupId>org.rocketmq.spring.boot</groupId>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>1.0.0.RELEASE</version>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>


Загрузка…
Отмена
Сохранить