Commit 84dd223f authored by shiyu's avatar shiyu

领取奖励的对应日期后的签到记录都往前挪

parent 5e076d76
......@@ -21,6 +21,7 @@ import com.wwdz.ch.db.domain.UserSignIn;
import com.wwdz.ch.db.domain.distribution.*;
import com.wwdz.ch.db.dto.request.distribution.AuctionConfigRequestDto;
import com.wwdz.ch.db.dto.request.distribution.AuctionRecordRequestDto;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto;
import com.xxdxxs.utils.*;
import org.redisson.api.RedissonClient;
......@@ -635,6 +636,27 @@ public class SysSupplierItemServiceImpl implements SysSupplierItemService {
updateDto.setId(lastedRecord.getId());
updateDto.setIsValid(false);
userSignInDao.updateByPrimaryKey(updateDto);
//如果创建了订单也取消
if (lastedRecord.getIsReward() && lastedRecord.getIsGet()) {
int level = lastedRecord.getRewardLevel();
//查询签到奖励的商品信息
List<SupplierItem> supplierItemList = supplierItemDao.findSignInRewardItemList();
long itemId = supplierItemList.get(level - 1).getId();
DistributionOrderRequestDto distributionOrderRequestDto = new DistributionOrderRequestDto();
distributionOrderRequestDto.setItemId(itemId);
distributionOrderRequestDto.setType(DistributionEnum.DistributionTypeEnum.GIFT.getCode());
distributionOrderRequestDto.setBuyerId(lastedRecord.getUserId());
//防止审核的延后性导致错误的取消订单,所以则查询五天内的赠品订单
LocalDate startTime = today.minusDays(5);
LocalDateTime startDateTime = startTime.atTime(LocalTime.MIN);
distributionOrderRequestDto.setStartCreateTime(Date.from(startDateTime.atZone(java.time.ZoneId.systemDefault()).toInstant()));
List<DistributionOrder> distributionOrderList = distributionOrderDao.findByPage(distributionOrderRequestDto);
if (!org.springframework.util.CollectionUtils.isEmpty(distributionOrderList)) {
String orderId = distributionOrderList.get(0).getDistributionOrderId();
distributionOrderDao.updateState(orderId, DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode());
}
}
msg = "您发布的" + oldItem.getName() + ",因质量过差无法达到平台要求,已被平台下架,并作废最新的签到记录,请前往"+ url + "查看";
}
aliSmsSender.sendSms(oldItem.getCreatorId(), msg);
......
......@@ -31,7 +31,7 @@ public interface UserSignInDao {
boolean isExisted(long userId, String date);
UserSignIn findRecord(long userId, String date);
UserSignIn findRecord(long userId, String date, Integer consecutiveDays);
boolean update(UserSignIn userSignin);
......@@ -41,4 +41,6 @@ public interface UserSignInDao {
boolean updateInvalid(UserSignInRequestDto dto);
}
......@@ -82,15 +82,18 @@ public class UserSignInDaoImpl implements UserSignInDao {
@Override
public UserSignIn findRecord(long userId, String date) {
public UserSignIn findRecord(long userId, String date, Integer consecutiveDays) {
UserSignInExample example = new UserSignInExample();
UserSignInExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId);
criteria.andSignInDateEqualTo(date);
JdbcHelper.ifPresent(consecutiveDays, criteria::andConsecutiveDaysEqualTo);
criteria.andIsValidEqualTo(true);
return userSignInMapper.selectOneByExample(example);
}
@Override
public boolean update(UserSignIn userSignin) {
UserSignInExample example = new UserSignInExample();
......
......@@ -143,7 +143,7 @@ public class UserSigninServiceImpl implements UserSigninService {
public Result getReward(UserSignInRequestDto dto) {
try {
//查询签到记录
UserSignIn userSignin = userSignInDao.findRecord(dto.getUserId(), dto.getSignInDate());
UserSignIn userSignin = userSignInDao.findRecord(dto.getUserId(), dto.getSignInDate(), null);
if (userSignin == null) {
return Result.failed("该签到奖励已作废");
}
......@@ -161,14 +161,34 @@ public class UserSigninServiceImpl implements UserSigninService {
updateDto.setUpdateTime(new Date());
userSignInDao.updateByPrimaryKey(updateDto);
//领取完礼物后把签到天数清零,所有大于领取礼物日期的签到记录全部设置为无效
UserSignInRequestDto userSignInRequestDto = new UserSignInRequestDto();
userSignInRequestDto.setUserId(dto.getUserId());
userSignInRequestDto.setStartQueryTime(userSignin.getCreateTime());
userSignInDao.updateInvalid(userSignInRequestDto);
if (userSignin.getConsecutiveDays() >= 14) {
//一个周期内只能领取过一次礼物,领取奖励的对应日期后的签到记录都往前挪
int spanNum = 0;
if (userSignin.getConsecutiveDays() == 7) {
spanNum = 14;
} else if (userSignin.getConsecutiveDays() == 14) {
spanNum = 7;
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(dto.getSignInDate(), formatter);
LocalDate date = LocalDate.parse(userSignin.getSignInDate(), formatter);
for (int i = 1; i <= spanNum; i++) {
LocalDate newDate = date.plusDays(i);
String newDateStr = newDate.format(formatter);
UserSignIn record = userSignInDao.findRecord(dto.getUserId(), newDateStr, (userSignin.getConsecutiveDays() + i));
if (record == null) {
break;
} else {
UserSignIn newDto = new UserSignIn();
newDto.setId(record.getId());
newDto.setConsecutiveDays(record.getConsecutiveDays() - userSignin.getConsecutiveDays());
if (record.getIsReward()) {
newDto.setRewardLevel(record.getRewardLevel() - 1);
}
userSignInDao.updateByPrimaryKey(newDto);
}
}
//把过去未领的奖励设置为无效
if (userSignin.getConsecutiveDays() >= 14) {
LocalDate newDate = date.minusDays(7);
String newDateString = newDate.format(formatter);
UserSignInRequestDto beforeUpdateDto = new UserSignInRequestDto();
......@@ -177,8 +197,6 @@ public class UserSigninServiceImpl implements UserSigninService {
userSignInDao.updateInvalid(beforeUpdateDto);
}
if(userSignin.getConsecutiveDays() == 21) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(dto.getSignInDate(), formatter);
LocalDate newDate = date.minusDays(14);
String newDateString = newDate.format(formatter);
UserSignInRequestDto beforeUpdateDto = new UserSignInRequestDto();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment