幸运24-后台-个人-自定义排序

This commit is contained in:
khalil
2025-07-08 12:09:25 +08:00
parent b201346c37
commit 007f4c0658
2 changed files with 27 additions and 2 deletions

View File

@@ -6,6 +6,7 @@ import com.accompany.admin.vo.luckybag.Lucky24RecordAdminVo;
import com.accompany.business.constant.Lucky24PoolTypeEnum;
import com.accompany.business.model.Gift;
import com.accompany.business.model.lucky.Lucky24Pool;
import com.accompany.business.mybatismapper.SuperManagerOperateRecordMapperMgr;
import com.accompany.business.mybatismapper.lucky.Lucky24PoolMapper;
import com.accompany.business.mybatismapper.lucky.Lucky24StatMapper;
import com.accompany.business.service.gift.GiftService;
@@ -40,6 +41,7 @@ import java.time.ZonedDateTime;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
@@ -66,6 +68,15 @@ public class Lucky24RecordAdminService {
@Autowired
private GiftService giftService;
private final Map<String, Function<Lucky24PersonalStat, Object>> fieldExtractors = Map.of(
"totalInput", Lucky24PersonalStat::getTotalInput,
"totalOutput", Lucky24PersonalStat::getTotalOutput,
"production", Lucky24PersonalStat::getProduction,
"productionRatio", Lucky24PersonalStat::getProductionRatio
);
@Autowired
private SuperManagerOperateRecordMapperMgr superManagerOperateRecordMapperMgr;
public Lucky24PlatformStatVo getPlatform(Integer partitionId, Integer poolType) {
List<Lucky24PlatformStat> list = listPlatform(partitionId, poolType);
long totalInput = list.stream().mapToLong(Lucky24PlatformStat::getTotalInput).sum();
@@ -146,6 +157,7 @@ public class Lucky24RecordAdminService {
@SneakyThrows
public Lucky24PersonalStatVo getPersonal(Integer partitionId, Long erbanNo, String date, String userRechargeLevel, Integer poolType,
String sortCol, String sortOrder,
int pageNo, int pageSize) {
Page<Lucky24PersonalStat> page = new Page<>(pageNo, pageSize);
@@ -172,8 +184,18 @@ public class Lucky24RecordAdminService {
long totalOutput = list.stream().mapToLong(Lucky24PersonalStat::getTotalOutput).sum();
BigDecimal totalProductionRatio = BigDecimal.valueOf(totalOutput).divide(BigDecimal.valueOf(totalInput), 4, RoundingMode.HALF_UP);
// 按大到小排序
list.sort(Comparator.comparing(Lucky24PersonalStat::getTotalInput).reversed());
Comparator<Lucky24PersonalStat> comparator = null == sortCol? Comparator.comparing(Lucky24PersonalStat::getTotalInput):
(o1, o2) -> {
Object v1 = fieldExtractors.get(sortCol).apply(o1);
Object v2 = fieldExtractors.get(sortCol).apply(o2);
return ((Comparable<Object>) v1).compareTo(v2);
};
if (null == sortOrder || "desc".equals(sortOrder)){
comparator = comparator.reversed();
}
list.sort(comparator);
int startIndex = (pageNo -1) * pageSize;
int endIndex = Math.min(startIndex + pageSize, list.size());

View File

@@ -54,16 +54,19 @@ public class Lucky24RecordAdminController {
@ApiImplicitParam(value = "erbanNo", name = "用户ID"),
@ApiImplicitParam(value = "date", name = "开始日期", required = true),
@ApiImplicitParam(value = "poolType", name = "数组类型", required = true),
@ApiImplicitParam(value = "sortCol", name = "排序列", required = true),
@ApiImplicitParam(value = "sortOrder", name = "排序方式", required = true),
@ApiImplicitParam(value = "pageNo", name = "页号", required = true),
@ApiImplicitParam(value = "pageSize", name = "页长", required = true),
})
@GetMapping("/personal")
public BusiResult<Lucky24PersonalStatVo> personal(Integer partitionId, Long erbanNo, String date, String userRechargeLevel, Integer poolType,
String sortCol, String sortOrder,
int pageNo, int pageSize) {
if (null == partitionId || (null == erbanNo && !StringUtils.hasText(date))) {
throw new ServiceException(BusiStatus.PARAMERROR);
}
Lucky24PersonalStatVo vo = service.getPersonal(partitionId, erbanNo, date, userRechargeLevel, poolType, pageNo, pageSize);
Lucky24PersonalStatVo vo = service.getPersonal(partitionId, erbanNo, date, userRechargeLevel, poolType, sortCol, sortOrder, pageNo, pageSize);
return BusiResult.success(vo);
}