package com.ruoyi.other.emind.service;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.ruoyi.other.emind.domain.EmindEnergyChainDetail;
|
import com.ruoyi.other.emind.mapper.EmindEnergyChainDetailMapper;
|
import com.ruoyi.other.udan.model.UdanEmsDeviceState;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.time.Clock;
|
import java.time.LocalDateTime;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Objects;
|
|
/** 能量链详情服务。 */
|
@Service
|
public class EmindEnergyChainDetailService {
|
private final EmindEnergyChainDetailMapper mapper;
|
private final Clock clock;
|
|
@Autowired
|
public EmindEnergyChainDetailService(EmindEnergyChainDetailMapper mapper) {
|
this(mapper, Clock.systemDefaultZone());
|
}
|
|
EmindEnergyChainDetailService(EmindEnergyChainDetailMapper mapper, Clock clock) {
|
this.mapper = mapper;
|
this.clock = clock;
|
}
|
|
/** 新增能量链详情。 */
|
@Transactional(rollbackFor = Exception.class)
|
public EmindEnergyChainDetail add(EmindEnergyChainDetail input) {
|
LocalDateTime now = LocalDateTime.now(clock);
|
EmindEnergyChainDetail detail = new EmindEnergyChainDetail();
|
detail.setPlatformName(input.getPlatformName());
|
detail.setStationId(input.getStationId());
|
detail.setStationCode(input.getStationCode());
|
detail.setStationType(input.getStationType());
|
detail.setDetail(input.getDetail());
|
detail.setDataSource(input.getDataSource());
|
detail.setDelFlag(0);
|
detail.setSyncTime(now);
|
detail.setCreateTime(now);
|
detail.setUpdateTime(now);
|
mapper.insert(detail);
|
return detail;
|
}
|
|
/** 根据设备类型和设备编号查询有效的能量链详情。 */
|
public List<EmindEnergyChainDetail> getByStationTypes(List<String> stationTypes) {
|
return mapper.selectList(new LambdaQueryWrapper<EmindEnergyChainDetail>()
|
.eq(EmindEnergyChainDetail::getDelFlag, 0)
|
.in(EmindEnergyChainDetail::getStationType, stationTypes));
|
}
|
|
@Transactional
|
public void saveAll(UdanEmsDeviceState udanEmsDeviceState) {
|
List<EmindEnergyChainDetail> detailList = new ArrayList<>();
|
// 保存BMS
|
if(Objects.nonNull(udanEmsDeviceState.getTmsState())) {
|
EmindEnergyChainDetail detail = new EmindEnergyChainDetail();
|
detail.setPlatformName("欧力特");
|
detail.setDataSource(2);
|
detail.setStationCode(udanEmsDeviceState.getEmsSystemId());
|
detail.setDetail(JSON.toJSONString(udanEmsDeviceState.getTmsState()));
|
detail.setStationId(udanEmsDeviceState.getTmsState().getDeviceId());
|
detail.setStationType("TMS");
|
detailList.add(detail);
|
}
|
if(Objects.nonNull(udanEmsDeviceState.getPcsState())) {
|
EmindEnergyChainDetail detail = new EmindEnergyChainDetail();
|
detail.setPlatformName("欧力特");
|
detail.setDataSource(2);
|
detail.setStationCode(udanEmsDeviceState.getEmsSystemId());
|
detail.setDetail(JSON.toJSONString(udanEmsDeviceState.getPcsState()));
|
detail.setStationId(udanEmsDeviceState.getTmsState().getDeviceId());
|
detail.setStationType("PCS");
|
detailList.add(detail);
|
}
|
if(Objects.nonNull(udanEmsDeviceState.getElectricMeterState())) {
|
EmindEnergyChainDetail detail = new EmindEnergyChainDetail();
|
detail.setPlatformName("欧力特");
|
detail.setDataSource(2);
|
detail.setStationCode(udanEmsDeviceState.getEmsSystemId());
|
detail.setDetail(JSON.toJSONString(udanEmsDeviceState.getElectricMeterState()));
|
detail.setStationId(udanEmsDeviceState.getTmsState().getDeviceId());
|
detail.setStationType("电表");
|
detailList.add(detail);
|
}
|
if(Objects.nonNull(udanEmsDeviceState.getBatteryStackState())) {
|
EmindEnergyChainDetail detail = new EmindEnergyChainDetail();
|
detail.setPlatformName("欧力特");
|
detail.setDataSource(2);
|
detail.setStationCode(udanEmsDeviceState.getEmsSystemId());
|
detail.setDetail(JSON.toJSONString(udanEmsDeviceState.getBatteryStackState()));
|
detail.setStationId(udanEmsDeviceState.getTmsState().getDeviceId());
|
detail.setStationType("BMS");
|
detailList.add(detail);
|
}
|
detailList.forEach(d -> {
|
mapper.delete(new QueryWrapper<EmindEnergyChainDetail>().eq("station_code", d.getStationCode()).eq("station_type", d.getStationType()));
|
add(d);
|
});
|
|
}
|
}
|