无关风月
2025-05-08 9486766c806fe1d9e082b2fd02ea1cc558f1b443
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupCompetitorServiceImpl.java
@@ -1,6 +1,7 @@
package com.dsh.communityWorldCup.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.communityWorldCup.entity.WorldCup;
@@ -114,7 +115,7 @@
        }else{
            wrapper.eq("participantType", 1);
        }
        int win = this.count(wrapper.eq("participantId", entrantRank.getId()).eq("matchResult", 1));
        int win = this.count(wrapper.eq("participantId", entrantRank.getId()).in("matchResult", Arrays.asList(0, 1)));
        entrantRankVo.setWin(win);
        wrapper = new QueryWrapper<>();
@@ -167,10 +168,64 @@
            AppUser appUser = appUserClient.getAppUser(worldCupRank.getAppUserId());
            appUserIds = appUserClient.getAppUserIds(appUser.getCityCode());
        }
        //总场次
        List<Map<String, Object>> lists = this.baseMapper.getWorldCupRank(worldCupRank, appUserIds);
        List<WorldCupRankVo> list = new ArrayList<>();
        //未负的数据
        List<Map<String, Object>> lists1 = this.baseMapper.getWorldCupRank1(worldCupRank, appUserIds);
        List<Map<String, Object>> mapList = new ArrayList<>();
        for (int i = 0; i < lists.size(); i++) {
            Map<String, Object> map = lists.get(i);
            Integer participantType = Integer.valueOf(map.get("participantType").toString());
            Long participantId = Long.valueOf(map.get("participantId").toString());
            Integer appUserId = Integer.valueOf(map.get("appUserId").toString());
            Integer num = Integer.valueOf(null == map.get("num") ? "0" : map.get("num").toString());
            //学员
            if(participantType == 1){
                TStudent tStudent = studentClient.queryById(participantId.intValue());
                if(tStudent.getState() != 1){
                    continue;
                }
            }
            //参赛人员
            if(participantType == 2){
                Participant participant = participantClient.getParticipant(participantId);
                if(participant.getState() != 1){
                    continue;
                }
            }
            map.put("totalSession", num);
            map.put("winRate", "0");
            for (Map<String, Object> objectMap : lists1) {
                Integer participantType1 = Integer.valueOf(objectMap.get("participantType").toString());
                Long participantId1 = Long.valueOf(objectMap.get("participantId").toString());
                Integer appUserId1 = Integer.valueOf(objectMap.get("appUserId").toString());
                Integer num1 = Integer.valueOf(null == objectMap.get("num") ? "0" : objectMap.get("num").toString());
                if(participantType.compareTo(participantType1) == 0 && participantId.compareTo(participantId1) == 0 && appUserId.compareTo(appUserId1) == 0){
                    map.put("winRate", new BigDecimal(num1).divide(new BigDecimal(num), new MathContext(4, RoundingMode.HALF_EVEN)).multiply(new BigDecimal(100)).doubleValue());
                    break;
                }
            }
            mapList.add(map);
        }
        if(worldCupRank.getSort() == 1){
            mapList.sort(new Comparator<Map<String, Object>>() {
                @Override
                public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                    return Double.valueOf(o1.get("totalSession").toString()).compareTo(Double.valueOf(o2.get("totalSession").toString())) * -1;
                }
            });
        }
        if(worldCupRank.getSort() == 2){
            mapList.sort(new Comparator<Map<String, Object>>() {
                @Override
                public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                    return Double.valueOf(o1.get("winRate").toString()).compareTo(Double.valueOf(o2.get("winRate").toString())) * -1;
                }
            });
        }
        List<WorldCupRankVo> list = new ArrayList<>();
        for (int i = 0; i < mapList.size(); i++) {
            Map<String, Object> map = mapList.get(i);
            Integer participantType = Integer.valueOf(map.get("participantType").toString());
            Long participantId = Long.valueOf(map.get("participantId").toString());
            Integer appUserId = Integer.valueOf(map.get("appUserId").toString());
@@ -271,7 +326,13 @@
     */
    @Override
    public void endWorldCupCallback(String custom, Integer red_score, Integer blue_score) {
        List<Long> ids = JSON.parseArray(custom, Long.class);
        JSONObject jsonObject = JSON.parseObject(custom);
        Integer gameType = jsonObject.getInteger("gameType");
        //智慧球场比赛
        if(2 == gameType){
            return;
        }
        List<Long> ids = jsonObject.getJSONArray("ids").toJavaList(Long.class);
        List<WorldCupCompetitor> worldCupCompetitors = this.listByIds(ids);
        try {
            WorldCupCompetitor worldCupCompetitor1 = worldCupCompetitors.get(0);
@@ -356,33 +417,79 @@
        appUserIdsByCityName.setCity(worldCupRecords.getCity());
        List<Integer> appUserIds = appUserClient.getAppUserIdsByCityName(appUserIdsByCityName);
        List<Map<String, Object>> mapList = this.baseMapper.worldCupRecordsList(worldCupRecords, appUserIds);
        List<Map<String, Object>> mapList1 = this.baseMapper.worldCupRecordsList1(worldCupRecords, appUserIds);
        List<Map<String, Object>> list = new ArrayList<>();
        int row_num = 0;
        for (int i = 0; i < mapList.size(); i++) {
            Map<String, Object> map = mapList.get(i);
            Integer participantType = Integer.valueOf(map.get("participantType").toString());
            Long participantId = Long.valueOf(map.get("participantId").toString());
            Integer appUserId = Integer.valueOf(map.get("appUserId").toString());
            Integer totalSession = Integer.valueOf(map.get("totalSession").toString());
            Integer num = Integer.valueOf(null == map.get("num") ? "0" : map.get("num").toString());
            //学员
            if(participantType == 1){
                TStudent tStudent = studentClient.queryById(participantId.intValue());
                if(tStudent.getState() != 1){
                    continue;
                }
            }
            //参赛人员
            if(participantType == 2){
                Participant participant = participantClient.getParticipant(participantId);
                if(participant.getState() != 1){
                    continue;
                }
            }
            map.put("totalSession", num);
            map.put("winRate", "0");
            map.put("win", "0");
            for (Map<String, Object> objectMap : mapList1) {
                Integer participantType1 = Integer.valueOf(objectMap.get("participantType").toString());
                Long participantId1 = Long.valueOf(objectMap.get("participantId").toString());
                Integer appUserId1 = Integer.valueOf(objectMap.get("appUserId").toString());
                Integer num1 = Integer.valueOf(null == objectMap.get("num") ? "0" : objectMap.get("num").toString());
                if(participantType.compareTo(participantType1) == 0 && participantId.compareTo(participantId1) == 0 && appUserId.compareTo(appUserId1) == 0){
                    map.put("winRate", new BigDecimal(num1).divide(new BigDecimal(num), new MathContext(4, RoundingMode.HALF_EVEN)).multiply(new BigDecimal(100)).doubleValue());
                    map.put("win", num1);
                    break;
                }
            }
            Integer win = Integer.valueOf(map.get("win").toString());
            Integer lose = totalSession - win;
            Integer lose = num - win;
            map.put("lose", lose);
            AppUser appUser = appUserClient.getAppUser(appUserId);
            map.put("province", appUser.getProvince() + appUser.getCity());
            if(1 == participantType){
                TStudent tStudent = studentClient.queryById(participantId.intValue());
                if(tStudent.getState() != 1){
                    continue;
                }
                map.put("name", tStudent.getName());
                map.put("phone", ToolUtil.isNotEmpty(tStudent.getPhone()) ? tStudent.getPhone() : appUser.getPhone());
            }else{
                Participant participant = participantClient.getParticipant(participantId);
                if(participant.getState() != 1){
                    continue;
                }
                map.put("name", participant.getName());
                map.put("phone", ToolUtil.isNotEmpty(participant.getPhone()) ? participant.getPhone() : appUser.getPhone());
            }
            row_num++;
            map.put("row_num", row_num);
            list.add(map);
        }
        list.sort(new Comparator<Map<String, Object>>() {
            @Override
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                return Double.valueOf(o1.get("totalSession").toString()).compareTo(Double.valueOf(o2.get("totalSession").toString())) * -1;
            }
        });
        Integer offset = worldCupRecords.getOffset();
        Integer limit = worldCupRecords.getLimit();
        limit += offset;
        map1.put("rows", mapList.subList(offset, mapList.size() >= limit ? limit : mapList.size()));
        int count = this.baseMapper.worldCupRecordsListCount(appUserIds);
        map1.put("total", count);
        map1.put("rows", list.subList(offset, list.size() >= limit ? limit : list.size()));
        map1.put("total", list.size());
        return map1;
    }
@@ -469,7 +576,7 @@
                .eq("participantType", participantType).eq("participantId", participantId)
                .isNotNull("matchResult").orderByDesc("startTime"));
        List<Map<String, Object>> mapList = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.HH.dd HH:mm");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm");
        for (WorldCupCompetitor cupCompetitor : list) {
            Map<String, Object> map = new HashMap<>();
            map.put("id", cupCompetitor.getId().toString());