Commit f33e600e by zhiheng.zhang

退款单号修改自定义生成

parent 934ca1b4
......@@ -48,6 +48,7 @@ import cn.freemud.entities.vo.*;
import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.management.util.GlobalSnowflakeIdWorker;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.*;
import cn.freemud.service.thirdparty.*;
......@@ -126,6 +127,7 @@ import com.freemud.sdk.api.assortment.payment.service.StandardPaymentService;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
......@@ -1684,7 +1686,8 @@ public class OrderServiceImpl implements Orderservice {
* @param orderRefundVo
* @param orderBean
*/
private BaseResponse partnerNoTakeOrder(OrderRefundVo orderRefundVo, OrderBean orderBean, String fatherOrderId,AfterSalesType afterSalesType,Boolean isRefundDeliveryFee) {
@SneakyThrows
private BaseResponse partnerNoTakeOrder(OrderRefundVo orderRefundVo, OrderBean orderBean, String fatherOrderId, AfterSalesType afterSalesType, Boolean isRefundDeliveryFee) {
com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> response = null;
Long refundId = System.currentTimeMillis();
String partnerId = orderBean.getCompanyId();
......@@ -1692,7 +1695,7 @@ public class OrderServiceImpl implements Orderservice {
if (orderBean.getAmount() != 0) {
if(null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size()>0){
//调用支付退款
MultiOrderRefundRequest multiOrderRefundRequest = orderAdapter.getMultiOrderPayRefundRequest(orderBean, refundId);
MultiOrderRefundRequest multiOrderRefundRequest = orderAdapter.getMultiOrderPayRefundRequest(orderBean, GlobalSnowflakeIdWorker.generateId());
MultiOrderRefundResponse multiOrderRefundResponse = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest,orderBean.getCompanyId());
if (multiOrderRefundResponse == null || multiOrderRefundResponse.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.ORDER_PAY_RESPONSE_SUCCESS.equals(multiOrderRefundResponse.getCode())) {
return ResponseUtil.error(ResponseResult.MULTIORDER__ERRORREFUND.getCode(), "multiOrderRefund_failed");
......
package cn.freemud.management.adapter;
import cn.freemud.management.util.GlobalSnowflakeIdWorker;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundRequest;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
......@@ -43,6 +45,7 @@ public class PaymentSdkAdapter {
return refundRequestDTO;
}
@SneakyThrows
public MultiOrderRefundRequest getMultiOrderPayRefundRequest(QueryOrdersResponse.DataBean.OrderBean orderBean, BigDecimal refundAmount) {
MultiOrderRefundRequest multiQueryRequest = new MultiOrderRefundRequest();
multiQueryRequest.setStationId("1");
......@@ -50,7 +53,7 @@ public class PaymentSdkAdapter {
multiQueryRequest.setStoreId(orderBean.getShopId());
multiQueryRequest.setFmId("");
multiQueryRequest.setRefundAmount(Long.valueOf(String.valueOf(refundAmount)));
multiQueryRequest.setRefundTradeNo(getRefundSerialNo().toString());
multiQueryRequest.setRefundTradeNo(String.valueOf(GlobalSnowflakeIdWorker.generateId()));
multiQueryRequest.setStoreId(orderBean.getShopId());
multiQueryRequest.setNotifyUrl(refundNotifyCallback);
multiQueryRequest.setVer("V1");
......
package cn.freemud.management.util;
import com.thoughtworks.xstream.core.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;
@Component
@Slf4j
public class GlobalSnowflakeIdWorker {
/**
* 起始时间 2015/1/1 0:0:0
*/
private static long TIMESTAMP_START = 1420041600000L;
/**
* 时间戳向左位移位数
*/
private static int timestampShift;
/**
* 机器号
*/
private static long machineNo;
/**
* 机器Id向左位移位数
*/
private static int machineNoShift;
/**
* 每毫秒能产生的最大序列号
*/
private static int maxSequence;
/**
* 当前自增序列
*/
private static AtomicInteger sequence;
/**
* 初始化方法
*
* @param machineId 机器ID
*/
public static synchronized void init(int machineId) {
timestampShift = 20;
machineNoShift = 8;
machineNo = (long) (machineId << machineNoShift);
maxSequence = 128; //7位序列号
sequence = new AtomicInteger(0);
}
public static long getDatetimeId(Date time) {
long timestamp = time.getTime() - TIMESTAMP_START;
timestamp <<= timestampShift;
return timestamp + machineNo;
}
/**
* 获取Id产生的时间
*
* @param id
* @return ID产生时间
*/
public static Date getDatetime(Long id) {
id = id >> timestampShift;
id = id + TIMESTAMP_START;
return new Date(id);
}
/**
* 专门提代给shardingjdbc使用
* @param id
* @return
*/
public static Date getDatetimeByShardingJdbc(Long id) {
id = id >> 20;
id = id + TIMESTAMP_START;
return new Date(id);
}
/**
* 获取时间戳
* @param id
* @return
*/
public static Long getTimeStamp(Long id) {
id = id >> timestampShift;
id = id + TIMESTAMP_START;
return id;
}
/**
* 生成ID
* 此处实现存在部分问题,但影响甚微。运行的逻辑是sequence用完之后会睡眠1ms,然后开始
*
* @return id
*/
public static long generateId() throws Exception {
while (true) {
int sec = sequence.incrementAndGet();
try {
if (sec == maxSequence) {
Thread.sleep(1L);
sequence.set(0);
} else {
if (sec <= maxSequence) {
long timestamp = System.currentTimeMillis() - TIMESTAMP_START;
timestamp <<= timestampShift;
return timestamp + machineNo + (long) sec;
}
Thread.sleep(1L);
}
}catch (InterruptedException e){
log.error("!!!!Snowflake InterruptedException", e);
Thread.currentThread().interrupt();
throw new Exception(e.getMessage());
}
}
}
}
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