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

Commit 4a514a2f authored by 胡佳晨's avatar 胡佳晨

汇付订单回调

parent a7a88166
......@@ -7,6 +7,7 @@ import com.liquidnet.service.goblin.dto.vo.GoblinBackOrderVo;
import com.liquidnet.service.goblin.dto.vo.GoblinStoreOrderVo;
import com.liquidnet.service.goblin.param.GoblinAppOrderRefundParam;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
public interface IGoblinOrderAppService {
......@@ -20,4 +21,6 @@ public interface IGoblinOrderAppService {
ResponseDto<Boolean> applyRefund(GoblinAppOrderRefundParam param);
ResponseDto<List<GoblinBackOrderVo>> refundDetails(String orderId);
String huiFuSync(HttpServletRequest request);
}
......@@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.List;
......@@ -69,5 +70,4 @@ public class GoblinOrderAppController {
public ResponseDto<List<GoblinBackOrderVo>> refundDetails(@RequestParam("orderId") @Valid String orderId) {
return goblinOrderAppService.refundDetails(orderId);
}
}
......@@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.List;
......@@ -71,16 +72,9 @@ public class GoblinStoreZhengzaiController {
}
@PostMapping("paySuccess")
@ApiOperation("支付成功")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<Boolean> syncOrder(@ModelAttribute @Valid SyncOrderParam syncOrderParam) {
if (!syncOrderParam.getPaymentType().equals("huifu") || !syncOrderParam.getCode().equals("code")) {
return ResponseDto.failure();
}
String result = goblinOrderService.syncOrder(syncOrderParam);
if (result.equals("success")) {
return ResponseDto.success();
}
return ResponseDto.failure();
@ApiOperation("汇付支付成功回调")
@ResponseBody
public String refundDetails(HttpServletRequest request) {
return goblinOrderAppService.huiFuSync(request);
}
}
package com.liquidnet.service.goblin.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Joiner;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.ResponseDto;
......@@ -19,6 +21,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
......@@ -274,6 +277,125 @@ public class GoblinOrderAppServiceImpl implements IGoblinOrderAppService {
return ResponseDto.success(vos);
}
@Override
public String huiFuSync(HttpServletRequest request) {
try {
// 验签请参data
String responseData = request.getParameter("resp_data");
// 验签请参sign
String sign = request.getParameter("sign");
// 使用汇付公钥验签
// if (!RsaUtils.verify(responseData, PUBLIC_KEY, sign)) {
// // 验签失败处理
// return "";
// }
JSONObject dataObj = JSON.parseObject(responseData);
String subRespCode = dataObj.getString("sub_resp_code");
String reqSeqId = dataObj.getString("req_seq_id");
String orderMasterCode = dataObj.getString("mer_ord_id");
String payCode = dataObj.getString("mer_ord_id");
String paymentType = dataObj.getString("trans_type");
String paymentId = dataObj.getString("hf_seq_id");
String paymentAt = dataObj.getString("trans_time");
if ("00000000".equals(subRespCode)) {
log.debug("SYNC PARAM = " + responseData);
//支付时间
LocalDateTime now = LocalDateTime.now();
String[] array = redisUtils.getMasterCode(orderMasterCode);
for (String orderId : array) {
GoblinStoreOrderVo orderVo = redisUtils.getGoblinOrder(orderId);
String uid = orderVo.getUserId();
if (orderVo == null) {
log.error("订单号:" + orderMasterCode + " 订单不存在");
return "fail";//订单不存在
}
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlDataOrder = CollectionUtil.linkedListObjectArr();
LinkedList<Object[]> sqlDataSku = CollectionUtil.linkedListObjectArr();
GoblinStoreOrder storeOrder = GoblinStoreOrder.getNew();
storeOrder.setPaymentType(paymentType);
storeOrder.setPaymentId(paymentId);
storeOrder.setPayCode(payCode);
LocalDateTime payTime = LocalDateTime.parse(paymentAt, DTF_YMD_HMS);
storeOrder.setPayTime(payTime);
if (orderVo.getWriteOffCode().equals("EMPTY")) {
storeOrder.setWriteOffCode(IDGenerator.getWriteOffCode());
} else {
storeOrder.setWriteOffCode("");
}
storeOrder.setStatus(GoblinStatusConst.Status.ORDER_STATUS_2.getValue());
storeOrder.setUpdatedAt(now);
sqls.add(SqlMapping.get("goblin_order.pay.order"));
sqlDataOrder.add(new Object[]{
storeOrder.getPaymentType(), storeOrder.getPaymentId(), storeOrder.getPayCode(), storeOrder.getPayTime(), storeOrder.getWriteOffCode(), storeOrder.getStatus(), storeOrder.getUpdatedAt(),
orderId, now, now
});
sqls.add(SqlMapping.get("goblin_order.pay.sku"));
List<String> skuList = orderVo.getOrderSkuVoIds();
for (String orderSkuVoIds : skuList) {
GoblinOrderSkuVo orderSkuVo = redisUtils.getGoblinOrderSkuVo(orderSkuVoIds);
//增加销量
redisUtils.incrSkuSaleCount(orderSkuVo.getSpuId(), orderSkuVo.getSkuId(), orderSkuVo.getNum());
orderSkuVo.setStatus(GoblinStatusConst.Status.ORDER_STATUS_2.getValue());
//redis
redisUtils.setGoblinOrderSku(orderSkuVo.getOrderSkuId(), orderSkuVo);
//mongo
mongoUtils.updateGoblinOrderSkuVo(orderSkuVo.getOrderSkuId(), orderSkuVo);
//mongo 添加操作日志
GoblinOrderLogVo logVo = GoblinOrderLogVo.getNew();
logVo.setOrderId(orderVo.getOrderId());
logVo.setOrderCode(orderVo.getOrderCode());
logVo.setPayCode(orderVo.getPayCode());
logVo.setStoreId(orderVo.getStoreId());
if (orderSkuVo.getSkuId().indexOf(GoblinStatusConst.MarketPreStatus.MARKET_PRE_PURCHASE.getValue()) > 0) {
logVo.setOrderType("zhengzai");
} else {
logVo.setOrderType("order");
}
logVo.setSpuId(orderSkuVo.getSpuId());
logVo.setSkuId(orderSkuVo.getSkuId());
logVo.setSkuPriceActual(orderSkuVo.getSkuPriceActual().multiply(new BigDecimal(100)).longValue());
logVo.setStatus(GoblinStatusConst.Status.ORDER_LOG_STATUS_11.getValue());
logVo.setRemark(GoblinStatusConst.Status.ORDER_LOG_STATUS_11.getDesc());
logVo.setOperationId(uid);
logVo.setOperationName(orderVo.getUserName());
logVo.setOperationType(GoblinStatusConst.Type.OPERATION_TYPE_1.getValue());
logVo.setCreatedAt(LocalDateTime.now());
mongoUtils.insertGoblinOrderLogVo(logVo);
//mysql
sqlDataSku.add(new Object[]{
GoblinStatusConst.Status.ORDER_STATUS_2.getValue(), now,
orderSkuVo.getOrderSkuId(), now, now
});
}
//redis
orderVo.setPayCode(storeOrder.getPayCode());
orderVo.setPayTime(paymentAt);
orderVo.setWriteOffCode(storeOrder.getWriteOffCode());
orderVo.setStatus(storeOrder.getStatus());
orderVo.setPaymentId(paymentId);
orderVo.setPaymentType(paymentType);
orderVo.setOrderSkuVoIds(skuList);
redisUtils.setGoblinOrder(orderId, orderVo);
//删除未支付订单
redisUtils.removeGoblinOrder(null, orderId);
//mongo
mongoUtils.updateGoblinStoreOrderVo(orderId, orderVo);
//mysql
queueUtils.sendMsgByRedis(MQConst.KylinQueue.SQL_ORDER_CREATE.getKey(),
SqlMapping.gets(sqls, sqlDataOrder, sqlDataSku));
}
} else {
// 业务处理失败
log.info("处理失败");
}
return "RECV_ORD_ID_" + reqSeqId;
} catch (Exception e) {
log.info("异步回调开始,参数,request={}");
}
return "";
}
private GoblinBackOrderLog initBackLog(String orderId, String uid, LocalDateTime now) {
GoblinBackOrderLog log = GoblinBackOrderLog.getNew();
log.setBackOrderId(orderId);
......
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