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

Commit 52e18c88 authored by 胡佳晨's avatar 胡佳晨

Merge branch 'dev' into test

parents a6d97095 7e6889a9
...@@ -4,10 +4,7 @@ import org.apache.commons.lang3.StringUtils; ...@@ -4,10 +4,7 @@ import org.apache.commons.lang3.StringUtils;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Instant; import java.time.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
...@@ -479,6 +476,16 @@ public abstract class DateUtil { ...@@ -479,6 +476,16 @@ public abstract class DateUtil {
return dayLast + " 23:59:59"; return dayLast + " 23:59:59";
} }
/**
* 秒级时间戳转 LocalDateTime
* @param epochMilli 秒级时间戳
* @return LocalDateTime
*/
public static LocalDateTime ofEpochMilli(long epochMilli){
// return LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneOffset.of("+8"));
return LocalDateTime.ofEpochSecond(epochMilli,0, ZoneOffset.ofHours(8));
}
public static void main(String[] args) { public static void main(String[] args) {
} }
} }
...@@ -71,8 +71,8 @@ liquidnet: ...@@ -71,8 +71,8 @@ liquidnet:
client: client:
admin: admin:
phpPayUrl: http://testdragon.zhengzai.tv phpPayUrl: http://testdragon.zhengzai.tv
phpMallUrl: https://testmall.zhengzai.tv phpMallUrl: https://testmall.zhengzai.tv
platformUrl: https://testplatform.zhengzai.tv platformUrl: https://testplatform.zhengzai.tv
shunfeng: shunfeng:
url: "https://butler-dev-ms.sf-express.com" url: "https://butler-dev-ms.sf-express.com"
sk: 21e9a70f677a2bf29dfa2b3bead4f018 sk: 21e9a70f677a2bf29dfa2b3bead4f018
......
...@@ -97,6 +97,7 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl ...@@ -97,6 +97,7 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl
//退款 //退款
if(notifyMap.containsKey("refund_fee") || notifyMap.containsKey("gmt_refund") || notifyMap.containsKey("out_biz_no")) { if(notifyMap.containsKey("refund_fee") || notifyMap.containsKey("gmt_refund") || notifyMap.containsKey("out_biz_no")) {
returnStr = dragonOrderRefundsService.aliPayRefundCallBack(JSON.toJSONString(notifyMap)); returnStr = dragonOrderRefundsService.aliPayRefundCallBack(JSON.toJSONString(notifyMap));
return returnStr;
} }
// 根据银行订单号获取支付信息 // 根据银行订单号获取支付信息
......
...@@ -123,6 +123,18 @@ public class PayController { ...@@ -123,6 +123,18 @@ public class PayController {
return ResponseDto.success(respDto); return ResponseDto.success(respDto);
} }
@GetMapping("/thirdCheckOrder")
@ApiOperation("三方订单查询")
@ApiResponse(code = 200, message = "接口返回对象参数")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "code", value = "", example = "PAY202107131522368438531155")
})
@ResponseBody
public ResponseDto<DragonPayOrderQueryRespDto> thirdCheckOrder(@RequestParam(value = "code") @NotNull(message = "支付编号不能为空!") String code){
DragonPayOrderQueryRespDto respDto = dragonOrdersService.checkOrderStatusByCode(code);
return ResponseDto.success(respDto);
}
@GetMapping("/manulNotify") @GetMapping("/manulNotify")
@ApiOperation("手动通知商户") @ApiOperation("手动通知商户")
@ApiResponse(code = 200, message = "接口返回对象参数") @ApiResponse(code = 200, message = "接口返回对象参数")
......
...@@ -124,14 +124,12 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService { ...@@ -124,14 +124,12 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
// checkOrderTime(uid); // checkOrderTime(uid);
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId); KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
currentTime = System.currentTimeMillis() - currentTime; currentTime = System.currentTimeMillis() - currentTime;
log.debug("获取订单详情 -> time:" + (currentTime) + "毫秒");
if (!orderTicketVo.getUserId().equals(uid)) { if (!orderTicketVo.getUserId().equals(uid)) {
return null; return null;
} }
if (null != orderTicketVo) { if (null != orderTicketVo) {
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId()); KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
currentTime = System.currentTimeMillis() - currentTime; currentTime = System.currentTimeMillis() - currentTime;
log.debug("获取演出详情 -> time:" + (currentTime) + "毫秒");
List<KylinOrderTicketEntitiesVo> kylinOrderTicketEntitiesVoList = orderTicketVo.getEntitiesVoList(); List<KylinOrderTicketEntitiesVo> kylinOrderTicketEntitiesVoList = orderTicketVo.getEntitiesVoList();
KylinTicketVo ticketVo = null; KylinTicketVo ticketVo = null;
...@@ -147,7 +145,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService { ...@@ -147,7 +145,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
} }
} }
currentTime = System.currentTimeMillis() - currentTime; currentTime = System.currentTimeMillis() - currentTime;
log.debug("巡演票数据 -> time:" + (currentTime) + "毫秒");
orderTicketVo.setIsTrueName(ticketVo.getIsTrueName()); orderTicketVo.setIsTrueName(ticketVo.getIsTrueName());
orderTicketVo.setNoticeImage(performanceVo.getNoticeImage()); orderTicketVo.setNoticeImage(performanceVo.getNoticeImage());
...@@ -168,7 +165,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService { ...@@ -168,7 +165,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
orderTicketVo.setQrCode(""); orderTicketVo.setQrCode("");
} }
currentTime = System.currentTimeMillis() - currentTime; currentTime = System.currentTimeMillis() - currentTime;
log.debug("获取二维码 -> time:" + (currentTime) + "毫秒");
// 数据脱敏 // 数据脱敏
for (KylinOrderTicketEntitiesVo item : kylinOrderTicketEntitiesVoList) { for (KylinOrderTicketEntitiesVo item : kylinOrderTicketEntitiesVoList) {
...@@ -180,7 +176,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService { ...@@ -180,7 +176,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
} }
} }
currentTime = System.currentTimeMillis() - currentTime; currentTime = System.currentTimeMillis() - currentTime;
log.debug("入场人加密 -> time:" + (currentTime) + "毫秒");
//计算 倒计时 //计算 倒计时
Date nowDate = DateUtil.parse(DateUtil.getNowTime(), "yyyy-MM-dd HH:mm:ss"); Date nowDate = DateUtil.parse(DateUtil.getNowTime(), "yyyy-MM-dd HH:mm:ss");
if (orderTicketVo.getStatus().equals(KylinTableStatusConst.ORDER_STATUS0)) { if (orderTicketVo.getStatus().equals(KylinTableStatusConst.ORDER_STATUS0)) {
...@@ -195,7 +190,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService { ...@@ -195,7 +190,6 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
vo.setRestTime(0L); vo.setRestTime(0L);
} }
currentTime = System.currentTimeMillis() - currentTime; currentTime = System.currentTimeMillis() - currentTime;
log.debug("获取倒计时 -> time:" + (currentTime) + "毫秒");
Integer orderExpressStatus = dataUtils.getOrderExpressInfo(orderTicketVo.getOrderTicketsId()); Integer orderExpressStatus = dataUtils.getOrderExpressInfo(orderTicketVo.getOrderTicketsId());
vo.setExpressStatus(orderExpressStatus); vo.setExpressStatus(orderExpressStatus);
...@@ -207,7 +201,9 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService { ...@@ -207,7 +201,9 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
break; break;
} }
OrderRefundListVo data = OrderRefundListVo.getNew(); OrderRefundListVo data = OrderRefundListVo.getNew();
data.setOrderRefundCode(item.getOrderRefundCode().substring(item.getOrderRefundCode().length() - 10)); if(item.getOrderRefundCode().length()>20) {
data.setOrderRefundCode(item.getOrderRefundCode().substring(item.getOrderRefundCode().length() - 10));
}
data.setOrderRefundsId(item.getOrderRefundsId()); data.setOrderRefundsId(item.getOrderRefundsId());
data.setStatus(item.getStatus()); data.setStatus(item.getStatus());
data.setPrice(item.getPrice()); data.setPrice(item.getPrice());
...@@ -231,19 +227,18 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService { ...@@ -231,19 +227,18 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
} else { } else {
vo.setIsCanRefund(0); vo.setIsCanRefund(0);
} }
currentTime = System.currentTimeMillis() - currentTime;
log.debug("是否支持退款 -> time:" + (currentTime) + "毫秒");
currentTime = System.currentTimeMillis() - currentTime;
log.debug("循环退款详情 -> time:" + (currentTime) + "毫秒");
orderTicketVo.setOrderRefundListVos(orderRefundListVos); orderTicketVo.setOrderRefundListVos(orderRefundListVos);
orderTicketVo.setOrderCode(orderTicketVo.getOrderCode().substring(orderTicketVo.getOrderCode().length() - 10)); if(orderTicketVo.getOrderCode().length()>20) {
orderTicketVo.setOrderCode(orderTicketVo.getOrderCode().substring(orderTicketVo.getOrderCode().length() - 10));
}
vo.setOrderTicketVo(orderTicketVo); vo.setOrderTicketVo(orderTicketVo);
vo.setEnterDescribe(dataUtils.getEnterInfo(performanceVo.getType(), orderTicketVo.getGetTicketType(), orderTicketVo.getIsStudent(), ticketVo.getIsTrueName())); vo.setEnterDescribe(dataUtils.getEnterInfo(performanceVo.getType(), orderTicketVo.getGetTicketType(), orderTicketVo.getIsStudent(), ticketVo.getIsTrueName()));
} }
log.info(UserPathDto.setData("订单详情", orderId, vo)); log.info(UserPathDto.setData("订单详情", orderId, vo));
return vo; return vo;
} catch (Exception e) { } catch (Exception e) {
log.info("订单详情异常:",e);
return null; return null;
} }
} }
...@@ -300,8 +295,9 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService { ...@@ -300,8 +295,9 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
kylinOrderTicketEntitiesPreRefundVos.add(refundVo); kylinOrderTicketEntitiesPreRefundVos.add(refundVo);
} }
orderTicketVo.setFieldName(performanceVo.getFieldName()); orderTicketVo.setFieldName(performanceVo.getFieldName());
orderTicketVo.setOrderCode(orderTicketVo.getOrderCode().substring(orderTicketVo.getOrderCode().length() - 10)); if(orderTicketVo.getOrderCode().length()>20) {
orderTicketVo.setOrderCode(orderTicketVo.getOrderCode().substring(orderTicketVo.getOrderCode().length() - 10));
}
BeanUtils.copyProperties(orderTicketVo, vo); BeanUtils.copyProperties(orderTicketVo, vo);
vo.setIsTrueName(performanceVo.getIsTrueName()); vo.setIsTrueName(performanceVo.getIsTrueName());
vo.setEntitiesPreRefundVos(kylinOrderTicketEntitiesPreRefundVos); vo.setEntitiesPreRefundVos(kylinOrderTicketEntitiesPreRefundVos);
...@@ -324,9 +320,13 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService { ...@@ -324,9 +320,13 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
return ResponseDto.failure(ErrorMapping.get("20003")); return ResponseDto.failure(ErrorMapping.get("20003"));
} }
orderTicketVo.setFieldName(performanceVo.getFieldName()); orderTicketVo.setFieldName(performanceVo.getFieldName());
orderTicketVo.setOrderCode(orderTicketVo.getOrderCode().substring(orderTicketVo.getOrderCode().length() - 10)); if(orderTicketVo.getOrderCode().length()>20) {
orderTicketVo.setOrderCode(orderTicketVo.getOrderCode().substring(orderTicketVo.getOrderCode().length() - 10));
}
KylinOrderRefundsVo kylinOrderRefundsVoBase = dataUtils.getOrderRefundVo(orderRefundId); KylinOrderRefundsVo kylinOrderRefundsVoBase = dataUtils.getOrderRefundVo(orderRefundId);
kylinOrderRefundsVoBase.setOrderRefundCode(kylinOrderRefundsVoBase.getOrderRefundCode().substring(kylinOrderRefundsVoBase.getOrderRefundCode().length() - 10)); if(kylinOrderRefundsVoBase.getOrderRefundCode().length()>20) {
kylinOrderRefundsVoBase.setOrderRefundCode(kylinOrderRefundsVoBase.getOrderRefundCode().substring(kylinOrderRefundsVoBase.getOrderRefundCode().length() - 10));
}
vo.setKylinOrderRefundsVoBaseList(kylinOrderRefundsVoBase); vo.setKylinOrderRefundsVoBaseList(kylinOrderRefundsVoBase);
vo.setOrderTicketVo(orderTicketVo); vo.setOrderTicketVo(orderTicketVo);
return ResponseDto.success(vo); return ResponseDto.success(vo);
......
...@@ -97,6 +97,7 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl ...@@ -97,6 +97,7 @@ public class PayChannelStrategyAlipayImpl extends AbstractPayChannelStrategyImpl
//退款 //退款
if(notifyMap.containsKey("refund_fee") || notifyMap.containsKey("gmt_refund") || notifyMap.containsKey("out_biz_no")) { if(notifyMap.containsKey("refund_fee") || notifyMap.containsKey("gmt_refund") || notifyMap.containsKey("out_biz_no")) {
returnStr = dragonOrderRefundsService.aliPayRefundCallBack(JSON.toJSONString(notifyMap)); returnStr = dragonOrderRefundsService.aliPayRefundCallBack(JSON.toJSONString(notifyMap));
return returnStr;
} }
// 根据银行订单号获取支付信息 // 根据银行订单号获取支付信息
......
...@@ -182,3 +182,30 @@ CREATE TABLE `sweet_manual_shop` ...@@ -182,3 +182,30 @@ CREATE TABLE `sweet_manual_shop`
DEFAULT CHARSET = utf8 DEFAULT CHARSET = utf8
COLLATE = utf8_unicode_ci COLLATE = utf8_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '电子宣传手册商铺表'; ROW_FORMAT = DYNAMIC COMMENT '电子宣传手册商铺表';
-- 正在现场服务号关注事件储存用户信息表
drop TABLE if exists `sweet_wechat_user`;
CREATE TABLE `sweet_wechat_user`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`user_id` varchar(200) NOT NULL DEFAULT '' COMMENT 'user_id',
`openId` varchar(200) NOT NULL DEFAULT '' COMMENT 'openId',
`unionId` varchar(200) NOT NULL DEFAULT '' COMMENT 'unionId',
`nickname` varchar(200) NOT NULL DEFAULT '' COMMENT '昵称',
`sexDesc` varchar(200) NOT NULL DEFAULT '' COMMENT '性别',
`sex` tinyint NOT NULL DEFAULT 0 COMMENT '性别 男1',
`headImgUrl` varchar(200) NOT NULL DEFAULT '' COMMENT '头像',
`language` varchar(200) NOT NULL DEFAULT '' COMMENT 'zh_CN',
`country` varchar(200) NOT NULL DEFAULT '' COMMENT '国家',
`province` varchar(200) NOT NULL DEFAULT '' COMMENT '省',
`city` varchar(200) NOT NULL DEFAULT '' COMMENT '市',
`subscribeTime` datetime NULL DEFAULT null COMMENT '关注时间',
`subscribeScene` varchar(200) NOT NULL DEFAULT '' COMMENT 'ADD_SCENE_SEARCH 关注方式',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`),
KEY `sweet_wechat_user_user_id` (`user_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '正在现场服务号关注事件储存用户信息表';
...@@ -18,6 +18,8 @@ public class SweetConstant { ...@@ -18,6 +18,8 @@ public class SweetConstant {
public final static String REDIS_KEY_SWEET_REMIND="sweet:remind:unionId:"; public final static String REDIS_KEY_SWEET_REMIND="sweet:remind:unionId:";
public static final String REDIS_KEY_SWEET_REMIND_ALL = "sweet:remind:unionId*"; public static final String REDIS_KEY_SWEET_REMIND_ALL = "sweet:remind:unionId*";
public final static String REDIS_KEY_SWEET_WECHAT_USER_INFO="sweet:wechatUser:unionId:";
public enum ManualPosition { public enum ManualPosition {
artist("艺人"), artist("艺人"),
signingTime("签售时间"), signingTime("签售时间"),
......
...@@ -194,7 +194,7 @@ public class SweetAppletController { ...@@ -194,7 +194,7 @@ public class SweetAppletController {
if (uid.equalsIgnoreCase("0")) { if (uid.equalsIgnoreCase("0")) {
return ResponseDto.failure(); return ResponseDto.failure();
} }
redisDataUtils.setArtistsRelationRedisVo(uid, artistsId, "sign"); redisDataUtils.setArtistsRelationRedisVo(uid, artistsId, "watch");
return ResponseDto.success(); return ResponseDto.success();
} }
...@@ -209,7 +209,7 @@ public class SweetAppletController { ...@@ -209,7 +209,7 @@ public class SweetAppletController {
if (uid.equalsIgnoreCase("0")) { if (uid.equalsIgnoreCase("0")) {
return ResponseDto.failure(); return ResponseDto.failure();
} }
redisDataUtils.setArtistsRelationRedisVo(uid, artistsId, "watch"); redisDataUtils.setArtistsRelationRedisVo(uid, artistsId, "sign");
return ResponseDto.success(); return ResponseDto.success();
} }
......
...@@ -20,6 +20,9 @@ public class SweetWechatActionCallbackController { ...@@ -20,6 +20,9 @@ public class SweetWechatActionCallbackController {
@Autowired @Autowired
private SweetWechatCallbackServiceImpl sweetWechatCallbackService; private SweetWechatCallbackServiceImpl sweetWechatCallbackService;
@Autowired
private WechatSignUtils wechatSignUtils;
@GetMapping("record") @GetMapping("record")
@ApiOperation("get") @ApiOperation("get")
public void record( public void record(
...@@ -30,7 +33,7 @@ public class SweetWechatActionCallbackController { ...@@ -30,7 +33,7 @@ public class SweetWechatActionCallbackController {
@RequestParam() String echostr @RequestParam() String echostr
) { ) {
try { try {
if (WechatSignUtils.checkSignature(signature, timestamp, nonce)) { if (wechatSignUtils.checkSignature(signature, timestamp, nonce)) {
log.info("验签通过"); log.info("验签通过");
PrintWriter out = response.getWriter(); PrintWriter out = response.getWriter();
out.print(echostr); out.print(echostr);
...@@ -47,6 +50,7 @@ public class SweetWechatActionCallbackController { ...@@ -47,6 +50,7 @@ public class SweetWechatActionCallbackController {
@ApiOperation("post") @ApiOperation("post")
public String record( public String record(
@RequestBody String requestBody, @RequestBody String requestBody,
// @RequestParam String requestBody,
@RequestParam("signature") String signature, @RequestParam("signature") String signature,
@RequestParam("timestamp") String timestamp, @RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce, @RequestParam("nonce") String nonce,
...@@ -57,7 +61,7 @@ public class SweetWechatActionCallbackController { ...@@ -57,7 +61,7 @@ public class SweetWechatActionCallbackController {
log.info("\n接收微信请求:[openid=[{}], [signature=[{}], encType=[{}], msgSignature=[{}]," log.info("\n接收微信请求:[openid=[{}], [signature=[{}], encType=[{}], msgSignature=[{}],"
+ " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ", + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
openid, signature, encType, msgSignature, timestamp, nonce, requestBody); openid, signature, encType, msgSignature, timestamp, nonce, requestBody);
if (!WechatSignUtils.checkSignature(signature, timestamp, nonce)) { if (!wechatSignUtils.checkSignature(signature, timestamp, nonce)) {
log.info("验签未通过,非法请求,可能属于伪造的请求!"); log.info("验签未通过,非法请求,可能属于伪造的请求!");
return ""; return "";
} }
......
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 正在现场服务号关注事件储存用户信息表
* </p>
*
* @author jiangxiulong
* @since 2021-08-03
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetWechatUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* user_id
*/
private String userId;
/**
* openId
*/
@TableField("openId")
private String openId;
/**
* unionId
*/
@TableField("unionId")
private String unionId;
/**
* 昵称
*/
private String nickname;
/**
* 性别
*/
@TableField("sexDesc")
private String sexDesc;
/**
* 性别 男1
*/
private Integer sex;
/**
* 头像
*/
@TableField("headImgUrl")
private String headImgUrl;
/**
* zh_CN
*/
private String language;
/**
* 国家
*/
private String country;
/**
* 省
*/
private String province;
/**
* 市
*/
private String city;
/**
* 关注时间
*/
@TableField("subscribeTime")
private LocalDateTime subscribeTime;
/**
* ADD_SCENE_SEARCH 关注方式
*/
@TableField("subscribeScene")
private String subscribeScene;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
private static final SweetWechatUser obj = new SweetWechatUser();
public static SweetWechatUser getNew() {
try {
return (SweetWechatUser) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetWechatUser();
}
}
}
package com.liquidnet.service.sweet.handler; package com.liquidnet.service.sweet.handler;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.mapper.SweetWechatUserMapper;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.common.session.WxSessionManager;
...@@ -8,8 +14,10 @@ import me.chanjar.weixin.mp.api.WxMpService; ...@@ -8,8 +14,10 @@ import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.result.WxMpUser; import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Map; import java.util.Map;
/** /**
...@@ -23,6 +31,11 @@ import java.util.Map; ...@@ -23,6 +31,11 @@ import java.util.Map;
@Component @Component
@Slf4j @Slf4j
public class SubscribeHandler implements WxMpMessageHandler { public class SubscribeHandler implements WxMpMessageHandler {
@Autowired
private SweetWechatUserMapper sweetWechatUserMapper;
@Autowired
private RedisDataUtils redisDataUtils;
@Override @Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) throws WxErrorException { WxSessionManager sessionManager) throws WxErrorException {
...@@ -34,6 +47,37 @@ public class SubscribeHandler implements WxMpMessageHandler { ...@@ -34,6 +47,37 @@ public class SubscribeHandler implements WxMpMessageHandler {
return null; return null;
} }
log.info("根据 openId:[{}]获取到的微信用户信息:[{}]", wxMessage.getFromUser(), wxMpUser.toString()); log.info("根据 openId:[{}]获取到的微信用户信息:[{}]", wxMessage.getFromUser(), wxMpUser.toString());
// 记录用户信息
SweetWechatUser userInfo = sweetWechatUserMapper.selectOne(Wrappers.lambdaQuery(SweetWechatUser.class).eq(SweetWechatUser::getOpenId, wxMpUser.getOpenId()));
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());
sweetWechatUserMapper.insert(sweetWechatUser);
} else {
sweetWechatUser.setUpdatedAt(LocalDateTime.now());
sweetWechatUserMapper.update(sweetWechatUser, Wrappers.lambdaUpdate(SweetWechatUser.class).eq(SweetWechatUser::getUserId, userInfo.getUserId()));
}
String unionId = wxMpUser.getUnionId();
if (!unionId.isEmpty()) {
if (null != userInfo) {
sweetWechatUser.setMid(userInfo.getMid());
sweetWechatUser.setUserId(userInfo.getUserId());
sweetWechatUser.setCreatedAt(userInfo.getCreatedAt());
}
redisDataUtils.setSweetWechatUser(sweetWechatUser);
}
return null; return null;
} }
......
package com.liquidnet.service.sweet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
/**
* <p>
* 正在现场服务号关注事件储存用户信息表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2021-08-03
*/
public interface SweetWechatUserMapper extends BaseMapper<SweetWechatUser> {
}
package com.liquidnet.service.sweet.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
/**
* <p>
* 正在现场服务号关注事件储存用户信息表 服务类
* </p>
*
* @author jiangxiulong
* @since 2021-08-03
*/
public interface ISweetWechatUserService extends IService<SweetWechatUser> {
}
...@@ -70,10 +70,10 @@ public class SweetWechatCallbackServiceImpl { ...@@ -70,10 +70,10 @@ public class SweetWechatCallbackServiceImpl {
.end(); .end();
// 取消关注事件 // 取消关注事件
router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) /*router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.UNSUBSCRIBE) .event(WxConsts.EventType.UNSUBSCRIBE)
.handler(unsubscribeHandler) .handler(unsubscribeHandler)
.end(); .end();*/
return router; return router;
} }
...@@ -82,12 +82,13 @@ public class SweetWechatCallbackServiceImpl { ...@@ -82,12 +82,13 @@ public class SweetWechatCallbackServiceImpl {
WxMpConfigStorage wxMpConfig = wxMpConfig(appid, secret, token, aeskey); WxMpConfigStorage wxMpConfig = wxMpConfig(appid, secret, token, aeskey);
WxMpService wxMpService = wxMpService(wxMpConfig); WxMpService wxMpService = wxMpService(wxMpConfig);
String out = null; String out = null;
if (encType == null) { if (encType == null || encType.isEmpty()) {
// 明文传输的消息 // 明文传输的消息
WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(requestBody); WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(requestBody);
log.info("\n消息内容为:\n[{}] ", inMessage.toString()); log.info("\n消息内容为:\n[{}] ", inMessage.toString());
WxMpXmlOutMessage outMessage = messageRouter(wxMpService).route(inMessage); WxMpXmlOutMessage outMessage = messageRouter(wxMpService).route(inMessage);
if (outMessage == null) { if (outMessage == null) {
// 假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试
return ""; return "";
} }
out = outMessage.toXml(); out = outMessage.toXml();
......
package com.liquidnet.service.sweet.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.sweet.entity.SweetWechatUser;
import com.liquidnet.service.sweet.mapper.SweetWechatUserMapper;
import com.liquidnet.service.sweet.service.ISweetWechatUserService;
import org.springframework.stereotype.Service;
/**
* <p>
* 正在现场服务号关注事件储存用户信息表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2021-08-03
*/
@Service
public class SweetWechatUserServiceImpl extends ServiceImpl<SweetWechatUserMapper, SweetWechatUser> implements ISweetWechatUserService {
}
...@@ -10,10 +10,7 @@ import com.liquidnet.service.sweet.dto.SweetManualAppletDto; ...@@ -10,10 +10,7 @@ import com.liquidnet.service.sweet.dto.SweetManualAppletDto;
import com.liquidnet.service.sweet.dto.SweetManualArtistList2Dto; import com.liquidnet.service.sweet.dto.SweetManualArtistList2Dto;
import com.liquidnet.service.sweet.dto.SweetManualArtistListDto; import com.liquidnet.service.sweet.dto.SweetManualArtistListDto;
import com.liquidnet.service.sweet.dto.SweetManualArtistStageListDto; import com.liquidnet.service.sweet.dto.SweetManualArtistStageListDto;
import com.liquidnet.service.sweet.entity.SweetManualNotify; import com.liquidnet.service.sweet.entity.*;
import com.liquidnet.service.sweet.entity.SweetManualShop;
import com.liquidnet.service.sweet.entity.SweetManualSort;
import com.liquidnet.service.sweet.entity.SweetRichtext;
import com.liquidnet.service.sweet.mapper.*; import com.liquidnet.service.sweet.mapper.*;
import com.liquidnet.service.sweet.vo.SweetArtistsRelationVo; import com.liquidnet.service.sweet.vo.SweetArtistsRelationVo;
import com.liquidnet.service.sweet.vo.SweetRemindVo; import com.liquidnet.service.sweet.vo.SweetRemindVo;
...@@ -203,18 +200,31 @@ public class RedisDataUtils { ...@@ -203,18 +200,31 @@ public class RedisDataUtils {
SweetArtistsRelationVo vo = getArtistsRelationRedisVo(uid); SweetArtistsRelationVo vo = getArtistsRelationRedisVo(uid);
vo.setUid(uid); vo.setUid(uid);
if (type.equalsIgnoreCase("sign")) { if (type.equalsIgnoreCase("sign")) {
if (vo.getSignList().contains(artistsId)) { if (vo.getSignList() == null) {
vo.getSignList().remove(artistsId); ArrayList<String> signList = new ArrayList<>();
signList.add(artistsId);
vo.setSignList(signList);
} else { } else {
vo.getSignList().add(artistsId); if (vo.getSignList().contains(artistsId)) {
vo.getSignList().remove(artistsId);
} else {
vo.getSignList().add(artistsId);
}
} }
} else if (type.equalsIgnoreCase("watch")) { } else if (type.equalsIgnoreCase("watch")) {
if (vo.getWatchList().contains(artistsId)) { if (vo.getSignList() == null) {
vo.getWatchList().remove(artistsId); ArrayList<String> watchList = new ArrayList<>();
watchList.add(artistsId);
vo.setWatchList(watchList);
} else { } else {
vo.getWatchList().add(artistsId); if (vo.getWatchList().contains(artistsId)) {
vo.getWatchList().remove(artistsId);
} else {
vo.getWatchList().add(artistsId);
}
} }
} }
redisUtil.set(redisKey, vo); redisUtil.set(redisKey, vo);
} }
...@@ -233,7 +243,7 @@ public class RedisDataUtils { ...@@ -233,7 +243,7 @@ public class RedisDataUtils {
//获取 商铺 //获取 商铺
public List<SweetManualShop> setManualShopRedisData(String manualId) { public List<SweetManualShop> setManualShopRedisData(String manualId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_SHOP.concat(manualId); String redisKey = SweetConstant.REDIS_KEY_SWEET_SHOP.concat(manualId);
List<SweetManualShop> list = sweetManualShopMapper.selectList(Wrappers.lambdaQuery(SweetManualShop.class).eq(SweetManualShop::getManualId, manualId).orderBy(true,false,SweetManualShop::getSort)); List<SweetManualShop> list = sweetManualShopMapper.selectList(Wrappers.lambdaQuery(SweetManualShop.class).eq(SweetManualShop::getManualId, manualId).orderBy(true, false, SweetManualShop::getSort));
redisUtil.set(redisKey, list); redisUtil.set(redisKey, list);
return list; return list;
} }
...@@ -266,4 +276,10 @@ public class RedisDataUtils { ...@@ -266,4 +276,10 @@ public class RedisDataUtils {
redisUtil.set(redisKey, sweetRemindVo); redisUtil.set(redisKey, sweetRemindVo);
} }
// 正在现场服务号关注事件储存用户信息
public void setSweetWechatUser(SweetWechatUser sweetWechatUser) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_WECHAT_USER_INFO.concat(sweetWechatUser.getUnionId());
redisUtil.set(redisKey, sweetWechatUser);
}
} }
package com.liquidnet.service.sweet.utils; package com.liquidnet.service.sweet.utils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
...@@ -14,11 +15,12 @@ import java.util.Arrays; ...@@ -14,11 +15,12 @@ import java.util.Arrays;
* @author jiangxiulong * @author jiangxiulong
* @since 2021-07-29 3:19 下午 * @since 2021-07-29 3:19 下午
*/ */
@Component
public class WechatSignUtils { public class WechatSignUtils {
// 与接口配置信息中的 Token 要一致 // 与接口配置信息中的 Token 要一致
@Value("${liquidnet.wechat.zhengzai.service.token}") @Value("${liquidnet.wechat.zhengzai.service.token}")
private static String token; private String token;
/** /**
* 验证签名 * 验证签名
...@@ -28,7 +30,7 @@ public class WechatSignUtils { ...@@ -28,7 +30,7 @@ public class WechatSignUtils {
* @param nonce * @param nonce
* @return * @return
*/ */
public static boolean checkSignature(String signature, String timestamp, String nonce) { public boolean checkSignature(String signature, String timestamp, String nonce) {
String[] arr = new String[]{token, timestamp, nonce}; String[] arr = new String[]{token, timestamp, nonce};
// 将 token、timestamp、nonce 三个参数进行字典序排序 // 将 token、timestamp、nonce 三个参数进行字典序排序
Arrays.sort(arr); Arrays.sort(arr);
...@@ -59,7 +61,7 @@ public class WechatSignUtils { ...@@ -59,7 +61,7 @@ public class WechatSignUtils {
* @param byteArray * @param byteArray
* @return * @return
*/ */
private static String byteToStr(byte[] byteArray) { private String byteToStr(byte[] byteArray) {
String strDigest = ""; String strDigest = "";
for (int i = 0; i < byteArray.length; i++) { for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]); strDigest += byteToHexStr(byteArray[i]);
...@@ -73,7 +75,7 @@ public class WechatSignUtils { ...@@ -73,7 +75,7 @@ public class WechatSignUtils {
* @param mByte * @param mByte
* @return * @return
*/ */
private static String byteToHexStr(byte mByte) { private String byteToHexStr(byte mByte) {
char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] tempArr = new char[2]; char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.sweet.mapper.SweetWechatUserMapper">
</mapper>
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