mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-22 12:05:05 +08:00
[WLOS-030] 设计并落地统一的白名单订单完成补偿方法
This commit is contained in:
@@ -1617,6 +1617,64 @@ public class OrderService {
|
||||
personalChargingRecordService.insertOrUpdateSelective(record);
|
||||
}
|
||||
|
||||
/**
|
||||
* 白名单订单完成补偿:仅在白名单支付(payMode=3)且订单状态为异常/待结算时,修正为订单完成。
|
||||
* <p>
|
||||
* 该方法为幂等:重复调用不会产生额外副作用(已完成或不符合条件将直接返回)。
|
||||
*
|
||||
* @param orderCode 订单号
|
||||
* @return 是否发生了落库更新
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean completeWhitelistOrderIfNeeded(String orderCode) {
|
||||
if (StringUtils.isBlank(orderCode)) {
|
||||
log.warn("completeWhitelistOrderIfNeeded ignored, orderCode is blank");
|
||||
return false;
|
||||
}
|
||||
|
||||
OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode);
|
||||
if (orderBasicInfo == null) {
|
||||
log.warn("completeWhitelistOrderIfNeeded ignored, order not found, orderCode:{}", orderCode);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!StringUtils.equals(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue(), orderBasicInfo.getPayMode())) {
|
||||
log.info("completeWhitelistOrderIfNeeded skipped, not whitelist payMode, orderCode:{}, payMode:{}",
|
||||
orderCode, orderBasicInfo.getPayMode());
|
||||
return false;
|
||||
}
|
||||
|
||||
String beforeStatus = orderBasicInfo.getOrderStatus();
|
||||
if (StringUtils.equals(OrderStatusEnum.ORDER_COMPLETE.getValue(), beforeStatus)) {
|
||||
log.info("completeWhitelistOrderIfNeeded skipped, already complete, orderCode:{}", orderCode);
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean eligibleStatus = StringUtils.equals(OrderStatusEnum.ABNORMAL.getValue(), beforeStatus)
|
||||
|| StringUtils.equals(OrderStatusEnum.STAY_SETTLEMENT.getValue(), beforeStatus);
|
||||
if (!eligibleStatus) {
|
||||
log.info("completeWhitelistOrderIfNeeded skipped, not eligible status, orderCode:{}, status:{}",
|
||||
orderCode, beforeStatus);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (orderBasicInfo.getSettlementTime() == null) {
|
||||
orderBasicInfo.setSettlementTime(DateUtils.getNowDate());
|
||||
}
|
||||
WhitelistOrderCompletionDefaults.apply(orderBasicInfo, orderBasicInfo.getSettlementTime());
|
||||
|
||||
int updated = orderBasicInfoService.updateOrderBasicInfo(orderBasicInfo);
|
||||
try {
|
||||
orderBasicInfoService.cleanCacheByOrderCode(orderCode, orderBasicInfo.getTransactionCode());
|
||||
} catch (Exception e) {
|
||||
log.warn("completeWhitelistOrderIfNeeded clean cache failed, orderCode:{}", orderCode, e);
|
||||
}
|
||||
|
||||
log.info("completeWhitelistOrderIfNeeded updated orderCode:{}, {} -> {}",
|
||||
orderCode, beforeStatus, orderBasicInfo.getOrderStatus());
|
||||
return updated > 0;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user