package com.zy.acs.manager.common.utils;
|
|
import com.zy.acs.framework.common.Cools;
|
import com.zy.acs.manager.manager.enums.BusStsType;
|
import com.zy.acs.manager.manager.enums.TaskStsType;
|
import com.zy.acs.manager.manager.service.BusStsService;
|
import com.zy.acs.manager.manager.service.TaskStsService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.PostConstruct;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.stream.Collectors;
|
|
/**
|
* Created by vincent on 9/23/2024
|
*/
|
@Slf4j
|
@Service
|
public class BusinessSortService {
|
|
public static final Map<Class<? extends DataFieldSortFunc>, String> map = new ConcurrentHashMap<>();
|
|
interface SelectSupport {
|
Long execute(String field);
|
}
|
|
@Autowired
|
private BusStsService busStsService;
|
@Autowired
|
private TaskStsService taskStsService;
|
|
@PostConstruct
|
public void init() {
|
set(BusStsType.class, field -> busStsService.selectByUuid(field).getId());
|
set(TaskStsType.class, field -> taskStsService.selectByUuid(field).getId());
|
}
|
|
public void set(Class<? extends DataFieldSortFunc> cls, SelectSupport support) {
|
if (null == support) return;
|
try {
|
DataFieldSortFunc instance = cls.getEnumConstants()[0];
|
List<String> fieldSort = instance.getDataFieldSort();
|
List<Long> ids = fieldSort.stream().map(support::execute).collect(Collectors.toList());
|
String idString = ids.stream().map(String::valueOf).collect(Collectors.joining(", "));
|
if (!Cools.isEmpty(idString)) {
|
map.put(cls, idString);
|
}
|
} catch (Exception e) {
|
log.error("BusinessSortService", e);
|
}
|
}
|
|
public String getOrderBySql(Class<? extends DataFieldSortFunc> cls, String fieldName) {
|
return getOrderBySql(cls, fieldName, "create_time");
|
}
|
|
public String getOrderBySql(Class<? extends DataFieldSortFunc> cls, String fieldName, String timeField) {
|
String sql = map.get(cls);
|
if (!Cools.isEmpty(sql)) {
|
return "ORDER BY FIELD(" + fieldName + ", " + sql + ") ASC, " + timeField + " DESC";
|
}
|
return "";
|
}
|
|
}
|