jiangqs
2023-06-16 ae41759bafec1c2a1e8858fcdcda4272ed4eb84c
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1,54 +1,47 @@
package com.ruoyi.member.service.impl.member;
import java.util.Date;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.member.domain.dto.*;
import com.ruoyi.member.domain.pojo.member.IntegralRecord;
import com.ruoyi.member.domain.pojo.member.MemberNurse;
import com.ruoyi.member.domain.pojo.member.MemberTotal;
import com.ruoyi.member.domain.vo.*;
import com.ruoyi.member.mapper.member.MemberMapper;
import com.ruoyi.member.service.member.MemberNurseService;
import com.ruoyi.member.service.member.MemberService;
import com.ruoyi.member.service.member.MemberTotalService;
import com.ruoyi.member.util.CodeFactoryUtil;
import com.ruoyi.member.service.member.*;
import com.ruoyi.member.util.HttpUtils;
import com.ruoyi.system.api.domain.dto.AppMiniRegisterDto;
import com.ruoyi.system.api.domain.vo.AppMiniRegisterVo;
import com.ruoyi.system.api.service.RemoteConfigService;
import com.ruoyi.system.api.service.RemoteOrderService;
import com.ruoyi.system.api.service.RemoteShopService;
import com.ruoyi.system.api.service.RemoteUserService;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.constant.SecurityConstant;
import com.ruoyi.system.api.domain.dto.AppEditUserDto;
import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
import com.ruoyi.system.api.domain.dto.AppMemberGoodsTypeDto;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.poji.config.Activeness;
import com.ruoyi.system.api.domain.poji.config.SysTag;
import com.ruoyi.system.api.domain.poji.member.Member;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.model.AppMiniLoginDto;
import com.ruoyi.system.api.model.AppMiniLoginVo;
import com.ruoyi.system.api.service.RemoteConfigService;
import com.ruoyi.system.api.service.RemoteOrderService;
import com.ruoyi.system.api.service.RemoteShopService;
import com.ruoyi.system.api.service.RemoteUserService;
import lombok.extern.log4j.Log4j2;
import com.ruoyi.common.core.utils.StringUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -102,6 +95,13 @@
    @Resource
    private MemberTotalService memberTotalService;
    @Resource
    private IntegralRecordService integralRecordService;
    @Resource
    private MemberArchiveService memberArchiveService;
    /**
     * @description: TODO
@@ -641,7 +641,7 @@
     * @return
     */
    private String createMemberNo(){
        int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>().eq(Member::getDelFlag, 0));
        int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>());
        String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal+1));
        return memberNo;
    }
