Commit 84dd223f authored by shiyu's avatar shiyu

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

parent 5e076d76
...@@ -21,6 +21,7 @@ import com.wwdz.ch.db.domain.UserSignIn; ...@@ -21,6 +21,7 @@ import com.wwdz.ch.db.domain.UserSignIn;
import com.wwdz.ch.db.domain.distribution.*; import com.wwdz.ch.db.domain.distribution.*;
import com.wwdz.ch.db.dto.request.distribution.AuctionConfigRequestDto; 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.AuctionRecordRequestDto;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto; import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto;
import com.xxdxxs.utils.*; import com.xxdxxs.utils.*;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
...@@ -635,6 +636,27 @@ public class SysSupplierItemServiceImpl implements SysSupplierItemService { ...@@ -635,6 +636,27 @@ public class SysSupplierItemServiceImpl implements SysSupplierItemService {
updateDto.setId(lastedRecord.getId()); updateDto.setId(lastedRecord.getId());
updateDto.setIsValid(false); updateDto.setIsValid(false);
userSignInDao.updateByPrimaryKey(updateDto); 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 + "查看"; msg = "您发布的" + oldItem.getName() + ",因质量过差无法达到平台要求,已被平台下架,并作废最新的签到记录,请前往"+ url + "查看";
} }
aliSmsSender.sendSms(oldItem.getCreatorId(), msg); aliSmsSender.sendSms(oldItem.getCreatorId(), msg);
......
...@@ -31,7 +31,7 @@ public interface UserSignInDao { ...@@ -31,7 +31,7 @@ public interface UserSignInDao {
boolean isExisted(long userId, String date); boolean isExisted(long userId, String date);
UserSignIn findRecord(long userId, String date); UserSignIn findRecord(long userId, String date, Integer consecutiveDays);
boolean update(UserSignIn userSignin); boolean update(UserSignIn userSignin);
...@@ -41,4 +41,6 @@ public interface UserSignInDao { ...@@ -41,4 +41,6 @@ public interface UserSignInDao {
boolean updateInvalid(UserSignInRequestDto dto); boolean updateInvalid(UserSignInRequestDto dto);
} }
...@@ -82,15 +82,18 @@ public class UserSignInDaoImpl implements UserSignInDao { ...@@ -82,15 +82,18 @@ public class UserSignInDaoImpl implements UserSignInDao {
@Override @Override
public UserSignIn findRecord(long userId, String date) { public UserSignIn findRecord(long userId, String date, Integer consecutiveDays) {
UserSignInExample example = new UserSignInExample(); UserSignInExample example = new UserSignInExample();
UserSignInExample.Criteria criteria = example.createCriteria(); UserSignInExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId); criteria.andUserIdEqualTo(userId);
criteria.andSignInDateEqualTo(date); criteria.andSignInDateEqualTo(date);
JdbcHelper.ifPresent(consecutiveDays, criteria::andConsecutiveDaysEqualTo);
criteria.andIsValidEqualTo(true); criteria.andIsValidEqualTo(true);
return userSignInMapper.selectOneByExample(example); return userSignInMapper.selectOneByExample(example);
} }
@Override @Override
public boolean update(UserSignIn userSignin) { public boolean update(UserSignIn userSignin) {
UserSignInExample example = new UserSignInExample(); UserSignInExample example = new UserSignInExample();
......
...@@ -143,7 +143,7 @@ public class UserSigninServiceImpl implements UserSigninService { ...@@ -143,7 +143,7 @@ public class UserSigninServiceImpl implements UserSigninService {
public Result getReward(UserSignInRequestDto dto) { public Result getReward(UserSignInRequestDto dto) {
try { try {
//查询签到记录 //查询签到记录
UserSignIn userSignin = userSignInDao.findRecord(dto.getUserId(), dto.getSignInDate()); UserSignIn userSignin = userSignInDao.findRecord(dto.getUserId(), dto.getSignInDate(), null);
if (userSignin == null) { if (userSignin == null) {
return Result.failed("该签到奖励已作废"); return Result.failed("该签到奖励已作废");
} }
...@@ -161,14 +161,34 @@ public class UserSigninServiceImpl implements UserSigninService { ...@@ -161,14 +161,34 @@ public class UserSigninServiceImpl implements UserSigninService {
updateDto.setUpdateTime(new Date()); updateDto.setUpdateTime(new Date());
userSignInDao.updateByPrimaryKey(updateDto); userSignInDao.updateByPrimaryKey(updateDto);
//领取完礼物后把签到天数清零,所有大于领取礼物日期的签到记录全部设置为无效 //一个周期内只能领取过一次礼物,领取奖励的对应日期后的签到记录都往前挪
UserSignInRequestDto userSignInRequestDto = new UserSignInRequestDto(); int spanNum = 0;
userSignInRequestDto.setUserId(dto.getUserId()); if (userSignin.getConsecutiveDays() == 7) {
userSignInRequestDto.setStartQueryTime(userSignin.getCreateTime()); spanNum = 14;
userSignInDao.updateInvalid(userSignInRequestDto); } else if (userSignin.getConsecutiveDays() == 14) {
if (userSignin.getConsecutiveDays() >= 14) { spanNum = 7;
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 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); LocalDate newDate = date.minusDays(7);
String newDateString = newDate.format(formatter); String newDateString = newDate.format(formatter);
UserSignInRequestDto beforeUpdateDto = new UserSignInRequestDto(); UserSignInRequestDto beforeUpdateDto = new UserSignInRequestDto();
...@@ -177,8 +197,6 @@ public class UserSigninServiceImpl implements UserSigninService { ...@@ -177,8 +197,6 @@ public class UserSigninServiceImpl implements UserSigninService {
userSignInDao.updateInvalid(beforeUpdateDto); userSignInDao.updateInvalid(beforeUpdateDto);
} }
if(userSignin.getConsecutiveDays() == 21) { if(userSignin.getConsecutiveDays() == 21) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(dto.getSignInDate(), formatter);
LocalDate newDate = date.minusDays(14); LocalDate newDate = date.minusDays(14);
String newDateString = newDate.format(formatter); String newDateString = newDate.format(formatter);
UserSignInRequestDto beforeUpdateDto = new UserSignInRequestDto(); 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