ThirdPartyStationDataServiceImpl.java 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. package com.zsElectric.boot.charging.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.fasterxml.jackson.core.JsonProcessingException;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import com.zsElectric.boot.charging.entity.*;
  6. import com.zsElectric.boot.charging.mapper.ThirdPartyConnectorInfoMapper;
  7. import com.zsElectric.boot.charging.mapper.ThirdPartyEquipmentInfoMapper;
  8. import com.zsElectric.boot.charging.mapper.ThirdPartyStationInfoMapper;
  9. import com.zsElectric.boot.charging.service.ThirdPartyStationDataService;
  10. import com.zsElectric.boot.charging.vo.QueryStationsInfoVO;
  11. import lombok.RequiredArgsConstructor;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import org.springframework.util.CollectionUtils;
  16. import java.math.BigDecimal;
  17. import java.util.List;
  18. /**
  19. * 第三方充电站数据存储服务实现
  20. *
  21. * @author system
  22. * @since 2025-12-11
  23. */
  24. @Slf4j
  25. @Service
  26. @RequiredArgsConstructor
  27. public class ThirdPartyStationDataServiceImpl implements ThirdPartyStationDataService {
  28. private final ThirdPartyStationInfoMapper stationInfoMapper;
  29. private final ThirdPartyEquipmentInfoMapper equipmentInfoMapper;
  30. private final ThirdPartyConnectorInfoMapper connectorInfoMapper;
  31. private final ObjectMapper objectMapper;
  32. @Override
  33. @Transactional(rollbackFor = Exception.class)
  34. public void saveStationsInfo(QueryStationsInfoVO queryStationsInfoVO) {
  35. if (queryStationsInfoVO == null || CollectionUtils.isEmpty(queryStationsInfoVO.getStationInfos())) {
  36. log.warn("充电站信息为空,跳过存储");
  37. return;
  38. }
  39. List<StationInfo> stationInfos = queryStationsInfoVO.getStationInfos();
  40. log.info("开始保存充电站信息,总数: {}", stationInfos.size());
  41. for (StationInfo stationInfo : stationInfos) {
  42. try {
  43. // 保存充电站信息
  44. saveStationInfo(stationInfo);
  45. // 保存设备信息
  46. if (!CollectionUtils.isEmpty(stationInfo.getEquipmentInfos())) {
  47. for (EquipmentInfo equipmentInfo : stationInfo.getEquipmentInfos()) {
  48. saveEquipmentInfo(equipmentInfo, stationInfo.getStationID());
  49. // 保存接口信息
  50. if (!CollectionUtils.isEmpty(equipmentInfo.getConnectorInfos())) {
  51. for (ConnectorInfo connectorInfo : equipmentInfo.getConnectorInfos()) {
  52. saveConnectorInfo(connectorInfo, equipmentInfo.getEquipmentID(), stationInfo.getStationID());
  53. }
  54. }
  55. }
  56. }
  57. } catch (Exception e) {
  58. log.error("保存充电站信息失败, stationId: {}", stationInfo.getStationID(), e);
  59. throw new RuntimeException("保存充电站信息失败: " + stationInfo.getStationID(), e);
  60. }
  61. }
  62. log.info("充电站信息保存完成");
  63. }
  64. /**
  65. * 保存充电站信息
  66. */
  67. private void saveStationInfo(StationInfo stationInfo) {
  68. // 查询是否已存在
  69. ThirdPartyStationInfo existingStation = stationInfoMapper.selectOne(
  70. new LambdaQueryWrapper<ThirdPartyStationInfo>()
  71. .eq(ThirdPartyStationInfo::getStationId, stationInfo.getStationID())
  72. );
  73. ThirdPartyStationInfo entity = new ThirdPartyStationInfo();
  74. if (existingStation != null) {
  75. entity.setId(existingStation.getId());
  76. }
  77. // 设置字段值
  78. entity.setStationId(stationInfo.getStationID());
  79. entity.setOperatorId(stationInfo.getOperatorID());
  80. entity.setEquipmentOwnerId(stationInfo.getEquipmentOwnerID());
  81. entity.setStationName(stationInfo.getStationName());
  82. entity.setCountryCode(stationInfo.getCountryCode());
  83. entity.setAreaCode(stationInfo.getAreaCode());
  84. entity.setAddress(stationInfo.getAddress());
  85. entity.setStationTel(stationInfo.getStationTel());
  86. entity.setServiceTel(stationInfo.getServiceTel());
  87. entity.setStationType(stationInfo.getStationType());
  88. entity.setStationStatus(stationInfo.getStationStatus());
  89. entity.setParkNums(stationInfo.getParkNums());
  90. // 处理经纬度
  91. if (stationInfo.getStationLng() != null) {
  92. entity.setStationLng(BigDecimal.valueOf(stationInfo.getStationLng()));
  93. }
  94. if (stationInfo.getStationLat() != null) {
  95. entity.setStationLat(BigDecimal.valueOf(stationInfo.getStationLat()));
  96. }
  97. entity.setSiteGuide(stationInfo.getSiteGuide());
  98. entity.setConstruction(stationInfo.getConstruction());
  99. // 处理图片列表(转JSON)
  100. if (!CollectionUtils.isEmpty(stationInfo.getPictures())) {
  101. try {
  102. entity.setPictures(objectMapper.writeValueAsString(stationInfo.getPictures()));
  103. } catch (JsonProcessingException e) {
  104. log.warn("图片列表转JSON失败", e);
  105. }
  106. }
  107. entity.setBusineHours(stationInfo.getBusineHours());
  108. // 处理费用(字符串转BigDecimal)
  109. if (stationInfo.getElectricityFee() != null) {
  110. try {
  111. entity.setElectricityFee(new BigDecimal(stationInfo.getElectricityFee()));
  112. } catch (NumberFormatException e) {
  113. log.warn("电费转换失败: {}", stationInfo.getElectricityFee(), e);
  114. }
  115. }
  116. if (stationInfo.getServiceFee() != null) {
  117. try {
  118. entity.setServiceFee(new BigDecimal(stationInfo.getServiceFee()));
  119. } catch (NumberFormatException e) {
  120. log.warn("服务费转换失败: {}", stationInfo.getServiceFee(), e);
  121. }
  122. }
  123. entity.setParkFee(stationInfo.getParkFee());
  124. entity.setPayment(stationInfo.getPayment());
  125. entity.setSupportOrder(stationInfo.getSupportOrder());
  126. entity.setRemark(stationInfo.getRemark());
  127. // 插入或更新
  128. if (existingStation == null) {
  129. stationInfoMapper.insert(entity);
  130. } else {
  131. stationInfoMapper.updateById(entity);
  132. }
  133. }
  134. /**
  135. * 保存充电设备信息
  136. */
  137. private void saveEquipmentInfo(EquipmentInfo equipmentInfo, String stationId) {
  138. // 查询是否已存在
  139. ThirdPartyEquipmentInfo existingEquipment = equipmentInfoMapper.selectOne(
  140. new LambdaQueryWrapper<ThirdPartyEquipmentInfo>()
  141. .eq(ThirdPartyEquipmentInfo::getEquipmentId, equipmentInfo.getEquipmentID())
  142. );
  143. ThirdPartyEquipmentInfo entity = new ThirdPartyEquipmentInfo();
  144. if (existingEquipment != null) {
  145. entity.setId(existingEquipment.getId());
  146. }
  147. // 设置字段值
  148. entity.setEquipmentId(equipmentInfo.getEquipmentID());
  149. entity.setStationId(stationId);
  150. entity.setManufacturerId(equipmentInfo.getManufacturerID());
  151. entity.setManufacturerName(equipmentInfo.getManufacturerName());
  152. entity.setEquipmentModel(equipmentInfo.getEquipmentModel());
  153. entity.setProductionDate(equipmentInfo.getProductionDate());
  154. entity.setEquipmentType(equipmentInfo.getEquipmentType());
  155. // 处理经纬度
  156. if (equipmentInfo.getEquipmentLng() != null) {
  157. entity.setEquipmentLng(BigDecimal.valueOf(equipmentInfo.getEquipmentLng()));
  158. }
  159. if (equipmentInfo.getEquipmentLat() != null) {
  160. entity.setEquipmentLat(BigDecimal.valueOf(equipmentInfo.getEquipmentLat()));
  161. }
  162. // 处理功率
  163. if (equipmentInfo.getPower() != null) {
  164. entity.setPower(BigDecimal.valueOf(equipmentInfo.getPower()));
  165. }
  166. entity.setEquipmentName(equipmentInfo.getEquipmentName());
  167. // 插入或更新
  168. if (existingEquipment == null) {
  169. equipmentInfoMapper.insert(entity);
  170. } else {
  171. equipmentInfoMapper.updateById(entity);
  172. }
  173. }
  174. /**
  175. * 保存充电接口信息
  176. */
  177. private void saveConnectorInfo(ConnectorInfo connectorInfo, String equipmentId, String stationId) {
  178. // 查询是否已存在
  179. ThirdPartyConnectorInfo existingConnector = connectorInfoMapper.selectOne(
  180. new LambdaQueryWrapper<ThirdPartyConnectorInfo>()
  181. .eq(ThirdPartyConnectorInfo::getConnectorId, connectorInfo.getConnectorID())
  182. );
  183. ThirdPartyConnectorInfo entity = new ThirdPartyConnectorInfo();
  184. if (existingConnector != null) {
  185. entity.setId(existingConnector.getId());
  186. }
  187. // 设置字段值
  188. entity.setConnectorId(connectorInfo.getConnectorID());
  189. entity.setEquipmentId(equipmentId);
  190. entity.setStationId(stationId);
  191. entity.setConnectorName(connectorInfo.getConnectorName());
  192. entity.setConnectorType(connectorInfo.getConnectorType());
  193. entity.setVoltageUpperLimits(connectorInfo.getVoltageUpperLimits());
  194. entity.setVoltageLowerLimits(connectorInfo.getVoltageLowerLimits());
  195. entity.setCurrent(connectorInfo.getCurrent());
  196. // 处理功率
  197. if (connectorInfo.getPower() != null) {
  198. entity.setPower(BigDecimal.valueOf(connectorInfo.getPower()));
  199. }
  200. entity.setParkNo(connectorInfo.getParkNo());
  201. entity.setNationalStandard(connectorInfo.getNationalStandard());
  202. // 插入或更新
  203. if (existingConnector == null) {
  204. connectorInfoMapper.insert(entity);
  205. } else {
  206. connectorInfoMapper.updateById(entity);
  207. }
  208. }
  209. }