Pu Zhibing
2025-01-22 c8cee43365a79b026502908b4aa361f08d59b42a
修改bug
35个文件已添加
5个文件已修改
1863 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/TCECController.java 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseRequest.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseResult.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ChargeDetail.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorInfo.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatusInfo.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/EquipmentInfo.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/EquipmentStatsInfo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationChargeOrderInfo.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationChargeOrderInfoResult.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationEquipChargeStatusResult.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationStationStatusResult.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/OperatorInfo.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/PolicyInfo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryEquipBusinessPolicy.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryEquipBusinessPolicyResult.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryEquipChargeStatus.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryEquipChargeStatusResult.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStats.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStatsResult.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStatus.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStatusResult.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationsInfo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationsInfoResult.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationInfo.java 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfo.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatusInfo.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/ConnectorTypeEnum.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/ConstructionEnum.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/EquipmentTypeEnum.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/StationStatusEnum.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/StationTypeEnum.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java
@@ -54,7 +54,16 @@
            public R<String> updateChargingGunById(TChargingGun chargingGun) {
                return R.fail("编辑充电枪失败:" + throwable.getMessage());
            }
            @Override
            public R<List<TChargingGun>> getChargingGunByChargingPileId(Integer chargingPileId) {
                return R.fail("根据充电桩id获取枪失败:" + throwable.getMessage());
            }
            @Override
            public R pushChargingGunStatus(Integer id, Integer status) {
                return R.fail("接口状态变化后推送给第三方失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java
@@ -8,10 +8,9 @@
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * @author zhibing.pu
@@ -58,5 +57,23 @@
     */
    @PostMapping("/t-charging-gun/updateChargingGunById")
    R<String> updateChargingGunById(@RequestBody TChargingGun chargingGun);
    /**
     * 根据充电桩id获取枪
     * @param chargingPileId
     * @return
     */
    @PostMapping("/t-charging-gun/getChargingGunByChargingPileId")
    R<List<TChargingGun>> getChargingGunByChargingPileId(@RequestParam("chargingPileId") Integer chargingPileId);
    /**
     * 接口状态变化后推送给第三方
     * @param id
     * @param status
     * @return
     */
    @PostMapping("/t-charging-gun/pushChargingGunStatus")
    R pushChargingGunStatus(@RequestParam("id") Integer id, @RequestParam("status") Integer status);
}
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java
@@ -7,6 +7,7 @@
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.page.PageInfo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
@@ -40,4 +41,14 @@
    R<List<GetSiteListDTO>> getSiteListByUserId(@RequestParam("userId") Long userId);
    @GetMapping("/partner/getPartnerR/{id}")
    R<Partner> getPartnerR(@PathVariable("id") Integer id);
    /**
     * 分页查询站电数据
     * @param PageNo
     * @param PageSize
     * @return
     */
    @PostMapping("/site/getSiteListPaging")
    PageInfo<Site> getSiteListPaging(@RequestParam("PageNo") Integer PageNo, @RequestParam("PageSize") Integer PageSize);
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -611,4 +611,18 @@
        List<Site> list = siteService.list(new LambdaQueryWrapper<Site>().eq(Site::getDelFlag, 0));
        return R.ok(list);
    }
    /**
     * 分页查询站电数据
     * @param PageNo
     * @param PageSize
     * @return
     */
    @PostMapping("/getSiteListPaging")
    public PageInfo<Site> getSiteListPaging(@RequestParam("PageNo") Integer PageNo, @RequestParam("PageSize") Integer PageSize){
        PageInfo<Site> pageInfo = new PageInfo<>(PageNo, PageSize);
        PageInfo<Site> page = siteService.lambdaQuery().page(pageInfo);
        return page;
    }
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
@@ -294,5 +294,18 @@
        chargingGunService.updateById(chargingGun);
        return R.ok();
    }
    /**
     * 根据充电桩id获取枪
     * @param chargingPileId
     * @return
     */
    @PostMapping("/getChargingGunByChargingPileId")
    public R<List<TChargingGun>> getChargingGunByChargingPileId(@RequestParam("chargingPileId") Integer chargingPileId){
        List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPileId).eq(TChargingGun::getDelFlag, 0));
        return R.ok(list);
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/TCECController.java
New file
@@ -0,0 +1,259 @@
package com.ruoyi.integration.controller;
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.integration.drainage.TCECUtil;
import com.ruoyi.integration.drainage.model.*;
import com.ruoyi.integration.drainage.model.enu.*;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/1/21 17:52
 */
