MrShi
2 天以前 4eac422e52a4d28fb651b75d0f054697c7a2c0fa
server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,265 @@
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 io.swagger.models.auth.In;
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<InviteRecord> inviteRecordList = inviteRecordMapper.selectJoinList(InviteRecord.class,
                new MPJLambdaWrapper<InviteRecord>()
                        .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());
            }
            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;
    }
    @Override
    public Integer create(InviteRecord inviteRecord) {
        inviteRecordMapper.insert(inviteRecord);
        return inviteRecord.getId();
    }
    @Override
    public void deleteById(Integer id) {
        inviteRecordMapper.deleteById(id);
    }
    @Override
    public void delete(InviteRecord inviteRecord) {
        UpdateWrapper<InviteRecord> deleteWrapper = new UpdateWrapper<>(inviteRecord);
        inviteRecordMapper.delete(deleteWrapper);
    }
    @Override
    public void deleteByIdInBatch(List<Integer> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
        inviteRecordMapper.deleteBatchIds(ids);
    }
    @Override
    public void updateById(InviteRecord inviteRecord) {
        inviteRecordMapper.updateById(inviteRecord);
    }
    @Override
    public void updateByIdInBatch(List<InviteRecord> inviteRecords) {
        if (CollectionUtils.isEmpty(inviteRecords)) {
            return;
        }
        for (InviteRecord inviteRecord: inviteRecords) {
            this.updateById(inviteRecord);
        }
    }
    @Override
    public InviteRecord findById(Integer id) {
        return inviteRecordMapper.selectById(id);
    }
    @Override
    public InviteRecord findOne(InviteRecord inviteRecord) {
        QueryWrapper<InviteRecord> wrapper = new QueryWrapper<>(inviteRecord).last("limit 1");
        return inviteRecordMapper.selectOne(wrapper);
    }
    @Override
    public List<InviteRecord> findList(InviteRecord inviteRecord) {
        QueryWrapper<InviteRecord> wrapper = new QueryWrapper<>(inviteRecord);
        return inviteRecordMapper.selectList(wrapper);
    }
    @Override
    public PageData<InviteRecord> findPage(PageWrap<InviteRecord> pageWrap) {
        IPage<InviteRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<InviteRecord> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.selectAll(InviteRecord.class )
                .select("t1.name",InviteRecord::getRecName)
                .select("t1.nickname",InviteRecord::getRecNickname)
                .select("t1.phone",InviteRecord::getRecPhone)
                .select("t2.name",InviteRecord::getMemberName)
                .select("t2.nickname",InviteRecord::getMemberNickname)
                .select("t2.open_id",InviteRecord::getOpenid)
                .select("t2.phone",InviteRecord::getMemberPhone)
                .leftJoin(Member.class,Member::getId,InviteRecord::getInviteId)
                .leftJoin(Member.class,Member::getId,InviteRecord::getMemberId) ;
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        queryWrapper.eq(pageWrap.getModel().getId() != null,InviteRecord::getId, pageWrap.getModel().getId());
        queryWrapper.eq(pageWrap.getModel().getCreator() != null,InviteRecord::getCreator, pageWrap.getModel().getCreator());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.ge(InviteRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.le(InviteRecord::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        queryWrapper.eq(pageWrap.getModel().getEditor() != null,InviteRecord::getEditor, pageWrap.getModel().getEditor());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.ge(InviteRecord::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.le(InviteRecord::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getRecName()),w->{
            w.like("t1.name",pageWrap.getModel().getRecName()).or()
                    .like("t1.phone",pageWrap.getModel().getRecName()).or()
                    .like("t1.nickname",pageWrap.getModel().getRecName());
        });
        queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()),w->{
            w.like("t2.name",pageWrap.getModel().getMemberName()).or()
                    .like("t2.phone",pageWrap.getModel().getMemberName()).or()
                    .like("t2.nickname",pageWrap.getModel().getMemberName());
        });
        queryWrapper.eq(pageWrap.getModel().getIsdeleted() != null,InviteRecord::getIsdeleted, pageWrap.getModel().getIsdeleted());
        queryWrapper.eq(pageWrap.getModel().getRemark() != null,InviteRecord::getRemark, pageWrap.getModel().getRemark());
        queryWrapper.eq(pageWrap.getModel().getInviteId() != null,InviteRecord::getInviteId, pageWrap.getModel().getInviteId());
        queryWrapper.eq(pageWrap.getModel().getMemberId() != null,InviteRecord::getMemberId, pageWrap.getModel().getMemberId());
        queryWrapper.eq(pageWrap.getModel().getPhone() != null,InviteRecord::getPhone, pageWrap.getModel().getPhone());
        queryWrapper.eq(pageWrap.getModel().getFirstOrderStatus() != null,InviteRecord::getFirstOrderStatus, pageWrap.getModel().getFirstOrderStatus());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.ge(InviteRecord::getFirstFinishDate, Utils.Date.getStart(pageWrap.getModel().getFirstFinishDate()));
            queryWrapper.le(InviteRecord::getFirstFinishDate, Utils.Date.getEnd(pageWrap.getModel().getFirstFinishDate()));
        }
        queryWrapper.eq(pageWrap.getModel().getRewardIntegral() != null,InviteRecord::getRewardIntegral, pageWrap.getModel().getRewardIntegral());
        queryWrapper.orderByDesc(InviteRecord::getCreateDate);
        IPage<InviteRecord> result =inviteRecordMapper.selectPage(page, queryWrapper);
        if(result!=null && result.getRecords()!=null){
            for(InviteRecord model : result.getRecords()){
               model.setMemberName(StringUtils.defaultString(model.getMemberNickname(),"")+" / "
                       +StringUtils.defaultString(model.getMemberName(),"-")+" / "
                       +StringUtils.defaultString(model.getMemberPhone(),"-"));
               model.setRecName(StringUtils.defaultString(model.getRecNickname(),"")+" / "
                       +StringUtils.defaultString(model.getRecName(),"-")+" / "
                       +StringUtils.defaultString(model.getRecPhone(),"-"));
            }
        }
        return PageData.from(result);
    }
    @Override
    public long count(InviteRecord inviteRecord) {
        QueryWrapper<InviteRecord> wrapper = new QueryWrapper<>(inviteRecord);
        return inviteRecordMapper.selectCount(wrapper);
    }
}