diff --git a/jsowell-admin/src/main/java/com/jsowell/api/thirdparty/ChargeAlgorithmController.java b/jsowell-admin/src/main/java/com/jsowell/api/thirdparty/ChargeAlgorithmController.java index 3cbdffed8..249cf62ea 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/thirdparty/ChargeAlgorithmController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/thirdparty/ChargeAlgorithmController.java @@ -3,12 +3,11 @@ package com.jsowell.api.thirdparty; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.response.RestApiResponse; +import com.jsowell.thirdparty.platform.dto.BatteryChargeReportDTO; +import com.jsowell.thirdparty.platform.service.impl.BatteryChargeReportService; import com.jsowell.thirdparty.platform.service.impl.ChargeAlgorithmService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * 算法应用Controller @@ -24,11 +23,15 @@ public class ChargeAlgorithmController extends BaseController { @Autowired private ChargeAlgorithmService chargeAlgorithmService; - @GetMapping("/pushOrderInfo/{orderCode}") - public RestApiResponse pushOrderInfo(@PathVariable("orderCode") String orderCode) { + @Autowired + private BatteryChargeReportService batteryChargeReportService; + + @PostMapping("/pushOrderInfo") + public RestApiResponse pushOrderInfo(@RequestBody BatteryChargeReportDTO dto) { RestApiResponse response = null; try { - String result = chargeAlgorithmService.pushOrderInfo(orderCode); + // String result = chargeAlgorithmService.pushOrderInfo(orderCode); + String result = batteryChargeReportService.pushChargeData(dto.getOrderCode(), dto.getReportType()); response = new RestApiResponse<>(result); }catch (Exception e) { logger.error("算法应用推送订单信息 error, ", e); diff --git a/jsowell-admin/src/main/resources/application-dev.yml b/jsowell-admin/src/main/resources/application-dev.yml index d150825b3..ef3e2cd10 100644 --- a/jsowell-admin/src/main/resources/application-dev.yml +++ b/jsowell-admin/src/main/resources/application-dev.yml @@ -249,13 +249,19 @@ parking: orgId: BTTEST01 # 充电算法平台配置 -chargeAlgorithm: - url: http://150.158.199.92:58910/gateway/api/user/battery/algorithm/json - clientId: e488bac5f70b496fa2d82065089e5f81 -chargeAlgorithm2pdf: - url: https://wx.btiger.net/jeecg-boot - getTaskIdUrl: /api/docking/api/evaluate - getPdfLinkUrl: /api/docking/report/pdf/ +#chargeAlgorithm: +# url: http://150.158.199.92:58910/gateway/api/user/battery/algorithm/json +# clientId: e488bac5f70b496fa2d82065089e5f81 +#chargeAlgorithm2pdf: +# url: https://wx.btiger.net/jeecg-boot +# getTaskIdUrl: /api/docking/api/evaluate +# getPdfLinkUrl: /api/docking/report/pdf/ +# token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== + +batteryChargeReport: + webDomainPrefix: https://wx.btiger.net/jeecg-boot + getTaskIdApi: /api/docking/api/evaluate + apiPrefix: /api/docking/report/ token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== # dubbo配置 diff --git a/jsowell-admin/src/main/resources/application-prd.yml b/jsowell-admin/src/main/resources/application-prd.yml index 2925f5cc7..4ded886b9 100644 --- a/jsowell-admin/src/main/resources/application-prd.yml +++ b/jsowell-admin/src/main/resources/application-prd.yml @@ -244,13 +244,19 @@ parking: orgId: DCWYPROD20250210 # 充电算法平台配置 -chargeAlgorithm: - url: http://150.158.199.92:58910/gateway/api/user/battery/algorithm/json - clientId: e488bac5f70b496fa2d82065089e5f81 -chargeAlgorithm2pdf: - url: https://wx.btiger.net/jeecg-boot - getTaskIdUrl: /api/docking/api/evaluate - getPdfLinkUrl: /api/docking/report/pdf/ +#chargeAlgorithm: +# url: http://150.158.199.92:58910/gateway/api/user/battery/algorithm/json +# clientId: e488bac5f70b496fa2d82065089e5f81 +#chargeAlgorithm2pdf: +# url: https://wx.btiger.net/jeecg-boot +# getTaskIdUrl: /api/docking/api/evaluate +# getPdfLinkUrl: /api/docking/report/pdf/ +# token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== + +batteryChargeReport: + webDomainPrefix: https://wx.btiger.net/jeecg-boot + getTaskIdApi: /api/docking/api/evaluate + apiPrefix: /api/docking/report/ token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== # dubbo配置 diff --git a/jsowell-admin/src/main/resources/application-pre.yml b/jsowell-admin/src/main/resources/application-pre.yml index 310e5a8d1..54536d565 100644 --- a/jsowell-admin/src/main/resources/application-pre.yml +++ b/jsowell-admin/src/main/resources/application-pre.yml @@ -249,13 +249,19 @@ parking: orgId: BTTEST01 # 充电算法平台配置 -chargeAlgorithm: - url: http://150.158.199.92:58910/gateway/api/user/battery/algorithm/json - clientId: e488bac5f70b496fa2d82065089e5f81 -chargeAlgorithm2pdf: - url: https://wx.btiger.net/jeecg-boot - getTaskIdUrl: /api/docking/api/evaluate - getPdfLinkUrl: /api/docking/report/pdf/ +#chargeAlgorithm: +# url: http://150.158.199.92:58910/gateway/api/user/battery/algorithm/json +# clientId: e488bac5f70b496fa2d82065089e5f81 +#chargeAlgorithm2pdf: +# url: https://wx.btiger.net/jeecg-boot +# getTaskIdUrl: /api/docking/api/evaluate +# getPdfLinkUrl: /api/docking/report/pdf/ +# token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== + +batteryChargeReport: + webDomainPrefix: https://wx.btiger.net/jeecg-boot + getTaskIdApi: /api/docking/api/evaluate + apiPrefix: /api/docking/report/ token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== # dubbo配置 diff --git a/jsowell-admin/src/main/resources/application-sit.yml b/jsowell-admin/src/main/resources/application-sit.yml index b7767686a..2825f546b 100644 --- a/jsowell-admin/src/main/resources/application-sit.yml +++ b/jsowell-admin/src/main/resources/application-sit.yml @@ -247,9 +247,15 @@ parking: orgId: BTTEST01 # 充电算法平台配置 -chargeAlgorithm: - url: http://150.158.199.92:58910/gateway/api/user/battery/algorithm/json - clientId: e488bac5f70b496fa2d82065089e5f81 +#chargeAlgorithm: +# url: http://150.158.199.92:58910/gateway/api/user/battery/algorithm/json +# clientId: e488bac5f70b496fa2d82065089e5f81 + +batteryChargeReport: + webDomainPrefix: https://wx.btiger.net/jeecg-boot + getTaskIdApi: /api/docking/api/evaluate + apiPrefix: /api/docking/report/ + token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== # dubbo配置 dubbo: diff --git a/jsowell-admin/src/main/resources/application.yml b/jsowell-admin/src/main/resources/application.yml index 8eb9c1fd3..06f4ea47f 100644 --- a/jsowell-admin/src/main/resources/application.yml +++ b/jsowell-admin/src/main/resources/application.yml @@ -144,12 +144,18 @@ wulian: WuLianSimRenew: api.v2.order.renew # 充电算法平台配置 -chargeAlgorithm: - url: http://150.158.199.92:58910/gateway/api/user/battery/algorithm/json - clientId: e488bac5f70b496fa2d82065089e5f81 -chargeAlgorithm2pdf: - getTaskIdUrl: /api/docking/api/evaluate - getPdfLinkUrl: /api/docking/report/pdf/ +#chargeAlgorithm: +# url: http://150.158.199.92:58910/gateway/api/user/battery/algorithm/json +# clientId: e488bac5f70b496fa2d82065089e5f81 +#chargeAlgorithm2pdf: +# getTaskIdUrl: /api/docking/api/evaluate +# getPdfLinkUrl: /api/docking/report/pdf/ +# token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== + +batteryChargeReport: + webDomainPrefix: https://wx.btiger.net/jeecg-boot + getTaskIdApi: /api/docking/api/evaluate + apiPrefix: /api/docking/report/ token: MTc0NzcyMjgwMzg0NC1xNmFucG96cHR4aQ== # sms4j diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/domain/BatteryChargeReportData.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/domain/BatteryChargeReportData.java new file mode 100644 index 000000000..7db1a8735 --- /dev/null +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/domain/BatteryChargeReportData.java @@ -0,0 +1,102 @@ +package com.jsowell.thirdparty.platform.domain; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 电池充电报告Data + * + * @author Lemon + * @Date 2025/9/10 14:29:28 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class BatteryChargeReportData { + private String mfrID; + private String siteName; + private String siteAddress; + private String siteLongitude; + private String siteLatitude; + private String businessHours; + private String serviceHotline; + private String businessStatus; + private Integer sitePileNumber; + private Integer siteGunNumber; + private String phone; + private String siteCode; + private String pileCode; + private String gunNo; + private String readBeforeCharge; + + private Integer doorStatus; + + private Integer bmsChargeMode; + + + private String vin; + private String batteryType; + private String nominalEnergy; + private String ratedCapacity; + private String ratedVoltage; + private String maxAllowTemp; + private Integer initSoc; + private String orderCode; + private String beginTime; + private Integer totalChargeTime; + private Integer remainChargeTime; + private String totalCharge; + private String alarmCode; + private String bmsVersion; + + @JSONField(name = "data") + private List chargeData; + + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + public static class ChargeData{ + private String dcv; + private String dca; + private String measuringChargeVoltage; + private Integer bmsVoltageFault; + private String gunTemp; + private String singleMaxAllowVoltage; + private String beforeChargeTotalVoltage; + private String readCurrentCharge; + private String singleMinVoltage; + private String bmsDemandElectricity; + private String chargePower; + private String maxAllowTotalVoltage; + private String bmsDemandVoltage; + private String maxAllowElectricity; + private String measuringChargeElectricity; + private String singleMaxVoltage; + private String singleMaxTemp; + private String singleMinTemp; + private String reportTime; + private Integer currentSoc; + private Integer socStatus; + private Integer maxTempPointNum; + private Integer minTempPointNum; + private Integer maxSingleVoltageNum; + private Integer maxSingleVoltageGroupNum; + private Integer singleVoltageStatus; + private String batteryInsulation; + private Integer outputConnectStatus; + private Integer bmsConnectError; + private Integer bmsVoltageError; + private Integer bmsInsulationError; + private Integer bmsOverTempError; + private Integer bmsHighVoltageError; + private Integer bmsElectricityOverFault; + private Integer bmsBatteryOverTempError; + } +} diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/BatteryChargeReportDTO.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/BatteryChargeReportDTO.java new file mode 100644 index 000000000..0aaec2143 --- /dev/null +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/dto/BatteryChargeReportDTO.java @@ -0,0 +1,26 @@ +package com.jsowell.thirdparty.platform.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 电池报告DTO + * + * @author Lemon + * @Date 2025/9/11 10:44:48 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class BatteryChargeReportDTO { + private String orderCode; + + /** + * 报告类型 + * 1-web; 2-pdf + */ + private String reportType; +} diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java new file mode 100644 index 000000000..0023ce757 --- /dev/null +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/BatteryChargeReportService.java @@ -0,0 +1,381 @@ +package com.jsowell.thirdparty.platform.service.impl; + +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson2.JSON; +import com.jsowell.common.constant.CacheConstants; +import com.jsowell.common.constant.Constants; +import com.jsowell.common.core.domain.ykc.*; +import com.jsowell.common.core.redis.RedisCache; +import com.jsowell.common.util.DateUtils; +import com.jsowell.common.util.StringUtils; +import com.jsowell.pile.service.OrderBasicInfoService; +import com.jsowell.pile.service.PileBasicInfoService; +import com.jsowell.pile.service.PileConnectorInfoService; +import com.jsowell.pile.service.PileStationInfoService; +import com.jsowell.pile.thirdparty.ParameterConfigData; +import com.jsowell.pile.vo.uniapp.customer.OrderVO; +import com.jsowell.pile.vo.web.PileConnectorInfoVO; +import com.jsowell.pile.vo.web.PileDetailVO; +import com.jsowell.pile.vo.web.PileStationVO; +import com.jsowell.thirdparty.platform.domain.BatteryChargeReportData; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 电池充电报告Service + * + * @author Lemon + * @Date 2025/9/10 13:42:28 + */ +@Service +public class BatteryChargeReportService { + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + + @Value("${batteryChargeReport.webDomainPrefix}") + private String webDomainPrefix; + + @Value("${batteryChargeReport.getTaskIdApi}") + private String getTaskIdApi; + + @Value("${batteryChargeReport.apiPrefix}") + private String apiPrefix; + + @Value("${batteryChargeReport.token}") + private String token; + + @Autowired + private RedisCache redisCache; + + @Autowired + private OrderBasicInfoService orderBasicInfoService; + + @Autowired + private PileBasicInfoService pileBasicInfoService; + + @Autowired + private PileConnectorInfoService pileConnectorInfoService; + + @Autowired + private PileStationInfoService pileStationInfoService; + + /** + * 统一发送充电电池数据 + * + * @param orderCode + */ + public String pushChargeData(String orderCode, String reportType) { + // 根据订单号查询订单信息 + OrderVO orderVO = orderBasicInfoService.getChargeOrderInfoByOrderCode(orderCode); + if (orderVO == null) { + return "订单信息为空"; + } + // 先判断直流桩还是交流桩,如果是交流桩就不进行计算 + PileDetailVO pileDetailVO = pileBasicInfoService.selectPileDetailByPileSn(orderVO.getPileSn()); + if (StringUtils.equals(Constants.TWO, pileDetailVO.getChargePortType())) { + log.info("订单:{} 为交流桩订单,不进行充电算法计算", orderCode); + return "不进行计算"; + } + + // 查询站点信息 + PileStationVO stationVO = pileStationInfoService.getStationInfo(orderVO.getStationId()); + + // 获取各项数据 + Map map = getDatasByOrderVO(orderVO); + String taskId = pushInfoGetTaskId(map, stationVO, orderVO); + + // 根据 taskId 获取链接 + // 默认 web 端 url + String apiUrl = webDomainPrefix + apiPrefix + "web/" + taskId; + if (StringUtils.equals(Constants.TWO, reportType)) { + // 2- pdf 端 + apiUrl = webDomainPrefix + apiPrefix + "pdf/" + taskId; + } + // 发送请求 + String result = HttpRequest.get(apiUrl).execute().body(); + log.info("发送获取报告result:{}", result); + + return result; + } + + public static void main(String[] args) { + String taskId = "8b8c2fed952f41d39eb583d0021c9908"; + String url = "https://wx.btiger.net/jeecg-boot" + "/api/docking/report/" + "web/" + taskId; + String result = HttpRequest.get(url).execute().body(); + + System.out.println(result); + } + + /** + * 推送信息获取taskId + * + * @param map + * @param stationVO + * @param orderVO + * @return + */ + private String pushInfoGetTaskId(Map map, PileStationVO stationVO, OrderVO orderVO) { + ChargingHandshakeData chargingHandshakeData = (ChargingHandshakeData) map.get("chargingHandshakeData"); // 0X15 + ParameterConfigData parameterConfigData = (ParameterConfigData) map.get("parameterConfigData"); // 0X17 + TransactionRecordsData transactionRecordsData = (TransactionRecordsData) map.get("transactionRecordsData"); // 0x3b + List chargerOutputInfoList = (List) map.get("chargerOutputInfoList"); // 0x23List + + BMSDemandAndChargerOutputData bmsDemandAndChargerOutputData = chargerOutputInfoList.get(0); + // 计算充电时长 + long chargingTime = DateUtils.intervalTime(orderVO.getStartTime(), orderVO.getEndTime()); + // 查询枪口、桩数量 + List pileConnectorInfoVOS = pileConnectorInfoService.selectConnectorListByStationId(Long.parseLong(stationVO.getId())); + if (CollectionUtils.isEmpty(pileConnectorInfoVOS)) { + return null; + } + // 将桩号进行去重汇总 + // Set strings = pileConnectorInfoVOS.stream() + // .collect(Collectors.toMap( + // PileConnectorInfoVO::getPileSn, + // Function.identity(), + // (x1, x2) -> x1 + // )).keySet(); + + Set snList = pileConnectorInfoVOS.stream() + .map(PileConnectorInfoVO::getPileSn) + .collect(Collectors.toSet()); + + BatteryChargeReportData data = BatteryChargeReportData.builder() + .mfrID("") + .siteName(stationVO.getStationName()) + .siteAddress(stationVO.getAddress()) + .siteLongitude(stationVO.getStationLng()) + .siteLatitude(stationVO.getStationLat()) + .businessHours(stationVO.getBusinessHours()) + .serviceHotline(stationVO.getStationTel()) + .businessStatus(Constants.ZERO) // 营业状态 0-正常; 1-停运 + .sitePileNumber(snList.size()) // 桩数量 + .siteGunNumber(pileConnectorInfoVOS.size()) + .phone("") // 用户手机号码 + .siteCode(stationVO.getId()) + .pileCode(orderVO.getPileSn()) + .gunNo(orderVO.getConnectorCode()) + .readBeforeCharge(transactionRecordsData.getAmmeterTotalStart()) + .doorStatus(Constants.zero) + .bmsChargeMode(Integer.parseInt(bmsDemandAndChargerOutputData.getBmsChargingModel())) + .vin(chargingHandshakeData.getVinCode()) + .batteryType(chargingHandshakeData.getBmsBatteryType()) + .nominalEnergy(new BigDecimal(parameterConfigData.getBmsSumEnergy()).toBigInteger().toString()) + .ratedCapacity(new BigDecimal(parameterConfigData.getBmsSumEnergy()).toBigInteger().toString()) + .ratedVoltage(chargingHandshakeData.getBmsBatteryVoltage()) + .maxAllowTemp(parameterConfigData.getBmsMaxTemperature()) + .initSoc(new BigDecimal(orderVO.getStartSoc()).intValue()) + .orderCode(orderVO.getOrderCode()) + .beginTime(orderVO.getStartTime()) + .totalChargeTime(Math.toIntExact(chargingTime)) + .remainChargeTime(Constants.zero) + .totalCharge(orderVO.getTotalPower()) + .alarmCode(Constants.ZERO) + .bmsVersion("V1.1") + + .build(); + + List chargingDetailInfos = transformData(map); + + chargingDetailInfos.stream() + .filter(info -> info.getCurrentSoc() > 100) // 只处理 currentSoc > 100 的元素 + .forEach(info -> info.setCurrentSoc(100)); + Collections.reverse(chargingDetailInfos); + + data.setChargeData(chargingDetailInfos); + + // 发送请求 + String postUrl = webDomainPrefix + getTaskIdApi; + String response = HttpRequest.post(postUrl).header("token", token).body(JSON.toJSONString(data)).execute().body(); + log.info("获取taskId发送请求收到回复 response:{}", response); + + // 将返回结果转化为json + Map resultMap = (Map) JSON.parse(response); + String resultCode = String.valueOf(resultMap.get("code")); + String taskId = ""; + if (StringUtils.equals(Constants.TWO_HUNDRED, resultCode)) { + // 获取 taskId + Map result = (Map)resultMap.get("result"); + taskId = String.valueOf(result.get("taskId")); + log.info("taskId:{}", taskId); + } + return taskId; + } + + + /** + * 根据订单号查询各项充电数据 + * + * @param orderVO + * @return + */ + private Map getDatasByOrderVO(OrderVO orderVO) { + Map map = new LinkedHashMap<>(); + // 0x15数据Data + ChargingHandshakeData chargingHandshakeData = null; + // 0x17数据data + ParameterConfigData parameterConfigData = null; + // 0x3b数据data + TransactionRecordsData transactionRecordsData = null; + // 0x23数据data + BMSDemandAndChargerOutputData bmsDemandAndChargerOutputData = null; + + String orderCode = orderVO.getOrderCode(); + String transactionCode = orderVO.getTransactionCode(); + + // 获取0x15 + String chargingHandshakeKey = CacheConstants.CHARGING_HANDSHAKE_DATA_BY_TRANSACTION_CODE + transactionCode; + chargingHandshakeData = redisCache.getCacheObject(chargingHandshakeKey); + if (chargingHandshakeData == null) { + log.info("orderCode:{}, 0x15信息为空", orderCode); + } + + // 获取0x17 + String redisKey = CacheConstants.PARAMETER_CONFIGURATION_BY_TRANSACTION_CODE + transactionCode; + parameterConfigData = redisCache.getCacheObject(redisKey); + if (parameterConfigData == null) { + log.info("orderCode:{}, 0x17信息为空", orderCode); + } + + // 获取0x3b缓存信息 + String transactionDataKey = CacheConstants.TRANSACTION_RECORD_BY_TRANSACTION_CODE + transactionCode; + transactionRecordsData = redisCache.getCacheObject(transactionDataKey); + + // 获取最后一条0x23 + List chargerOutputInfoList = pileBasicInfoService.getBMSDemandAndChargerOutputInfoList(transactionCode); + if (CollectionUtils.isEmpty(chargerOutputInfoList)) { + log.info("orderCode:{}, 0x23信息为空", orderCode); + } + + // 获取0x25 + List bmsChargeInfoList = pileBasicInfoService.getBMSChargeInfoList(transactionCode); + // 0x13 + List chargingRealTimeDataList = orderBasicInfoService.getChargingRealTimeData(transactionCode); + + Map> collect_0x25 = new LinkedHashMap<>(); + Map> collect_0x13 = new LinkedHashMap<>(); + if (bmsChargeInfoList != null) { + // 按照dateTime分组(将key设置为 yyyy-MM-dd HH:mm:00 格式) + collect_0x25 = bmsChargeInfoList.stream() + .map(x -> { + x.setDateTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:00", DateUtils.parseDate(x.getDateTime()))); + return x; + }) + .collect(Collectors.groupingBy(BMSChargeInfoData::getDateTime)); + + } + if (chargingRealTimeDataList != null) { + collect_0x13 = chargingRealTimeDataList.stream() + .map(x -> { + x.setDateTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:00", DateUtils.parseDate(x.getDateTime()))); + return x; + }) + .collect(Collectors.groupingBy(RealTimeMonitorData::getDateTime)); + } + + map.put("chargingHandshakeData", chargingHandshakeData); // 0x15 + map.put("parameterConfigData", parameterConfigData); // 0x17 + map.put("transactionRecordsData", transactionRecordsData); // 0x3b + map.put("chargerOutputInfoList", chargerOutputInfoList); // 0x23List + map.put("collect_0x25", collect_0x25); + map.put("collect_0x13", collect_0x13); + + return map; + } + + /** + * 封装充电数据 Datas + * @param map + * @return + */ + private List transformData(Map map) { + List resultList = new ArrayList<>(); + BatteryChargeReportData.ChargeData chargeData; + + ParameterConfigData parameterConfigData = (ParameterConfigData) map.get("parameterConfigData"); // 0X17 + TransactionRecordsData transactionRecordsData = (TransactionRecordsData) map.get("transactionRecordsData"); // 0x3b + List chargerOutputInfoList = (List) map.get("chargerOutputInfoList"); // 0x23List + Map> collect_0x25 = (Map>) map.get("collect_0x25"); + Map> collect_0x13 = (Map>) map.get("collect_0x13"); + + if (CollectionUtils.isEmpty(chargerOutputInfoList)) { + return new ArrayList<>(); + } + + for (BMSDemandAndChargerOutputData realTimeData_0x23 : chargerOutputInfoList) { + chargeData = new BatteryChargeReportData.ChargeData(); + String dateStr = DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:00", DateUtils.parseDate(realTimeData_0x23.getDateTime())); + + // 获取该时间的0x13数据 + List RealTimeDataList = collect_0x13.get(dateStr); + if (RealTimeDataList != null) { + RealTimeMonitorData realTimeData_0x13 = RealTimeDataList.get(0); + + chargeData.setGunTemp(realTimeData_0x13.getGunLineTemperature()); + chargeData.setCurrentSoc(new BigDecimal(realTimeData_0x13.getSOC()).intValue()); + chargeData.setSocStatus(new BigDecimal(realTimeData_0x13.getSOC()).intValue()); + } else { + chargeData.setGunTemp("0"); + chargeData.setCurrentSoc(new BigDecimal(realTimeData_0x23.getSoc()).intValue()); + chargeData.setSocStatus(new BigDecimal(realTimeData_0x23.getSoc()).intValue()); + } + chargeData.setDcv(new BigDecimal(realTimeData_0x23.getPileVoltageOutput()).toBigInteger().toString()); + chargeData.setDca(new BigDecimal(realTimeData_0x23.getPileCurrentOutput()).toBigInteger().toString()); + chargeData.setMeasuringChargeVoltage(new BigDecimal(realTimeData_0x23.getBmsChargingVoltage()).toBigInteger().toString()); + chargeData.setBmsVoltageFault(Constants.zero); + chargeData.setSingleMaxAllowVoltage(new BigDecimal(parameterConfigData.getBmsMaxVoltage()).setScale(1, RoundingMode.HALF_DOWN).toString()); + chargeData.setBeforeChargeTotalVoltage(new BigDecimal(parameterConfigData.getBmsRealTimeVoltage()).toBigInteger().toString()); + chargeData.setReadCurrentCharge(transactionRecordsData.getAmmeterTotalEnd()); + chargeData.setSingleMinVoltage(new BigDecimal(realTimeData_0x23.getBmsMaxVoltageAndGroup()).setScale(1, RoundingMode.HALF_DOWN).toString()); + chargeData.setBmsDemandElectricity(new BigDecimal(realTimeData_0x23.getBmsCurrentDemand()).toBigInteger().toString()); + chargeData.setChargePower(realTimeData_0x23.getOutputPower()); + chargeData.setMaxAllowTotalVoltage(new BigDecimal(parameterConfigData.getBmsMaxChargingVoltage()).toBigInteger().toString()); + chargeData.setBmsDemandVoltage(new BigDecimal(realTimeData_0x23.getBmsVoltageDemand()).toBigInteger().toString()); + chargeData.setMaxAllowElectricity(new BigDecimal(parameterConfigData.getBmsMaxCurrent()).toBigInteger().toString()); + chargeData.setMeasuringChargeElectricity(new BigDecimal(realTimeData_0x23.getBmsChargingCurrent()).toBigInteger().toString()); + chargeData.setSingleMaxVoltage(new BigDecimal(realTimeData_0x23.getBmsMaxVoltageAndGroup()).setScale(1, RoundingMode.HALF_DOWN).toString()); + chargeData.setReportTime(realTimeData_0x23.getDateTime().replaceAll("[^0-9]", "")); + chargeData.setSingleVoltageStatus(Constants.zero); + chargeData.setOutputConnectStatus(Constants.zero); + chargeData.setBmsConnectError(Constants.zero); + chargeData.setBmsVoltageError(Constants.zero); + chargeData.setBmsInsulationError(Constants.zero); + chargeData.setBmsOverTempError(Constants.zero); + chargeData.setBmsHighVoltageError(Constants.zero); + chargeData.setBmsElectricityOverFault(Constants.zero); + chargeData.setBmsBatteryOverTempError(Constants.zero); + + + // 获取该时间的0x25数据 + List bmsChargeInfoDataList = collect_0x25.get(dateStr); + + if (bmsChargeInfoDataList != null) { + BMSChargeInfoData realTimeData_0x25 = bmsChargeInfoDataList.get(0); + + chargeData.setSingleMaxTemp(realTimeData_0x25.getBmsMaxBatteryTemperature()); + chargeData.setSingleMinTemp(realTimeData_0x25.getMinBatteryTemperature()); + chargeData.setMaxSingleVoltageNum(Integer.parseInt(realTimeData_0x25.getBmsMaxVoltageNum())); + chargeData.setMaxSingleVoltageGroupNum(Integer.parseInt(realTimeData_0x23.getBmsMaxVoltageAndGroup().replace(".", ""))); + chargeData.setMaxTempPointNum(Integer.parseInt(realTimeData_0x25.getMaxTemperatureDetectionNum())); + chargeData.setMinTempPointNum(Integer.parseInt(realTimeData_0x25.getMinTemperatureDetectionNum())); + chargeData.setBatteryInsulation(realTimeData_0x25.getBmsBatteryInsulationStatus()); + + // detailInfo.setVentTemp(); + // detailInfo.setEnvironmentTemp(); + } + resultList.add(chargeData); + } + + return resultList; + } +} diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChargeAlgorithmService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChargeAlgorithmService.java index da94c9a72..5139165a6 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChargeAlgorithmService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/platform/service/impl/ChargeAlgorithmService.java @@ -31,31 +31,32 @@ import java.util.*; import java.util.stream.Collectors; /** - * 订单算法平台Service + * 订单算法平台Service (已过时) * * @author Lemon * @Date 2024/11/19 13:49:45 */ @Service +@Deprecated public class ChargeAlgorithmService { - @Value("${chargeAlgorithm.url}") - private String url; - - @Value("${chargeAlgorithm.clientId}") - private String clientId; - - @Value("${chargeAlgorithm2pdf.url}") - private String send2PdfUrl; - - @Value("${chargeAlgorithm2pdf.getTaskIdUrl}") - private String getTaskIdUrl; - - @Value("${chargeAlgorithm2pdf.getPdfLinkUrl}") - private String getPdfLinkUrl; - - @Value("${chargeAlgorithm2pdf.token}") - private String token; + // @Value("${chargeAlgorithm.url}") + // private String url; + // + // @Value("${chargeAlgorithm.clientId}") + // private String clientId; + // + // @Value("${chargeAlgorithm2pdf.url}") + // private String send2PdfUrl; + // + // @Value("${chargeAlgorithm2pdf.getTaskIdUrl}") + // private String getTaskIdUrl; + // + // @Value("${chargeAlgorithm2pdf.getPdfLinkUrl}") + // private String getPdfLinkUrl; + // + // @Value("${chargeAlgorithm2pdf.token}") + // private String token; @Autowired private OrderBasicInfoService orderBasicInfoService; @@ -193,7 +194,9 @@ public class ChargeAlgorithmService { data.setChargeData(chargingDetailInfos); // 发送请求 - String postUrl = send2PdfUrl + getTaskIdUrl; + // String postUrl = send2PdfUrl + getTaskIdUrl; + String postUrl = ""; + String token = ""; String response = HttpRequest.post(postUrl).header("token", token).body(JSON.toJSONString(data)).execute().body(); log.info("获取taskId发送请求收到回复 response:{}", response); @@ -291,7 +294,8 @@ public class ChargeAlgorithmService { log.info("web页面发送请求前封装数据 data:{}", JSON.toJSONString(jsonObject)); // 发送请求 - String response = HttpRequest.post(url).header("clientId", clientId).body(JSON.toJSONString(jsonObject)).execute().body(); + // String response = HttpRequest.post(url).header("clientId", clientId).body(JSON.toJSONString(jsonObject)).execute().body(); + String response = ""; log.info("web页面发送请求收到回复 response:{}", response); // 将返回结果转化为json @@ -315,7 +319,8 @@ public class ChargeAlgorithmService { * @return */ private String getPDFDownloadUrlByTaskId(String taskId) { - String postUrl = send2PdfUrl + getPdfLinkUrl + taskId; + // String postUrl = send2PdfUrl + getPdfLinkUrl + taskId; + String postUrl = ""; // 发送请求 String result = HttpRequest.get(postUrl).execute().body(); // 将返回结果转化为json