package com.iailab.module.data.channel.modbus.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.common.util.object.BeanUtils; import com.iailab.framework.common.util.object.ConvertUtils; import com.iailab.module.data.channel.modbus.dao.ChannelModBusTagDao; import com.iailab.module.data.channel.modbus.dto.ChannelModbusTagDTO; import com.iailab.module.data.channel.modbus.entity.ChannelModBusTagEntity; import com.iailab.module.data.channel.modbus.service.ChannelModbusTagService; import com.iailab.module.data.channel.modbus.vo.ModBusTagImportExcelVO; import com.iailab.module.data.channel.modbus.vo.ModBusTagPageReqVO; import com.iailab.module.data.channel.tag.vo.TagImportRespVO; import com.iailab.module.data.common.enums.CommonConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; import static com.iailab.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.iailab.module.data.enums.ErrorCodeConstants.*; /** * @author lirm * @Description * @createTime 2024年08月27日 */ @Slf4j @Service public class ChannelModbusTagServiceImpl extends ServiceImpl implements ChannelModbusTagService { @Resource private ChannelModBusTagDao channelModBusTagDao; @Value("${iems.upload-dir}") private String uploadDir; @Override public PageResult queryPage(ModBusTagPageReqVO reqVO) { return channelModBusTagDao.selectPage(reqVO); } @Override public ChannelModBusTagEntity info(String id) { return channelModBusTagDao.selectById(id); } @Override public void add(ChannelModBusTagEntity channelModBusTagEntity) { channelModBusTagDao.insert(channelModBusTagEntity); } @Override public void update(ChannelModBusTagEntity channelModBusTagEntity) { channelModBusTagDao.updateById(channelModBusTagEntity); } @Override public void delete(String id) { channelModBusTagDao.deleteById(id); } @Override public List getByDevice(String device) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("device", device); queryWrapper.orderByDesc("create_time"); return channelModBusTagDao.selectList(queryWrapper); } @Override public List selectAll() { List entityList = baseMapper.selectList( null ); return ConvertUtils.sourceToTarget(entityList, ChannelModbusTagDTO.class); } @Override public List listByIds(List ids) { return baseMapper.selectList(new QueryWrapper().in("id", ids)); } @Override public void deleteByDeviceName(String name) { baseMapper.delete(new QueryWrapper().eq("device", name)); } @Override public TagImportRespVO importModBusTagList(List importTags, boolean isUpdateSupport, String device) { // 1.1 参数校验 if (CollUtil.isEmpty(importTags)) { throw exception(TAG_IMPORT_LIST_IS_EMPTY); } // 2. 遍历,逐个创建 or 更新 TagImportRespVO respVO = TagImportRespVO.builder().createTagNames(new ArrayList<>()) .updateTagNames(new ArrayList<>()).failureTagNames(new LinkedHashMap<>()).build(); importTags.forEach(importTag -> { // 判断如果不存在,再进行插入 ChannelModBusTagEntity existTag = channelModBusTagDao.selectOne(new QueryWrapper() .eq("device", device) .eq("tag_name",importTag.getTagName())); if (existTag == null) { ChannelModBusTagEntity channelModBusTagEntity = ConvertUtils.sourceToTarget(importTag, ChannelModBusTagEntity.class); channelModBusTagEntity.setId(UUID.randomUUID().toString()); channelModBusTagEntity.setEnabled(CommonConstant.IS_ENABLE); channelModBusTagEntity.setDevice(device); channelModBusTagEntity.setCreateTime(new Date()); channelModBusTagDao.insert(channelModBusTagEntity); respVO.getCreateTagNames().add(channelModBusTagEntity.getTagName()); return; } // 如果存在,判断是否允许更新 if (!isUpdateSupport) { respVO.getFailureTagNames().put(importTag.getTagName(), TAG_EXISTS.getMsg()); return; } ChannelModBusTagEntity updateTag = BeanUtils.toBean(importTag, ChannelModBusTagEntity.class); updateTag.setId(existTag.getId()); baseMapper.updateById(updateTag); respVO.getUpdateTagNames().add(importTag.getTagName()); }); return respVO; } }