diff --git a/epdc-cloud-api/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java b/epdc-cloud-api/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java index 6dfd4ae..31c2a68 100644 --- a/epdc-cloud-api/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java +++ b/epdc-cloud-api/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java @@ -389,4 +389,20 @@ public class ApiAppUserController { public Result getDentityDetail(@LoginUser TokenDto userDetail){ return appUserService.getDentityDetail(userDetail); } + + /** + * 用户签到 + * + * @param userDetail + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @Author zhangyong + * @Date 10:26 2022-01-25 + **/ + @GetMapping("user/sign") + public Result userSign(@LoginUser TokenDto userDetail){ + if(userDetail==null){ + return new Result().error("用户未登录"); + } + return appUserService.userSign(userDetail); + } } diff --git a/epdc-cloud-api/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java b/epdc-cloud-api/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java index a40d56a..591d637 100644 --- a/epdc-cloud-api/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java +++ b/epdc-cloud-api/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java @@ -3,11 +3,7 @@ package com.elink.esua.epdc.feign; import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.commons.tools.constant.ServiceConstant; import com.elink.esua.epdc.commons.tools.utils.Result; -import com.elink.esua.epdc.dto.CachingUserInfoDTO; -import com.elink.esua.epdc.dto.UserDTO; -import com.elink.esua.epdc.dto.UserGridInvitationCodeDTO; -import com.elink.esua.epdc.dto.UserGridRelationDTO; -import com.elink.esua.epdc.dto.UserWxFormIdDTO; +import com.elink.esua.epdc.dto.*; import com.elink.esua.epdc.dto.epdc.form.*; import com.elink.esua.epdc.dto.epdc.result.*; import com.elink.esua.epdc.feign.fallback.UserFeignClientFallback; @@ -458,5 +454,43 @@ public interface UserFeignClient { */ @GetMapping(value = "app-user/partyMember/dentityDetail",consumes = MediaType.APPLICATION_JSON_VALUE) Result getDentityDetail(EpdcAppIdentityDetailFormDTO userDetail); + + /** + * @Description 根据用户ID获取用户签到信息 + * @Author zy + * @Date 2020/7/21 + * @Param [userId] + * @return com.elink.esua.epdc.commons.tools.utils.Result + **/ + @GetMapping(value = "app-user/usersign/getUserSignInfoByUserId/{userId}", consumes = MediaType.APPLICATION_JSON_VALUE) + Result getUserSignInfoByUserId(@PathVariable("userId") String userId); + + /** + * @Description 更新或新增签到时间和连续签到次数 + * @Author zy + * @Date 2020/7/21 + * @Param [userSignDTO] + * @return com.elink.esua.epdc.commons.tools.utils.Result + **/ + @GetMapping(value = "app-user/usersign/saveOrUpdateSignById", consumes = MediaType.APPLICATION_JSON_VALUE) + Result saveOrUpdateSignById(UserSignDTO userSignDTO); + + /** + * @Description 签到加积分操作 + * @Author zy + * @Date 2020/7/21 + * @Param [userSignDTO] + **/ + @GetMapping(value = "app-user/usersign/addSignPoints", consumes = MediaType.APPLICATION_JSON_VALUE) + Result addSignPoints(UserSignDTO userSignDTO); + + /** + * @Description 连续签到加积分 + * @Author zy + * @Date 2020/7/21 + * @Param [userSignDTO] + **/ + @GetMapping(value = "app-user/usersign/addConsequentSignPoints", consumes = MediaType.APPLICATION_JSON_VALUE) + Result addConsequentSignPoints(UserSignDTO userSignDTO); } diff --git a/epdc-cloud-api/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java b/epdc-cloud-api/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java index 30e3334..6b40b00 100644 --- a/epdc-cloud-api/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java +++ b/epdc-cloud-api/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java @@ -4,11 +4,7 @@ import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.commons.tools.constant.ServiceConstant; import com.elink.esua.epdc.commons.tools.utils.ModuleUtils; import com.elink.esua.epdc.commons.tools.utils.Result; -import com.elink.esua.epdc.dto.CachingUserInfoDTO; -import com.elink.esua.epdc.dto.UserDTO; -import com.elink.esua.epdc.dto.UserGridInvitationCodeDTO; -import com.elink.esua.epdc.dto.UserGridRelationDTO; -import com.elink.esua.epdc.dto.UserWxFormIdDTO; +import com.elink.esua.epdc.dto.*; import com.elink.esua.epdc.dto.epdc.form.*; import com.elink.esua.epdc.dto.epdc.result.*; import com.elink.esua.epdc.feign.UserFeignClient; @@ -223,4 +219,24 @@ public class UserFeignClientFallback implements UserFeignClient { public Result getDentityDetail(EpdcAppIdentityDetailFormDTO userDetail) { return ModuleUtils.feignConError(ServiceConstant.EPDC_USER_SERVER,"getDentityDetail",userDetail); } + + @Override + public Result getUserSignInfoByUserId(String userId) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_USER_SERVER, "getUserSignInfoByUserId", userId); + } + + @Override + public Result saveOrUpdateSignById(UserSignDTO userSignDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_USER_SERVER, "updateSignById", userSignDTO); + } + + @Override + public Result addSignPoints(UserSignDTO userSignDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_USER_SERVER, "addSignPoints", userSignDTO); + } + + @Override + public Result addConsequentSignPoints(UserSignDTO userSignDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPDC_USER_SERVER, "addConsequentSignPoints", userSignDTO); + } } diff --git a/epdc-cloud-api/src/main/java/com/elink/esua/epdc/service/AppUserService.java b/epdc-cloud-api/src/main/java/com/elink/esua/epdc/service/AppUserService.java index bdcd030..5c48fda 100644 --- a/epdc-cloud-api/src/main/java/com/elink/esua/epdc/service/AppUserService.java +++ b/epdc-cloud-api/src/main/java/com/elink/esua/epdc/service/AppUserService.java @@ -322,4 +322,13 @@ public interface AppUserService { */ Result getDentityDetail(TokenDto userDetail); + /** + * 用户签到 + * + * @param userDetail + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @Author zhangyong + * @Date 10:27 2022-01-25 + **/ + Result userSign(TokenDto userDetail); } diff --git a/epdc-cloud-api/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java b/epdc-cloud-api/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java index c2261df..067601f 100644 --- a/epdc-cloud-api/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java +++ b/epdc-cloud-api/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java @@ -5,15 +5,13 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import cn.binarywang.wx.miniapp.bean.WxMaUserInfo; import cn.binarywang.wx.miniapp.util.crypt.WxMaCryptUtils; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.elink.esua.epdc.async.GroupTask; import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.common.token.util.CpUserDetailRedis; import com.elink.esua.epdc.commons.tools.constant.NumConstant; -import com.elink.esua.epdc.commons.tools.enums.UserAuthTypeEnum; -import com.elink.esua.epdc.commons.tools.enums.UserSexEnum; -import com.elink.esua.epdc.commons.tools.enums.UserTagEnum; -import com.elink.esua.epdc.commons.tools.enums.YesOrNoEnum; +import com.elink.esua.epdc.commons.tools.enums.*; import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.commons.tools.redis.RedisUtils; import com.elink.esua.epdc.commons.tools.utils.*; @@ -38,6 +36,8 @@ import com.elink.esua.epdc.enums.AppUserStatesEnum; import com.elink.esua.epdc.feign.*; import com.elink.esua.epdc.jwt.JwtTokenProperties; import com.elink.esua.epdc.jwt.JwtTokenUtils; +import com.elink.esua.epdc.modules.points.feign.PointsFeignClient; +import com.elink.esua.epdc.pointcommons.tools.dto.PointsRuleResultDTO; import com.elink.esua.epdc.redis.AppUserRedis; import com.elink.esua.epdc.service.AppUserService; import com.elink.esua.epdc.utils.UserTagUtils; @@ -106,6 +106,9 @@ public class AppUserServiceImpl implements AppUserService { @Autowired private GroupFeignClient groupFeignClient; + @Autowired + private PointsFeignClient pointsFeignClient; + @Autowired private AppVolunteerRankFeignClient appVolunteerRankFeignClient; @@ -1427,4 +1430,54 @@ public class AppUserServiceImpl implements AppUserService { return userFeignClient.getDentityDetail(identityDetailFormDTO); } + @Override + public Result userSign(TokenDto userDetail) { + //获取用户签到信息 + Result userSignInfoResult = userFeignClient.getUserSignInfoByUserId(userDetail.getUserId()); + if(!userSignInfoResult.success()){ + return new Result().error("获取用户签到信息出错!"); + } + UserSignDTO userSignDTO; + //不是空则进行签到信息校验 + if(userSignInfoResult.getData() != null){ + userSignDTO = userSignInfoResult.getData(); + if(DateUtils.format(new Date()).equals(DateUtils.format(userSignDTO.getLastSignTime()))){ + return new Result().error("用户今天已签到!"); + } + userSignDTO.setConsequentSignDays(userSignDTO.getConsequentSignDays() + NumConstant.ONE); + //判断签到日期是否是前天或者更前 若是前天或者更前则连续签到天数修改为1 + if(DateUtil.betweenDay(userSignDTO.getLastSignTime(), new Date(),true) >= NumConstant.TWO){ + userSignDTO.setConsequentSignDays(NumConstant.ONE); + } + userSignDTO.setLastSignTime(new Date()); + //更新签到信息 + Result userSignDTOResult = userFeignClient.saveOrUpdateSignById(userSignDTO); + if(!userSignDTOResult.success()){ + return new Result().error("更新签到信息出错!"); + } + }else{ + userSignDTO = new UserSignDTO(); + userSignDTO.setUserId(userDetail.getUserId()); + userSignDTO.setConsequentSignDays(NumConstant.ONE); + userSignDTO.setLastSignTime(new Date()); + Result userSignDTOResult = userFeignClient.saveOrUpdateSignById(userSignDTO); + if(!userSignDTOResult.success() || userSignDTOResult.getData()==null){ + return new Result().error("新增签到信息出错!"); + } + userSignDTO.setId(userSignDTOResult.getData()+""); + } + //加积分操作 + userFeignClient.addSignPoints(userSignDTO); + //连续签到加积分操作 + Result pointsRuleByBehaviorCode = pointsFeignClient.getPointsRuleByBehaviorCode(BehaviorEnum.USER_CONSEQUENT_SIGN.getValue()); + if(!pointsRuleByBehaviorCode.success() || pointsRuleByBehaviorCode.getData()==null){ + return new Result().error("获取连续签到规则信息出错!"); + } + PointsRuleResultDTO pointsRuleResultDTO = pointsRuleByBehaviorCode.getData(); + //当前连续签到天数如果等于附加值 则加连续签到积分 + if(userSignDTO.getConsequentSignDays() % Integer.valueOf(pointsRuleResultDTO.getAddedVal()) == NumConstant.ZERO){ + userFeignClient.addConsequentSignPoints(userSignDTO); + } + return new Result().ok("您已连续签到"+userSignDTO.getConsequentSignDays()+"天,继续努力吧"); + } }