Browse Source

用户签到+志愿者注册+通知浏览积分

feature/syp_points
songyunpeng 5 years ago
parent
commit
fe299b862a
  1. 20
      esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/enums/BehaviorEnum.java
  2. 15
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java
  3. 3
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiNewsController.java
  4. 1
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/v2/ApiAppUserV2Controller.java
  5. 12
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/PointsFeignClient.java
  6. 40
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java
  7. 6
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/PointsFeignClientFallback.java
  8. 20
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java
  9. 8
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AppUserService.java
  10. 70
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java
  11. 17
      esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/controller/EpdcAppPointsController.java
  12. 2
      esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/mq/PointsModifyConsumer.java
  13. 87
      esua-epdc/epdc-module/epdc-user/epdc-user-client/src/main/java/com/elink/esua/epdc/dto/UserSignDTO.java
  14. 7
      esua-epdc/epdc-module/epdc-user/epdc-user-client/src/main/java/com/elink/esua/epdc/dto/epdc/result/EpdcUserInfoResultDTO.java
  15. 140
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/controller/UserSignController.java
  16. 41
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/dao/UserSignDao.java
  17. 56
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/entity/UserSignEntity.java
  18. 65
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/excel/UserSignExcel.java
  19. 47
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/redis/UserSignRedis.java
  20. 112
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/service/UserSignService.java
  21. 122
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/service/impl/UserSignServiceImpl.java
  22. 4
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/resources/mapper/UserDao.xml
  23. 23
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/resources/mapper/UserSignDao.xml

20
esua-epdc/epdc-commons/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/enums/BehaviorEnum.java

@ -268,7 +268,25 @@ public enum BehaviorEnum {
/**
* 活动积分
*/
JOIN_ACT("join_act");
JOIN_ACT("join_act"),
/**
* 签到
*/
USER_SIGN("user_sign"),
/**
* 连续签到
*/
USER_CONSEQUENT_SIGN("user_consequent_sign"),
/**
* 通知浏览
*/
NOTICE_BROWSE("notice_browse"),
/**
* 志愿者完善信息
*/
VOLUNTEER_PERFECT_INFO("volunteer_perfect_info")
;
private String value;

15
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiAppUserController.java

@ -369,4 +369,19 @@ public class ApiAppUserController {
ValidatorUtils.validateEntity(formDTO);
return appUserService.listUserGradesRanking(userDetail, formDTO);
}
/**
* @Description 用户签到
* @Author songyunpeng
* @Date 2020/7/21
* @Param [userDetail]
* @return com.elink.esua.epdc.commons.tools.utils.Result
**/
@GetMapping("user/sign")
public Result userSign(@LoginUser TokenDto userDetail){
if(userDetail==null){
return new Result().error("用户未登录");
}
return appUserService.userSign(userDetail);
}
}

3
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiNewsController.java

