puzhibing
2024-02-22 f6585d78307370f108b4a691e5ebd225fedbeda8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package com.dsh.communityWorldCup.service.impl;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
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;
import com.dsh.communityWorldCup.entity.WorldCupCompetitor;
import com.dsh.communityWorldCup.entity.WorldCupPaymentParticipant;
import com.dsh.communityWorldCup.entity.WorldCupStore;
import com.dsh.communityWorldCup.feignclient.other.StoreClient;
import com.dsh.communityWorldCup.feignclient.other.model.Store;
import com.dsh.communityWorldCup.mapper.WorldCupMapper;
import com.dsh.communityWorldCup.model.*;
import com.dsh.communityWorldCup.service.IWorldCupCompetitorService;
import com.dsh.communityWorldCup.service.IWorldCupPaymentParticipantService;
import com.dsh.communityWorldCup.service.IWorldCupService;
import com.dsh.communityWorldCup.service.IWorldCupStoreService;
import com.dsh.communityWorldCup.util.GeodesyUtil;
import com.dsh.communityWorldCup.util.ResultUtil;
import com.dsh.communityWorldCup.util.UUIDUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.*;
 
/**
 * @author zhibing.pu
 * @Date 2024/2/18 17:11
 */
@Service
public class WorldCupServiceImpl extends ServiceImpl<WorldCupMapper, WorldCup> implements IWorldCupService {
 
    @Autowired
    private IWorldCupCompetitorService worldCupCompetitorService;
 
    @Autowired
    private IWorldCupPaymentParticipantService worldCupPaymentParticipantService;
 
    @Resource
    private StoreClient storeClient;
 
    @Autowired
    private IWorldCupStoreService worldCupStoreService;
 
 
 
 
 
    /**
     * 裁判获取世界杯列表数据
     * @return
     */
    @Override
    public List<WorldCupListCoachVo> getWorldCupListCoach(WorldCupListCoach worldCupListCoach) {
        List<WorldCupListCoachVo> worldCupListCoach1 = this.baseMapper.getWorldCupListCoach(worldCupListCoach);
        //对查询结果进行距离排序(直线距离)
        Collections.sort(worldCupListCoach1, new Comparator<WorldCupListCoachVo>() {
            @Override
            public int compare(WorldCupListCoachVo o1, WorldCupListCoachVo o2) {
                Map<String, Double> distance1 = GeodesyUtil.getDistance(o1.getLon() + "," + o1.getLat(), worldCupListCoach.getLon() + "," + worldCupListCoach.getLat());
                Double wgs841 = distance1.get("WGS84");
                Map<String, Double> distance2 = GeodesyUtil.getDistance(o2.getLon() + "," + o2.getLat(), worldCupListCoach.getLon() + "," + worldCupListCoach.getLat());
                Double wgs842 = distance2.get("WGS84");
                return wgs841.compareTo(wgs842);
            }
        });
        return worldCupListCoach1;
    }
 
 
    /**
     * 开启世界杯赛事
     * @param startWorldCup
     * @return
     */
    @Override
    public ResultUtil startWorldCup(StartWorldCup startWorldCup) {
        //先检测当前是否已经结束
 
        WorldCup worldCup = this.getById(startWorldCup.getWorldCupId());
        if(worldCup.getStartTime().getTime() > System.currentTimeMillis()){
            return ResultUtil.error("赛事还未开始");
        }
        if(worldCup.getEndTime().getTime() <= System.currentTimeMillis()){
            return ResultUtil.error("赛事已结束");
        }
        if(worldCup.getStatus() == 4){
            return ResultUtil.error("赛事已取消");
        }
        String people = startWorldCup.getPeople();
        JSONArray jsonArray = JSON.parseArray(people);
        String timeStr = UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(3);
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            Integer id = jsonObject.getInteger("id");
            Integer participantType = jsonObject.getInteger("participantType");
            String type = jsonObject.getString("type");
            WorldCupCompetitor worldCupCompetitor = new WorldCupCompetitor();
            worldCupCompetitor.setCode(timeStr);
            worldCupCompetitor.setWorldCupId(startWorldCup.getWorldCupId());
            worldCupCompetitor.setParticipantType(participantType);
            WorldCupPaymentParticipant worldCupPaymentParticipant = worldCupPaymentParticipantService.getWorldCupPaymentParticipant(startWorldCup.getWorldCupId(), participantType, id);
            worldCupCompetitor.setAppUserId(worldCupPaymentParticipant.getAppUserId());
            worldCupCompetitor.setParticipantId(id);
            worldCupCompetitor.setParticipant("blue".equals(type) ? 1 : 2);
            worldCupCompetitor.setStartTime(new Date());
            worldCupCompetitorService.save(worldCupCompetitor);
        }
        //调接口开启游戏
 
        return ResultUtil.success();
    }
 
 
    /**
     * 获取用户完成赛事没有提示的数据
     * @param uid
     * @return
     */
    @Override
    public Integer getCompletedWorldCupTips(Integer uid) {
        int count = worldCupCompetitorService.count(new QueryWrapper<WorldCupCompetitor>()
                .eq("appUserId", uid).eq("tips", 0).isNotNull("endTime"));
        return count;
    }
 
 
    /**
     * 获取社区世界杯列表
     * @param worldCupList
     * @return
     */
    @Override
    public List<WorldCupListVo> getWorldCupList(WorldCupList worldCupList) {
        //没有筛选门店,默认使用当前门店
        if(null == worldCupList.getStoreId()){
            worldCupList.setStoreId(worldCupList.getStoreId());
        }
        return this.baseMapper.getWorldCupList(worldCupList);
    }
 
 
    /**
     * 获取世界杯详情
     * @param id
     * @return
     */
    @Override
    public WorldCupInfo getWorldCupInfo(Integer id) {
        WorldCupInfo worldCupInfo = this.baseMapper.getWorldCupInfo(id);
        List<WorldCupStore> worldCupStores = worldCupStoreService.list(new QueryWrapper<WorldCupStore>().eq("worldCupId", id));
        JSONArray jsonArray = new JSONArray();
        for (WorldCupStore worldCupStore : worldCupStores) {
            Store store = storeClient.queryStoreById(worldCupStore.getStoreId());
            jsonArray.add(store.getName());
        }
        worldCupInfo.setStores(jsonArray.toJSONString());
        return worldCupInfo;
    }
}