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

Commit 3d8a5bb5 authored by jiangxiulong's avatar jiangxiulong

Merge remote-tracking branch 'origin/master' into jxl_1201_jifenDraw

# Conflicts:
#	liquidnet-bus-common/liquidnet-common-service-base/src/main/java/com/liquidnet/service/base/constant/MQConst.java
parents ecd385e5 02fb58ef
......@@ -23,17 +23,27 @@ public class AdamMemberOrderCodeParam implements Serializable {
@Pattern(regexp = LnsRegex.Valid.DATETIME_YMD, message = "生日格式有误")
@NotBlank(message = "生日不能为空")
private String birthday;
@ApiModelProperty(position = 13, required = true, value = "地区[100]", example = "北京 北京市 朝阳区")
@NotBlank(message = "地区不能为空")
private String area;
@ApiModelProperty(position = 14, required = true, value = "收获地址")
// @ApiModelProperty(position = 13, required = true, value = "地区[100]", example = "北京 北京市 朝阳区")
// @NotBlank(message = "地区不能为空")
// private String area;
@ApiModelProperty(position = 13, required = true, value = "收获地址")
@Size(min = 1, max = 64, message = "收获地址长度限制1-64位字符")
@NotBlank(message = "收获地址不能为空")
private String addressId;
@ApiModelProperty(position = 15, value = "支付终端[app,wap,js,applet]", example = "js")
@ApiModelProperty(position = 14, value = "支付终端[app,wap,js,applet]", example = "js")
private String deviceFrom;
@ApiModelProperty(position = 16, required = false, value = "姓名[未实名时必传]")
@ApiModelProperty(position = 15, required = false, value = "姓名[未实名时必传]")
private String name;
@ApiModelProperty(position = 17, required = false, value = "身份证件号[未实名时必传]")
@ApiModelProperty(position = 16, required = false, value = "身份证件号[未实名时必传]")
private String idCard;
@ApiModelProperty(position = 17, required = true, value = "常住地/省[50] ~ 替换原字段[area]", example = "北京市")
@NotBlank(message = "省份不能为空")
private String province;
@ApiModelProperty(position = 18, required = true, value = "常住地/市[50] ~ 替换原字段[area]", example = "北京")
@NotBlank(message = "城市不能为空")
private String city;
@ApiModelProperty(position = 19, required = true, value = "常住地/区县[50] ~ 替换原字段[area]", example = "朝阳区")
@NotBlank(message = "区县不能为空")
private String county;
}
package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.SensitizeUtil;
import com.liquidnet.service.adam.entity.AdamAddresses;
......@@ -12,6 +13,7 @@ import java.time.LocalDateTime;
@ApiModel(value = "AdamAddressesVo", description = "收获地址")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AdamAddressesVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = -3096308044365829079L;
@ApiModelProperty(position = 10, value = "收获地址ID[64]")
......
package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.SensitizeUtil;
import com.liquidnet.service.adam.entity.AdamEnters;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -12,6 +12,7 @@ import java.time.LocalDateTime;
@ApiModel(value = "AdamEntersVo", description = "入场人")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AdamEntersVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = -9143065766410946012L;
@ApiModelProperty(position = 10, value = "入场人ID[64]")
......
package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.adam.entity.AdamMemberCode;
import io.swagger.annotations.ApiModel;
......@@ -12,6 +13,7 @@ import java.time.LocalDateTime;
@ApiModel(value = "AdamMemberCodeVo", description = "会员兑换码")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AdamMemberCodeVo implements Serializable, Cloneable {
private static final long serialVersionUID = -2822442493419088086L;
@ApiModelProperty(position = 0, value = "会员码批次号")
......
package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.adam.dto.AdamMemberOrderDto;
import com.liquidnet.service.adam.entity.AdamMemberOrder;
......@@ -14,6 +15,7 @@ import java.time.LocalDateTime;
@ApiModel(value = "AdamMemberOrderVo", description = "订单详情展示")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AdamMemberOrderVo implements Serializable, Cloneable {
private static final long serialVersionUID = -1606153856097622877L;
@ApiModelProperty(position = 0, value = "订单号")
......
package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -9,6 +10,7 @@ import java.util.List;
@ApiModel(value = "AdamMemberRightsCouponVo", description = "会员专享特权券")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AdamMemberRightsCouponVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = 4099907681723174194L;
@ApiModelProperty(position = 1, value = "权益ID")
......
package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.service.adam.entity.AdamMemberRights;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -7,6 +8,7 @@ import lombok.Data;
@ApiModel(value = "AdamMemberRightsVo", description = "会员")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AdamMemberRightsVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = -2407106925001008460L;
@ApiModelProperty(position = 1, value = "权益ID")
......
package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.adam.entity.AdamMember;
import io.swagger.annotations.ApiModel;
......@@ -13,6 +14,7 @@ import java.util.List;
@ApiModel(value = "AdamMemberVo", description = "会员")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AdamMemberVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = -3480288014645762321L;
@ApiModelProperty(position = 0, value = "会员ID[50]")
......
package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.service.adam.entity.AdamRealName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -9,6 +10,7 @@ import java.io.Serializable;
@ApiModel(value = "AdamRealInfoVo", description = "实名信息")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AdamRealInfoVo implements Serializable, Cloneable {
private static final long serialVersionUID = -3469256375584132928L;
@ApiModelProperty(position = 10, value = "用户ID[30]")
......
package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.adam.entity.AdamThirdParty;
import io.swagger.annotations.ApiModel;
......@@ -11,6 +12,7 @@ import java.time.LocalDateTime;
@ApiModel(value = "ThirdPartInfoVo", description = "用户第三方信息")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AdamThirdPartInfoVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = -3239086191919676121L;
@ApiModelProperty(position = 11, value = "用户ID[64]")
......
package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.type.TypeReference;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
......@@ -14,10 +15,10 @@ import org.apache.commons.lang3.StringUtils;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
@ApiModel(value = "AdamUserInfoVo", description = "用户详情")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AdamUserInfoVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = 8479869354894030303L;
@ApiModelProperty(position = 10, value = "用户ID[64]")
......
......@@ -2,6 +2,7 @@ package com.liquidnet.service.adam.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.adam.entity.AdamUserMember;
import io.swagger.annotations.ApiModel;
......@@ -14,6 +15,7 @@ import java.time.format.DateTimeFormatter;
@ApiModel(value = "AdamUserMemberVo", description = "会员用户信息")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AdamUserMemberVo implements Serializable, Cloneable {
private static final long serialVersionUID = 9027553500608702757L;
@ApiModelProperty(position = 11, value = "用户ID")
......
......@@ -64,4 +64,11 @@ public class SweetConstant {
//2022草莓音乐节活动海报相关
public final static String REDIS_KEY_SWEET_STRAWBERRY_POSTER = "sweet:strawberry:poster";
//猫登活动-触发活动
public final static String REDIS_KEY_SWEET_WECHAT_MAODENG_OPEN_POSTER = "sweet:maoDeng:open:openId";
//猫登活动整体
public final static String REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER = "sweet:maoDeng:naneAndImg:openId";
//猫登活动整体
public final static String REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER_TRANSFER = "sweet:maoDeng:naneAndImg:openId:transfer";
}
package com.liquidnet.service.sweet.vo;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class SweetMaoDengVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
/**
* 用户id
*/
private String userId;
/**
* 用户id
*/
private String maoId;
/**
* 消息
*/
private String textMsg;
/**
* 图片url
*/
private String picUrl;
/**
* 生成图url
*/
private String imgUrl;
/**
* 创建时间
*/
private LocalDateTime createdAt;
private static final SweetMaoDengVo obj = new SweetMaoDengVo();
public static SweetMaoDengVo getNew() {
try {
return (SweetMaoDengVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetMaoDengVo();
}
}
}
......@@ -458,7 +458,7 @@
</div>
<div class="form-group alltrack">
<label class="col-sm-2 control-label">类型:</label>
<div class="col-sm-10">
<div class="col-sm-10 alltrack_radio">
<div class="radio-box">
<label for="radio1" onclick="coupetType(this)">
<input type="radio" id="coupetypr2" class="coupeAddVal" name="coupe_type" value="2"/>满减券
......@@ -695,8 +695,9 @@
$('#remoteSearch').val('');
$('.user_rules').hide();
if (typeRadio == 3) {
$('.alltrack').hide();
$('.alltrack').show();
$('.alltrack_limit').show();
$('.alltrack_radio').hide();
} else {
$('.alltrack').show();
$('.alltrack_limit').hide();
......@@ -826,6 +827,7 @@
// 添加券
function addCoupes (obj) {
var addItemIndex = $('.member-coupes').index($(obj));
console.log(addItemIndex)
$('.parentsIndex').val(addItemIndex);
$('.pop_oper').val(1);
$('.coupe_pop').show();
......@@ -870,8 +872,9 @@
$('#valFace').val(valFace);
if (this.typeRadio == 3) {
$('.alltrack').hide();
$('.alltrack').show();
$('.alltrack_limit').show();
$('.alltrack_radio').hide();
} else {
$('.alltrack').show();
$('.alltrack_limit').hide();
......
......@@ -5,6 +5,8 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.math.BigInteger;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
/**
......@@ -98,4 +100,28 @@ public class FilesUtils {
}
}
public static File inputStreamToFile(String url, String name){
try {
HttpURLConnection httpUrl = (HttpURLConnection) new URL(url).openConnection();
httpUrl.connect();
InputStream ins = httpUrl.getInputStream();
File file = new File(System.getProperty("java.io.tmpdir") + File.separator + name);
if (file.exists()) {
return file;
}
OutputStream os = new FileOutputStream(file);
int bytesRead;
int len = 8192;
byte[] buffer = new byte[len];
while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
return file;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
}
......@@ -85,6 +85,8 @@ public class MQConst {
SWEET_CITY_VOTE("sweet:stream:rk.cityVote", "group.cityVote", "用户投票记录"),
SWEET_ANTIGENIC_QUESTION("sweet:stream:rk.antigenicQuestion", "group.antigenicQuestion", "防疫答题"),
SWEET_POSTER("sweet:stream:rk.userLikeMusician", "group.userLikeMusician", "用户喜欢的音乐人"),
SWEET_WECHAT_MAODENG_TEXT_INSERT("sweet:stream:rk.textAndImgInsert", "group.sweetMaoDengInsert", "猫登天空"),
SWEET_INTEGRAL_ACTIVITY_DRAW("sweet:stream:rk.integralActivityDraw", "group.integralActivityDraw", "积分抽奖"),
SWEET_STONE_INTEGRAL("sweet:stream:rk.stoneIntegral", "group.stoneIntegral", "stone积分处理"),
;
......
......@@ -35,7 +35,7 @@ liquidnet:
dbs: 0,16
database: 15
host: 39.107.71.112
port: 6379
port: 6369
password: 3Xa%8p
dragon:
dbs: 0,16
......@@ -48,7 +48,7 @@ liquidnet:
database: 15
host: 39.107.71.112
port: 6379
password: 3Xa%8p
password: PO@B!Iud32
adam:
dbs: 0,16
database: 15
......@@ -132,6 +132,9 @@ liquidnet:
modernsky:
appid: wx6bf7999941a06d15
secret: a12012b31307a539719dbe4d137ca45a
test:
appid: wxc7edcfdcb28e21f6
secret: 554c17cea13dffa05c290e7e722665ac
applet:
zhengzai:
appid: wx4732efeaa2b08086
......
......@@ -34,31 +34,31 @@ liquidnet:
kylin:
database: 255
dbs: 0,256
host: r-2ze7002ckw5u75fguk.redis.rds.aliyuncs.com
host: r-2ze7002ckw5u75fgukpd.redis.rds.aliyuncs.com
port: 6380
password: PO@B!Iud32
dragon:
database: 255
dbs: 0,256
host: r-2ze7002ckw5u75fguk.redis.rds.aliyuncs.com
host: r-2ze7002ckw5u75fgukpd.redis.rds.aliyuncs.com
port: 6380
password: PO@B!Iud32
sweet:
database: 255
dbs: 0,256
host: r-2ze7002ckw5u75fguk.redis.rds.aliyuncs.com
host: r-2ze7002ckw5u75fgukpd.redis.rds.aliyuncs.com
port: 6380
password: PO@B!Iud32
adam:
database: 255
dbs: 0,256
host: r-2ze7002ckw5u75fguk.redis.rds.aliyuncs.com
host: r-2ze7002ckw5u75fgukpd.redis.rds.aliyuncs.com
port: 6380
password: PO@B!Iud32
candy:
database: 255
dbs: 0,256
host: r-2ze7002ckw5u75fguk.redis.rds.aliyuncs.com
host: r-2ze7002ckw5u75fgukpd.redis.rds.aliyuncs.com
port: 6380
password: PO@B!Iud32
mongodb:
......@@ -135,6 +135,9 @@ liquidnet:
modernsky:
appid: wx6bf7999941a06d15
secret: a12012b31307a539719dbe4d137ca45a
test:
appid: wxc7edcfdcb28e21f6
secret: 554c17cea13dffa05c290e7e722665ac
applet:
zhengzai:
appid: wx4732efeaa2b08086
......
......@@ -55,6 +55,12 @@
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-api-feign-stone</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
......
......@@ -61,6 +61,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
for (CandyUserCouponBasicDto dtoItem : dtoList) {
CandyCouponVo baseVo = CouponBaseUtil.getBaseCouponUserVo(dtoItem);
if(baseVo==null){
continue;
}
if (type == 1) {
if (baseVo.getState().equals(3) || dtoItem.getState().equals(5)) {
continue;
......@@ -121,6 +124,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
continue;
}
CandyCouponVo baseVo = CouponBaseUtil.getBaseCouponUserVo(dtoItem);
if(baseVo==null){
continue;
}
if (dtoItem.getExclusive().equals(1)) { //会员券
memberCoupon.add(baseVo);
}
......@@ -538,6 +544,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
for (CandyUserCouponBasicDto dtoItem : dtoList) {
if (uCouponIdList.contains(dtoItem.getUcouponId())) {
CandyCouponVo baseVo = CouponBaseUtil.getBaseCouponUserVo(dtoItem);
if(baseVo==null){
continue;
}
vo.add(baseVo);
} else {
continue;
......
package com.liquidnet.service.candy.util;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.candy.dto.CandyCouponInfoDto;
import com.liquidnet.service.candy.dto.CandyCouponRuleDto;
import com.liquidnet.service.candy.dto.CandyUserCouponBasicDto;
......@@ -55,6 +56,9 @@ public class CouponBaseUtil {
} else {
vo.setCouType(dtoItem.getCouType());
}
if (dtoItem.getDuedAt() == null) {
return null;
}
vo.setState(getCouponState(now, dtoItem.getDuedAt(), dtoItem.getBindAt(), dtoItem.getState()));
vo.setUseRules(rulesVoList);
return vo;
......
package com.liquidnet.service.consumer.sweet.config;
import com.liquidnet.service.consumer.sweet.receiver.ConsumerSweetMaoDengReceiver;
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_WECHAT_MAODENG_TEXT_INSERT;
@Configuration
public class ConsumerSweetMaoDengConfig {
@Autowired
ConsumerSweetMaoDengReceiver consumerSweetMaoDengReceiver;
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);
}
/*
*猫登天空
* */
private Subscription receiveSqlMaoDeng(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(SWEET_WECHAT_MAODENG_TEXT_INSERT.getGroup(), SWEET_WECHAT_MAODENG_TEXT_INSERT.name() + t),
StreamOffset.create(SWEET_WECHAT_MAODENG_TEXT_INSERT.getKey(), ReadOffset.lastConsumed()), consumerSweetMaoDengReceiver
);
}
@Bean
public Subscription subscriptionSqlMaoDeng(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlMaoDeng(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlMaoDeng2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlMaoDeng(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlMaoDeng3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlMaoDeng(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
}
package com.liquidnet.service.consumer.sweet.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerSweetMaoDengReceiver extends AbstractSqlRedisReceiver{
@Override
protected String getRedisStreamKey() {
return MQConst.SweetQueue.SWEET_WECHAT_MAODENG_TEXT_INSERT.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.SweetQueue.SWEET_WECHAT_MAODENG_TEXT_INSERT.getGroup();
}
}
......@@ -786,17 +786,17 @@ public class DataUtils {
}
public KylinIpAreaVo getKylinIpAreaVo(String ipAddress) {
List<KylinIpAreaVo> data = mongoTemplate.find(Query.query(Criteria.where("ipBeginLong").lte(IPUtil.ipToLong(ipAddress))
.and("ipEndLong").gte(IPUtil.ipToLong(ipAddress))), KylinIpAreaVo.class, KylinIpAreaVo.class.getSimpleName());
if(data==null || data.size()==0){
// List<KylinIpAreaVo> data = mongoTemplate.find(Query.query(Criteria.where("ipBeginLong").lte(IPUtil.ipToLong(ipAddress))
// .and("ipEndLong").gte(IPUtil.ipToLong(ipAddress))), KylinIpAreaVo.class, KylinIpAreaVo.class.getSimpleName());
// if(data==null || data.size()==0){
KylinIpAreaVo data0 = KylinIpAreaVo.getNew();
data0.setArea("未知");
data0.setCity("未知");
data0.setCounty("未知");
data0.setProvince("未知");
return data0;
}else{
return data.get(0);
}
// }else{
// return data.get(0);
// }
}
}
......@@ -256,18 +256,18 @@ public class DataUtils {
}
public KylinIpAreaVo getKylinIpAreaVo(String ipAddress) {
List<KylinIpAreaVo> data = mongoTemplate.find(Query.query(Criteria.where("ipBeginLong").lte(IPUtil.ipToLong(ipAddress))
.and("ipEndLong").gte(IPUtil.ipToLong(ipAddress))), KylinIpAreaVo.class, KylinIpAreaVo.class.getSimpleName());
if(data==null || data.size()==0){
// List<KylinIpAreaVo> data = mongoTemplate.find(Query.query(Criteria.where("ipBeginLong").lte(IPUtil.ipToLong(ipAddress))
// .and("ipEndLong").gte(IPUtil.ipToLong(ipAddress))), KylinIpAreaVo.class, KylinIpAreaVo.class.getSimpleName());
// if(data==null || data.size()==0){
KylinIpAreaVo data0 = KylinIpAreaVo.getNew();
data0.setArea("未知");
data0.setCity("未知");
data0.setCounty("未知");
data0.setProvince("未知");
return data0;
}else{
return data.get(0);
}
// }else{
// return data.get(0);
// }
}
}
......@@ -136,4 +136,57 @@ public class AlOssController {
return ResponseDto.success(uploadVo);
}
@PostMapping("/uploadUrl")
@ApiOperation("阿里云上传URL")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "pathName", value = "归类的文件夹名称 比如banner上传就传 banner 返回的地址就会是bnanner/XXX", defaultValue = "other"),
@ApiImplicitParam(type = "form", dataType = "String", name = "picUrl", value = "picUrl", required = false),
})
public ResponseDto<UploadVo> upload(
@RequestParam(defaultValue = "0", required = false) String pathName,
@RequestParam(defaultValue = "0", required = false) String picUrl
) {
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
File fileNew = FilesUtils.inputStreamToFile(picUrl, System.currentTimeMillis() + ".png");
// file md5
String fileMD5 = FilesUtils.getFileMD5(fileNew);
List<PlatformOssFiles> platformOssFiles = platformOssFilesMapper.selectList(
Wrappers.lambdaQuery(PlatformOssFiles.class)
.eq(PlatformOssFiles::getMd5str, fileMD5)
);
UploadVo uploadVo = new UploadVo();
if (CollectionUtils.isEmpty(platformOssFiles)) {
String filename = pathName;
//这里文件名用了uuid 防止重复,可以根据自己的需要来写
String uploadName = UUID.randomUUID() + filename.substring(filename.lastIndexOf("."));// 078a77e0-cf80-481b-824c-5935247cff15.jpeg
uploadName = uploadName.replace("-", "");// 078a77e0cf80481b824c5935247cff15.jpeg
String uploadpath = pathName.replaceAll(".jepg", "") + "/" + DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyy_MM_dd2) + "/" + uploadName;
String buckName = "img-zhengzai-tv";
PutObjectRequest putObjectRequest = new PutObjectRequest(buckName, uploadpath, fileNew);
ossClient.putObject(putObjectRequest);
ossClient.shutdown();
// 入库
PlatformOssFiles platformOssFilesDate = new PlatformOssFiles();
String ossFilesId = IDGenerator.nextSnowId();
platformOssFilesDate.setOssFilesId(ossFilesId);
platformOssFilesDate.setOssPath(uploadpath);
platformOssFilesDate.setFileName(filename);
platformOssFilesDate.setMd5str(fileMD5);
platformOssFilesDate.setCreatedAt(DateUtil.getNowTime());
platformOssFilesMapper.insert(platformOssFilesDate);
BeanUtils.copyProperties(platformOssFilesDate, uploadVo);
} else {
PlatformOssFiles platformOssFilesOne = platformOssFiles.get(0);
BeanUtils.copyProperties(platformOssFilesOne, uploadVo);
}
FilesUtils.delteTempFile(fileNew); // 删除临时文件
return ResponseDto.success(uploadVo);
}
}
......@@ -28,9 +28,10 @@ public class CandyMgtCouponTaskController {
@PutMapping("issue/coupons")
public ResponseDto<String> issueCoupons() {
LocalDateTime now = LocalDateTime.now();
LambdaQueryWrapper<CandyMgtCoupon> queryWrapper = Wrappers.lambdaQuery(CandyMgtCoupon.class)
.eq(CandyMgtCoupon::getState, 0)
.le(CandyMgtCoupon::getEventAt, LocalDateTime.now())
.le(CandyMgtCoupon::getEventAt, now)
.orderByAsc(CandyMgtCoupon::getEventAt);
List<CandyMgtCoupon> list = platformCandyMgtCouponService.list(queryWrapper);
int taskSize = CollectionUtils.isEmpty(list) ? -1 : list.size(), pl = 0;
......@@ -39,9 +40,13 @@ public class CandyMgtCouponTaskController {
for (int i = 0; i < taskSize; i++) {
CandyMgtCoupon mgtCoupon = list.get(i);
mgtCoupon.setState(9);
mgtCoupon.setUpdatedAt(now);
}
if (platformCandyMgtCouponService.updateBatchById(list)) {
for (int i = 0; i < taskSize; i++) {
CandyMgtCoupon mgtCoupon = list.get(i);
try {
if (platformCandyMgtCouponService.updateById(mgtCoupon)) {
try {
LambdaQueryWrapper<CandyCoupon> couponLambdaQueryWrapper = Wrappers.lambdaQuery(CandyCoupon.class)
.eq(CandyCoupon::getState, 1).eq(CandyCoupon::getCouponId, mgtCoupon.getCouponId());
CandyCoupon coupon = platformCandyCouponService.getOne(couponLambdaQueryWrapper);
......@@ -77,13 +82,12 @@ public class CandyMgtCouponTaskController {
mgtCoupon.getMcouponId(), coupon.getCouType(), coupon.getBindType(), mgtCoupon.getEventAmt(), mgtCoupon.getEventType());
pl++;
} catch (Exception e) {
log.error("发放券任务总数:{},任务{}处理异常[mcouponId:{}]", taskSize, i, mgtCoupon.getMcouponId(), e);
}
} catch (Exception e) {
log.error("发放券任务总数:{},任务{}处理异常[mcouponId:{}]", taskSize, i, mgtCoupon.getMcouponId(), e);
}
}
log.info("发放券任务总数:{},成功处理任务数:{} >>> END END END", taskSize, pl);
return ResponseDto.success(String.format("发放券任务总数:%s,成功处理任务数:%s", taskSize, pl));
}
}
......@@ -18,12 +18,14 @@ import com.liquidnet.service.candy.constant.CandyRedisConst;
import com.liquidnet.service.candy.dto.CandyUserCouponBasicDto;
import com.liquidnet.service.candy.entity.CandyUserCoupon;
import com.liquidnet.service.candy.mapper.CandyUserCouponMapper;
import com.liquidnet.service.feign.stone.api.FeignStoneIntegralClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
......@@ -44,6 +46,9 @@ public class PlatformMemberRefundService extends ServiceImpl<AdamMemberRefundMap
@Autowired
private RedisDataSourceUtil redisDataSourceUtil;
@Autowired
FeignStoneIntegralClient feignStoneIntegralClient;
public boolean refundProcessing(HttpServletRequest request) {
String refundNo = request.getParameter("orderRefundCode");
String refundAt = request.getParameter("refundAt");
......@@ -80,7 +85,7 @@ public class PlatformMemberRefundService extends ServiceImpl<AdamMemberRefundMap
memberRefundLambdaUpdateWrapper.set(AdamMemberRefund::getRefundState, 1);
if (this.update(memberRefundLambdaUpdateWrapper)) {
this.refundSuccProcessing(memberRefund.getOrderNo(), now);
this.refundSuccProcessing(memberRefund.getOrderNo(), now, refundAmt);
return true;
} else {
......@@ -94,7 +99,7 @@ public class PlatformMemberRefundService extends ServiceImpl<AdamMemberRefundMap
/* -------------------------------------------------------------------------- */
private void refundSuccProcessing(String orderNo, LocalDateTime now) {
private void refundSuccProcessing(String orderNo, LocalDateTime now, String refundAmt) {
AdamMemberOrder memberOrder = adamMemberOrderMapper.selectOne(Wrappers.lambdaUpdate(AdamMemberOrder.class).eq(AdamMemberOrder::getOrderNo, orderNo));
LocalDateTime newExpiryAt = null;
List<String> removeUcouponIdList = null;
......@@ -185,5 +190,7 @@ public class PlatformMemberRefundService extends ServiceImpl<AdamMemberRefundMap
updateInfoMemberOrder.setUpdatedAt(now);
int updateRst = adamMemberOrderMapper.updateById(updateInfoMemberOrder);
log.info("###会员退款回调处理成功:更新DB订单信息{}[orderNo:{}]", updateRst <= 0 ? "失败" : "成功", orderNo);
feignStoneIntegralClient.de2111(memberOrder.getUid(), new BigDecimal(refundAmt).intValue(), "会员注销");
}
}
......@@ -225,7 +225,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
// 会员权益券失效时间duedAt需要同步会员到期时间expiryAt
Integer exclusively = mgtCoupon.getExclusively();
boolean isMemberRightsCoupon = exclusively == 1;
queryWrapper.select(AdamUserMember::getUid).orderByAsc(AdamUserMember::getMid);
queryWrapper.select(AdamUserMember::getUid, AdamUserMember::getExpiryAt).orderByAsc(AdamUserMember::getMid);
while (totalCount > 0) {
initUserCouponList.clear();
......
-- 猫登天空活动表
DROP TABLE IF EXISTS `sweet_wechat_maodeng`;
CREATE TABLE `sweet_wechat_maodeng` (
`mid` int UNSIGNED NOT NULL AUTO_INCREMENT,
`mao_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '微信openId',
`text_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '猫名字',
`pic_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '图片url',
`img_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '生成的图',
`created_at` datetime NULL DEFAULT NULL,
PRIMARY KEY (`mid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 38 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;
\ No newline at end of file
......@@ -42,4 +42,8 @@ XGROUP CREATE sweet:stream:rk.stoneIntegral group.stoneIntegral 0
-- 2021草莓海报活动 --
XADD sweet:stream:rk.userLikeMusician * 0 0
XGROUP CREATE sweet:stream:rk.userLikeMusician group.userLikeMusician 0
\ No newline at end of file
XGROUP CREATE sweet:stream:rk.userLikeMusician group.userLikeMusician 0
-- 猫登天空 --
XADD sweet:stream:rk.textAndImgInsert * 0 0
XGROUP CREATE sweet:stream:rk.textAndImgInsert group.sweetMaoDengInsert 0
\ No newline at end of file
......@@ -25,6 +25,12 @@ public class WechatMpConfigure {
private static String appidModernsky;
private static String secretModernsky;
private static String appidTest;
private static String secretTest;
private static String appidActivity;
private static String secretActivity;
@Value("${liquidnet.wechat.service.zhengzai.appid}")
public void setAppidZhengzai(String appidZhengzai) { WechatMpConfigure.appidZhengzai = appidZhengzai; }
@Value("${liquidnet.wechat.service.zhengzai.secret}")
......@@ -49,11 +55,33 @@ public class WechatMpConfigure {
WechatMpConfigure.secretModernsky = secretModernsky;
}
@Value("${liquidnet.wechat.service.test.appid}")
public void setAppidTest(String appidTest) {
WechatMpConfigure.appidTest = appidTest;
}
@Value("${liquidnet.wechat.service.test.secret}")
public void setSecretTest(String secretTest) {
WechatMpConfigure.secretTest = secretTest;
}
@Value("${liquidnet.wechat.service.zhengzaiActivity.appid}")
public void setAppidActivity(String appidActivity) {
WechatMpConfigure.appidActivity = appidActivity;
}
@Value("${liquidnet.wechat.service.zhengzaiActivity.secret}")
public void setSecretActivity(String secretActivity) {
WechatMpConfigure.secretActivity = secretActivity;
}
private WxMpService wxMpZhengzaiService;
private WxMpService wxMpModernskyService;
private WxMpService wxMpTestService;
private WxMpService wxMpActivityService;
private WxMpMessageRouter wxMpZhengzaiMessageRouter;
private WxMpMessageRouter wxMpModernskyMessageRouter;
private WxMpMessageRouter wxMpTestMessageRouter;
private WxMpMessageRouter wxMpActivityMessageRouter;
private WxMessageInMemoryDuplicateChecker wxMessageInMemoryDuplicateChecker;
@Autowired
......@@ -67,6 +95,8 @@ public class WechatMpConfigure {
private StrawberryPosterHandler posterHandler;
@Autowired
private TextMsgHandler textMsgHandler;
@Autowired
private MaoDengImageHandler maodengImageHandler;
@PostConstruct
public void init() {
......@@ -94,9 +124,33 @@ public class WechatMpConfigure {
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
wxMpTestService = new WxMpServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMpRedisConfigImpl wxMpDefaultConfig = new WxMpRedisConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:service:test");
wxMpDefaultConfig.setAppId(appidTest);
wxMpDefaultConfig.setSecret(secretTest);
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
wxMpActivityService = new WxMpServiceImpl() {
{
RedisTemplateWxRedisOps redisTemplateWxRedisOps = new RedisTemplateWxRedisOps(stringRedisTemplate);
WxMpRedisConfigImpl wxMpDefaultConfig = new WxMpRedisConfigImpl(redisTemplateWxRedisOps, "sweet:accessToken:service:Activity");
wxMpDefaultConfig.setAppId(appidActivity);
wxMpDefaultConfig.setSecret(secretActivity);
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
wxMpZhengzaiMessageRouter = new WxMpMessageRouter(wxMpZhengzaiService);
wxMpModernskyMessageRouter = new WxMpMessageRouter(wxMpModernskyService);
wxMpTestMessageRouter = new WxMpMessageRouter(wxMpTestService);
wxMpActivityMessageRouter = new WxMpMessageRouter(wxMpActivityService);
wxMessageInMemoryDuplicateChecker = new WxMessageInMemoryDuplicateChecker();
}
......@@ -107,6 +161,10 @@ public class WechatMpConfigure {
return wxMpZhengzaiService;
case 2:
return wxMpModernskyService;
case 3:
return wxMpTestService;
case 4:
return wxMpActivityService;
}
return null;
}
......@@ -117,6 +175,10 @@ public class WechatMpConfigure {
return wxMpZhengzaiMessageRouter;
case 2:
return wxMpModernskyMessageRouter;
case 3:
return wxMpTestMessageRouter;
case 4:
return wxMpActivityMessageRouter;
}
return null;
}
......@@ -150,6 +212,11 @@ public class WechatMpConfigure {
.handler(textMsgHandler)
.end();
// 猫登活动 图片
router.rule().async(false).msgType(WxConsts.XmlMsgType.IMAGE)
.handler(maodengImageHandler)
.end();
return router;
}
}
package com.liquidnet.service.sweet.controller;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.service.impl.SweetWechatMaoDengServiceImpl;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.WechatUsersRedisUtils;
import com.liquidnet.service.sweet.vo.SweetMaoDengVo;
import com.liquidnet.service.sweet.vo.SweetWechatUsersVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Api(tags = "活动-猫登活动")
@RestController
@RequestMapping("/wechatMaoDeng")
@Slf4j
public class SweetWechatMaoDengController {
@Autowired
private WechatUsersRedisUtils redisUtils;
@Autowired
QueueUtils queueUtils;
@Autowired
private SweetWechatMaoDengServiceImpl sweetWechatMaoDengService;
@GetMapping("/backData")
@ApiOperation("返回文字图片")
public ResponseDto<SweetMaoDengVo> backDatas(String userId, String maoId) {
SweetWechatUsersVo wechatUsers = redisUtils.getSweetWechatUsersOfUnionId(userId, 2);
if (null == wechatUsers) {
return ResponseDto.failure("获取信息失败");
}
SweetMaoDengVo sweetMaoDeng = redisUtils.getSweetMaoDeng(wechatUsers.getOpenId());
if (sweetMaoDeng != null) {
String textMsg = sweetMaoDeng.getTextMsg();
String image = sweetMaoDeng.getPicUrl();
if (StringUtil.isEmpty(textMsg) && StringUtil.isEmpty(image)) {
return ResponseDto.failure("90081", "获取信息失败");
}
return ResponseDto.success(sweetMaoDeng);
}
return ResponseDto.failure("获取信息失败");
}
@PostMapping("/backData")
@ApiOperation("存生成的图")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "userId", value = "userId"),
@ApiImplicitParam(type = "query", dataType = "String", name = "imgUrl", value = "imgUrl"),
})
public ResponseDto addBuilderImg(@RequestParam(value = "userId", required = false) String userId,
@RequestParam(value = "imgUrl", required = false) String imgUrl,
@RequestParam(value = "maoId", required = false) String maoId) {
return sweetWechatMaoDengService.addBuilderImg(userId, imgUrl, maoId);
}
}
package com.liquidnet.service.sweet.handler;
import com.fasterxml.jackson.core.type.TypeReference;
import com.liquidnet.common.third.shumei.util.ShumeiUtil;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.kylin.dto.vo.basicServices.UploadVo;
import com.liquidnet.service.sweet.config.WechatMaConfigure;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.WechatUsersRedisUtils;
import com.liquidnet.service.sweet.vo.SweetMaoDengVo;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.Map;
@Component
@Slf4j
public class MaoDengImageHandler implements WxMpMessageHandler {
@Value("${liquidnet.service.platform.url}")
private String platformUrl;
@Autowired
private WechatUsersRedisUtils redisUtils;
@Autowired
private ShumeiUtil shumeiUtil;
@Autowired
WechatMaConfigure maConfigure;
@Autowired
QueueUtils queueUtils;
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> map, WxMpService wxMpService, WxSessionManager wxSessionManager) throws WxErrorException {
String fromUser = wxMessage.getFromUser();//用户id
String picUrl = wxMessage.getPicUrl().replace("http", "https");//图片urlmao
//猫登天空活动开启
if (StringUtil.isNotEmpty(redisUtils.getSweetMaoDengOpen(fromUser))) {
//图片非法判断
if (!shumeiUtil.checkImage(fromUser, picUrl)) {
//图片非法 提示,发送文本消息
WxMpXmlOutTextMessage build = WxMpXmlOutMessage.TEXT().content("图片无法识别,吸猫上瘾的你一定还有其他的“猫片”,重新发一张吧!")
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();
return build;
}
SweetMaoDengVo sweetMaoDengVo = SweetMaoDengVo.getNew();
sweetMaoDengVo.setUserId(fromUser);
try {
if (picUrl != null && !picUrl.equals("")) {
log.debug("[OLD PIC] = " + picUrl);
MultiValueMap<String, String> params = new LinkedMultiValueMap();
params.add("pathName", IDGenerator.nextTimeId().concat(".jpeg"));
params.add("picUrl", picUrl);
String returnData = HttpUtil.post(platformUrl.concat("/platform/basicServices/alOss/uploadUrl"), params);
ResponseDto<UploadVo> dto = JsonUtils.fromJson(returnData, new TypeReference<ResponseDto<UploadVo>>() {
});
picUrl = "https://img.zhengzai.tv/".concat(dto.getData().getOssPath());
log.debug("[NEW PIC] = " + picUrl);
}
} catch (Exception e) {
e.getMessage();
}
sweetMaoDengVo.setPicUrl(picUrl);
//活动已开启 持久化 redis
SweetMaoDengVo sweetMaoDeng = redisUtils.getSweetMaoDengTransfer(fromUser);
String textMsg = null;
if (sweetMaoDeng != null) {
textMsg = sweetMaoDeng.getTextMsg();
sweetMaoDengVo.setTextMsg(textMsg);
}
String maoId = IDGenerator.nextSnowId();
redisUtils.setSweetMaoDeng(sweetMaoDengVo);
if (StringUtil.isNotEmpty(textMsg) && StringUtil.isNotEmpty(picUrl)) {
//redis队列入库
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_wechat_maodeng.insert"));
sqlsDataA.add(new Object[]{maoId, fromUser, textMsg, picUrl, "", LocalDateTime.now()});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_WECHAT_MAODENG_TEXT_INSERT.getKey(), SqlMapping.gets(sqls, sqlsDataA));
}
WxMpXmlOutTextMessage build = WxMpXmlOutMessage.TEXT().content("成了!点击上方小程序卡片查看猫咪的隐藏音乐技能。")
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();
// 发送活动小程序卡片
WxMpKefuMessage message = WxMpKefuMessage.MINIPROGRAMPAGE()
.appId(maConfigure.getWxMaAppid(4))
.pagePath("pages/webview?query=catActivity&maoId=" + maoId) //小程序路径
// .thumbMediaId("ov08q51In7bXX6tXv7Few-ud2-J-hyXnDC5NCNSfc_4") // 正在
// .thumbMediaId("ttUDFdcsOTnGFPBt5xp-vaYe_hS9Jae5C_YUboXmb4c") //test
.thumbMediaId("OFjnPjluDGoHH1KOAdxQ_iMyWpBe_c48V40LlN6VmAQ") //图片地址
.title("在猫登天空,每一只猫咪都有自己的隐藏音乐技能!")
.toUser(wxMessage.getFromUser())
.build();
wxMpService.getKefuService().sendKefuMessage(message);
return build;
}
return null;
}
}
package com.liquidnet.service.sweet.handler;
import com.liquidnet.common.third.shumei.util.ShumeiUtil;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.third.shumei.util.ShumeiUtil;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.sweet.config.WechatMaConfigure;
import com.liquidnet.service.sweet.constant.SweetConstant;
import com.liquidnet.service.sweet.utils.WechatUsersRedisUtils;
import com.liquidnet.service.sweet.vo.SweetMaoDengVo;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
......@@ -39,6 +44,9 @@ public class TextMsgHandler implements WxMpMessageHandler {
@Autowired
private ShumeiUtil shumeiUtil;
@Autowired
private RedisUtil redisUtil;
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) throws WxErrorException {
......@@ -47,11 +55,10 @@ public class TextMsgHandler implements WxMpMessageHandler {
// 2021草莓音乐节海报活动
if (StringUtil.trim(content).equals("白日梦")) {
redisUtils.delSweetMaoDengOpen(openId);
redisUtils.setStrawberryPosterClick(wxMessage.getFromUser(), 10 * 60);
return WxMpXmlOutMessage.TEXT().content("你梦中的草莓音乐节会有怎样的阵容?\n" +
"不如做一次白日梦,挑选你心水的草莓阵容!\n" +
"参与活动之前,请先告诉我你的昵称!(直接在对话框输入即可\uD83D\uDC47,9个字以内)")
return WxMpXmlOutMessage.TEXT().content("参与活动之前,请先告诉我你的昵称!(直接在对话框输入即可\uD83D\uDC47,9个字以内)")
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();
} else if (redisUtils.getStrawberryPosterClick(openId)) {
......@@ -77,9 +84,10 @@ public class TextMsgHandler implements WxMpMessageHandler {
// 发送活动小程序卡片
WxMpKefuMessage message1 = WxMpKefuMessage.MINIPROGRAMPAGE()
.appId(maConfigure.getWxMaAppid(4))
.pagePath("/pages/webview?query=strawberryMusic&nickname=".concat(content))
.thumbMediaId("ov08q51In7bXX6tXv7Few8cBjTW0osSV_t9FCLg8Q1Q") // 正在
// .thumbMediaId("OFjnPjluDGoHH1KOAdxQ_vfMiIKRu2Eo9QFhI5TOtHE") // 摩登
.pagePath("/pages/webview?query=strawberryMusic&voteWhere=2&nickname=".concat(content))
// .thumbMediaId("ov08q51In7bXX6tXv7Few8cBjTW0osSV_t9FCLg8Q1Q") // 正在
// .thumbMediaId("ttUDFdcsOTnGFPBt5xp-vaYe_hS9Jae5C_YUboXmb4c") // test
.thumbMediaId("OFjnPjluDGoHH1KOAdxQ_vfMiIKRu2Eo9QFhI5TOtHE") // 摩登
.title("做一场白日梦,挑选你心水的草莓阵容!")
.toUser(openId)
.build();
......@@ -87,6 +95,55 @@ public class TextMsgHandler implements WxMpMessageHandler {
}
if (content.equals("猫登天空")) {
redisUtils.delStrawberryPosterClick(openId);
redisUtils.setSweetMaoDengOpen(openId, 10 * 60);
WxMpXmlOutTextMessage build = WxMpXmlOutMessage.TEXT().content("没想到吧,你的喵星人主子在玩耍逗喵棒之外,也有一个隐秘的音乐人分身呢!\n" +
"看看TA到底是怎样一只音乐喵!\n" +
"参与活动之前,请先告诉我们猫咪的名字!(直接在对话框输入即可👇,9个汉字或18个英文字符以内)\n")
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();
return build;
} else if (StringUtil.isNotEmpty(redisUtils.getSweetMaoDengOpen(openId))) { //是否参加了活动
//敏感词判断
if (!shumeiUtil.checkText(openId, content)) {
//文字敏感 提示,发送文本消息
WxMpXmlOutTextMessage build = WxMpXmlOutMessage.TEXT().content("无法识别,TA是不是还有别的名字呢!(请勿使用表情等特殊字符)")
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();
return build;
}
if (content.length() > 8) {
return WxMpXmlOutMessage.TEXT().content("昵称要9个字以内~")
.fromUser(wxMessage.getToUser()).toUser(openId)
.build();
}
if (!shumeiUtil.checkText(openId, content)) {
return WxMpXmlOutMessage.TEXT().content("无法识别,换个昵称吧!(请勿使用表情等特殊字符)")
.fromUser(wxMessage.getToUser()).toUser(openId)
.build();
}
SweetMaoDengVo sweetMaoDengVo = SweetMaoDengVo.getNew();
sweetMaoDengVo.setUserId(openId);
sweetMaoDengVo.setTextMsg(content);
SweetMaoDengVo sweetMaoDeng = redisUtils.getSweetMaoDengTransfer(openId);
if (sweetMaoDeng != null) {
String picUrl = sweetMaoDeng.getPicUrl();
sweetMaoDengVo.setPicUrl(picUrl);
}
//获取过期时间
long expire = redisUtil.getExpire(SweetConstant.REDIS_KEY_SWEET_WECHAT_MAODENG_OPEN_POSTER + openId);
redisUtils.setSweetMaoDengTransfer(sweetMaoDengVo, expire);
WxMpXmlOutTextMessage build = WxMpXmlOutMessage.TEXT().content("再发给我们一张猫咪的可爱照片吧!")
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();
return build;
}
return null;
}
}
}
\ No newline at end of file
package com.liquidnet.service.sweet.service.impl;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.config.WechatMaConfigure;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.WechatUsersRedisUtils;
import com.liquidnet.service.sweet.vo.SweetMaoDengVo;
import com.liquidnet.service.sweet.vo.SweetWechatUsersVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.LinkedList;
@Service
@Slf4j
public class SweetWechatMaoDengServiceImpl {
@Autowired
private WechatUsersRedisUtils redisUtils;
@Autowired
QueueUtils queueUtils;
@Autowired
WechatMaConfigure maConfigure;
public ResponseDto addBuilderImg(String userId, String imgUrl, String maoId) {
LocalDateTime localDateTime = LocalDateTime.now(); //生成创建时间
try {
SweetWechatUsersVo wechatUsers = redisUtils.getSweetWechatUsersOfUnionId(userId, 2);
if (null == wechatUsers) {
return ResponseDto.failure("请求失败");
}
SweetMaoDengVo sweetMaoDeng = redisUtils.getSweetMaoDeng(wechatUsers.getOpenId());
if (sweetMaoDeng != null) {
sweetMaoDeng.setImgUrl(imgUrl);
}
String textMsg = sweetMaoDeng.getTextMsg();
String picUrl = sweetMaoDeng.getPicUrl();
sweetMaoDeng.setCreatedAt(localDateTime);
redisUtils.setSweetMaoDeng(sweetMaoDeng);
if (StringUtil.isNotEmpty(textMsg) && StringUtil.isNotEmpty(picUrl)) {
//redis队列入库
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_wechat_maodeng.img.update"));
sqlsDataA.add(new Object[]{imgUrl, userId, maoId});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_WECHAT_MAODENG_TEXT_INSERT.getKey(), SqlMapping.gets(sqls, sqlsDataA));
return ResponseDto.success("请求成功");
}
return ResponseDto.failure("请求失败");
} catch (Exception e) {
e.printStackTrace();
log.error("[ERROR] = {}", e);
return ResponseDto.failure("请求失败");
}
}
}
......@@ -3,6 +3,7 @@ package com.liquidnet.service.sweet.utils;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.sweet.constant.SweetConstant;
import com.liquidnet.service.sweet.vo.SweetAppletUsersVo;
import com.liquidnet.service.sweet.vo.SweetMaoDengVo;
import com.liquidnet.service.sweet.vo.SweetWechatUsersVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -26,6 +27,7 @@ public class WechatUsersRedisUtils {
return sweetWechatUsersVo;
}
}
public SweetWechatUsersVo getSweetWechatUsersOfOpenId(String openId, Integer type) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USERS_OPENID.concat(openId)
.concat(SweetConstant.REDIS_KEY_SWEET_WECHAT_USERS_TYPE).concat(String.valueOf(type));
......@@ -37,6 +39,7 @@ public class WechatUsersRedisUtils {
return sweetWechatUsersVo;
}
}
public void setSweetWechatUsers(SweetWechatUsersVo sweetWechatUsersVo) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USERS_UNIONID.concat(sweetWechatUsersVo.getUnionId())
.concat(SweetConstant.REDIS_KEY_SWEET_WECHAT_USERS_TYPE).concat(String.valueOf(sweetWechatUsersVo.getType()));
......@@ -46,6 +49,7 @@ public class WechatUsersRedisUtils {
.concat(SweetConstant.REDIS_KEY_SWEET_WECHAT_USERS_TYPE).concat(String.valueOf(sweetWechatUsersVo.getType()));
redisUtil.set(redisKeyOpenId, sweetWechatUsersVo);
}
public void delSweetWechatUsers(String unionId, String openId, Integer type) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USERS_UNIONID.concat(unionId)
.concat(SweetConstant.REDIS_KEY_SWEET_WECHAT_USERS_TYPE).concat(String.valueOf(type));
......@@ -66,6 +70,7 @@ public class WechatUsersRedisUtils {
return sweetAppletUsersVo;
}
}
public SweetAppletUsersVo getSweetAppletUsersOfUnionId(String unionId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_APPLET_USERS_UNIONID.concat(unionId);
Object obj = redisUtil.get(redisKey);
......@@ -76,6 +81,7 @@ public class WechatUsersRedisUtils {
return sweetAppletUsersVo;
}
}
public void setSweetAppletUsers(SweetAppletUsersVo sweetAppletUsersVo) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_APPLET_USERS_PHONE.concat(sweetAppletUsersVo.getPurePhoneNumber());
redisUtil.set(redisKey, sweetAppletUsersVo);
......@@ -88,13 +94,86 @@ public class WechatUsersRedisUtils {
String redisKey = SweetConstant.REDIS_KEY_SWEET_STRAWBERRY_POSTER_CLICK.concat(openId);
redisUtil.set(redisKey, 1, time);
}
public void delStrawberryPosterClick(String openId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_STRAWBERRY_POSTER_CLICK.concat(openId);
redisUtil.del(redisKey);
}
public boolean getStrawberryPosterClick(String openId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_STRAWBERRY_POSTER_CLICK.concat(openId);
Object obj = redisUtil.get(redisKey);
if(null == obj) {
if (null == obj) {
return false;
} else {
return true;
}
}
/* public SweetMaoDengVo getSweetMaoDengText(String userId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER.concat(userId);
Object obj = redisUtil.get(redisKey);
if (null == obj) {
return null;
} else {
SweetMaoDengVo sweetMaoDengVo = (SweetMaoDengVo) obj;
return sweetMaoDengVo;
}
}*/
public String getSweetMaoDengOpen(String fromUser) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_MAODENG_OPEN_POSTER.concat(fromUser);
String obj = (String) redisUtil.get(redisKey);
if (null == obj) {
return null;
} else {
return obj;
}
}
//整体取
public SweetMaoDengVo getSweetMaoDeng(String userId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER.concat(":" + userId);
SweetMaoDengVo obj = (SweetMaoDengVo) redisUtil.get(redisKey);
if (null == obj) {
return null;
} else {
return obj;
}
}
//整体存
public void setSweetMaoDeng(SweetMaoDengVo sweetMaoDengVo) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER.concat(":" + sweetMaoDengVo.getUserId());
redisUtil.set(redisKey, sweetMaoDengVo);
}
//开启猫登天空活动
public void setSweetMaoDengOpen(String fromUser, long time) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_MAODENG_OPEN_POSTER.concat(fromUser);
redisUtil.set(redisKey, "1", time);
}
public void delSweetMaoDengOpen(String fromUser) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_MAODENG_OPEN_POSTER.concat(fromUser);
redisUtil.del(redisKey);
}
//临时数据中转
public void setSweetMaoDengTransfer(SweetMaoDengVo sweetMaoDengVo, long expire) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER_TRANSFER.concat(":" + sweetMaoDengVo.getUserId());
redisUtil.set(redisKey, sweetMaoDengVo, expire);
}
//临时数据中转
public SweetMaoDengVo getSweetMaoDengTransfer(String fromUser) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_MAODENG_POSTER_TRANSFER.concat(":" + fromUser);
SweetMaoDengVo obj = (SweetMaoDengVo) redisUtil.get(redisKey);
if (null == obj) {
return null;
} else {
return obj;
}
}
}
......@@ -51,4 +51,17 @@ sweet_wechat_users.delete=DELETE FROM sweet_wechat_users WHERE union_id = ? and
#---------------------------音乐节活动海报--------------------------------
sweet_strawberry_poster_user=INSERT INTO sweet_strawberry_poster(open_id,poster_id,union_id,nickname,city_name,city_code,custom_text,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?)
sweet_strawberry_poster_Musician=INSERT INTO sweet_strawberry_poster_lineup(lineup_id,poster_id,lineup_num,musician_name,created_at,updated_at) VALUES (?,?,?,?,?,?)
\ No newline at end of file
sweet_strawberry_poster_Musician=INSERT INTO sweet_strawberry_poster_lineup(lineup_id,poster_id,lineup_num,musician_name,created_at,updated_at) VALUES (?,?,?,?,?,?)
#---------------------------猫登天空--------------------------------
sweet_wechat_maodeng.insert=INSERT INTO sweet_wechat_maodeng(mao_id,user_id,text_msg,pic_url,img_url,created_at) VALUES (?,?,?,?,?,?)
sweet_wechat_maodeng.text.update=UPDATE sweet_wechat_maodeng SET text_msg=? WHERE user_id=? AND mao_id=?
sweet_wechat_maodeng.img.update=UPDATE sweet_wechat_maodeng SET img_url=? WHERE user_id=? AND mao_id=?
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