@ -51,7 +51,8 @@ public class ApiNewsController {
* @date 2019/9/6 14:58
*/
@GetMapping("notice/detail/{noticeId}")
public Result<EpdcNoticeDetailResultDTO> getNoticeDetail(@PathVariable("noticeId") String noticeId) {
@RecordUserBehavior(behavior = BehaviorEnum.NOTICE_BROWSE,referenceId = "#{noticeId}",userId = "#{userDetail.getUserId}")
public Result<EpdcNoticeDetailResultDTO> getNoticeDetail(@LoginUser TokenDto userDetail,@PathVariable("noticeId") String noticeId) {
return newsService.getNoticeDetail(noticeId);
}

1
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/v2/ApiAppUserV2Controller.java

@ -102,6 +102,7 @@ public class ApiAppUserV2Controller {
* @Date 09:49 2020-05-26
**/
@PostMapping("volunteer/" + Constant.VERSION_CONTROL + "/authenticate")
@RecordUserBehavior(behavior = BehaviorEnum.VOLUNTEER_PERFECT_INFO,referenceId = "#{tokenDto.getUserId}",userId = "#{tokenDto.getUserId}")
public Result volunteerAuthenticate(@LoginUser TokenDto tokenDto, @RequestBody EpdcCompleteVolunteerInfoV2FormDTO formDto) {
ValidatorUtils.validateEntity(formDto);
return appUserService.volunteerV2Authenticate(tokenDto, formDto);

12
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/PointsFeignClient.java

@ -7,9 +7,11 @@ import com.elink.esua.epdc.dto.form.EpdcAppPointsRecordFormDTO;
import com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO;
import com.elink.esua.epdc.dto.result.EpdcAppPointsRecordResultDTO;
import com.elink.esua.epdc.feign.fallback.PointsFeignClientFallback;
import com.elink.esua.epdc.pointcommons.tools.dto.PointsRuleResultDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
@ -48,4 +50,14 @@ public interface PointsFeignClient {
*/
@GetMapping(value = "points/epdc-app/points/pointsRanking/list", consumes = MediaType.APPLICATION_JSON_VALUE)
Result<EpdcAppPointsRankingResultDTO> listPointsRankingFeignClient(EpdcAppPointsRankingFormDTO formDto);
/**
* @Description 根据动作编码获取积分规则
* @Author songyunpeng
* @Date 2020/7/21
* @Param [behaviorCode]
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.result.PointsRuleResultDTO>
**/
@GetMapping(value = "points/epdc-app/points/getPointsRuleByBehaviorCode/{behaviorCode}", consumes = MediaType.APPLICATION_JSON_VALUE)
Result<PointsRuleResultDTO> getPointsRuleByBehaviorCode (@PathVariable("behaviorCode") String behaviorCode);
}

40
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java

@ -442,4 +442,44 @@ public interface UserFeignClient {
**/
@GetMapping(value = "app-user/epdc-app/user/gradeRanking/list", consumes = MediaType.APPLICATION_JSON_VALUE)
Result<EpdcAppUserGradeRankingResultDTO> selectListUserGradesRanking(EpdcAppUserGradeRankingFormDTO formDTO);
/**
* @Description 根据用户ID获取用户签到信息
* @Author songyunpeng
* @Date 2020/7/21
* @Param [userId]
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.UserSignDTO>
**/
@GetMapping(value = "app-user/usersign/getUserSignInfoByUserId/{userId}", consumes = MediaType.APPLICATION_JSON_VALUE)
Result<UserSignDTO> getUserSignInfoByUserId(@PathVariable("userId") String userId);
/**
* @Description 更新或新增签到时间和连续签到次数
* @Author songyunpeng
* @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 songyunpeng
* @Date 2020/7/21
* @Param [userSignDTO]
**/
@GetMapping(value = "app-user/usersign/addSignPoints", consumes = MediaType.APPLICATION_JSON_VALUE)
Result addSignPoints(UserSignDTO userSignDTO);
/**
* @Description 连续签到加积分
* @Author songyunpeng
* @Date 2020/7/21
* @Param [userSignDTO]
**/
@GetMapping(value = "app-user/usersign/addConsequentSignPoints", consumes = MediaType.APPLICATION_JSON_VALUE)
Result addConsequentSignPoints(UserSignDTO userSignDTO);
}

6
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/PointsFeignClientFallback.java

@ -8,6 +8,7 @@ import com.elink.esua.epdc.dto.form.EpdcAppPointsRecordFormDTO;
import com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO;
import com.elink.esua.epdc.dto.result.EpdcAppPointsRecordResultDTO;
import com.elink.esua.epdc.feign.PointsFeignClient;
import com.elink.esua.epdc.pointcommons.tools.dto.PointsRuleResultDTO;
import org.springframework.stereotype.Component;
import java.util.List;
@ -29,4 +30,9 @@ public class PointsFeignClientFallback implements PointsFeignClient {
public Result<EpdcAppPointsRankingResultDTO> listPointsRankingFeignClient(EpdcAppPointsRankingFormDTO formDto) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_POINTS_SERVER, "listPointsRankingFeignClient", formDto);
}
@Override
public Result<PointsRuleResultDTO> getPointsRuleByBehaviorCode(String behaviorCode) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_POINTS_SERVER, "getPointsRuleByBehaviorCode", behaviorCode);
}
}

20
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java

