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, 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 cls, SelectSupport support) { if (null == support) return; try { DataFieldSortFunc instance = cls.getEnumConstants()[0]; List fieldSort = instance.getDataFieldSort(); List 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 cls, String fieldName) { return getOrderBySql(cls, fieldName, "create_time"); } public String getOrderBySql(Class cls, String fieldName, String timeField) { String sql = map.get(cls); if (!Cools.isEmpty(sql)) { return "ORDER BY FIELD(" + fieldName + ", " + sql + ") ASC, " + timeField + " DESC"; } return ""; } }