package com.dji.sample.manage.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dji.sample.common.error.CommonErrorEnum; import com.dji.sample.common.model.Pagination; import com.dji.sample.common.model.PaginationData; import com.dji.sample.component.mqtt.model.*; import com.dji.sample.component.mqtt.service.IMessageSenderService; import com.dji.sample.manage.dao.IWorkspaceMapper; import com.dji.sample.manage.model.dto.WorkspaceDTO; import com.dji.sample.manage.model.entity.WorkspaceEntity; import com.dji.sample.manage.model.receiver.OrganizationGetReceiver; import com.dji.sample.manage.service.IWorkspaceService; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.mqtt.support.MqttHeaders; import org.springframework.messaging.MessageHeaders; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.UUID; import java.util.stream.Collectors; @Service @Transactional public class WorkspaceServiceImpl implements IWorkspaceService { @Autowired private IWorkspaceMapper mapper; @Autowired private ObjectMapper objectMapper; @Autowired private IMessageSenderService messageSenderService; @Override public PaginationData selectWorkspace(long page, long pageSize) { Page entityPage = mapper.selectPage( new Page<>(page, pageSize), new QueryWrapper<>()); List list = entityPage.getRecords() .stream() .map(this::entityConvertToDto) .collect(Collectors.toList()); return new PaginationData<>(list, new Pagination(entityPage)); } @Override public Boolean createWorkspace(WorkspaceDTO dto) { dto.setWorkspaceId(UUID.randomUUID().toString()); return mapper.insert(dtoConvertToEntity(dto)) > 0; } @Override public Boolean deleteWorkspaceById(Integer id) { return mapper.deleteById(id) > 0; } @Override public Boolean updateWorkspaceById(WorkspaceDTO dto) { return mapper.updateById(dtoConvertToEntity(dto)) > 0; } @Override public Optional getWorkspaceByWorkspaceId(String workspaceId) { return Optional.ofNullable(entityConvertToDto( mapper.selectOne( new LambdaQueryWrapper() .eq(WorkspaceEntity::getWorkspaceId, workspaceId)))); } @Override public Optional getWorkspaceNameByBindCode(String bindCode) { return Optional.ofNullable(entityConvertToDto( mapper.selectOne(new LambdaQueryWrapper().eq(WorkspaceEntity::getBindCode, bindCode)))); } @Override @ServiceActivator(inputChannel = ChannelName.INBOUND_REQUESTS_AIRPORT_ORGANIZATION_GET, outputChannel = ChannelName.OUTBOUND) public void replyOrganizationGet(CommonTopicReceiver receiver, MessageHeaders headers) { OrganizationGetReceiver organizationGet = objectMapper.convertValue(receiver.getData(), OrganizationGetReceiver.class); CommonTopicResponse.CommonTopicResponseBuilder builder = CommonTopicResponse.builder() .tid(receiver.getTid()) .bid(receiver.getBid()) .method(RequestsMethodEnum.AIRPORT_ORGANIZATION_GET.getMethod()) .timestamp(System.currentTimeMillis()); String topic = headers.get(MqttHeaders.RECEIVED_TOPIC).toString() + TopicConst._REPLY_SUF; if (!StringUtils.hasText(organizationGet.getDeviceBindingCode())) { builder.data(RequestsReply.error(CommonErrorEnum.ILLEGAL_ARGUMENT)); messageSenderService.publish(topic, builder.build()); return; } Optional workspace = this.getWorkspaceNameByBindCode(organizationGet.getDeviceBindingCode()); if (workspace.isEmpty()) { builder.data(RequestsReply.error(CommonErrorEnum.GET_ORGANIZATION_FAILED)); messageSenderService.publish(topic, builder.build()); return; } builder.data(RequestsReply.success(Map.of(MapKeyConst.ORGANIZATION_NAME, workspace.get().getWorkspaceName()))); messageSenderService.publish(topic, builder.build()); } /** * Convert database entity objects into workspace data transfer object. * @param entity * @return */ private WorkspaceDTO entityConvertToDto(WorkspaceEntity entity) { if (entity == null) { return null; } return WorkspaceDTO.builder() .id(entity.getId()) .workspaceId(entity.getWorkspaceId()) .platformName(entity.getPlatformName()) .workspaceDesc(entity.getWorkspaceDesc()) .workspaceName(entity.getWorkspaceName()) .bindCode(entity.getBindCode()) .build(); } private WorkspaceEntity dtoConvertToEntity(WorkspaceDTO dto) { if (dto == null) { return null; } return WorkspaceEntity.builder() .id(dto.getId()) .workspaceId(dto.getWorkspaceId()) .platformName(dto.getPlatformName()) .workspaceDesc(dto.getWorkspaceDesc()) .workspaceName(dto.getWorkspaceName()) .bindCode(dto.getBindCode()) .build(); } }