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 getByStationTypes(List stationTypes) { return mapper.selectList(new LambdaQueryWrapper() .eq(EmindEnergyChainDetail::getDelFlag, 0) .in(EmindEnergyChainDetail::getStationType, stationTypes)); } @Transactional public void saveAll(UdanEmsDeviceState udanEmsDeviceState) { List 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); } if(Objects.nonNull(udanEmsDeviceState.getPeripheralDeviceState())) { EmindEnergyChainDetail detail = new EmindEnergyChainDetail(); detail.setPlatformName("欧力特"); detail.setDataSource(2); detail.setStationCode(udanEmsDeviceState.getEmsSystemId()); detail.setDetail(JSON.toJSONString(udanEmsDeviceState.getPeripheralDeviceState())); detail.setStationId(udanEmsDeviceState.getTmsState().getDeviceId()); detail.setStationType("外设"); detailList.add(detail); } detailList.forEach(d -> { mapper.delete(new QueryWrapper().eq("station_code", d.getStationCode()).eq("station_type", d.getStationType())); add(d); }); } }