提交 ace26f91 作者: 张小凤

SignInCo(add)

上级 e28a46d8
package com.mmc.iuav.user.model.dto.signin;
import com.mmc.iuav.user.model.vo.signin.UserContinuousCheckInVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Min;
import java.util.List;
/**
* @Author small
* @Date 2023/10/13 10:57
* @Version 1.0
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class SignInDTO {
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "是否启用",example = "true 启用 false 不启用")
private Boolean status;
@ApiModelProperty(value = "签到周期",example = "7")
@Min(value = 7,message = "最小是7")
private Integer period;
@ApiModelProperty(value = "每日签到赠送奖励积分",example = "5")
private Integer integral;
@ApiModelProperty(value = "连续签到信息")
private List<UserContinuousCheckInVO> userContinuousCheckInVO;
}
package com.mmc.iuav.user.model.vo.signin;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author small
* @Date 2023/10/13 11:05
* @Version 1.0
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class AppSignInVO {
@ApiModelProperty(value = "",hidden = true)
private Integer id;
@ApiModelProperty(value = "用户id",example = "1",hidden = true)
private Integer userAccountId;
@ApiModelProperty(hidden = true)
private Integer signInDays;
@ApiModelProperty(value = "签到时间",example = "2023-10-13")
private String signTime;
}
package com.mmc.iuav.user.model.vo.signin;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.cglib.core.TinyBitSet;
import javax.validation.constraints.Min;
import java.util.List;
/**
* @Author small
* @Date 2023/10/13 9:38
* @Version 1.0
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class SignInVO {
@ApiModelProperty(value = "修改是需要传id",example = "2")
private Integer id;
@ApiModelProperty(value = "是否启用",example = "true 启用 false 不启用")
private Boolean status;
@ApiModelProperty(value = "签到周期",example = "7")
@Min(value = 7,message = "最小是7")
private Integer period;
@ApiModelProperty(value = "每日签到赠送奖励积分",example = "5")
private Integer integral;
@ApiModelProperty(value = "连续签到信息")
private List<UserContinuousCheckInVO> userContinuousCheckInVO;
}
package com.mmc.iuav.user.model.vo.signin;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author small
* @Date 2023/10/13 9:47
* @Version 1.0
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class UserContinuousCheckInVO {
@ApiModelProperty(value = "id",hidden = true)
private Integer signInId;
@ApiModelProperty(value = "连续签到天数",example = "2")
private Integer numberOfDays;
@ApiModelProperty(value = "奖励积分",example = "1")
private Integer bonusPoints;
@ApiModelProperty(value = "id",hidden = true)
private Integer id;
}
package com.mmc.iuav.user.controller.signin;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.controller.BaseController;
import com.mmc.iuav.user.entity.signin.SignInDO;
import com.mmc.iuav.user.entity.signin.SignInRecordDO;
import com.mmc.iuav.user.model.dto.signin.SignInDTO;
import com.mmc.iuav.user.model.vo.signin.AppSignInVO;
import com.mmc.iuav.user.model.vo.signin.SignInVO;
import com.mmc.iuav.user.service.signin.SignInService;
import io.jsonwebtoken.SigningKeyResolver;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Base64;
import java.util.List;
/**
* @Author small
* @Date 2023/10/13 9:32
* @Version 1.0
*/
@RestController
@Api(tags = "签到")
public class SignInController extends BaseController {
@Autowired
private SignInService signInService;
@ApiOperation("后台——签到调整")
@PostMapping("/insertSignIn")
public ResultBody SignIn(@RequestBody SignInVO signInVO, HttpServletRequest request){
return signInService.SignIn(signInVO);
}
@ApiOperation("小程序签到列表")
@GetMapping("/SignInList")
public ResultBody<SignInDTO> SignInList(HttpServletRequest request){
List<SignInDTO> signInDOS = signInService.SignInList();
return ResultBody.success(signInDOS);
}
@ApiOperation("小程序签到")
@PostMapping("/appSignIn")
public ResultBody appSignIn(HttpServletRequest request, @RequestBody AppSignInVO appSignInVO){
Integer userAccountId = this.getUserLoginInfoFromRedis(request).getUserAccountId();
appSignInVO.setUserAccountId(userAccountId);
return signInService.appSignIn(appSignInVO);
}
@ApiOperation("小程序签到记录")
@GetMapping("/signInRecord")
public ResultBody<SignInRecordDO> signInRecord(HttpServletRequest request){
Integer userAccountId = this.getUserLoginInfoFromRedis(request).getUserAccountId();
return ResultBody.success(signInService.signInRecord(userAccountId));
}
}
package com.mmc.iuav.user.dao.signin;
import com.mmc.iuav.user.entity.signin.SignInDO;
import com.mmc.iuav.user.entity.signin.SignInRecordDO;
import com.mmc.iuav.user.entity.signin.UserAppSignInDO;
import com.mmc.iuav.user.model.vo.signin.AppSignInVO;
import com.mmc.iuav.user.model.vo.signin.SignInVO;
import com.mmc.iuav.user.model.vo.signin.UserContinuousCheckInVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @Author small
* @Date 2023/10/13 9:35
* @Version 1.0
*/
@Mapper
public interface SignInDao {
void SignIn(SignInDO signInDO);
void CheckIn(UserContinuousCheckInVO continuousCheckInVO);
int update(SignInDO signInDO);
void remove(Integer id);
List<SignInDO> SignInList();
UserAppSignInDO selectUserAppSignIn(AppSignInVO appSignInVO);
void userAppSignIn(AppSignInVO appSignInVO);
void updateUserAppSignIn(AppSignInVO appSignInVO);
void deleteSignInRecord(AppSignInVO appSignInVO);
void insertSignInRecord(AppSignInVO appSignInVO);
void updateUserAppSignInD(AppSignInVO appSignInVO);
List<SignInRecordDO> signInRecord(Integer userAccountId);
}
package com.mmc.iuav.user.entity.signin;
import com.mmc.iuav.user.model.dto.signin.SignInDTO;
import com.mmc.iuav.user.model.vo.signin.SignInVO;
import com.mmc.iuav.user.model.vo.signin.UserContinuousCheckInVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Min;
import java.util.List;
/**
* @Author small
* @Date 2023/10/13 9:51
* @Version 1.0
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class SignInDO {
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "是否启用",example = "true 启用 false 不启用")
private Boolean status;
@ApiModelProperty(value = "签到周期",example = "7")
@Min(value = 7,message = "最小是7")
private Integer period;
@ApiModelProperty(value = "每日签到赠送奖励积分",example = "5")
private Integer integral;
@ApiModelProperty(value = "连续签到信息")
private List<UserContinuousCheckInVO> userContinuousCheckInVO;
public SignInDO(SignInVO signInVO){
this.id=signInVO.getId();
this.status=signInVO.getStatus();
this.period= signInVO.getPeriod();
this.integral= signInVO.getIntegral();
this.userContinuousCheckInVO=signInVO.getUserContinuousCheckInVO();
}
public SignInDTO buildSignInDTO(){
return SignInDTO.builder()
.id(this.id)
.integral(this.integral)
.period(this.period)
.status(this.status)
.userContinuousCheckInVO(userContinuousCheckInVO)
.build();
}
}
package com.mmc.iuav.user.entity.signin;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author small
* @Date 2023/10/16 9:34
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SignInRecordDO {
@ApiModelProperty(value = "签到用户")
private Integer userAccountId;
@ApiModelProperty(value = "签到时间")
private String signInTime;
}
package com.mmc.iuav.user.entity.signin;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author small
* @Date 2023/10/13 11:32
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserAppSignInDO {
@ApiModelProperty(value = "上一次签到时间")
private String signTime;
@ApiModelProperty(value = "签到天数")
private Integer signInDays;
@ApiModelProperty(value = "签到用户")
private Integer userAccountId;
}
package com.mmc.iuav.user.service.signin;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.entity.signin.SignInDO;
import com.mmc.iuav.user.entity.signin.SignInRecordDO;
import com.mmc.iuav.user.model.dto.signin.SignInDTO;
import com.mmc.iuav.user.model.vo.signin.AppSignInVO;
import com.mmc.iuav.user.model.vo.signin.SignInVO;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author small
* @Date 2023/10/13 9:34
* @Version 1.0
*/
public interface SignInService {
ResultBody SignIn(SignInVO signInVO);
List<SignInDTO> SignInList();
ResultBody appSignIn(AppSignInVO appSignInVO);
List<SignInRecordDO> signInRecord(Integer userAccountId);
}
package com.mmc.iuav.user.service.signin.impl;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.dao.signin.SignInDao;
import com.mmc.iuav.user.entity.signin.SignInDO;
import com.mmc.iuav.user.entity.signin.SignInRecordDO;
import com.mmc.iuav.user.entity.signin.UserAppSignInDO;
import com.mmc.iuav.user.model.dto.signin.SignInDTO;
import com.mmc.iuav.user.model.vo.signin.AppSignInVO;
import com.mmc.iuav.user.model.vo.signin.SignInVO;
import com.mmc.iuav.user.model.vo.signin.UserContinuousCheckInVO;
import com.mmc.iuav.user.model.vo.userpoints.ChangeUserPointVO;
import com.mmc.iuav.user.service.signin.SignInService;
import com.mmc.iuav.user.service.userpoints.impl.UserPointsServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author small
* @Date 2023/10/13 9:34
* @Version 1.0
*/
@Service
public class SignInServiceImpl implements SignInService {
@Autowired
private SignInDao signInDao;
@Autowired
private UserPointsServiceImpl userPointsService;
@Override
public ResultBody SignIn(SignInVO signInVO) {
SignInDO signInDO = new SignInDO(signInVO);
if (signInDO.getId()!=null){
int update = signInDao.update(signInDO);
signInDao.remove(signInDO.getId());
List<UserContinuousCheckInVO> userContinuousCheckInVO = signInDO.getUserContinuousCheckInVO();
for (UserContinuousCheckInVO continuousCheckInVO : userContinuousCheckInVO) {
continuousCheckInVO.setSignInId(signInDO.getId());
signInDao.CheckIn(continuousCheckInVO);
}
}else if(signInDO.getId()==null){
signInDao.SignIn(signInDO);
List<UserContinuousCheckInVO> userContinuousCheckInVO = signInDO.getUserContinuousCheckInVO();
for (UserContinuousCheckInVO continuousCheckInVO : userContinuousCheckInVO) {
continuousCheckInVO.setSignInId(signInDO.getId());
signInDao.CheckIn(continuousCheckInVO);
}
}
return ResultBody.success();
}
@Override
public List<SignInDTO> SignInList() {
List<SignInDO> signInDO= signInDao.SignInList();
List<SignInDTO> collect = signInDO.stream().map(SignInDO::buildSignInDTO).collect(Collectors.toList());
return collect;
}
@Override
public ResultBody appSignIn(AppSignInVO appSignInVO) {
UserAppSignInDO userAppSignInDO = signInDao.selectUserAppSignIn(appSignInVO);
List<SignInDO> signInDOS = signInDao.SignInList();
ChangeUserPointVO changeUserPointVO = new ChangeUserPointVO();
changeUserPointVO.setUserAccountId(appSignInVO.getUserAccountId());
changeUserPointVO.setChangeType(4);
if (userAppSignInDO==null){
signInDao.userAppSignIn(appSignInVO);
signInDao.insertSignInRecord(appSignInVO);
for (SignInDO signInDO : signInDOS) {
Integer integral = signInDO.getIntegral();
changeUserPointVO.setChangePoint(integral);
}
userPointsService.change(changeUserPointVO);
}
if (userAppSignInDO!=null){
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
long time = dateFormat.parse(userAppSignInDO.getSignTime()).getTime();
long time1 = dateFormat.parse(appSignInVO.getSignTime()).getTime();
long l =(time1-time)/(24*60*60*1000);
if (l>1){
signInDao.deleteSignInRecord(appSignInVO);
signInDao.updateUserAppSignInD(appSignInVO);
signInDao.insertSignInRecord(appSignInVO);
for (SignInDO signInDO : signInDOS) {
changeUserPointVO.setChangePoint(signInDO.getIntegral());
}
userPointsService.change(changeUserPointVO);
}else if(l==1){
signInDao.updateUserAppSignIn(appSignInVO);
signInDao.insertSignInRecord(appSignInVO);
UserAppSignInDO userAppSignInDO1 = signInDao.selectUserAppSignIn(appSignInVO);
int allPoints=0;
for (SignInDO signInDO : signInDOS) {
Integer integral = signInDO.getIntegral();
List<UserContinuousCheckInVO> userContinuousCheckInVO = signInDO.getUserContinuousCheckInVO();
for (UserContinuousCheckInVO continuousCheckInVO : userContinuousCheckInVO) {
if (continuousCheckInVO.getNumberOfDays().equals(userAppSignInDO1.getSignInDays())){
int bonusPoints = continuousCheckInVO.getBonusPoints();
allPoints=integral+bonusPoints;
changeUserPointVO.setChangePoint(allPoints);
}else if (!continuousCheckInVO.getNumberOfDays().equals(userAppSignInDO1.getSignInDays())){
changeUserPointVO.setChangePoint(integral);
}
}
}
userPointsService.change(changeUserPointVO);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
return ResultBody.success();
}
@Override
public List<SignInRecordDO> signInRecord(Integer userAccountId) {
List<SignInRecordDO> signInRecordDOS= signInDao.signInRecord(userAccountId);
return signInRecordDOS;
}
}
<?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.mmc.iuav.user.dao.signin.SignInDao">
<resultMap id="signInList" type="com.mmc.iuav.user.entity.signin.SignInDO">
<result property="id" column="id"/>
<result property="status" column="status"/>
<result property="integral" column="integral"/>
<result property="period" column="period"/>
<collection property="userContinuousCheckInVO" ofType="com.mmc.iuav.user.model.vo.signin.UserContinuousCheckInVO"
select="continuousCheckIn" column="{signInId=id}">
</collection>
</resultMap>
<select id="continuousCheckIn" resultType="com.mmc.iuav.user.model.vo.signin.UserContinuousCheckInVO">
select id,sign_in_id,number_of_days,bonus_points from user_continuous_check_in where sign_in_id=#{signInId}
</select>
<insert id="SignIn" parameterType="com.mmc.iuav.user.entity.signin.SignInDO" useGeneratedKeys="true" keyProperty="id">
insert into user_sign_in(status,`period`,integral,create_time,update_time)
values(#{status},#{period},#{integral},NOW(),NOW())
</insert>
<insert id="CheckIn" parameterType="com.mmc.iuav.user.model.vo.signin.UserContinuousCheckInVO" useGeneratedKeys="true" keyProperty="id">
insert into user_continuous_check_in(sign_in_id,number_of_days,bonus_points,create_time,update_time)
values(#{signInId},#{numberOfDays},#{bonusPoints},NOW(),NOW())
</insert>
<update id="update" parameterType="com.mmc.iuav.user.entity.signin.SignInDO">
update user_sign_in
set
<if test="status!=null">
status=#{status},
</if>
<if test="period!=null">
`period`=#{period},
</if>
<if test="integral!=null">
integral=#{integral}
</if>
where id=#{id}
</update>
<delete id="remove">
DELETE from user_continuous_check_in where sign_in_id=#{id}
</delete>
<select id="SignInList" resultMap="signInList">
select id,status,`integral`,`period` from user_sign_in
ORDER BY id desc
</select>
<select id="selectUserAppSignIn" parameterType="com.mmc.iuav.user.model.vo.signin.AppSignInVO"
resultType="com.mmc.iuav.user.entity.signin.UserAppSignInDO">
select sign_time,sign_in_days ,user_account_id from user_app_sign_in where user_account_id=#{userAccountId}
</select>
<insert id="userAppSignIn" parameterType="com.mmc.iuav.user.model.vo.signin.AppSignInVO">
insert into user_app_sign_in(sign_time,sign_in_days,user_account_id,create_time,update_time)
values (#{signTime},sign_in_days+1,#{userAccountId},NOW(),NOW())
</insert>
<update id="updateUserAppSignIn" parameterType="com.mmc.iuav.user.model.vo.signin.AppSignInVO">
update user_app_sign_in set
sign_time=#{signTime},
sign_in_days=sign_in_days+1,
update_time=NOW()
where user_account_id=#{userAccountId}
</update>
<delete id="deleteSignInRecord" parameterType="com.mmc.iuav.user.model.vo.signin.AppSignInVO">
delete from sign_in_record where user_account_id=#{userAccountId}
</delete>
<insert id="insertSignInRecord" parameterType="com.mmc.iuav.user.model.vo.signin.AppSignInVO">
insert into sign_in_record(user_account_id,sign_in_time,create_time,update_time)
values(#{userAccountId},#{signTime},NOW(),NOW())
</insert>
<update id="updateUserAppSignInD" parameterType="com.mmc.iuav.user.model.vo.signin.AppSignInVO">
update user_app_sign_in set
sign_time=#{signTime},
sign_in_days=1,
update_time=NOW()
where user_account_id=#{userAccountId}
</update>
<select id="signInRecord" resultType="com.mmc.iuav.user.entity.signin.SignInRecordDO">
select user_account_id,sign_in_time from sign_in_record where user_account_id=#{userAccountId}
</select>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论