mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-26 05:55:03 +08:00
234 lines
7.8 KiB
Java
234 lines
7.8 KiB
Java
package com.jsowell.pile.service;
|
||
|
||
import com.google.common.collect.Lists;
|
||
import com.jsowell.common.constant.CacheConstants;
|
||
import com.jsowell.common.core.redis.RedisCache;
|
||
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
||
import com.jsowell.common.exception.BusinessException;
|
||
import com.jsowell.common.util.StringUtils;
|
||
import com.jsowell.pile.domain.PileBillingTemplate;
|
||
import com.jsowell.pile.domain.PileFirmwareInfo;
|
||
import com.jsowell.pile.domain.ykcCommond.*;
|
||
import com.jsowell.pile.dto.PublishBillingTemplateDTO;
|
||
import com.jsowell.pile.dto.RemoteAccountBalanceUpdateDTO;
|
||
import com.jsowell.pile.dto.UpdateFirmwareDTO;
|
||
import com.jsowell.pile.vo.web.BillingTemplateVO;
|
||
import com.jsowell.pile.vo.web.PileDetailVO;
|
||
import org.apache.commons.collections4.CollectionUtils;
|
||
import org.slf4j.Logger;
|
||
import org.slf4j.LoggerFactory;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.stereotype.Service;
|
||
|
||
import java.math.BigDecimal;
|
||
import java.util.Date;
|
||
import java.util.List;
|
||
|
||
@Service
|
||
public class PileRemoteService {
|
||
private final Logger log = LoggerFactory.getLogger(this.getClass());
|
||
|
||
@Autowired
|
||
private PileBillingTemplateService pileBillingTemplateService;
|
||
|
||
@Autowired
|
||
private PileBasicInfoService pileBasicInfoService;
|
||
|
||
@Autowired
|
||
private YKCPushCommandService ykcPushCommandService;
|
||
|
||
@Autowired
|
||
private PileFirmwareInfoService pileFirmwareInfoService;
|
||
|
||
@Autowired
|
||
private RedisCache redisCache;
|
||
/**
|
||
* 获取充电桩实时数据信息
|
||
*
|
||
* @param pileSn 充电桩sn
|
||
* @param connectorCode 枪口号
|
||
*/
|
||
public void getRealTimeMonitorData(String pileSn, String connectorCode) {
|
||
if (StringUtils.isNotEmpty(pileSn) || StringUtils.isNotEmpty(connectorCode)) {
|
||
GetRealTimeMonitorDataCommand command = GetRealTimeMonitorDataCommand.builder()
|
||
.pileSn(pileSn)
|
||
.connectorCode(connectorCode)
|
||
.build();
|
||
ykcPushCommandService.pushGetRealTimeMonitorDataCommand(command);
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 重启指令
|
||
*
|
||
* @param pileSn 充电桩sn
|
||
*/
|
||
public void reboot(String pileSn) {
|
||
RebootCommand command = RebootCommand.builder().pileSn(pileSn).build();
|
||
ykcPushCommandService.pushRebootCommand(command);
|
||
}
|
||
|
||
/**
|
||
* 远程启动充电 0x34
|
||
*
|
||
* @param pileSn 充电桩sn
|
||
*/
|
||
public void remoteStartCharging(String pileSn, String connectorCode, String transactionCode, BigDecimal chargeAmount) {
|
||
if (StringUtils.isEmpty(pileSn) || StringUtils.isEmpty(connectorCode)) {
|
||
log.warn("远程启动充电, 充电桩编号和枪口号不能为空");
|
||
return;
|
||
}
|
||
log.info("=====平台下发指令=====: 远程启动充电, 桩号:{}, 枪口号:{}", pileSn, connectorCode);
|
||
StartChargingCommand startChargingCommand = StartChargingCommand.builder()
|
||
.pileSn(pileSn)
|
||
.connectorCode(connectorCode)
|
||
.transactionCode(transactionCode)
|
||
.chargeAmount(chargeAmount)
|
||
.build();
|
||
ykcPushCommandService.pushStartChargingCommand(startChargingCommand);
|
||
}
|
||
|
||
/**
|
||
* 远程停止充电
|
||
*/
|
||
public void remoteStopCharging(String pileSn, String connectorCode, String transactionCode) {
|
||
// 获取充电桩0x13数据,校验交易流水号是否一致
|
||
String pileIsChargingKey = CacheConstants.PILE_IS_CHARGING + pileSn + connectorCode;
|
||
String redisResult = redisCache.getCacheObject(pileIsChargingKey);
|
||
if (!StringUtils.equals(redisResult, transactionCode)) {
|
||
log.info("发送远程停止充电指令-充电桩枪口编号:{}, 获取到正在充电中的交易流水号:{}与入参交易流水号:{}不一致", pileSn + connectorCode, redisResult, transactionCode);
|
||
return;
|
||
}
|
||
StopChargingCommand command = StopChargingCommand.builder()
|
||
.pileSn(pileSn)
|
||
.connectorCode(connectorCode)
|
||
.build();
|
||
ykcPushCommandService.pushStopChargingCommand(command);
|
||
}
|
||
|
||
/**
|
||
* 下发充电桩二维码
|
||
*
|
||
* @param pileSn 充电桩sn
|
||
*/
|
||
public void issueQRCode(String pileSn) {
|
||
issueQRCode(pileSn, null);
|
||
}
|
||
|
||
public void issueQRCode(String pileSn, String qrcodePrefix) {
|
||
IssueQRCodeCommand command = IssueQRCodeCommand.builder().pileSn(pileSn).build();
|
||
if (StringUtils.isNotBlank(qrcodePrefix)) {
|
||
command.setQrcodePrefix(qrcodePrefix);
|
||
}
|
||
ykcPushCommandService.pushIssueQRCodeCommand(command);
|
||
}
|
||
|
||
/**
|
||
* 充电桩对时
|
||
*
|
||
* @param pileSn 充电桩sn
|
||
*/
|
||
public void proofreadTime(String pileSn) {
|
||
|
||
ProofreadTimeCommand command = ProofreadTimeCommand.builder().pileSn(pileSn).build();
|
||
ykcPushCommandService.pushProofreadTimeCommand(command);
|
||
}
|
||
|
||
/**
|
||
* 下发充电桩计费模型
|
||
*/
|
||
public void publishPileBillingTemplate(String pileSn, BillingTemplateVO billingTemplateVO) {
|
||
|
||
PublishPileBillingTemplateCommand command = PublishPileBillingTemplateCommand.builder()
|
||
.billingTemplateVO(billingTemplateVO)
|
||
.pileSn(pileSn)
|
||
.build();
|
||
ykcPushCommandService.pushPublishPileBillingTemplate(command);
|
||
}
|
||
|
||
/**
|
||
* 下发计费模板
|
||
* @param dto
|
||
* @return
|
||
*/
|
||
public boolean publishBillingTemplate(PublishBillingTemplateDTO dto) {
|
||
|
||
// 获取计费模板信息
|
||
BillingTemplateVO billingTemplateVO = pileBillingTemplateService.selectBillingTemplateByTemplateId(dto.getTemplateId());
|
||
if (billingTemplateVO == null) {
|
||
log.warn("获取计费模板信息, 通过模板id:{}查询计费模板为null", dto.getTemplateId());
|
||
return false;
|
||
}
|
||
// 更新计费模板的发布时间
|
||
PileBillingTemplate pileBillingTemplate = new PileBillingTemplate();
|
||
pileBillingTemplate.setId(Long.valueOf(billingTemplateVO.getTemplateId()));
|
||
pileBillingTemplate.setPublishTime(new Date());
|
||
pileBillingTemplateService.updatePileBillingTemplate(pileBillingTemplate);
|
||
|
||
// 获取到站点下所有的桩
|
||
List<PileDetailVO> pileList = pileBasicInfoService.selectPileListByStationIds(Lists.newArrayList(Long.valueOf(dto.getStationId())));
|
||
if (CollectionUtils.isEmpty(pileList)) {
|
||
log.warn("获取到站点下所有的桩, 通过站点id:{}查询充电桩列表为空", dto.getStationId());
|
||
return false;
|
||
}
|
||
|
||
// 保存计费模板和桩的关系
|
||
// List<PileBillingRelation> relationList = Lists.newArrayList();
|
||
for (PileDetailVO pileInfoVO : pileList) {
|
||
// push
|
||
publishPileBillingTemplate(pileInfoVO.getPileSn(), billingTemplateVO);
|
||
|
||
// 入库
|
||
// relationList.add(PileBillingRelation.builder()
|
||
// .pileSn(pileInfoVO.getPileSn())
|
||
// .billingTemplateCode(billingTemplateVO.getTemplateCode())
|
||
// .stationId(dto.getStationId())
|
||
// .build());
|
||
}
|
||
|
||
// if (CollectionUtils.isNotEmpty(relationList)) {
|
||
// pileBillingTemplateService.insertPileBillingRelation(relationList);
|
||
// }
|
||
|
||
// 修改计费模板状态
|
||
pileBillingTemplateService.changeStationTemplate(dto.getStationId(), dto.getTemplateId());
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 远程更新
|
||
*/
|
||
public void updateFirmware(UpdateFirmwareDTO dto) {
|
||
PileFirmwareInfo pileFirmwareInfo = pileFirmwareInfoService.selectPileFirmwareInfoById(Long.valueOf(dto.getFirmwareId()));
|
||
if (pileFirmwareInfo == null) {
|
||
throw new BusinessException(ReturnCodeEnum.CODE_FIRMWARE_NOT_FOUND_ERROR);
|
||
}
|
||
UpdateFirmwareCommand command = UpdateFirmwareCommand.builder()
|
||
.pileSnList(dto.getPileSns())
|
||
.filePath(pileFirmwareInfo.getFilePath())
|
||
.build();
|
||
ykcPushCommandService.pushUpdateFileCommand(command);
|
||
}
|
||
|
||
/**
|
||
* 远程账户余额更新
|
||
*/
|
||
public void remoteAccountBalanceUpdate(RemoteAccountBalanceUpdateDTO dto) {
|
||
RemoteAccountBalanceUpdateCommand command = RemoteAccountBalanceUpdateCommand.builder()
|
||
.pileSn(dto.getPileSn())
|
||
.connectorCode(dto.getConnectorCode())
|
||
.accountBalance(dto.getAccountBalance())
|
||
|
||
.build();
|
||
if (StringUtils.isNotBlank(dto.getLogicCard())) {
|
||
command.setLogicCard(dto.getLogicCard());
|
||
}
|
||
ykcPushCommandService.pushAccountBalanceUpdateCommand(command);
|
||
}
|
||
|
||
public void remoteControlGroundLock(RemoteControlGroundLockCommand command) {
|
||
ykcPushCommandService.pushRemoteControlGroundLock(command);
|
||
}
|
||
}
|