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 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 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 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 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; } }