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

Commit b754c644 authored by 胡佳晨's avatar 胡佳晨

Merge branch 'master' into dev_10-1

parents 22bb0389 853cfdb3
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 = "SweetAntigenicQuestionParam", description = "防疫答题记录入参")
@Data
public class SweetAntigenicQuestionParam implements Serializable {
private static final long serialVersionUID = 9038992103808199663L;
@ApiModelProperty(position = 10, required = true, value = "type 1MDSK防疫答题 2草莓防疫答题", example = "1")
@NotNull(message = "type不能为空") @Min(value = 1, message = "type无效") @Max(value = 2, message = "type无效")
private Integer type;
@ApiModelProperty(position = 10, required = true, value = "openId", example = "openId")
@NotBlank(message = "openId不能为空")
private String openId;
@ApiModelProperty(position = 10, required = true, value = "unionId", example = "unionId")
@NotBlank(message = "unionId不能为空")
private String unionId;
@ApiModelProperty(position = 10, required = true, value = "姓名", example = "姓名")
@NotBlank(message = "姓名不能为空")
private String nickname;
@ApiModelProperty(position = 10, required = true, value = "居住地址", example = "居住地址")
@NotBlank(message = "居住地址不能为空")
private String address;
@ApiModelProperty(position = 10, required = true, value = "联系电话", example = "15811009011")
@NotBlank(message = "联系电话不能为空")
private String phone;
@ApiModelProperty(position = 10, required = true, value = "紧急联系人电话", example = "15811009011")
// @NotBlank(message = "紧急联系人电话不能为空")
private String urgentPhone;
@ApiModelProperty(position = 10, required = true, value = "keyword1", example = "1")
@NotBlank(message = "keyword1不能为空")
private String keyword1;
@ApiModelProperty(position = 10, required = false, value = "keyword11", example = "补充信息")
private String keyword11;
@ApiModelProperty(position = 10, required = true, value = "keyword2", example = "1")
@NotBlank(message = "keyword2不能为空")
private String keyword2;
@ApiModelProperty(position = 10, required = true, value = "keyword3", example = "1")
@NotBlank(message = "keyword3不能为空")
private String keyword3;
@ApiModelProperty(position = 10, required = true, value = "keyword4", example = "1")
@NotBlank(message = "keyword4不能为空")
private String keyword4;
@ApiModelProperty(position = 10, required = true, value = "keyword5", example = "1")
@NotBlank(message = "keyword5不能为空")
private String keyword5;
@ApiModelProperty(position = 10, required = true, value = "keyword6", example = "1")
@NotBlank(message = "keyword6不能为空")
private String keyword6;
@ApiModelProperty(position = 10, required = true, value = "keyword7", example = "1")
@NotBlank(message = "keyword7不能为空")
private String keyword7;
}
package com.liquidnet.service.sweet.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import java.io.Serializable;
/**
* <p>
* WxOAuth2AccessToken vo
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
@Data
@ApiModel
public class WechatTokenInfoVo implements Serializable, Cloneable {
private static final long serialVersionUID = 3404938811111878417L;
@ApiModelProperty(value = "openId")
private String openId;
@ApiModelProperty(value = "unionId")
private String unionId;
private static final WechatTokenInfoVo obj = new WechatTokenInfoVo();
public static WechatTokenInfoVo getNew() {
try {
return (WechatTokenInfoVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new WechatTokenInfoVo();
}
}
public WechatTokenInfoVo copy(WxOAuth2AccessToken source) {
if (null == source) return this;
this.setOpenId(source.getOpenId());
this.setUnionId(source.getUnionId());
return this;
}
}
package com.liquidnet.service.sweet.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
import java.io.Serializable;
/**
* <p>
* WxOAuth2UserInfo vo
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
@Data
@ApiModel
public class WechatUserInfoVo implements Serializable, Cloneable {
private static final long serialVersionUID = 5067978046376025813L;
@ApiModelProperty(value = "普通用户的标识,对当前开发者帐号唯一")
private String openid;
@ApiModelProperty(value = "普通用户昵称")
private String nickname;
@ApiModelProperty(value = "普通用户性别,1为男性,2为女性")
private Integer sex;
@ApiModelProperty(value = "普通用户个人资料填写的城市")
private String city;
@ApiModelProperty(value = "普通用户个人资料填写的省份")
private String province;
@ApiModelProperty(value = "国家,如中国为CN")
private String country;
@ApiModelProperty(value = "用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像) 用户没有头像时该项为空")
private String headImgUrl;
@ApiModelProperty(value = "用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的")
private String unionId;
@ApiModelProperty(value = "用户特权信息,json数组,如微信沃卡用户为(chinaunicom)")
private String[] privileges;
private static final WechatUserInfoVo obj = new WechatUserInfoVo();
public static WechatUserInfoVo getNew() {
try {
return (WechatUserInfoVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new WechatUserInfoVo();
}
}
public WechatUserInfoVo copy(WxOAuth2UserInfo source) {
if (null == source) return this;
this.setOpenid(source.getOpenid());
this.setNickname(source.getNickname());
this.setSex(source.getSex());
this.setCity(source.getCity());
this.setProvince(source.getProvince());
this.setCountry(source.getCountry());
this.setHeadImgUrl(source.getHeadImgUrl());
this.setUnionId(source.getUnionId());
this.setPrivileges(source.getPrivileges());
return this;
}
}
......@@ -158,7 +158,7 @@ public class CandyCouponCodeAdminController extends BaseController {
List<CandyUserCouponBasicDto> vos = (List<CandyUserCouponBasicDto>) redisUtil.get(uckey);
if (!CollectionUtils.isEmpty(vos)) {
CandyUserCouponBasicDto userCouponBasicDto = vos.parallelStream().filter(v -> v.getCouponId().equals(couponId)).findAny().orElse(null);
CandyUserCouponBasicDto userCouponBasicDto = vos.stream().filter(v -> v.getCouponId().equals(couponId)).findAny().orElse(null);
if (null != userCouponBasicDto && userCouponBasicDto.getState() == 1) {
String cckey = CandyRedisConst.BASIC_COUPON_CODE.concat(r.getCcode());
......
......@@ -60,9 +60,9 @@
</a>
</div>
</div>
<div class="ibox-content">
<div class="ibox-content" style="height:480px">
<div class="echarts" id="provinceDataChart"></div>
<div class="echarts" id="provinceDataChart" style = "height:400px"></div>
</div>
</div>
</div>
......@@ -90,9 +90,9 @@
</a>
</div>
</div>
<div class="ibox-content">
<div class="ibox-content" style="height:480px">
<div class="echarts" id="cityDataChart"></div>
<div class="echarts" id="cityDataChart" style="height:400px"></div>
</div>
</div>
</div>
......@@ -120,9 +120,9 @@
</a>
</div>
</div>
<div class="ibox-content">
<div class="ibox-content" style="height:480px">
<div class="echarts" id="ageDataChart"></div>
<div class="echarts" id="ageDataChart" style="height:400px"></div>
</div>
</div>
</div>
......@@ -281,14 +281,21 @@
grid:{
x:30,
x2:40,
y2:24
y2:100
},
calculable : true,
xAxis : [
{
type : 'category',
// data : ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
data : name
data : name,
axisLabel:{
formatter:function(value){
return value.split("").join("\n");
}
// interval: 0,
// rotate: 30
}
}
],
yAxis : [
......@@ -390,14 +397,21 @@
grid:{
x:30,
x2:40,
y2:24
y2:100
},
calculable : true,
xAxis : [
{
type : 'category',
// data : ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
data : name
data : name,
axisLabel:{
formatter:function(value){
return value.split("").join("\n");
}
// interval: 0,
// rotate: 30
}
}
],
yAxis : [
......
......@@ -171,6 +171,7 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
updateInfoMemberOrder.setMid(memberOrder.getMid());
updateInfoMemberOrder.setState(4);
updateInfoMemberOrder.setUpdatedAt(now);
updateInfoMemberOrder.setComment("R");
adamMemberOrderMapper.updateById(updateInfoMemberOrder);
String moKey = AdamRedisConst.INFO_MEMBER_ORDER + memberOrder.getUid();
......@@ -184,9 +185,10 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
vos.set(idx, vo);
redisUtil.set(moKey, vos);
if (memberRefund.getRenewable() == 2) {
if (memberRefund.getRenewable() == 2) {// 拉黑用户,直接更新用户会员状态信息
AdamUserMember updateUserMember = new AdamUserMember();
updateUserMember.setState(2);
updateUserMember.setExpiryAt(now);
updateUserMember.setUpdatedAt(now);
updateUserMember.setComment("R");
......@@ -198,6 +200,7 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
AdamUserMemberVo userMemberVo = (AdamUserMemberVo) redisUtil.get(umkey);
userMemberVo.setState(2);
userMemberVo.setExpiryAt(now);
userMemberVo.setUpdatedAt(now);
redisUtil.set(umkey, userMemberVo);
......
......@@ -84,6 +84,7 @@ public class MQConst {
SWEET_APPLET_USER_INSERT_DRAW("sweet:stream:rk.sweetAppletUserInsert", "group.sweetAppletUserInsert", "小程序登录记录用户解密后信息"),
SWEET_TEMPLATE_MSG("sweet:stream:rk.sweetTemplateMsg", "group.sweetTemplateMsg", "发送模版消息"),
SWEET_CITY_VOTE_DRAW("sweet:stream:rk.cityVote", "group.cityVote", "用户投票记录"),
SWEET_ANTIGENIC_QUESTION_DRAW("sweet:stream:rk.antigenicQuestion", "group.antigenicQuestion", "防疫答题"),
;
private final String key;
......
......@@ -18,6 +18,8 @@ import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.HttpClientErrorException;
import java.nio.charset.StandardCharsets;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
......@@ -36,6 +38,9 @@ public class EasemobUtil{
@Autowired
private RedisUtil redisUtil;
private static MultiValueMap<String, String> commonHeader = new LinkedMultiValueMap();
private static MultiValueMap<String, String> commonParams = new LinkedMultiValueMap();
private String getAccessToken(){
//构造请求参数
......@@ -76,7 +81,8 @@ public class EasemobUtil{
}
public String createUser(String userName, String password, String nickName){
MultiValueMap<String, String> commonHeader = new LinkedMultiValueMap();
// MultiValueMap<String, String> commonHeader = new LinkedMultiValueMap();
commonHeader.clear();
commonHeader.add("Authorization", "Bearer "+this.getAccessToken());
JSONObject json = new JSONObject();
......@@ -114,4 +120,22 @@ public class EasemobUtil{
//result
// {application=c785eced-c603-41c3-afe8-13ee3378540c, access_token=YWMt_rE7Rg8DEeyy6gf--JvBcwAAAAAAAAAAAAAAAAAAAAHHheztxgNBw6_oE-4zeFQMAgMAAAF7utOj1gBPGgANws4VZcHltyc-SPep4q09E0mqitzKe5IA6Npu-MqLBg, expires_in=5184000}
}
public void settingNoticeNickname(String nickname, String username) {
try {
commonHeader.clear();
commonHeader.add("Authorization", "Bearer " + this.getAccessToken());
commonParams.clear();
commonParams.add("nickname", nickname);
String url = easemobConfig.getPreUrl().concat(EasemobConstant.CREATE_USER_URL).concat("/").concat(username);
String response = HttpUtil.put(url, commonParams, commonHeader);
log.info("IM setting notice.nickname:[url={},nickname={},response={}]", url, nickname, response);
} catch (HttpClientErrorException e) {
String responseBodyAsString = e.getResponseBodyAsString(StandardCharsets.UTF_8);
log.error("IM setting notice.nickname error:[request.status=400,msg={}]", responseBodyAsString);
} catch (Exception e) {
log.error("IM setting notice.nickname exception", e);
}
}
}
......@@ -112,9 +112,12 @@ liquidnet:
secret: a1307fab0a5f2380086a7c636f7339ea
token: tftipg1427706847
aeskey: LwVpmpuOcl7Mi3mtfQgBol11MsmMCATIqbPgHrEpDzx
modernsky:
zhengzaiActivity:
appid: wx769aa9167bef9ce2
secret: bebccc204b9472ba41661372b197eb81
modernsky:
appid: wx6bf7999941a06d15
secret: a12012b31307a539719dbe4d137ca45a
applet:
zhengzai:
appid: wx4732efeaa2b08086
......@@ -155,7 +158,7 @@ liquidnet:
jProvince: 北京
jCity: 北京市
jAddress: 朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
expressType: 1 # 默认顺丰特快
expressType: 2 # 默认顺丰特快
depositumInfo: 演出纸质票
......
......@@ -114,9 +114,12 @@ liquidnet:
secret: a1307fab0a5f2380086a7c636f7339ea
token: tftipg1427706847
aeskey: LwVpmpuOcl7Mi3mtfQgBol11MsmMCATIqbPgHrEpDzx
modernsky:
zhengzaiActivity:
appid: wx769aa9167bef9ce2
secret: bebccc204b9472ba41661372b197eb81
modernsky:
appid: wx6bf7999941a06d15
secret: a12012b31307a539719dbe4d137ca45a
applet:
zhengzai:
appid: wx4732efeaa2b08086
......@@ -157,7 +160,7 @@ liquidnet:
jProvince: 北京
jCity: 北京市
jAddress: 朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
expressType: 1 # 默认顺丰特快
expressType: 2 # 默认顺丰特快
depositumInfo: 演出纸质票
......
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-29
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetAntigenicQuestion implements Serializable {
private static final long serialVersionUID = 1268639425174449151L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* question_id
*/
private String questionId;
/**
* 活动类型 1MDSK防疫答题 2草莓防疫答题
*/
private Integer type;
/**
* openId
*/
@TableField("openId")
private String openId;
/**
* unionId
*/
@TableField("unionId")
private String unionId;
/**
* 姓名
*/
private String nickname;
/**
* 居住地址
*/
private String address;
/**
* 联系电话
*/
private String phone;
/**
* 紧急联系人电话
*/
private String urgentPhone;
/**
* 答案
*/
private String keyword1;
/**
* 答案补充
*/
private String keyword11;
/**
* 答案
*/
private String keyword2;
/**
* 答案
*/
private String keyword3;
/**
* 答案
*/
private String keyword4;
/**
* 答案
*/
private String keyword5;
/**
* 答案
*/
private String keyword6;
/**
* 答案
*/
private String keyword7;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}
package com.liquidnet.service.sweet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.sweet.entity.SweetAntigenicQuestion;
/**
* <p>
* 防疫答题表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
public interface SweetAntigenicQuestionMapper extends BaseMapper<SweetAntigenicQuestion> {
}
......@@ -103,7 +103,7 @@ public class AdamRscController {
}
try {
List<String> uidList = req.getUidList();
uidList.parallelStream().forEach(r -> {
uidList.forEach(r -> {
AdamUserInfoVo userInfoVo = adamRdmService.getUserInfoVoByUid(r);
if (null != userInfoVo) {
list.add(AdamChimeUinfoDto.getNew().copy(userInfoVo));
......
......@@ -612,7 +612,7 @@ public class AdamMemberOrderServiceImpl implements IAdamMemberOrderService {
if (!CollectionUtils.isEmpty(memberRightsCouponVoList)) {
// 该权益下关联券统计
Map<String, Long> rightsCouponCtMap = memberRightsCouponVoList.parallelStream()
Map<String, Long> rightsCouponCtMap = memberRightsCouponVoList.stream()
.collect(Collectors.groupingBy(AdamMemberRightsCouponVo::getCouponId, Collectors.counting()));
rightsCouponCtMap.forEach((couponId, num) -> {
......
......@@ -18,6 +18,7 @@ import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.feign.adam.rsc.FeignAdamChimeClient;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
......@@ -92,8 +93,6 @@ public class AdamUserInfoServiceImpl implements IAdamUserInfoService {
syncChimeRegisterFlg = true;
}
} else if (isComplete == 11) {// 同步IM信息
// TODO: 2021/9/17 暂未接入
}
syncChimeFlg = true;
......@@ -101,6 +100,12 @@ public class AdamUserInfoServiceImpl implements IAdamUserInfoService {
tagMe = existUserInfoVo.getTagMe();
}
String beforeNickname = existUserInfoVo.getNickname();
if (StringUtils.isEmpty(beforeNickname) || !beforeNickname.equals(parameter.getNickname())) {
// IM设置推送昵称
easemobUtil.settingNoticeNickname(parameter.getNickname(), existUserInfoVo.getUid());
}
existUserInfoVo.setAvatar(parameter.getAvatar());
existUserInfoVo.setBackground(parameter.getBackground());
existUserInfoVo.setNickname(parameter.getNickname());
......
......@@ -95,7 +95,7 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
}
List<CandyUserCouponBasicDto> dtoList = redisDataUtils.getCouponByUid(uid, userCreateTime);
if (!CollectionUtil.isEmpty(dtoList)) {
Map<String, Long> mCouponCountMap = dtoList.parallelStream()
Map<String, Long> mCouponCountMap = dtoList.stream()
.filter(r -> (r.getExclusive() == 1 && r.getState() == 1))
.collect(Collectors.groupingBy(CandyUserCouponBasicDto::getMcouponId, Collectors.counting()));
......
......@@ -82,7 +82,7 @@ public class ChimeUserBiz {
}
List<ChimeUserTagsMappingVo> userTagList = new ArrayList<>();
//设置用户id
userTagVoList.parallelStream().forEach(vo -> {
userTagVoList.forEach(vo -> {
ChimeUserTagsMappingVo userTagsMappingVo = ChimeUserTagsMappingVo.getNew();
userTagsMappingVo.setTagCode(vo.getVal());
userTagsMappingVo.setTagDesc(vo.getDesc());
......@@ -111,7 +111,7 @@ public class ChimeUserBiz {
// }
// }
// //设置用户id
// userTagVoList.parallelStream().forEach(vo -> {
// userTagVoList.forEach(vo -> {
// ChimeUserTagDto userTagDto = ChimeUserTagDto.getNew();
// userTagDto.setTagCode(vo.getVal());
// userTagDto.setTagDesc(vo.getDesc());
......@@ -198,6 +198,7 @@ public class ChimeUserBiz {
KylinPerformanceVo kylinPerformanceVo = responseDto.getData();
if(kylinPerformanceVo.getAppStatus() == KylinPerformanceStatusEnum.PERFORMANCESTATUS6.getIndex()
||kylinPerformanceVo.getAppStatus() == KylinPerformanceStatusEnum.PERFORMANCESTATUS8.getIndex()
||kylinPerformanceVo.getAppStatus() == KylinPerformanceStatusEnum.PERFORMANCESTATUS11.getIndex()
||kylinPerformanceVo.getAppStatus() == KylinPerformanceStatusEnum.PERFORMANCESTATUS9.getIndex()){
isOnline = true;
}
......
......@@ -242,7 +242,7 @@ public class TestDataUtils {
// reqDto.setTags("tags40,tags80");
NewPageResult<ChimeUserInfoDto> pageInfo = chimePerformanceService.getUserListByCon(reqDto);
log.info("总共获取总数pagecount:{}",pageInfo.getList().size());
pageInfo.getList().parallelStream().forEach(dto -> {
pageInfo.getList().forEach(dto -> {
// System.out.println(dto.getUserId());
// System.out.println(JsonUtils.toJson(dto.getUserTags()));
});
......
package com.liquidnet.service.consumer.sweet.config;
import com.liquidnet.service.consumer.sweet.receiver.ConsumerAntigenicQuestionRdsReceiver;
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_ANTIGENIC_QUESTION_DRAW;
@Configuration
public class ConsumerAntigenicQuestionRedisStreamConfig {
@Autowired
ConsumerAntigenicQuestionRdsReceiver consumerAntigenicQuestionRdsReceiver;
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 receiveSqlAntigenicQuestion(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(SWEET_ANTIGENIC_QUESTION_DRAW.getGroup(), SWEET_ANTIGENIC_QUESTION_DRAW.name() + t),
StreamOffset.create(SWEET_ANTIGENIC_QUESTION_DRAW.getKey(), ReadOffset.lastConsumed()), consumerAntigenicQuestionRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionSqlAntigenicQuestion(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlAntigenicQuestion(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlAntigenicQuestion2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlAntigenicQuestion(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlAntigenicQuestion3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlAntigenicQuestion(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 ConsumerAntigenicQuestionRdsReceiver extends AbstractSqlRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.SweetQueue.SWEET_ANTIGENIC_QUESTION_DRAW.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.SweetQueue.SWEET_ANTIGENIC_QUESTION_DRAW.getGroup();
}
}
......@@ -928,21 +928,6 @@ CREATE TABLE `kylin_order_express_status`
PRIMARY KEY (`mid`)
) ENGINE = InnoDB COMMENT '订单快递状态表';
drop TABLE if exists `kylin_order_express_performances`;
CREATE TABLE `kylin_order_express_performances`
(
`mid` int unsigned NOT NULL AUTO_INCREMENT,
`order_express_performances_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'order_express_performances_id',
`performances_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'performances_id',
`total1` int NOT NULL DEFAULT 0 COMMENT '已下单',
`total2` int NOT NULL DEFAULT 0 COMMENT '已揽收',
`total3` int NOT NULL DEFAULT 0 COMMENT '已签收',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
KEY `order_express_performances_id_index` (`order_express_performances_id`),
PRIMARY KEY (`mid`)
) ENGINE = InnoDB COMMENT '订单快递演出记录表';
drop TABLE if exists `kylin_order_refund_pic`;
CREATE TABLE `kylin_order_refund_pic`
(
......
......@@ -11,4 +11,4 @@ liquidnet:
spring:
profiles:
include: service-order
include: service-order
\ No newline at end of file
......@@ -6,6 +6,6 @@ spring:
server:
tomcat:
max-threads: 2000
min-spare-threads: 200
min-spare-threads: 2000
max-connections: 20000
connection-timeout: 5000
package com.liquidnet.service.platform.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.platform.controller.basicServices;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.platform.config.WechatMpConfigure;
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 me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.common.enums.TicketType;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* 阿里云上传
* </p>
*
* @author jiangxiulong
* @since 2021-07-09
*/
@Slf4j
@Api(tags = "basicServices")
@RestController
@RequestMapping("basicServices/wechatShareSign")
public class WechatShareController {
@Autowired
WechatMpConfigure wechatMpConfigure;
@GetMapping("/zhengzai")
@ApiOperation("正在微信分享sign")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "url", value = "url地址 注意 URL 一定要动态获取,不能 hardcode", required = true),
})
public ResponseDto<WxJsapiSignature> zhengzai(@RequestParam String url) {
try {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(1);
wxMpService.getWxMpConfigStorage().getAccessToken();
log.info("zhengzaiShare-isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired());
log.info("zhengzaiShare-getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken());
log.info("zhengzaiShare-isTicketExpired:[{}] ", wxMpService.getWxMpConfigStorage().isTicketExpired(TicketType.JSAPI));
log.info("zhengzaiShare-Ticket:[{}] ", wxMpService.getWxMpConfigStorage().getTicket(TicketType.JSAPI));
WxJsapiSignature jsapiSignature = wxMpService.createJsapiSignature(url);
return ResponseDto.success(jsapiSignature);
} catch (Exception e) {
log.error("分享signZhengzaiException", e);
return ResponseDto.success();
}
}
@GetMapping("/modernsky")
@ApiOperation("摩登微信分享sign")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "url", value = "url地址 注意 URL 一定要动态获取,不能 hardcode", required = true),
})
public ResponseDto<WxJsapiSignature> modernsky(@RequestParam String url) {
try {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(2);
wxMpService.getWxMpConfigStorage().getAccessToken();
log.info("modernskyShare-isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired());
log.info("modernskyShare-getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken());
log.info("modernskyShare-isTicketExpired:[{}] ", wxMpService.getWxMpConfigStorage().isTicketExpired(TicketType.JSAPI));
log.info("modernskyShare-Ticket:[{}] ", wxMpService.getWxMpConfigStorage().getTicket(TicketType.JSAPI));
WxJsapiSignature jsapiSignature = wxMpService.createJsapiSignature(url);
return ResponseDto.success(jsapiSignature);
} catch (Exception e) {
log.error("分享signModernskyException", e);
return ResponseDto.success();
}
}
}
......@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.stream.IntStream;
......@@ -96,31 +97,40 @@ public class PlatformMemberRefundService extends ServiceImpl<AdamMemberRefundMap
vo.setUpdatedAt(now);
vos.set(idx, vo);
boolean syncVo = redisUtil.set(moKey, vos);
log.warn("###会员退款回调处理成功:更新REDIS会员订单状态{}[orderNo:{},uid:{}]", syncVo ? "成功" : "失败", orderNo, memberOrder.getUid());
log.info("###会员退款回调处理成功:更新REDIS会员订单信息{}[orderNo:{},uid:{}]", syncVo ? "成功" : "失败", orderNo, memberOrder.getUid());
String umKey = AdamRedisConst.INFO_USER_MEMBER.concat(memberOrder.getUid());
AdamUserMemberVo userMemberVo = (AdamUserMemberVo) redisUtil.get(umKey);
newExpiryAt = userMemberVo.getExpiryAt().minusDays(memberOrder.getDays());
userMemberVo.setExpiryAt(newExpiryAt);
userMemberVo.setUpdatedAt(now);
if (userMemberVo.getState() == 1) {// 非拉黑用户,则更新到期时间为减去订单标记的会员有效期的日期
newExpiryAt = userMemberVo.getExpiryAt().minusDays(memberOrder.getDays());
syncVo = redisUtil.set(umKey, userMemberVo);
log.warn("###会员退款回调处理成功:更新REDIS会员状态{}[orderNo:{},uid:{}]", syncVo ? "成功" : "失败", orderNo, memberOrder.getUid());
}
LocalDate nowDate = now.toLocalDate();
LocalDate newExpiryDate = newExpiryAt.toLocalDate();
if (newExpiryDate.isEqual(nowDate)) {// 新的过期时间如果和当前时间为同一天,则重置到期时间为当天00:00:00
newExpiryAt = now.withHour(0).withMinute(0).withSecond(0);
}
userMemberVo.setExpiryAt(newExpiryAt);
userMemberVo.setUpdatedAt(now);
AdamUserMember updateInfoUserMember = new AdamUserMember();
updateInfoUserMember.setExpiryAt(newExpiryAt);
updateInfoUserMember.setUpdatedAt(now);
updateInfoUserMember.setComment("R");
int updateRst = adamUserMemberMapper.update(updateInfoUserMember, Wrappers.lambdaUpdate(AdamUserMember.class).eq(AdamUserMember::getUid, memberOrder.getUid()));
log.warn("###会员退款回调处理成功:更新用户会员状态{}[orderNo:{},uid:{}]", updateRst <= 0 ? "失败" : "成功", orderNo, memberOrder.getUid());
syncVo = redisUtil.set(umKey, userMemberVo);
log.info("###会员退款回调处理成功:更新REDIS会员信息{}[orderNo:{},uid:{}]", syncVo ? "成功" : "失败", orderNo, memberOrder.getUid());
AdamUserMember updateInfoUserMember = new AdamUserMember();
updateInfoUserMember.setExpiryAt(newExpiryAt);
updateInfoUserMember.setUpdatedAt(now);
updateInfoUserMember.setComment("R");
int updateRst = adamUserMemberMapper.update(updateInfoUserMember, Wrappers.lambdaUpdate(AdamUserMember.class).eq(AdamUserMember::getUid, memberOrder.getUid()));
log.info("###会员退款回调处理成功:更新DB会员信息{}[orderNo:{},uid:{}]", updateRst <= 0 ? "失败" : "成功", orderNo, memberOrder.getUid());
}
}
AdamMemberOrder updateInfoMemberOrder = new AdamMemberOrder();
updateInfoMemberOrder.setMid(memberOrder.getMid());
updateInfoMemberOrder.setState(5);
updateInfoMemberOrder.setUpdatedAt(now);
updateRst = adamMemberOrderMapper.updateById(updateInfoMemberOrder);
log.warn("###会员退款回调处理成功:更新会员订单状态{}[orderNo:{}]", updateRst <= 0 ? "失败" : "成功", orderNo);
int updateRst = adamMemberOrderMapper.updateById(updateInfoMemberOrder);
log.info("###会员退款回调处理成功:更新DB订单信息{}[orderNo:{}]", updateRst <= 0 ? "失败" : "成功", orderNo);
}
}
......@@ -74,15 +74,15 @@ public class PlatformCandyUserCouponService extends ServiceImpl<CandyUserCouponM
List<CandyUserCouponBasicDto> basicDtoList = candyUserCouponMapper.selectMultiForUserCouponBasicDto(uid);
if (!CollectionUtils.isEmpty(basicDtoList)) {
List<String> couponIdList = basicDtoList.parallelStream().map(CandyUserCouponBasicDto::getCouponId).collect(Collectors.toList());
List<String> couponIdList = basicDtoList.stream().map(CandyUserCouponBasicDto::getCouponId).collect(Collectors.toList());
List<CandyCouponRuleDto> couponRuleDtoList = candyCouponRuleMapper.selectListForCouponRuleDto(couponIdList);
Map<String, List<CandyCouponRuleDto>> couponRuleDtoListMap = couponRuleDtoList.parallelStream().collect(Collectors.groupingBy(CandyCouponRuleDto::getCouponId));
Map<String, List<CandyCouponRuleDto>> couponRuleDtoListMap = couponRuleDtoList.stream().collect(Collectors.groupingBy(CandyCouponRuleDto::getCouponId));
// Map<String, List<CandyUserCouponBasicDto>> basicDtoListMap = basicDtoList.parallelStream().collect(Collectors.groupingBy(CandyUserCouponBasicDto::getCouponId));
// Map<String, List<CandyUserCouponBasicDto>> basicDtoListMap = basicDtoList.stream().collect(Collectors.groupingBy(CandyUserCouponBasicDto::getCouponId));
basicDtoList.parallelStream().forEach(dto -> {
basicDtoList.forEach(dto -> {
dto.setUseRules(couponRuleDtoListMap.get(dto.getCouponId()));
});
......@@ -94,13 +94,13 @@ public class PlatformCandyUserCouponService extends ServiceImpl<CandyUserCouponM
public List<CandyCommonCouponBasicDto> ccouponBasicDtoByUidProcessing(LocalDateTime ucreatedAt) {
List<CandyCommonCouponBasicDto> basicDtoList = candyCommonCouponMapper.selectMultiForCommonCouponBasicDto(ucreatedAt);
if (!CollectionUtils.isEmpty(basicDtoList)) {
List<String> couponIdList = basicDtoList.parallelStream().map(CandyCommonCouponBasicDto::getCouponId).collect(Collectors.toList());
List<String> couponIdList = basicDtoList.stream().map(CandyCommonCouponBasicDto::getCouponId).collect(Collectors.toList());
List<CandyCouponRuleDto> couponRuleDtoList = candyCouponRuleMapper.selectListForCouponRuleDto(couponIdList);
Map<String, List<CandyCouponRuleDto>> couponRuleDtoListMap = couponRuleDtoList.parallelStream().collect(Collectors.groupingBy(CandyCouponRuleDto::getCouponId));
Map<String, List<CandyCouponRuleDto>> couponRuleDtoListMap = couponRuleDtoList.stream().collect(Collectors.groupingBy(CandyCouponRuleDto::getCouponId));
basicDtoList.parallelStream().forEach(dto -> {
basicDtoList.forEach(dto -> {
dto.setUseRules(couponRuleDtoListMap.get(dto.getCouponId()));
});
......
......@@ -439,6 +439,7 @@ CREATE TABLE `sweet_wechat_user`
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '正在现场服务号关注事件储存用户信息表';
alter table sweet_wechat_user add type tinyint NOT NULL DEFAULT 1 COMMENT '服务类型 1正在 2摩登' after user_id;
-- 小程序登录记录用户解密后信息表
drop TABLE if exists `sweet_applet_user`;
......@@ -539,3 +540,33 @@ CREATE TABLE `sweet_remind`
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '提醒记录表';
-- 防疫答题
drop TABLE if exists `sweet_antigenic_question`;
CREATE TABLE `sweet_antigenic_question`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`question_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'question_id',
`type` tinyint NOT NULL DEFAULT 0 COMMENT '活动类型 1MDSK防疫答题 2草莓防疫答题',
`openId` varchar(255) NOT NULL DEFAULT '' COMMENT 'openId',
`unionId` varchar(255) NOT NULL DEFAULT '' COMMENT 'unionId',
`nickname` varchar(255) NOT NULL DEFAULT '' COMMENT '姓名',
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '居住地址',
`phone` varchar(255) NOT NULL DEFAULT '' COMMENT '联系电话',
`urgent_phone` varchar(255) NOT NULL DEFAULT '' COMMENT '紧急联系人电话',
`keyword1` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword11` varchar(255) NOT NULL DEFAULT '' COMMENT '答案补充',
`keyword2` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword3` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword4` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword5` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword6` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`keyword7` varchar(255) NOT NULL DEFAULT '' COMMENT '答案',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`),
KEY `sweet_question_id` (`question_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '防疫答题表';
......@@ -31,4 +31,8 @@ XGROUP CREATE sweet:stream:rk.sweetTemplateMsg group.sweetTemplateMsg 0
-- 用户投票记录 --
XADD sweet:stream:rk.cityVote * 0 0
XGROUP CREATE sweet:stream:rk.cityVote group.cityVote 0
\ No newline at end of file
XGROUP CREATE sweet:stream:rk.cityVote group.cityVote 0
-- 防疫答题 --
XADD sweet:stream:rk.antigenicQuestion * 0 0
XGROUP CREATE sweet:stream:rk.antigenicQuestion group.antigenicQuestion 0
\ No newline at end of file
......@@ -69,6 +69,18 @@
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-sweet-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-sweet-do</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
......
......@@ -29,6 +29,10 @@ public class SweetConstant {
public final static String REDIS_KEY_SWEET_CITY_VOTE_USER="sweet:cityVote:user:";
public final static String REDIS_KEY_SWEET_CITY_VOTE_STAT_UPDATE_TIME="sweet:cityVote:updateTime";
public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO_MODERNSKY="sweet:wechatUser:modernsky:unionId:";
public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO_STR_MODERNSKY="sweet:wechatUser:modernsky:unionIdStr:";
public final static String REDIS_KEY_SWEET_WECHAT_USER_UNIONID_MODERNSKY="sweet:wechatUser:modernsky:openId:";
// public enum ManualPosition {
// artist("艺人","artist"),
// signingTime("签售时间","signingTime"),
......
package com.liquidnet.service.sweet.controller;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.entity.SweetArtists;
import com.liquidnet.service.sweet.service.ISweetAnswerService;
import com.liquidnet.service.sweet.vo.SweetAnswerVo;
import io.swagger.annotations.Api;
......@@ -21,7 +19,7 @@ import org.springframework.web.bind.annotation.*;
* @author jiangxiulong
* @since 2021-08-12
*/
@Api(tags = "答案")
@Api(tags = "活动-答案")
@RestController
@RequestMapping("/sweetAnswer")
public class SweetAnswerController {
......
package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.param.SweetAntigenicQuestionParam;
import com.liquidnet.service.sweet.service.ISweetAntigenicQuestionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* <p>
* 防疫答题表 前端控制器
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
@Api(tags = "活动-防疫答题")
@RestController
@RequestMapping("/AntigenicQuestion")
public class SweetAntigenicQuestionController {
@Autowired
private ISweetAntigenicQuestionService sweetAntigenicQuestionService;
@PostMapping("create")
@ApiOperation("添加答题记录")
public ResponseDto<Boolean> add(@Valid @RequestBody SweetAntigenicQuestionParam param) {
return sweetAntigenicQuestionService.create(param);
}
}
......@@ -23,7 +23,7 @@ import java.util.List;
* @author jiangxiulong
* @since 2021-09-15
*/
@Api(tags = "城市投票")
@Api(tags = "活动-城市投票")
@RestController
@RequestMapping("/sweetCityVote")
public class SweetCityVoteController {
......
......@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
@Api(tags = "公众号动作回调")
@Api(tags = "服务号-动作回调")
@RestController
@RequestMapping("/actionCallback")
@Slf4j
......@@ -24,7 +24,7 @@ public class SweetWechatActionCallbackController {
private WechatSignUtils wechatSignUtils;
@GetMapping("record")
@ApiOperation("get")
@ApiOperation("配置验签微信调用")
public void record(
HttpServletResponse response,
@RequestParam() String signature,
......@@ -47,10 +47,10 @@ public class SweetWechatActionCallbackController {
}
@PostMapping("record")
@ApiOperation("post")
@ApiOperation("用户动作微信回调")
public String record(
@RequestBody String requestBody,
// @RequestParam String requestBody,
@RequestParam("type") Integer type,
@RequestParam("signature") String signature,
@RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce,
......@@ -58,13 +58,13 @@ public class SweetWechatActionCallbackController {
@RequestParam(name = "encrypt_type", required = false) String encType,
@RequestParam(name = "msg_signature", required = false) String msgSignature
) {
log.info("\n接收微信请求:[openid=[{}], [signature=[{}], encType=[{}], msgSignature=[{}],"
log.info("\n接收微信请求:[type=[{}], openid=[{}], [signature=[{}], encType=[{}], msgSignature=[{}],"
+ " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
openid, signature, encType, msgSignature, timestamp, nonce, requestBody);
type, openid, signature, encType, msgSignature, timestamp, nonce, requestBody);
if (!wechatSignUtils.checkSignature(signature, timestamp, nonce)) {
log.info("验签未通过,非法请求,可能属于伪造的请求!");
return "";
}
return sweetWechatCallbackService.record(requestBody, timestamp, nonce, encType, msgSignature);
return sweetWechatCallbackService.record(requestBody, type, timestamp, nonce, encType, msgSignature);
}
}
package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.vo.WechatTokenInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatUserInfoVo;
import com.liquidnet.service.sweet.service.impl.SweetWechatLoginServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......@@ -23,7 +25,7 @@ public class SweetWechatLoginController {
private SweetWechatLoginServiceImpl sweetLoginService;
@GetMapping("userInfo")
@ApiOperation("code获取用户信息")
@ApiOperation("小程序解密手机号")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "微信code", required = true),
@ApiImplicitParam(type = "query", dataType = "String", name = "encryptedData", value = "encryptedData", required = true),
......@@ -39,7 +41,7 @@ public class SweetWechatLoginController {
return sweetLoginService.userInfo(code, encryptedData, iv, type);
}
@ApiOperation(value = "微信小程序登录凭证校验 获取openid", notes = "这里仅用于获取OPENID使用")
@ApiOperation(value = "小程序获取openid", notes = "这里仅用于获取OPENID使用")
@GetMapping(value = {"maOpenId"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "jsCode", value = "微信jsCode", required = true),
......@@ -49,7 +51,7 @@ public class SweetWechatLoginController {
return sweetLoginService.wxaCode2Session(jsCode, type);
}
@ApiOperation(value = "微信公众号登录 获取openid", notes = "这里仅用于获取OPENID使用")
@ApiOperation(value = "服务号获取openid", notes = "这里仅用于获取OPENID使用")
@GetMapping(value = {"mpOpenId"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "微信code", required = true),
......@@ -59,4 +61,24 @@ public class SweetWechatLoginController {
return sweetLoginService.wxOauth2AccessToken(code, type);
}
@ApiOperation(value = "服务号获取openId、unionId", notes = "本接口在scope参数为snsapi_base时不再提供unionID字段,只需将scope参数修改为snsapi_userinfo即可重新获得用户unionID")
@GetMapping(value = {"mpAccessTokenInfo"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "微信code", required = true),
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1正在 2摩登", required = true)
})
public ResponseDto<WechatTokenInfoVo> mpWxOauth2AccessTokenInfo(@RequestParam String code, @RequestParam Integer type) {
return sweetLoginService.mpWxOauth2AccessTokenInfo(code, type);
}
@ApiOperation(value = "服务号获取用户基本信息", notes = "本接口在用户未关注公众号时,将不返回用户unionID信息,已关注的用户,开发者可使用“获取用户基本信息接口”获取unionID,未关注用户,开发者可使用“微信授权登录接口”并将scope参数设置为snsapi_userinfo,获取用户unionID")
@GetMapping(value = {"mpUserInfo"})
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "微信code", required = true),
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1正在 2摩登", required = true)
})
public ResponseDto<WechatUserInfoVo> mpUserInfo(@RequestParam String code, @RequestParam Integer type) {
return sweetLoginService.mpUserInfo(code, type);
}
}
......@@ -25,7 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
* @since 2021-08-20
*/
@Slf4j
@Api(tags = "正在-摩登公众号分享")
@Api(tags = "服务号-分享")
@RestController
@RequestMapping("wechatShareSign")
public class SweetWechatShareController {
......
......@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@Api(tags = "公众号模版消息")
@Api(tags = "服务号-模版消息")
@RestController
@RequestMapping("/wechatTemplate")
public class SweetWechatTemplateController {
......@@ -33,7 +33,7 @@ public class SweetWechatTemplateController {
}
@PostMapping("remind")
@ApiOperation("提醒记录")
@ApiOperation("小程序演出提醒记录")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "openId", value = "微信openId", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "unionId", value = "微信unionId", required = true),
......@@ -51,11 +51,13 @@ public class SweetWechatTemplateController {
@ApiOperation("获取关注状态")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "unionId", value = "微信unionId", required = true),
@ApiImplicitParam(type = "form", dataType = "Integer", name = "type", value = "type 1正在 2摩登", required = false),
})
public ResponseDto followStatus(
@RequestParam() String unionId
@RequestParam() String unionId,
@RequestParam(defaultValue = "1") Integer type
) {
boolean status = sweetTemplateService.followStatus(unionId);
boolean status = sweetTemplateService.followStatus(unionId, type);
if (status) {
return ResponseDto.success(1);
} else {
......
package com.liquidnet.service.sweet.controller.syncRedis;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.service.impl.syncRedis.JxlDataImpl;
import com.liquidnet.service.sweet.service.impl.syncRedis.RedisDataServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -9,14 +9,21 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "redis数据迁移-jxl")
/**
* <p>
* 同步redis数据
* </p>
*
* @author jiangxiulong
* @since 2021-08-12
*/
@Api(tags = "数据迁移")
@RestController
@RequestMapping("sync")
public class JxlDataController {
public class RedisDataController {
@Autowired
private JxlDataImpl jxlData;
private RedisDataServiceImpl redisDataService;
/**
* basicServices
......@@ -25,14 +32,14 @@ public class JxlDataController {
@PostMapping("basicServices/versions")
@ApiOperation("basicServices版本控制数据迁移-可以通过后台编辑")
public ResponseDto<Boolean> basicServicesVersions() {
Boolean result = jxlData.basicServicesVersions();
Boolean result = redisDataService.basicServicesVersions();
return ResponseDto.success(result);
}
@PostMapping("basicServices/upush")
@ApiOperation("basicServices推送数据迁移")
public ResponseDto<Boolean> basicServicesUpush() {
Boolean result = jxlData.basicServicesUpush();
Boolean result = redisDataService.basicServicesUpush();
return ResponseDto.success(result);
}
......@@ -43,7 +50,7 @@ public class JxlDataController {
@PostMapping("kylin/banner")
@ApiOperation("kylin-banner数据迁移-可以通过后台编辑")
public ResponseDto<Boolean> kylinBanner() {
Boolean result = jxlData.kylinBanner();
Boolean result = redisDataService.kylinBanner();
return ResponseDto.success(result);
}
......@@ -54,35 +61,35 @@ public class JxlDataController {
@PostMapping("sweet/accessToken")
@ApiOperation("sweet-AccessToken数据迁移-可不迁可自动生成")
public ResponseDto<Boolean> sweetAccessToken() {
Boolean result = jxlData.sweetAccessToken();
Boolean result = redisDataService.sweetAccessToken();
return ResponseDto.success(result);
}
@PostMapping("sweet/answer")
@ApiOperation("sweet-answer数据迁移")
public ResponseDto<Boolean> sweetAnswer() {
Boolean result = jxlData.sweetAnswer();
Boolean result = redisDataService.sweetAnswer();
return ResponseDto.success(result);
}
@PostMapping("sweet/wechatUser/openId")
@ApiOperation("sweet-wechatUser-openId数据迁移")
public ResponseDto<Boolean> sweetOpenId() {
Boolean result = jxlData.sweetOpenId();
Boolean result = redisDataService.sweetOpenId();
return ResponseDto.success(result);
}
@PostMapping("sweet/wechatUser/unionId")
@ApiOperation("sweet-wechatUser-unionId数据迁移-这里也会同步unionIdStr会抛异常过滤掉")
public ResponseDto<Boolean> sweetUnionId() {
Boolean result = jxlData.sweetUnionId();
Boolean result = redisDataService.sweetUnionId();
return ResponseDto.success(result);
}
@PostMapping("sweet/wechatUser/unionIdStr")
@ApiOperation("sweet-wechatUser-unionIdStr数据迁移")
public ResponseDto<Boolean> sweetUnionIdStr() {
Boolean result = jxlData.sweetUnionIdStr();
Boolean result = redisDataService.sweetUnionIdStr();
return ResponseDto.success(result);
}
......
package com.liquidnet.service.sweet.controller.syncRedis;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.service.sweet.service.impl.SweetWechatMpService;
import com.liquidnet.service.sweet.service.impl.syncRedis.UserDataServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
......@@ -17,17 +17,25 @@ import org.springframework.web.bind.annotation.RestController;
import java.io.*;
@Api(tags = "同步微信用户数据")
/**
* <p>
* 外部用户注册、微信服务号关注用户数据同步
* </p>
*
* @author jiangxiulong
* @since 2021-08-12
*/
@Api(tags = "数据迁移")
@RestController
@RequestMapping("/wechatSync")
@Slf4j
public class SweetWechatSyncDataController {
public class UserDataController {
@Autowired
private SweetWechatMpService sweetWechatMpService;
private UserDataServiceImpl userDataService;
@GetMapping("regMobile")
@ApiOperation("注册")
@ApiOperation("外部手机号调用adam注册")
public void regMobile() throws IOException {
String filePath = "/Users/jiangxiulong/Desktop/keys2.txt";
String encoding = "UTF-8";
......@@ -58,23 +66,26 @@ public class SweetWechatSyncDataController {
}
@GetMapping("users")
@ApiOperation("关注用户")
public void getUsers() {
@ApiOperation("同步所有关注服务号用户")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "type 1正在 2摩登", required = true)
})
public void getUsers(@RequestParam() Integer type) {
try {
sweetWechatMpService.userInfo();
userDataService.userInfo(type);
} catch (Exception e) {
log.error("getUsers", e);
}
}
@GetMapping("user")
@ApiOperation("openid同步单个关注用户")
@ApiOperation("以openid同步单个关注服务号的用户")
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "openId", value = "openId", required = true)
})
public void getUser(@RequestParam() String openId) {
try {
sweetWechatMpService.getUser(openId);
userDataService.getUser(openId);
} catch (Exception e) {
log.error("getUser", e);
}
......
......@@ -5,6 +5,7 @@ import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.service.impl.SweetWechatTemplateServiceImpl;
import com.liquidnet.service.sweet.utils.QueueUtils;
......@@ -20,7 +21,6 @@ import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.Map;
......@@ -39,6 +39,8 @@ public class SubscribeHandler implements WxMpMessageHandler {
private RedisDataUtils redisDataUtils;
@Autowired
private QueueUtils queueUtils;
@Autowired
WechatMpConfigure wechatMpConfigure;
@Autowired
private SweetWechatTemplateServiceImpl sweetWechatTemplateService;
......@@ -46,6 +48,9 @@ public class SubscribeHandler implements WxMpMessageHandler {
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) throws WxErrorException {
String zhengzaiAppId = wechatMpConfigure.getWxMpService(1).getWxMpConfigStorage().getAppId();
String otherAppId = wxMpService.getWxMpConfigStorage().getAppId();
log.info("接收到一个订阅事件:[{}]", wxMessage.toString());
// 1、获取微信用户信息
WxMpUser wxMpUser = wxMpService.getUserService().userInfo(wxMessage.getFromUser());
......@@ -54,39 +59,74 @@ public class SubscribeHandler implements WxMpMessageHandler {
return null;
}
log.info("根据 openId:[{}]获取到的微信用户信息:[{}]", wxMessage.getFromUser(), wxMpUser.toString());
// 记录用户信息
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(wxMpUser.getUnionId());
SweetWechatUser sweetWechatUser = SweetWechatUser.getNew();
sweetWechatUser.setOpenId(wxMpUser.getOpenId());
sweetWechatUser.setUnionId(wxMpUser.getUnionId());
sweetWechatUser.setNickname(wxMpUser.getNickname());
sweetWechatUser.setSexDesc(wxMpUser.getSexDesc());
sweetWechatUser.setSex(wxMpUser.getSex());
sweetWechatUser.setHeadImgUrl(wxMpUser.getHeadImgUrl());
sweetWechatUser.setLanguage(wxMpUser.getLanguage());
sweetWechatUser.setCountry(wxMpUser.getCountry());
sweetWechatUser.setProvince(wxMpUser.getProvince());
sweetWechatUser.setCity(wxMpUser.getCity());
sweetWechatUser.setSubscribeTime(DateUtil.ofEpochMilli(wxMpUser.getSubscribeTime()));
sweetWechatUser.setSubscribeScene(wxMpUser.getSubscribeScene());
if (null == userInfo) {
sweetWechatUser.setUserId(IDGenerator.nextSnowId());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
LocalDateTime now = LocalDateTime.now();
sqls.add(SqlMapping.get("sweet_user.insert"));
sqlsDataA.add(new Object[]{
sweetWechatUser.getUserId(), sweetWechatUser.getOpenId(), sweetWechatUser.getUnionId(), sweetWechatUser.getNickname(),
sweetWechatUser.getSexDesc(), sweetWechatUser.getSex(), sweetWechatUser.getHeadImgUrl(), sweetWechatUser.getLanguage(),
sweetWechatUser.getCountry(), sweetWechatUser.getProvince(), sweetWechatUser.getCity(),
sweetWechatUser.getSubscribeTime(), sweetWechatUser.getSubscribeScene()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
// 入缓存
redisDataUtils.setSweetWechatUser(sweetWechatUser);
//发送模版消息
sweetWechatTemplateService.subscribeSend(sweetWechatUser);
if (zhengzaiAppId.equals(otherAppId)) {
// 记录用户信息
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(wxMpUser.getUnionId());
SweetWechatUser sweetWechatUser = SweetWechatUser.getNew();
sweetWechatUser.setOpenId(wxMpUser.getOpenId());
sweetWechatUser.setUnionId(wxMpUser.getUnionId());
sweetWechatUser.setNickname(wxMpUser.getNickname());
sweetWechatUser.setSexDesc(wxMpUser.getSexDesc());
sweetWechatUser.setSex(wxMpUser.getSex());
sweetWechatUser.setHeadImgUrl(wxMpUser.getHeadImgUrl());
sweetWechatUser.setLanguage(wxMpUser.getLanguage());
sweetWechatUser.setCountry(wxMpUser.getCountry());
sweetWechatUser.setProvince(wxMpUser.getProvince());
sweetWechatUser.setCity(wxMpUser.getCity());
sweetWechatUser.setSubscribeTime(DateUtil.ofEpochMilli(wxMpUser.getSubscribeTime()));
sweetWechatUser.setSubscribeScene(wxMpUser.getSubscribeScene());
if (null == userInfo) {
sweetWechatUser.setUserId(IDGenerator.nextSnowId());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_user.insert"));
sqlsDataA.add(new Object[]{
sweetWechatUser.getUserId(), 1, sweetWechatUser.getOpenId(), sweetWechatUser.getUnionId(), sweetWechatUser.getNickname(),
sweetWechatUser.getSexDesc(), sweetWechatUser.getSex(), sweetWechatUser.getHeadImgUrl(), sweetWechatUser.getLanguage(),
sweetWechatUser.getCountry(), sweetWechatUser.getProvince(), sweetWechatUser.getCity(),
sweetWechatUser.getSubscribeTime(), sweetWechatUser.getSubscribeScene()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
// 入缓存
redisDataUtils.setSweetWechatUser(sweetWechatUser);
//发送模版消息
sweetWechatTemplateService.subscribeSend(wxMpService, sweetWechatUser);
}
} else {
// 记录用户信息
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUserModernsky(wxMpUser.getUnionId());
SweetWechatUser sweetWechatUser = SweetWechatUser.getNew();
sweetWechatUser.setOpenId(wxMpUser.getOpenId());
sweetWechatUser.setUnionId(wxMpUser.getUnionId());
sweetWechatUser.setNickname(wxMpUser.getNickname());
sweetWechatUser.setSexDesc(wxMpUser.getSexDesc());
sweetWechatUser.setSex(wxMpUser.getSex());
sweetWechatUser.setHeadImgUrl(wxMpUser.getHeadImgUrl());
sweetWechatUser.setLanguage(wxMpUser.getLanguage());
sweetWechatUser.setCountry(wxMpUser.getCountry());
sweetWechatUser.setProvince(wxMpUser.getProvince());
sweetWechatUser.setCity(wxMpUser.getCity());
sweetWechatUser.setSubscribeTime(DateUtil.ofEpochMilli(wxMpUser.getSubscribeTime()));
sweetWechatUser.setSubscribeScene(wxMpUser.getSubscribeScene());
if (null == userInfo) {
sweetWechatUser.setUserId(IDGenerator.nextSnowId());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_user.insert"));
sqlsDataA.add(new Object[]{
sweetWechatUser.getUserId(), 2, sweetWechatUser.getOpenId(), sweetWechatUser.getUnionId(), sweetWechatUser.getNickname(),
sweetWechatUser.getSexDesc(), sweetWechatUser.getSex(), sweetWechatUser.getHeadImgUrl(), sweetWechatUser.getLanguage(),
sweetWechatUser.getCountry(), sweetWechatUser.getProvince(), sweetWechatUser.getCity(),
sweetWechatUser.getSubscribeTime(), sweetWechatUser.getSubscribeScene()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
// 入缓存
redisDataUtils.setSweetWechatUserModernsky(sweetWechatUser);
//发送模版消息
sweetWechatTemplateService.subscribeSend(wxMpService, sweetWechatUser);
}
}
return null;
......
......@@ -3,6 +3,7 @@ package com.liquidnet.service.sweet.handler;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
......@@ -37,12 +38,16 @@ public class UnsubscribeHandler implements WxMpMessageHandler {
private RedisDataUtils redisDataUtils;
@Autowired
private QueueUtils queueUtils;
@Autowired
WechatMpConfigure wechatMpConfigure;
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) throws WxErrorException {
log.info("接收到一个取消订阅事件:[{}]", wxMessage.toString());
String zhengzaiAppId = wechatMpConfigure.getWxMpService(1).getWxMpConfigStorage().getAppId();
String otherAppId = wxMpService.getWxMpConfigStorage().getAppId();
log.info("接收到一个取消订阅事件:[{}]", wxMessage.toString());
// 1、获取微信用户信息
WxMpUser wxMpUser = wxMpService.getUserService().userInfo(wxMessage.getFromUser());
if (null == wxMpUser) {
......@@ -50,23 +55,44 @@ public class UnsubscribeHandler implements WxMpMessageHandler {
return null;
}
log.info("根据 openId:[{}]获取到的微信用户信息:[{}]", wxMessage.getFromUser(), wxMpUser.toString());
// 删除用户信息
String sweetWechatUserUnionid = redisDataUtils.getSweetWechatUserUnionid(wxMpUser.getOpenId());
if (null != sweetWechatUserUnionid && !sweetWechatUserUnionid.isEmpty()) {
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(sweetWechatUserUnionid);
if (null != userInfo) {
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
LocalDateTime now = LocalDateTime.now();
sqls.add(SqlMapping.get("sweet_user.update"));
sqlsDataA.add(new Object[]{
2, now, sweetWechatUserUnionid
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
redisDataUtils.delSweetWechatUser(sweetWechatUserUnionid, wxMpUser.getOpenId());
if (zhengzaiAppId.equals(otherAppId)) {
// 删除用户信息
String sweetWechatUserUnionid = redisDataUtils.getSweetWechatUserUnionid(wxMpUser.getOpenId());
if (null != sweetWechatUserUnionid && !sweetWechatUserUnionid.isEmpty()) {
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(sweetWechatUserUnionid);
if (null != userInfo) {
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
LocalDateTime now = LocalDateTime.now();
sqls.add(SqlMapping.get("sweet_user.update"));
sqlsDataA.add(new Object[]{
2, now, sweetWechatUserUnionid, 1
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
redisDataUtils.delSweetWechatUser(sweetWechatUserUnionid, wxMpUser.getOpenId());
}
}
} else {
// 删除用户信息
String sweetWechatUserUnionid = redisDataUtils.getSweetWechatUserUnionidModernsky(wxMpUser.getOpenId());
if (null != sweetWechatUserUnionid && !sweetWechatUserUnionid.isEmpty()) {
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUserModernsky(sweetWechatUserUnionid);
if (null != userInfo) {
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
LocalDateTime now = LocalDateTime.now();
sqls.add(SqlMapping.get("sweet_user.update"));
sqlsDataA.add(new Object[]{
2, now, sweetWechatUserUnionid, 2
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
redisDataUtils.delSweetWechatUserModernsky(sweetWechatUserUnionid, wxMpUser.getOpenId());
}
}
}
return null;
}
}
......@@ -5,10 +5,11 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@ApiModel(value = "SweetCityVoteParam", description = "用户投票记录入参")
@Data
public class SweetCityVoteParam implements java.io.Serializable {
public class SweetCityVoteParam implements Serializable {
private static final long serialVersionUID = -2626425843975309892L;
......
package com.liquidnet.service.sweet.service;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.param.SweetAntigenicQuestionParam;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.sweet.entity.SweetAntigenicQuestion;
/**
* <p>
* 防疫答题表 服务类
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
public interface ISweetAntigenicQuestionService extends IService<SweetAntigenicQuestion> {
ResponseDto<Boolean> create(SweetAntigenicQuestionParam param);
}
package com.liquidnet.service.sweet.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.dto.param.SweetAntigenicQuestionParam;
import com.liquidnet.service.sweet.entity.SweetAntigenicQuestion;
import com.liquidnet.service.sweet.mapper.SweetAntigenicQuestionMapper;
import com.liquidnet.service.sweet.service.ISweetAntigenicQuestionService;
import com.liquidnet.service.sweet.utils.QueueUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.LinkedList;
/**
* <p>
* 防疫答题表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2021-09-28
*/
@Service
public class SweetAntigenicQuestionServiceImpl extends ServiceImpl<SweetAntigenicQuestionMapper, SweetAntigenicQuestion> implements ISweetAntigenicQuestionService {
@Autowired
QueueUtils queueUtils;
@Override
public ResponseDto<Boolean> create(SweetAntigenicQuestionParam param) {
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_antigenic_question.insert"));
sqlsDataA.add(new Object[]{
IDGenerator.nextSnowId(), param.getType(), param.getOpenId(), param.getUnionId(), param.getNickname(), param.getAddress(), param.getPhone(),
param.getUrgentPhone(), param.getKeyword1(), param.getKeyword11(), param.getKeyword2(), param.getKeyword3(), param.getKeyword4(), param.getKeyword5(),
param.getKeyword6(), param.getKeyword7()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_ANTIGENIC_QUESTION_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
return ResponseDto.success();
}
}
......@@ -53,8 +53,11 @@ public class SweetWechatCallbackServiceImpl {
return router;
}
public String record(String requestBody, String timestamp, String nonce, String encType, String msgSignature) {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(1);
public String record(String requestBody, Integer type, String timestamp, String nonce, String encType, String msgSignature) {
if (null == type || type <= 0) {
type = 1;
}
WxMpService wxMpService = wechatMpConfigure.getWxMpService(type);
String out = null;
if (encType == null || encType.isEmpty()) {
// 明文传输的消息
......
......@@ -9,8 +9,11 @@ import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.dto.vo.WechatTokenInfoVo;
import com.liquidnet.service.sweet.dto.vo.WechatUserInfoVo;
import com.liquidnet.service.sweet.utils.QueueUtils;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -20,7 +23,6 @@ import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Objects;
......@@ -89,7 +91,7 @@ public class SweetWechatLoginServiceImpl {
return ResponseDto.success(userInfo);
} catch (Exception e) {
log.error("WechatUserInfoError", e);
log.error("WechatUserInfoError Exception:{}", e);
return ResponseDto.failure();
}
}
......@@ -101,7 +103,7 @@ public class SweetWechatLoginServiceImpl {
params.add("mobile", mobile);
HttpUtil.post(adamUrl.concat("/adam/rsc/reg/mobile"), params);
} catch (Exception e) {
log.error("registerByMobile失败", e);
log.error("registerByMobile失败 Exception:{}", e);
}
}
......@@ -110,7 +112,7 @@ public class SweetWechatLoginServiceImpl {
WxMaJscode2SessionResult wxMaJscode2SessionResult = sweetWechatService.sessionInfo(jsCode, type);
return ResponseDto.success(wxMaJscode2SessionResult.getOpenid());
} catch (Exception e) {
log.error("wxaCode2SessionError", e);
log.error("wxaCode2SessionError Exception:{}", e);
return ResponseDto.failure();
}
}
......@@ -120,8 +122,31 @@ public class SweetWechatLoginServiceImpl {
WxOAuth2AccessToken wxOAuth2AccessToken = sweetWechatService.wxOauth2AccessToken(code, type);
return ResponseDto.success(wxOAuth2AccessToken.getOpenId());
} catch (Exception e) {
log.error("wxaCode2SessionError", e);
log.error("wxaCode2SessionError Exception:{}", e);
return ResponseDto.failure();
}
}
public ResponseDto<WechatTokenInfoVo> mpWxOauth2AccessTokenInfo(String code, Integer type) {
try {
WxOAuth2AccessToken wxOAuth2AccessToken = sweetWechatService.wxOauth2AccessToken(code, type);
WechatTokenInfoVo userInfoVo = WechatTokenInfoVo.getNew().copy(wxOAuth2AccessToken);
return ResponseDto.success(userInfoVo);
} catch (Exception e) {
log.error("wxaCode2SessionError Exception:{}", e);
return ResponseDto.failure();
}
}
public ResponseDto<WechatUserInfoVo> mpUserInfo(String code, Integer type) {
try {
WxOAuth2UserInfo wxOAuth2UserInfo = sweetWechatService.mpUserInfo(code, type);
WechatUserInfoVo tokenInfoVo = WechatUserInfoVo.getNew().copy(wxOAuth2UserInfo);
return ResponseDto.success(tokenInfoVo);
} catch (Exception e) {
log.error("wxaCode2SessionError Exception:{}", e);
return ResponseDto.failure();
}
}
}
......@@ -7,6 +7,7 @@ import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import com.liquidnet.service.sweet.config.WechatMaConfigure;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
......@@ -22,6 +23,9 @@ public class SweetWechatService {
@Autowired
WechatMpConfigure wechatMpConfigure;
/**
* 小程序--------------
*/
public WxMaJscode2SessionResult sessionInfo(String code, Integer anum) throws WxErrorException {
WxMaService wxMaService = wechatMaConfigure.getWxMaService(anum);
log.info("isAccessTokenExpired:[{}] ", wxMaService.getWxMaConfig().isAccessTokenExpired());
......@@ -39,12 +43,19 @@ public class SweetWechatService {
return wxMaService.getUserService().getPhoneNoInfo(sessionKey, encryptedData, iv);
}
/**
* 服务号--------------
*/
public WxOAuth2AccessToken wxOauth2AccessToken(String code, Integer type) throws WxErrorException {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(type);
log.info("isAccessTokenExpired:[{}] ", wxMpService.getWxMpConfigStorage().isAccessTokenExpired());
log.info("getAccessToken:[{}] ", wxMpService.getWxMpConfigStorage().getAccessToken());
return wxMpService.getOAuth2Service().getAccessToken(code);
}
public WxOAuth2UserInfo mpUserInfo(String code, Integer type) throws WxErrorException {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(type);
WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(code);
return wxMpService.getOAuth2Service().getUserInfo(wxOAuth2AccessToken, "zh_CN");
}
}
......@@ -157,30 +157,36 @@ public class SweetWechatTemplateServiceImpl {
return ResponseDto.success();
}
public void subscribeSend(SweetWechatUser sweetWechatUser) {
String templateId = "y-j82V1TYhlTH1j8QscuDPcPQtNiDtENb7N5IZMBvqU";
try {
String nowTime = DateUtil.getNowTime();
if (DateUtil.compareStrDay(nowTime, "2021-08-14 10:00:00") == 1) {
WxMpTemplateMessage templateMessage = getTemplateMessage(templateId, sweetWechatUser.getOpenId(), appletAppid, "pages/webview?query=lottery");
// 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "感谢关注「正在现场」服务号。我们是草莓音乐节演出官方票务平台。"))
.addData(new WxMpTemplateData("keyword1", "您已成功关注「正在现场」服务号"))
.addData(new WxMpTemplateData("keyword2", "4006-310-750"))
.addData(new WxMpTemplateData("remark", "点击下方小程序,再次参与「草莓星球来的人」周边抽奖"));
String msgId = sendTmpMsg(templateMessage);
} else {
WxMpTemplateMessage templateMessage = getTemplateMessage(templateId, sweetWechatUser.getOpenId(), "");
// 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "感谢关注「正在现场」服务号。我们是草莓音乐节演出官方票务平台。"))
.addData(new WxMpTemplateData("keyword1", "您已成功关注「正在现场」服务号"))
.addData(new WxMpTemplateData("keyword2", "4006-310-750"))
.addData(new WxMpTemplateData("remark", "随时查阅订单信息,第一时间获取演出开售提醒,更天天有福利,周周有惊喜!"));
String msgId = sendTmpMsg(templateMessage);
}
public void subscribeSend(WxMpService wxMpService, SweetWechatUser sweetWechatUser) {
String zhengzaiAppId = wechatMpConfigure.getWxMpService(1).getWxMpConfigStorage().getAppId();
String otherAppId = wxMpService.getWxMpConfigStorage().getAppId();
if (zhengzaiAppId.equals(otherAppId)) {
String templateId = "y-j82V1TYhlTH1j8QscuDPcPQtNiDtENb7N5IZMBvqU";
try {
String nowTime = DateUtil.getNowTime();
if (DateUtil.compareStrDay(nowTime, "2021-08-14 10:00:00") == 1) {
WxMpTemplateMessage templateMessage = getTemplateMessage(templateId, sweetWechatUser.getOpenId(), appletAppid, "pages/webview?query=lottery");
// 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "感谢关注「正在现场」服务号。我们是草莓音乐节演出官方票务平台。"))
.addData(new WxMpTemplateData("keyword1", "您已成功关注「正在现场」服务号"))
.addData(new WxMpTemplateData("keyword2", "4006-310-750"))
.addData(new WxMpTemplateData("remark", "点击下方小程序,再次参与「草莓星球来的人」周边抽奖"));
String msgId = sendTmpMsg(templateMessage);
} else {
WxMpTemplateMessage templateMessage = getTemplateMessage(templateId, sweetWechatUser.getOpenId(), "");
// 添加模板数据
templateMessage.addData(new WxMpTemplateData("first", "感谢关注「正在现场」服务号。我们是草莓音乐节演出官方票务平台。"))
.addData(new WxMpTemplateData("keyword1", "您已成功关注「正在现场」服务号"))
.addData(new WxMpTemplateData("keyword2", "4006-310-750"))
.addData(new WxMpTemplateData("remark", "随时查阅订单信息,第一时间获取演出开售提醒,更天天有福利,周周有惊喜!"));
String msgId = sendTmpMsg(templateMessage);
}
} catch (Exception e) {
log.error("关注模版消息处理异常", e);
} catch (Exception e) {
log.error("关注模版消息处理异常", e);
}
} else {
log.info("不是正在, 不发模版消息");
}
}
......@@ -253,8 +259,13 @@ public class SweetWechatTemplateServiceImpl {
}
}
public boolean followStatus(String unionId) {
SweetWechatUser sweetWechatUser = redisDataUtils.getSweetWechatUser(unionId);
public boolean followStatus(String unionId, Integer type) {
SweetWechatUser sweetWechatUser = null;
if (null == type || type <= 1) {
sweetWechatUser = redisDataUtils.getSweetWechatUser(unionId);
} else if (type == 2) {
sweetWechatUser = redisDataUtils.getSweetWechatUserModernsky(unionId);
}
if (null != sweetWechatUser && !sweetWechatUser.getUnionId().isEmpty()) {
return true;
......
package com.liquidnet.service.sweet.service.impl;
package com.liquidnet.service.sweet.service.impl.syncRedis;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
......@@ -22,7 +22,7 @@ import java.util.List;
@Slf4j
@Service
public class SweetWechatMpService {
public class UserDataServiceImpl {
@Autowired
WechatMpConfigure wechatMpConfigure;
......@@ -31,8 +31,8 @@ public class SweetWechatMpService {
@Autowired
private QueueUtils queueUtils;
public void userInfo() throws WxErrorException {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(1);
public void userInfo(Integer type) throws WxErrorException {
WxMpService wxMpService = wechatMpConfigure.getWxMpService(type);
String nextOpenid = "";
do {
......@@ -53,36 +53,70 @@ public class SweetWechatMpService {
log.info("getSubscribeFalse:openId:[{}]", openId);
continue;
}
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(wxMpUser.getUnionId());
if (null == userInfo) {
SweetWechatUser sweetWechatUser = SweetWechatUser.getNew();
sweetWechatUser.setOpenId(wxMpUser.getOpenId());
sweetWechatUser.setUnionId(wxMpUser.getUnionId());
sweetWechatUser.setNickname(wxMpUser.getNickname());
sweetWechatUser.setSexDesc(wxMpUser.getSexDesc());
sweetWechatUser.setSex(wxMpUser.getSex());
sweetWechatUser.setHeadImgUrl(wxMpUser.getHeadImgUrl());
sweetWechatUser.setLanguage(wxMpUser.getLanguage());
sweetWechatUser.setCountry(wxMpUser.getCountry());
sweetWechatUser.setProvince(wxMpUser.getProvince());
sweetWechatUser.setCity(wxMpUser.getCity());
sweetWechatUser.setSubscribeTime(DateUtil.ofEpochMilli(wxMpUser.getSubscribeTime()));
sweetWechatUser.setSubscribeScene(wxMpUser.getSubscribeScene());
sweetWechatUser.setUserId(IDGenerator.nextSnowId());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_user.insert"));
sqlsDataA.add(new Object[]{
sweetWechatUser.getUserId(), sweetWechatUser.getOpenId(), sweetWechatUser.getUnionId(), sweetWechatUser.getNickname(),
sweetWechatUser.getSexDesc(), sweetWechatUser.getSex(), sweetWechatUser.getHeadImgUrl(), sweetWechatUser.getLanguage(),
sweetWechatUser.getCountry(), sweetWechatUser.getProvince(), sweetWechatUser.getCity(),
sweetWechatUser.getSubscribeTime(), sweetWechatUser.getSubscribeScene()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
// 入缓存
redisDataUtils.setSweetWechatUser(sweetWechatUser);
if (type == 1) {
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUser(wxMpUser.getUnionId());
if (null == userInfo) {
SweetWechatUser sweetWechatUser = SweetWechatUser.getNew();
sweetWechatUser.setOpenId(wxMpUser.getOpenId());
sweetWechatUser.setUnionId(wxMpUser.getUnionId());
sweetWechatUser.setNickname(wxMpUser.getNickname());
sweetWechatUser.setSexDesc(wxMpUser.getSexDesc());
sweetWechatUser.setSex(wxMpUser.getSex());
sweetWechatUser.setHeadImgUrl(wxMpUser.getHeadImgUrl());
sweetWechatUser.setLanguage(wxMpUser.getLanguage());
sweetWechatUser.setCountry(wxMpUser.getCountry());
sweetWechatUser.setProvince(wxMpUser.getProvince());
sweetWechatUser.setCity(wxMpUser.getCity());
sweetWechatUser.setSubscribeTime(DateUtil.ofEpochMilli(wxMpUser.getSubscribeTime()));
sweetWechatUser.setSubscribeScene(wxMpUser.getSubscribeScene());
sweetWechatUser.setUserId(IDGenerator.nextSnowId());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_user.insert"));
sqlsDataA.add(new Object[]{
sweetWechatUser.getUserId(), 1, sweetWechatUser.getOpenId(), sweetWechatUser.getUnionId(), sweetWechatUser.getNickname(),
sweetWechatUser.getSexDesc(), sweetWechatUser.getSex(), sweetWechatUser.getHeadImgUrl(), sweetWechatUser.getLanguage(),
sweetWechatUser.getCountry(), sweetWechatUser.getProvince(), sweetWechatUser.getCity(),
sweetWechatUser.getSubscribeTime(), sweetWechatUser.getSubscribeScene()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
// 入缓存
redisDataUtils.setSweetWechatUser(sweetWechatUser);
}
} else if (type == 2) {
SweetWechatUser userInfo = redisDataUtils.getSweetWechatUserModernsky(wxMpUser.getUnionId());
if (null == userInfo) {
SweetWechatUser sweetWechatUser = SweetWechatUser.getNew();
sweetWechatUser.setOpenId(wxMpUser.getOpenId());
sweetWechatUser.setUnionId(wxMpUser.getUnionId());
sweetWechatUser.setNickname(wxMpUser.getNickname());
sweetWechatUser.setSexDesc(wxMpUser.getSexDesc());
sweetWechatUser.setSex(wxMpUser.getSex());
sweetWechatUser.setHeadImgUrl(wxMpUser.getHeadImgUrl());
sweetWechatUser.setLanguage(wxMpUser.getLanguage());
sweetWechatUser.setCountry(wxMpUser.getCountry());
sweetWechatUser.setProvince(wxMpUser.getProvince());
sweetWechatUser.setCity(wxMpUser.getCity());
sweetWechatUser.setSubscribeTime(DateUtil.ofEpochMilli(wxMpUser.getSubscribeTime()));
sweetWechatUser.setSubscribeScene(wxMpUser.getSubscribeScene());
sweetWechatUser.setUserId(IDGenerator.nextSnowId());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_user.insert"));
sqlsDataA.add(new Object[]{
sweetWechatUser.getUserId(), 2, sweetWechatUser.getOpenId(), sweetWechatUser.getUnionId(), sweetWechatUser.getNickname(),
sweetWechatUser.getSexDesc(), sweetWechatUser.getSex(), sweetWechatUser.getHeadImgUrl(), sweetWechatUser.getLanguage(),
sweetWechatUser.getCountry(), sweetWechatUser.getProvince(), sweetWechatUser.getCity(),
sweetWechatUser.getSubscribeTime(), sweetWechatUser.getSubscribeScene()
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_USER_INSERT_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
// 入缓存
redisDataUtils.setSweetWechatUserModernsky(sweetWechatUser);
}
}
} catch (Exception e) {
log.info("forException:openId:[{}]", openId);
}
......
......@@ -544,4 +544,51 @@ public class RedisDataUtils {
return (String) obj;
}
}
// wechat user 摩登
public void setSweetWechatUserModernsky(SweetWechatUser sweetWechatUser) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO_MODERNSKY.concat(sweetWechatUser.getUnionId());
String redisKeyUnid = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_UNIONID_MODERNSKY.concat(sweetWechatUser.getOpenId());
redisUtil.set(redisKey, sweetWechatUser);
redisUtil.set(redisKeyUnid, sweetWechatUser.getUnionId());
}
public String getSweetWechatUserUnionidModernsky(String openid) {
if (openid.isEmpty()) {
return null;
}
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_UNIONID_MODERNSKY.concat(openid);
return (String) redisUtil.get(redisKey);
}
public SweetWechatUser getSweetWechatUserModernsky(String unionid) {
if (unionid.isEmpty()) {
return null;
}
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO_MODERNSKY.concat(unionid);
return (SweetWechatUser) redisUtil.get(redisKey);
}
public String getSweetWechatOpenIdModernsky(String unionid) {
if (unionid.isEmpty()) {
return "";
}
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO_MODERNSKY.concat(unionid);
Object obj = redisUtil.get(redisKey);
if (null == obj) {
return "";
} else {
SweetWechatUser sweetWechatUser = (SweetWechatUser) redisUtil.get(redisKey);
return sweetWechatUser.getOpenId();
}
}
public void delSweetWechatUserModernsky(String unionid, String openid) {
if (!unionid.isEmpty()) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO_MODERNSKY.concat(unionid);
redisUtil.del(redisKey);
String redisKeyUnid = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_UNIONID_MODERNSKY.concat(openid);
redisUtil.del(redisKeyUnid);
}
}
// wechat user 摩登
}
......@@ -24,7 +24,7 @@ public class WechatSignUtils {
/**
* 验证签名
*
* 验签不区分服务号 token url配置成一样
* @param signature
* @param timestamp
* @param nonce
......
......@@ -43,8 +43,8 @@ sweet_luck_draw.insert=INSERT INTO sweet_luck_draw (mobile,union_id,luck_draw_nu
# --------------------------答案--------------------------
sweet_answer.insert=INSERT INTO sweet_answer (answer_id,phone,answer_json,img_url) VALUES (?,?,?,?)
# --------------------------关注/取消服务号的用户信息--------------------------
sweet_user.insert=INSERT INTO sweet_wechat_user (user_id,openId,unionId,nickname,sexDesc,sex,headImgUrl,language,country,province,city,subscribeTime,subscribeScene) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
sweet_user.update=UPDATE sweet_wechat_user SET is_cancel = ?, updated_at = ? WHERE unionId = ?
sweet_user.insert=INSERT INTO sweet_wechat_user (user_id,type,openId,unionId,nickname,sexDesc,sex,headImgUrl,language,country,province,city,subscribeTime,subscribeScene) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)
sweet_user.update=UPDATE sweet_wechat_user SET is_cancel = ?, updated_at = ? WHERE unionId = ? and type = ?
# --------------------------提醒记录--------------------------
sweet_remind.insert=INSERT INTO sweet_remind (remind_id,openId,unionId,performancesId) VALUES (?,?,?,?)
# --------------------------小程序登录记录用户解密后信息--------------------------
......@@ -52,4 +52,6 @@ sweet_applet_user.insert=INSERT INTO sweet_applet_user (user_id,openId,unionId,g
# --------------------------用户投票记录--------------------------
sweet_city_vote.insert=INSERT INTO sweet_city_vote (vote_id,phone,openId,unionId,city_code,city_name,day_time) VALUES (?,?,?,?,?,?,?)
sweet_city_vote_stat.insert=INSERT INTO sweet_city_vote_stat (stat_id,city_code,city_name,vote_num) VALUES (?,?,?,?)
sweet_city_vote_stat.update=UPDATE sweet_city_vote_stat SET vote_num = IFNULL(vote_num, 0) + 1, updated_at = ? WHERE city_code = ?
\ No newline at end of file
sweet_city_vote_stat.update=UPDATE sweet_city_vote_stat SET vote_num = IFNULL(vote_num, 0) + 1, updated_at = ? WHERE city_code = ?
# --------------------------防疫答题--------------------------
sweet_antigenic_question.insert=INSERT INTO sweet_antigenic_question (question_id,type,openId,unionId,nickname,address,phone,urgent_phone,keyword1,keyword11,keyword2,keyword3,keyword4,keyword5,keyword6,keyword7) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
\ No newline at end of file
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