@ -212,4 +212,24 @@ public class UserFeignClientFallback implements UserFeignClient {
public Result<EpdcAppUserGradeRankingResultDTO> selectListUserGradesRanking(EpdcAppUserGradeRankingFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_USER_SERVER, "selectListUserGradesRanking", "formDTO");
}
@Override
public Result<UserSignDTO> 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);
}
}

8
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/AppUserService.java

@ -310,4 +310,12 @@ public interface AppUserService {
* @Date 10:59 2020-06-24
**/
Result<EpdcAppUserGradeRankingResultDTO> listUserGradesRanking(TokenDto userDetail, EpdcAppUserGradeRankingFormDTO formDTO);
/**
* @Description 用户签到
* @Author songyunpeng
* @Date 2020/7/21
* @Param [userDetail]
* @return com.elink.esua.epdc.commons.tools.utils.Result
**/
Result userSign(TokenDto userDetail);
}

70
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java

@ -5,16 +5,15 @@ 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.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.elink.esua.epdc.async.GroupTask;
import com.elink.esua.epdc.async.PartyGroupTask;
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.*;
@ -22,7 +21,6 @@ import com.elink.esua.epdc.dto.*;
import com.elink.esua.epdc.dto.enums.GroupUserStateEnum;
import com.elink.esua.epdc.dto.epdc.EpdcCompleteAppUserDTO;
import com.elink.esua.epdc.dto.epdc.EpdcGridLeaderRegisterDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcGridLeaderRegisterFormDTO;
import com.elink.esua.epdc.dto.epdc.GridLeaderRegisterDTO;
import com.elink.esua.epdc.dto.epdc.form.*;
import com.elink.esua.epdc.dto.epdc.form.v2.EpdcCompleteVolunteerInfoV2FormDTO;
@ -31,13 +29,17 @@ import com.elink.esua.epdc.dto.form.*;
import com.elink.esua.epdc.dto.form.v2.EpdcCompleteUserInfoFormV2DTO;
import com.elink.esua.epdc.dto.group.form.GroupUserFormDTO;
import com.elink.esua.epdc.dto.group.form.GroupUserPartyMemberFormDTO;
import com.elink.esua.epdc.dto.result.EpdcAppRegisterCallbackDTO;
import com.elink.esua.epdc.dto.result.EpdcAppAuthorizationDTO;
import com.elink.esua.epdc.dto.result.EpdcAppRegisterCallbackDTO;
import com.elink.esua.epdc.dto.result.EpdcCompleteUserInfoDTO;
import com.elink.esua.epdc.enums.*;
import com.elink.esua.epdc.enums.AppUserAuditStateEnum;
import com.elink.esua.epdc.enums.AppUserRegisterSourceEnum;
import com.elink.esua.epdc.enums.AppUserRegisterWayEnum;
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.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;
@ -114,6 +116,9 @@ public class AppUserServiceImpl implements AppUserService {
@Autowired
private PartyGroupFeignClient partyGroupFeignClient;
@Autowired
private PointsFeignClient pointsFeignClient;
//private static String USER_FACE = "https://epdc.elinkchina.com.cn/esua-epdc/static/default/default_user_face.png";
private static String USER_FACE = "https://epdc-shibei.elinkservice.cn/epdcFile/M00/00/00/CgUipV3wgl6Afm4cAAAa8QfEb00266_big.png";
@ -1528,4 +1533,55 @@ public class AppUserServiceImpl implements AppUserService {
return userFeignClient.selectListUserGradesRanking(formDTO);
}
@Override
public Result userSign(TokenDto userDetail) {
//获取用户签到信息
Result<UserSignDTO> userSignInfoResult = userFeignClient.getUserSignInfoByUserId(userDetail.getUserId());
if(!userSignInfoResult.success()){
return new Result().error("获取用户签到信息出错!");
}
UserSignDTO userSignDTO = new 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()+1);
//判断签到日期是否是前天或者更前 若是前天或者更前则连续签到天数修改为1
if(DateUtil.between(userSignDTO.getLastSignTime(), new Date(), DateUnit.DAY) >= 2){
userSignDTO.setConsequentSignDays(1);
}
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(1);
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<PointsRuleResultDTO> 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()) == 0){
userFeignClient.addConsequentSignPoints(userSignDTO);
}
return new Result().ok("您已连续签到"+userSignDTO.getConsequentSignDays()+"天");
}
}

