|
|
@@ -3,7 +3,9 @@ package com.YuyeTech.TPlat.controller;
|
|
|
import com.YuyeTech.TPlat.VO.FriendInfoVO;
|
|
|
import com.YuyeTech.TPlat.dataobject.*;
|
|
|
import com.YuyeTech.TPlat.dto.FriendInfoDTO;
|
|
|
+import com.YuyeTech.TPlat.dto.SignInDTO;
|
|
|
import com.YuyeTech.TPlat.dto.UserDTO;
|
|
|
+import com.YuyeTech.TPlat.enums.ResultEnum;
|
|
|
import com.YuyeTech.TPlat.enums.UserEnum;
|
|
|
import com.YuyeTech.TPlat.exception.UserException;
|
|
|
import com.YuyeTech.TPlat.service.*;
|
|
|
@@ -30,6 +32,10 @@ import javax.validation.Valid;
|
|
|
import java.io.File;
|
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
import java.security.spec.InvalidKeySpecException;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.time.temporal.ChronoUnit;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -63,6 +69,9 @@ public class UserInfoController {
|
|
|
@Autowired
|
|
|
private UserWalletsService userWalletsService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private SignInService signInService;
|
|
|
+
|
|
|
|
|
|
@Value("${RSA.friendId.publicKey}")
|
|
|
private String friendIdPublicKey;
|
|
|
@@ -496,17 +505,17 @@ public class UserInfoController {
|
|
|
ex.printStackTrace();
|
|
|
}
|
|
|
return new FriendInfoDTO(
|
|
|
- e.getUsername(),
|
|
|
- e.getGender(),
|
|
|
- e.getSignature(),
|
|
|
- aliyunOSSUtil.addDomainName(e.getAvatarUrl()),
|
|
|
- e.getCityCode(),
|
|
|
- e.getHeight(),
|
|
|
- e.getWeight(),
|
|
|
- e.getBirthday(),
|
|
|
- friendInfo != null ? true : false,
|
|
|
- encodedData
|
|
|
- );
|
|
|
+ e.getUsername(),
|
|
|
+ e.getGender(),
|
|
|
+ e.getSignature(),
|
|
|
+ aliyunOSSUtil.addDomainName(e.getAvatarUrl()),
|
|
|
+ e.getCityCode(),
|
|
|
+ e.getHeight(),
|
|
|
+ e.getWeight(),
|
|
|
+ e.getBirthday(),
|
|
|
+ friendInfo != null ? true : false,
|
|
|
+ encodedData
|
|
|
+ );
|
|
|
}).collect(Collectors.toList());
|
|
|
//处理关注状态。比如已关注之类的
|
|
|
|
|
|
@@ -584,7 +593,7 @@ public class UserInfoController {
|
|
|
|
|
|
try {
|
|
|
// friendInfoService.deleteById(id);
|
|
|
- friendInfoService.deleteFriendInfo(userId,RSAUtils.privateDecrypt(friendRSA, RSAUtils.getPrivateKey(friendIdPrivateKey)));
|
|
|
+ friendInfoService.deleteFriendInfo(userId, RSAUtils.privateDecrypt(friendRSA, RSAUtils.getPrivateKey(friendIdPrivateKey)));
|
|
|
Map tempMap = new HashMap();
|
|
|
tempMap.put("isFriend", false);
|
|
|
tempMap.put("msg", "已删除好友信息");
|
|
|
@@ -615,4 +624,145 @@ public class UserInfoController {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 签到部分,获取已经签到的列表
|
|
|
+ *
|
|
|
+ * @param userId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @GetMapping("/get_sign_in_list")
|
|
|
+ public ResultVO getSignInList(@RequestParam(value = "userId") String userId) {
|
|
|
+ Boolean isNewList = true;
|
|
|
+ Boolean isSignIn = false;
|
|
|
+ SignIn signIn = signInService.findByUserId(userId);
|
|
|
+ List<SignInDTO> list = new ArrayList<>(7);
|
|
|
+ Integer _filterDay = 7;
|
|
|
+ List<SignInReward> signInRewards = signInService.getSignInRewardList().stream().filter(e -> e.getDays() <= _filterDay).collect(Collectors.toList());
|
|
|
+ //如果没有对象,或者对应对象时间为0
|
|
|
+ if (null != signIn) {
|
|
|
+ Integer continueDays = signIn.getContinueDays();
|
|
|
+ // 判断最后签到日期与当前日期是否超过一天
|
|
|
+ LocalDate signInTime = signIn.getUpdateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ LocalDate currTime = LocalDate.now();
|
|
|
+ long daysDiff = ChronoUnit.DAYS.between(signInTime, currTime);
|
|
|
+ if (daysDiff > 1) {
|
|
|
+ // 超过一天, 把连续签到的天数重置为 0,并记录到数据库,
|
|
|
+ // 这一步是重置数据操作
|
|
|
+ signIn.setContinueDays(0);
|
|
|
+ signIn.setUpdateTime(new Date());
|
|
|
+ signInService.addSignIn(signIn);
|
|
|
+ } else {
|
|
|
+ //如果小于或者等于0,判断为当天为签到
|
|
|
+ if(daysDiff <=0){
|
|
|
+ isSignIn = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (continueDays > 7) {
|
|
|
+ //不是默认的list
|
|
|
+ isNewList = false;
|
|
|
+ Integer currentDays = continueDays % _filterDay;
|
|
|
+ currentDays = currentDays == 0 ? _filterDay : currentDays;
|
|
|
+ Integer extraDays = continueDays / _filterDay;
|
|
|
+ for (int i = 0; i < signInRewards.size(); i++) {
|
|
|
+ SignInReward temp = signInRewards.get(i);
|
|
|
+ if (i < currentDays) {
|
|
|
+ list.add(new SignInDTO(i + 1 + extraDays * signInRewards.size(), temp.getDays(), 1, temp.getGold(), temp.getDiamond()));
|
|
|
+ } else {
|
|
|
+ list.add(new SignInDTO(i + 1 + (extraDays - 1) * signInRewards.size(), temp.getDays(), 0, temp.getGold(), temp.getDiamond()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * isNewList 的情况下,continueDays 是小于7的。此时处理flag不需要考虑往后的数值
|
|
|
+ */
|
|
|
+ if (isNewList) {
|
|
|
+ Integer continueDays = 0;
|
|
|
+ if (null != signIn) {
|
|
|
+ continueDays = signIn.getContinueDays();
|
|
|
+ }
|
|
|
+ // 没有签过到
|
|
|
+ for (int i = 0; i < signInRewards.size(); i++) {
|
|
|
+ SignInReward temp = signInRewards.get(i);
|
|
|
+ list.add(new SignInDTO(i + 1, temp.getDays(), i < continueDays ? 1 : 0, temp.getGold(), temp.getDiamond()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Collections.sort(list, new Comparator<SignInDTO>() {
|
|
|
+ @Override
|
|
|
+ public int compare(SignInDTO u1, SignInDTO u2) {
|
|
|
+ int diff = u1.getDayType() - u2.getDayType();
|
|
|
+ if (diff > 0) {
|
|
|
+ return 1;
|
|
|
+ } else if (diff < 0) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ return 0; //相等为0
|
|
|
+ }
|
|
|
+ }); // 按天数排序
|
|
|
+ Map map = new HashMap();
|
|
|
+ map.put("signInList",list);
|
|
|
+ map.put("isSignIn",isSignIn);
|
|
|
+ return ResultVOUtil.success(map);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @GetMapping("/user_sign_in")
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public ResultVO setUserSignIn(@RequestParam(value = "userId") String userId) {
|
|
|
+
|
|
|
+ SignIn signIn = signInService.findByUserId(userId);
|
|
|
+
|
|
|
+ if (null == signIn) {
|
|
|
+ signIn = new SignIn();
|
|
|
+ signIn.setUserId(userId);
|
|
|
+ signIn.setContinueDays(1);
|
|
|
+ signIn.setUpdateTime(new Date());
|
|
|
+ signInService.addSignIn(signIn);
|
|
|
+ } else {/*签过到*/
|
|
|
+ // 判断最后签到日期与当前日期是否超过一天
|
|
|
+ LocalDate signInTime = signIn.getUpdateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
+ LocalDate currTime = LocalDate.now();
|
|
|
+ long daysDiff = ChronoUnit.DAYS.between(signInTime, currTime);
|
|
|
+ if (daysDiff <= 0) {
|
|
|
+ return ResultVOUtil.error(ResultEnum.SIGN_IN_REPEAT.getCode(), ResultEnum.SIGN_IN_REPEAT.getMessage());
|
|
|
+ }
|
|
|
+ if (daysDiff > 1) {
|
|
|
+ // 1, 超过一天, 把连续签到的天数重置为 1
|
|
|
+ signIn.setContinueDays(1);
|
|
|
+ } else {
|
|
|
+ // 2, 没有超过一天, 把连续签到的天数+1
|
|
|
+ signIn.setContinueDays(signIn.getContinueDays() + 1);
|
|
|
+ }
|
|
|
+ signIn.setUpdateTime(new Date());
|
|
|
+ signInService.addSignIn(signIn);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据当前签到的天数,返回对应的奖励,奖励由数据库定义
|
|
|
+ */
|
|
|
+ Integer currentDays = signIn.getContinueDays() % 7;
|
|
|
+ currentDays = currentDays == 0 ? 7 : currentDays;
|
|
|
+ SignInReward signInReward = signInService.getSignInRewardByDays(currentDays);
|
|
|
+ SignInDTO signInDTO = new SignInDTO();
|
|
|
+ signInDTO.setDayType(currentDays);
|
|
|
+ signInDTO.setDay(signIn.getContinueDays());
|
|
|
+ signInDTO.setFlag(1);
|
|
|
+ signInDTO.setGold(signInReward.getGold());
|
|
|
+ signInDTO.setDiamond(signInReward.getDiamond());
|
|
|
+
|
|
|
+ //todo 奖励用户相应信息
|
|
|
+ UserWallets userWallets = userWalletsService.modifyGoldAndDiamondInUserWallets(userId, signInReward.getGold(), signInReward.getDiamond(), true);
|
|
|
+ Map map = new HashMap();
|
|
|
+ map.put("signIn", signInDTO);
|
|
|
+ map.put("userGold", userWallets.getGold());
|
|
|
+ map.put("userDiamond", userWallets.getDiamond());
|
|
|
+ return ResultVOUtil.success(map);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|