|
|
|
@@ -13,6 +13,8 @@ import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Propagation; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.Date; |
|
|
|
@@ -82,6 +84,7 @@ public class AliBusinessCircleOrderServiceImpl implements AliBusinessCircleOrder |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) |
|
|
|
public void createOrder(WxMerchant wxMerchant, AliBusinessCircleOrder record) { |
|
|
|
String lockKey = StringUtils.join(ALI_CIRCLE_KEY,record.getTransactionId(), ":",EnumYesOrNo.NO.getCode(),":","lock"); |
|
|
|
long time = System.currentTimeMillis() + 2000; |
|
|
|
@@ -172,36 +175,43 @@ public class AliBusinessCircleOrderServiceImpl implements AliBusinessCircleOrder |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) |
|
|
|
public void insertRefundNoticeOrder(WxMerchant wxMerchant, AliBusinessCircleOrder record) { |
|
|
|
AliBusinessCircleOrder order = this.getOrderByTransactionId(record.getTransactionId(),record.getTenantId()); |
|
|
|
if(order == null){ |
|
|
|
logger.error("--Ali商圈退款--付款消息未找到--transactionId="+record.getTransactionId()); |
|
|
|
}else{ |
|
|
|
String lockKey = StringUtils.join(ALI_CIRCLE_KEY,record.getRefundId(), ":",EnumYesOrNo.YES.getCode(),":","lock"); |
|
|
|
String lockKey = StringUtils.join(ALI_CIRCLE_KEY,record.getTransactionId(), ":",EnumYesOrNo.YES.getCode(),":","lock"); |
|
|
|
long time = System.currentTimeMillis() + 2000; |
|
|
|
String timeStr = String.valueOf(time); |
|
|
|
if (redisLock.lock2(lockKey, timeStr)) { |
|
|
|
AliBusinessCircleOrder refundOrder = this.getRefundOrderByRefundId(record.getRefundId(),record.getTenantId()); |
|
|
|
if(refundOrder != null){ |
|
|
|
logger.error("--Ali商圈退款--退款消息已存在---RefundId="+record.getRefundId()); |
|
|
|
}else{ |
|
|
|
List<AliBusinessCircleOrder> refundOrders = this.getRefundOrderByTransactionId(record.getTransactionId(),record.getTenantId()); |
|
|
|
Integer amount = order.getPayAmount(); |
|
|
|
Integer increasedPoints = order.getIncreasedPoints(); |
|
|
|
Integer refundAmount = 0; |
|
|
|
Integer refundIncreasedPoints = 0; |
|
|
|
|
|
|
|
if(refundOrders != null && refundOrders.size()>0){ |
|
|
|
for (AliBusinessCircleOrder ro:refundOrders) { |
|
|
|
refundAmount += ro.getRefundAmount(); |
|
|
|
refundIncreasedPoints += ro.getIncreasedPoints(); |
|
|
|
} |
|
|
|
} |
|
|
|
if(refundAmount >= amount){ |
|
|
|
logger.error("--Ali商圈退款--已经退款--transactionId="+record.getTransactionId()); |
|
|
|
}else if((refundAmount + record.getRefundAmount()) > amount ){ |
|
|
|
logger.error("--Ali商圈退款--退款金额超限--transactionId="+record.getTransactionId()); |
|
|
|
}else{ |
|
|
|
List<AliBusinessCircleOrder> refundOrders = this.getRefundOrderByTransactionId(record.getTransactionId(),record.getTenantId()); |
|
|
|
if(refundOrders != null && refundOrders.size() > 0){ |
|
|
|
logger.error("--Ali商圈退款--已经退款--transactionId="+record.getTransactionId()); |
|
|
|
} |
|
|
|
|
|
|
|
// AliBusinessCircleOrder refundOrder = this.getRefundOrderByRefundId(record.getRefundId(),record.getTenantId()); |
|
|
|
// if(refundOrder != null){ |
|
|
|
// logger.error("--Ali商圈退款--退款消息已存在---RefundId="+record.getRefundId()); |
|
|
|
// }else{ |
|
|
|
// List<AliBusinessCircleOrder> refundOrders = this.getRefundOrderByTransactionId(record.getTransactionId(),record.getTenantId()); |
|
|
|
// Integer amount = order.getPayAmount(); |
|
|
|
// Integer increasedPoints = order.getIncreasedPoints(); |
|
|
|
// Integer refundAmount = 0; |
|
|
|
// Integer refundIncreasedPoints = 0; |
|
|
|
// |
|
|
|
// if(refundOrders != null && refundOrders.size()>0){ |
|
|
|
// for (AliBusinessCircleOrder ro:refundOrders) { |
|
|
|
// refundAmount += ro.getRefundAmount(); |
|
|
|
// refundIncreasedPoints += ro.getIncreasedPoints(); |
|
|
|
// } |
|
|
|
// } |
|
|
|
// if(refundAmount >= amount){ |
|
|
|
// logger.error("--Ali商圈退款--已经退款--transactionId="+record.getTransactionId()); |
|
|
|
// }else if((refundAmount + record.getRefundAmount()) > amount ){ |
|
|
|
// logger.error("--Ali商圈退款--退款金额超限--transactionId="+record.getTransactionId()); |
|
|
|
// } |
|
|
|
else{ |
|
|
|
Date now = new Date(); |
|
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
|
record.setId(idWorker.nextId()); |
|
|
|
@@ -224,16 +234,16 @@ public class AliBusinessCircleOrderServiceImpl implements AliBusinessCircleOrder |
|
|
|
creditHistory.setCouponId(record.getId()); |
|
|
|
creditHistory.setMerchantId(order.getMerchantId()); |
|
|
|
creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); |
|
|
|
int points = 0; |
|
|
|
if((refundAmount + record.getRefundAmount()) == amount){ |
|
|
|
points = increasedPoints - refundIncreasedPoints; |
|
|
|
}else{ |
|
|
|
points = new BigDecimal(order.getIncreasedPoints()) |
|
|
|
.divide(new BigDecimal(order.getPayAmount()),2,BigDecimal.ROUND_HALF_UP) |
|
|
|
.multiply(new BigDecimal(record.getRefundAmount())) |
|
|
|
.intValue(); |
|
|
|
} |
|
|
|
|
|
|
|
// int points = 0; |
|
|
|
// if((refundAmount + record.getRefundAmount()) == amount){ |
|
|
|
// points = increasedPoints - refundIncreasedPoints; |
|
|
|
// }else{ |
|
|
|
// points = new BigDecimal(order.getIncreasedPoints()) |
|
|
|
// .divide(new BigDecimal(order.getPayAmount()),2,BigDecimal.ROUND_HALF_UP) |
|
|
|
// .multiply(new BigDecimal(record.getRefundAmount())) |
|
|
|
// .intValue(); |
|
|
|
// } |
|
|
|
int points = order.getIncreasedPoints(); |
|
|
|
creditHistory.setCreditNum(points); |
|
|
|
creditHistory.setSpend(0-record.getRefundAmount()); |
|
|
|
creditHistory.setChangePurpose("Ali商圈消费退款:商户["+wxMerchant.getName()+"] ("+record.getRefundAmountStr()+"元) "); |
|
|
|
@@ -251,7 +261,7 @@ public class AliBusinessCircleOrderServiceImpl implements AliBusinessCircleOrder |
|
|
|
this.updatePoints(record); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// } |
|
|
|
|
|
|
|
redisLock.unlock(lockKey, timeStr); |
|
|
|
}else{ |
|
|
|
|