package com.doumee.core.wx; 
 | 
  
 | 
import com.doumee.biz.system.SystemDictDataBiz; 
 | 
import com.doumee.core.constants.Constants; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.utils.ID; 
 | 
import com.doumee.dao.business.RefundMapper; 
 | 
import com.doumee.dao.business.TransactionsMapper; 
 | 
import com.doumee.dao.business.model.Refund; 
 | 
import com.doumee.dao.business.model.Transactions; 
 | 
import com.doumee.dao.business.web.request.RefundDTO; 
 | 
import com.doumee.service.business.RefundService; 
 | 
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; 
 | 
import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; 
 | 
import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; 
 | 
import com.github.binarywang.wxpay.exception.WxPayException; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.checkerframework.checker.units.qual.A; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.util.Date; 
 | 
  
 | 
/** 
 | 
 * 微信小程序-公共方法 
 | 
 */ 
 | 
@Service 
 | 
@Slf4j 
 | 
public class WxMiniUtilService { 
 | 
  
 | 
    @Autowired 
 | 
    private RefundMapper refundMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private TransactionsMapper transactionsMapper; 
 | 
  
 | 
  
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    public Refund wxRefund(RefundDTO refundDTO) { 
 | 
        try { 
 | 
            // 发送退款请求 
 | 
            String refNum = ID.nextGUID(); 
 | 
            WxPayRefundRequest request = new WxPayRefundRequest(); 
 | 
            request.setOutTradeNo(refundDTO.getOrderId()); 
 | 
            request.setOutRefundNo(refNum); 
 | 
//            request.setTotalFee(BaseWxPayRequest.yuanToFen(refundDTO.getTotalAmount().toString())); 
 | 
//            request.setRefundFee(BaseWxPayRequest.yuanToFen(refundDTO.getRefundAmount().toString())); 
 | 
            System.out.println("实际总金额" + BaseWxPayRequest.yuanToFen(refundDTO.getTotalAmount().toString())); 
 | 
            System.out.println("实际退款金额" + BaseWxPayRequest.yuanToFen(refundDTO.getRefundAmount().toString())); 
 | 
  
 | 
            request.setTotalFee(1); 
 | 
            request.setRefundFee(1); 
 | 
            WxPayRefundResult response = WxMiniConfig.wxPayService.refund(request); 
 | 
            if ("SUCCESS".equals(response.getReturnCode()) && "SUCCESS".equals(response.getResultCode())) { 
 | 
                //存储退款记录 与 流水记录 
 | 
                Refund refund = new Refund(); 
 | 
                refund.setId(Constants.getUUID()); 
 | 
                refund.setCreateDate(new Date()); 
 | 
                refund.setMemberId(refundDTO.getMemberId()); 
 | 
                refund.setMoney(refundDTO.getRefundAmount()); 
 | 
                refund.setOnlineOrderid(refNum); 
 | 
                refund.setPayWay(Constants.ZERO); 
 | 
                refund.setDoneDate(new Date()); 
 | 
                refund.setType(refundDTO.getType()); 
 | 
                refund.setObjId(refundDTO.getOrderId()); 
 | 
                refund.setReason(refundDTO.getReason()); 
 | 
                refund.setCanBalance(refundDTO.getCanBalance()); 
 | 
                refundMapper.insert(refund); 
 | 
                //存储交易流水表 
 | 
                Transactions transactions = new Transactions(); 
 | 
                transactions.setId(Constants.getUUID()); 
 | 
                transactions.setMemberId(refundDTO.getMemberId()); 
 | 
                transactions.setCreateDate(new Date()); 
 | 
                transactions.setIsdeleted(Constants.ZERO); 
 | 
                transactions.setOrderId(refundDTO.getOrderId()); 
 | 
                transactions.setMoney(refundDTO.getRefundAmount()); 
 | 
                transactions.setType(refundDTO.getType()==Constants.TRANSACTIONS_TYPE.REFUND.getKey()?Constants.TRANSACTIONS_TYPE.PLATFORMREFUND.getKey():Constants.REFUND_TYPE.BACK.getKey()); 
 | 
                transactions.setPreOrderid(refundDTO.getOrderId()); 
 | 
                transactions.setOnlineOrderid(refNum); 
 | 
                transactions.setDoneDate(new Date()); 
 | 
                transactions.setTitle(Constants.TRANSACTIONS_TYPE.get(transactions.getType()).getName()); 
 | 
                transactions.setContent(Constants.TRANSACTIONS_TYPE.get(transactions.getType()).getInfo()); 
 | 
                transactions.setBalance(BigDecimal.ZERO); 
 | 
                transactions.setObjId(refund.getId()); 
 | 
                transactions.setObjType(Constants.ONE); 
 | 
                transactionsMapper.insert(transactions); 
 | 
                return refund; 
 | 
            } else{ 
 | 
                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),response.getErrCode() + response.getErrCodeDes()); 
 | 
            } 
 | 
        } catch (WxPayException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"退款发生异常请联系管理员"); 
 | 
    } 
 | 
  
 | 
} 
 |