|
|
|
@@ -4,6 +4,7 @@ import com.github.pagehelper.PageHelper; |
|
|
|
import com.github.pagehelper.PageInfo; |
|
|
|
import com.iformall.common.ErrorCode; |
|
|
|
import com.iformall.common.IdWorker; |
|
|
|
import com.iformall.common.ResultData; |
|
|
|
import com.iformall.domain.po.*; |
|
|
|
import com.iformall.domain.po.base.TenantEntity; |
|
|
|
import com.iformall.enums.*; |
|
|
|
@@ -109,7 +110,7 @@ public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) |
|
|
|
public void createOrder(WxThirdPartyOrders record) { |
|
|
|
public ResultData createOrder(WxThirdPartyOrders record) { |
|
|
|
String lockKey = StringUtils.join(THIRD_CIRCLE_KEY,record.getTransactionId(), ":",EnumYesOrNo.NO.getCode(),":", "lock"); |
|
|
|
long time = System.currentTimeMillis() + 2000; |
|
|
|
String timeStr = String.valueOf(time); |
|
|
|
@@ -166,7 +167,7 @@ public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService |
|
|
|
|
|
|
|
if(record.getCUserId() == null){ |
|
|
|
redisLock.unlock(lockKey, timeStr); |
|
|
|
return; |
|
|
|
return new ResultData(0); |
|
|
|
} |
|
|
|
Integer businessId = EnumBusiness.BUSINESS_ID6.getCode(); |
|
|
|
if(wxMerchant != null){ |
|
|
|
@@ -191,7 +192,7 @@ public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService |
|
|
|
} |
|
|
|
if(creditNum == 0){ |
|
|
|
redisLock.unlock(lockKey, timeStr); |
|
|
|
return; |
|
|
|
return new ResultData(0); |
|
|
|
} |
|
|
|
record.setIncreasedPoints(creditNum); |
|
|
|
record.setPointsUpdateTime(creditHistory.getCreateDate()); |
|
|
|
@@ -200,12 +201,13 @@ public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService |
|
|
|
try { |
|
|
|
wxCouponSendService.sendCouponToUser(EnumCouponSendSendType.B_MICROPAY, record,EnumPayWay.PAY_WAY_NOT_UNPAY_B_MA); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("B端刷卡支付发券: " + e.getMessage()); |
|
|
|
logger.error("支付发券: " + e.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
redisLock.unlock(lockKey, timeStr); |
|
|
|
return new ResultData(creditNum); |
|
|
|
} |
|
|
|
|
|
|
|
redisLock.unlock(lockKey, timeStr); |
|
|
|
}else { |
|
|
|
logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); |
|
|
|
try { |
|
|
|
@@ -215,28 +217,30 @@ public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService |
|
|
|
}finally { |
|
|
|
redisLock.unlock(lockKey, timeStr); |
|
|
|
} |
|
|
|
return new ResultData(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) |
|
|
|
public void insertRefundNoticeOrder(WxThirdPartyOrders record) { |
|
|
|
public ResultData insertRefundNoticeOrder(WxThirdPartyOrders record) { |
|
|
|
WxThirdPartyOrders order = this.getOrderByTransactionId(EnumThirdOrderType.RMB_PAY,record.getTransactionId(),record.getTenantId()); |
|
|
|
if(order == null){ |
|
|
|
logger.error("--第三方退款--付款消息未找到--transactionId="+record.getTransactionId()); |
|
|
|
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "付款消息未找到"); |
|
|
|
}else{ |
|
|
|
WxThirdPartyOrders refundOrder = this.getRefundOrderByRefundId(EnumThirdOrderType.RMB_PAY,record.getRefundId(),record.getTenantId()); |
|
|
|
if(refundOrder != null){ |
|
|
|
logger.error("--第三方退款--退款消息已存在---RefundId="+record.getRefundId()); |
|
|
|
}else{ |
|
|
|
String lockKey = StringUtils.join(THIRD_CIRCLE_KEY,record.getRefundId(), ":",EnumYesOrNo.YES.getCode(),":", "lock"); |
|
|
|
long time = System.currentTimeMillis() + 2000; |
|
|
|
String timeStr = String.valueOf(time); |
|
|
|
if (redisLock.lock2(lockKey, timeStr)) { |
|
|
|
String lockKey = StringUtils.join(THIRD_CIRCLE_KEY,record.getRefundId(), ":",EnumYesOrNo.YES.getCode(),":", "lock"); |
|
|
|
long time = System.currentTimeMillis() + 2000; |
|
|
|
String timeStr = String.valueOf(time); |
|
|
|
if (redisLock.lock2(lockKey, timeStr)) { |
|
|
|
WxThirdPartyOrders refundOrder = this.getRefundOrderByRefundId(EnumThirdOrderType.RMB_PAY,record.getRefundId(),record.getTenantId()); |
|
|
|
if(refundOrder != null){ |
|
|
|
logger.error("--第三方退款--退款消息已存在---RefundId="+record.getRefundId()); |
|
|
|
redisLock.unlock(lockKey, timeStr); |
|
|
|
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "退款数据已存在"); |
|
|
|
}else{ |
|
|
|
List<WxThirdPartyOrders> refundOrders = this.getRefundOrderByTransactionId(EnumThirdOrderType.RMB_PAY,record.getTransactionId(),record.getTenantId()); |
|
|
|
Integer amount = order.getPayAmount(); |
|
|
|
Integer increasedPoints = order.getIncreasedPoints(); |
|
|
|
@@ -291,6 +295,7 @@ public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService |
|
|
|
order.setUpdateTime(now); |
|
|
|
wxThirdPartyOrdersMapper.updateOrderStatus(order); |
|
|
|
|
|
|
|
int creditNum = 0; |
|
|
|
if(order.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ |
|
|
|
WxCreditHistory creditHistory = new WxCreditHistory(); |
|
|
|
creditHistory.setTenantId(record.getFinalTenantId()); |
|
|
|
@@ -315,32 +320,31 @@ public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService |
|
|
|
creditHistory.setSpend(0-record.getRefundAmount()); |
|
|
|
creditHistory.setChangePurpose(record.getSourceAppName()+"·消费退款:商户["+record.getShopName()+"] ("+record.getRefundAmountStr()+"元) "); |
|
|
|
creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); |
|
|
|
Integer creditNum = 0; |
|
|
|
|
|
|
|
if (creditHistory.getCreditNum() != null) { |
|
|
|
creditNum = creditHistory.getCreditNum(); |
|
|
|
} |
|
|
|
if(creditNum == 0){ |
|
|
|
redisLock.unlock(lockKey, timeStr); |
|
|
|
return; |
|
|
|
if(creditNum != 0){ |
|
|
|
record.setIncreasedPoints(creditNum); |
|
|
|
record.setPointsUpdateTime(creditHistory.getCreateDate()); |
|
|
|
this.updatePoints(record); |
|
|
|
} |
|
|
|
|
|
|
|
record.setIncreasedPoints(creditNum); |
|
|
|
record.setPointsUpdateTime(creditHistory.getCreateDate()); |
|
|
|
this.updatePoints(record); |
|
|
|
} |
|
|
|
redisLock.unlock(lockKey, timeStr); |
|
|
|
return new ResultData(creditNum); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
}else { |
|
|
|
logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); |
|
|
|
try { |
|
|
|
Thread.sleep(2000); |
|
|
|
} catch (InterruptedException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
}finally { |
|
|
|
redisLock.unlock(lockKey, timeStr); |
|
|
|
}else { |
|
|
|
logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); |
|
|
|
try { |
|
|
|
Thread.sleep(2000); |
|
|
|
} catch (InterruptedException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
}finally { |
|
|
|
redisLock.unlock(lockKey, timeStr); |
|
|
|
} |
|
|
|
} |
|
|
|
return new ResultData(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|