记得上下班打卡 | git大法好,push需谨慎

Commit c641d1dd authored by jiangxiulong's avatar jiangxiulong

Merge remote-tracking branch 'origin/template_message' into new_member

# Conflicts:
#	liquidnet-bus-api/pom.xml
#	liquidnet-bus-do/pom.xml
parents 89933b20 2e3694dc
......@@ -110,7 +110,6 @@ public class TicketCreateParam implements Serializable {
kylinTickets.setCreatedAt(createdAt);
if (updatedAt != null)
kylinTickets.setUpdatedAt(updatedAt);
//TODO 各种说明文案
return kylinTickets;
}
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>liquidnet-bus-api</artifactId>
<groupId>com.liquidnet</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>liquidnet-service-sweet-api</artifactId>
<dependencies>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>4.1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.2.3.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>4.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
package com.liquidnet.service.sweet.config;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaRedisBetterConfigImpl;
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import javax.annotation.PostConstruct;
@Configuration
public class WechatMaConfigure {
private static String appletAppidZhengzai;
private static String appletSecretZhengzai;
private static String appletAppidStrawberry;
private static String appletSecretStrawberry;
private static String appletAppidFive;
private static String appletSecretFive;
private static String appletAppidMdsk;
private static String appletSecretMdsk;
@Value("${liquidnet.wechat.applet.zhengzai.appid}")
public void setAppletAppidZhengzai(String appletAppidZhengzai) {
WechatMaConfigure.appletAppidZhengzai = appletAppidZhengzai;
}
@Value("${liquidnet.wechat.applet.zhengzai.secret}")
public void setAppletSecretZhengzai(String appletSecretZhengzai) {
WechatMaConfigure.appletSecretZhengzai = appletSecretZhengzai;
}
@Value("${liquidnet.wechat.applet.strawberry.appid}")
public void setAppletAppidStrawberry(String appletAppidStrawberry) {
WechatMaConfigure.appletAppidStrawberry = appletAppidStrawberry;
}
@Value("${liquidnet.wechat.applet.strawberry.secret}")
public void setAppletSecretStrawberry(String appletSecretStrawberry) {
WechatMaConfigure.appletSecretStrawberry = appletSecretStrawberry;
}
@Value("${liquidnet.wechat.applet.five.appid}")
public void setAppletAppidFive(String appletAppidFive) {
WechatMaConfigure.appletAppidFive = appletAppidFive;
}
@Value("${liquidnet.wechat.applet.five.secret}")
public void setAppletSecretFive(String appletSecretFive) {
WechatMaConfigure.appletSecretFive = appletSecretFive;
}
@Value("${liquidnet.wechat.applet.mdsk.appid}")
public void setAppletAppidMdsk(String appletAppidMdsk) {
WechatMaConfigure.appletAppidMdsk = appletAppidMdsk;
}
@Value("${liquidnet.wechat.applet.mdsk.secret}")
public void setAppletSecretMdsk(String appletSecretMdsk) {
WechatMaConfigure.appletSecretMdsk = appletSecretMdsk;
}
private WxMaService wxMaAppletZhengzaiService;
private WxMaService wxMaAppletStrawberryService;
private WxMaService wxMaAppletFiveService;
private WxMaService wxMaAppletMdskService;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@PostConstruct
public void init() {
wxMaAppletZhengzaiService = new WxMaServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMaRedisBetterConfigImpl wxMaDefaultConfig = new WxMaRedisBetterConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:applet:zhengzai");
// WxMaDefaultConfigImpl wxMaDefaultConfig = new WxMaDefaultConfigImpl();
wxMaDefaultConfig.setAppid(appletAppidZhengzai);
wxMaDefaultConfig.setSecret(appletSecretZhengzai);
wxMaDefaultConfig.setMsgDataFormat("JSON");
this.setWxMaConfig(wxMaDefaultConfig);
}
};
wxMaAppletStrawberryService = new WxMaServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMaRedisBetterConfigImpl wxMaDefaultConfig = new WxMaRedisBetterConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:applet:strawberry");
// WxMaDefaultConfigImpl wxMaDefaultConfig = new WxMaDefaultConfigImpl();
wxMaDefaultConfig.setAppid(appletAppidStrawberry);
wxMaDefaultConfig.setSecret(appletSecretStrawberry);
wxMaDefaultConfig.setMsgDataFormat("JSON");
this.setWxMaConfig(wxMaDefaultConfig);
}
};
wxMaAppletFiveService = new WxMaServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMaRedisBetterConfigImpl wxMaDefaultConfig = new WxMaRedisBetterConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:applet:five");
// WxMaDefaultConfigImpl wxMaDefaultConfig = new WxMaDefaultConfigImpl();
wxMaDefaultConfig.setAppid(appletAppidFive);
wxMaDefaultConfig.setSecret(appletSecretFive);
wxMaDefaultConfig.setMsgDataFormat("JSON");
this.setWxMaConfig(wxMaDefaultConfig);
}
};
wxMaAppletMdskService = new WxMaServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMaRedisBetterConfigImpl wxMaDefaultConfig = new WxMaRedisBetterConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:applet:mdsk");
// WxMaDefaultConfigImpl wxMaDefaultConfig = new WxMaDefaultConfigImpl();
wxMaDefaultConfig.setAppid(appletAppidMdsk);
wxMaDefaultConfig.setSecret(appletSecretMdsk);
wxMaDefaultConfig.setMsgDataFormat("JSON");
this.setWxMaConfig(wxMaDefaultConfig);
}
};
}
public WxMaService getWxMaService(Integer anum) {
switch (anum) {
case 4:
return wxMaAppletZhengzaiService;
case 1:
return wxMaAppletStrawberryService;
case 2:
return wxMaAppletFiveService;
case 3:
return wxMaAppletMdskService;
}
return null;
}
public String getWxMaAppid(Integer anum) {
switch (anum) {
case 4:
return appletAppidZhengzai;
case 1:
return appletAppidStrawberry;
case 2:
return appletAppidFive;
case 3:
return appletAppidMdsk;
}
return "";
}
}
package com.liquidnet.service.sweet.config;
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import javax.annotation.PostConstruct;
@Configuration
public class WechatMpConfigure {
private static String appidZhengzai;
private static String secretZhengzai;
private static String tokenZhengzai;
private static String aeskeyZhengzai;
private static String appidModernsky;
private static String secretModernsky;
@Value("${liquidnet.wechat.service.zhengzai.appid}")
public void setAppidZhengzai(String appidZhengzai) { WechatMpConfigure.appidZhengzai = appidZhengzai; }
@Value("${liquidnet.wechat.service.zhengzai.secret}")
public void setSecretZhengzai(String secretZhengzai) {
WechatMpConfigure.secretZhengzai = secretZhengzai;
}
@Value("${liquidnet.wechat.service.zhengzai.token}")
public void setTokenZhengzai(String tokenZhengzai) {
WechatMpConfigure.tokenZhengzai = tokenZhengzai;
}
@Value("${liquidnet.wechat.service.zhengzai.aeskey}")
public void setAeskeyZhengzai(String aeskeyZhengzai) {
WechatMpConfigure.aeskeyZhengzai = aeskeyZhengzai;
}
@Value("${liquidnet.wechat.service.modernsky.appid}")
public void setAppidModernsky(String appidModernsky) {
WechatMpConfigure.appidModernsky = appidModernsky;
}
@Value("${liquidnet.wechat.service.modernsky.secret}")
public void setSecretModernsky(String secretModernsky) {
WechatMpConfigure.secretModernsky = secretModernsky;
}
private WxMpService wxMpZhengzaiService;
private WxMpService wxMpModernskyService;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@PostConstruct
public void init() {
wxMpZhengzaiService = new WxMpServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMpRedisConfigImpl wxMpDefaultConfig = new WxMpRedisConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:service:zhengzai");
wxMpDefaultConfig.setAppId(appidZhengzai);
wxMpDefaultConfig.setSecret(secretZhengzai);
wxMpDefaultConfig.setToken(tokenZhengzai);
wxMpDefaultConfig.setAesKey(aeskeyZhengzai);
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
wxMpModernskyService = new WxMpServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMpRedisConfigImpl wxMpDefaultConfig = new WxMpRedisConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:service:modernsky");
wxMpDefaultConfig.setAppId(appidModernsky);
wxMpDefaultConfig.setSecret(secretModernsky);
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
}
public WxMpService getWxMpService(Integer pnum) {
switch (pnum) {
case 1:
return wxMpZhengzaiService;
case 2:
return wxMpModernskyService;
}
return null;
}
}
package com.liquidnet.service.sweet.constant;
/**
*
*/
public class SweetConstant {
public final static String REDIS_KEY_SWEET_MANUAL_PUSH_LIST = "sweet:manual:pushList";
public final static String REDIS_KEY_SWEET_MANUAL_TIME_LIST = "sweet:manual:timeList:manual:";
public final static String REDIS_KEY_SWEET_MANUAL_NOTIFY_LIST = "sweet:manual:notify:manual:";
public final static String REDIS_KEY_SWEET_MANUAL_RICH_TEXT = "sweet:manual:richText:manual:";
public final static String REDIS_KEY_SWEET_MANUAL_SORT = "sweet:manual:sort:manual:";
public final static String REDIS_KEY_SWEET_ARTISTS_RELATION = "sweet:artists:relation:uid:";
public final static String REDIS_KEY_SWEET_ARTISTS_DETAILS = "sweet:artists:details:";
public final static String REDIS_KEY_SWEET_SHOP = "sweet:artists:shop:manual:";
public final static String REDIS_KEY_SWEET_LUCK_DRAW = "sweet:luckDraw:mobile:";
public final static String REDIS_KEY_SWEET_LUCK_DRAW_RESULT = "sweet:luckDraw:num:";
public final static String REDIS_KEY_SWEET_LUCK_DRAW_SURPLUS = "sweet:luckDraw:num:";//中奖库存
public final static String REDIS_KEY_SWEET_LUCK_DRAW_ALL = "sweet:luckDraw:num:";//中奖总量
public final static String REDIS_KEY_SWEET_LUCK_DRAW_PRESENT_MOBILE = "sweet:luckDraw:present:mobile:";//中奖库存
public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO="sweet:wechatUser:unionId:";
public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO_STR="sweet:wechatUser:unionIdStr:";
public final static String REDIS_KEY_SWEET_WECHAT_USER_UNIONID="sweet:wechatUser:openId:";
public final static String REDIS_KEY_SWEET_ANSWER_PHONE="sweet:answer:phone:";
// public enum ManualPosition {
// artist("艺人","artist"),
// signingTime("签售时间","signingTime"),
// foodAndAmusement("吃喝玩乐","foodAndAmusement"),
// siteMap("现场地图","siteMap"),
// howToReach("如何到达","howToReach"),
// relatedProduct ("官方售卖","relatedProduct"),
// officialSupport("官方支持","officialSupport"),
// audienceNotice("观众须知","audienceNotice"),
// preventionGuidelines("防疫指南","preventionGuidelines"),
// notice("通知","notice"),
// strategy("观演攻略","strategy");
//
// private String message;
// private String code;
//
// private ManualPosition(String message, String code) {
// this.message = message;
// this.code = code;
// }
//
// public void setCode(String code) {
// this.code = code;
// }
//
// public String getCode() {
// return code;
// }
//
// public void setMessage(String message) {
// this.message = message;
// }
//
// public String getMessage() {
// return message;
// }
//
// public static String getMessage(String code) {
// for (ManualPosition c : ManualPosition.values()) {
// if (c.getCode().equalsIgnoreCase(code)) {
// return c.message;
// }
// }
// return null;
// }
// }
public final static String REDIS_KEY_SWEET_MDSK_MANUAL_PUSH_LIST = "sweet:mdsk:manual:pushList";
public final static String REDIS_KEY_SWEET_MDSK_MANUAL_TIME_LIST = "sweet:mdsk:manual:timeList:manual:";
public final static String REDIS_KEY_SWEET_MDSK_MANUAL_NOTIFY_LIST = "sweet:mdsk:manual:notify:manual:";
public final static String REDIS_KEY_SWEET_MDSK_MANUAL_RICH_TEXT = "sweet:mdsk:manual:richText:manual:";
public final static String REDIS_KEY_SWEET_MDSK_MANUAL_SORT = "sweet:mdsk:manual:sort:manual:";
public final static String REDIS_KEY_SWEET_MDSK_ARTISTS_RELATION = "sweet:mdsk:artists:relation:uid:";
public final static String REDIS_KEY_SWEET_MDSK_ARTISTS_DETAILS = "sweet:mdsk:artists:details:";
public final static String REDIS_KEY_SWEET_MDSK_SHOP = "sweet:mdsk:artists:shop:manual:";
}
package com.liquidnet.service.sweet.dto.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.*;
import java.io.Serializable;
@ApiModel(value = "SweetOpenSendMsgParam", description = "发送模版消息公共接口入参")
@Data
public class SweetOpenSendMsgParam implements Serializable {
private static final long serialVersionUID = 675588088506034208L;
@ApiModelProperty(position = 11, required = true, allowableValues = "1,2", value = "发送目标类型 1正在服务号 2摩登服务号")
@NotNull(message = "sendTargetType不能为空") @Min(value = 1, message = "sendTargetType无效") @Max(value = 2, message = "sendTargetType无效")
private Integer sendTargetType;
@ApiModelProperty(position = 12, required = true, value = "模版消息ID", example = "y-j82V1TYhlTH1j8QscuDPcPQtNiDtENb7N5IZMBvqU")
@NotBlank(message = "templateId不能为空")
private String templateId;
@ApiModelProperty(position = 13, required = true, value = "模版消息数据", example = "{\"first\": \"感谢关注「正在现场」服务号\", \"keyword2\": \"4006-310-750\"}")
@NotBlank(message = "templateData不能为空")
private String templateData;
@ApiModelProperty(position = 14, required = true, allowableValues = "1,2,3,4,5", value = "点击跳转类型 1草莓小程序 2五百里小程序 3mdsk小程序 4正在小程序 5url")
@NotNull(message = "jumpType不能为空") @Min(value = 1, message = "jumpType无效") @Max(value = 5, message = "jumpType无效")
private Integer jumpType;
@ApiModelProperty(position = 15, value = "跳转url", example = "www.zhengzai.tv")
private String jumpUrl;
@ApiModelProperty(position = 16, allowableValues = "false,true", value = "是否需要前端配合处理跳转,直接跳转jumpAppletPagePath为false,true时需要前端根据状态码做跳转处理")
private Boolean jumpAppletUsePath;
@ApiModelProperty(position = 17, value = "跳转小程序需要的某页地址", example = "pages/webview?query=lottery")
private String jumpAppletPagePath;
/*@ApiModelProperty(position = 18, required = true, value = "openId", example = "oUpkkuNe4yuVs77aaKFvuvpgNOSw")
@NotBlank(message = "openId不能为空")
private String openId;*/
@ApiModelProperty(position = 18, required = true, value = "phone", example = "15888888888")
@NotBlank(message = "phone不能为空")
private String phone;
}
......@@ -19,6 +19,7 @@
<module>liquidnet-service-dragon-api</module>
<module>liquidnet-service-chime-api</module>
<module>liquidnet-service-candy-api</module>
<module>liquidnet-service-sweet-api</module>
</modules>
<dependencies>
<dependency>
......
......@@ -82,6 +82,7 @@ public class MQConst {
SWEET_USER_INSERT_DRAW("sweet:stream:rk.sweetUserInsert", "group.sweetUserInsert", "关注服务号的用户信息"),
SWEET_REMIND_INSERT_DRAW("sweet:stream:rk.remindInsert", "group.remindInsert", "提醒记录"),
SWEET_APPLET_USER_INSERT_DRAW("sweet:stream:rk.sweetAppletUserInsert", "group.sweetAppletUserInsert", "小程序登录记录用户解密后信息"),
SWEET_TEMPLATE_MSG("sweet:stream:rk.sweetTemplateMsg", "group.sweetTemplateMsg", "发送模版消息"),
;
private final String key;
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>liquidnet-bus-do</artifactId>
<groupId>com.liquidnet</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>liquidnet-service-sweet-do</artifactId>
</project>
\ No newline at end of file
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 小程序登录记录用户解密后信息表
* </p>
*
* @author jiangxiulong
* @since 2021-09-22
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetAppletUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* user_id
*/
private String userId;
/**
* openId
*/
@TableField("openId")
private String openId;
/**
* unionId
*/
@TableField("unionId")
private String unionId;
/**
* 手机号
*/
@TableField("getPhoneNumber")
private String getPhoneNumber;
/**
* 手机号
*/
@TableField("getPurePhoneNumber")
private String getPurePhoneNumber;
/**
* 地区码
*/
@TableField("getCountryCode")
private String getCountryCode;
/**
* 1草莓 2五百里 3mdsk 4正在
*/
private Integer type;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 正在现场服务号关注事件储存用户信息表
* </p>
*
* @author jiangxiulong
* @since 2021-08-03
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetWechatUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* user_id
*/
private String userId;
/**
* openId
*/
@TableField("openId")
private String openId;
/**
* unionId
*/
@TableField("unionId")
private String unionId;
/**
* 昵称
*/
private String nickname;
/**
* 性别
*/
@TableField("sexDesc")
private String sexDesc;
/**
* 性别 男1
*/
private Integer sex;
/**
* 头像
*/
@TableField("headImgUrl")
private String headImgUrl;
/**
* zh_CN
*/
private String language;
/**
* 国家
*/
private String country;
/**
* 省
*/
private String province;
/**
* 市
*/
private String city;
/**
* 关注时间
*/
@TableField("subscribeTime")
private LocalDateTime subscribeTime;
/**
* ADD_SCENE_SEARCH 关注方式
*/
@TableField("subscribeScene")
private String subscribeScene;
/**
* 是否取消关注
*/
private Integer isCancel;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
private static final SweetWechatUser obj = new SweetWechatUser();
public static SweetWechatUser getNew() {
try {
return (SweetWechatUser) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetWechatUser();
}
}
}
package com.liquidnet.service.sweet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.sweet.entity.SweetAppletUser;
/**
* <p>
* 小程序登录记录用户解密后信息表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2021-09-22
*/
public interface SweetAppletUserMapper extends BaseMapper<SweetAppletUser> {
}
<?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.liquidnet.service.sweet.mapper.SweetWechatUserMapper">
</mapper>
......@@ -20,6 +20,7 @@
<module>liquidnet-service-adam-do</module>
<module>liquidnet-service-dragon-do</module>
<module>liquidnet-service-candy-do</module>
<module>liquidnet-service-sweet-do</module>
</modules>
<dependencies>
......
......@@ -40,6 +40,18 @@
<artifactId>liquidnet-common-sms</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-sweet-do</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-sweet-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
......
package com.liquidnet.service;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
......@@ -13,6 +14,7 @@ import java.util.Arrays;
@Slf4j
@SpringBootApplication(scanBasePackages = {"com.liquidnet"})
@MapperScan(basePackages = {"com.liquidnet.service.sweet.mapper"})
public class ServiceConsumerSweetApplication implements CommandLineRunner {
@Autowired
private Environment environment;
......
package com.liquidnet.service.consumer.sweet.config;
import com.liquidnet.service.consumer.sweet.receiver.ConsumerSweetTemplateMsgReceiver;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.stream.Consumer;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.ReadOffset;
import org.springframework.data.redis.connection.stream.StreamOffset;
import org.springframework.data.redis.stream.StreamMessageListenerContainer;
import org.springframework.data.redis.stream.Subscription;
import java.time.Duration;
import static com.liquidnet.service.base.constant.MQConst.SweetQueue.SWEET_TEMPLATE_MSG;
@Configuration
public class ConsumerSweetTemplateMsgStreamConfig {
@Autowired
ConsumerSweetTemplateMsgReceiver consumerSweetTemplateMsgReceiver;
private StreamMessageListenerContainer<String, MapRecord<String, String, String>> buildStreamMessageListenerContainer(RedisConnectionFactory factory) {
var options = StreamMessageListenerContainer
.StreamMessageListenerContainerOptions
.builder()
.pollTimeout(Duration.ofMillis(1))
.build();
return StreamMessageListenerContainer.create(factory, options);
}
/**
* 缺票登记
*
* @param listenerContainer
* @param t
* @return
*/
private Subscription receiveSqlTemplateMsg(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(SWEET_TEMPLATE_MSG.getGroup(), SWEET_TEMPLATE_MSG.name() + t),
StreamOffset.create(SWEET_TEMPLATE_MSG.getKey(), ReadOffset.lastConsumed()), consumerSweetTemplateMsgReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionSqlTemplateMsg(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlTemplateMsg(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlTemplateMsg2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlTemplateMsg(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlTemplateMsg3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlTemplateMsg(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.sweet.receiver;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.SqlMapping;
......@@ -20,8 +19,6 @@ public abstract class AbstractSqlRedisReceiver implements StreamListener<String,
public IBaseDao baseDao;
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisUtil redisUtil;
@Override
public void onMessage(MapRecord<String, String, String> message) {
......
package com.liquidnet.service.consumer.sweet.receiver;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.consumer.sweet.service.impl.SweetWechatTemplateMsgServiceImpl;
import com.liquidnet.service.sweet.dto.param.SweetOpenSendMsgParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.StreamRecords;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@Slf4j
@Component
public class ConsumerSweetTemplateMsgReceiver extends AbstractSqlRedisReceiver {
@Autowired
SweetWechatTemplateMsgServiceImpl sweetWechatTemplateService;
@Override
protected String getRedisStreamKey() {
return MQConst.SweetQueue.SWEET_TEMPLATE_MSG.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.SweetQueue.SWEET_TEMPLATE_MSG.getGroup();
}
@Override
public void onMessage(MapRecord<String, String, String> message) {
log.debug("CONSUMER SQL[streamKey:{},messageId:{},stream:{},body:{}]",
this.getRedisStreamKey(), message.getId(), message.getStream(), message.getValue());
boolean result = this.consumerSqlDaoHandler(message.getValue().get("message"));
log.info("CONSUMER SQL RESULT:{} ==> MESSAGE_ID:{}", result, message.getId());
try {
stringRedisTemplate.opsForStream().acknowledge(getRedisStreamGroup(), message);
stringRedisTemplate.opsForStream().delete(this.getRedisStreamKey(), message.getId());
} catch (Exception e) {
log.error("#CONSUMER SQL RESULT:{} ==> DEL_REDIS_QUEUE_MSG_EXCEPTION[MESSAGE_ID:{},MSG:{}]", result, message.getId(), JsonUtils.toJson(message), e);
} finally {
try {
stringRedisTemplate.opsForStream().acknowledge(getRedisStreamGroup(), message);
stringRedisTemplate.opsForStream().delete(this.getRedisStreamKey(), message.getId());
} catch (Exception ignored) {
}
}
}
private boolean consumerSqlDaoHandler(String msg) {
Boolean aBoolean = false;
try {
SweetOpenSendMsgParam sweetOpenSendMsgParam = JsonUtils.fromJson(msg, SweetOpenSendMsgParam.class);
if (sweetOpenSendMsgParam == null) {
aBoolean = true;
} else {
aBoolean = sweetWechatTemplateService.openSendMsg(sweetOpenSendMsgParam);
}
} catch (Exception e) {
log.error("CONSUMER SQL FAIL ==> {}", e.getMessage(), e);
} finally {
if (!aBoolean) {
HashMap<String, String> map = CollectionUtil.mapStringString();
map.put("message", msg);
stringRedisTemplate.opsForStream().add(StreamRecords.mapBacked(map).withStreamKey(this.getRedisStreamKey()));
}
}
return aBoolean;
}
}
package com.liquidnet.service.consumer.sweet.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.service.consumer.sweet.utils.RedisDataUtils;
import com.liquidnet.service.sweet.config.WechatMaConfigure;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.dto.param.SweetOpenSendMsgParam;
import com.liquidnet.service.sweet.entity.SweetAppletUser;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.mapper.SweetAppletUserMapper;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
/**
* <p>
* 公众号模版消息 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-07-27
*/
@Slf4j
@Service
public class SweetWechatTemplateMsgServiceImpl {
@Autowired
WechatMpConfigure wechatMpConfigure;
@Autowired
WechatMaConfigure wechatMaConfigure;
@Autowired
private SweetAppletUserMapper sweetAppletUserMapper;
@Autowired
private RedisDataUtils redisDataUtils;
public Boolean openSendMsg(SweetOpenSendMsgParam param) {
String openId = getOpenId(param.getPhone(), param.getSendTargetType());
if (openId.isEmpty()) {
return true;
}
WxMpTemplateMessage templateMessage = null;
if (param.getJumpType() == 5) {
templateMessage = getTemplateMessage(param.getTemplateId(), openId, param.getJumpUrl());
} else {
templateMessage = getTemplateMessage(param.getTemplateId(), openId, param.getJumpType(), param.getJumpAppletPagePath(), param.getJumpAppletUsePath());
}
// 添加模板数据
String templateData = param.getTemplateData();
JSONObject templateDataJObj = JSONObject.parseObject(templateData);
for (Map.Entry<String, Object> entry : templateDataJObj.entrySet()) {
templateMessage.addData(new WxMpTemplateData(entry.getKey(), String.valueOf(entry.getValue())));
}
String msgId = sendTmpMsg(templateMessage, param.getSendTargetType());
if (null == msgId) {
return false;
} else {
return true;
}
}
/**
* 获取templateMessage
*
* @param templateId
* @param openId
* @param url
* @return
*/
private WxMpTemplateMessage getTemplateMessage(String templateId, String openId, String url) {
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
.toUser(openId) // 接收者openid
.templateId(templateId) // 模板id
.url(url) // 模板跳转链接
.build();
return templateMessage;
}
private WxMpTemplateMessage getTemplateMessage(String templateId, String openId, Integer jumpType, String jumpAppletPagePath, Boolean jumpAppletUsePath) {
//配置小程序信息
WxMpTemplateMessage.MiniProgram miniProgram = new WxMpTemplateMessage.MiniProgram();
miniProgram.setAppid(wechatMaConfigure.getWxMaAppid(jumpType));//小程序appid
miniProgram.setUsePath(jumpAppletUsePath);//true的话需要前端配合处理跳转
miniProgram.setPagePath(jumpAppletPagePath);//用户点击时需要跳转的小程序页面
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
.toUser(openId) // 接收者openid
.templateId(templateId) // 模板id
.miniProgram(miniProgram) // 模板跳转链接
.build();
return templateMessage;
}
private String getOpenId(String phone, Integer sendTargetType) { // sendTargetType 将来如果加入其他服务号用获取不同openId
List<SweetAppletUser> sweetAppletUsers = sweetAppletUserMapper.selectList(Wrappers.lambdaQuery(SweetAppletUser.class).eq(SweetAppletUser::getGetPurePhoneNumber, phone));
if (CollectionUtils.isEmpty(sweetAppletUsers)) {
log.info("getOpenId没有此applet用户:[phone=[{}]", phone);
return "";
} else {
SweetAppletUser sweetAppletUser = sweetAppletUsers.get(0);
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(sweetAppletUser.getUnionId());
if (null == userInfo) {
log.info("getOpenId没有此WechatUser用户:[phone={},unionId={}]", phone, sweetAppletUser.getUnionId());
return "";
} else {
return userInfo.getOpenId();
}
}
}
private String sendTmpMsg(WxMpTemplateMessage templateMessage, Integer sendTargetType) {
String msgId = null;
try {
// 发送模板消息
WxMpService wxMpService = wechatMpConfigure.getWxMpService(sendTargetType);
log.info("sendTmpMsg-isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired());
log.info("sendTmpMsg-getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken());
msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
log.info("模版消息发送成功:[msgId={}]", msgId);
} catch (WxErrorException e) {
log.error("模版消息发送异常", e);
}
return msgId;
}
}
package com.liquidnet.service.consumer.sweet.utils;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.sweet.constant.SweetConstant;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class RedisDataUtils {
@Autowired
private RedisUtil redisUtil;
public SweetWechatUser getSweetWechatUser(String unionid) {
if (unionid.isEmpty()) {
return null;
}
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO.concat(unionid);
return (SweetWechatUser) redisUtil.get(redisKey);
}
}
......@@ -21,10 +21,10 @@ import com.liquidnet.service.kylin.dto.vo.returns.*;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsService;
import com.liquidnet.service.kylin.utils.DataUtils;
import com.liquidnet.service.kylin.utils.ObjectUtil;
import com.liquidnet.service.kylin.utils.OrderUtils;
import com.liquidnet.service.kylin.utils.QueueUtils;
import com.mongodb.BasicDBObject;
import io.netty.util.internal.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.bson.Document;
......@@ -66,13 +66,13 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
@Override
public PageInfo<List<KylinOrderListVo>> orderList() {
//TODO 缺快递
PageInfo<List<KylinOrderListVo>> mPageInfo = null;
String uid = CurrentUtil.getCurrentUid();
try {
List<KylinOrderListVo> voList = dataUtils.getOrderList(uid);
for (int i = 0; i < voList.size(); i++) {
KylinOrderListVo item = voList.get(i);
item.setStatus(item.getStatus());
Integer orderExpressStatus = dataUtils.getOrderExpressInfo(item.getOrderTicketsId());
item.setExpressStatus(orderExpressStatus);
......
package com.liquidnet.service.order.dto;
import com.liquidnet.service.kylin.dto.param.PerformancePartnerVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@ApiModel(value = "SweetOpenSendMsgParam", description = "发送模版消息公共接口入参")
@Data
public class SweetOpenSendMsgParam implements Serializable,Cloneable {
private static final long serialVersionUID = 675588088506034208L;
@ApiModelProperty(position = 11, required = true, allowableValues = "1,2", value = "发送目标类型 1正在服务号 2摩登服务号")
@NotNull(message = "sendTargetType不能为空") @Min(value = 1, message = "sendTargetType无效") @Max(value = 2, message = "sendTargetType无效")
private Integer sendTargetType;
@ApiModelProperty(position = 12, required = true, value = "模版消息ID", example = "y-j82V1TYhlTH1j8QscuDPcPQtNiDtENb7N5IZMBvqU")
@NotBlank(message = "templateId不能为空")
private String templateId;
@ApiModelProperty(position = 13, required = true, value = "模版消息数据", example = "{\"first\": \"感谢关注「正在现场」服务号\", \"keyword2\": \"4006-310-750\"}")
@NotBlank(message = "templateData不能为空")
private String templateData;
@ApiModelProperty(position = 14, required = true, allowableValues = "1,2,3,4,5", value = "点击跳转类型 1草莓小程序 2五百里小程序 3mdsk小程序 4正在小程序 5url")
@NotNull(message = "jumpType不能为空") @Min(value = 1, message = "jumpType无效") @Max(value = 5, message = "jumpType无效")
private Integer jumpType;
@ApiModelProperty(position = 15, value = "跳转url", example = "www.zhengzai.tv")
private String jumpUrl;
@ApiModelProperty(position = 16, allowableValues = "false,true", value = "是否需要前端配合处理跳转,直接跳转jumpAppletPagePath为false,true时需要前端根据状态码做跳转处理")
private Boolean jumpAppletUsePath;
@ApiModelProperty(position = 17, value = "跳转小程序需要的某页地址", example = "pages/webview?query=lottery")
private String jumpAppletPagePath;
@ApiModelProperty(position = 18, required = true, value = "openId", example = "oUpkkuNe4yuVs77aaKFvuvpgNOSw")
@NotBlank(message = "openId不能为空")
private String openId;
@ApiModelProperty(position = 18, required = true, value = "phone", example = "15888888888")
@NotBlank(message = "phone不能为空")
private String phone;
private static final SweetOpenSendMsgParam obj = new SweetOpenSendMsgParam();
public static SweetOpenSendMsgParam getNew() {
try {
return (SweetOpenSendMsgParam) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetOpenSendMsgParam();
}
}
}
package com.liquidnet.service.order.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@ApiModel(value = "SweetOpenSendMsgParam", description = "发送模版消息公共接口入参")
@Data
public class TemplateOrderParam implements Serializable,Cloneable {
private static final long serialVersionUID = 675588088506034208L;
private String first;
private String keyword1;
private String keyword2;
private String keyword3;
private String keyword4;
private String remark;
private static final TemplateOrderParam obj = new TemplateOrderParam();
public static TemplateOrderParam getNew() {
try {
return (TemplateOrderParam) obj.clone();
} catch (CloneNotSupportedException e) {
return new TemplateOrderParam();
}
}
}
package com.liquidnet.service.order.service.impl;
import com.alibaba.fastjson.JSON;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.sms.constant.SmsEnum;
import com.liquidnet.commons.lang.util.*;
......@@ -23,6 +24,8 @@ import com.liquidnet.service.kylin.dto.vo.returns.PayInnerResultVo;
import com.liquidnet.service.kylin.dto.vo.returns.PayResultVo;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsOrderService;
import com.liquidnet.service.order.dto.SweetOpenSendMsgParam;
import com.liquidnet.service.order.dto.TemplateOrderParam;
import com.liquidnet.service.order.utils.*;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.AlibabaDamaiMevOpenBatchpushticketRequest;
......@@ -912,6 +915,29 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
.setTemplateParam("time", time1 + " " + time2).toJson()
);
}
//模板消息
String fieldName = performanceData.getFieldName();
Integer number = orderTicketData.getNumber();
String useTime = orderTicketData.getUseStart();
String performanceName = performanceData.getTitle();
SweetOpenSendMsgParam param = SweetOpenSendMsgParam.getNew();
param.setSendTargetType(1);
param.setTemplateId("glzgM9PLgchlaenpXN5H3N9JDwV69a52R8H6z95hzrA");
TemplateOrderParam templateOrderParam = TemplateOrderParam.getNew();
templateOrderParam.setFirst("您已购票成功");
templateOrderParam.setKeyword1(performanceName);
templateOrderParam.setKeyword2(number.toString());
templateOrderParam.setKeyword3(useTime);
templateOrderParam.setKeyword4(fieldName);
templateOrderParam.setRemark("点击详情 查看更多票务信息");
param.setTemplateData(JSON.toJSONString(templateOrderParam));
param.setJumpType(4);
param.setJumpUrl("http://m.zhengzai.tv/#/order/ticket/orderdetail?id="+orderTicketData.getOrderTicketsId());
param.setJumpAppletPagePath("/pages/webview?query=orderDetail&id="+orderTicketData.getOrderTicketsId());
param.setJumpAppletUsePath(false);
param.setPhone(orderTicketData.getUserMobile());
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_TEMPLATE_MSG.getKey(),
JsonUtils.toJson(param));
// 大麦回调
// sycDamaiOrder(orderTickets.getOrderTicketsId(), orderTicketData.getIsMember());
......
......@@ -24,3 +24,7 @@ XGROUP CREATE sweet:stream:rk.remindInsert group.remindInsert 0
-- 小程序登录记录用户解密后信息 --
XADD sweet:stream:rk.sweetAppletUserInsert * 0 0
XGROUP CREATE sweet:stream:rk.sweetAppletUserInsert group.sweetAppletUserInsert 0
-- 发送模版消息 --
XADD sweet:stream:rk.sweetTemplateMsg * 0 0
XGROUP CREATE sweet:stream:rk.sweetTemplateMsg group.sweetTemplateMsg 0
\ No newline at end of file
......@@ -140,4 +140,18 @@ public class WechatMaConfigure {
}
return null;
}
public String getWxMaAppid(Integer anum) {
switch (anum) {
case 4:
return appletAppidZhengzai;
case 1:
return appletAppidStrawberry;
case 2:
return appletAppidFive;
case 3:
return appletAppidMdsk;
}
return "";
}
}
package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.param.SweetOpenSendMsgParam;
import com.liquidnet.service.sweet.service.impl.SweetWechatTemplateServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......@@ -9,6 +10,8 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@Api(tags = "公众号模版消息")
@RestController
@RequestMapping("/wechatTemplate")
......@@ -23,6 +26,12 @@ public class SweetWechatTemplateController {
return sweetTemplateService.sendRemindMsg();
}
@PostMapping("openSend")
@ApiOperation("发送模版消息公共接口")
public ResponseDto openSend(@Valid @RequestBody SweetOpenSendMsgParam param) {
return sweetTemplateService.openSendMsg(param);
}
@PostMapping("remind")
@ApiOperation("提醒记录")
@ApiImplicitParams({
......
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 小程序登录记录用户解密后信息表
* </p>
*
* @author jiangxiulong
* @since 2021-09-22
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetAppletUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* user_id
*/
private String userId;
/**
* openId
*/
@TableField("openId")
private String openId;
/**
* unionId
*/
@TableField("unionId")
private String unionId;
/**
* 手机号
*/
@TableField("getPhoneNumber")
private String getPhoneNumber;
/**
* 手机号
*/
@TableField("getPurePhoneNumber")
private String getPurePhoneNumber;
/**
* 地区码
*/
@TableField("getCountryCode")
private String getCountryCode;
/**
* 1草莓 2五百里 3mdsk 4正在
*/
private Integer type;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}
package com.liquidnet.service.sweet.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.*;
import java.io.Serializable;
@ApiModel(value = "SweetOpenSendMsgParam", description = "发送模版消息公共接口入参")
@Data
public class SweetOpenSendMsgParam implements Serializable {
private static final long serialVersionUID = 675588088506034208L;
@ApiModelProperty(position = 11, required = true, allowableValues = "1,2", value = "发送目标类型 1正在服务号 2摩登服务号")
@NotNull(message = "sendTargetType不能为空") @Min(value = 1, message = "sendTargetType无效") @Max(value = 2, message = "sendTargetType无效")
private Integer sendTargetType;
@ApiModelProperty(position = 12, required = true, value = "模版消息ID", example = "y-j82V1TYhlTH1j8QscuDPcPQtNiDtENb7N5IZMBvqU")
@NotBlank(message = "templateId不能为空")
private String templateId;
@ApiModelProperty(position = 13, required = true, value = "模版消息数据", example = "{\"first\": \"感谢关注「正在现场」服务号\", \"keyword2\": \"4006-310-750\"}")
@NotBlank(message = "templateData不能为空")
private String templateData;
@ApiModelProperty(position = 14, required = true, allowableValues = "1,2,3,4,5", value = "点击跳转类型 1草莓小程序 2五百里小程序 3mdsk小程序 4正在小程序 5url")
@NotNull(message = "jumpType不能为空") @Min(value = 1, message = "jumpType无效") @Max(value = 5, message = "jumpType无效")
private Integer jumpType;
@ApiModelProperty(position = 15, value = "跳转url", example = "www.zhengzai.tv")
private String jumpUrl;
@ApiModelProperty(position = 16, allowableValues = "false,true", value = "是否需要前端配合处理跳转,直接跳转jumpAppletPagePath为false,true时需要前端根据状态码做跳转处理")
private Boolean jumpAppletUsePath;
@ApiModelProperty(position = 17, value = "跳转小程序需要的某页地址", example = "pages/webview?query=lottery")
private String jumpAppletPagePath;
/*@ApiModelProperty(position = 18, required = true, value = "openId", example = "oUpkkuNe4yuVs77aaKFvuvpgNOSw")
@NotBlank(message = "openId不能为空")
private String openId;*/
@ApiModelProperty(position = 18, required = true, value = "phone", example = "15888888888")
@NotBlank(message = "phone不能为空")
private String phone;
}
......@@ -4,14 +4,19 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.sweet.config.WechatMaConfigure;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.entity.SweetRemind;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.mapper.SweetRemindMapper;
import com.liquidnet.service.sweet.param.SweetOpenSendMsgParam;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
......@@ -50,6 +55,8 @@ public class SweetWechatTemplateServiceImpl {
private RedisDataUtils redisDataUtils;
@Autowired
private RedisUtil redisUtil;
@Autowired
private QueueUtils queueUtils;
@Autowired
private SweetRemindMapper sweetRemindMapper;
......@@ -57,6 +64,15 @@ public class SweetWechatTemplateServiceImpl {
@Autowired
WechatMpConfigure wechatMpConfigure;
@Autowired
WechatMaConfigure wechatMaConfigure;
public ResponseDto openSendMsg(SweetOpenSendMsgParam param) {
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_TEMPLATE_MSG.getKey(),
JsonUtils.toJson(param));
return ResponseDto.success();
}
public ResponseDto sendRemindMsg() {
// test
/*WxMpTemplateMessage templateMessage = getTemplateMessage("CNLDBZYQoDgTWudicx8WU81Jr9b6RyG9hmK4O0tpK-k", "oUpkkuNe4yuVs77aaKFvuvpgNOSw", h5Url.concat("/#/ticket/detail?id=").concat("111"));
......@@ -246,4 +262,5 @@ public class SweetWechatTemplateServiceImpl {
return false;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment