package com.ruoyi.jianguan.chengdujianguan; import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; 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.TAccountingStrategyDetail; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.integration.api.vo.NotificationConnectorChargeStatusVo; import com.ruoyi.jianguan.chengdujianguan.enu.*; import com.ruoyi.jianguan.chengdujianguan.model.*; import com.ruoyi.jianguan.model.ChargeDetail; import com.ruoyi.jianguan.model.ConnectorInfo; import com.ruoyi.jianguan.model.ConnectorStatusInfo; import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy; import com.ruoyi.other.api.feignClient.SystemConfigurationClient; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @RestController @RequestMapping("/chengdu/jianguan") public class ChengDuJianGuanController { @Resource private RedisTemplate redisTemplate; @Resource private SiteClient siteClient; @Resource private ChargingPileClient chargingPileClient; @Resource private ChargingGunClient chargingGunClient; @Resource private SystemConfigurationClient systemConfigurationClient; @Resource private AccountingStrategyDetailClient accountingStrategyDetailClient; @Resource private ChargingOrderClient chargingOrderClient; @Resource private ChargingOrderAccountingStrategyClient chargingOrderAccountingStrategyClient; //成都监管平台推送白名单站点ID(生产库确认,2026-10-10) private List siteIdWhitelist = Arrays.asList(19, 25, 26, 27, 28, 74, 75, 76, 77, 78, 79, 86, 87, 112); /** * 充电站信息变化推送 * @param siteId * @return */ @PostMapping("/notificationStationInfo") public R notificationStationInfo(@RequestParam("siteId") Integer siteId){ Site site = siteClient.getSiteByIds(Arrays.asList(siteId)).getData().get(0); if(siteIdWhitelist.contains(site.getId())){ ChengDuJianGuanUtil.notificationStationInfo(redisTemplate, buildStationInfo(site)); } return R.ok(); } private CDStationInfo buildStationInfo(Site site){ String serviceTel = systemConfigurationClient.getServerPhone().getData(); CDStationInfo stationInfo = new CDStationInfo(); stationInfo.setStationID(site.getCode()); stationInfo.setOperatorID("906171535"); stationInfo.setEquipmentOwnerID("906171535"); stationInfo.setStationName(site.getName()); stationInfo.setIsAloneApply(site.getBusinessExpandType()); stationInfo.setAccountNumber(site.getResidentNo()); stationInfo.setCapacity(site.getCapacity()); stationInfo.setCountryCode(StringUtils.isNotEmpty(site.getCountryCode()) ? site.getCountryCode() : "CN"); stationInfo.setAreaCode(site.getDistrictsCode()); stationInfo.setAreaCodeCountryside(site.getDistrictsCode() + "000000"); stationInfo.setAddress(site.getAddress()); stationInfo.setStationTel(StringUtils.isNotEmpty(serviceTel) ? serviceTel.split(",")[0] : ""); stationInfo.setServiceTel(StringUtils.isNotEmpty(serviceTel) ? serviceTel.split(",")[0] : ""); switch (site.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; } stationInfo.setIsOpen(1); if(site.getStatus() == 1){ stationInfo.setStationStatus(StationStatusEnum.NORMAL_USE.getStatus()); } if(site.getStatus() == 2){ stationInfo.setStationStatus(StationStatusEnum.MAINTAIN.getStatus()); } if(site.getStatus() == 3){ stationInfo.setStationStatus(StationStatusEnum.OFF_LINE.getStatus()); } stationInfo.setParkNums(site.getParkingSpace()); stationInfo.setStationLng(new BigDecimal(site.getLon()).setScale(6, RoundingMode.HALF_EVEN)); stationInfo.setStationLat(new BigDecimal(site.getLat()).setScale(6, RoundingMode.HALF_EVEN)); stationInfo.setSiteGuide(site.getGuide()); stationInfo.setConstruction(site.getConstructionSite() == 0 ? ConstructionEnum.OTHER.getType() : site.getConstructionSite()); stationInfo.setPictures(StringUtils.isNotEmpty(site.getImgUrl()) ? Arrays.asList(site.getImgUrl().split(",")) : new ArrayList<>()); stationInfo.setMatchCars(site.getVehicleDescription()); stationInfo.setParkInfo(""); stationInfo.setParkOwner(""); stationInfo.setParkManager(""); stationInfo.setOpenAllDay(1); stationInfo.setBusinessHours("周一至周日00:00-24:00"); stationInfo.setElectricityFee(site.getRateDescription()); stationInfo.setServiceFee(site.getServiceFee()); stationInfo.setParkFeeType(site.getParkType()); stationInfo.setParkFee(site.getParkFee()); stationInfo.setPayment("线上"); stationInfo.setSupportOrder(site.getSupportOrder()); stationInfo.setRemark(site.getRemark()); if(StringUtils.isNotEmpty(site.getSupportingFacilities())){ List list = Arrays.asList(site.getSupportingFacilities().split(",")); stationInfo.setToiletFlag(list.contains("1") ? 1 : 0); stationInfo.setStoreFlag(list.contains("2") ? 1 : 0); stationInfo.setLoungeFlag(list.contains("4") ? 1 : 0); stationInfo.setCanopyFlag(list.contains("5") ? 1 : 0); }else{ stationInfo.setToiletFlag(0); stationInfo.setStoreFlag(0); stationInfo.setLoungeFlag(0); stationInfo.setCanopyFlag(0); } stationInfo.setPrinterFlag(site.getPrinterFlag()); stationInfo.setBarrierFlag(site.getBarrierFlag()); stationInfo.setParkingLockFlag(site.getParkingLockFlag()); stationInfo.setIsDemandResponse(1); stationInfo.setIsSupportOrderlyCharging(1); stationInfo.setIsEnergyStorage(site.getIsEnergyStorage()); stationInfo.setElectricityType(site.getElectricityType()); stationInfo.setRatedPower(site.getRatedPower()); stationInfo.setPeriodFee(site.getPeriodFee()); stationInfo.setOfficialRunTime(site.getOfficialRunTime()); stationInfo.setVideoMonitor(site.getVideoMonitor()); stationInfo.setEquipmentInfos1(buildEquipmentInfo(site.getId())); return stationInfo; } private List buildEquipmentInfo(Integer siteId){ List tChargingPiles = chargingPileClient.getChargingPileBySiteIds(Arrays.asList(siteId)).getData(); List collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo(); vo.setChargingPileIds(collect1); List chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(vo).getData(); List equipmentInfos = new ArrayList<>(); for (TChargingPile tChargingPile : tChargingPiles) { CDEquipmentInfo cdEquipmentInfo = new CDEquipmentInfo(); cdEquipmentInfo.setEquipmentID(tChargingPile.getCode()); if(StringUtils.isNotEmpty(tChargingPile.getManufacturerCode())){ String substring = tChargingPile.getManufacturerCode().substring(8, 17); cdEquipmentInfo.setManufacturerID(substring); }else{ cdEquipmentInfo.setManufacturerID(""); } cdEquipmentInfo.setManufacturerName(tChargingPile.getManufacturer()); cdEquipmentInfo.setEquipmentModel(tChargingPile.getEquipmentType()); cdEquipmentInfo.setEquipmentProductCode(tChargingPile.getEquipmentProductCode()); cdEquipmentInfo.setEquipmentName(tChargingPile.getName()); cdEquipmentInfo.setConstructionTime(tChargingPile.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); if(null != tChargingPile.getProductionDate()){ cdEquipmentInfo.setProductionDate(tChargingPile.getProductionDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); } switch (tChargingPile.getType()){ case 0: cdEquipmentInfo.setEquipmentType(EquipmentTypeEnum.OTHER.getType()); break; case 1: cdEquipmentInfo.setEquipmentType(EquipmentTypeEnum.DIRECT_CURRENT.getType()); break; case 2: cdEquipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_CURRENT.getType()); break; case 3: cdEquipmentInfo.setEquipmentType(EquipmentTypeEnum.ALTERNATING_DIRECT.getType()); break; case 4: cdEquipmentInfo.setEquipmentType(EquipmentTypeEnum.WIRELESS_DEVICE.getType()); break; case 5: cdEquipmentInfo.setEquipmentType(EquipmentTypeEnum.ORDER.getType()); break; case 6: cdEquipmentInfo.setEquipmentType(EquipmentTypeEnum.V2G.getType()); break; } switch (tChargingPile.getStatus()){ case 1: cdEquipmentInfo.setEquipmentStatus(50); break; case 2: cdEquipmentInfo.setEquipmentStatus(5); break; case 3: cdEquipmentInfo.setEquipmentStatus(5); break; } cdEquipmentInfo.setEquipmentPurpose(tChargingPile.getEquipmentPurpose()); cdEquipmentInfo.setEquipmentPower(tChargingPile.getRatedPower()); cdEquipmentInfo.setNewNationalStandard(tChargingPile.getNewNationalStandard()); if(null != tChargingPile.getEquipmentLng()){ cdEquipmentInfo.setEquipmentLng(new BigDecimal(tChargingPile.getEquipmentLng()).setScale(6, RoundingMode.HALF_EVEN)); }else{ cdEquipmentInfo.setEquipmentLng(BigDecimal.ZERO.setScale(6, RoundingMode.HALF_EVEN)); } if(null != tChargingPile.getEquipmentLat()){ cdEquipmentInfo.setEquipmentLat(new BigDecimal(tChargingPile.getEquipmentLat()).setScale(6, RoundingMode.HALF_EVEN)); }else{ cdEquipmentInfo.setEquipmentLat(BigDecimal.ZERO.setScale(6, RoundingMode.HALF_EVEN)); } cdEquipmentInfo.setVinFlag(tChargingPile.getVinFlag()); cdEquipmentInfo.setConnectorInfos(buildConnectorInfo(tChargingPile.getId(), chargingGunList)); equipmentInfos.add(cdEquipmentInfo); } return equipmentInfos; } private List buildConnectorInfo(Integer chargingPileId, List chargingGunList){ List tChargingGunList = chargingGunList.stream().filter(s -> s.getChargingPileId().equals(chargingPileId)).collect(Collectors.toList()); List connectorInfos = new ArrayList<>(); for (TChargingGun chargingGun : tChargingGunList) { ConnectorInfo connectorInfo = new ConnectorInfo(); connectorInfo.setConnectorID(chargingGun.getFullNumber()); 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()); connectorInfo.setVoltageLowerLimits(chargingGun.getLowerLimitOfRatedVoltage()); connectorInfo.setCurrent(chargingGun.getRatedCurrent().intValue()); connectorInfo.setPower(chargingGun.getRatedPower()); connectorInfo.setNationalStandard(null != chargingGun.getNationalStandard() ? Integer.valueOf(chargingGun.getNationalStandard()) : 2); connectorInfo.setAuxPower(chargingGun.getAuxPower()); connectorInfo.setOpreateStatus(chargingGun.getParkingStatus()); connectorInfo.setParkNo(""); connectorInfo.setOpreateHours(chargingGun.getOpreateHours()); connectorInfos.add(connectorInfo); } return connectorInfos; } /** * 站点费率变化推送 * @param chargingPileId * @return */ @PostMapping("/notificationStationFee") public R notificationStationFee(@RequestParam("chargingPileId") Integer chargingPileId){ TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingPileId).getData(); Site site = siteClient.getSiteByIds(Arrays.asList(chargingPile.getSiteId())).getData().get(0); if(siteIdWhitelist.contains(site.getId())){ NotificationStationFee notificationStationFee = new NotificationStationFee(); notificationStationFee.setOperatorID("906171535"); notificationStationFee.setStationID(site.getCode()); List chargeFeeDetail = new ArrayList<>(); List strategyDetails = accountingStrategyDetailClient.getDetailListByCode(chargingPile.getCode()).getData(); for (TAccountingStrategyDetail accountingStrategyDetail : strategyDetails) { ChargeFeeDetail chargeFeeDetail1 = new ChargeFeeDetail(); chargeFeeDetail1.setEquipmentType(chargingPile.getType()); chargeFeeDetail1.setStartTime(accountingStrategyDetail.getStartTime()); if("00:00".equals(accountingStrategyDetail.getEndTime())){ accountingStrategyDetail.setEndTime("24:00"); } chargeFeeDetail1.setEndTime(accountingStrategyDetail.getEndTime()); chargeFeeDetail1.setElectricityFee(accountingStrategyDetail.getElectrovalence()); chargeFeeDetail1.setServiceFee(accountingStrategyDetail.getServiceCharge()); chargeFeeDetail.add(chargeFeeDetail1); notificationStationFee.setChargeFeeDetail(chargeFeeDetail); } ChengDuJianGuanUtil.notificationStationFee(redisTemplate, notificationStationFee); } return R.ok(); } /** * 设备状态变化推送 * @param chargingGunId * @return */ @PostMapping("/notificationStationStatus") public R notificationStationStatus(@RequestParam("chargingGunId") Integer chargingGunId){ TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingGunId).getData(); TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData(); Site site = siteClient.getSiteByIds(Arrays.asList(chargingPile.getSiteId())).getData().get(0); if(siteIdWhitelist.contains(site.getId())){ ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo(); connectorStatusInfo.setOperatorID("906171535"); connectorStatusInfo.setEquipmentOwnerID("906171535"); connectorStatusInfo.setStationID(site.getCode()); connectorStatusInfo.setEquipmentID(chargingPile.getCode()); connectorStatusInfo.setEquipmentClassification(1); connectorStatusInfo.setConnectorID(chargingGun.getFullNumber()); switch (chargingGun.getStatus()){ 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(7); break; } connectorStatusInfo.setParkStatus(0); connectorStatusInfo.setLookStatus(0); ChengDuJianGuanUtil.notificationStationStatus(redisTemplate, connectorStatusInfo); } return R.ok(); } /** * 设备充电中状态变化推送 * @param vo * @return */ @PostMapping("/notificationConnectorChargeStatus") public R notificationConnectorChargeStatus(@RequestBody NotificationConnectorChargeStatusVo vo){ TChargingGun chargingGun = chargingGunClient.getChargingGunById(vo.getChargingGunId()).getData(); TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData(); Site site = siteClient.getSiteByIds(Arrays.asList(chargingPile.getSiteId())).getData().get(0); if(siteIdWhitelist.contains(site.getId())){ TChargingOrder chargingOrder = chargingOrderClient.getOrderByCode(vo.getOrderCode()).getData(); ConnectorChargeStatusInfo connectorChargeStatusInfo = new ConnectorChargeStatusInfo(); connectorChargeStatusInfo.setOperatorID("906171535"); connectorChargeStatusInfo.setEquipmentOwnerID("906171535"); connectorChargeStatusInfo.setStationID(site.getCode()); connectorChargeStatusInfo.setEquipmentID(chargingPile.getCode()); connectorChargeStatusInfo.setConnectorID(chargingGun.getFullNumber()); connectorChargeStatusInfo.setStartChargeSeq(chargingOrder.getCode()); switch (chargingGun.getStatus()){ case 1: connectorChargeStatusInfo.setConnectorStatus(1); break; case 2: connectorChargeStatusInfo.setConnectorStatus(1); break; case 3: connectorChargeStatusInfo.setConnectorStatus(2); break; case 4: connectorChargeStatusInfo.setConnectorStatus(3); break; case 5: connectorChargeStatusInfo.setConnectorStatus(2); break; case 6: connectorChargeStatusInfo.setConnectorStatus(4); break; case 7: connectorChargeStatusInfo.setConnectorStatus(255); break; } switch (chargingOrder.getStatus()){ case -1: connectorChargeStatusInfo.setOrderStatus(7); break; case 0: connectorChargeStatusInfo.setOrderStatus(7); break; case 1: connectorChargeStatusInfo.setOrderStatus(1); break; case 2: connectorChargeStatusInfo.setOrderStatus(1); break; case 3: connectorChargeStatusInfo.setOrderStatus(2); break; case 4: connectorChargeStatusInfo.setOrderStatus(3); break; case 5: connectorChargeStatusInfo.setOrderStatus(4); break; } connectorChargeStatusInfo.setCurrentA(chargingOrder.getCurrent()); connectorChargeStatusInfo.setVoltageA(chargingOrder.getVoltage()); connectorChargeStatusInfo.setSoc(chargingOrder.getTotalElectricity()); connectorChargeStatusInfo.setStartTime((null != chargingOrder.getStartTime() ? chargingOrder.getStartTime() : LocalDateTime.now()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); connectorChargeStatusInfo.setEndTime((null != chargingOrder.getEndTime() ? chargingOrder.getEndTime() : LocalDateTime.now()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); connectorChargeStatusInfo.setPushTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); String key = "CHENGDU_JIANGUAN:" + chargingOrder.getCode(); Object o = redisTemplate.opsForValue().get(key); String lastPushTime = null; if(null == o){ lastPushTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); }else{ lastPushTime = o.toString(); } connectorChargeStatusInfo.setLastPushTime(lastPushTime); connectorChargeStatusInfo.setTotalPower(chargingOrder.getElectricity()); connectorChargeStatusInfo.setElecMoney(chargingOrder.getElectrovalence()); connectorChargeStatusInfo.setSeviceMoney(chargingOrder.getServiceCharge()); connectorChargeStatusInfo.setTotalMoney(chargingOrder.getPaymentAmount()); connectorChargeStatusInfo.setSoc1(chargingOrder.getTotalElectricity()); ChengDuJianGuanUtil.notificationConnectorChargeStatus(redisTemplate, connectorChargeStatusInfo); redisTemplate.opsForValue().set(key, connectorChargeStatusInfo.getPushTime(), 5, TimeUnit.DAYS); } return R.ok(); } /** * 订单信息推送 * @param vo * @return */ @PostMapping("/notificationOrderInfo") public R notificationOrderInfo(@RequestBody NotificationConnectorChargeStatusVo vo){ TChargingGun chargingGun = chargingGunClient.getChargingGunById(vo.getChargingGunId()).getData(); TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData(); Site site = siteClient.getSiteByIds(Arrays.asList(chargingPile.getSiteId())).getData().get(0); if(siteIdWhitelist.contains(site.getId())){ TChargingOrder chargingOrder = chargingOrderClient.getOrderByCode(vo.getOrderCode()).getData(); CDOrderInfo orderInfo = new CDOrderInfo(); orderInfo.setOperatorID("906171535"); orderInfo.setEquipmentOwnerID("906171535"); orderInfo.setStationID(site.getCode()); orderInfo.setEquipmentID(chargingPile.getCode()); orderInfo.setConnectorID(chargingGun.getFullNumber()); orderInfo.setEquipmentClassification(1); orderInfo.setStartChargeSeq(chargingOrder.getCode()); orderInfo.setUserChargeType(1); orderInfo.setMoney(chargingOrder.getPaymentAmount()); orderInfo.setElectMoney(chargingOrder.getElectrovalence()); orderInfo.setServiceMoney(chargingOrder.getServiceCharge()); orderInfo.setElect(chargingOrder.getElectricity()); orderInfo.setStartTime((null != chargingOrder.getStartTime() ? chargingOrder.getStartTime() : LocalDateTime.now()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); orderInfo.setEndTime((null != chargingOrder.getEndTime() ? chargingOrder.getEndTime() : LocalDateTime.now()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); orderInfo.setPaymentAmount(chargingOrder.getPaymentAmount()); orderInfo.setPayChannel(chargingOrder.getRechargePaymentType() == 2 ? 1 : 2); switch (chargingOrder.getEndMode()){ case 0: orderInfo.setStopReason(3); break; case 1: orderInfo.setStopReason(0); break; case 2: orderInfo.setStopReason(2); break; case 3: orderInfo.setStopReason(1); break; } orderInfo.setPower(chargingOrder.getPower()); if(null == chargingOrder.getStartTime()){ orderInfo.setChargeLast(0L); }else{ Long time = chargingOrder.getEndTime().toEpochSecond(ZoneOffset.UTC) - chargingOrder.getStartTime().toEpochSecond(ZoneOffset.UTC); orderInfo.setChargeLast(time); } orderInfo.setMeterValueStart(new BigDecimal(0)); orderInfo.setMeterValueEnd(new BigDecimal(0)); orderInfo.setPushTimeStamp(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); List data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData(); List chargeDetails = new ArrayList<>(); LocalDateTime startTime = chargingOrder.getStartTime(); LocalDateTime endTime = null == chargingOrder.getEndTime() ? LocalDateTime.now() : chargingOrder.getEndTime(); String s_format = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String e_format = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); for (TChargingOrderAccountingStrategy datum : data) { ChargeDetail chargeDetail = new ChargeDetail(); if(s_format.equals(e_format)){ chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00"); chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59"); }else{ String substring = datum.getEndTime().substring(0, datum.getEndTime().indexOf(":")); if(Integer.valueOf(substring) > 12){ chargeDetail.setDetailStartTime(s_format + " " + datum.getStartTime() + ":00"); chargeDetail.setDetailEndTime(s_format + " " + datum.getEndTime() + ":59"); }else{ chargeDetail.setDetailStartTime(e_format + " " + datum.getStartTime() + ":00"); chargeDetail.setDetailEndTime(e_format + " " + datum.getEndTime() + ":59"); } } chargeDetail.setElecPrice(datum.getElectrovalence()); chargeDetail.setSevicePrice(datum.getServiceCharge()); chargeDetail.setDetailPower(datum.getChargingCapacity().setScale(2, BigDecimal.ROUND_HALF_EVEN)); chargeDetail.setDetailElecMoney(datum.getPeriodElectricPrice()); chargeDetail.setDetailSeviceMoney(datum.getPeriodServicePrice()); chargeDetails.add(chargeDetail); } orderInfo.setChargeDetails(chargeDetails); ChengDuJianGuanUtil.notificationOrderInfo(redisTemplate, orderInfo); } return R.ok(); } }