package cn.lili.modules.lmk.service.impl; import cn.lili.common.utils.StringUtils; import cn.lili.modules.lmk.domain.entity.ActivityRefPrize; import cn.lili.modules.lmk.domain.vo.GrantRecordVO; import cn.lili.modules.lmk.service.ActivityRefPrizeService; import cn.lili.modules.promotion.entity.vos.CouponVO; import cn.lili.modules.promotion.service.CouponService; import cn.lili.utils.COSUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import cn.lili.modules.lmk.domain.entity.PrizeDraw; import cn.lili.modules.lmk.mapper.PrizeDrawMapper; import cn.lili.modules.lmk.service.PrizeDrawService; import cn.lili.base.Result; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.lili.modules.lmk.domain.form.PrizeDrawForm; import cn.lili.modules.lmk.domain.vo.PrizeDrawVO; import cn.lili.modules.lmk.domain.query.PrizeDrawQuery; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import cn.lili.utils.PageUtil; import org.springframework.beans.BeanUtils; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * 抽奖活动奖品 服务实现类 * * @author peng * @since 2025-08-14 */ @Service @RequiredArgsConstructor public class PrizeDrawServiceImpl extends ServiceImpl implements PrizeDrawService { private final PrizeDrawMapper prizeDrawMapper; private final ActivityRefPrizeService activityRefPrizeService; private final CouponService couponService; private final COSUtil cOSUtil; @Override public Result canUpDatePrizeDraw(String prizeDrawId) { PrizeDraw prizeDraw = baseMapper.selectById(prizeDrawId); CouponVO detail = new CouponVO(); if (StringUtils.isNotBlank(prizeDraw.getCouponId())){ detail = couponService.getDetail(prizeDraw.getCouponId()); } Result result = Result.ok(); result.data(detail); Object data = activityRefPrizeService.getPrizeByIdAndPrizeActivityId(prizeDrawId).get("data"); if (data instanceof List) { List rawList = (List) data; List list = new ArrayList<>(); for (Object item : rawList) { if (item instanceof ActivityRefPrize) { list.add((ActivityRefPrize) item); } } if (CollectionUtils.isEmpty(list)) { return result.put("state",true); }else{ return result.put("state",false); } // 使用 list } return result.put("state",false); } /** * 添加 * @param form * @return */ @Override public Result add(PrizeDrawForm form) { PrizeDraw entity = PrizeDrawForm.getEntityByForm(form, null); baseMapper.insert(entity); return Result.ok("添加成功"); } /** * 修改 * @param form * @return */ @Override public Result update(PrizeDrawForm form) { PrizeDraw entity = baseMapper.selectById(form.getId()); // 为空抛IllegalArgumentException,做全局异常处理 Assert.notNull(entity, "记录不存在"); BeanUtils.copyProperties(form, entity); baseMapper.updateById(entity); return Result.ok("修改成功"); } /** * 批量删除 * @param ids * @return */ @Override public Result remove(List ids) { baseMapper.deleteBatchIds(ids); return Result.ok("删除成功"); } /** * id删除 * @param id * @return */ @Override public Result removeById(String id) { baseMapper.deleteById(id); return Result.ok("删除成功"); } /** * 分页查询 * @param query * @return */ @Override public Result page(PrizeDrawQuery query) { IPage page = PageUtil.getPage(query, PrizeDrawVO.class); baseMapper.getPage(page, query); for (PrizeDrawVO vo : page.getRecords()) { if (StringUtils.isNotBlank(vo.getPrizeCover())){ vo.setPrizeCoverUrl(cOSUtil.getPreviewUrl(vo.getPrizeCover())); } if (StringUtils.isNotBlank(vo.getPrizeImg())){ vo.setPrizeImgUrl(cOSUtil.getPreviewUrl(vo.getPrizeImg())); } } return Result.ok().data(page.getRecords()).total(page.getTotal()); } /** * 根据id查找 * @param id * @return */ @Override public Result detail(String id) { PrizeDrawVO vo = baseMapper.getById(id); Assert.notNull(vo, "记录不存在"); return Result.ok().data(vo); } /** * 列表 * @return */ @Override public Result all() { List entities = baseMapper.selectList(null); List vos = entities.stream() .map(entity -> PrizeDrawVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); return Result.ok().data(vos); } @Override public Result grantRecord(String prizeActivityId) { List data = baseMapper.grantRecord(prizeActivityId); for (GrantRecordVO datum : data) { datum.setNickname(nicknameDesensitize(datum.getNickname())); } return Result.ok().data(data); } /** * 昵称脱敏:保留前1后1位,中间*填充(长度≤2不脱敏) */ public static String nicknameDesensitize(String nickname) { if (nickname == null || nickname.trim().isEmpty()) { return nickname; } String trimNick = nickname.trim(); int length = trimNick.length(); // JDK 8 不支持 String.repeat,用 StringBuilder 拼接脱敏字符 if (length <= 2) { return trimNick; } StringBuilder mask = new StringBuilder(); for (int i = 0; i < length - 2; i++) { mask.append('*'); // 中间填充 *,长度 = 总长度 - 2(前1位 + 后1位) } return trimNick.charAt(0) + mask.toString() + trimNick.substring(length - 1); } }