@RestController
@RequestMapping("")
public class TCECController {
    @Resource
    private SiteClient siteClient;
    @Resource
    private ChargingPileClient chargingPileClient;
    @Resource
    private ChargingGunClient chargingGunClient;
    /**
     * 查询充电站信息
     * @param query
     * @return
     */
    @PostMapping("/query_stations_info")
    public QueryStationsInfoResult queryStationsInfo(@RequestBody QueryStationsInfo query){
        Integer pageNo = query.getPageNo();
        Integer pageSize = query.getPageSize();
        if(null == pageNo){
            pageNo = 1;
        }
        if(null == pageSize){
            pageSize = 10;
        }
        PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize);
        QueryStationsInfoResult queryStationsInfoResult = new QueryStationsInfoResult();
        queryStationsInfoResult.setPageNo(pageNo);
        queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue());
        queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue());
        List<StationInfo> StationInfos = new ArrayList<>();
        for (Site datum : siteListPaging.getRecords()) {
            StationInfo stationInfo = new StationInfo();
            stationInfo.setStationID(datum.getId().toString());
            stationInfo.setOperatorID();
            stationInfo.setEquipmentOwnerID();
            stationInfo.setStationName(datum.getName());
            stationInfo.setCountryCode(datum.getCountryCode());
            stationInfo.setAreaCode(datum.getDistrictsCode());
            stationInfo.setAddress(datum.getAddress());
            stationInfo.setStationTel(datum.getPhone());
            stationInfo.setServiceTel(datum.getServicePhone());
            switch (datum.getSiteType()){
                case 0:
                    stationInfo.setStationType(StationTypeEnum.OTHER.getType());
                    break;
                case 1:
                    stationInfo.setStationType(StationTypeEnum.PUBLIC.getType());
                    break;
                case 2:
                    stationInfo.setStationType(StationTypeEnum.PERSONAGE.getType());
                    break;
                case 3:
                    stationInfo.setStationType(StationTypeEnum.BUS_SPECIFIC.getType());
                    break;
                case 4:
                    stationInfo.setStationType(StationTypeEnum.SANITATION_SPECIFIC.getType());
                    break;
                case 5:
                    stationInfo.setStationType(StationTypeEnum.LOGISTICS_SPECIFIC.getType());
                    break;
                case 6:
                    stationInfo.setStationType(StationTypeEnum.TEXT_SPECIFIC.getType());
                    break;
            }
            if(datum.getStatus() == 1){
                stationInfo.setStationStatus(StationStatusEnum.NORMAL_USE.getStatus());
            }
            if(datum.getStatus() == 2){
                stationInfo.setStationStatus(StationStatusEnum.MAINTAIN.getStatus());
            }
            if(datum.getStatus() == 3){
                stationInfo.setStationStatus(StationStatusEnum.OFF_LINE.getStatus());
            }
            stationInfo.setParkNums(datum.getParkingSpace());
            stationInfo.setStationLat(new BigDecimal(datum.getLat()).setScale(6, RoundingMode.DOWN));
            stationInfo.setStationLng(new BigDecimal(datum.getLon()).setScale(6, RoundingMode.DOWN));
            stationInfo.setConstruction(datum.getConstructionSite() == 0 ? ConstructionEnum.OTHER.getType() : datum.getConstructionSite());
            stationInfo.setPictures(Arrays.asList(datum.getImgUrl().split(",")));
            stationInfo.setSiteGuide(datum.getGuide());
            stationInfo.setMatchCars(datum.getVehicleDescription());
            stationInfo.setBusineHours(datum.getStartServiceTime() + "-" + datum.getEndServiceTime());
            stationInfo.setElectricityFee(datum.getRateDescription());
            //构建充电设备信息数据
            List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteId(datum.getId()).getData();
            stationInfo.setEquipmentInfos(buildEquipmentInfo(tChargingPiles));
            StationInfos.add(stationInfo);
        }
        queryStationsInfoResult.setStationInfos(StationInfos);
        return queryStationsInfoResult;
    }
    /**
     * 构建桩数据
     * @param tChargingPiles
     * @return
     */
    public List<EquipmentInfo> buildEquipmentInfo(List<TChargingPile> tChargingPiles){
        List<EquipmentInfo> equipmentInfos = new ArrayList<>();
        for (TChargingPile tChargingPile : tChargingPiles) {
            EquipmentInfo equipmentInfo = new EquipmentInfo();
            equipmentInfo.setEquipmentID(tChargingPile.getId().toString());
            equipmentInfo.setManufacturerID(tChargingPile.getManufacturerCode());
            equipmentInfo.setManufacturerName(tChargingPile.getManufacturer());
            equipmentInfo.setEquipmentModel(tChargingPile.getEquipmentType());
            if(null != tChargingPile.getProductionDate()){
                equipmentInfo.setProductionDate(tChargingPile.getProductionDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            }
            switch (tChargingPile.getType()){
                case 0:
                    equipmentInfo.setEquipmentType(EquipmentTypeEnum.OTHER.getType());
                    break;
                case 1:
                    equipmentInfo.setEquipmentType(EquipmentTypeEnum.DIRECT_CURRENT.getType());
                    break;
                case 2:
                    equipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_CURRENT.getType());
                    break;
                case 3:
                    equipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_DIRECT.getType());
                    break;
                case 4:
                    equipmentInfo.setEquipmentType(EquipmentTypeEnum.WIRELESS_DEVICE.getType());
                    break;
            }
            //构建设备接口信息
            List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileId(tChargingPile.getId()).getData();
            equipmentInfo.setConnectorInfos(buildConnectorInfos(chargingGunList));
            equipmentInfos.add(equipmentInfo);
        }
        return equipmentInfos;
    }
    /**
     * 构建接口数据
     * @param chargingGunList
     * @return
     */
    public List<ConnectorInfo> buildConnectorInfos(List<TChargingGun> chargingGunList){
        List<ConnectorInfo> connectorInfos = new ArrayList<>();
        for (TChargingGun chargingGun : chargingGunList) {
            ConnectorInfo connectorInfo = new ConnectorInfo();
            connectorInfo.setConnectorID(chargingGun.getId().toString());
            connectorInfo.setConnectorName(chargingGun.getName());
            switch (chargingGun.getType()){
                case 0:
                    connectorInfo.setConnectorType(ConnectorTypeEnum.OTHER.getType());
                    break;
                case 1:
                    connectorInfo.setConnectorType(ConnectorTypeEnum.HOUSEHOLD_SOCKET.getType());
                    break;
                case 2:
                    connectorInfo.setConnectorType(ConnectorTypeEnum.AC_SOCKET.getType());
                    break;
                case 3:
                    connectorInfo.setConnectorType(ConnectorTypeEnum.AC_INTERFACE_PLUG.getType());
                    break;
                case 4:
                    connectorInfo.setConnectorType(ConnectorTypeEnum.DC_INTERFACE_GUN_HEAD.getType());
                    break;
                case 5:
                    connectorInfo.setConnectorType(ConnectorTypeEnum.WIRELESS_CHARGING_STAND.getType());
                    break;
            }
            connectorInfo.setVoltageUpperLimits(chargingGun.getUpperRatedVoltage().intValue());
            connectorInfo.setVoltageLowerLimits(chargingGun.getLowerLimitOfRatedVoltage().intValue());
            connectorInfo.setCurrent(chargingGun.getRatedCurrent().intValue());
            connectorInfo.setPower(chargingGun.getRatedPower());
            connectorInfo.setParkNo(chargingGun.getParkingNumber());
            connectorInfo.setNationalStandard(Integer.valueOf(chargingGun.getNationalStandard()));
            connectorInfos.add(connectorInfo);
        }
        return connectorInfos;
    }
    /**
     * 接口状态变化后推送给第三方
     * @return
     */
    @PostMapping("/pushChargingGunStatus")
    public R pushChargingGunStatus(@RequestParam("id") Integer id, @RequestParam("status") Integer status){
        ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
        connectorStatusInfo.setConnectorID(id.toString());
        switch (status){
            case 1:
                connectorStatusInfo.setStatus(0);
                break;
            case 2:
                connectorStatusInfo.setStatus(1);
                break;
            case 3:
                connectorStatusInfo.setStatus(2);
                break;
            case 4:
                connectorStatusInfo.setStatus(3);
                break;
            case 5:
                connectorStatusInfo.setStatus(3);
                break;
            case 6:
                connectorStatusInfo.setStatus(4);
                break;
            case 7:
                connectorStatusInfo.setStatus(255);
                break;
        }
        NotificationStationStatusResult result = TCECUtil.notificationStationStatus(connectorStatusInfo);
        return R.ok();
    }
    /**
     * 设备接口状态查询
     * @param query
     * @return
     */
    @PostMapping("/query_station_status")
    public QueryStationStatusResult queryStationStatus(@RequestBody QueryStationStatus query){
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
New file
@@ -0,0 +1,82 @@
package com.ruoyi.integration.drainage;
import cn.hutool.http.*;
import com.alibaba.fastjson.JSON;
import com.ruoyi.integration.drainage.model.*;
import lombok.extern.slf4j.Slf4j;
/**
 * 中电联TCEC标准
 * @author zhibing.pu
 * @Date 2025/1/21 11:48
 */
@Slf4j
public class TCECUtil {
    /**
     * 设备状态变化推送
     * @param info
     */
    public static NotificationStationStatusResult notificationStationStatus(ConnectorStatusInfo info) {
        HttpRequest post = HttpUtil.createPost("");
        post.contentType(ContentType.JSON.toString());
        post.body(JSON.toJSONString(info));
        HttpResponse execute = post.execute();
        if(200 != execute.getStatus()){
            log.error("设备状态变化推送失败:" + execute.body());
            return null;
        }
        return JSON.parseObject(execute.body(), NotificationStationStatusResult.class);
    }
    /**
     * 查询统计信息
     * @param query
     * @return
     */
    public QueryStationStatsResult queryStationStats(QueryStationStats query){
    }
    /**
     * 查询业务策略信息
     * @param query
     * @return
     */
    public BaseResult<QueryEquipBusinessPolicyResult> queryEquipBusinessPolicy(QueryEquipBusinessPolicy query){
    }
    /**
     * 查询充电状态
     * @param query
     * @return
     */
    public BaseResult<QueryEquipChargeStatusResult> queryEquipChargeStatus(QueryEquipChargeStatus query){
    }
    /**
     * 推动充电状态
     * @param info
     * @return
     */
    public BaseResult<NotificationEquipChargeStatusResult> notificationEquipChargeStatus(QueryEquipChargeStatusResult info){
    }
    /**
     * 推送充电订单信息
     * @param indo
     * @return
     */
    public BaseResult<NotificationChargeOrderInfoResult> notificationChargeOrderInfo(NotificationChargeOrderInfo indo){
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseRequest.java
New file
@@ -0,0 +1,41 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
 * 公共请求
 * @author zhibing.pu
 * @Date 2025/1/21 17:08
 */
@Data
public class BaseRequest<T> {
    /**
     * 运营商标识
     */
    @NotNull
    private String OperatorID;
    /**
     * 参数内容
     */
    @NotNull
    private T Data;
    /**
     * 时间戳
     * yyyyMMddHHmmss
     */
    @NotNull
    private Long TimeStamp;
    /**
     * 自增序列
     * 4位自增序列取自时间戳,同一秒内按序列自增长,新秒重计。如 0001
     */
    @NotNull
    private String Seq;
    /**
     * 数字签名
     */
    @NotNull
    private String Sig;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseResult.java
New file
@@ -0,0 +1,41 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
 * 公共返回结果
 * @author zhibing.pu
 * @Date 2025/1/21 15:54
 */
@Data
public class BaseResult<T> {
    /**
     * 参数编码
     * -1:系统繁忙,此时请求方稍后重试
     * 0:请求成功
     * 4001:签名错误
     * 4002:Token错误
     * 4003:POST参数不合法,缺少必需的
     * 4004:请求的业务参数不合法
     * 500:系统错误
     */
    @NotNull
    private Integer Ret;
    /**
     * 错误信息描述
     */
    @NotNull
    private String Msg;
    /**
     * 参数实体
     */
    @NotNull
    private T Data;
    /**
     * 签名
     */
    @NotNull
    private String Sig;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ChargeDetail.java
New file
@@ -0,0 +1,53 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.math.BigDecimal;
/**
 * 充电明细信息
 * @author zhibing.pu
 * @Date 2025/1/21 16:40
 */
@Data
public class ChargeDetail {
    /**
     * 开始时间
     * yyyy-MM-dd HH:mm:ss
     */
    @NotNull
    private String DetailStartTime;
    /**
     * 结束时间
     * yyyy-MM-dd HH:mm:ss
     */
    @NotNull
    private String DetailEndTime;
    /**
     * 时段电价
     */
    @Null
    private BigDecimal ElecPrice;
    /**
     * 时段服务费价格
     */
    @Null
    private BigDecimal SevicePrice;
    /**
     * 时段充电量
     */
    @Null
    private BigDecimal DetailPower;
    /**
     * 时段电费
     */
    @Null
    private BigDecimal DetailElecMoney;
    /**
     * 时段服务费
     */
    @Null
    private BigDecimal DetailSeviceMoney;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorInfo.java
New file
@@ -0,0 +1,63 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.math.BigDecimal;
/**
 * 充电设备接口
 * @author zhibing.pu
 * @Date 2025/1/21 14:03
 */
@Data
public class ConnectorInfo {
    /**
     * 充电设备接口编码
     */
    @NotNull
    private String ConnectorID;
    /**
     * 充电设备接口名称
     */
    @Null
    private String ConnectorName;
    /**
     * 充电设备接口类型
     */
    @NotNull
    private Integer ConnectorType;
    /**
     * 额定电压上限
     */
    @NotNull
    private Integer VoltageUpperLimits;
    /**
     * 额定电压下限
     */
    @NotNull
    private Integer VoltageLowerLimits;
    /**
     * 额定电流
     */
    @NotNull
    private Integer Current;
    /**
     * 额定功率
     */
    @NotNull
    private BigDecimal Power;
    /**
     * 车位号
     */
    @Null
    private String ParkNo;
    /**
     * 国家标准
     * 1:2011
     * 2:2015
     */
    @NotNull
    private Integer NationalStandard;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java
New file
@@ -0,0 +1,25 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
 * 充电设备接口统计信息
 * @author zhibing.pu
 * @Date 2025/1/21 15:24
 */
@Data
public class ConnectorStatsInfo {
    /**
     * 充电设备接口编码
     */
    @NotNull
    private String ConnectorID;
    /**
     * 充电设备接口累计电量
     */
    @NotNull
    private BigDecimal ConnectorElectricity;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatusInfo.java
New file
@@ -0,0 +1,47 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
/**
 * 充电设备接口状态
 * @author zhibing.pu
 * @Date 2025/1/21 14:53
 */
@Data
public class ConnectorStatusInfo {
    /**
     * 充电设备接口编码
     */
    @NotNull
    private String ConnectorID;
    /**
     * 充电设备接口状态
     * 0:离网
     * 1:空闲
     * 2:占用(未充电)
     * 3:占用(充电中)
     * 4:占用(预约锁定)
     * 255:故障
     */
    @NotNull
    private Integer Status;
    /**
     * 车位状态
     * 0:未知
     * 10:空闲
     * 50:占用
     */
    @Null
    private Integer ParkStatus;
    /**
     * 地锁状态
     * 0:未知
     * 10:已解锁
     * 50:已上锁
     */
    @Null
    private Integer LookStatus;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/EquipmentInfo.java
New file
@@ -0,0 +1,73 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.math.BigDecimal;
import java.util.List;
/**
 * 充电设备信息
 * @author zhibing.pu
 * @Date 2025/1/21 13:51
 */
@Data
public class EquipmentInfo {
    /**
     * 设备编号
     */
    @NotNull
    private String EquipmentID;
    /**
     * 设备生产商组织机构代码
     */
    @Null
    private String ManufacturerID;
    /**
     * 设备生产商名称
     */
    @Null
    private String ManufacturerName;
    /**
     * 设备型号
     */
    @Null
    private String EquipmentModel;
    /**
     * 设备生产日期
     * YYYY-MM-DD
     */
    @Null
    private String ProductionDate;
    /**
     * 设备类型
     */
    @NotNull
    private Integer EquipmentType;
    /**
     * 充电设备接口信息列表
     */
    @NotNull
    private List<ConnectorInfo> ConnectorInfos;
    /**
     * 充电设备经度
     */
    @Null
    private BigDecimal EquipmentLng;
    /**
     * 充电设备纬度
     */
    @Null
    private BigDecimal EquipmentLat;
    /**
     * 充电设备总功率
     */
    @NotNull
    private BigDecimal Power;
    /**
     * 充电设备名称
     */
    @Null
    private String EquipmentName;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/EquipmentStatsInfo.java
New file
@@ -0,0 +1,31 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
/**
 * 充电设备统计信息
 * @author zhibing.pu
 * @Date 2025/1/21 15:22
 */
@Data
public class EquipmentStatsInfo {
    /**
     * 设备编码
     */
    @NotNull
    private String EquipmentID;
    /**
     * 充电设备接口累计电量
     */
    @NotNull
    private BigDecimal EquipmentElectricity;
    /**
     * 充电设备接口统计信息列表
     */
    @NotNull
    private List<ConnectorStatsInfo> ConnectorStatsInfos;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationChargeOrderInfo.java
New file
@@ -0,0 +1,82 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.math.BigDecimal;
import java.util.List;
/**
 * 推送充电订单信息
 * @author zhibing.pu
 * @Date 2025/1/21 15:39
 */
@Data
public class NotificationChargeOrderInfo {
    /**
     * 充电订单号
     */
    @NotNull
    private String StartChargeSeq;
    /**
     * 充电设备接口编码
     */
    @NotNull
    private String ConnectorID;
    /**
     * 开始充电时间
     * yyyy-MM-dd HH:mm:ss
     */
    @NotNull
    private String StartTime;
    /**
     * 结束充电时间
     * yyyy-MM-dd HH:mm:ss
     */
    @NotNull
    private String EndTime;
    /**
     * 累计充电量
     */
    @NotNull
    private BigDecimal TotalPower;
    /**
     * 总电费
     */
    @NotNull
    private BigDecimal TotalElecMoney;
    /**
     * 总服务费
     */
    @NotNull
    private BigDecimal TotalSeviceMoney;
    /**
     * 累计总金额
     */
    @NotNull
    private BigDecimal TotalMoney;
    /**
     * 充电结束原因
     * 0:用户手动停止充电
     * 1:客户归属地运营商平台停止充电
     * 2:BMS停止充电
     * 3:充电机设备故障
     * 4:连接器断开
     * 5·99:自定义
     */
    @NotNull
    private Integer StopReason;
    /**
     * 时段数 N
     * 0·32
     */
    @Null
    private Integer SumPeriod;
    /**
     * 充电明细信息
     */
    @Null
    private List<ChargeDetail> ChargeDetails;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationChargeOrderInfoResult.java
New file
@@ -0,0 +1,31 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
 * 推送充电订单信息返回记过
 * @author zhibing.pu
 * @Date 2025/1/21 15:49
 */
@Data
public class NotificationChargeOrderInfoResult {
    /**
     * 充电订单号
     */
    @NotNull
    private String StartChargeSeq;
    /**
     * 充电设备接口编码
     */
    @NotNull
    private String ConnectorID;
    /**
     * 确认结果
     * 0;成功
     * 1:争议交易
     * 2·99:自定义
     */
    private Integer ConfirmResult;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationEquipChargeStatusResult.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
 * 推送充电状态结果
 * @author zhibing.pu
 * @Date 2025/1/21 16:48
 */
@Data
public class NotificationEquipChargeStatusResult {
    /**
     * 充电订单号
     */
    @NotNull
    private String StartChargeSeq;
    /**
     * 操作结果
     * 0:成功
     * 1:失败
     */
    @NotNull
    private Integer SuccStat;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationStationStatusResult.java
New file
@@ -0,0 +1,21 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
 * 设备状态变化推动返回结果
 * @author zhibing.pu
 * @Date 2025/1/21 14:58
 */
@Data
public class NotificationStationStatusResult {
    /**
     * 状态
     * 0:接收
     * 1:丢弃/忽略,不需要重试
     */
    @NotNull
    private Integer Status;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/OperatorInfo.java
New file
@@ -0,0 +1,45 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
/**
 * 基础设施运营商信息
 * @author zhibing.pu
 * @Date 2025/1/21 11:49
 */
@Data
public class OperatorInfo {
    /**
     * 运营商ID
     */
    @NotNull
    private String OperatorID;
    /**
     * 运营商名称
     */
    @NotNull
    private String OperatorName;
    /**
     * 运营商电话1
     */
    @NotNull
    private String OperatorTel1;
    /**
     * 运营商电话2
     */
    @Null
    private String OperatorTel2;
    /**
     * 运营商注册地址
     */
    @Null
    private String OperatorRegAddress;
    /**
     * 备注
     */
    @Null
    private String OperatorNote;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/PolicyInfo.java
New file
@@ -0,0 +1,31 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
 * 计费信息
 * @author zhibing.pu
 * @Date 2025/1/21 16:10
 */
@Data
public class PolicyInfo {
    /**
     * 时段起始时间点
     * HHmmss
     */
    @NotNull
    private String StartTime;
    /**
     * 时段电费
     */
    @NotNull
    private BigDecimal ElecPrice;
    /**
     * 时段服务费
     */
    @NotNull
    private BigDecimal SevicePrice;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryEquipBusinessPolicy.java
New file
@@ -0,0 +1,25 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
 * 查询业务策略信息
 * @author zhibing.pu
 * @Date 2025/1/21 16:03
 */
@Data
public class QueryEquipBusinessPolicy {
    /**
     * 业务策略查询流水号
     * 格式”运营商ID+唯一编号“。27字符
     */
    @NotNull
    private String EquipBizSeq;
    /**
     * 充电设备接口编码
     */
    @NotNull
    private String ConnectorID;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryEquipBusinessPolicyResult.java
New file
@@ -0,0 +1,51 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
 * 查询业务策略信息结果
 * @author zhibing.pu
 * @Date 2025/1/21 16:05
 */
@Data
public class QueryEquipBusinessPolicyResult {
    /**
     * 业务策略查询流水号
     */
    @NotNull
    private String EquipBizSeq;
    /**
     * 充电设备接口编码
     */
    @NotNull
    private String ConnectorID;
    /**
     * 操作结果
     * 0:成功
     * 1:失败
     */
    @NotNull
    private Integer SuccStat;
    /**
     * 失败原因
     * 0:无
     * 1:此充电桩业务策略不存在
     */
    @NotNull
    private Integer FailReason;
    /**
     * 时段数N
     * 0`32
     */
    @NotNull
    private Integer SumPeriod;
    /**
     * 计策信息
     */
    @NotNull
    private List<PolicyInfo> PolicyInfos;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryEquipChargeStatus.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
 * 查询充电状态
 * @author zhibing.pu
 * @Date 2025/1/21 16:17
 */
@Data
public class QueryEquipChargeStatus {
    /**
     * 充电订单号
     */
    @NotNull
    private String StartChargeSeq;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryEquipChargeStatusResult.java
New file
@@ -0,0 +1,124 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.math.BigDecimal;
import java.util.List;
/**
 * 查询充电状态结果
 * @author zhibing.pu
 * @Date 2025/1/21 15:58
 */
@Data
public class QueryEquipChargeStatusResult {
    /**
     * 充电订单号
     */
    @NotNull
    private String StartChargeSeq;
    /**
     * 充电订单状态
     * 1:启动中
     * 2:充电中
     * 3:停止中
     * 4:已结束
     * 5:未知
     */
    @NotNull
    private Integer StartChargeSeqStat;
    /**
     * 充电设备接口编号
     */
    @NotNull
    private String ConnectorID;
    /**
     * 充电设备接口状态
     * 1:空闲
     * 2:占用(未充电)
     * 3:占用(充电中)
     * 4:占用(预约锁定)
     * 255:故障
     */
    @NotNull
    private Integer ConnectorStatus;
    /**
     * A相电流
     */
    @NotNull
    private BigDecimal CurrentA;
    /**
     * B相电流
     */
    @Null
    private BigDecimal CurrentB;
    /**
     * C相电流
     */
    @Null
    private BigDecimal CurrentC;
    /**
     * A相电压
     */
    @NotNull
    private BigDecimal VoltageA;
    /**
     * B相电压
     */
    @Null
    private BigDecimal VoltageB;
    /**
     * C相电压
     */
    @Null
    private BigDecimal VoltageC;
    /**
     * 电池剩余电量
     */
    @NotNull
    private BigDecimal Soc;
    /**
     * 开始充电时间
     */
    @NotNull
    private String StartTime;
    /**
     * 本次采样时间
     */
    @NotNull
    private String EndTime;
    /**
     * 累计充电量
     */
    @NotNull
    private BigDecimal TotalPower;
    /**
     * 累计电费
     */
    @Null
    private BigDecimal ElecMoney;
    /**
     * 累计服务费
     */
    @Null
    private BigDecimal SeviceMoney;
    /**
     * 累计总金额
     */
    @Null
    private BigDecimal TotalMoney;
    /**
     * 时段数N
     * 0`32
     */
    @Null
    private Integer SumPeriod;
    /**
     * 充电明细信息
     */
    @Null
    private List<ChargeDetail> ChargeDetails;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStats.java
New file
@@ -0,0 +1,31 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
 * 查询统计信息
 * @author zhibing.pu
 * @Date 2025/1/21 15:11
 */
@Data
public class QueryStationStats {
    /**
     * 充电站ID
     */
    @NotNull
    private String StationID;
    /**
     * 统计开始时间
     * yyyy-MM-dd
     */
    @NotNull
    private String StartTime;
    /**
     * 统计结束时间
     * yyyy-MM-dd
     */
    @NotNull
    private String EndTime;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStatsResult.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
 * 查询统计信息结果
 * @author zhibing.pu
 * @Date 2025/1/21 15:16
 */
@Data
public class QueryStationStatsResult {
    /**
     * 充电站统计信息
     */
    @NotNull
    private StationStatsInfo StationStats;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStatus.java
New file
@@ -0,0 +1,21 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
 * 设备接口状态查询
 * @author zhibing.pu
 * @Date 2025/1/21 15:01
 */
@Data
public class QueryStationStatus {
    /**
     * 充电站ID列表
     * 数组长度不超过50
     */
    @NotNull
    private List<String> StationIDs;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStatusResult.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import java.util.List;
/**
 * 设备接口状态查询返回结果
 * @author zhibing.pu
 * @Date 2025/1/21 15:04
 */
@Data
public class QueryStationStatusResult {
    /**
     * 结果总数
     */
    private Integer Total;
    /**
     * 设备接口状态列表
     */
    private List<StationStatusInfo> StationStatusInfos;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationsInfo.java
New file
@@ -0,0 +1,31 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.Null;
/**
 * @author zhibing.pu
 * @Date 2025/1/21 14:41
 */
@Data
public class QueryStationsInfo {
    /**
     * 上次查询时间
     * yyyy-MM-dd HH:mm:ss
     */
    @Null
    private String LastQueryTime;
    /**
     * 查询页码
     * 默认1
     */
    @Null
    private Integer PageNo;
    /**
     * 每页数量
     * 默认10
     */
    @Null
    private Integer PageSize;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationsInfoResult.java
New file
@@ -0,0 +1,30 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import java.util.List;
/**
 * 公共返回结果
 * @author zhibing.pu
 * @Date 2025/1/21 14:44
 */
@Data
public class QueryStationsInfoResult {
    /**
     * 当前页数
     */
    private Integer PageNo;
    /**
     * 页码总数
     */
    private Integer PageCount;
    /**
     * 总记录条数
     */
    private Integer ItemSize;
    /**
     * 充电站信息列表
     */
    private List<StationInfo> StationInfos;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationInfo.java
New file
@@ -0,0 +1,154 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.math.BigDecimal;
import java.util.List;
/**
 * 充电站信息
 * @author zhibing.pu
 * @Date 2025/1/21 11:54
 */
@Data
public class StationInfo {
    /**
     * 充电站ID
     */
    @NotNull
    private String StationID;
    /**
     * 运营商ID
     */
    @NotNull
    private String OperatorID;
    /**
     * 设备所属方ID
     * 设备所属运营平台组织机构代码
     */
    @NotNull
    private String EquipmentOwnerID;
    /**
     * 充电站名称
     */
    @NotNull
    private String StationName;
    /**
     * 充电站国家代码
     */
    @NotNull
    private String CountryCode;
    /**
     * 充电站省市辖区编码
     */
    @NotNull
    private String AreaCode;
    /**
     * 详细地址
     */
    @NotNull
    private String Address;
    /**
     * 站点电话
     */
    @Null
    private String StationTel;
    /**
     * 站点电话
     */
    @NotNull
    private String ServiceTel;
    /**
     * 站点类型
     */
    @NotNull
    private Integer StationType;
    /**
     * 站点状态
     */
    @NotNull
    private Integer StationStatus;
    /**
     * 车位数量,0:未知
     */
    @NotNull
    private Integer ParkNums;
    /**
     * 经度(保留6位小数)
     */
    @NotNull
    private BigDecimal StationLng;
    /**
     * 纬度(保留6位小数)
     */
    @NotNull
    private BigDecimal StationLat;
    /**
     * 站点引导
     */
    @Null
    private String SiteGuide;
    /**
     * 建设场所
     */
    @NotNull
    private Integer Construction;
    /**
     * 站点照片
     * 字符串数组
     */
    @Null
    private List<String> Pictures;
    /**
     * 使用车型描述
     */
    @Null
    private String MatchCars;
    /**
     * 车位楼层及数量描述
     */
    @Null
    private String ParkInfo;
    /**
     * 营业时间
     */
    @Null
    private String BusineHours;
    /**
     * 充电电费率描述
     */
    @Null
    private String ElectricityFee;
    /**
     * 服务费率描述
     */
    @Null
    private String ServiceFee;
    /**
     * 停车费率描述
     */
    @Null
    private String ParkFee;
    /**
     * 支付方式:刷卡、线上、现金
     */
    @Null
    private String Payment;
    /**
     * 是否支持预约
     */
    @Null
    private Integer SupportOrder;
    /**
     * 备注
     */
    @Null
    private String Remark;
    /**
     * 充电设备信息列表
     */
    @NotNull
    private List<EquipmentInfo> EquipmentInfos;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfo.java
New file
@@ -0,0 +1,43 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
/**
 * 充电站统计信息
 * @author zhibing.pu
 * @Date 2025/1/21 15:17
 */
@Data
public class StationStatsInfo {
    /**
     * 充电站ID
     */
    @NotNull
    private String StationID;
    /**
     * 统计的开始时间
     * yyyy-MM-dd
     */
    @NotNull
    private String StartTime;
    /**
     * 统计的结束时间
     * yyyy-MM-dd
     */
    @NotNull
    private String EndTime;
    /**
     * 充电站累计电量 kw/h
     */
    @NotNull
    private BigDecimal StationElectricity;
    /**
     * 充电设备统计信息列表
     */
    @NotNull
    private List<EquipmentStatsInfo> EquipmentStatsInfos;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatusInfo.java
New file
@@ -0,0 +1,24 @@
package com.ruoyi.integration.drainage.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
 * 充电站状态信息
 * @author zhibing.pu
 * @Date 2025/1/21 15:07
 */
@Data
public class StationStatusInfo {
    /**
     * 充电站ID
     */
    @NotNull
    private String StationID;
    /**
     * 充电设备接口状态列表
     */
    private List<ConnectorStatusInfo> ConnectorStatusInfos;
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/ConnectorTypeEnum.java
New file
@@ -0,0 +1,39 @@
package com.ruoyi.integration.drainage.model.enu;
/**
 * 充电设备接口类型
 * @author zhibing.pu
 * @Date 2025/1/21 14:14
 */
public enum ConnectorTypeEnum {
    HOUSEHOLD_SOCKET(1, "家用插座"),
    AC_SOCKET(2, "交流接口插座"),
    AC_INTERFACE_PLUG(3, "交流接口插头"),
    DC_INTERFACE_GUN_HEAD(4, "直流接口枪头"),
    WIRELESS_CHARGING_STAND(5, "无线充电座"),
    OTHER(6, "其他")
    ;
    private Integer type;
    private String note;
    ConnectorTypeEnum(Integer type, String note) {
        this.type = type;
        this.note = note;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/ConstructionEnum.java
New file
@@ -0,0 +1,45 @@
package com.ruoyi.integration.drainage.model.enu;
/**
 * 建设场所
 * @author zhibing.pu
 * @Date 2025/1/21 13:25
 */
public enum ConstructionEnum {
    RESIDENTIAL_AREA(1, "居民区"),
    PUBLIC_INSTITUTION(2, "公共机构"),
    ENTERPRISE(3, "企事业单位"),
    OFFICE_BUILDING(4, "写字楼"),
    INDUSTRIAL_PARK(5, "工业园区"),
    TRANSPORTATION_JUNCTION(6, "交通枢纽"),
    CULTURE_AND_SPORTS(7, "大型文体设施"),
    URBAN_GREEN_SPACE(8, "城市绿地"),
    ANCILLARY_PARKING_LOT(9, "大型建筑配建停车场"),
    OFF_STREET_PARKING_SPACE(10, "路边停车位"),
    HIGH_SPEED_SERVICE_AREA(11, "城际高速服务区"),
    OTHER(255, "其他");
    private Integer type;
    private String note;
    ConstructionEnum(Integer type, String note) {
        this.type = type;
        this.note = note;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/EquipmentTypeEnum.java
New file
@@ -0,0 +1,40 @@
package com.ruoyi.integration.drainage.model.enu;
/**
 * 设备类型
 * @author zhibing.pu
 * @Date 2025/1/21 13:59
 */
public enum EquipmentTypeEnum {
    DIRECT_CURRENT(1, "直流设备"),
    ALTERNATING_CURRENT(2, "交流设备"),
    ALTERNATING_DIRECT(3, "交直流一体设备"),
    WIRELESS_DEVICE(4, "无线设备"),
    OTHER(5, "其他")
    ;
    private Integer type;
    private String note;
    EquipmentTypeEnum(Integer type, String note) {
        this.type = type;
        this.note = note;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java
New file
@@ -0,0 +1,39 @@
package com.ruoyi.integration.drainage.model.enu;
/**
 * 接口地址枚举
 * @author zhibing.pu
 * @Date 2025/1/21 14:38
 */
public enum InterfaceUrlEnum {
    QUERY_STATIONS_INFO("query_stations_info", "查询充电站信息"),
    NOTIFICATION_STATION_STATUS("notification_stationStatus", "设备状态变化推送"),
    QUERY_STATION_STATUS("query_station_status", "设备接口状态查询"),
    ;
    private String url;
    private String note;
    InterfaceUrlEnum(String url, String note) {
        this.url = url;
        this.note = note;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/StationStatusEnum.java
New file
@@ -0,0 +1,38 @@
package com.ruoyi.integration.drainage.model.enu;
/**
 * 站点状态
 * @author zhibing.pu
 * @Date 2025/1/21 12:10
 */
public enum StationStatusEnum {
    UNKNOWN(0, "未知"),
    UNDER_CONSTRUCTION(1, "建设中"),
    OFF_LINE(5, "关闭下线"),
    MAINTAIN(6, "维护中"),
    NORMAL_USE(50, "正常使用")
    ;
    private Integer status;
    private String note;
    StationStatusEnum(Integer status, String note) {
        this.status = status;
        this.note = note;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }
}
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/StationTypeEnum.java
New file
@@ -0,0 +1,41 @@
package com.ruoyi.integration.drainage.model.enu;
/**
 * 站点类型
 * @author zhibing.pu
 * @Date 2025/1/21 12:00
 */
public enum StationTypeEnum {
    PUBLIC(1, "公共"),
    PERSONAGE(50, "个人"),
    BUS_SPECIFIC(100, "公交(专用)"),
    SANITATION_SPECIFIC(101, "环卫(专用)"),
    LOGISTICS_SPECIFIC(102, "物流(专用)"),
    TEXT_SPECIFIC(103, "出租车(专用)"),
    OTHER(255, "其他")
    ;
    private Integer type;
    private String note;
    StationTypeEnum(Integer type, String note) {
        this.type = type;
        this.note = note;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }
}