17
esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/controller/EpdcAppPointsController.java

@ -6,7 +6,9 @@ import com.elink.esua.epdc.dto.form.EpdcAppPointsRankingFormDTO;
import com.elink.esua.epdc.dto.form.EpdcAppPointsRecordFormDTO;
import com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO;
import com.elink.esua.epdc.dto.result.EpdcAppPointsRecordResultDTO;
import com.elink.esua.epdc.dto.result.PointsRuleResultDTO;
import com.elink.esua.epdc.service.PointsLogsService;
import com.elink.esua.epdc.service.PointsRuleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -24,6 +26,8 @@ public class EpdcAppPointsController {
@Autowired
private PointsLogsService pointsLogsService;
@Autowired
private PointsRuleService pointsRuleService;
/**
* @Description: 当前登录用户 积分记录接口
@ -50,4 +54,17 @@ public class EpdcAppPointsController {
EpdcAppPointsRankingResultDTO list = pointsLogsService.listPointsRanking(formDto);
return new Result<EpdcAppPointsRankingResultDTO>().ok(list);
}
/**
* @Description 根据动作编码获取积分规则
* @Author songyunpeng
* @Date 2020/7/21
* @Param [behaviorCode]
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.result.PointsRuleResultDTO>
**/
@GetMapping("getPointsRuleByBehaviorCode/{behaviorCode}")
public Result<PointsRuleResultDTO> getPointsRuleByBehaviorCode (@PathVariable("behaviorCode") String behaviorCode){
PointsRuleResultDTO pointsRuleByBehaviorCode = pointsRuleService.getPointsRuleByBehaviorCode(behaviorCode);
return new Result<PointsRuleResultDTO>().ok(pointsRuleByBehaviorCode);
}
}

2
esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/mq/PointsModifyConsumer.java

