BankPayServiceImpl.java 3.9 KB
package com.zteits.ipay.biz;

import com.alibaba.fastjson.JSONObject;
import com.clouds.common.utils.AmountUtils;
import com.clouds.common.utils.DateUtil;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.constants.ErrorType;
import com.zteits.clouds.api.apibase.constants.PayResultEnum;
import com.zteits.clouds.api.apibase.exception.BizException;
import com.zteits.clouds.api.dto.order.payorder.param.QueryPayOrderByPayOrderIdRequest;
import com.zteits.clouds.api.dto.pay.bank.OrderQueryStateRes;
import com.zteits.clouds.api.service.order.pay.BankPayService;
import com.zteits.ipay.service.bank.ABCBankPayInnerService;
import com.zteits.ipay.service.bank.vo.query.ABCBankQueryOrderRes;
import com.zteits.ipay.service.bank.vo.query.ABCOrderRes;
import com.zteits.order.dao.payorder.PayOrderDao;
import com.zteits.order.domain.PayOrder;
import org.apache.commons.net.util.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * <p>
 * Copyright: Copyright (c) 2018 zteits
 *
 * @ClassName: EtcPayService
 * @Description:
 * @version: v1.0.0
 * @author: zengqc
 * @date: 2020-06-03 11:10
 */
@Service("com.zteits.ipay.biz.BankPayServiceImpl")
public class BankPayServiceImpl implements BankPayService {


    private static final Logger logger = LoggerFactory.getLogger(BankPayServiceImpl.class);


    @Autowired
    private ABCBankPayInnerService abcBankPayInnerService;

    @Autowired
    private PayOrderDao payOrderDao;


    @Override
    public BizResult<OrderQueryStateRes> queryOrderForAbc(QueryPayOrderByPayOrderIdRequest req) {
        OrderQueryStateRes orderQueryStateRes = new OrderQueryStateRes(PayResultEnum.PAY_FAIL, "9999", "交易失败");

        logger.info("农行查询订单交易状态入参:{}", JSONObject.toJSONString(req));

        PayOrder payOrder = payOrderDao.queryPayOrderByPayOrderId(req.getPayOrderId());
        if (payOrder == null) {
            throw new BizException(ErrorType.BIZ_ERROR, "没有查到当前支付单信息");
        }
        ABCBankQueryOrderRes abcBankQueryOrderRes = abcBankPayInnerService.queryOrderForAbc(req.getPayOrderId(), payOrder.getAppId());

        /**交易成功*/
        if ("0000".equals(abcBankQueryOrderRes.getReturnCode())) {
            orderQueryStateRes.setPayResultEnum(PayResultEnum.PAY_SUCCESS);
            orderQueryStateRes.setErrCode(abcBankQueryOrderRes.getReturnCode());
            orderQueryStateRes.setErrMsg(abcBankQueryOrderRes.getErrorMessage());
            orderQueryStateRes.setPayOrderId(req.getPayOrderId());

            /**订单信息*/
            String order = new String(Base64.decodeBase64(abcBankQueryOrderRes.getOrder()));
            ABCOrderRes abcOrderRes = JSONObject.parseObject(order, ABCOrderRes.class);
            if ("04".equals(abcOrderRes.getStatus())) {
                Date payFinishTime = DateUtil.to_date(abcOrderRes.getOrderDate() + abcOrderRes.getOrderTime(), "yyyy/MM/ddHH:mm:ss");
                Long fee = Long.valueOf(AmountUtils.changeY2F(abcOrderRes.getOrderAmount()));
                orderQueryStateRes.setPayedFinishTime(payFinishTime);
                orderQueryStateRes.setOrderPayedFee(fee);
            }else if("02".equals(abcOrderRes.getStatus())){
                orderQueryStateRes.setPayResultEnum(PayResultEnum.PAY_NO_KNOW);
                orderQueryStateRes.setErrCode(abcBankQueryOrderRes.getReturnCode());
                orderQueryStateRes.setErrMsg(abcBankQueryOrderRes.getErrorMessage());
            }else{
                orderQueryStateRes.setPayResultEnum(PayResultEnum.PAY_FAIL);
                orderQueryStateRes.setErrCode(abcBankQueryOrderRes.getReturnCode());
                orderQueryStateRes.setErrMsg(abcBankQueryOrderRes.getErrorMessage());
            }
        }
        return new BizResult<>(orderQueryStateRes);
    }
}