ChargeBusinessServiceImpl.java 9.27 KB
package com.zteits.charge.biz.impl;

import com.alibaba.fastjson.JSON;
import com.clouds.common.utils.DateUtil;
import com.clouds.common.utils.SeqHelper;
import com.zteits.charge.domain.kelin.post.QueryEquipAuthPost;
import com.zteits.charge.domain.kelin.post.QueryEquipChargeStatusPost;
import com.zteits.charge.domain.kelin.post.QueryStartChargePost;
import com.zteits.charge.domain.kelin.post.QueryStopChargePost;
import com.zteits.charge.domain.kelin.result.QueryEquipAuthResult;
import com.zteits.charge.domain.kelin.result.QueryStartChargeResult;
import com.zteits.charge.domain.kelin.result.QueryStopChargeResult;
import com.zteits.charge.service.spi.CallBusinessInfoSpi;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.constants.BasicEnum;
import com.zteits.clouds.api.apibase.constants.ErrorType;
import com.zteits.clouds.api.apibase.constants.charge.enums.ChargeOrderOperatorTypeEnum;
import com.zteits.clouds.api.apibase.constants.charge.enums.ChargeOrderStateEnum;
import com.zteits.clouds.api.apibase.constants.charge.enums.SuccStatEnum;
import com.zteits.clouds.api.apibase.exception.BizException;
import com.zteits.clouds.api.dto.charge.dto.StartStopChargeResultDTO;
import com.zteits.clouds.api.dto.charge.param.QueryChargeOrderStatusRequest;
import com.zteits.clouds.api.dto.charge.param.QueryEquipAuthRequest;
import com.zteits.clouds.api.dto.charge.param.StartStopChargeRequest;
import com.zteits.clouds.api.dto.charge.result.QueryEquipChargeStatusResult;
import com.zteits.clouds.api.dto.order.param.OrderChargeOperateLogRequest;
import com.zteits.clouds.api.service.charge.ChargeBusinessService;
import com.zteits.clouds.api.service.order.chargeOrder.oper.OrderChargeInfoOperService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;

/**
 * @since 2025-03-18
 */
@Slf4j
@Component
public class ChargeBusinessServiceImpl implements ChargeBusinessService {
    @Autowired
    private CallBusinessInfoSpi callBusinessInfoSpi;
    @Autowired
    private OrderChargeInfoOperService orderChargeInfoOperService;

    @Override
    public BizResult<Boolean> queryEquipAuth(QueryEquipAuthRequest request) {
        QueryEquipAuthPost post = new QueryEquipAuthPost();
        post.setConnectorId(request.getConnectorId());
        // 设置设备流水号
        String timestamp = DateUtil.getDateString(new Date(),DateUtil.yyyyMMddHHmmssSSS);
        String seq = "E"+ timestamp + SeqHelper.getSequence(timestamp);
        post.setEquipAuthSeq(seq);
        QueryEquipAuthResult queryEquipAuthResult = callBusinessInfoSpi.queryEquipAuth(request.getOperatorId(), post);
        if (queryEquipAuthResult == null) {
            return new BizResult<>(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"设备校验异常");
        }
        if (SuccStatEnum.SUCCESS.getCode() != queryEquipAuthResult.getSuccStat()){
            if (queryEquipAuthResult.getFailReason() == null) {
                return new BizResult<>(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"设备认证异常");
            }
            if (queryEquipAuthResult.getFailReason() == 1) {
                return new BizResult<>(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"设备尚未插枪");
            }
            if (queryEquipAuthResult.getFailReason() == 2) {
                return new BizResult<>(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"设备检测失败");
            }
            return new BizResult<>(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"设备认证失败");
        }
        return new BizResult<>(true);
    }

    @Override
    public BizResult<StartStopChargeResultDTO> queryStartCharge(StartStopChargeRequest request) {
        OrderChargeOperateLogRequest chargeLog = new OrderChargeOperateLogRequest(request.getOperatorId(), request.getOrderId(), ChargeOrderOperatorTypeEnum.REQUEST_START_CHARGE, JSON.toJSONString(request),request.getsOpName());
        try{
            StartStopChargeResultDTO dto = startCharge(request);
            chargeLog.setSuccess("请求成功。充电状态:"+ ChargeOrderStateEnum.getDescByCode(dto.getChargeOrderState()),JSON.toJSONString(dto));
            return new BizResult<>(dto);
        } catch (Exception e) {
            log.error("请求启动充电异常",e);
            chargeLog.setFail("请求失败。失败原因:"+e.getMessage(),null);
            return new BizResult<>(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,e.getMessage());
        } finally {
            log.info("保存启动充电日志:{}",JSON.toJSONString(chargeLog));
            orderChargeInfoOperService.saveOrderChargeOperateLog(chargeLog);
        }

    }