@ -110,7 +110,7 @@ public class PointsModifyConsumer implements RocketMQListener<MessageExt> {
pointsLogsFormDTO.setReferenceId(dto.getReferenceId());
PointsRuleResultDTO pointsRuleResultDTO = pointsRuleService.getPointsRuleByBehaviorCode(dto.getBehavior());
if (pointsRuleResultDTO == null) {
return "获取积分负责失败";
return "获取积分规则失败";
}
if(pointsRuleResultDTO.getUpperLimitVal() == 0){
return "积分限值为0,无法加分";

87
esua-epdc/epdc-module/epdc-user/epdc-user-client/src/main/java/com/elink/esua/epdc/dto/UserSignDTO.java

@ -0,0 +1,87 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.elink.esua.epdc.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 用户签到表
*
* @author qu qu@elink-cn.com
* @since v1.0.0 2020-07-21
*/
@Data
public class UserSignDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 用户ID
*/
private String userId;
/**
* 连续签到天数
*/
private Integer consequentSignDays;
/**
* 最近签到时间
*/
private Date lastSignTime;
/**
* 删除标记
*/
private String delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

7
esua-epdc/epdc-module/epdc-user/epdc-user-client/src/main/java/com/elink/esua/epdc/dto/epdc/result/EpdcUserInfoResultDTO.java

@ -30,4 +30,11 @@ public class EpdcUserInfoResultDTO implements Serializable {
* 用户积分等级
*/
private Integer grade;
/**
* 用户今天是否签到
*/
private Integer isSignUp;
}

140
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/controller/UserSignController.java

@ -0,0 +1,140 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.elink.esua.epdc.controller;
import com.elink.esua.epdc.commons.tools.enums.BehaviorEnum;
import com.elink.esua.epdc.commons.tools.page.PageData;
import com.elink.esua.epdc.commons.tools.utils.ExcelUtils;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.commons.tools.validator.AssertUtils;
import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils;
import com.elink.esua.epdc.commons.tools.validator.group.AddGroup;
import com.elink.esua.epdc.commons.tools.validator.group.DefaultGroup;
import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup;
import com.elink.esua.epdc.dto.UserSignDTO;
import com.elink.esua.epdc.excel.UserSignExcel;
import com.elink.esua.epdc.pointcommons.tools.annotation.RecordUserBehavior;
import com.elink.esua.epdc.service.UserSignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* 用户签到表
*
* @author qu qu@elink-cn.com
* @since v1.0.0 2020-07-21
*/
@RestController
@RequestMapping("usersign")
public class UserSignController {
@Autowired
private UserSignService userSignService;
@GetMapping("page")
public Result<PageData<UserSignDTO>> page(@RequestParam Map<String, Object> params){
PageData<UserSignDTO> page = userSignService.page(params);
return new Result<PageData<UserSignDTO>>().ok(page);
}
@GetMapping("{id}")
public Result<UserSignDTO> get(@PathVariable("id") String id){
UserSignDTO data = userSignService.get(id);
return new Result<UserSignDTO>().ok(data);
}
@PostMapping
public Result save(@RequestBody UserSignDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
userSignService.save(dto);
return new Result();
}
@PutMapping
public Result update(@RequestBody UserSignDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
userSignService.update(dto);
return new Result();
}
@DeleteMapping
public Result delete(@RequestBody String[] ids){
//效验数据
AssertUtils.isArrayEmpty(ids, "id");
userSignService.delete(ids);
return new Result();
}
@GetMapping("export")
public void export(@RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
List<UserSignDTO> list = userSignService.list(params);
ExcelUtils.exportExcelToTarget(response, null, list, UserSignExcel.class);
}
/**
* @Description 根据用户ID获取用户签到信息
* @Author songyunpeng
* @Date 2020/7/21
* @Param [userId]
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.UserSignDTO>
**/
@GetMapping("getUserSignInfoByUserId/{userId}")
public Result<UserSignDTO> getUserSignInfoByUserId(@PathVariable("userId") String userId){
return new Result<UserSignDTO>().ok(userSignService.getUserSignInfoByUserId(userId));
}
/**
* @Description 更新或新增签到时间和连续签到次数
* @Author songyunpeng
* @Date 2020/7/21
* @Param [userSignDTO]
* @return com.elink.esua.epdc.commons.tools.utils.Result
**/
@GetMapping("saveOrUpdateSignById")
public Result saveOrUpdateSignById(@RequestBody UserSignDTO userSignDTO){
return userSignService.saveOrUpdateSignById(userSignDTO);
}
/**
* @Description 签到加积分操作
* @Author songyunpeng
* @Date 2020/7/21
* @Param [userSignDTO]
**/
@GetMapping("addSignPoints")
@RecordUserBehavior(behavior = BehaviorEnum.USER_SIGN,referenceId = "#{userSignDTO.getId}",userId = "#{userSignDTO.getUserId}")
public Result addSignPoints(@RequestBody UserSignDTO userSignDTO){
return new Result();
}
/**
* @Description 连续签到加积分
* @Author songyunpeng
* @Date 2020/7/21
* @Param [userSignDTO]
**/
@GetMapping("addConsequentSignPoints")
@RecordUserBehavior(behavior = BehaviorEnum.USER_CONSEQUENT_SIGN,referenceId = "#{userSignDTO.getId}",userId = "#{userSignDTO.getUserId}")
public Result addConsequentSignPoints(@RequestBody UserSignDTO userSignDTO){
return new Result();
}
}

41
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/dao/UserSignDao.java

@ -0,0 +1,41 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.elink.esua.epdc.dao;
import com.elink.esua.epdc.commons.mybatis.dao.BaseDao;
import com.elink.esua.epdc.dto.UserSignDTO;
import com.elink.esua.epdc.entity.UserSignEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 用户签到表
*
* @author qu qu@elink-cn.com
* @since v1.0.0 2020-07-21
*/
@Mapper
public interface UserSignDao extends BaseDao<UserSignEntity> {
/**
* @Description 根据用户ID获取用户签到信息
* @Author songyunpeng
* @Date 2020/7/21
* @Param [userId]
* @return com.elink.esua.epdc.dto.UserSignDTO
**/
UserSignDTO selectUserSignInfoByUserId(String userId);
}

56
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/entity/UserSignEntity.java

@ -0,0 +1,56 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.elink.esua.epdc.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.elink.esua.epdc.commons.mybatis.entity.BaseEpdcEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 用户签到表
*
* @author qu qu@elink-cn.com
* @since v1.0.0 2020-07-21
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("epdc_user_sign")
public class UserSignEntity extends BaseEpdcEntity {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private String userId;
/**
* 连续签到天数
*/
private Integer consequentSignDays;
/**
* 最近签到时间
*/
private Date lastSignTime;
}

65
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/excel/UserSignExcel.java

@ -0,0 +1,65 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.elink.esua.epdc.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
import java.util.Date;
/**
* 用户签到表
*
* @author qu qu@elink-cn.com
* @since v1.0.0 2020-07-21
*/
@Data
public class UserSignExcel {
@Excel(name = "主键")
private String id;
@Excel(name = "用户ID")
private String userId;
@Excel(name = "连续签到天数")
private Integer consequentSignDays;
@Excel(name = "最近签到时间")
private Date lastSignTime;
@Excel(name = "删除标记")
private String delFlag;
@Excel(name = "乐观锁")
private Integer revision;
@Excel(name = "创建人")
private String createdBy;
@Excel(name = "创建时间")
private Date createdTime;
@Excel(name = "更新人")
private String updatedBy;
@Excel(name = "更新时间")
private Date updatedTime;
}

47
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/redis/UserSignRedis.java

@ -0,0 +1,47 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.elink.esua.epdc.redis;
import com.elink.esua.epdc.commons.tools.redis.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 用户签到表
*
* @author qu qu@elink-cn.com
* @since v1.0.0 2020-07-21
*/
@Component
public class UserSignRedis {
@Autowired
private RedisUtils redisUtils;
public void delete(Object[] ids) {
}
public void set(){
}
public String get(String id){
return null;
}
}

112
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/service/UserSignService.java

@ -0,0 +1,112 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.elink.esua.epdc.service;
import com.elink.esua.epdc.commons.mybatis.service.BaseService;
import com.elink.esua.epdc.commons.tools.page.PageData;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.UserSignDTO;
import com.elink.esua.epdc.entity.UserSignEntity;
import java.util.List;
import java.util.Map;
/**
* 用户签到表
*
* @author qu qu@elink-cn.com
* @since v1.0.0 2020-07-21
*/
public interface UserSignService extends BaseService<UserSignEntity> {
/**
* 默认分页
*
* @param params
* @return PageData<UserSignDTO>
* @author generator
* @date 2020-07-21
*/
PageData<UserSignDTO> page(Map<String, Object> params);
/**
* 默认查询
*
* @param params
* @return java.util.List<UserSignDTO>
* @author generator
* @date 2020-07-21
*/
List<UserSignDTO> list(Map<String, Object> params);
/**
* 单条查询
*
* @param id
* @return UserSignDTO
* @author generator
* @date 2020-07-21
*/
UserSignDTO get(String id);
/**
* 默认保存
*
* @param dto
* @return void
* @author generator
* @date 2020-07-21
*/
void save(UserSignDTO dto);
/**
* 默认更新
*
* @param dto
* @return void
* @author generator
* @date 2020-07-21
*/
void update(UserSignDTO dto);
/**
* 批量删除
*
* @param ids
* @return void
* @author generator
* @date 2020-07-21
*/
void delete(String[] ids);
/**
* @Description 根据用户ID获取用户签到信息
* @Author songyunpeng
* @Date 2020/7/21
* @Param [userId]
* @return com.elink.esua.epdc.dto.UserSignDTO
**/
UserSignDTO getUserSignInfoByUserId(String userId);
/**
* @Description 更新签到时间和连续签到次数
* @Author songyunpeng
* @Date 2020/7/21
* @Param [userSignDTO]
* @return void
**/
Result saveOrUpdateSignById(UserSignDTO userSignDTO);
}

122
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/service/impl/UserSignServiceImpl.java

@ -0,0 +1,122 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.elink.esua.epdc.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl;
import com.elink.esua.epdc.commons.tools.constant.FieldConstant;
import com.elink.esua.epdc.commons.tools.page.PageData;
import com.elink.esua.epdc.commons.tools.utils.ConvertUtils;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dao.UserSignDao;
import com.elink.esua.epdc.dto.UserSignDTO;
import com.elink.esua.epdc.entity.UserSignEntity;
import com.elink.esua.epdc.redis.UserSignRedis;
import com.elink.esua.epdc.service.UserSignService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 用户签到表
*
* @author qu qu@elink-cn.com
* @since v1.0.0 2020-07-21
*/
@Service
public class UserSignServiceImpl extends BaseServiceImpl<UserSignDao, UserSignEntity> implements UserSignService {
@Autowired
private UserSignRedis userSignRedis;
@Override
public PageData<UserSignDTO> page(Map<String, Object> params) {
IPage<UserSignEntity> page = baseDao.selectPage(
getPage(params, FieldConstant.CREATED_TIME, false),
getWrapper(params)
);
return getPageData(page, UserSignDTO.class);
}
@Override
public List<UserSignDTO> list(Map<String, Object> params) {
List<UserSignEntity> entityList = baseDao.selectList(getWrapper(params));
return ConvertUtils.sourceToTarget(entityList, UserSignDTO.class);
}
private QueryWrapper<UserSignEntity> getWrapper(Map<String, Object> params){
String id = (String)params.get(FieldConstant.ID_HUMP);
QueryWrapper<UserSignEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id);
return wrapper;
}
@Override
public UserSignDTO get(String id) {
UserSignEntity entity = baseDao.selectById(id);
return ConvertUtils.sourceToTarget(entity, UserSignDTO.class);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void save(UserSignDTO dto) {
UserSignEntity entity = ConvertUtils.sourceToTarget(dto, UserSignEntity.class);
insert(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(UserSignDTO dto) {
UserSignEntity entity = ConvertUtils.sourceToTarget(dto, UserSignEntity.class);
updateById(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(String[] ids) {
// 逻辑删除(@TableLogic 注解)
baseDao.deleteBatchIds(Arrays.asList(ids));
}
@Override
public UserSignDTO getUserSignInfoByUserId(String userId) {
return baseDao.selectUserSignInfoByUserId(userId);
}
@Override
public Result saveOrUpdateSignById(UserSignDTO userSignDTO) {
UserSignEntity entity = ConvertUtils.sourceToTarget(userSignDTO, UserSignEntity.class);
if(StringUtils.isNotBlank(entity.getId())){
updateById(entity);
return new Result();
} else {
insert(entity);
return new Result().ok(entity.getId());
}
}
}

4
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/resources/mapper/UserDao.xml

@ -28,13 +28,15 @@
WHEN IFNULL(eu.POINTS_TOTLE,0) &lt;= 0 THEN 0
ELSE
IFNULL(FLOOR(IFNULL(eu.POINTS_TOTLE,0) / IFNULL(g.POINTS,0) * IFNULL(g.GRADE,0)),0)
END grade
END grade,
date_format(eus.LAST_SIGN_TIME,'%y-%m-%d') = CURDATE() as isSignUp
FROM
epdc_user eu
Left Join (select * from epdc_user_grid_relation where USER_ID = #{id} order by UPDATED_TIME desc limit 0,1) eugr
on(eu.id=eugr.USER_ID)
left join epdc_points_grade g ON 1=1 AND g.DEL_FLAG = 0
LEFT JOIN epdc_volunteer_info v ON eu.ID = v.USER_ID
left join epdc_user_sign eus on eus.USER_ID = eu.ID and eus.DEL_FLAG ='0'
WHERE
eu.ID = #{id}
</select>

23
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/resources/mapper/UserSignDao.xml

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elink.esua.epdc.dao.UserSignDao">
<resultMap type="com.elink.esua.epdc.entity.UserSignEntity" id="userSignMap">
<result property="id" column="ID"/>
<result property="userId" column="USER_ID"/>
<result property="consequentSignDays" column="CONSEQUENT_SIGN_DAYS"/>
<result property="lastSignTime" column="LAST_SIGN_TIME"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
<select id="selectUserSignInfoByUserId" resultType="com.elink.esua.epdc.dto.UserSignDTO">
select ID,USER_ID,CONSEQUENT_SIGN_DAYS,LAST_SIGN_TIME from epdc_user_sign where DEL_FLAG = '0'
</select>
</mapper>
Loading…
Cancel
Save