package cn.iocoder.yudao.module.member.convert.signin; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.module.member.controller.admin.signin.vo.record.MemberSignInRecordRespVO; import cn.iocoder.yudao.module.member.controller.app.signin.vo.record.AppMemberSignInRecordRespVO; import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO; import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.Comparator; import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; /** * 签到记录 Convert * * @author 芋道源码 */ @Mapper public interface MemberSignInRecordConvert { MemberSignInRecordConvert INSTANCE = Mappers.getMapper(MemberSignInRecordConvert.class); default PageResult convertPage(PageResult pageResult, List users) { PageResult voPageResult = convertPage(pageResult); // user 拼接 Map userMap = convertMap(users, MemberUserDO::getId); voPageResult.getList().forEach(record -> MapUtils.findAndThen(userMap, record.getUserId(), memberUserRespDTO -> record.setNickname(memberUserRespDTO.getNickname()))); return voPageResult; } PageResult convertPage(PageResult pageResult); PageResult convertPage02(PageResult pageResult); AppMemberSignInRecordRespVO coverRecordToAppRecordVo(MemberSignInRecordDO memberSignInRecordDO); default MemberSignInRecordDO convert(Long userId, MemberSignInRecordDO lastRecord, List configs) { // 1. 计算是第几天签到 configs.sort(Comparator.comparing(MemberSignInConfigDO::getDay)); MemberSignInConfigDO lastConfig = CollUtil.getLast(configs); // 最大签到天数配置 // 1.2. 计算今天是第几天签到 (只有连续签到才加否则重置为 1) int day = 1; if (lastRecord != null && DateUtils.isYesterday(lastRecord.getCreateTime())) { day = lastRecord.getDay() + 1; } // 1.3 判断是否超出了最大签到配置 if (day > lastConfig.getDay()) { day = 1; // 超过最大配置的天数,重置到第一天。(也就是说开启下一轮签到) } // 2.1 初始化签到信息 MemberSignInRecordDO record = new MemberSignInRecordDO().setUserId(userId) .setDay(day).setPoint(0).setExperience(0); // 2.2 获取签到对应的积分 MemberSignInConfigDO config = CollUtil.findOne(configs, item -> ObjUtil.equal(item.getDay(), record.getDay())); if (config == null) { return record; } record.setPoint(config.getPoint()); record.setExperience(config.getExperience()); return record; } }