diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java index ab3f1683..7ebafe88 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java @@ -1,15 +1,34 @@ package com.ghy.order.service.impl; +import java.math.BigDecimal; import java.util.List; + +import com.alibaba.fastjson.JSONObject; +import com.ghy.common.adapay.model.AdapayStatusEnum; +import com.ghy.common.adapay.model.PaymentDTO; +import com.ghy.common.core.domain.AjaxResult; +import com.ghy.common.exception.base.BaseException; import com.ghy.common.utils.DateUtils; +import com.ghy.common.utils.ObjectUtils; import com.ghy.order.domain.AfterServiceImgs; +import com.ghy.order.domain.OrderDetail; +import com.ghy.order.domain.OrderMaster; import com.ghy.order.service.IAfterServiceImgsService; +import com.ghy.order.service.OrderDetailService; +import com.ghy.order.service.OrderMasterService; +import com.ghy.payment.domain.FinancialDetail; +import com.ghy.payment.domain.FinancialMaster; +import com.ghy.payment.service.AdapayService; +import com.ghy.payment.service.FinancialDetailService; +import com.ghy.payment.service.FinancialMasterService; +import com.huifu.adapay.core.exception.BaseAdaPayException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ghy.order.mapper.AfterServiceRecordMapper; import com.ghy.order.domain.AfterServiceRecord; import com.ghy.order.service.IAfterServiceRecordService; import com.ghy.common.core.text.Convert; +import org.springframework.util.Assert; /** * 售后记录Service业务层处理 @@ -26,6 +45,21 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService @Autowired private IAfterServiceImgsService afterServiceImgsService; + @Autowired + private FinancialDetailService financialDetailService; + + @Autowired + private OrderMasterService orderMasterService; + + @Autowired + private FinancialMasterService financialMasterService; + + @Autowired + private AdapayService adapayService; + + @Autowired + private OrderDetailService orderDetailService; + /** * 查询售后记录 * @@ -80,12 +114,51 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService /** * 修改售后记录 * - * @param afterServiceRecord 售后记录 + * @param param 售后记录 * @return 结果 */ @Override - public int updateAfterServiceRecord(AfterServiceRecord afterServiceRecord) - { + public int updateAfterServiceRecord(AfterServiceRecord param) { + AfterServiceRecord afterServiceRecord = this.selectAfterServiceRecordById(param.getId()); + Assert.notNull(afterServiceRecord, "售后记录不存在!"); + // 实际同意,需要发起退款,减少原单分账金额-调用退款接口 + if(param.getCustomerFinalCheck() == 1){ + OrderDetail orderDetail = orderDetailService.selectById(afterServiceRecord.getOrderDetailId()); + Assert.notNull(orderDetail, "子单不存在!"); + FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(afterServiceRecord.getOrderDetailId()); + Assert.notNull(financialDetail, "财务子单不存在!"); + BigDecimal refundMoney = BigDecimal.ZERO; + if(ObjectUtils.isNotEmpty(afterServiceRecord.getAgreedRefund())){ + refundMoney = afterServiceRecord.getAgreedRefund(); + }else { + refundMoney = afterServiceRecord.getRefund(); + } + if(refundMoney.compareTo(financialDetail.getPayMoney()) < 0){ + financialDetail.setPayMoney(financialDetail.getPayMoney().subtract(afterServiceRecord.getAgreedRefund())); + }else { + refundMoney = financialDetail.getPayMoney(); + financialDetail.setPayMoney(BigDecimal.ZERO); + } + // 发起支付撤销 + OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId()); + Assert.notNull(orderMaster, "找不到对应的订单"); + FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderDetail.getOrderMasterId()); + Assert.notNull(financialMaster, "找不到订单"); + Assert.isTrue(financialMaster.getPayStatus() == 1, "订单未支付"); + Assert.hasText(financialMaster.getPaymentId(), "找不到订单的支付记录,请联系管理员"); + JSONObject response = null; + try { + response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), String.valueOf(refundMoney)); + if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) { + if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) { + afterServiceRecord.setCustomerFinalCheck(1L); + financialDetailService.updateFinancialDetail(financialDetail); + } + } + } catch (BaseAdaPayException e) { + throw new BaseException("发起退款异常!"); + } + } afterServiceRecord.setUpdateTime(DateUtils.getNowDate()); return afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord); }