lrf пре 2 година
родитељ
комит
5570289b68
2 измењених фајлова са 24 додато и 20 уклоњено
  1. 23 20
      app/service/eliminate.js
  2. 1 0
      app/service/matchTeamGroup.js

+ 23 - 20
app/service/eliminate.js

@@ -44,7 +44,7 @@ class EliminateService extends CrudService {
     const player_type = _.get(head, 'player_type');
     if (player_type === 'Race.TeamApply') {
       const list = await this.ctx.service.teamApply.query({ _id: players });
-      players = list.map(i => {
+      players = list.map((i) => {
         const { one_member_name, two_member_name, _id } = i;
         const obj = { _id, name: `${one_member_name}-${two_member_name}` };
         return obj;
@@ -103,12 +103,12 @@ class EliminateService extends CrudService {
       // 删除第一个关系
       dup.shift();
       // 查看是否有与第一个关系指向一个目标的地方
-      const r = dup.find(f => f.target === head.target);
+      const r = dup.find((f) => f.target === head.target);
       if (r) {
         // 有,则将这俩关系组为一个比赛,然后在dup中删除
         const sch = { player_one_node: head.source, player_two_node: r.source };
         schList.push(sch);
-        const ri = dup.find(f => f.target === head.target);
+        const ri = dup.find((f) => f.target === head.target);
         dup.splice(ri, 1);
       }
       dupAll = dup;
@@ -156,7 +156,7 @@ class EliminateService extends CrudService {
 
   nextProcess(startLevel, nodes, edges) {
     // 1.正常进行安排:level向前进
-    const lastLevel = nodes.filter(f => f.level === startLevel - 1);
+    const lastLevel = nodes.filter((f) => f.level === startLevel - 1);
     const group = _.chunk(lastLevel, 2);
     const thisLevelNodes = [];
     const thisLevelEdges = [];
@@ -228,7 +228,7 @@ class EliminateService extends CrudService {
   async groupRanking(list) {
     list = JSON.parse(JSON.stringify(list));
     // 先看每场比赛有没有胜者,有胜者就过,没有就设置下
-    list = list.map(i => {
+    list = list.map((i) => {
       const { winner, player_one, player_one_score, player_two, player_two_score } = i;
       if (winner) return i;
       if (player_one_score > player_two_score) i.winner = player_one;
@@ -240,18 +240,18 @@ class EliminateService extends CrudService {
       const groups = list[team_id];
       // 过滤出选手
       let players = [];
-      const p1s = groups.map(i => i.player_one);
-      const p2s = groups.map(i => i.player_two);
+      const p1s = groups.map((i) => i.player_one);
+      const p2s = groups.map((i) => i.player_two);
       players.push(...p1s, ...p2s);
       players = _.uniq(players);
       // 转换成object[], player:选手; win: 胜场; score:净胜球
-      players = players.map(i => ({ player: i, win: 0, score: 0 }));
+      players = players.map((i) => ({ player: i, win: 0, score: 0 }));
       for (const g of groups) {
         const { winner, player_one, player_one_score, player_two, player_two_score } = g;
         const p1RoundScore = this.getScore(player_one_score, player_two_score);
         const p2RoundScore = this.getScore(player_two_score, player_one_score);
-        const p1 = players.find(f => f.player === player_one);
-        const p2 = players.find(f => f.player === player_two);
+        const p1 = players.find((f) => f.player === player_one);
+        const p2 = players.find((f) => f.player === player_two);
         // p1,p2谁没有就不行
         if (!p1 || !p2) continue;
         p1.score = p1.score + p1RoundScore;
@@ -259,7 +259,7 @@ class EliminateService extends CrudService {
         if (winner === player_one) p1.win += 1;
         else p2.win += 1;
       }
-      players = _.orderBy(players, [ 'win', 'score' ], [ 'desc', 'desc' ]);
+      players = _.orderBy(players, ['win', 'score'], ['desc', 'desc']);
       const team = await this.ctx.model.Race.MatchTeamGroup.findById(team_id);
       if (!team) continue;
       const { rise } = team;
@@ -306,7 +306,7 @@ class EliminateService extends CrudService {
     if (sort && _.isString(sort)) {
       sort = { [sort]: desc ? -1 : 1 };
     } else if (sort && _.isArray(sort)) {
-      sort = sort.map(f => ({ [f]: desc ? -1 : 1 })).reduce((p, c) => ({ ...p, ...c }), {});
+      sort = sort.map((f) => ({ [f]: desc ? -1 : 1 })).reduce((p, c) => ({ ...p, ...c }), {});
     }
     // 过滤出ref字段
     const { populate } = this.getRefMods();
@@ -339,11 +339,12 @@ class EliminateService extends CrudService {
   }
   // 换选手名称
   async getPlayerName(data) {
+    if (!data) return data;
+    data = JSON.parse(JSON.stringify(data));
     const { player_type, player_one, player_two } = data;
     if (!player_type) return data;
     // 人处理
     if (player_type === 'Race.User') {
-      console.log('line 348 in function:');
       if (player_one) {
         const p1 = await this.userModel.findById(player_one, { user_id: 1 }).populate({ path: 'user_id', model: this.baseUserModel, select: 'name' });
         data.player_one_name = _.get(p1, 'user_id.name');
@@ -371,10 +372,12 @@ class EliminateService extends CrudService {
     }
     return data;
   }
+
   // 如果打完比赛,则自动推进
-  async afterUpdate(filter, data) {
+  async afterUpdate(filter, update, data) {
     const { status } = data;
     if (status === '2') await this.toNextRace(data);
+    data = await this.getPlayerName(data);
     return data;
   }
   // 自动推进至下一场
@@ -396,12 +399,12 @@ class EliminateService extends CrudService {
     // 通过整图关系,找到下一步
     const { edges, nodes } = chartData;
     // 通过边关系找到下一节点
-    const list = edges.filter(f => f.source === player_one_node || f.source === player_two_node);
-    const getTarget = nodeEdge => _.get(nodeEdge, 'target');
+    const list = edges.filter((f) => f.source === player_one_node || f.source === player_two_node);
+    const getTarget = (nodeEdge) => _.get(nodeEdge, 'target');
     if (getTarget(_.head(list)) !== getTarget(_.last(list))) throw new BusinessError(ErrorCode.DATA_INVALID, '两个选手的图位置错误');
     // 确定了胜者晋级的节点id
     const target = getTarget(_.head(list));
-    const node = nodes.find(f => f.id === target);
+    const node = nodes.find((f) => f.id === target);
     const { id } = node;
     const wQeury = {
       $or: [
@@ -415,11 +418,11 @@ class EliminateService extends CrudService {
     await wEData.save();
     // 再得出败者的节点id
     const { mark, level } = node;
-    let midArr = nodes.filter(f => f.level === level);
+    let midArr = nodes.filter((f) => f.level === level);
     // 先过滤掉胜者节点的mark类型
-    midArr = midArr.filter(f => f.mark !== mark);
+    midArr = midArr.filter((f) => f.mark !== mark);
     // 再依次找,哪个节点没有人,没有人就安排上
-    midArr = _.orderBy(midArr, [ 'pos' ], [ 'asc' ]);
+    midArr = _.orderBy(midArr, ['pos'], ['asc']);
     for (const n of midArr) {
       const { id } = n;
       const query = {

+ 1 - 0
app/service/matchTeamGroup.js

@@ -91,6 +91,7 @@ class MatchTeamGroupService extends CrudService {
     const head = _.head(groups);
     const player_type = _.get(head, 'person_type');
     eliminateData = eliminateData.map(i => ({ ...i, player_type, match_id, group_id, project_id }));
+    eliminateData = _.reverse(eliminateData);
     await this.eliminateModel.insertMany(eliminateData);
   }