package com.estate.expert.admin.service.impl; import com.estate.expert.admin.component.map.GeoTranslateComponent; import com.estate.expert.admin.domain.business.device.usage.DeviceUsage; import com.estate.expert.admin.domain.common.request.PageReq; import com.estate.expert.admin.domain.common.response.PageResp; import com.estate.expert.admin.domain.project.Project; import com.estate.expert.admin.domain.project.ProjectDto; import com.estate.expert.admin.domain.project.ProjectRepository; import com.estate.expert.admin.domain.project.enums.ProjectType; import com.estate.expert.admin.domain.standard.hierachy.HierarchyIds; import com.estate.expert.admin.domain.user.User; import com.estate.expert.admin.service.DeviceUsageService; import com.estate.expert.admin.service.HierarchyService; import com.estate.expert.admin.service.ProjectService; import com.estate.expert.admin.service.common.CrudServiceBaseImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.List; /** * 项目服务实现 */ @Slf4j @Service public class ProjectServiceImpl extends CrudServiceBaseImpl implements ProjectService { @Resource private ProjectRepository projectRepository; @Resource private DeviceUsageService deviceUsageService; @Resource private HierarchyService hierarchyService; @Resource private GeoTranslateComponent geoTranslateComponent; @Override public PageResp list(String keyword, List projectTypes, List clientIds, PageReq pageReq) { var page = projectRepository.findProjects(keyword, projectTypes, clientIds, pageReq.toPageRequest()); return PageResp.of(page, toDto(page.getContent())); } @Override public List list(String keyword, List projectTypes, List clientIds) { return projectRepository.findProjects(keyword, projectTypes, clientIds); } @Override public List listByClient(Integer clientId) { return projectRepository.findAllByClientIdAndDeleted(clientId, false); } @Override protected void beforeDelete(Project entity) { var deviceUsages = deviceUsageService.listUsages(entity.getId(), null); // 需要释放项目用到的设备 if(!CollectionUtils.isEmpty(deviceUsages)){ deviceUsageService.deleteAllById(deviceUsages.stream().map(DeviceUsage::getId).toList()); } } @Override public ProjectDto toDto(Project entity) { var hierarchy = hierarchyService.get(HierarchyIds.DEPARTMENT).getContent(); var dto = super.toDto(entity); var department = hierarchy.get(dto.getDepartmentPath()); if(department!=null) dto.setDepartmentName(department.getName()); return dto; } @Override public List toDto(List entityList) { var hierarchy = hierarchyService.get(HierarchyIds.DEPARTMENT).getContent(); var dtos = entityList.stream().map(entityMapper::toDto).toList(); for (var dto : dtos) { var department = hierarchy.get(dto.getDepartmentPath()); if(department!=null) dto.setDepartmentName(department.getName()); } return dtos; } @Override public Project add(User creator, Project entity) { updateGeoLocation(entity); return super.add(creator, entity); } @Override public Project edit(Project entity) { updateGeoLocation(entity); return super.edit(entity); } // 更新项目的地理位置信息 private void updateGeoLocation(Project entity) { var address = entity.getAddressInfo(); if(address != null){ var location = geoTranslateComponent.translate(address.getFullAddress()); address.setGps(location); } } }