package com.doumee.service.business.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.GeneratePicUtil; import com.doumee.core.utils.Utils; import com.doumee.core.utils.aliyun.ALiYunUtil; import com.doumee.core.wx.WxMiniConfig; import com.doumee.dao.business.IntegralMapper; import com.doumee.dao.business.InviteRecordMapper; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.ShopMapper; import com.doumee.dao.business.join.IntegralJoinMapper; import com.doumee.dao.business.model.Integral; import com.doumee.dao.business.model.InviteRecord; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Shop; import com.doumee.dao.web.dto.IntegralDTO; import com.doumee.dao.web.dto.IntegralRecordDTO; import com.doumee.dao.web.request.DealIntegralRequest; import com.doumee.dao.web.response.IntegralDataResponse; import com.doumee.dao.web.response.InviteInfoResponse; import com.doumee.service.business.IntegralService; import com.doumee.service.business.InviteRecordService; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.http.util.TextUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * 用户邀请记录 * @author 江蹄蹄 * @date 2026年1月20日09:32:12 */ @Service public class InviteRecordServiceImpl implements InviteRecordService { @Autowired private InviteRecordMapper inviteRecordMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Override public InviteInfoResponse getInviteInfo(Integer memberId){ InviteInfoResponse inviteInfoResponse = new InviteInfoResponse(); inviteInfoResponse.setInviteNum(Constants.ZERO); inviteInfoResponse.setNum(0l); inviteInfoResponse.setInviteRule(systemDictDataBiz.queryByCode(Constants.ORDER_SET,Constants.INVITE_RULE).getCode()); List inviteRecordList = inviteRecordMapper.selectJoinList(InviteRecord.class, new MPJLambdaWrapper() .selectAll(InviteRecord.class) .selectAs(Member::getNickname,InviteRecord::getMemberName) .selectAs(Member::getImgurl,InviteRecord::getImgUrl) .leftJoin(Member.class,Member::getId,InviteRecord::getMemberId) .eq(InviteRecord::getIsdeleted,Constants.ZERO) .eq(InviteRecord::getMemberId,memberId) .orderByDesc(InviteRecord::getId) ); if (CollectionUtils.isNotEmpty(inviteRecordList)) { inviteInfoResponse.setInviteRecordList(inviteRecordList); inviteInfoResponse.setInviteNum(inviteRecordList.size()); BigDecimal num = BigDecimal.ZERO; String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode(); for (InviteRecord inviteRecord:inviteRecordList) { if(StringUtils.isNotBlank(inviteRecord.getImgUrl())){ inviteRecord.setImgUrl(path + inviteRecord.getImgUrl()); } num = num.add(inviteRecord.getRewardIntegral()).add(inviteRecord.getFirstRewardIntegral()); } inviteInfoResponse.setNum(num.longValue()); } return inviteInfoResponse; } @Override public String createShareImg(Integer memberId) throws Exception { String imgUrl = systemDictDataBiz.queryByCode(Constants.ORDER_SET,Constants.INVITE_IMG_URL).getCode(); BufferedImage img1 = GeneratePicUtil.transfromToImage(imgUrl,imgUrl.substring(imgUrl.lastIndexOf(".") + 1)); if (img1 == null) { return imgUrl; } String url = null; String scene = "m_" + memberId; //内容分享海报图片 InputStream mpCode = Constants.generateWxMiniImgStream( scene, "", false);//小程序 InputStream inputStream = GeneratePicUtil.generateShareWithUserImg( img1 , mpCode); ALiYunUtil obs = new ALiYunUtil( systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode() ,systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(), systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode()); String shareFolder = systemDictDataBiz.queryByCode(Constants.RESOURCE_PATH, Constants.SHARES_FILE).getCode(); String key = DateUtil.getNowShortDate() + "/" + UUID.randomUUID().toString() + ".jpg"; String fileName = shareFolder + key; if (obs.uploadOnlineObject(inputStream,systemDictDataBiz.queryByCode(Constants.OSS, Constants.BUCKETNAME).getCode(), key,null)) { url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode() + fileName; } return url; } }