|
|
@@ -46,7 +46,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
-import java.util.Optional;
|
|
|
import java.util.concurrent.ThreadLocalRandom;
|
|
|
|
|
|
@Service
|
|
|
@@ -96,33 +95,28 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
//第一次签到
|
|
|
SignUser signUser = signUserMapper.selectOne(Wrappers.lambdaQuery(SignUser.class)
|
|
|
.eq(SignUser::getUserId, userId).last("limit 1"));
|
|
|
- Optional.ofNullable(signUser)
|
|
|
- .ifPresentOrElse(sign -> {
|
|
|
- //更新签到
|
|
|
- signCheck(signUser);
|
|
|
- }, () -> {
|
|
|
- log.info("用户:{}第一次签到", userId);
|
|
|
- SignUser save = new SignUser();
|
|
|
- save.setUserId(userId);
|
|
|
- save.setDay(1);
|
|
|
- save.setDayPeriod(1);
|
|
|
- try {
|
|
|
- signUserMapper.insert(save);
|
|
|
- //发放积分
|
|
|
- updateUserSignDay(save);
|
|
|
- } catch (DuplicateKeyException e) {
|
|
|
- log.info("用户:{}重复签到记录插入", userId);
|
|
|
- }
|
|
|
- });
|
|
|
- SignUser sign = signUserMapper.selectOne(Wrappers.lambdaQuery(SignUser.class)
|
|
|
- .eq(SignUser::getUserId, userId).last("limit 1"));
|
|
|
- sign.setIsHadChecked(false);
|
|
|
if (signUser == null) {
|
|
|
- sign.setIsHadChecked(true);
|
|
|
- }
|
|
|
- if (signUser != null && signUser.getDayPeriod() != sign.getDayPeriod()) {
|
|
|
- sign.setIsHadChecked(true);
|
|
|
+ log.info("用户:{}第一次签到", userId);
|
|
|
+ signUser = new SignUser();
|
|
|
+ signUser.setUserId(userId);
|
|
|
+ signUser.setDay(1);
|
|
|
+ signUser.setDayPeriod(1);
|
|
|
+ try {
|
|
|
+ signUserMapper.insert(signUser);
|
|
|
+ //发放积分
|
|
|
+ updateUserSignDay(signUser, true);
|
|
|
+ signUser.setIsHadChecked(true);
|
|
|
+ } catch (DuplicateKeyException e) {
|
|
|
+ log.info("用户:{}重复签到记录插入", userId);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //更新签到
|
|
|
+ signCheck(signUser);
|
|
|
}
|
|
|
+ SignUser sign = signUserMapper.selectOne(Wrappers.lambdaQuery(SignUser.class)
|
|
|
+ .eq(SignUser::getUserId, userId).last("limit 1"));
|
|
|
+ sign.setPoints(signUser.getPoints());
|
|
|
+ sign.setIsHadChecked(signUser.getIsHadChecked());
|
|
|
return sign;
|
|
|
}
|
|
|
|
|
|
@@ -134,17 +128,20 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void pointsRecord(Long userId, Integer points, String remark) {
|
|
|
+ public void pointsRecord(Long userId, Integer points, String remark, Boolean isLottery) {
|
|
|
UserPointsRecord userPointsRecord = new UserPointsRecord();
|
|
|
userPointsRecord.setUserId(userId);
|
|
|
userPointsRecord.setPoints(points);
|
|
|
userPointsRecord.setRemark(remark);
|
|
|
userPointsRecordMapper.insert(userPointsRecord);
|
|
|
|
|
|
- //发放爱心
|
|
|
- userPointsRecordMapper.updateUserPoints(userId, points);
|
|
|
+ if (!isLottery) {
|
|
|
+ //发放爱心
|
|
|
+ userPointsRecordMapper.updateUserPoints(userId, points);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
|
public LuckyDrawView lottery(Long userId) {
|
|
|
@@ -159,7 +156,7 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
if (sub != 1) {
|
|
|
throw BusinessRuntimeException.getInstance("积分不足");
|
|
|
}
|
|
|
- pointsRecord(userId, -subPoints.intValue(), PointsRecordConst.POINTS_LOTTERY);
|
|
|
+ pointsRecord(userId, -subPoints.intValue(), PointsRecordConst.POINTS_LOTTERY, true);
|
|
|
List<LuckyDrawView> drawViews = beanSearcher.searchAll(LuckyDrawView.class, MapUtils.builder()
|
|
|
.field(LuckyDrawView::getStatus, true).op(Operator.Equal)
|
|
|
.orderBy(LuckyDrawView::getProbability).asc()
|
|
|
@@ -188,7 +185,7 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
LuckyDrawRecord record = new LuckyDrawRecord();
|
|
|
BeanUtil.copyProperties(luckyDraw, record, "status");
|
|
|
if (luckyDraw.getType() == LuckyDraw.Type.points) {
|
|
|
- pointsRecord(userId, luckyDraw.getPoints(), PointsRecordConst.LOTTERY);
|
|
|
+ pointsRecord(userId, luckyDraw.getPoints(), PointsRecordConst.LOTTERY, false);
|
|
|
record.setStatus(LuckyDrawRecord.Status.success);
|
|
|
} else if (luckyDraw.getType() == LuckyDraw.Type.coupon) {
|
|
|
//发放优惠券
|
|
|
@@ -286,7 +283,7 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
if (data.getCouponId() != null && data.getCouponId() != 0) {
|
|
|
couponCommonService.sendCouponToUser(userId, data.getCouponId(), null, null, null, CouponUser.Channel.task);
|
|
|
}
|
|
|
- pointsRecord(userId, data.getPoints(), PointsRecordConst.TASK);
|
|
|
+ pointsRecord(userId, data.getPoints(), PointsRecordConst.TASK, false);
|
|
|
//改变状态
|
|
|
TaskUserCompleteRecord record = new TaskUserCompleteRecord();
|
|
|
record.setId(data.getTaskCompleteRecordId());
|
|
|
@@ -303,6 +300,7 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
DateTime signZero = DateUtil.beginOfDay(DateTime.now());
|
|
|
DateTime thisZero = DateUtil.beginOfDay(DateTime.now());
|
|
|
if (updateTime.after(thisZero)) {
|
|
|
+ signUser.setIsHadChecked(false);
|
|
|
// throw BusinessRuntimeException.getInstance("您已签到");
|
|
|
} else {
|
|
|
if (updateTime.before(thisZero) && thisZero.getTime() - signZero.getTime() == 0) {
|
|
|
@@ -313,21 +311,26 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
}
|
|
|
signUser.setDayPeriod(signUser.getDayPeriod() + 1);
|
|
|
//更新签到时间
|
|
|
- updateUserSignDay(signUser);
|
|
|
+ updateUserSignDay(signUser, false);
|
|
|
+ signUser.setIsHadChecked(true);
|
|
|
} else {
|
|
|
log.info("用户:{}断签,断签天数为:{}", signUser.getUserId(), signUser.getDayPeriod());
|
|
|
signUser.setDay(1);
|
|
|
signUser.setDayPeriod(1);
|
|
|
//更新签到时间
|
|
|
- updateUserSignDay(signUser);
|
|
|
+ updateUserSignDay(signUser, false);
|
|
|
+ signUser.setIsHadChecked(true);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void updateUserSignDay(SignUser signUser) {
|
|
|
- Integer update = signUserMapper.updateUserSignDay(signUser.getDay(), signUser.getDayPeriod(), signUser.getUserId(), signUser.getUpdateTime());
|
|
|
+ public void updateUserSignDay(SignUser signUser, Boolean isFirst) {
|
|
|
+ Integer update = 1;
|
|
|
+ if (!isFirst) {
|
|
|
+ update = signUserMapper.updateUserSignDay(signUser.getDay(), signUser.getDayPeriod(), signUser.getUserId(), signUser.getUpdateTime());
|
|
|
+ }
|
|
|
+ Integer points = 0;
|
|
|
if (update > 0) {
|
|
|
- Integer points = 0;
|
|
|
if (signUser.getDayPeriod() > 1) {
|
|
|
//发放积分
|
|
|
SignConfig signConfig = signConfigMapper.selectOne(Wrappers.lambdaQuery(SignConfig.class)
|
|
|
@@ -342,8 +345,9 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
points = signConfigMapper.selectOne(Wrappers.lambdaQuery(SignConfig.class)
|
|
|
.orderByAsc(SignConfig::getId).last("limit 1")).getMaxPoints();
|
|
|
}
|
|
|
- pointsRecord(signUser.getUserId(), points, PointsRecordConst.SIGN);
|
|
|
+ pointsRecord(signUser.getUserId(), points, PointsRecordConst.SIGN, false);
|
|
|
}
|
|
|
+ signUser.setPoints(points);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -454,6 +458,7 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
record = new TaskUserCompleteRecord();
|
|
|
record.setUserId(userId);
|
|
|
record.setTaskId(data.getId());
|
|
|
+ record.setPoints(data.getPoints());
|
|
|
record.setStatus(TaskUserCompleteRecord.Status.complete);
|
|
|
taskUserCompleteRecordMapper.insert(record);
|
|
|
}
|
|
|
@@ -466,7 +471,7 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
data.setTaskCompleteRecordId(record.getId());
|
|
|
data.setStatus(record.getStatus());
|
|
|
}
|
|
|
- handleSpecialTask(userId, data, beginOfDay, endOfDay);
|
|
|
+ handleSpecialTask(userId, data, record, beginOfDay, endOfDay);
|
|
|
|
|
|
} else if ("week".equals(data.getTaskLimit())) {
|
|
|
wrapper.between(TaskUserCompleteRecord::getCreatedTime, beginOfWeek, endOfWeek);
|
|
|
@@ -475,12 +480,12 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
data.setTaskCompleteRecordId(record.getId());
|
|
|
data.setStatus(record.getStatus());
|
|
|
}
|
|
|
- handleSpecialTask(userId, data, beginOfWeek, endOfWeek);
|
|
|
+ handleSpecialTask(userId, data, record, beginOfWeek, endOfWeek);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void handleSpecialTask(Long userId, TaskFrontView data, DateTime beginTime, DateTime endTime) {
|
|
|
- if (TaskTypeEnum.share.name().equals(data.getTypeName())) {
|
|
|
+ public void handleSpecialTask(Long userId, TaskFrontView data, TaskUserCompleteRecord record, DateTime beginTime, DateTime endTime) {
|
|
|
+ if (TaskTypeEnum.share.getDesc().equals(data.getTypeName())) {
|
|
|
//邀请人数是否达标
|
|
|
Integer count = userDistributeSharedMapper.selectCount(Wrappers.lambdaQuery(UserDistributeShared.class)
|
|
|
.eq(UserDistributeShared::getSharedId, userId)
|
|
|
@@ -488,8 +493,18 @@ public class MarketFrontServiceImpl implements MarketFrontService {
|
|
|
data.setHadInvitedNum(count);
|
|
|
if (count >= data.getInviteNum() && data.getStatus() == TaskUserCompleteRecord.Status.waiting) {
|
|
|
data.setStatus(TaskUserCompleteRecord.Status.complete);
|
|
|
+ if (record == null) {
|
|
|
+ if (redisService.setNx(RedisService.key.TASK_TIME_LIMIT_KEY.getNameFormat(String.format("day_week_%s", userId)), userId, RedisService.key.TASK_TIME_LIMIT_KEY.getTimeout())) {
|
|
|
+ record = new TaskUserCompleteRecord();
|
|
|
+ record.setUserId(userId);
|
|
|
+ record.setTaskId(data.getId());
|
|
|
+ record.setPoints(data.getPoints());
|
|
|
+ record.setStatus(TaskUserCompleteRecord.Status.complete);
|
|
|
+ taskUserCompleteRecordMapper.insert(record);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- } else if (TaskTypeEnum.bind_phone.name().equals(data.getTypeName())) {
|
|
|
+ } else if (TaskTypeEnum.bind_phone.getDesc().equals(data.getTypeName())) {
|
|
|
UserBindPhone bindPhone = userBindPhoneMapper.selectOne(Wrappers.lambdaQuery(UserBindPhone.class)
|
|
|
.eq(UserBindPhone::getUserId, userId).last("limit 1"));
|
|
|
if (bindPhone != null) {
|