diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index 6569077c8..65ebb3ae7 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -252,6 +252,22 @@ public class SpringBootTestController { @Autowired private NotificationService notificationService; + @Test + public void getSnowflakeIdTest() { + for (int i = 0; i < 100; i++) { + String snowflakeId = SnowflakeIdWorker.getSnowflakeId(); + System.out.println("第" + i + "个snowflakeId:" + snowflakeId); + } + } + + @Test + public void getOrderCodeTest() { + for (int i = 0; i < 10; i++) { + String orderCode = IdUtils.getOrderCode(); + System.out.println("第" + i + 1 + "个orderCode:" + orderCode); + } + } + @Test public void notificationStationInfoTest() { String stationId = "19"; diff --git a/jsowell-pile/pom.xml b/jsowell-pile/pom.xml index 4f11ef583..19a6c047c 100644 --- a/jsowell-pile/pom.xml +++ b/jsowell-pile/pom.xml @@ -108,6 +108,16 @@ 1.0.0 + + com.alipay.sdk + alipay-sdk-java + + + + com.alipay.sdk + alipay-easysdk + + diff --git a/jsowell-pile/src/main/java/com/jsowell/alipay/AliAppletRemoteService.java b/jsowell-pile/src/main/java/com/jsowell/alipay/AliAppletRemoteService.java index ef169c9c7..4e5cf466f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/alipay/AliAppletRemoteService.java +++ b/jsowell-pile/src/main/java/com/jsowell/alipay/AliAppletRemoteService.java @@ -1,29 +1,42 @@ package com.jsowell.alipay; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.AlipayConfig; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipaySystemOauthTokenRequest; +import com.alipay.api.response.AlipaySystemOauthTokenResponse; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.StringUtils; +import com.jsowell.wxpay.service.WxAppletRemoteService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.util.Map; + /** * 支付宝小程序service */ @Service public class AliAppletRemoteService { - // private static AlipayConfig getAlipayConfig() { - // String privateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->"; - // String alipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->"; - // AlipayConfig alipayConfig = new AlipayConfig(); - // alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); - // alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->"); - // alipayConfig.setPrivateKey(privateKey); - // alipayConfig.setFormat("json"); - // alipayConfig.setAlipayPublicKey(alipayPublicKey); - // alipayConfig.setCharset("UTF-8"); - // alipayConfig.setSignType("RSA2"); - // return alipayConfig; - // } + private Logger log = LoggerFactory.getLogger(AliAppletRemoteService.class); + + private static AlipayConfig getAlipayConfig() { + String privateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->"; + String alipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->"; + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->"); + alipayConfig.setPrivateKey(privateKey); + alipayConfig.setFormat("json"); + alipayConfig.setAlipayPublicKey(alipayPublicKey); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + return alipayConfig; + } /** * 服务端获取 access_token、user_id @@ -37,4 +50,7 @@ public class AliAppletRemoteService { return null; } + + + } diff --git a/jsowell-pile/src/main/java/com/jsowell/thirdparty/service/impl/ThirdpartySecretInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/thirdparty/service/impl/ThirdpartySecretInfoServiceImpl.java index 0bddd2f41..e2b45596d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/thirdparty/service/impl/ThirdpartySecretInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/thirdparty/service/impl/ThirdpartySecretInfoServiceImpl.java @@ -2,6 +2,7 @@ package com.jsowell.thirdparty.service.impl; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.core.redis.RedisCache; +import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; import com.jsowell.pile.mapper.ThirdPartyStationRelationMapper; import com.jsowell.pile.vo.ThirdPartySecretInfoVO; diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/NinaXiaPlatformServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/NinaXiaPlatformServiceImpl.java index 4240d34aa..47b5a4682 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/NinaXiaPlatformServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/NinaXiaPlatformServiceImpl.java @@ -8,6 +8,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; +import com.jsowell.common.enums.lianlian.StationPaymentEnum; import com.jsowell.common.enums.thirdparty.BusinessInformationExchangeEnum; import com.jsowell.common.enums.thirdparty.ThirdPartyOperatorIdEnum; import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum; @@ -19,10 +20,7 @@ import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.JWTUtils; import com.jsowell.common.util.PageUtils; import com.jsowell.common.util.StringUtils; -import com.jsowell.pile.domain.OrderBasicInfo; -import com.jsowell.pile.domain.OrderDetail; -import com.jsowell.pile.domain.ThirdPartyPlatformConfig; -import com.jsowell.pile.domain.ThirdPartyStationRelation; +import com.jsowell.pile.domain.*; import com.jsowell.pile.dto.PushRealTimeInfoDTO; import com.jsowell.pile.dto.QueryEquipChargeStatusDTO; import com.jsowell.pile.dto.QueryOperatorInfoDTO; @@ -44,6 +42,7 @@ import com.jsowell.thirdparty.lianlian.domain.ConnectorStatusInfo; import com.jsowell.thirdparty.lianlian.domain.StationStatusInfo; import com.jsowell.thirdparty.lianlian.vo.AccessTokenVO; import com.jsowell.thirdparty.lianlian.vo.QueryChargingStatusVO; +import com.jsowell.thirdparty.platform.common.StationInfo; import com.jsowell.thirdparty.platform.domain.*; import com.jsowell.thirdparty.platform.service.ThirdPartyPlatformService; import com.jsowell.thirdparty.platform.factory.ThirdPartyPlatformFactory; @@ -780,4 +779,124 @@ public class NinaXiaPlatformServiceImpl implements ThirdPartyPlatformService { } + /** + * 充电站信息变化推送 notification_stationInfo + * 新站需要推送。当站点信息发生变化时,推送新的信息通知到市级平台 + * + * @param stationId 充电站id + * @throws UnsupportedOperationException 未实现异常 + */ + @Override + public String notificationStationInfo(String stationId) { + // 通过id查询站点相关信息 + PileStationInfo pileStationInfo = pileStationInfoService.selectPileStationInfoById(Long.parseLong(stationId)); + + // 查询第三方平台配置信息 + ThirdPartySecretInfoVO thirdPartySecretInfoVO = thirdpartySecretInfoService.queryByThirdPlatformType(thirdPlatformType); + if (thirdPartySecretInfoVO == null) { + throw new BusinessException("", "无此平台配置信息"); + } + String operatorId = thirdPartySecretInfoVO.getOurOperatorId(); + String operatorSecret = thirdPartySecretInfoVO.getTheirOperatorSecret(); + String signSecret = thirdPartySecretInfoVO.getTheirSigSecret(); + String dataSecret = thirdPartySecretInfoVO.getTheirDataSecret(); + String dataSecretIv = thirdPartySecretInfoVO.getTheirDataSecretIv(); + String urlAddress = thirdPartySecretInfoVO.getTheirUrlPrefix(); + + // 组装联联平台所需要的数据格式 + StationInfo info = StationInfo.builder() + .stationID(stationId) + .operatorID(operatorId) + .stationName(pileStationInfo.getStationName()) + .isAloneApply(Integer.valueOf(pileStationInfo.getAloneApply())) + .isPublicParkingLot(Integer.valueOf(pileStationInfo.getPublicParking())) + .countryCode(pileStationInfo.getCountryCode()) + .address(pileStationInfo.getAddress()) + .serviceTel(pileStationInfo.getStationTel()) + .stationType(Integer.valueOf(pileStationInfo.getStationType())) + .stationStatus(Integer.valueOf(pileStationInfo.getStationStatus())) + .parkNums(Integer.valueOf(pileStationInfo.getParkNums())) + .stationLng(new BigDecimal(pileStationInfo.getStationLng())) + .stationLat(new BigDecimal(pileStationInfo.getStationLat())) + .construction(Integer.valueOf(pileStationInfo.getConstruction())) + .openAllDay(Integer.valueOf(pileStationInfo.getOpenAllDay())) + .minElectricityPrice(new BigDecimal(Constants.ZERO)) + .electricityFee(Constants.ZERO) + .serviceFee(Constants.ZERO) + .parkFree(Integer.valueOf(pileStationInfo.getParkFree())) + .supportOrder(Integer.valueOf(pileStationInfo.getSupportOrder())) + .parkFeeType(0) + .toiletFlag(Integer.valueOf(pileStationInfo.getToiletFlag())) + .storeFlag(Integer.valueOf(pileStationInfo.getStoreFlag())) + .restaurantFlag(Integer.valueOf(pileStationInfo.getRestaurantFlag())) + .loungeFlag(Integer.valueOf(pileStationInfo.getLoungeFlag())) + .canopyFlag(Integer.valueOf(pileStationInfo.getCanopyFlag())) + .printerFlag(Integer.valueOf(pileStationInfo.getPrinterFlag())) + .barrierFlag(Integer.valueOf(pileStationInfo.getBarrierFlag())) + .parkingLockFlag(Integer.valueOf(pileStationInfo.getParkingLockFlag())) + .build(); + String areaCode = pileStationInfo.getAreaCode(); // 330000,330200,330213 + // 根据逗号分组 + String[] split = StringUtils.split(areaCode, ","); + // 只取最后一部分 330213 + String subAreaCode = split[split.length - 1]; + info.setAreaCode(subAreaCode); + // 截取运营商组织机构代码(去除最后一位后的最后九位) + String organizationCode = ""; + if (StringUtils.equals(ThirdPlatformTypeEnum.LIAN_LIAN_PLATFORM.getTypeCode(), thirdPlatformType)) { + // 联联平台先使用自己运营商的组织机构代码 + organizationCode = Constants.OPERATORID_LIANLIAN; + info.setEquipmentOwnerID(organizationCode); + } else { + MerchantInfoVO merchantInfo = pileMerchantInfoService.getMerchantInfoVO(String.valueOf(pileStationInfo.getMerchantId())); + organizationCode = merchantInfo.getOrganizationCode(); + if (StringUtils.isNotBlank(organizationCode) && organizationCode.length() == 18) { + String equipmentOwnerId = StringUtils.substring(organizationCode, organizationCode.length() - 10, organizationCode.length() - 1); + info.setEquipmentOwnerID(equipmentOwnerId); + } + } + if (StringUtils.equals("36", String.valueOf(pileStationInfo.getMerchantId()))) { + // 远大 + info.setEquipmentOwnerID(Constants.OPERATORID_YUAN_DA); + } + if (MerchantUtils.isXiXiaoMerchant(String.valueOf(pileStationInfo.getMerchantId()))) { + // 如果是希晓运营商,则把equipmentOwnerID换成希晓 + info.setEquipmentOwnerID(Constants.OPERATORID_XI_XIAO); + } + String payment = StationPaymentEnum.getPaymentByCode(pileStationInfo.getPayment()); + info.setPayment(payment); + if (StringUtils.isNotBlank(pileStationInfo.getParkingNumber())) { + info.setIsPublicParkingLot(1); + info.setParkingLotNumber(pileStationInfo.getParkingNumber()); + } + // 户号 + if (StringUtils.isNotBlank(pileStationInfo.getAccountNumber())) { + info.setAccountNumber(pileStationInfo.getAccountNumber()); + } + + // 容量 + if (StringUtils.isNotBlank(String.valueOf(pileStationInfo.getCapacity()))) { + info.setCapacity(pileStationInfo.getCapacity().setScale(4, BigDecimal.ROUND_HALF_UP)); + } + List pileList = pileBasicInfoService.getPileListForLianLian(stationId); + if (CollectionUtils.isNotEmpty(pileList)) { + info.setEquipmentInfos(pileList); // 充电设备信息列表 + } + + // 调用联联平台接口 + String url = urlAddress + "supervise_notification_station_info"; + + String jsonStr = JSON.toJSONString(info); + JSONObject data = new JSONObject(); + data.put("StationInfo", jsonStr); + + String jsonString = JSON.toJSONString(data); + + // 获取令牌 + String token = getToken(urlAddress, operatorId, operatorSecret, dataSecretIv, signSecret, dataSecret); + String result = HttpRequestUtil.sendPost(token, jsonString, url, dataSecret + , dataSecretIv, operatorId, signSecret); + + return result; + } } diff --git a/pom.xml b/pom.xml index 2f9327ade..dd2d19444 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,9 @@ 1.2.5 1.2.5 1.2.10 + 4.39.79.ALL + 2.2.3 + 3.1.87 @@ -235,11 +238,28 @@ ${mqttv3.version} + com.tencentcloudapi tencentcloud-sdk-java - 3.1.87 + ${tencent.sdk.version} + + + + com.alipay.sdk + alipay-sdk-java + ${alipai.sdk.version} + + + + + com.alipay.sdk + alipay-easysdk + ${alipai.easysdk.version} + + + com.github.qcloudsms qcloudsms