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

Commit 4d8e9cb6 authored by jiangxiulong's avatar jiangxiulong

Merge remote-tracking branch 'origin/dev' into dev

parents 40b1a298 28c7ae24
......@@ -141,7 +141,7 @@ public class DragonConstant {
public enum PayTypeEnum{
PAYMENT_TYPE_APP_ALIPAY("APPALIPAY","alipay","app","App内支付宝支付"),
PAYMENT_TYPE_APP_WEPAY("APPWEPAY","wepay","app","App内微信支付"),
PAYMENT_TYPE_APP_IAP("APPIAP","applepay","app","App内IAP(In-App Purchase)支付,iOS虚拟道具支付"),
PAYMENT_TYPE_APP_IAP("APPIAP","iap","app","App内IAP(In-App Purchase)支付,iOS虚拟道具支付"),
PAYMENT_TYPE_WAP_ALIPAY("WAPALIPAY","alipay","wap","手机网页内支付宝支付"),
PAYMENT_TYPE_WAP_WEPAY("WAPWEPAY","wepay","wap","手机网页调起微信支付"),
PAYMENT_TYPE_WEB_ALIPAY("WEBALIPAY","alipay","web","电脑网页内支付宝即时到账支付"),
......@@ -153,7 +153,7 @@ public class DragonConstant {
private String message;
private String payType;
private String deviceFrom;
PayTypeEnum(String code, String message,String payType,String deviceFrom) {
PayTypeEnum(String code,String payType,String deviceFrom,String message) {
this.code = code;
this.message = message;
this.payType = payType;
......@@ -217,8 +217,8 @@ public class DragonConstant {
* MYSQL_REDIS_QUEUE
*/
public enum MysqlRedisQueueEnum{
DRAGON_PAY_KEY("dragon-pay","同步数据-支付"),
DRAGON_REFUND_KEY ("dragon-refund","同步数据-退款"),
DRAGON_PAY_KEY("dragon:stream:dragon-pay","同步数据-支付"),
DRAGON_REFUND_KEY ("dragon:stream:dragon-refund","同步数据-退款"),
DRAGON_PAY_GROUP("dragon-pay-group","同步数据-支付-组"),
DRAGON_REFUND_GROUP ("dragon-refund-group","同步数据-退款-组");
private String code;
......
package com.liquidnet.service.dragon.dto;
import com.alibaba.fastjson.JSON;
import lombok.Data;
import java.math.BigDecimal;
......@@ -31,4 +32,9 @@ public class DragonPayBaseReqDto {
private String quitUrl;
private String showUrl;
private String returnUrl;
@Override
public String toString(){
return JSON.toJSONString(this);
}
}
......@@ -56,10 +56,13 @@ public class AdamUserInfoServiceImpl implements IAdamUserInfoService {
@Override
// @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void edit(AdamUserInfoVo userInfoVo) {
userInfoVo.setCreateAt(null);
Document updateDoc = Document.parse(JsonUtils.toJson(userInfoVo));
updateDoc.replace("updatedAt", userInfoVo.getUpdatedAt());
long s = System.currentTimeMillis();
UpdateResult updateResult = mongoTemplate.getCollection(AdamUserInfoVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("uid").is(userInfoVo.getUid())).getQueryObject(),
new Document("$set", Document.parse(JsonUtils.toJson(userInfoVo)))
new Document("$set", updateDoc)
);
log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
if (updateResult.getModifiedCount() <= 0) {
......
......@@ -44,7 +44,7 @@ public abstract class DragonPayBiz {
orders.setOrderCode(dragonPayBaseReqDto.getOrderCode());
orders.setClientIp(dragonPayBaseReqDto.getClientIp());
orders.setNotifyUrl(dragonPayBaseReqDto.getNotifyUrl());
orders.setPaymentType(DragonConstant.PayTypeEnum.PAYMENT_TYPE_APP_IAP.getCode());
orders.setPaymentType((dragonPayBaseReqDto.getDeviceFrom()+dragonPayBaseReqDto.getPayType()).toUpperCase());
// orders.setPaymentId();
orders.setPaymentAt(LocalDateTime.now());
// orders.setFinishedAt();
......
......@@ -5,7 +5,6 @@ import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
......@@ -15,13 +14,14 @@ import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.dragon.channel.wepay.resp.AliPayRefundReturnCallBackDto;
import com.liquidnet.service.dragon.channel.wepay.resp.WePayRefundReturnCallBackDto;
import com.liquidnet.service.dragon.channel.wepay.resp.WePayRefundReturnCallBackInfoDto;
import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.dto.*;
import com.liquidnet.service.dragon.channel.wepay.resp.WePayRefundReturnDto;
import com.liquidnet.service.dragon.constant.DragonConstant;
import com.liquidnet.service.dragon.dto.DragonRefundAppDto;
import com.liquidnet.service.dragon.dto.DragonRefundChannelDto;
import com.liquidnet.service.dragon.dto.NotifyUrlDto;
import com.liquidnet.service.dragon.dto.RefundContentDto;
import com.liquidnet.service.dragon.service.IDragonOrderRefundsService;
import com.liquidnet.service.dragon.utils.PayAlipayUtils;
import com.liquidnet.service.dragon.utils.PayWepayUtils;
import com.liquidnet.service.dragon.utils.XmlUtil;
import com.liquidnet.service.dragon.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
......@@ -30,8 +30,6 @@ import org.apache.http.entity.StringEntity;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.StreamRecords;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
......@@ -43,7 +41,8 @@ import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.SortedMap;
import java.util.TreeMap;
@Slf4j
@Service
......@@ -52,7 +51,9 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
RedisUtil redisUtil;
DataUtils dataUtils;
@Autowired
MqHandleUtil mqHandleUtil;
@Value("${liquidnet.dragon.url}")
private String url;
......@@ -62,11 +63,12 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
LocalDateTime nowTime = LocalDateTime.now();
String refundCode = IDGenerator.refundCode();
//创建退款单
boolean insertResult = sendMySqlRedis(
boolean insertResult = mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund.insert"),
new Object[]{code, refundCode, orderRefundCode, price, reason, notifyUrl, paymentType, nowTime, nowTime}
new Object[]{code, refundCode, orderRefundCode, price, reason, notifyUrl, paymentType, nowTime, nowTime},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
redisUtil.set(DragonConstant.REFUND_REDIS_KET + code, notifyUrl);
dataUtils.setRefundNotifyUrl(DragonConstant.REFUND_REDIS_KET + code, notifyUrl);
DragonRefundChannelDto dto = null;
String localWePayCallBackUrl = url + "/refund/callBack/wepay";
if (insertResult) {
......@@ -176,9 +178,10 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
refundError = wePayRefundReturnDto.getReturnMsg();
}
// 修改退款订单
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_error.update"),
new Object[]{nowTime, refundError, refundStatus, code}
new Object[]{nowTime, refundError, refundStatus, code},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
} catch (Exception e) {
e.printStackTrace();
......@@ -200,17 +203,19 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
}
// 创建退款日志
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_log.insert"),
new Object[]{orderRefundId, paymentType, data, nowTime, nowTime}
new Object[]{orderRefundId, paymentType, data, nowTime, nowTime},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
try {
if (wePayRefundReturnDto.getReturnCode().equalsIgnoreCase("SUCCESS")) {
refundStatus = DragonConstant.RefundStatusEnum.STATUS_REFUNDED.getCode();
}
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_success.update"),
new Object[]{nowTime, null, refundStatus, code}
new Object[]{nowTime, null, refundStatus, code},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
} catch (Exception e) {
e.printStackTrace();
......@@ -266,9 +271,10 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
refundError = response.getSubMsg();
}
// 修改退款订单
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_error.update"),
new Object[]{nowTime, refundError, refundStatus, code}
new Object[]{nowTime, refundError, refundStatus, code},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
} catch (Exception e) {
e.printStackTrace();
......@@ -290,9 +296,10 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
}
// 创建退款日志
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_log.insert"),
new Object[]{orderRefundId, paymentType, JSON.toJSONString(response.getBody()), nowTime, nowTime}
new Object[]{orderRefundId, paymentType, JSON.toJSONString(response.getBody()), nowTime, nowTime},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
try {
String refundAt = "";
......@@ -302,9 +309,10 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
} else {
refundStatus = DragonConstant.RefundStatusEnum.STATUS_REFUNDING.getCode();
}
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_success.update"),
new Object[]{nowTime, refundAt, refundStatus, code}
new Object[]{nowTime, refundAt, refundStatus, code},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
} catch (Exception e) {
e.printStackTrace();
......@@ -356,13 +364,15 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
String outRefundNo = info.getOutRefundNo();
String refundAt = info.getSuccessTime();
try {
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_log.insert"),
new Object[]{outRefundNo, info.getRefundRequestSource(), JSON.toJSONString(info), nowTime, nowTime}
new Object[]{outRefundNo, info.getRefundRequestSource(), JSON.toJSONString(info), nowTime, nowTime},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_success.update"),
new Object[]{nowTime, refundAt, DragonConstant.RefundStatusEnum.STATUS_REFUNDED.getCode(), outRefundNo}
new Object[]{nowTime, refundAt, DragonConstant.RefundStatusEnum.STATUS_REFUNDED.getCode(), outRefundNo},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
NotifyUrlDto dto = new NotifyUrlDto();
......@@ -371,20 +381,9 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
} else {
dto.setStatus(0);
}
// dto.setOrderCode();
// dto.setCode();
// dto.setType();
// dto.setPrice();
// dto.setPaymentType();
// dto.setPaymentId();
// dto.setPaymentAt();
dto.setOrderRefundCode(info.getOutRefundNo());
dto.setRefundCode(info.getOutTradeNo());
dto.setRefundPrice(info.getRefundFee());
// dto.setRefundReason();
// dto.setRefundId(info.getRefundId());
// dto.setRefundType(info.getrefund);
dto.setRefundAt(refundAt);
dto.setRefundError(callBackDto.getReturnMsg());
sendNotifyUrl(dto);
......@@ -418,14 +417,16 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
if (response.isSuccess()) {
try {
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_log.insert"),
new Object[]{response.getOutRequestNo(), response.getRefundReason(), jsonStr, nowTime, nowTime}
new Object[]{response.getOutRequestNo(), response.getRefundReason(), jsonStr, nowTime, nowTime},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
log.debug("SEND MQ INSERT");
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_success.update"),
new Object[]{nowTime, callBackDto.getGmtRefund(), DragonConstant.RefundStatusEnum.STATUS_REFUNDED.getCode(), response.getOutRequestNo()}
new Object[]{nowTime, callBackDto.getGmtRefund(), DragonConstant.RefundStatusEnum.STATUS_REFUNDED.getCode(), response.getOutRequestNo()},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
log.debug("SEND MQ UPDATE");
NotifyUrlDto dto = new NotifyUrlDto();
......@@ -459,41 +460,6 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
}
}
/**
* out_biz_no -> orderRefundCode
* trade_no -> paymentId
* orderCode -> 不存在
* code -> out_trade_no
*
*/
/**
* 给 REDIS 队列发送消息 数据库相关
*
* @param sql sql语句
* @param data 需要操作的数据
* @return
*/
private boolean sendMySqlRedis(String sql, Object[] data) {
try {
LinkedList<String> sqls = new LinkedList<>();
sqls.add(sql);
LinkedList<Object[]> sqlsData = new LinkedList();
sqlsData.add(data);
String sqlData = SqlMapping.gets(sqls, sqlsData);
HashMap<String, String> map = new HashMap<>();
map.put("message", sqlData);
MapRecord<String, String, String> record = StreamRecords.mapBacked(map).withStreamKey(DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode());
stringRedisTemplate.opsForStream().add(record);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
private void sendNotifyUrl(NotifyUrlDto notifyUrlDto) {
LocalDateTime nowTime = LocalDateTime.now();
MultiValueMap<String, String> params = new LinkedMultiValueMap();
......@@ -501,20 +467,21 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
params.add("refundAt", notifyUrlDto.getRefundAt());
params.add("refundCode", notifyUrlDto.getRefundCode());
params.add("refundError", notifyUrlDto.getRefundError());
// params.add("refundId", notifyUrlDto.getRefundId());
params.add("refundPrice", notifyUrlDto.getRefundPrice());
params.add("status", notifyUrlDto.getStatus().toString());
String response = HttpUtil.post((String) redisUtil.get(DragonConstant.REFUND_REDIS_KET + notifyUrlDto.getOrderRefundCode()), params);
String response = HttpUtil.post( dataUtils.getRefundNotifyUrl(DragonConstant.REFUND_REDIS_KET + notifyUrlDto.getOrderRefundCode()), params);
log.debug("RETURN RESPONSE=" + response);
if (response.equals("success")) {
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_call_back.update"),
new Object[]{nowTime, DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime), DragonConstant.RefundStatusEnum.STATUS_SUCCESS.getCode(), notifyUrlDto.getRefundCode()}
new Object[]{nowTime, DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime), DragonConstant.RefundStatusEnum.STATUS_SUCCESS.getCode(), notifyUrlDto.getRefundCode()},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
} else {
sendMySqlRedis(
mqHandleUtil.sendMySqlRedis(
SqlMapping.get("dragon_order_refund_call_back.update"),
new Object[]{nowTime, DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime), DragonConstant.RefundStatusEnum.STATUS_FAIL.getCode(), notifyUrlDto.getRefundCode()}
new Object[]{nowTime, DateUtil.Formatter.yyyyMMddHHmmss.format(nowTime), DragonConstant.RefundStatusEnum.STATUS_FAIL.getCode(), notifyUrlDto.getRefundCode()},
DragonConstant.MysqlRedisQueueEnum.DRAGON_REFUND_KEY.getCode()
);
}
}
......
......@@ -36,6 +36,7 @@ public class DragonOrdersServiceImpl implements IDragonOrdersService {
public ResponseDto<DragonPayBaseRespDto> dragonPay(DragonPayBaseReqDto dragonPayBaseReqDto) {
//设置支付编号
dragonPayBaseReqDto.setCode(IDGenerator.payCode());
log.info("dragon:dragonPay:req:dragonPayBaseReqDto : {}",dragonPayBaseReqDto.toString());
return payChannelStrategyContext.getStrategy(dragonPayBaseReqDto.getPayType()).dragonPay(dragonPayBaseReqDto);
}
......@@ -50,7 +51,8 @@ public class DragonOrdersServiceImpl implements IDragonOrdersService {
if(StringUtil.isEmpty(ordersDto)){
throw new LiquidnetServiceException(DragonErrorCodeEnum.TRADE_ERROR_NOT_EXISTS.getCode(),DragonErrorCodeEnum.TRADE_ERROR_NOT_EXISTS.getMessage());
}
return payChannelStrategyContext.getStrategy(DragonConstant.PayTypeEnum.getEnumByCode(ordersDto.getPaymentType()).getPayType()).checkOrderStatus(code);
String payType = DragonConstant.PayTypeEnum.getEnumByCode(ordersDto.getPaymentType()).getPayType();
return payChannelStrategyContext.getStrategy(payType).checkOrderStatus(code);
}
@Override
......
......@@ -12,31 +12,38 @@ public class DataUtils {
private RedisUtil redisUtil;
public void createPayOrder(String orderCode, String code, DragonOrdersDto ordersDto) {
if (redisUtil.hasKey(DragonConstant.REDIS_KET_PAY_ORDERCODE + orderCode)) {
} else {
if (!redisUtil.hasKey(DragonConstant.REDIS_KET_PAY_ORDERCODE + orderCode)) {
redisUtil.set(DragonConstant.REDIS_KET_PAY_ORDERCODE + orderCode, code);
redisUtil.set(DragonConstant.REDIS_KET_PAY_CODE + code, ordersDto);
}
}
public DragonOrdersDto getPayOrderByCode(String code){
public DragonOrdersDto getPayOrderByCode(String code) {
if (!redisUtil.hasKey(DragonConstant.REDIS_KET_PAY_CODE + code)) {
//TODO 是否降级处理
}
return (DragonOrdersDto) redisUtil.get(DragonConstant.REDIS_KET_PAY_CODE + code);
}
public DragonOrdersDto getPayOrderByOrderCode(String orderCode){
public DragonOrdersDto getPayOrderByOrderCode(String orderCode) {
if (!redisUtil.hasKey(DragonConstant.REDIS_KET_PAY_ORDERCODE + orderCode)) {
//TODO 是否降级处理
}
}
//获取支付订单号
String code = (String)redisUtil.get(DragonConstant.REDIS_KET_PAY_ORDERCODE + orderCode);
String code = (String) redisUtil.get(DragonConstant.REDIS_KET_PAY_ORDERCODE + orderCode);
return (DragonOrdersDto) redisUtil.get(DragonConstant.REDIS_KET_PAY_CODE + code);
}
public void updateOrderStatus(String code,DragonOrdersDto dragonOrdersDto){
public void updateOrderStatus(String code, DragonOrdersDto dragonOrdersDto) {
redisUtil.set(DragonConstant.REDIS_KET_PAY_CODE + code, dragonOrdersDto);
}
public void setRefundNotifyUrl(String code, String notifyUrl) {
redisUtil.set(DragonConstant.REFUND_REDIS_KET + code, notifyUrl);
}
public String getRefundNotifyUrl(String code) {
return (String) redisUtil.get(DragonConstant.REFUND_REDIS_KET + code);
}
}
......@@ -87,4 +87,30 @@ public class MqHandleUtil {
return false;
}
}
/**
* 给 REDIS 队列发送消息 数据库相关
*
* @param sql sql语句
* @param data 需要操作的数据
* @return
*/
public boolean sendMySqlRedis(String sql, Object[] data , String redisKey) {
try {
LinkedList<String> sqls = new LinkedList<>();
sqls.add(sql);
LinkedList<Object[]> sqlsData = new LinkedList();
sqlsData.add(data);
String sqlData = SqlMapping.gets(sqls, sqlsData);
HashMap<String, String> map = new HashMap<>();
map.put("message", sqlData);
MapRecord<String, String, String> record = StreamRecords.mapBacked(map).withStreamKey(redisKey);
stringRedisTemplate.opsForStream().add(record);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment