如何对接汽车充电桩协议,我这里给出思路,Java使用netty、php使用swoole等,可以实现自定义协议,首先监听服务端口,对充电桩的数据解析,来一条数据,解析后,处理,回复设备一条数据。这里给出JAVA版的部分示例代码:

package org.jeecg.charge.server;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.*;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import io.netty.handler.timeout.IdleStateHandler;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.charge.protocol.ChargeByteToMessageDecoder;
import org.jeecg.charge.protocol.ChargeMessageToByteEncoder;
import org.jeecg.charge.server.handler.CloseHandler;
import org.jeecg.charge.server.handler.LongTimeNoReadHandler;
import org.jeecg.charge.server.strategy.ChargeOperatorFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.concurrent.TimeUnit;

@Slf4j
@Component
public class CarChargeServer {

    private ServerBootstrap bootstrap;

    @Autowired
    private ChargeOperatorFactory factory;

    @PostConstruct
    public void init() {
        log.info("初始化汽车充电netty服务器!");
        EventLoopGroup bossGroup = new NioEventLoopGroup(), workerGroup = new NioEventLoopGroup();

        //创建服务端启动引导类
        bootstrap = new ServerBootstrap();
        bootstrap
                .group(bossGroup, workerGroup)   //指定事件循环组
                .channel(NioServerSocketChannel.class)   //指定为NIO的ServerSocketChannel
                .childHandler(new ChannelInitializer<SocketChannel>() {
                    @Override
                    protected void initChannel(SocketChannel channel) {
                        //获取流水线,当我们需要处理客户端的数据时,实际上是像流水线一样在处理,这个流水线上可以有很多Handler
                        channel.pipeline()
                                .addLast(new LengthFieldBasedFrameDecoder(512, 1, 1, 2, 0))
                                .addLast(new LoggingHandler(LogLevel.INFO))
                                .addLast(new ChargeMessageToByteEncoder())
                                .addLast(new ChargeByteToMessageDecoder())
                                .addLast(new IdleStateHandler(20, 0, 0, TimeUnit.SECONDS))
                                .addLast(new LongTimeNoReadHandler())
                                .addLast(new ChannelInboundHandlerAdapter() {
                                    @Override
                                    public void channelRead(ChannelHandlerContext ctx, Object msg) {  //ctx是上下文,msg是收到的消息,默认以ByteBuf形式
                                        String s = msg.toString();
                                        log.info("charge equipment request msg : {}", s);
                                        String type = s.substring(10, 12);
                                        log.info("charge equipment  request type : {}", type);
                                        factory.getBaseChargeStrategy(type).execute(ctx, s);
                                    }
                                }).addLast(new CloseHandler());
                    }
                });
        //最后绑定端口,启动
        bootstrap.bind(1999);
    }

}

给出PHP版服务代码:

<?php

namespace cgcore\command;

use Channel\Server;
use GatewayWorker\BusinessWorker;
use GatewayWorker\Register;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use Workerman\Worker;

class Bullc extends Command
{
    /**
     * @var array
     */
    protected $config = [];

    /**
     * @var Worker
     */
    protected $registerWorkerServer;

    /**
     * @var Server
     */
    protected $gatewayWorkerServer;

    /**
     * @var Server
     */
    protected $businessWorkerServer;

    /**
     * @var Input
     */
    public $input;

    /**
     * @var Output
     */
    public $output;

    protected function configure()
    {
        // 指令配置
        $this->setName('bullc')
            ->addArgument('status', Argument::REQUIRED, 'start/stop/reload/status/connections')
            ->addOption('d', null, Option::VALUE_NONE, 'daemon(守护进程)方式启动')
            ->setDescription('start/stop/restart gatewayworker');
    }

    protected function init(Input $input, Output $output)
    {
        ini_set('default_socket_timeout', -1);
        global $argv;
        $argv[1] = $input->getArgument('status') ?: 'start';
        if ($input->hasOption('d')) {
            $argv[2] = '-d';
        } else {
            unset($argv[2]);
        }
        $gatewayworker = \think\Config::get('gatewayworker');
        $this->config = $gatewayworker['bullc'];
    }

    protected function execute(Input $input, Output $output)
    {
        $this->init($input, $output);
        $this->bindHandle();
        try {
            Worker::$pidFile = RUNTIME_PATH . 'bullc.pid';
            Worker::$logFile = RUNTIME_PATH . 'bullc.log';
            Worker::runAll();
        } catch (\Exception $e) {
            $output->warning($e->getMessage());
        }
    }

    protected function bindHandle()
    {
        if (is_null($this->registerWorkerServer)) {
            $this->registerWorkerServer = new Register('text://' . $this->config['registerAddress']);
            $this->registerWorkerServer->name = isset($this->config['name']) ? ($this->config['name'] . 'Register') : 'bullcRegister';
        }

        if (is_null($this->gatewayWorkerServer)) {
            $gateway = new \GatewayWorker\Gateway("{$this->config['protocol']}://" . config('site.bullc_server_port'));

            // gateway名称,status方便查看
            $gateway->name = isset($this->config['name']) ? ($this->config['name'] . 'Gateway') : 'bullcAppGateway';
            // gateway进程数
            $gateway->count = $this->config['serverCount'] ?? 4;
            // 本机ip,分布式部署时使用内网ip
            $gateway->lanIp = '127.0.0.1';
            // 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
            // 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
            $gateway->startPort = $this->config['startPort'];
            // 服务注册地址
            $gateway->registerAddress = $this->config['registerAddress'];
            // 心跳间隔
            $gateway->pingInterval = 30;
            $gateway->pingNotResponseLimit = 5;
            //心跳数据
//            $gateway->pingData = '{"type":"ping"}';
            $this->gatewayWorkerServer = $gateway;
        }

        if (is_null($this->businessWorkerServer)) {
            // bussinessWorker 进程
            $worker = new BusinessWorker();
            $worker->eventHandler = $this->config['eventHandler'];
            // worker名称
            $worker->name = isset($this->config['name']) ? ($this->config['name'] . 'BusinessWorker') : 'bullcAppBusinessWorker';
            // bussinessWorker进程数量
            $worker->count = $this->config['serverCount'] ?? 4;
            // 服务注册地址
            $worker->registerAddress = $this->config['registerAddress'];
            $this->businessWorkerServer = $worker;
        }
    }
}
模块 功能简介 功能说明
会员 会员管理 会员列表 会员列表中可批量发放优惠券、发充值点卡、发刮刮卡、群发短信。会员与小程序绑定
内部车辆列表 系统会员录入的车辆、VIN、车牌号等
CEC车辆列表 CEC引流平台充电的车辆、VIN、车牌号等
SVIP开通记录 SVIP开通记录,SVIP分为体验月卡、月卡、季卡、年卡
占位订单 占位订单 充电未及时驶离产生占位费用,支付后才能下次充电
团队管理 团队管理 团队钱包、团队钱包流水、团队充电记录
电站 电站管理 CEC电站列表 CEC引流平台拉取的电站列表
我方电站列表 平台录入的电站,可设置电站参数、营销参数、活动、CEC配置等
站长管理 站长管理 站长与前台会员一对一列表,用于记录每个电站的充电数据
加盟申请 前台提交的加盟申请,可通过或驳回。通过会将申请人设置为站长。如需站长前台添加电站设备,请在会员管理编辑权限
设备 本地设备 本地设备 平台站长投放的电站设备,可批量添加和设置参数
CEC设备 CEC设备 CEC平台拉下来的设备
营销 优惠券 优惠券列表 会员券、满减券、折扣券、定额券、购买券、积分兑换券
用户优惠券 用户领取优惠券、用户购买优惠券、用户兑换优惠券
购买优惠券 购买优惠券订单
刮刮卡 刮刮卡模板 刮刮卡为万能卡券,用于线下充电营销
刮刮卡列表 刮刮卡为万能卡券,用于线下充电营销
周充月充 周充月充 周充月充达标奖励现金或积分商品。达标自动发放。关联的数据为手机号。涉及三种来源的充电订单
积分商城 商品管理 兑换限制、会员专属
兑换订单 兑换可发货
充值点卡 点卡管理 发放给用户的充值点卡可直接凭卡密在小程序上充值
购买点卡 设置点卡面额和购买价格,如果点卡有库存即可即买即充。这部分消费不能开票
财务 发票 开票记录 可开票可红冲,对接的诺诺发票
开票项目 分为数据库列表中自动统计的数据、手动开票的项目
退款 退款 在规定时间内上架有限库存的商品,用户参与抢购,超出时间或库存为0时秒杀结束
提现 提现 微信V3提现,可线上审核线下打款,用于站长服务费分账金额提现
积分兑换现金 积分兑换现金 获得的积分可在指定时间提现到零钱
分账 分账 对每笔充电订单的服务费定时分账给站长和其他分账管理员
积分日志 积分日志 积分流水账
余额日志 余额日志 余额流水账,包括充值账户、赠送账户、点卡充值账户
余额充值 余额充值 余额充值可设置充值赠送优惠,分为两个账户:线上充值余额账户、赠送余额账户
平台管理 小程序管理 小程序管理 可设置小程序基本参数、支付信心、证书等
道闸管理 道闸管理 支持主动通知和道闸查询两种方式获取停车优惠信息
平台广告 平台广告 支持小程序Banner广告
互联互通 CEC平台 CEC平台 设置CEC平台代码标识
CEC配置 CEC配置 对不同平台不同运营商不同配置
CEC日志 CEC日志 CEC请求日志
数据统计 数据统计 充电统计 30天、按周、按月、按年统计充电订单金额、订单数量、充电电量走势
运能数据 统计单枪运能
SVIP统计 30天、按周、按月、按年统计充值金额走势
用户统计 30天、按周、按月、按年统计用户注册数量走势
充值统计 30天、按周、按月、按年统计用户充值金额走势
系统设置 系统配置 常规配置 站点信息、系统参数、会员设置、充值套餐、SVIP套餐、诺诺发票、积分配置、点卡配置、周充月充配置
其他配置 其他基础配置
计费策略 计费策略 计费策略列表,添加分为标准固定费率和分时计费灵活费率
计费规划 定时设置生效计费策略
评价模板 评价模板 可添加编辑评价模板
权限控制 身份管理 添加后台管理的身份及权限
管理员列表 添加及管理后台管理员的账号信息
权限规则 管理后台的菜单等规则
页面设置 广告位 首页、积分商城也顶部轮播、金刚区数据
前端页面 前端页面基础数据录入
消息日志 消息日志 系统报错信息、CEC接口请求日志、后台操作日志

微信小程序搜索:河南玉阳软件科技

 充值模式: 平台充值,全平台使用,消费分账

  • 系统代理(合伙)模式:

  • 按电费服务费比例分成

  • 目前分账为系统记录、代理商申请提现(微信自动打款或线下打款),需要空中分账的客户对接三方支付渠道

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