@@ -655,8 +655,278 @@
     */
    @Override
    public List<MgtMemberPageVo> pageMgtMember(Page page,MgtMemberPageDto merMemberPageDto){
        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
        Date nowDay = new Date();
        if(merMemberPageDto.getActivenessId()!=null){
            //处理活跃度筛选
            activenessList.stream()
                    .filter(activeness -> activeness.getActivenessId().equals(merMemberPageDto.getActivenessId()))
                    .findFirst()
                    .ifPresent(activeness -> {
                        merMemberPageDto.setActStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getEndDay())));
                        merMemberPageDto.setActEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getStartDay())));
                    });
        }
        //处理标签为正则表达
        if(StringUtils.isNotBlank(merMemberPageDto.getMemberTags())){
            merMemberPageDto.setMemberTags(merMemberPageDto.getMemberTags().replace(",","|"));
        }
        //查询获取结果列表
        List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto);
        //处理活跃度返回
        if(memberPageVoList!=null&&!memberPageVoList.isEmpty()){
            if(activenessList!=null&&!activenessList.isEmpty()){
                //生成活跃度时间段列表
                List<MgtActivenessJudgeVo> mgtActivenessJudgeVoList = new ArrayList<>();
                MgtActivenessJudgeVo mgtActivenessJudgeVo;
                for(Activeness activeness : activenessList){
                    mgtActivenessJudgeVo = new MgtActivenessJudgeVo();
                    mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(),activeness.getEndDay()));
                    mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(),activeness.getStartDay()-1));
                    mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName());
                }
                //活跃度赋值
                Date lastPayTime;
                for(MgtMemberPageVo mgtMemberPageVo : memberPageVoList){
                    lastPayTime = mgtMemberPageVo.getLastPayTime();
                    StringJoiner sj = new StringJoiner(",");
                    if(lastPayTime!=null){
                        for(MgtActivenessJudgeVo entity: mgtActivenessJudgeVoList){
                            if(lastPayTime.compareTo(entity.getStartDay())>=0&&lastPayTime.compareTo(entity.getEndDay())<=0){
                                sj.add(entity.getActivenessName());
                            }
                        }
                        if(sj.length()>0){
                            mgtMemberPageVo.setActiveness(sj.toString());
                        }
                    }
                }
            }
        }
        return memberPageVoList;
    }
    /**
     * 修改会员关联商户
     * @param mgtMemberRelEditDto
     */
    @Override
    public void editMemberRelationShop(MgtMemberRelEditDto mgtMemberRelEditDto){
        if(StringUtils.isNotBlank(mgtMemberRelEditDto.getMemberUserIds())){
            Shop shop = shopService.getShop(mgtMemberRelEditDto.getShopId()).getData();
            String memberUserIds = mgtMemberRelEditDto.getMemberUserIds();
            String[] memberUserIdArr = memberUserIds.split(",");
            for(String str : memberUserIdArr){
                Member member = this.getByUserId(Long.valueOf(str));
                member.setRelationShopId(shop.getShopId());
                member.setRelationShopName(shop.getShopName());
                member.setBindingFlag(1);
                member.setUpdateTime(new Date());
                member.setUpdateUserId(mgtMemberRelEditDto.getUserId());
                this.saveOrUpdate(member);
            }
        }
    }
    /**
     * 删除会员关联商户
     * @param mgtMemberRelDelDto
     */
    @Override
    public void deleteMemberRelationShop(MgtMemberRelDelDto mgtMemberRelDelDto){
        if(StringUtils.isNotBlank(mgtMemberRelDelDto.getMemberUserIds())) {
            String memberUserIds = mgtMemberRelDelDto.getMemberUserIds();
            String[] memberUserIdArr = memberUserIds.split(",");
            for(String str : memberUserIdArr) {
                Member member = this.getById(Long.valueOf(str));
                member.setBindingFlag(0);
                member.setUpdateTime(new Date());
                member.setUpdateUserId(mgtMemberRelDelDto.getUserId());
                this.saveOrUpdate(member);
            }
        }
    }
    /**
     * 修改会员积分
     * @param mgtMemberIntEditDto
     */
    @Override
    public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto){
        if(StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) {
            String memberUserIds = mgtMemberIntEditDto.getMemberUserIds();
            String[] memberUserIdArr = memberUserIds.split(",");
            MemberIntegralChangeDto memberIntegralChangeDto;
            for(String str : memberUserIdArr) {
                memberIntegralChangeDto = new MemberIntegralChangeDto();
                Member member = this.getByUserId(Long.valueOf(str));
                memberIntegralChangeDto.setUserId(Long.valueOf(str));
                memberIntegralChangeDto.setMemberId(member.getMemberId());
                memberIntegralChangeDto.setChangeType(1);
                memberIntegralChangeDto.setRecordType(3);
                memberIntegralChangeDto.setIntegral(mgtMemberIntEditDto.getIntegral());
                //调用积分变动
                memberIntegralChange(memberIntegralChangeDto);
            }
        }
    }
    /**
     * 会员积分变动
     * @param memberIntegralChangeDto
     */
    @Override
    public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto){
        MemberTotal memberTotal = memberTotalService.getById(memberIntegralChangeDto.getMemberId());
        Integer recordType = memberIntegralChangeDto.getRecordType();
        Integer changeType = memberIntegralChangeDto.getChangeType();
        Integer integer = memberIntegralChangeDto.getIntegral();
        Integer totalIntegral = memberTotal.getTotalIntegral();
        Integer usedIntegral = memberTotal.getUsedIntegral();
        Integer useableIntegral = memberTotal.getUseableIntegral();
        //变动统计
        if(changeType==1){
            totalIntegral = totalIntegral + integer;
            useableIntegral = useableIntegral + integer;
            memberTotal.setTotalIntegral(totalIntegral);
            memberTotal.setUseableIntegral(useableIntegral);
        }else if(changeType==2){
            usedIntegral = usedIntegral + integer;
            useableIntegral = useableIntegral - integer;
            if(useableIntegral<0){
                throw new ServiceException(AppErrorConstant.INTEGRAL_USE_FAILED);
            }
            memberTotal.setTotalIntegral(totalIntegral);
            memberTotal.setUseableIntegral(useableIntegral);
            memberTotal.setUsedIntegral(usedIntegral);
        }
        memberTotalService.saveOrUpdate(memberTotal);
        //记录变动
        IntegralRecord integralRecord = new IntegralRecord();
        integralRecord.setDelFlag(0);
        integralRecord.setUserId(memberIntegralChangeDto.getUserId());
        integralRecord.setChangeType(recordType);
        if(changeType==1){
            integralRecord.setChangeIntegral(integer);
        }else if(changeType==2){
            integralRecord.setChangeIntegral( 0-integer);
        }
        integralRecord.setSurpIntegral(useableIntegral);
        integralRecord.setCreateTime(new Date());
        integralRecord.setOrderId(memberIntegralChangeDto.getOrderId());
        integralRecord.setOrderNo(memberIntegralChangeDto.getOrderNo());
        switch (recordType){
            case 1:
                integralRecord.setChangeReason("购物赠送");
                break;
            case 2:
                integralRecord.setChangeReason("活动赠送");
                break;
            case 3:
                integralRecord.setChangeReason("平台赠送");
                break;
            default:
                break;
        }
        integralRecordService.saveOrUpdate(integralRecord);
    }
    /**
     * 平台获取会员信息
     * @param userId
     * @return
     */
    @Override
    public MgtMemberGetVo getMgtMemberInfo(Long userId){
        MgtMemberGetVo mgtMemberGetVo = new MgtMemberGetVo();
        Member member = this.getByUserId(userId);
        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
        List<MemberArchiveVo> memberArchiveVoList = memberArchiveService.listVoByUserId(member.getUserId());
        if(memberArchiveVoList!=null&&!memberArchiveVoList.isEmpty()){
            //去掉未完善信息
            memberArchiveVoList.removeIf(o -> Objects.isNull(o.getFieldValue()));
        }
        mgtMemberGetVo.setMemberId(member.getMemberId());
        mgtMemberGetVo.setUserId(member.getUserId());
        mgtMemberGetVo.setMemberNo(member.getMemberNo());
        mgtMemberGetVo.setRealName(member.getRealName());
        mgtMemberGetVo.setNickName(member.getNickName());
        mgtMemberGetVo.setMobile(member.getMobile());
        mgtMemberGetVo.setGender(member.getGender()==0 ? "男" : member.getGender()==1 ? "女" : null);
        mgtMemberGetVo.setBirthday(member.getBirthday());
        mgtMemberGetVo.setBelongDistrict(member.getBelongDistrict());
        mgtMemberGetVo.setCreateTime(member.getCreateTime());
        mgtMemberGetVo.setLastPayTime(memberTotal.getLastPayTime());
        mgtMemberGetVo.setGoodsType(member.getGoodsType());
        mgtMemberGetVo.setRelationShopName(member.getRelationShopName());
        mgtMemberGetVo.setIntegral(memberTotal.getTotalIntegral());
        mgtMemberGetVo.setMemberFrom(member.getCustomerSource());
        mgtMemberGetVo.setTotalActivityCount(memberTotal.getTotalActivityCount());
        mgtMemberGetVo.setTotalPayMoney(memberTotal.getTotalPayMoney());
        mgtMemberGetVo.setMemberRemark(null);
        mgtMemberGetVo.setMemberArchiveVoList(memberArchiveVoList);
        mgtMemberGetVo.setMemberTags(member.getUserTags());
        return mgtMemberGetVo;
    }
    /**
     * @description  删除标签
     * @author  jqs
     * @date    2023/6/8 15:18
     * @param memberTag
     * @return  void
     */
    @Override
    public void deleteMemberTag(String memberTag){
        memberMapper.deleteMemberTag(memberTag);
    }
    /**
     * @description  通过发送类型获取userId
     * @author  jqs
     * @date    2023/6/13 17:53
     * @param sendType
     * @return  List<Long>
     */
    @Override
    public List<Long> listIdBySendType(Integer sendType){
        //1.手动领取2.全部用户3.会员用户4非会员用户5自定义
        return memberMapper.listIdBySendType(sendType);
    }
    /**
     * @description  通过ids获取用户简易返回
     * @author  jqs
     * @date    2023/6/16 11:06
     * @param userIds
     * @return  List<MgtSimpleMemberVo>
     */
    @Override
    public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds){
        return memberMapper.listSimpleVoByIds(userIds);
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/6/16 12:41
     * @param mgtUserIdByKeywordDto
     * @return  MgtUserIdByKeywordVo
     */
    @Override
    public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto){
        MgtUserIdByKeywordVo mgtUserIdByKeywordVo = new MgtUserIdByKeywordVo();
        List<Long> userIdList = memberMapper.getUserIdByKeyword(mgtUserIdByKeywordDto);
        if(userIdList!=null&&!userIdList.isEmpty()){
            String userIdStr = userIdList.stream()
                    .map(Object::toString)
                    .collect(Collectors.joining(","));
            mgtUserIdByKeywordVo.setUserIds(userIdStr);
        }
        return mgtUserIdByKeywordVo;
    }
}