mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-23 04:25:21 +08:00
update
This commit is contained in:
@@ -12,11 +12,13 @@ import com.google.common.collect.Sets;
|
||||
import com.huifu.adapay.core.AdapayCore;
|
||||
import com.huifu.adapay.core.util.AdapaySign;
|
||||
import com.jsowell.adapay.response.PaymentReverseResponse;
|
||||
import com.jsowell.common.constant.CacheConstants;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.core.domain.vo.AuthorizedDeptVO;
|
||||
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
|
||||
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
|
||||
import com.jsowell.common.core.page.PageResponse;
|
||||
import com.jsowell.common.core.redis.RedisCache;
|
||||
import com.jsowell.common.enums.AcquirerEnum;
|
||||
import com.jsowell.common.enums.InvoiceRecordEnum;
|
||||
import com.jsowell.common.enums.MemberWalletEnum;
|
||||
@@ -115,6 +117,9 @@ public class OrderService {
|
||||
@Resource
|
||||
private OrderPileOccupyService orderPileOccupyService;
|
||||
|
||||
@Resource
|
||||
private RedisCache redisCache;
|
||||
|
||||
/**
|
||||
* 生成订单
|
||||
* @param dto
|
||||
@@ -1126,15 +1131,20 @@ public class OrderService {
|
||||
log.info("支付撤销成功 data:{}", JSON.toJSONString(data));
|
||||
JSONObject jsonObject = JSON.parseObject(data);
|
||||
JSONObject reason = jsonObject.getJSONObject("reason");
|
||||
// if (ScenarioEnum.BALANCE.getValue().equals(reason.getString("scenarioType"))) {
|
||||
// // 这笔支付订单原来是充值余额的,退款成功了,需要扣掉会员的本金金额
|
||||
// UpdateMemberBalanceDTO dto = new UpdateMemberBalanceDTO();
|
||||
// dto.setMemberId(reason.getString("memberId"));
|
||||
// dto.setUpdatePrincipalBalance(new BigDecimal(jsonObject.getString("reverse_amt"))); // 更新会员本金金额,单位元
|
||||
// dto.setType(MemberWalletEnum.TYPE_OUT.getValue());
|
||||
// dto.setSubType(MemberWalletEnum.SUBTYPE_USER_REFUND.getValue());
|
||||
// memberBasicInfoService.updateMemberBalance(dto);
|
||||
// }
|
||||
if (ScenarioEnum.BALANCE.getValue().equals(reason.getString("scenarioType"))) {
|
||||
// 这笔支付订单原来是充值余额的,退款成功了,需要扣掉会员的本金金额
|
||||
UpdateMemberBalanceDTO dto = new UpdateMemberBalanceDTO();
|
||||
String memberId = reason.getString("memberId");
|
||||
dto.setMemberId(memberId);
|
||||
dto.setUpdatePrincipalBalance(new BigDecimal(jsonObject.getString("reverse_amt"))); // 更新会员本金金额,单位元
|
||||
dto.setType(MemberWalletEnum.TYPE_OUT.getValue());
|
||||
dto.setSubType(MemberWalletEnum.SUBTYPE_USER_REFUND.getValue());
|
||||
memberBasicInfoService.updateMemberBalance(dto);
|
||||
|
||||
// 收到回调,删除缓存
|
||||
String redisKey = CacheConstants.MEMBER_BALANCE_REFUNDS_ARE_IN_PROGRESS + memberId;
|
||||
redisCache.deleteObject(redisKey);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1143,6 +1153,15 @@ public class OrderService {
|
||||
*/
|
||||
private void paymentReverseFailed(String data) {
|
||||
log.info("支付撤销失败 data:{}", JSON.toJSONString(data));
|
||||
JSONObject jsonObject = JSON.parseObject(data);
|
||||
JSONObject reason = jsonObject.getJSONObject("reason");
|
||||
if (ScenarioEnum.BALANCE.getValue().equals(reason.getString("scenarioType"))) {
|
||||
String memberId = reason.getString("memberId");
|
||||
|
||||
// 收到回调,删除缓存
|
||||
String redisKey = CacheConstants.MEMBER_BALANCE_REFUNDS_ARE_IN_PROGRESS + memberId;
|
||||
redisCache.deleteObject(redisKey);
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, Object> payOccupyPileOrder(PayOrderDTO dto) {
|
||||
|
||||
@@ -13,6 +13,8 @@ public class CacheConstants {
|
||||
|
||||
public static final int cache_expire_time_10m = cache_expire_time_1m * 10;
|
||||
|
||||
public static final int cache_expire_time_30m = cache_expire_time_1m * 30;
|
||||
|
||||
public static final int cache_expire_time_1h = cache_expire_time_1m * 60;
|
||||
|
||||
public static final int cache_expire_time_12h = cache_expire_time_1h * 12;
|
||||
@@ -23,6 +25,9 @@ public class CacheConstants {
|
||||
|
||||
public static final String PUSH_STATION_CONNECTOR = "push_station_connector";
|
||||
|
||||
// 会员余额退款正在进行中
|
||||
public static final String MEMBER_BALANCE_REFUNDS_ARE_IN_PROGRESS = "Member_Balance_Refunds_Are_In_Progress:";
|
||||
|
||||
public static final String PLATFORM_TESTER = "platform_tester:";
|
||||
|
||||
public static final String GET_PILE_MODEL_INFO_BY_MODEL_ID = "get_pile_model_info_by_model_id:";
|
||||
|
||||
@@ -113,6 +113,8 @@ public enum ReturnCodeEnum {
|
||||
CODE_ADAPAY_CONFIG_IS_NULL_ERROR("00100052", "获取支付配置信息异常"),
|
||||
|
||||
CODE_ORDER_HAS_BEEN_REFUNDED("00100053", "订单已退款,请等待收单机构原路返回,交易将在1-3个工作日完成,感谢您的理解"),
|
||||
|
||||
CODE_BALANCE_REFUNDS_ARE_IN_PROGRESS_ERROR("00100054", "会员余额退款正在进行中,请稍后再试"),
|
||||
|
||||
/* 个人桩 start */
|
||||
|
||||
|
||||
@@ -27,4 +27,12 @@ public class AdapayBaseResponse {
|
||||
public boolean isNotSuccess() {
|
||||
return !isSuccess();
|
||||
}
|
||||
|
||||
public boolean isFailed() {
|
||||
return StringUtils.equals(status, AdapayStatusEnum.FAILED.getValue());
|
||||
}
|
||||
|
||||
public boolean isNotFailed() {
|
||||
return !isFailed();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2349,7 +2349,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
PaymentReverseResponse response = adapayService.createPaymentReverseRequest(
|
||||
paymentId, refundAmount, dto.getWechatAppId(), dto.getMemberId(), ScenarioEnum.ORDER.getValue(),
|
||||
dto.getOrderCode());
|
||||
if (response != null) {
|
||||
if (response != null && response.isFailed()) {
|
||||
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
|
||||
BigDecimal reverseAmt = new BigDecimal(response.getReverse_amt());
|
||||
// 更新此笔交易单的消费金额 = 支付金额 - 撤销金额
|
||||
@@ -2370,6 +2370,12 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
|
||||
@Override
|
||||
public void refundBalanceWithAdapay(ApplyRefundDTO dto) {
|
||||
String redisKey = CacheConstants.MEMBER_BALANCE_REFUNDS_ARE_IN_PROGRESS + dto.getMemberId();
|
||||
String redisResult = redisCache.getCacheObject(redisKey);
|
||||
if (StringUtils.isNotBlank(redisResult)) {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_REFUNDS_ARE_IN_PROGRESS_ERROR);
|
||||
}
|
||||
|
||||
// 查会员余额
|
||||
MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId());
|
||||
if (memberVO == null) {
|
||||
@@ -2383,14 +2389,6 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_REFUND_MEMBER_BALANCE_ERROR);
|
||||
}
|
||||
|
||||
// 扣余额
|
||||
UpdateMemberBalanceDTO updateMemberBalanceDTO = new UpdateMemberBalanceDTO();
|
||||
updateMemberBalanceDTO.setMemberId(dto.getMemberId());
|
||||
updateMemberBalanceDTO.setUpdatePrincipalBalance(refundAmount); // 更新会员本金金额,单位元
|
||||
updateMemberBalanceDTO.setType(MemberWalletEnum.TYPE_OUT.getValue());
|
||||
updateMemberBalanceDTO.setSubType(MemberWalletEnum.SUBTYPE_USER_REFUND.getValue());
|
||||
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
||||
|
||||
// 查询用户充值余额订单 过滤掉已经退款的充值订单
|
||||
List<BalanceDeductionAmountVO> list = calculateTheBalanceDeductionAmount(dto.getMemberId(), refundAmount);
|
||||
for (BalanceDeductionAmountVO vo : list) {
|
||||
@@ -2398,16 +2396,21 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
BigDecimal deductionAmount = vo.getDeductionAmount();
|
||||
|
||||
// 调汇付的交易撤销接口
|
||||
adapayService.createPaymentReverseRequest(paymentId, deductionAmount, dto.getWechatAppId(),
|
||||
PaymentReverseResponse paymentReverseRequest = adapayService.createPaymentReverseRequest(paymentId, deductionAmount, dto.getWechatAppId(),
|
||||
dto.getMemberId(), ScenarioEnum.BALANCE.getValue(), null);
|
||||
|
||||
// 更新这笔交易的剩余金额
|
||||
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
|
||||
// 更新此笔交易单的退款金额 = 历史退款金额 + 退款金额
|
||||
record.setRefundAmt(record.getRefundAmt().add(deductionAmount));
|
||||
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额
|
||||
record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt()));
|
||||
memberAdapayRecordService.updateByPrimaryKeySelective(record);
|
||||
if (paymentReverseRequest != null && paymentReverseRequest.isNotFailed()) {
|
||||
// 更新这笔交易的剩余金额
|
||||
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
|
||||
// 更新此笔交易单的退款金额 = 历史退款金额 + 退款金额
|
||||
record.setRefundAmt(record.getRefundAmt().add(deductionAmount));
|
||||
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额
|
||||
record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt()));
|
||||
memberAdapayRecordService.updateByPrimaryKeySelective(record);
|
||||
|
||||
// 放缓存
|
||||
redisCache.setCacheObject(redisKey, paymentReverseRequest, CacheConstants.cache_expire_time_30m);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user