ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Site.java
@@ -459,20 +459,11 @@ @TableField("isOpenSynchronization") @ApiModelProperty(value = "引流平台数据同步(0=否,1=是)") private Integer isOpenSynchronization; // /** // * 换电设备信息 // */ // @TableField("swap_equipment_infos") // @ApiModelProperty(value = "2.0修改字段-换电设备信息 站点分类为2或3时必填 示例:" + // "[{" + // "\"SwapMechanicalEquipmentID\": \"A564778B\"," + // "\"MechanicalEquipmentPower\": 128.0000" + // "}," + // "{" + // "\"SwapMechanicalEquipmentID\": \"A564778C\"," + // "\"MechanicalEquipmentPower\": 150.0000" + // "}" + // "]") // private String swapEquipmentInfos; /** * 是否有储能设施(0:无,1:有) */ @TableField("isEnergyStorage") @ApiModelProperty(value = "是否有储能设施(0:无,1:有)") private Integer isEnergyStorage; } ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPile.java
@@ -112,4 +112,16 @@ @ApiModelProperty(value = "充电设备纬度") @TableField("equipment_lat") private String equipmentLat; @ApiModelProperty(value = "设备出厂编码") @TableField("equipment_product_code") private String equipmentProductCode; @ApiModelProperty(value = "设备用途 1:公共,50:个人, 100:公交(专用), 101:环卫(专用),102:物流(专用),103:出租车(专用),104:分时租赁(专用),106:单位(专用),107:移动站点(移动储能设备), 108:居民小区(公共), 109:居民小区(专用)") @TableField("equipment_purpose") private Integer equipmentPurpose; @ApiModelProperty(value = "新国标 0:否,1:是") @TableField("new_national_standard") private Integer newNationalStandard; @ApiModelProperty(value = "是否支持VIN码识别 0:否,1:是") @TableField("vin_flag") private Integer vinFlag; } ruoyi-api/ruoyi-api-jianguan/src/main/java/com/ruoyi/integration/api/factory/ChengDuJianGuanClientFallbackFactory.java
@@ -2,7 +2,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.integration.api.feignClient.ChengDuJianGuanClient; import com.ruoyi.integration.api.vo.NotificationStationFeeVo; import com.ruoyi.integration.api.vo.NotificationConnectorChargeStatusVo; import org.springframework.cloud.openfeign.FallbackFactory; public class ChengDuJianGuanClientFallbackFactory implements FallbackFactory<ChengDuJianGuanClient> { @@ -15,9 +15,25 @@ } @Override public R notificationStationFee(NotificationStationFeeVo vo) { public R notificationStationFee(Integer chargingPileId) { return R.fail("站点费率变化推送失败:" + cause.getMessage()); } @Override public R notificationStationStatus(Integer chargingGunId) { return R.fail("设备状态变化推送失败:" + cause.getMessage()); } @Override public R notificationConnectorChargeStatus(NotificationConnectorChargeStatusVo vo) { return R.fail("设备充电中状态变化推送失败:" + cause.getMessage()); } @Override public R notificationOrderInfo(NotificationConnectorChargeStatusVo vo) { return R.fail("订单信息推送失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-jianguan/src/main/java/com/ruoyi/integration/api/feignClient/ChengDuJianGuanClient.java
@@ -4,7 +4,7 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.integration.api.factory.ChengDuJianGuanClientFallbackFactory; import com.ruoyi.integration.api.vo.NotificationStationFeeVo; import com.ruoyi.integration.api.vo.NotificationConnectorChargeStatusVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -25,9 +25,36 @@ /** * 站点费率变化推送 * @param vo * @param chargingPileId * @return */ @PostMapping("/chengdu/jianguan/notificationStationFee") R notificationStationFee(@RequestBody NotificationStationFeeVo vo); R notificationStationFee(@RequestParam("chargingPileId") Integer chargingPileId); /** * 设备状态变化推送 * @param chargingGunId * @return */ @PostMapping("/chengdu/jianguan/notificationStationStatus") R notificationStationStatus(@RequestParam("chargingGunId") Integer chargingGunId); /** * 设备充电中状态变化推送 * @param vo * @return */ @PostMapping("/chengdu/jianguan/notificationConnectorChargeStatus") R notificationConnectorChargeStatus(@RequestBody NotificationConnectorChargeStatusVo vo); /** * 订单信息推送 * @param vo * @return */ @PostMapping("/chengdu/jianguan/notificationOrderInfo") R notificationOrderInfo(@RequestBody NotificationConnectorChargeStatusVo vo); } ruoyi-api/ruoyi-api-jianguan/src/main/java/com/ruoyi/integration/api/vo/NotificationConnectorChargeStatusVo.java
New file @@ -0,0 +1,15 @@ package com.ruoyi.integration.api.vo; import lombok.Data; @Data public class NotificationConnectorChargeStatusVo { /** * 充电枪id */ private Integer chargingGunId; /** * 充电订单code */ private String orderCode; } ruoyi-api/ruoyi-api-jianguan/src/main/java/com/ruoyi/integration/api/vo/NotificationStationFeeVo.java
File was deleted ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -27,6 +27,7 @@ import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.integration.api.feignClient.ChengDuJianGuanClient; import com.ruoyi.integration.api.feignClient.IntegrationClient; import com.ruoyi.integration.api.feignClient.TCECClient; import com.ruoyi.system.api.domain.SysUser; @@ -76,6 +77,9 @@ @Resource private TCECClient tcecClient; @Resource private ChengDuJianGuanClient chengDuJianGuanClient; @Autowired @@ -140,6 +144,7 @@ List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, dto.getSiteId()).eq(TChargingPile::getDelFlag, 0).list(); for (TChargingPile tChargingPile : list) { integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(dto.getAccountingStrategyDetails())); chengDuJianGuanClient.notificationStationFee(tChargingPile.getId()); } } return AjaxResult.ok(dto.getId()); @@ -217,6 +222,7 @@ List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, dto.getSiteId()).eq(TChargingPile::getDelFlag, 0).list(); for (TChargingPile tChargingPile : list) { integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(dto.getAccountingStrategyDetails())); chengDuJianGuanClient.notificationStationFee(tChargingPile.getId()); } } return AjaxResult.success(); @@ -407,6 +413,7 @@ List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, byId.getSiteId()).list(); for (TChargingPile tChargingPile : list) { integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(accountingStrategyDetails)); chengDuJianGuanClient.notificationStationFee(tChargingPile.getId()); } } }else { ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -33,6 +33,7 @@ import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.integration.api.elutong.model.ConnectorStatusInfo; import com.ruoyi.integration.api.elutong.model.ConnectorStatusReq; import com.ruoyi.integration.api.feignClient.ChengDuJianGuanClient; import com.ruoyi.integration.api.feignClient.ELuTongClient; import com.ruoyi.integration.api.feignClient.TCECClient; import com.ruoyi.order.api.feignClient.ChargingOrderClient; @@ -88,6 +89,9 @@ @Resource private ELuTongClient eLuTongClient; @Resource private ChengDuJianGuanClient chengDuJianGuanClient; @@ -424,6 +428,7 @@ if(200 != r.getCode()){ log.error(r.getMsg()); } chengDuJianGuanClient.notificationStationStatus(chargingGun.getId()); } } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -26,6 +26,7 @@ import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.integration.api.elutong.model.*; import com.ruoyi.integration.api.feignClient.ChengDuJianGuanClient; import com.ruoyi.integration.api.feignClient.ELuTongClient; import com.ruoyi.integration.api.feignClient.IntegrationClient; import com.ruoyi.integration.api.feignClient.TCECClient; @@ -47,6 +48,7 @@ import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -99,6 +101,9 @@ private TCECClient tcecClient; @Resource ELuTongClient eLuTongClient; @Resource private ChengDuJianGuanClient chengDuJianGuanClient; /** @@ -228,6 +233,9 @@ if(200 != r.getCode()){ System.out.println(r.getMsg()); } //推送成都监管 chengDuJianGuanClient.notificationStationInfo(site.getId()); }); } return AjaxResult.success(); @@ -437,6 +445,8 @@ if(200 != r.getCode()){ System.out.println(r.getMsg()); } //推送成都监管 chengDuJianGuanClient.notificationStationInfo(site.getId()); }); } return AjaxResult.success(); ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
@@ -23,6 +23,7 @@ import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.integration.api.feignClient.ChengDuJianGuanClient; import com.ruoyi.integration.api.feignClient.SendMessageClient; import com.ruoyi.integration.api.feignClient.TCECClient; import com.ruoyi.integration.api.model.QrCodeDelivery; @@ -38,6 +39,10 @@ import javax.annotation.Resource; import java.util.*; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -123,6 +128,13 @@ @Autowired private SiteMapper siteMapper; @Resource private ChengDuJianGuanClient chengDuJianGuanClient; /** * 添加充电枪 * @param dto @@ -155,8 +167,11 @@ qrCodeDelivery.setCreate_time(new Date()); qrCodeDelivery.setLast_time(new Date()); sendMessageClient.qrCodeDelivery(qrCodeDelivery); Site site = siteMapper.selectById(chargingPile.getSiteId()); // 推送充换电站信息 ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); threadPoolExecutor.execute(()->{ //推送成都监管 chengDuJianGuanClient.notificationStationInfo(chargingPile.getSiteId()); }); return AjaxResult.success(); } @@ -198,7 +213,11 @@ qrCodeDelivery.setLast_time(new Date()); sendMessageClient.qrCodeDelivery(qrCodeDelivery); tcecClient.superviseNotificationStationInfo(one.getSiteId()); ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); threadPoolExecutor.execute(()->{ //推送成都监管 chengDuJianGuanClient.notificationStationInfo(chargingPile.getSiteId()); }); return AjaxResult.success(); } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -54,6 +54,9 @@ import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -128,6 +131,9 @@ @Resource private AppUserClient appUserClient; @Resource private ChengDuJianGuanClient chengDuJianGuanClient; @@ -211,6 +217,11 @@ chargingPile.setIotdDeviceId(showDeviceResp.getDeviceId()); } this.save(chargingPile); ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); threadPoolExecutor.execute(()->{ //推送成都监管 chengDuJianGuanClient.notificationStationInfo(chargingPile.getSiteId()); }); return AjaxResult.success(); } @@ -330,6 +341,12 @@ sendMessageClient.qrCodeDelivery(qrCodeDelivery); } tcecClient.superviseNotificationStationInfo(chargingPile.getSiteId()); ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); threadPoolExecutor.execute(()->{ //推送成都监管 chengDuJianGuanClient.notificationStationInfo(chargingPile.getSiteId()); }); return AjaxResult.success(); } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/chengdujianguan/ChengDuJianGuanController.java
@@ -12,16 +12,16 @@ 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.NotificationStationFeeVo; import com.ruoyi.integration.api.vo.SiteVo; import com.ruoyi.integration.api.vo.TAccountingStrategyDetailVo; import com.ruoyi.integration.api.vo.TChargingPileVo; import com.ruoyi.integration.api.vo.NotificationConnectorChargeStatusVo; import com.ruoyi.jianguan.chengdujianguan.enu.*; import com.ruoyi.jianguan.chengdujianguan.model.CDEquipmentInfo; import com.ruoyi.jianguan.chengdujianguan.model.CDStationInfo; import com.ruoyi.jianguan.chengdujianguan.model.ChargeFeeDetail; import com.ruoyi.jianguan.chengdujianguan.model.NotificationStationFee; 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.*; @@ -29,10 +29,13 @@ 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 @@ -57,6 +60,14 @@ @Resource private AccountingStrategyDetailClient accountingStrategyDetailClient; @Resource private ChargingOrderClient chargingOrderClient; @Resource private ChargingOrderAccountingStrategyClient chargingOrderAccountingStrategyClient; //成都、眉山、阿坝 private List<String> list = Arrays.asList("510100", "511400", "513200"); /** * 充电站信息变化推送 @@ -66,7 +77,9 @@ @PostMapping("/notificationStationInfo") public R notificationStationInfo(@RequestParam("siteId") Integer siteId){ Site site = siteClient.getSiteByIds(Arrays.asList(siteId)).getData().get(0); if(StringUtils.isNotEmpty(site.getCityCode()) && list.contains(site.getCityCode())){ ChengDuJianGuanUtil.notificationStationInfo(redisTemplate, buildStationInfo(site)); } return R.ok(); } @@ -156,7 +169,7 @@ stationInfo.setParkingLockFlag(site.getParkingLockFlag()); stationInfo.setIsDemandResponse(1); stationInfo.setIsSupportOrderlyCharging(1); stationInfo.setIsEnergyStorage(); stationInfo.setIsEnergyStorage(site.getIsEnergyStorage()); stationInfo.setElectricityType(site.getElectricityType()); stationInfo.setRatedPower(site.getRatedPower()); stationInfo.setPeriodFee(site.getPeriodFee()); @@ -180,7 +193,7 @@ cdEquipmentInfo.setManufacturerID(tChargingPile.getManufacturerCode()); cdEquipmentInfo.setManufacturerName(tChargingPile.getManufacturer()); cdEquipmentInfo.setEquipmentModel(tChargingPile.getEquipmentType()); cdEquipmentInfo.setEquipmentProductCode(); cdEquipmentInfo.setEquipmentProductCode(tChargingPile.getEquipmentProductCode()); cdEquipmentInfo.setEquipmentName(tChargingPile.getName()); cdEquipmentInfo.setConstructionTime(tChargingPile.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); if(null != tChargingPile.getProductionDate()){ @@ -220,12 +233,12 @@ cdEquipmentInfo.setEquipmentStatus(5); break; } cdEquipmentInfo.setEquipmentPurpose(); cdEquipmentInfo.setEquipmentPurpose(tChargingPile.getEquipmentPurpose()); cdEquipmentInfo.setEquipmentPower(tChargingPile.getRatedPower()); cdEquipmentInfo.setNewNationalStandard(); cdEquipmentInfo.setNewNationalStandard(tChargingPile.getNewNationalStandard()); cdEquipmentInfo.setEquipmentLng(new BigDecimal(tChargingPile.getEquipmentLng()).setScale(6, RoundingMode.HALF_EVEN)); cdEquipmentInfo.setEquipmentLat(new BigDecimal(tChargingPile.getEquipmentLat()).setScale(6, RoundingMode.HALF_EVEN)); cdEquipmentInfo.setVinFlag(); cdEquipmentInfo.setVinFlag(tChargingPile.getVinFlag()); cdEquipmentInfo.setConnectorInfos(buildConnectorInfo(tChargingPile.getId(), chargingGunList)); equipmentInfos.add(cdEquipmentInfo); } @@ -277,19 +290,22 @@ /** * 站点费率变化推送 * @param vo * @param chargingPileId * @return */ @PostMapping("/notificationStationFee") public R notificationStationFee(@RequestBody NotificationStationFeeVo vo){ 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(StringUtils.isNotEmpty(site.getCityCode()) && list.contains(site.getCityCode())){ NotificationStationFee notificationStationFee = new NotificationStationFee(); notificationStationFee.setOperatorID("906171535"); notificationStationFee.setStationID(vo.getSiteCode()); notificationStationFee.setStationID(site.getCode()); List<ChargeFeeDetail> chargeFeeDetail = new ArrayList<>(); List<TAccountingStrategyDetail> strategyDetails = accountingStrategyDetailClient.getDetailListByCode(vo.getChargingPileCode()).getData(); List<TAccountingStrategyDetail> strategyDetails = accountingStrategyDetailClient.getDetailListByCode(chargingPile.getCode()).getData(); for (TAccountingStrategyDetail accountingStrategyDetail : strategyDetails) { ChargeFeeDetail chargeFeeDetail1 = new ChargeFeeDetail(); chargeFeeDetail1.setEquipmentType(vo.getEquipmentType()); chargeFeeDetail1.setEquipmentType(chargingPile.getType()); chargeFeeDetail1.setStartTime(accountingStrategyDetail.getStartTime()); chargeFeeDetail1.setEndTime(accountingStrategyDetail.getEndTime()); chargeFeeDetail1.setElectricityFee(accountingStrategyDetail.getElectrovalence()); @@ -298,6 +314,239 @@ 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(StringUtils.isNotEmpty(site.getCityCode()) && list.contains(site.getCityCode())){ 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(StringUtils.isNotEmpty(site.getCityCode()) && list.contains(site.getCityCode())){ 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(StringUtils.isNotEmpty(site.getCityCode()) && list.contains(site.getCityCode())){ 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<TChargingOrderAccountingStrategy> data = chargingOrderAccountingStrategyClient.getChargingOrderAccountingStrategyByOrderId(chargingOrder.getId()).getData(); List<ChargeDetail> 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(); } } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/chengdujianguan/ChengDuJianGuanUtil.java
@@ -18,6 +18,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.concurrent.TimeUnit; @Slf4j public class ChengDuJianGuanUtil { @@ -132,21 +133,21 @@ public static void main(String[] args) { NotificationStationFee notificationStationFee = new NotificationStationFee(); notificationStationFee.setOperatorID(OperatorID); notificationStationFee.setStationID("241231001"); List<ChargeFeeDetail> chargeFeeDetail = new ArrayList<>(); ChargeFeeDetail chargeFeeDetail1 = new ChargeFeeDetail(); chargeFeeDetail1.setEquipmentType(1); chargeFeeDetail1.setStartTime("00:00"); chargeFeeDetail1.setEndTime("23:59"); chargeFeeDetail1.setElectricityFee(new BigDecimal(0.49)); chargeFeeDetail1.setServiceFee(new BigDecimal(0.51)); chargeFeeDetail.add(chargeFeeDetail1); notificationStationFee.setChargeFeeDetail(chargeFeeDetail); ChengDuJianGuanUtil.notificationStationFee(null, notificationStationFee); } // public static void main(String[] args) { // NotificationStationFee notificationStationFee = new NotificationStationFee(); // notificationStationFee.setOperatorID(OperatorID); // notificationStationFee.setStationID("241231001"); // List<ChargeFeeDetail> chargeFeeDetail = new ArrayList<>(); // ChargeFeeDetail chargeFeeDetail1 = new ChargeFeeDetail(); // chargeFeeDetail1.setEquipmentType(1); // chargeFeeDetail1.setStartTime("00:00"); // chargeFeeDetail1.setEndTime("23:59"); // chargeFeeDetail1.setElectricityFee(new BigDecimal(0.49)); // chargeFeeDetail1.setServiceFee(new BigDecimal(0.51)); // chargeFeeDetail.add(chargeFeeDetail1); // notificationStationFee.setChargeFeeDetail(chargeFeeDetail); // ChengDuJianGuanUtil.notificationStationFee(null, notificationStationFee); // } // public static void main(String[] args) { @@ -237,10 +238,10 @@ */ public static String getToken(RedisTemplate redisTemplate) { try { // Object o = redisTemplate.opsForValue().get("LLTOKEN"); // if(null != o){ // return o.toString(); // } Object o = redisTemplate.opsForValue().get("LLTOKEN"); if(null != o){ return o.toString(); } // 请求data Map<String, String> data = new HashMap<>(); data.put("OperatorID", OperatorID); @@ -278,7 +279,7 @@ Map<String, String> resultMap = (Map<String, String>) JSON.parse(dataStr); String accessToken = jsonObject.getString("AccessToken"); Long tokenAvailableTime = jsonObject.getLong("TokenAvailableTime"); // redisTemplate.opsForValue().set("LLTOKEN", accessToken, Long.valueOf(tokenAvailableTime), TimeUnit.SECONDS); redisTemplate.opsForValue().set("LLTOKEN", accessToken, Long.valueOf(tokenAvailableTime), TimeUnit.SECONDS); return accessToken; } } catch (Exception e) { ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/chengdujianguan/model/CDOrderInfo.java
@@ -97,7 +97,7 @@ * 充电时长 秒 */ @JsonProperty("ChargeLast") private Integer chargeLast; private Long chargeLast; /** * 电表总起值 */ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -34,6 +34,7 @@ import com.ruoyi.integration.api.model.*; import com.ruoyi.integration.api.vo.ChargingOrderVo; import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply; import com.ruoyi.integration.api.vo.NotificationConnectorChargeStatusVo; import com.ruoyi.integration.api.vo.StartChargeResult; import com.ruoyi.order.api.dto.SettlementConfirmAdd; import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient; @@ -232,6 +233,9 @@ @Resource private ChargingMessageClient chargingMessageClient; @Resource private ChengDuJianGuanClient chengDuJianGuanClient; /** @@ -769,6 +773,17 @@ log.info(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------" + platformStartCharging.toString()); sendMessageClient.platformStartCharging(platformStartCharging); ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); threadPoolExecutor.execute(()->{ //推送成都监管 NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo(); vo.setOrderCode(chargingOrder.getCode()); vo.setChargingGunId(chargingOrder.getChargingGunId()); chengDuJianGuanClient.notificationConnectorChargeStatus(vo); }); // //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 // Long id = chargingOrder.getId(); // //执行5分钟的定时任务检测 @@ -832,6 +847,7 @@ chargingOrder.setStartTime(LocalDateTime.now()); } this.updateById(chargingOrder); if (chargingOrder.getStatus() == 3) { //推送监管平台订单状态 new Thread(() -> { @@ -846,6 +862,14 @@ if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) { tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); } ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); threadPoolExecutor.execute(()->{ //推送成都监管 NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo(); vo.setOrderCode(chargingOrder.getCode()); vo.setChargingGunId(chargingOrder.getChargingGunId()); chengDuJianGuanClient.notificationConnectorChargeStatus(vo); }); return true; } else { Integer counter = boot_failed_map.get(code); @@ -880,6 +904,14 @@ if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) { tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); } ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); threadPoolExecutor.execute(()->{ //推送成都监管 NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo(); vo.setOrderCode(chargingOrder.getCode()); vo.setChargingGunId(chargingOrder.getChargingGunId()); chengDuJianGuanClient.notificationConnectorChargeStatus(vo); }); return true; } } @@ -1305,7 +1337,14 @@ if (2 == order.getOrderSource() && 1 == site.getIsOpenSynchronization()) { tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId()); } ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); threadPoolExecutor.execute(()->{ //推送成都监管 NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo(); vo.setOrderCode(order.getCode()); vo.setChargingGunId(order.getChargingGunId()); chengDuJianGuanClient.notificationConnectorChargeStatus(vo); }); return AjaxResult.success(); } @@ -2611,6 +2650,16 @@ } }).start(); } ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); TChargingOrder finalChargingOrder1 = chargingOrder; threadPoolExecutor.execute(()->{ //推送成都监管 NotificationConnectorChargeStatusVo statusVo = new NotificationConnectorChargeStatusVo(); statusVo.setOrderCode(finalChargingOrder1.getCode()); statusVo.setChargingGunId(finalChargingOrder1.getChargingGunId()); chengDuJianGuanClient.notificationConnectorChargeStatus(statusVo); chengDuJianGuanClient.notificationOrderInfo(statusVo); }); //开始将优惠券优惠的金额添加到明细中 BigDecimal couponDiscountAmount = chargingOrder.getCouponDiscountAmount(); @@ -2982,6 +3031,18 @@ chargingOrderRefundService.save(chargingOrderRefund); } } if(5 == tChargingOrder.getStatus()){ ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); threadPoolExecutor.execute(()->{ //推送成都监管 NotificationConnectorChargeStatusVo statusVo = new NotificationConnectorChargeStatusVo(); statusVo.setOrderCode(tChargingOrder.getCode()); statusVo.setChargingGunId(tChargingOrder.getChargingGunId()); chengDuJianGuanClient.notificationConnectorChargeStatus(statusVo); chengDuJianGuanClient.notificationOrderInfo(statusVo); }); } } if (payOrderQueryDto.getType() == 2) { @@ -4137,6 +4198,14 @@ //推送三方平台订单状态 tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId()); } ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); threadPoolExecutor.execute(()->{ //推送成都监管 NotificationConnectorChargeStatusVo statusVo = new NotificationConnectorChargeStatusVo(); statusVo.setOrderCode(chargingOrder.getCode()); statusVo.setChargingGunId(chargingOrder.getChargingGunId()); chengDuJianGuanClient.notificationConnectorChargeStatus(statusVo); }); return R.ok(); } @@ -4186,6 +4255,14 @@ log.info("【" + code1 + "】三方平台请求停止充电发起消息结束"); log.info(platformStopCharging.toString()); }); ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); threadPoolExecutor.execute(()->{ //推送成都监管 NotificationConnectorChargeStatusVo statusVo = new NotificationConnectorChargeStatusVo(); statusVo.setOrderCode(chargingOrder.getCode()); statusVo.setChargingGunId(chargingOrder.getChargingGunId()); chengDuJianGuanClient.notificationConnectorChargeStatus(statusVo); }); return R.ok(); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
@@ -20,11 +20,13 @@ import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.integration.api.feignClient.ChargingMessageClient; import com.ruoyi.integration.api.feignClient.ChengDuJianGuanClient; import com.ruoyi.integration.api.feignClient.TCECClient; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.TransactionRecord; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.api.vo.ChargingOrderVo; import com.ruoyi.integration.api.vo.NotificationConnectorChargeStatusVo; import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.vo.AccountingStrategyDetailOrderVo; import com.ruoyi.order.api.vo.TransactionRecordMessageVO; @@ -63,6 +65,9 @@ import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -129,6 +134,9 @@ @Resource private ITChargingOrderSummaryDataService chargingOrderSummaryDataService; @Resource private ChengDuJianGuanClient chengDuJianGuanClient; //十分钟循环执行的定时任务 @@ -620,6 +628,17 @@ if (2 == order.getOrderSource() && 1 == site.getIsOpenSynchronization()) { tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 2); } ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>()); TChargingOrder finalOrder = order; threadPoolExecutor.execute(()->{ //推送成都监管 NotificationConnectorChargeStatusVo statusVo = new NotificationConnectorChargeStatusVo(); statusVo.setOrderCode(finalOrder.getCode()); statusVo.setChargingGunId(finalOrder.getChargingGunId()); chengDuJianGuanClient.notificationConnectorChargeStatus(statusVo); chengDuJianGuanClient.notificationOrderInfo(statusVo); }); //添加积分 if (1 == order.getOrderSource()) {