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 = {BusinessException.class,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(refundDTO.getTotalAmount().intValue()); request.setRefundFee(refundDTO.getRefundAmount().intValue()); System.out.println("实际总金额" + refundDTO.getTotalAmount()); System.out.println("实际退款金额" + refundDTO.getRefundAmount()); // 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.setStatus(Constants.TWO); refund.setDoneDate(new Date()); refund.setCreator(refundDTO.getCreator()); 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.setPreOrderid(refundDTO.getOrderId()); transactions.setOnlineOrderid(refNum); transactions.setDoneDate(new Date()); if(refund.getType().equals(Constants.REFUND_TYPE.PLAT_AUTO.getKey())||refund.getType().equals(Constants.REFUND_TYPE.PLAT_FORCE.getKey())){ //平台自动退款 或 强制退款 transactions.setType(Constants.TRANSACTIONS_TYPE.REFUND.getKey()); transactions.setTitle(Constants.REFUND_TYPE.PLAT_AUTO.getInfo()); transactions.setContent(Constants.REFUND_TYPE.PLAT_AUTO.getInfo()); }else if(refund.getType().equals(Constants.REFUND_TYPE.NORMAL.getKey())){ //用户主动退款 transactions.setType(Constants.TRANSACTIONS_TYPE.REFUND.getKey()); transactions.setTitle(Constants.REFUND_TYPE.NORMAL.getInfo()); transactions.setContent(Constants.REFUND_TYPE.NORMAL.getInfo()); }else if(refund.getType().equals(Constants.REFUND_TYPE.BACK.getKey())){ //结算后退款 transactions.setType(Constants.TRANSACTIONS_TYPE.REFUND.getKey()); transactions.setTitle(Constants.REFUND_TYPE.BACK.getInfo()); transactions.setContent(Constants.REFUND_TYPE.BACK.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(),"退款发生异常请联系管理员"); } }