处理学习培训订单
This commit is contained in:
parent
feadb4510b
commit
8789793dd5
@ -20,12 +20,14 @@ import com.xinelu.manage.domain.appointmentorder.AppointmentOrder;
|
||||
import com.xinelu.manage.domain.goodsOrder.GoodsOrder;
|
||||
import com.xinelu.manage.domain.paymentinfo.PaymentInfo;
|
||||
import com.xinelu.manage.domain.refundinfo.RefundInfo;
|
||||
import com.xinelu.manage.domain.trainingorder.TrainingOrder;
|
||||
import com.xinelu.manage.mapper.appointmentorder.AppointmentOrderMapper;
|
||||
import com.xinelu.manage.mapper.goodsAttributeDetails.GoodsAttributeDetailsMapper;
|
||||
import com.xinelu.manage.mapper.goodsOrder.GoodsOrderMapper;
|
||||
import com.xinelu.manage.mapper.patientcouponreceive.PatientCouponReceiveMapper;
|
||||
import com.xinelu.manage.mapper.paymentinfo.PaymentInfoMapper;
|
||||
import com.xinelu.manage.mapper.refundinfo.RefundInfoMapper;
|
||||
import com.xinelu.manage.mapper.trainingorder.TrainingOrderMapper;
|
||||
import com.xinelu.manage.vo.AppointOrderAndDetailsInfo;
|
||||
import com.xinelu.manage.vo.appointmentorder.AppointmentOrderInfoVO;
|
||||
import com.xinelu.manage.vo.goods.GoodsOrderAndDetailsInfo;
|
||||
@ -82,6 +84,9 @@ public class WeChatPayNotifyServiceImpl implements WeChatPayNotifyService {
|
||||
@Resource
|
||||
private PatientCouponReceiveMapper patientCouponReceiveMapper;
|
||||
|
||||
@Resource
|
||||
private TrainingOrderMapper trainingOrderMapper;
|
||||
|
||||
/**
|
||||
* 支付回调标识
|
||||
*/
|
||||
@ -202,10 +207,22 @@ public class WeChatPayNotifyServiceImpl implements WeChatPayNotifyService {
|
||||
}
|
||||
TransactionStatus transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());
|
||||
try {
|
||||
//记录学习培训订单支付日志和修改订单状态
|
||||
TrainingOrder trainingOrderInfo = trainingOrderMapper.getTrainingOrderInfoByOrderNo(notifyPlaintext.getOutTradeNo());
|
||||
if (Objects.nonNull(trainingOrderInfo)) {
|
||||
insertPaymentInfo(notifyPlaintext, null, null, trainingOrderInfo, plainText);
|
||||
if (WeChatTradeStateEnum.SUCCESS.getInfo().equals(notifyPlaintext.getTradeState())) {
|
||||
trainingOrderMapper.updateTrainingOrderStatus(TrainingOrderStatusEnum.PAY.getInfo(), trainingOrderInfo.getTrainingOrderNo());
|
||||
} else {
|
||||
log.info("学习培训微信订单状态异常,订单状态为 ====> {}", notifyPlaintext.getTradeState());
|
||||
}
|
||||
transactionManager.commit(transactionStatus);
|
||||
return;
|
||||
}
|
||||
//商品订单信息
|
||||
GoodsOrder goodsOrderInfo = goodsOrderMapper.getGoodsOrderByOrderNo(notifyPlaintext.getOutTradeNo());
|
||||
if (Objects.nonNull(goodsOrderInfo)) {
|
||||
insertPaymentInfo(notifyPlaintext, goodsOrderInfo, null, plainText);
|
||||
insertPaymentInfo(notifyPlaintext, goodsOrderInfo, null,null, plainText);
|
||||
if (WeChatTradeStateEnum.SUCCESS.getInfo().equals(notifyPlaintext.getTradeState())) {
|
||||
goodsOrderMapper.updateGoodsOrderStatus(GooodsOrderStatusEnum.WAIT_RECEIVED_GOODS.getInfo(), goodsOrderInfo.getOrderNo());
|
||||
} else {
|
||||
@ -219,7 +236,7 @@ public class WeChatPayNotifyServiceImpl implements WeChatPayNotifyService {
|
||||
return;
|
||||
}
|
||||
//预约服务订单信息
|
||||
insertPaymentInfo(notifyPlaintext, null, appointmentOrderInfo, plainText);
|
||||
insertPaymentInfo(notifyPlaintext, null, appointmentOrderInfo,null, plainText);
|
||||
if (WeChatTradeStateEnum.SUCCESS.getInfo().equals(notifyPlaintext.getTradeState())) {
|
||||
appointmentOrderMapper.updateAppointmentOrderStatus(OrderStatusEnum.WAIT_DISPATCH.getInfo(), appointmentOrderInfo.getOrderNo());
|
||||
} else {
|
||||
@ -245,10 +262,10 @@ public class WeChatPayNotifyServiceImpl implements WeChatPayNotifyService {
|
||||
* @param plainText 回调明文
|
||||
*/
|
||||
private void insertPaymentInfo(WeChatPayNotifyPlaintextVO notifyPlaintext, GoodsOrder goodsOrderInfo,
|
||||
AppointmentOrder appointmentOrder, String plainText) {
|
||||
AppointmentOrder appointmentOrder,TrainingOrder trainingOrderInfo, String plainText) {
|
||||
int paymentInfoCount = paymentInfoMapper.getPaymentInfoByOrderNo(notifyPlaintext.getOutTradeNo());
|
||||
if (paymentInfoCount <= 0) {
|
||||
PaymentInfo paymentInfo = buildPaymentInfo(notifyPlaintext, goodsOrderInfo, appointmentOrder, plainText);
|
||||
PaymentInfo paymentInfo = buildPaymentInfo(notifyPlaintext, goodsOrderInfo, appointmentOrder,trainingOrderInfo, plainText);
|
||||
int insertCount = paymentInfoMapper.insertPaymentInfo(paymentInfo);
|
||||
if (insertCount <= 0) {
|
||||
log.error("记录支付日志出错,参数为 ====> [{}]", paymentInfo);
|
||||
@ -265,7 +282,7 @@ public class WeChatPayNotifyServiceImpl implements WeChatPayNotifyService {
|
||||
* @param appointmentOrderInfo 预约订单信息
|
||||
*/
|
||||
private PaymentInfo buildPaymentInfo(WeChatPayNotifyPlaintextVO notifyPlaintext, GoodsOrder goodsOrderInfo,
|
||||
AppointmentOrder appointmentOrderInfo, String plainText) {
|
||||
AppointmentOrder appointmentOrderInfo,TrainingOrder trainingOrder, String plainText) {
|
||||
PaymentInfo paymentInfo = new PaymentInfo();
|
||||
if (Objects.nonNull(goodsOrderInfo)) {
|
||||
paymentInfo.setPatientId(Objects.isNull(goodsOrderInfo.getPatientId()) ? null : goodsOrderInfo.getPatientId());
|
||||
@ -275,6 +292,10 @@ public class WeChatPayNotifyServiceImpl implements WeChatPayNotifyService {
|
||||
paymentInfo.setPatientId(Objects.isNull(appointmentOrderInfo.getPatientId()) ? null : appointmentOrderInfo.getPatientId());
|
||||
paymentInfo.setOrderNo(StringUtils.isBlank(appointmentOrderInfo.getOrderNo()) ? "" : appointmentOrderInfo.getOrderNo());
|
||||
paymentInfo.setPayChannel(StringUtils.isBlank(appointmentOrderInfo.getOrderChannel()) ? "" : appointmentOrderInfo.getOrderChannel());
|
||||
} else if (Objects.nonNull(trainingOrder)) {
|
||||
paymentInfo.setNurseStationPersonId(Objects.isNull(trainingOrder.getNurseStationPersonId()) ? null : trainingOrder.getNurseStationPersonId());
|
||||
paymentInfo.setOrderNo(StringUtils.isBlank(trainingOrder.getTrainingOrderNo()) ? "" : trainingOrder.getTrainingOrderNo());
|
||||
paymentInfo.setPayChannel(StringUtils.isBlank(trainingOrder.getTrainingOrderChannel()) ? "" : trainingOrder.getTrainingOrderChannel());
|
||||
}
|
||||
paymentInfo.setTransactionNo(StringUtils.isBlank(notifyPlaintext.getTransactionId()) ? "" : notifyPlaintext.getTransactionId());
|
||||
paymentInfo.setPayPrice(BigDecimal.valueOf(Objects.isNull(notifyPlaintext.getAmount().getPayerTotal()) ? 0 : notifyPlaintext.getAmount().getPayerTotal()).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN));
|
||||
@ -306,6 +327,14 @@ public class WeChatPayNotifyServiceImpl implements WeChatPayNotifyService {
|
||||
TransactionStatus transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());
|
||||
RedisAtomicLong redisAtomicLong = null;
|
||||
try {
|
||||
|
||||
//处理学习培训订单退款信息
|
||||
TrainingOrder trainingOrderInfo = trainingOrderMapper.getTrainingOrderInfoByOrderNo(refundNotifyVO.getOutTradeNo());
|
||||
if (Objects.nonNull(trainingOrderInfo)) {
|
||||
handleRefundTrainingOrderNo(trainingOrderInfo, plainText, refundNotifyVO);
|
||||
transactionManager.commit(transactionStatus);
|
||||
return;
|
||||
}
|
||||
GoodsOrderAndDetailsInfo detailsOrderInfo = goodsOrderMapper.getGoodsAndDetailsOrderInfo(refundNotifyVO.getOutTradeNo());
|
||||
AppointOrderAndDetailsInfo appointmentOrderInfo = appointmentOrderMapper.getAppointOrderAndDetailsInfo(refundNotifyVO.getOutTradeNo());
|
||||
if (Objects.isNull(detailsOrderInfo) && Objects.isNull(appointmentOrderInfo)) {
|
||||
@ -434,4 +463,33 @@ public class WeChatPayNotifyServiceImpl implements WeChatPayNotifyService {
|
||||
refundInfo.setOutRefundNo(StringUtils.isBlank(refundNotifyVO.getOutRefundNo()) ? "" : refundNotifyVO.getOutRefundNo());
|
||||
return refundInfo;
|
||||
}
|
||||
/**
|
||||
* 处理学习培训订单回调信息
|
||||
*
|
||||
* @param trainingOrder 学习培训订单信息
|
||||
* @param plainText 明文
|
||||
* @param refundNotifyVO 退款回调信息
|
||||
*/
|
||||
private void handleRefundTrainingOrderNo(TrainingOrder trainingOrder, String plainText, WeChatRefundNotifyVO refundNotifyVO) {
|
||||
if (RefundStatusEnum.SUCCESS.getInfo().equals(refundNotifyVO.getRefundStatus())
|
||||
&& StringUtils.isNotBlank(trainingOrder.getTrainingOrderStatus())
|
||||
&& !(TrainingOrderStatusEnum.REFUNDED.getInfo().equals(trainingOrder.getTrainingOrderStatus()))) {
|
||||
int updateCount = trainingOrderMapper.updateTrainingOrderStatus(TrainingOrderStatusEnum.REFUNDED.getInfo(), trainingOrder.getTrainingOrderNo());
|
||||
if (updateCount < 1) {
|
||||
log.info("微信退款通知,修改学习培训订单状态失败,订单编号 =====> {}", refundNotifyVO.getOutTradeNo());
|
||||
}
|
||||
//修改退款信息
|
||||
RefundInfo refundInfo = buildRefundInfo(plainText, refundNotifyVO);
|
||||
int refundCount = refundInfoMapper.updateRefundInfoByNo(refundInfo);
|
||||
if (refundCount < 1) {
|
||||
log.info("微信退款通知,记录学习培训微信退款单信息失败,订单编号 =====> {}", refundNotifyVO.getOutTradeNo());
|
||||
}
|
||||
}
|
||||
if (RefundStatusEnum.CLOSED.getInfo().equals(refundNotifyVO.getRefundStatus())) {
|
||||
log.info("当前学习培训退款单已经关闭,订单号 ====> {}, 退款单号 =====> {}", refundNotifyVO.getOutTradeNo(), refundNotifyVO.getOutRefundNo());
|
||||
}
|
||||
if (RefundStatusEnum.ABNORMAL.getInfo().equals(refundNotifyVO.getRefundStatus())) {
|
||||
log.info("学习培训订单退款异常,退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,可前往【商户平台—>交易中心】,手动处理此笔退款,订单号 ====> {}, 退款单号 =====> {}", refundNotifyVO.getOutTradeNo(), refundNotifyVO.getOutRefundNo());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,12 +17,14 @@ import com.xinelu.manage.domain.goodsOrder.GoodsOrder;
|
||||
import com.xinelu.manage.domain.patientintegralchange.PatientIntegralChange;
|
||||
import com.xinelu.manage.domain.refundinfo.RefundInfo;
|
||||
import com.xinelu.manage.domain.scheduleplandetail.SchedulePlanDetail;
|
||||
import com.xinelu.manage.domain.trainingorder.TrainingOrder;
|
||||
import com.xinelu.manage.dto.consultationInfo.ConsultationInfoDTO;
|
||||
import com.xinelu.manage.mapper.appointmentorder.AppointmentOrderMapper;
|
||||
import com.xinelu.manage.mapper.goodsOrder.GoodsOrderMapper;
|
||||
import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
|
||||
import com.xinelu.manage.mapper.patientintegralchange.PatientIntegralChangeMapper;
|
||||
import com.xinelu.manage.mapper.refundinfo.RefundInfoMapper;
|
||||
import com.xinelu.manage.mapper.trainingorder.TrainingOrderMapper;
|
||||
import com.xinelu.manage.service.consultationInfo.IConsultationInfoService;
|
||||
import com.xinelu.manage.service.scheduleplandetail.ISchedulePlanDetailService;
|
||||
import com.xinelu.manage.vo.goodsorder.GoodsInfoRedemptionVO;
|
||||
@ -78,6 +80,8 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
private IConsultationInfoService consultationInfoService;
|
||||
@Resource
|
||||
private ISchedulePlanDetailService planDetailService;
|
||||
@Resource
|
||||
private TrainingOrderMapper trainingOrderMapper;
|
||||
|
||||
/**
|
||||
* 成功状态码
|
||||
@ -106,6 +110,11 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
if (StringUtils.isNotBlank(refundDTO.getOrderType()) && StringUtils.equals(OrderTypeEnum.INTEGRAL_EXCHANGE.getInfo(), refundDTO.getOrderType())) {
|
||||
return refundPointsRedemption(refundDTO);
|
||||
}
|
||||
|
||||
//学习培训订单状态退款处理
|
||||
if (StringUtils.isNotBlank(refundDTO.getTrainingOrderFlag()) && StringUtils.equals(BuySourceEnum.TRAINING.getInfo(), refundDTO.getTrainingOrderFlag())) {
|
||||
return refundTrainingOrder(refundDTO);
|
||||
}
|
||||
AppointmentOrder appointmentOrderInfo = appointmentOrderMapper.getAppointmentOrderByOrderNo(refundDTO.getOrderNo());
|
||||
if (Objects.nonNull(appointmentOrderInfo)) {
|
||||
AjaxResult ajaxResult = judgeRefundInfo(appointmentOrderInfo.getCreateTime(), refundDTO.getRefundPrice(), appointmentOrderInfo.getTotalPrice());
|
||||
@ -123,9 +132,9 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
}
|
||||
Long patientId = Objects.isNull(appointmentOrderInfo.getPatientId()) ? 0 : appointmentOrderInfo.getPatientId();
|
||||
String outRefundNo = com.xinelu.common.utils.StringUtils.fillZeroByPatientId(patientId, 5) + System.nanoTime();
|
||||
String refundParam = buildRefundParam(null, appointmentOrderInfo, refundDTO, outRefundNo);
|
||||
String refundParam = buildRefundParam(null, appointmentOrderInfo,null, refundDTO, outRefundNo);
|
||||
String refundReason = StringUtils.isBlank(refundDTO.getRefundReason()) ? "" : refundDTO.getRefundReason();
|
||||
this.applyWeRefund(refundParam, appointmentOrderInfo, null, patientId, refundReason);
|
||||
this.applyWeRefund(refundParam, appointmentOrderInfo, null,null, patientId, refundReason);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
GoodsOrder goodsOrderInfo = goodsOrderMapper.getGoodsOrderByOrderNo(refundDTO.getOrderNo());
|
||||
@ -145,9 +154,9 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
}
|
||||
Long patientId = Objects.isNull(goodsOrderInfo.getPatientId()) ? 0 : goodsOrderInfo.getPatientId();
|
||||
String outRefundNo = com.xinelu.common.utils.StringUtils.fillZeroByPatientId(patientId, 5) + System.nanoTime();
|
||||
String refundParam = buildRefundParam(goodsOrderInfo, null, refundDTO, outRefundNo);
|
||||
String refundParam = buildRefundParam(goodsOrderInfo, null,null, refundDTO, outRefundNo);
|
||||
String refundReason = StringUtils.isBlank(refundDTO.getRefundReason()) ? "" : refundDTO.getRefundReason();
|
||||
this.applyWeRefund(refundParam, null, goodsOrderInfo, patientId, refundReason);
|
||||
this.applyWeRefund(refundParam, null, goodsOrderInfo,null, patientId, refundReason);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
return AjaxResult.success();
|
||||
@ -245,7 +254,7 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
String outRefundNo = com.xinelu.common.utils.StringUtils.fillZeroByPatientId(patientId, 5) + System.nanoTime();
|
||||
String refundParam = this.buildHealthConsultationRefundParam(goodsOrderInfo, outRefundNo);
|
||||
String refundReason = StringUtils.isBlank(closeOrderDTO.getRemark()) ? "" : closeOrderDTO.getRemark();
|
||||
this.applyWeRefund(refundParam, null, goodsOrderInfo, patientId, refundReason);
|
||||
this.applyWeRefund(refundParam, null, goodsOrderInfo,null, patientId, refundReason);
|
||||
// 查询是否为专家咨询订单,修改时间段的可预约状态
|
||||
if (goodsOrderInfo.getConsultationInfoId() != null) {
|
||||
ConsultationInfoDTO consultationInfo = consultationInfoService.selectConsultationInfoById(goodsOrderInfo.getConsultationInfoId());
|
||||
@ -287,7 +296,7 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
* @param refundDTO 退款参数信息
|
||||
* @return 退款申请Json串
|
||||
*/
|
||||
private String buildRefundParam(GoodsOrder goodsOrderInfo, AppointmentOrder appointmentOrderInfo,
|
||||
private String buildRefundParam(GoodsOrder goodsOrderInfo, AppointmentOrder appointmentOrderInfo,TrainingOrder trainingOrder,
|
||||
RefundDTO refundDTO, String outRefundNo) {
|
||||
Map<String, Object> paramMap = new LinkedHashMap<>();
|
||||
paramMap.put("out_trade_no", refundDTO.getOrderNo());
|
||||
@ -301,6 +310,15 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
if (Objects.nonNull(goodsOrderInfo) && Objects.isNull(appointmentOrderInfo)) {
|
||||
amountMap.put("total", goodsOrderInfo.getTotalPrice().multiply(BigDecimal.valueOf(100)).intValue());
|
||||
}
|
||||
//学习培训订单使用医路优品账户
|
||||
if (Objects.nonNull(trainingOrder) && Objects.isNull(goodsOrderInfo) && Objects.isNull(appointmentOrderInfo)) {
|
||||
//退款回调地址
|
||||
// paramMap.put("notify_url", ylypWeChatPaymentConfig.getYlypWeChatNotifyUrl() + YINLUYOUPIN_WE_CHAT_REFUND_URL);
|
||||
//退款金额
|
||||
amountMap.put("refund", refundDTO.getRefundPrice().multiply(BigDecimal.valueOf(100)).intValue());
|
||||
//原始订单金额
|
||||
amountMap.put("total", trainingOrder.getTrainingOrderAmount().multiply(BigDecimal.valueOf(100)).intValue());
|
||||
}
|
||||
amountMap.put("currency", "CNY");
|
||||
paramMap.put("amount", amountMap);
|
||||
return JSON.toJSONString(paramMap);
|
||||
@ -316,7 +334,7 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
* @param refundReason 退款原因
|
||||
*/
|
||||
public void applyWeRefund(String refundParam, AppointmentOrder appointmentOrderInfo,
|
||||
GoodsOrder goodsOrderInfo, Long patientId, String refundReason) {
|
||||
GoodsOrder goodsOrderInfo,TrainingOrder trainingOrderInfo, Long patientId, String refundReason) {
|
||||
String requestUrl = weChatPaymentUrlConfig.getRefundApplyUrl();
|
||||
HttpPost httpPost = new HttpPost(requestUrl);
|
||||
StringEntity entity = new StringEntity(refundParam, "utf-8");
|
||||
@ -324,6 +342,11 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
httpPost.setEntity(entity);
|
||||
httpPost.setHeader("Accept", "application/json");
|
||||
String refundMerchantType = PaymentMerchantTypeEnum.XINYILU.getInfo();
|
||||
|
||||
//学习培训订单使用医路优品账户
|
||||
Long nursePersonId = Objects.isNull(trainingOrderInfo.getNurseStationPersonId()) ? null : trainingOrderInfo.getNurseStationPersonId();
|
||||
|
||||
|
||||
try (CloseableHttpResponse response = xinYiLuWeChatPayClient.execute(httpPost)) {
|
||||
if (Objects.isNull(response)) {
|
||||
throw new ServiceException("获取httpclient对象失败!");
|
||||
@ -342,7 +365,7 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
WeChatRefundInfoVO weChatRefundInfoVO = JSONObject.parseObject(body, WeChatRefundInfoVO.class);
|
||||
int refundInfoCount = refundInfoMapper.getRefundInfoByOrderNo(weChatRefundInfoVO.getOutTradeNo());
|
||||
if (refundInfoCount <= 0) {
|
||||
RefundInfo refundInfo = buildRefundInfo(patientId, weChatRefundInfoVO, refundReason, body, refundMerchantType);
|
||||
RefundInfo refundInfo = buildRefundInfo(patientId, weChatRefundInfoVO, refundReason, body, refundMerchantType,nursePersonId);
|
||||
int insertCunt = refundInfoMapper.insertRefundInfo(refundInfo);
|
||||
if (insertCunt <= 0) {
|
||||
throw new ServiceException("记录退款信息失败,请联系管理员!");
|
||||
@ -363,9 +386,10 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
* @param refundMerchantType 退款账户类型,新医路或者医路优品
|
||||
*/
|
||||
private RefundInfo buildRefundInfo(Long patientId, WeChatRefundInfoVO refundInfoVO,
|
||||
String refundReason, String refundBody, String refundMerchantType) {
|
||||
String refundReason, String refundBody, String refundMerchantType,Long nursePersonId) {
|
||||
RefundInfo refundInfo = new RefundInfo();
|
||||
refundInfo.setPatientId(patientId);
|
||||
refundInfo.setNurseStationPersonId(nursePersonId);
|
||||
refundInfo.setOrderNo(refundInfoVO.getOutTradeNo());
|
||||
refundInfo.setRefundNo(refundInfoVO.getRefundId());
|
||||
refundInfo.setOutRefundNo(refundInfoVO.getOutRefundNo());
|
||||
@ -469,4 +493,42 @@ public class WeChatRefundServiceImpl implements WeChatRefundService {
|
||||
paramMap.put("amount", amountMap);
|
||||
return JSON.toJSONString(paramMap);
|
||||
}
|
||||
/**
|
||||
* 学习培训订单退款处理
|
||||
*
|
||||
* @param refundDTO 退款信息
|
||||
* @return 退款结果
|
||||
*/
|
||||
public AjaxResult refundTrainingOrder(RefundDTO refundDTO){
|
||||
//查询学习培训订单信息
|
||||
TrainingOrder trainingOrderInfo = trainingOrderMapper.getTrainingOrderInfoByOrderNo(refundDTO.getOrderNo());
|
||||
if (Objects.isNull(trainingOrderInfo)) {
|
||||
return AjaxResult.error("当前订单信息不存在,无法进行退款!");
|
||||
}
|
||||
//判断订单状态是否为已支付,只有支付的订单才能进行退款
|
||||
if (StringUtils.isBlank(trainingOrderInfo.getTrainingOrderStatus())
|
||||
|| !(StringUtils.equals(TrainingOrderStatusEnum.PAY.getInfo(), trainingOrderInfo.getTrainingOrderStatus()))) {
|
||||
return AjaxResult.error("当前订单状态不正确,无法进行退款!");
|
||||
}
|
||||
if (Objects.isNull(trainingOrderInfo.getTrainingOrderAmount())) {
|
||||
return AjaxResult.error("当前订单金额不存在,无法进行退款!");
|
||||
}
|
||||
//订单金额为0,说明是0元购,直接修改修改成订单状态为已退款
|
||||
if (Objects.nonNull(trainingOrderInfo.getTrainingOrderAmount()) && trainingOrderInfo.getTrainingOrderAmount().compareTo(BigDecimal.ZERO) == 0) {
|
||||
trainingOrderMapper.updateTrainingOrderStatus(TrainingOrderStatusEnum.REFUNDED.getInfo(), refundDTO.getOrderNo());
|
||||
log.info("零元购退款信息,无需走微信退款逻辑!");
|
||||
return AjaxResult.success();
|
||||
}
|
||||
//校验订单时间和订单金额
|
||||
AjaxResult checkResult = judgeRefundInfo(trainingOrderInfo.getTrainingOrderTime(), refundDTO.getRefundPrice(), trainingOrderInfo.getTrainingOrderAmount());
|
||||
if (Objects.nonNull(checkResult)) {
|
||||
return checkResult;
|
||||
}
|
||||
//调用微信申请退款接口发起退款申请
|
||||
Long nursePersonId = Objects.isNull(trainingOrderInfo.getNurseStationPersonId()) ? 0 : trainingOrderInfo.getNurseStationPersonId();
|
||||
String outRefundNo = com.xinelu.common.utils.StringUtils.fillZeroByPatientId(nursePersonId, 5) + System.nanoTime();
|
||||
String refundParam = buildRefundParam(null, null, trainingOrderInfo, refundDTO, outRefundNo);
|
||||
this.applyWeRefund(refundParam, null, null, trainingOrderInfo, null, refundDTO.getRefundReason());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user