Commit d2837ea8 by chongli

小程序赛事和单定场加入使用余额的支持

parent c98a22bf
......@@ -132,27 +132,61 @@ public abstract class AbstractNotifyService extends CorePaymentService {
if(notifyMap.get("return_code").equals("SUCCESS")){
String orderNo = notifyMap.get("out_trade_no").toString();//商户订单号
Order order = this.orderDao.getAndLockOrderByOrderNo(Long.parseLong(orderNo));
if(notifyMap.get("result_code").equals("SUCCESS")){
// 4、设置订单的状态:除去扣款失败,增加已扣款状态
order.setProcessStatus(order.getProcessStatus()
& (OrderStatusBitEnum.getSumStatusValue() - OrderStatusBitEnum.DEDUCT_FAILED
.getValue()));
order.setProcessStatus(order.getProcessStatus() | OrderStatusBitEnum.DEDUCTED.getValue());
// 5、扣除现金券、账户余额、抵用发票的积分、以及投保动作(此步骤中基本每一步都是重启事务)
// 5.1、扣除现金券
if (order.getVoucherAmount().doubleValue() > 0) {
try {
this.voucherService.userVoucher(order.getVoucherCount(), order.getOrderNo(),
order.getVoucherIDList());
} catch (Exception e) {
logger.warn(e.getMessage(), e);
handPayException(order, e);
//重复回调不做处理
if((order.getProcessStatus() & OrderStatusBitEnum.DEDUCTED.getValue())!= OrderStatusBitEnum.DEDUCTED.getValue()){
// 4、设置订单的状态:除去扣款失败,增加已扣款状态
order.setProcessStatus(order.getProcessStatus()
& (OrderStatusBitEnum.getSumStatusValue() - OrderStatusBitEnum.DEDUCT_FAILED
.getValue()));
order.setProcessStatus(order.getProcessStatus() | OrderStatusBitEnum.DEDUCTED.getValue());
// 5、扣除现金券、账户余额、抵用发票的积分、以及投保动作(此步骤中基本每一步都是重启事务)
// 5.1、扣除现金券
if (order.getVoucherAmount().doubleValue() > 0) {
try {
this.voucherService.userVoucher(order.getVoucherCount(), order.getOrderNo(),
order.getVoucherIDList());
} catch (Exception e) {
logger.warn(e.getMessage(), e);
handPayException(order, e);
}
}
}
//6、更新订单信息(状态)
this.orderDao.update(order);
this.doPaySuccess(order);
// 5.2、扣除账户余额
if (order.getPrePayCardAmount().doubleValue() > 0) {
try {
this.userService
.deductPrepayCardAmount(order.getUid(), order.getPrePayCardAmount());
order.setPrePayCardDeductFlag(PrePayCardStatusEnum.USED.getValue());
} catch (Exception e) {
logger.warn(e.getMessage(), e);
handPayException(order, e);
}
}
// 5.4、最后投保动作
if (order.getCancelStatus() != 1) {
// 当订单前面动作都成功,没有取消订单时,进行投保操作
if (order.getInsuranceAmount().doubleValue() > 0
&& order.getInsuranceStatus() != OrderInsuranceStatusEnum.INSURED.getValue()) {
// 保险金额大于0,并且保险状态不是已投保
try {
boolean isInsuranceSuccess = insuranceProcessService
.newExecuteCreateAndSendInsureRequest(order.getOrderId());
if (!isInsuranceSuccess) {
throw new ServiceException("发送保险报文失败");
}
order.setInsuranceStatus(OrderInsuranceStatusEnum.INSURED.getValue());
} catch (Exception e) {
logger.warn(e.getMessage(), e);
handPayException(order, e);
}
}
}
//6、更新订单信息(状态)
this.orderDao.update(order);
this.doPaySuccess(order);
}
}else{
if (order.getOrderStatusEnum() == OrderStatusEnum.CHARGING && order.getCancelStatus() == 0) {
this.doPayFail(order);
......
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 sign in to comment