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<Project, ProjectDto> implements ProjectService {
|
|
@Resource
|
private ProjectRepository projectRepository;
|
|
@Resource
|
private DeviceUsageService deviceUsageService;
|
|
@Resource
|
private HierarchyService hierarchyService;
|
|
@Resource
|
private GeoTranslateComponent geoTranslateComponent;
|
|
@Override
|
public PageResp<ProjectDto> list(String keyword,
|
List<ProjectType> projectTypes, List<Integer> clientIds, PageReq pageReq) {
|
var page = projectRepository.findProjects(keyword, projectTypes, clientIds, pageReq.toPageRequest());
|
return PageResp.of(page, toDto(page.getContent()));
|
}
|
|
@Override
|
public List<Project> list(String keyword, List<ProjectType> projectTypes, List<Integer> clientIds) {
|
return projectRepository.findProjects(keyword, projectTypes, clientIds);
|
}
|
|
@Override
|
public List<Project> 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<ProjectDto> toDto(List<Project> 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);
|
}
|
}
|
}
|