    private StartStopChargeResultDTO startCharge(StartStopChargeRequest request) {
        QueryStartChargePost post = new QueryStartChargePost();
        post.setStartChargeSeq(request.getOrderId());
        post.setConnectorId(request.getConnectorId());
        post.setChargeMoney(request.getChargeMoney());
        QueryStartChargeResult queryStartChargeResult = callBusinessInfoSpi.queryStartCharge(request.getOperatorId(), post);
        if (queryStartChargeResult == null) {
            throw new BizException(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"启动充电异常");
        }
        if (SuccStatEnum.SUCCESS.getCode() != queryStartChargeResult.getSuccStat()){
            if (queryStartChargeResult.getFailReason() == null) {
                throw new BizException(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"设备认证异常");
            }
            if (queryStartChargeResult.getFailReason() == 1) {
                throw new BizException(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"设备不存在");
            }
            if (queryStartChargeResult.getFailReason() == 2) {
                throw new BizException(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"设备离线");
            }
            throw new BizException(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"启动充电失败");
        }
        StartStopChargeResultDTO dto = new StartStopChargeResultDTO();
        dto.setOrderId(request.getOrderId());
        dto.setChargeOrderState(queryStartChargeResult.getStartChargeSeqStat());
        return dto;
    }

    @Override
    public BizResult<QueryEquipChargeStatusResult> queryEquipChargeStatus(QueryChargeOrderStatusRequest request) {
        QueryEquipChargeStatusPost post = new QueryEquipChargeStatusPost();
        post.setStartChargeSeq(request.getOrderId());
        QueryEquipChargeStatusResult queryEquipChargeStatusResult = callBusinessInfoSpi.queryEquipChargeStatus(request.getOperatorId(), post);
        return new BizResult<>(queryEquipChargeStatusResult);
    }

    @Override
    public BizResult<StartStopChargeResultDTO> queryStopCharge(StartStopChargeRequest request) {
        OrderChargeOperateLogRequest chargeLog = new OrderChargeOperateLogRequest(request.getOperatorId(), request.getOrderId(), ChargeOrderOperatorTypeEnum.REQUEST_STOP_CHARGE, JSON.toJSONString(request), request.getsOpName());
        try{
            StartStopChargeResultDTO dto = stopCharge(request);
            chargeLog.setSuccess("请求成功。充电状态:"+ ChargeOrderStateEnum.getDescByCode(dto.getChargeOrderState()),JSON.toJSONString(dto));
            return new BizResult<>(dto);
        } catch (Exception e) {
            log.error("请求停止充电异常",e);
            chargeLog.setFail("请求失败。失败原因:"+e.getMessage(),null);
            return new BizResult<>(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,e.getMessage());
        } finally {
            orderChargeInfoOperService.saveOrderChargeOperateLog(chargeLog);
        }
    }

    private StartStopChargeResultDTO stopCharge(StartStopChargeRequest request) {
        QueryStopChargePost post = new QueryStopChargePost();
        post.setConnectorId(request.getConnectorId());
        post.setStartChargeSeq(request.getOrderId());
        QueryStopChargeResult queryStopChargeResult = callBusinessInfoSpi.queryStopCharge(request.getOperatorId(), post);
        if (queryStopChargeResult == null) {
            throw new BizException(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"停止充电异常");
        }
        if (SuccStatEnum.SUCCESS.getCode() != queryStopChargeResult.getSuccStat()){
            if (queryStopChargeResult.getFailReason() == null) {
                throw new BizException(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"停止充电异常");
            }
            if (queryStopChargeResult.getFailReason() == 1) {
                throw new BizException(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"设备不存在");
            }
            if (queryStopChargeResult.getFailReason() == 2) {
                throw new BizException(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"设备离线");
            }
            if (queryStopChargeResult.getFailReason() == 3) {
                throw new BizException(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"设备已停止充电");
            }
            throw new BizException(ErrorType.CALL_THIRD_SERVICE_EXCEPTION,"停止充电失败");
        }
        StartStopChargeResultDTO startStopChargeResultDTO = new StartStopChargeResultDTO();
        startStopChargeResultDTO.setOrderId(request.getOrderId());
        startStopChargeResultDTO.setChargeOrderState(queryStopChargeResult.getStartChargeSeqStat());
        return startStopChargeResultDTO;
    }
}