Browse Source

2019/07/18

x1ongzhu 6 years ago
parent
commit
4619bf98d0

+ 1 - 1
src/main/java/com/izouma/walkchina/domain/StageAward.java

@@ -39,7 +39,7 @@ public class StageAward {
 
     private Double needProgress;
 
-    private Long needStep;
+    private Long needSteps;
 
     @Column(precision = 10, scale = 2)
     private BigDecimal coin;

+ 3 - 5
src/main/java/com/izouma/walkchina/dto/UserMap.java

@@ -2,7 +2,6 @@ package com.izouma.walkchina.dto;
 
 import com.izouma.walkchina.domain.City;
 import com.izouma.walkchina.domain.StageAward;
-import com.izouma.walkchina.domain.UserInfo;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -20,11 +19,10 @@ public class UserMap {
     private City             origin;
     private City             destination;
     private Double           progress;
-    private UserInfo         userInfo;
     private List<StageAward> stageAwards;
-    private Long             todayStep;
-    private Long             teamStep;
-    private Long             currentStep;
+    private Long             todaySteps;
+    private Long             teamSteps;
+    private Long             currentSteps;
     private Integer          days;
     private String           nickname;
     private String           avatar;

+ 0 - 16
src/main/java/com/izouma/walkchina/dto/UserProfile.java

@@ -1,16 +0,0 @@
-package com.izouma.walkchina.dto;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class UserProfile {
-    private Long id;
-    private String nickname;
-    private String avatar;
-    private Integer level;
-
-}

+ 22 - 0
src/main/java/com/izouma/walkchina/dto/UserTeamMember.java

@@ -0,0 +1,22 @@
+package com.izouma.walkchina.dto;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class UserTeamMember {
+    private Long   userId;
+    private String nickname;
+    private String avatar;
+    private Long   todaySteps;
+    private Long   totalSteps;
+
+    public UserTeamMember(Long userId, String nickname, String avatar, Long todaySteps, Long totalSteps) {
+        this.userId = userId;
+        this.nickname = nickname;
+        this.avatar = avatar;
+        this.todaySteps = todaySteps;
+        this.totalSteps = totalSteps;
+    }
+}

+ 5 - 0
src/main/java/com/izouma/walkchina/repo/TeamMemberRepository.java

@@ -1,13 +1,18 @@
 package com.izouma.walkchina.repo;
 
 import com.izouma.walkchina.domain.TeamMember;
+import com.izouma.walkchina.dto.UserTeamMember;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 
 import java.util.Date;
+import java.util.List;
 
 public interface TeamMemberRepository extends JpaRepository<TeamMember, Long> {
 
     @Query("select t from TeamMember t where t.userId = ?1 and t.startDate <= ?2 and t.endDate >= ?2")
     TeamMember findActive(Long userId, Date date);
+
+    @Query("select new com.izouma.walkchina.dto.UserTeamMember(t.userId, u.nickname, u.avatar, u.totalSteps, 0L) from TeamMember t join UserInfo u on u.id = t.userId where t.leader = ?1")
+    List<UserTeamMember> findUserTeam(Long userId);
 }

+ 1 - 2
src/main/java/com/izouma/walkchina/repo/WalkDataRepository.java

@@ -4,10 +4,8 @@ import com.izouma.walkchina.domain.WalkData;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.jpa.repository.Temporal;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.persistence.TemporalType;
 import java.util.Date;
 import java.util.Optional;
 
@@ -28,4 +26,5 @@ public interface WalkDataRepository extends JpaRepository<WalkData, Long> {
 
     @Query(value = "SELECT SUM(steps) FROM walk_data WHERE user_id = ?1 AND date >= DATE(?2) AND date <= DATE(?3)", nativeQuery = true)
     Optional<Long> sumUserWalkSteps(Long userId, Date start, Date end);
+
 }

+ 1 - 1
src/main/java/com/izouma/walkchina/service/JourneyService.java

@@ -121,7 +121,7 @@ public class JourneyService {
                     .journeyId(journeyId)
                     .coin(new BigDecimal(10))
                     .needProgress(p)
-                    .needStep((long) (p * route.getDistance() / AppConstants.STEP_TO_DISTANCE_RATE))
+                    .needSteps((long) (p * route.getDistance() / AppConstants.STEP_TO_DISTANCE_RATE))
                     .received(false)
                     .build();
             stageAwardRepository.save(stageAward);

+ 3 - 3
src/main/java/com/izouma/walkchina/service/MapService.java

@@ -100,9 +100,9 @@ public class MapService {
         JourneyStage latestStage = stages.get(stages.size() - 1);
 
         userMap.setProgress(latestStage.getProgress());
-        userMap.setTeamStep(walkDataRepository.sumTeamWalkSteps(userId, new Date(), new Date()).orElse(0L));
-        userMap.setTodayStep(walkDataRepository.sumUserWalkSteps(userId, new Date(), new Date()).orElse(0L));
-        userMap.setCurrentStep(latestStage.getCurrentSteps());
+        userMap.setTeamSteps(walkDataRepository.sumTeamWalkSteps(userId, new Date(), new Date()).orElse(0L));
+        userMap.setTodaySteps(walkDataRepository.sumUserWalkSteps(userId, new Date(), new Date()).orElse(0L));
+        userMap.setCurrentSteps(latestStage.getCurrentSteps());
         userMap.setStageAwards(stageAwardRepository.findAllByUserIdAndStageId(userId, latestStage.getId()));
         userMap.setDays(Days.daysBetween(LocalDate.fromDateFields(latestStage.getCreatedAt()), LocalDate.fromDateFields(new Date())).getDays());
 

+ 27 - 4
src/main/java/com/izouma/walkchina/service/TeamService.java

@@ -6,11 +6,9 @@ import com.izouma.walkchina.domain.TeamMember;
 import com.izouma.walkchina.domain.UserCoinRecord;
 import com.izouma.walkchina.domain.UserInfo;
 import com.izouma.walkchina.constant.AppConstants;
+import com.izouma.walkchina.dto.UserTeamMember;
 import com.izouma.walkchina.exception.ServiceException;
-import com.izouma.walkchina.repo.MessageRepository;
-import com.izouma.walkchina.repo.TeamMemberRepository;
-import com.izouma.walkchina.repo.UserCoinRecordRepository;
-import com.izouma.walkchina.repo.UserInfoRepository;
+import com.izouma.walkchina.repo.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,6 +16,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 import java.util.Optional;
 
 @Service
@@ -31,6 +30,8 @@ public class TeamService {
     private UserCoinRecordRepository userCoinRecordRepository;
     @Autowired
     private MessageRepository        messageRepository;
+    @Autowired
+    private WalkDataRepository       walkDataRepository;
 
     public void hire(Long userId, Long target) {
         Date now = new Date();
@@ -38,6 +39,10 @@ public class TeamService {
         UserInfo targetUserInfo = userInfoRepository.findById(target).orElseThrow(new ServiceException("用户不存在"));
         TeamMember teamMember = teamMemberRepository.findActive(target, now);
         if (teamMember != null) {
+            if (teamMember.getLeader().equals(userId)) {
+                throw new ServiceException("Ta已经是你的队员");
+            }
+
             teamMember.setEndDate(now);
             teamMemberRepository.save(teamMember);
             Message grabMsg = Message.builder()
@@ -105,4 +110,22 @@ public class TeamService {
                 .build();
         messageRepository.save(beHireMsg);
     }
+
+    public boolean canHire(Long userId, Long target) {
+        Date now = new Date();
+        TeamMember teamMember = teamMemberRepository.findActive(target, now);
+        if (teamMember != null) {
+            return !teamMember.getLeader().equals(userId);
+        }
+        return true;
+    }
+
+    public List<UserTeamMember> userTeam(Long userId) {
+        List<UserTeamMember> list = teamMemberRepository.findUserTeam(userId);
+        Date now = new Date();
+        for (UserTeamMember userTeamMember : list) {
+            userTeamMember.setTodaySteps(walkDataRepository.sumUserWalkSteps(userTeamMember.getUserId(), now, now).orElse(0L));
+        }
+        return list;
+    }
 }

+ 17 - 6
src/main/java/com/izouma/walkchina/web/TeamController.java

@@ -5,10 +5,7 @@ import com.izouma.walkchina.dto.Result;
 import com.izouma.walkchina.service.TeamService;
 import com.izouma.walkchina.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 @RestController
 @RequestMapping("/team")
@@ -17,10 +14,24 @@ public class TeamController {
     @Autowired
     private TeamService teamService;
 
-    @PostMapping("/hire")
-    public Result hire(@RequestParam("target") Long target) {
+    @GetMapping("/hire")
+    public Result hire(@RequestParam("userId") Long target) {
         UserInfo userInfo = SecurityUtils.getAuthenticatedUser();
         teamService.hire(userInfo.getId(), target);
         return Result.ok();
     }
+
+    @GetMapping("/canHire")
+    public Result canHire(@RequestParam("target") Long target) {
+        UserInfo userInfo = SecurityUtils.getAuthenticatedUser();
+        if (teamService.canHire(userInfo.getId(), target)) {
+            return Result.ok();
+        }
+        return Result.error();
+    }
+
+    @GetMapping("/userTeam")
+    public Result userTeam(@RequestParam("userId") Long userId) {
+        return Result.ok(teamService.userTeam(userId));
+    }
 }

+ 9 - 1
src/test/java/com/izouma/walkchina/repo/TeamMemberRepositoryTest.java

@@ -1,6 +1,7 @@
 package com.izouma.walkchina.repo;
 
 import com.izouma.walkchina.domain.TeamMember;
+import com.izouma.walkchina.dto.UserTeamMember;
 import org.apache.commons.lang3.time.FastDateFormat;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -10,6 +11,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 
 import java.text.ParseException;
 import java.util.Date;
+import java.util.List;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest
@@ -24,7 +26,7 @@ public class TeamMemberRepositoryTest {
             Date end = FastDateFormat.getInstance("yyyy-MM-dd").parse("2099-01-01");
             TeamMember teamMember = TeamMember.builder()
                     .userId(userId)
-                    .leader(677L)
+                    .leader(890L)
                     .startDate(start)
                     .endDate(end)
                     .active(true)
@@ -33,4 +35,10 @@ public class TeamMemberRepositoryTest {
         }
     }
 
+    @Test
+    public void findUserTeam() {
+        List<UserTeamMember> list = teamMemberRepository.findUserTeam(890L);
+        System.out.println(list);
+    }
+
 }