bug
jiangqs
2023-08-31 dbff53150cdc807faa56c0d1a947d24b69f372b9
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -4,6 +4,7 @@
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -17,12 +18,17 @@
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.MemberArchive;
import com.ruoyi.member.domain.pojo.member.MemberTotal;
import com.ruoyi.member.domain.vo.MerMemberTotalVo;
import com.ruoyi.member.domain.vo.*;
import com.ruoyi.member.mapper.member.MemberMapper;
import com.ruoyi.member.service.member.*;
import com.ruoyi.member.service.member.IntegralRecordService;
import com.ruoyi.member.service.member.MemberArchiveService;
import com.ruoyi.member.service.member.MemberService;
import com.ruoyi.member.service.member.MemberTotalService;
import com.ruoyi.member.util.HttpUtils;
import com.ruoyi.member.util.MsgUtils;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.constant.SecurityConstant;
import com.ruoyi.system.api.domain.dto.*;
@@ -46,6 +52,8 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -84,8 +92,6 @@
    @Resource
    private RemoteOrderService orderService;
    @Resource
    private MemberNurseService memberNurseService;
    @Resource
    private RemoteConfigService remoteConfigService;
@@ -115,18 +121,17 @@
     * @version 1.0
     */
    @Override
    public Member getByUserId(Long userId){
    public Member getByUserId(Long userId) {
        Member member = memberMapper.selectMemberByUserId(userId);
        return member;
    }
    /**
     *
     * @param appMiniLoginDto
     * @return
     */
    @Override
    public AppMiniLoginVo getMemberByCode(AppMiniLoginDto appMiniLoginDto){
    public AppMiniLoginVo getMemberByCode(AppMiniLoginDto appMiniLoginDto) {
        AppMiniLoginVo appMiniLoginVo = new AppMiniLoginVo();
        WxMaJscode2SessionResult session = null;
@@ -140,38 +145,39 @@
            e.printStackTrace();
            return null;
        }
        if(session!=null&& StringUtils.isNotBlank(session.getOpenid())){
        if (session != null && StringUtils.isNotBlank(session.getOpenid())) {
            unionid = session.getUnionid();
            openid = session.getOpenid();
            sessionKey = session.getSessionKey();
            //获取用户
            Member member = memberMapper.getOneByMiniOpenid(openid);
            SysUser sysUser = null;
            if(member!=null){
            if (member != null) {
                sysUser = sysUserService.getSysUser(member.getUserId()).getData();
            }
            appMiniLoginVo.setMiniOpenid(openid);
            appMiniLoginVo.setWxUnionid(unionid);
            appMiniLoginVo.setSysUser(sysUser);
            appMiniLoginVo.setSessionKey(sessionKey);
            redisService.setCacheObject(SecurityConstant.SESSION_KEY+openid,sessionKey,1L,TimeUnit.DAYS);
            redisService.setCacheObject(SecurityConstant.SESSION_KEY + openid, sessionKey, 1L, TimeUnit.DAYS);
        }
        log.info("appMiniLoginVo"+appMiniLoginVo.toString());
        log.info("appMiniLoginVo" + appMiniLoginVo.toString());
        return appMiniLoginVo;
    }
    /**
     * 小程序注册
     *
     * @param appUserRegisterDto
     * @return
     */
    @Override
    public AppMiniRegisterVo miniRegister(AppMiniRegisterDto appUserRegisterDto){
    public AppMiniRegisterVo miniRegister(AppMiniRegisterDto appUserRegisterDto) {
        AppMiniRegisterVo appUserRegisterVo = new AppMiniRegisterVo();
        String mobile = null;
        //获取code接口在redis里存放的sessionkey用于解密
        String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY+ appUserRegisterDto.getMiniOpenid());
        if(StringUtils.isBlank(sessionkey)){
        String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY + appUserRegisterDto.getMiniOpenid());
        if (StringUtils.isBlank(sessionkey)) {
            throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN);
        }
        try {
@@ -196,7 +202,26 @@
            String errcode = jsonUserPhoneNumber.getString("errcode");
            String errmsg = jsonUserPhoneNumber.getString("errmsg");
            if (!"0".equals(errcode)) {
                throw new ServiceException(errmsg);
                //因为生产测试差异,临时更新token
                redisService.deleteObject(SecurityConstant.WX_TOKEN);
                String responseAccessToken = getAccessTokenByWX();
                JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken);
                accessToken = jsonAccessToken.getString("access_token");
                errmsg = jsonAccessToken.getString("errmsg");
                Long expiresIn = jsonAccessToken.getLong("expires_in");
                if (StringUtils.isBlank(accessToken)) {
                    throw new ServiceException(errmsg);
                } else {
                    expiresIn = expiresIn - 100;
                    redisService.setCacheObject(SecurityConstant.WX_TOKEN, accessToken, Long.valueOf(expiresIn), TimeUnit.SECONDS);
                }
                responseUserPhoneNumber = getMobileByWX(accessToken, appUserRegisterDto.getMobileCode());
                jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber);
                errcode = jsonUserPhoneNumber.getString("errcode");
                errmsg = jsonUserPhoneNumber.getString("errmsg");
                if (!"0".equals(errcode)) {
                    throw new ServiceException(errmsg);
                }
            }
            String phoneInfo = jsonUserPhoneNumber.getString("phone_info");
            JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo);
@@ -204,24 +229,25 @@
        } catch (Exception e) {
            e.printStackTrace();
        }
        if(StringUtils.isBlank(mobile)){
        if (StringUtils.isBlank(mobile)) {
            return null;
        }
        //判断openid是否被其他手机号占用
        Member checkMember = memberMapper.getOneByMiniOpenid(appUserRegisterDto.getMiniOpenid());
        if(checkMember!=null&&!checkMember.getMobile().equals(mobile)){
        if (checkMember != null && !checkMember.getMobile().equals(mobile)) {
            throw new ServiceException("微信号换绑手机需联系客服");
        }
        Member member = memberMapper.selectMemberByMobile(mobile);
        SysUser sysUser;
        //获取用户为空则新建
        if(member == null){
        if (member == null) {
            //创建新用户
            String memberId = IdUtils.simpleUUID();
            sysUser = new SysUser();
            sysUser.setUserName(memberId);
            sysUser.setUserType("03");
            sysUser.setNickName("鸿瑞堂用户");
            sysUser.setPhonenumber(mobile);
            sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
            String password = "hongruitang";
            sysUser.setPassword(SecurityUtils.encryptPassword(password));
@@ -231,6 +257,7 @@
            member.setMemberNo(memberNo);
            member.setUserId(sysUser.getUserId());
            member.setDelFlag(0);
            member.setFrozenFlag(0);
            member.setNickName("鸿瑞堂用户");
            member.setRealName("鸿瑞堂用户");
            member.setCustomerSource("小程序");
@@ -240,12 +267,14 @@
            member.setCreateTime(new Date());
            member.setMobile(mobile);
            initMemberTotal(memberId);
        }else{
            log.info("sysUser01-----------------" + sysUser.toString());
        } else {
            sysUser = sysUserService.getSysUser(member.getUserId()).getData();
            log.info("sysUser02-----------------" + sysUser.toString());
        }
        member.setWxUnionid(appUserRegisterDto.getWxUnionid());
        member.setMiniOpenid(appUserRegisterDto.getMiniOpenid());
        log.info("member-----------------"+member.toString());
        log.info("member02-----------------" + member.toString());
        this.saveOrUpdate(member);
        appUserRegisterVo.setMobile(mobile);
        appUserRegisterVo.setNickName(member.getNickName());
@@ -257,19 +286,19 @@
    public static String getAccessTokenByWX() throws Exception {
        String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential";
        Map<String, String> headers  = new HashMap<>(8);
        Map<String, String> headers = new HashMap<>(8);
        HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null);
        return EntityUtils.toString(response.getEntity());
    }
    public static String getMobileByWX(String accessToken,  String code) throws Exception {
    public static String getMobileByWX(String accessToken, String code) throws Exception {
        String method = "POST";
        Map<String, String> headers = new HashMap<>(16);
        headers.put("Content-Type", "application/json");
        headers.put("Accept", "application/json");
        Map<String, String> querys = new HashMap<>(16);
        Map<String, String> bodys = new HashMap<>(16);
        querys.put("access_token", accessToken );
        querys.put("access_token", accessToken);
        bodys.put("code", code);
        String body = JSONObject.toJSONString(bodys);
        String host = "https://api.weixin.qq.com/wxa/business/getuserphonenumber";
@@ -279,11 +308,12 @@
    /**
     * 获取用户信息
     *
     * @param userId
     * @return
     */
    @Override
    public AppUserInfoVo getAppUserInfo(Long userId){
    public AppUserInfoVo getAppUserInfo(Long userId) {
        AppUserInfoVo appUserInfoVo = new AppUserInfoVo();
        Member member = this.getByUserId(userId);
        appUserInfoVo.setUserId(userId);
@@ -291,11 +321,11 @@
        appUserInfoVo.setNickName(member.getNickName());
        appUserInfoVo.setRealName(member.getRealName());
        appUserInfoVo.setPhonenumber(member.getMobile());
        if(member.getRelationShopId()!=null&&member.getBindingFlag()==1){
        if (member.getRelationShopId() != null && member.getBindingFlag() == 1) {
            appUserInfoVo.setRelationShopId(member.getRelationShopId());
            Shop shop = shopService.getShop(member.getRelationShopId()).getData();
            appUserInfoVo.setShopName(shop.getShopName());
            appUserInfoVo.setShopAddress(shop.getShopAreaName()+shop.getShopAddress());
            appUserInfoVo.setShopAddress(shop.getShopAreaName() + shop.getShopAddress());
        }
        appUserInfoVo.setBirthday(member.getBirthday());
        appUserInfoVo.setGender(member.getGender());
@@ -303,54 +333,120 @@
        AppOrderTotalVo appOrderTotalVo = orderService.getAppOrderTotal(userId).getData();
        appUserInfoVo.setNoPayCount(appOrderTotalVo.getNoPayCount());
        appUserInfoVo.setNoUseCount(appOrderTotalVo.getNoUseCount());
        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
        appUserInfoVo.setIntegral(memberTotal.getUseableIntegral());
        return appUserInfoVo;
    }
    /**
     * 修改用户信息
     *
     * @param appEditUserDto
     */
    @Override
    public void editAppUserInfo(AppEditUserDto appEditUserDto){
    public void editAppUserInfo(AppEditUserDto appEditUserDto) {
        //修改类型1.昵称2.头像3.性别4.生日
        Integer editType = appEditUserDto.getEditType();
        String editValue = appEditUserDto.getEditValue();
        Member member = this.getByUserId(appEditUserDto.getUserId());
        switch (editType){
        switch (editType) {
            case 1:
                member.setNickName(editValue);
                member.setUpdateTime(new Date());
                member.setUpdateUserId(appEditUserDto.getUserId());
                this.saveOrUpdate(member);
                break;
            case 2:
                member.setAvatar(editValue);
                break;
            case 3:
                member.setGender(Integer.valueOf(editValue));
                member.setUpdateTime(new Date());
                member.setUpdateUserId(appEditUserDto.getUserId());
                this.saveOrUpdate(member);
                break;
            case 4:
                if(editValue.compareTo(DateUtils.getDate())>0){
                    throw new ServiceException(AppErrorConstant.BIRTHDAY_BEYOND);
                }
                member.setBirthday(editValue);
                member.setUpdateTime(new Date());
                member.setUpdateUserId(appEditUserDto.getUserId());
                this.saveOrUpdate(member);
                break;
            case 5:
                member.setRealName(editValue);
                break;
            default:
                break;
        }
        member.setUpdateTime(new Date());
        member.setUpdateUserId(appEditUserDto.getUserId());
        this.saveOrUpdate(member);
        sysUserService.editUserInfo(appEditUserDto);
    }
    /**
     * 分页获取会员信息
     *
     * @param merMemberPageDto
     * @return
     */
    @Override
    public List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto){
        List<MerMemberPageVo> merMemberPageVoList = memberMapper.pageMerMember(page,merMemberPageDto);
    public List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto) {
        //处理活跃度
        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
        if (StringUtils.isNotBlank(merMemberPageDto.getMemberActiveness())) {
            if(!activenessList.isEmpty()){
                for(Activeness activeness : activenessList){
                    if(activeness.getActivenessName().equals(merMemberPageDto.getMemberActiveness())){
                        Date nowDay = DateUtils.getNowDate();
                        String actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay()));
                        String actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay()));
                        merMemberPageDto.setActStartDate(actStartDate);
                        merMemberPageDto.setActEndDate(actEndDate);
                        break;
                    }
                }
            }
        }
        //处理剩余次数
        if(merMemberPageDto.getSurpNum()!=null){
            if(merMemberPageDto.getSurpNum()==1){
                merMemberPageDto.setSurpStartNum(0);
                merMemberPageDto.setSurpEndNum(5);
            }else if(merMemberPageDto.getSurpNum()==2){
                merMemberPageDto.setSurpStartNum(5);
                merMemberPageDto.setSurpEndNum(10);
            }else if(merMemberPageDto.getSurpNum()==3){
                merMemberPageDto.setSurpStartNum(10);
                merMemberPageDto.setSurpEndNum(999999999);
            }
        }
        List<MerMemberPageVo> merMemberPageVoList = memberMapper.pageMerMember(page, merMemberPageDto);
        //处理活跃度返回
        if (merMemberPageVoList != null && !merMemberPageVoList.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()));
                    mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName());
                    mgtActivenessJudgeVoList.add(mgtActivenessJudgeVo);
                }
                //活跃度赋值
                Date lastPayTime;
                for (MerMemberPageVo mgtMemberPageVo : merMemberPageVoList) {
                    //实际是最后服务时间
                    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.setMemberActiveness(sj.toString());
                        }
                    }
                }
            }
        }
        return merMemberPageVoList;
    }
@@ -362,93 +458,132 @@
     * @version 1.0
     */
    @Override
    public MerMemberInfoVo getMerMemberInfo(Long userId){
    public MerMemberInfoVo getMerMemberInfo(MerBaseGetDto merBaseGetDto) {
        // 将id转换为Long类型
        Long userId = Long.valueOf(merBaseGetDto.getId());
        // 创建MerMemberInfoVo对象
        MerMemberInfoVo merMemberInfoVo = new MerMemberInfoVo();
        // 根据userId获取Member对象
        Member member = this.getByUserId(userId);
        // 设置MerMemberInfoVo对象的属性值
        merMemberInfoVo.setUserId(userId);
        merMemberInfoVo.setNickName(member.getNickName());
        merMemberInfoVo.setRealName(member.getRealName());
        merMemberInfoVo.setPhonenumber(member.getMobile());
        merMemberInfoVo.setAvatar(member.getAvatar());
        merMemberInfoVo.setBirthday(member.getBirthday());
        merMemberInfoVo.setUserTags(member.getUserTags());
        //未完成
        merMemberInfoVo.setMemberType(member.getGoodsType());
        // 根据memberId获取MemberTotal对象
        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
        // 设置MerMemberInfoVo对象的属性值
        merMemberInfoVo.setSurpNumber(memberTotal.getUseableServiceCount());
        // 创建MerBaseDto对象
        MerBaseDto merBaseDto = new MerBaseDto();
        // 设置MerBaseDto对象的属性值
        merBaseDto.setShopId(merBaseGetDto.getShopId());
        merBaseDto.setUserId(userId);
        // 获取未支付订单金额
        MerMemberSimpleTotalVo memberSimpleTotalVo = remoteOrderService.getMerMemberSimpleTotalVo(merBaseDto).getData();
        merMemberInfoVo.setUserNumber(memberSimpleTotalVo.getUserNumber());
        merMemberInfoVo.setPayMoney(memberSimpleTotalVo.getPayMoney());
        merMemberInfoVo.setUnpaidMoney(memberSimpleTotalVo.getUnpaidMoney());
        // 获取最近的会员任务
        MemberTaskSimpleVo memberTaskSimpleVo = remoteShopService.getLastMemberTask(userId).getData();
        if (memberTaskSimpleVo != null) {
            merMemberInfoVo.setLastTaskContent(memberTaskSimpleVo.getTaskContent());
            merMemberInfoVo.setLastTaskTime(memberTaskSimpleVo.getTaskDate());
        }
        // 设置MerMemberInfoVo对象的属性值
        merMemberInfoVo.setNextTaskTime(memberTotal.getNextTaskTime());
        merMemberInfoVo.setLastPayTime(memberTotal.getLastConsumeTime());
        // 返回MerMemberInfoVo对象
        return merMemberInfoVo;
    }
    /**
     * 分页获取收银用户列表
     *
     * @param page
     * @param merCashMemberPageDto
     * @return
     */
    @Override
    public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto){
    public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto) {
        List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page,merCashMemberPageDto);
        List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page, merCashMemberPageDto);
        return merCashMemberPageVos;
    }
    /**
     * 更新会员绑定商户
     *
     * @param appMemberBindingDto
     */
    @Override
    public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto){
    public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto) {
        Member member = this.getByUserId(appMemberBindingDto.getUserId());
        if(member.getBindingFlag()==0){
        if (member.getBindingFlag() == 0) {
            member.setBindingTime(new Date());
        }
        member.setBindingFlag(appMemberBindingDto.getBindingFlag());
        member.setRelationShopId(appMemberBindingDto.getShopId());
        member.setRelationShopName(appMemberBindingDto.getShopName());
        member.setBindingType(appMemberBindingDto.getBindingType());
        this.saveOrUpdate(member);
    }
    /**
     * 获取会员基础档案
     *
     * @param userId
     * @return
     */
    @Override
    public MerMemberBasicFileVo getMerMemberBasicFile(Long userId){
    public MerMemberBasicFileVo getMerMemberBasicFile(Long userId) {
        MerMemberBasicFileVo merMemberBasicFileVo = new MerMemberBasicFileVo();
        Member member = this.getByUserId(userId);
        BeanUtils.copyProperties(member, merMemberBasicFileVo);
        merMemberBasicFileVo.setNickName(member.getNickName());
        merMemberBasicFileVo.setRealName(member.getRealName());
        merMemberBasicFileVo.setPhonenumber(member.getMobile());
        merMemberBasicFileVo.setCreateTime(member.getCreateTime());
        List<MemberNurse> memberNurseList = memberNurseService.listByUserId(userId);
        List<String> valueList = memberNurseList.stream().map(k->k.getNurse()).collect(Collectors.toList());
        merMemberBasicFileVo.setMemberNurse(valueList);
        /*List<MemberNurse> memberNurseList = memberNurseService.listByUserId(userId);
        List<String> valueList = memberNurseList.stream().map(k -> k.getNurse()).collect(Collectors.toList());*/
        String memberNurse = member.getMemberNurse();
        if(StringUtils.isNotBlank(memberNurse)){
            List<String> valueList = Arrays.asList(memberNurse.split(","));
            merMemberBasicFileVo.setMemberNurse(valueList);
        }
        List<MemberArchiveVo> achiveList = memberArchiveService.listMerVoByUserId(userId);
        merMemberBasicFileVo.setAchiveList(achiveList);
        return merMemberBasicFileVo;
    }
    /**
     * 获取会员标签
     *
     * @param userId
     * @return
     */
    @Override
    public List<MerMemberTagVo> getMerMemberTags(Long userId){
    public List<MerMemberTagVo> getMerMemberTags(Long userId) {
        Member member = this.getByUserId(userId);
        String userTags = member.getUserTags();
        String[] userTagsArr = null;
        if(StringUtils.isNotBlank(userTags)){
        if (StringUtils.isNotBlank(userTags)) {
            userTagsArr = userTags.split(",");
        }
        List<SysTag> sysTagsList = remoteConfigService.listSysTag(1).getData();
        List<MerMemberTagVo> merMemberTagVoList = new ArrayList<>();
        MerMemberTagVo merMemberTagVo;
        String tagName;
        if(sysTagsList!=null&&!sysTagsList.isEmpty()){
            for(SysTag sysTag : sysTagsList){
        if (sysTagsList != null && !sysTagsList.isEmpty()) {
            for (SysTag sysTag : sysTagsList) {
                merMemberTagVo = new MerMemberTagVo();
                tagName = sysTag.getTagName();
                merMemberTagVo.setTagName(tagName);
                if(userTagsArr!=null &&  ArrayUtils.contains(userTagsArr, tagName)){
                if (userTagsArr != null && ArrayUtils.contains(userTagsArr, tagName)) {
                    merMemberTagVo.setSelectFlag(1);
                }else{
                } else {
                    merMemberTagVo.setSelectFlag(0);
                }
                merMemberTagVoList.add(merMemberTagVo);
@@ -459,15 +594,16 @@
    /**
     * 编辑会员标签
     *
     * @param merMemberTagEditDto
     */
    @Override
    public void editMerMemberTags(MerMemberTagEditDto merMemberTagEditDto){
    public void editMerMemberTags(MerMemberTagEditDto merMemberTagEditDto) {
        Member member = this.getByUserId(merMemberTagEditDto.getMemberUserId());
        List<String> userTags = merMemberTagEditDto.getUserTags();
        StringJoiner sj = new StringJoiner(",");
        if(userTags!=null&&!userTags.isEmpty()){
            for(String str : userTags){
        if (userTags != null && !userTags.isEmpty()) {
            for (String str : userTags) {
                sj.add(str);
            }
        }
@@ -478,37 +614,45 @@
    /**
     * 添加会员
     *
     * @param merMemberAddDto
     */
    @Override
    public void addMerMember(MerMemberAddDto merMemberAddDto){
        String phonenumber = merMemberAddDto.getPhonenumber();
        Member oldMember = this.getByMobile(phonenumber);
        if(oldMember!=null){
    public Long addMerMember(MerMemberAddDto merMemberAddDto) {
        String phoneNumber = merMemberAddDto.getPhonenumber();
        Member oldMember = this.getByMobile(phoneNumber);
        // Check if the member already exists
        if (oldMember != null) {
            throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE);
        }
        SysUser sysUser = sysUserService.getSysUserByMobile(phonenumber).getData();
        if(sysUser==null){
        // Get the sysUser by mobile number
        SysUser sysUser = sysUserService.getSysUserByMobile(phoneNumber).getData();
        // If sysUser does not exist, create a new one
        if (sysUser == null || !sysUser.getUserType().equals("03")) {
            String memberId = IdUtils.simpleUUID();
            sysUser = new SysUser();
            sysUser.setUserName(memberId);
            sysUser.setUserType("03");
            sysUser.setNickName(merMemberAddDto.getNickName());
            sysUser.setNickName(merMemberAddDto.getRealName());
            sysUser.setPhonenumber(merMemberAddDto.getPhonenumber());
            sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
            String password = "hongruitang";
            sysUser.setPassword(SecurityUtils.encryptPassword(password));
            log.debug("sysUser"+sysUser.toString());
            log.debug("sysUser" + sysUser.toString());
            sysUser = sysUserService.registerUser(sysUser).getData();
            // Create a new member
            Member member = new Member();
            String memberNo = createMemberNo();
            member.setMemberNo(memberNo);
            member.setMemberId(memberId);
            member.setUserId(sysUser.getUserId());
            member.setDelFlag(0);
            member.setNickName(merMemberAddDto.getNickName());
            member.setRealName(merMemberAddDto.getNickName());
            member.setFrozenFlag(0);
            member.setNickName(merMemberAddDto.getRealName());
            member.setRealName(merMemberAddDto.getRealName());
            member.setGender(merMemberAddDto.getGender());
            member.setMobile(phonenumber);
            member.setLevel(merMemberAddDto.getLevel());
            member.setMobile(phoneNumber);
            member.setReferrer(merMemberAddDto.getReferrer());
            member.setBirthday(merMemberAddDto.getBirthday());
            member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
@@ -517,33 +661,59 @@
            member.setMiniOpenid(null);
            member.setBindingFlag(1);
            member.setBindingTime(new Date());
            member.setBindingType(6);
            // Get shop information and set it to the member
            Shop shop = remoteShopService.getShop(merMemberAddDto.getShopId()).getData();
            member.setRelationShopName(shop.getShopName());
            member.setCustomerSource("商户添加");
            member.setCustomerSource(merMemberAddDto.getCustomerSource());
            member.setCreateTime(new Date());
            log.info("member-----------------"+member.toString());
            //调理问题
            List<String> memberNurse = merMemberAddDto.getMemberNurse();
            if(memberNurse!=null&&!memberNurse.isEmpty()){
                String memberNurseString = String.join(",", memberNurse);
                member.setMemberNurse(memberNurseString);
            }
            // Save the member and initialize member total
            this.saveOrUpdate(member);
            initMemberTotal(memberId);
            List<MemberArchiveVo> achiveList = merMemberAddDto.getAchiveList();
            if(achiveList!=null&&!achiveList.isEmpty()){
                SysUser finalSysUser = sysUser;
                List<MemberArchive> memberArchiveList = achiveList.stream().map(memberArchiveVo -> {
                    MemberArchive memberArchive = new MemberArchive();
                    memberArchive.setDelFlag(0);
                    memberArchive.setUserId(finalSysUser.getUserId());
                    memberArchive.setFieldId(memberArchiveVo.getFieldId());
                    memberArchive.setFieldValue(memberArchiveVo.getFieldValue());
                    return memberArchive;
                    }
                ).collect(Collectors.toList());
                memberArchiveService.saveBatch(memberArchiveList);
            }
        }else{
            throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE);
        }
        return sysUser.getUserId();
    }
    /**
     * 编辑会员
     *
     * @param merMemberEditDto
     */
    @Override
    public void editMerMember(MerMemberEditDto merMemberEditDto){
    public void editMerMember(MerMemberEditDto merMemberEditDto) {
        // 获取用户信息
        Member member = this.getByUserId(merMemberEditDto.getEditUserId());
        if(!member.getMobile().equals(merMemberEditDto.getPhonenumber())){
         // 检查手机号是否已经存在
        if (!member.getMobile().equals(merMemberEditDto.getPhonenumber())) {
            Member memberOld = getByMobile(merMemberEditDto.getPhonenumber());
            if(memberOld!=null){
            if (memberOld != null) {
                throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE);
            }
        }
        member.setRealName(merMemberEditDto.getNickName());
         // 更新用户信息
        member.setRealName(merMemberEditDto.getRealName());
        member.setMobile(merMemberEditDto.getPhonenumber());
        member.setGender(merMemberEditDto.getGender());
        member.setReferrer(merMemberEditDto.getReferrer());
@@ -552,21 +722,42 @@
        member.setBirthday(merMemberEditDto.getBirthday());
        member.setUpdateUserId(merMemberEditDto.getUserId());
        member.setUpdateTime(new Date());
        log.info("member-----------------"+member.toString());
        List<String> memberNurse = merMemberEditDto.getMemberNurse();
        if(memberNurse!=null&&!memberNurse.isEmpty()){
            String memberNurseString = String.join(",", memberNurse);
            member.setMemberNurse(memberNurseString);
        }
        this.saveOrUpdate(member);
         // 更新用户手机号
        SysUser sysUser = new SysUser();
        sysUser.setUserId(merMemberEditDto.getEditUserId());
        sysUser.setPhonenumber(merMemberEditDto.getPhonenumber());
        sysUserService.updateUserMobile(sysUser);
         // 删除用户的档案信息
        memberArchiveService.deleteByUserId(sysUser.getUserId());
         // 添加用户的档案信息
        List<MemberArchiveVo> achiveList = merMemberEditDto.getAchiveList();
        if (achiveList != null && !achiveList.isEmpty()) {
            // 构造用户档案列表
            List<MemberArchive> memberArchiveList = achiveList.stream().map(memberArchiveVo -> {
                MemberArchive memberArchive = new MemberArchive();
                memberArchive.setDelFlag(0);
                memberArchive.setUserId(sysUser.getUserId());
                memberArchive.setFieldId(memberArchiveVo.getFieldId());
                memberArchive.setFieldValue(memberArchiveVo.getFieldValue());
                return memberArchive;
            }).collect(Collectors.toList());
             // 批量保存用户档案信息
            memberArchiveService.saveBatch(memberArchiveList);
        }
    }
    /**
     *
     * @param mobile
     * @return
     */
    @Override
    public Member getByMobile(String mobile){
    public Member getByMobile(String mobile) {
        LambdaQueryWrapper<Member> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(Member::getDelFlag, 0).eq(Member::getMobile, mobile);
        Member member = this.getOne(queryWrapper);
@@ -575,28 +766,56 @@
    /**
     * 更新用户商品类型
     *
     * @param appMemberGoodsTypeDto
     */
    @Override
    public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto){
    public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto) {
        // 根据用户ID获取会员信息
        Member member = this.getByUserId(appMemberGoodsTypeDto.getUserId());
        // 获取商品类型集合和商品护理集合
        HashSet<String> goodsTypeSet = appMemberGoodsTypeDto.getGoodsTypeSet();
        if(member!=null){
            String goodsType = member.getGoodsType();
        HashSet<String> goodsNurseSet = appMemberGoodsTypeDto.getGoodsNurseSet();
        // 如果会员存在
        if (member != null) {
            // 标识是否有变化
            Boolean change = false;
            for(String str : goodsTypeSet){
                if(goodsType != null){
                    if(!goodsType.contains(str)){
                        goodsType = goodsType + "," + str;
            // 更新商品类型
            if (goodsTypeSet != null && goodsTypeSet.size() > 0) {
                String goodsType = member.getGoodsType();
                HashSet<String> goodsTypeOldSet = new HashSet<>();
                // 如果商品类型不为空
                if (StringUtils.isNotBlank(goodsType)) {
                    goodsTypeOldSet = new HashSet<>(Arrays.asList(goodsType.split(",")));
                    // 如果商品类型集合相等
                    if (!goodsTypeSet.equals(goodsTypeOldSet)) {
                        change = true;
                    }
                }else{
                    goodsType = str;
                } else {
                    change = true;
                }
                goodsTypeOldSet.addAll(goodsTypeSet);
                member.setGoodsType(String.join(",", goodsTypeOldSet));
            }
            if(change){
                member.setGoodsType(goodsType);
            // 更新商品护理
            if (goodsNurseSet != null && goodsNurseSet.size() > 0) {
                String memberNurse = member.getMemberNurse();
                HashSet<String> memberNurseOldSet = new HashSet<>();
                // 如果会员护理不为空
                if (StringUtils.isNotBlank(memberNurse)) {
                    memberNurseOldSet = new HashSet<>(Arrays.asList(memberNurse.split(",")));
                    // 如果商品护理集合相等
                    if (!goodsNurseSet.equals(memberNurseOldSet)) {
                        change = true;
                    }
                } else {
                    change = true;
                }
                memberNurseOldSet.addAll(goodsNurseSet);
                member.setMemberNurse(String.join(",", memberNurseOldSet));
            }
            // 如果有变化,则保存或更新会员信息
            if (change) {
                this.saveOrUpdate(member);
            }
        }
@@ -605,15 +824,16 @@
    /**
     * 订单创建新用户
     *
     * @param member
     */
    @Override
    public void createNewMember(Member member){
    public void createNewMember(Member member) {
        String memberNo = createMemberNo();
        member.setMemberNo(memberNo);
        member.setDelFlag(0);
        member.setFrozenFlag(0);
        member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
        member.setBindingFlag(0);
        member.setCreateTime(new Date());
        member.setCustomerSource("商户订单添加");
        this.saveOrUpdate(member);
@@ -622,10 +842,11 @@
    /**
     * 生成会员统计
     *
     * @param memberId
     * @return
     */
    private void initMemberTotal(String memberId){
    private void initMemberTotal(String memberId) {
        MemberTotal memberTotal = new MemberTotal();
        memberTotal.setMemberId(memberId);
        memberTotal.setDelFlag(0);
@@ -643,70 +864,91 @@
        memberTotal.setTotalExperienceOrder(0);
        memberTotal.setTotalServiceOrder(0);
        memberTotal.setTotalGoodsOrder(0);
        memberTotal.setShareFlag(0);
        memberTotal.setPlSuggestFlag(0);
        memberTotal.setShopSuggestFlag(0);
        memberTotal.setSignFlag(0);
        memberTotal.setBuyFlag(0);
        memberTotal.setTotalConsumeCount(0);
        memberTotalService.saveOrUpdate(memberTotal);
    }
    /**
     * 生成会员编号
     *
     * @return
     */
    private String createMemberNo(){
    private String createMemberNo() {
        int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>());
        String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal+1));
        String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal + 1));
        return memberNo;
    }
    /**
     * 平台分页获取会员列表
     *
     * @param page
     * @param merMemberPageDto
     * @return
     */
    @Override
    public List<MgtMemberPageVo> pageMgtMember(Page page,MgtMemberPageDto merMemberPageDto){
    public List<MgtMemberPageVo> pageMgtMember(Page page, MgtMemberPageDto merMemberPageDto) {
        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
        Date nowDay = new Date();
        if(merMemberPageDto.getActivenessId()!=null){
        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())));
                        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(",","|"));
        if (StringUtils.isNotBlank(merMemberPageDto.getMemberTags())) {
            merMemberPageDto.setMemberTags(merMemberPageDto.getMemberTags().replace(",", "|"));
        }
        //处理生日
        if(merMemberPageDto.getStartAge()!=null){
            LocalDate currentDate = LocalDate.now();
            LocalDate endBirthday = currentDate.minusYears(merMemberPageDto.getStartAge());
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            merMemberPageDto.setEndBirthday(endBirthday.format(formatter));
        }
        if(merMemberPageDto.getEndAge()!=null){
            LocalDate currentDate = LocalDate.now();
            LocalDate startBirthday = currentDate.minusYears(merMemberPageDto.getEndAge()+1);
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            merMemberPageDto.setStartBirthday(startBirthday.format(formatter));
        }
        //查询获取结果列表
        List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto);
        //处理活跃度返回
        if(memberPageVoList!=null&&!memberPageVoList.isEmpty()){
            if(activenessList!=null&&!activenessList.isEmpty()){
        if (memberPageVoList != null && !memberPageVoList.isEmpty()) {
            if (activenessList != null && !activenessList.isEmpty()) {
                //生成活跃度时间段列表
                List<MgtActivenessJudgeVo> mgtActivenessJudgeVoList = new ArrayList<>();
                MgtActivenessJudgeVo mgtActivenessJudgeVo;
                for(Activeness activeness : activenessList){
                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.setStartDay(DateUtils.addDays(new Date(), -activeness.getEndDay()));
                    mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(), -activeness.getStartDay()));
                    mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName());
                }
                //活跃度赋值
                Date lastPayTime;
                for(MgtMemberPageVo mgtMemberPageVo : memberPageVoList){
                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){
                    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){
                        if (sj.length() > 0) {
                            mgtMemberPageVo.setActiveness(sj.toString());
                        }
                    }
@@ -719,23 +961,26 @@
    /**
     * 修改会员关联商户
     *
     * @param mgtMemberRelEditDto
     */
    @Override
    public void editMemberRelationShop(MgtMemberRelEditDto mgtMemberRelEditDto){
        if(StringUtils.isNotBlank(mgtMemberRelEditDto.getMemberUserIds())){
    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){
            for (String str : memberUserIdArr) {
                Member member = this.getByUserId(Long.valueOf(str));
                member.setRelationShopId(shop.getShopId());
                member.setRelationShopName(shop.getShopName());
                member.setBindingFlag(1);
                member.setBindingType(7);
                member.setBindingTime(new Date());
                member.setUpdateTime(new Date());
                member.setUpdateUserId(mgtMemberRelEditDto.getUserId());
                this.saveOrUpdate(member);
                memberMapper.updateById(member);
            }
        }
    }
@@ -743,34 +988,39 @@
    /**
     * 删除会员关联商户
     *
     * @param mgtMemberRelDelDto
     */
    @Override
    public void deleteMemberRelationShop(MgtMemberRelDelDto mgtMemberRelDelDto){
        if(StringUtils.isNotBlank(mgtMemberRelDelDto.getMemberUserIds())) {
    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.getByUserId(Long.valueOf(str));
                member.setBindingFlag(0);
                member.setUpdateTime(new Date());
                member.setUpdateUserId(mgtMemberRelDelDto.getUserId());
                this.saveOrUpdate(member);
            for (String str : memberUserIdArr) {
                LambdaUpdateWrapper<Member> updateWrapper = Wrappers.lambdaUpdate();
                updateWrapper.eq(Member::getUserId, str)
                        .set(Member::getBindingFlag, 0)
                        .set(Member::getRelationShopId,null)
                        .set(Member::getRelationShopName,null)
                        .set(Member::getUpdateUserId,mgtMemberRelDelDto.getUserId())
                        .set(Member::getUpdateTime,new Date());
                this.update(updateWrapper);
            }
        }
    }
    /**
     * 修改会员积分
     *
     * @param mgtMemberIntEditDto
     */
    @Override
    public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto){
        if(StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) {
    public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto) {
        if (StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) {
            String memberUserIds = mgtMemberIntEditDto.getMemberUserIds();
            String[] memberUserIdArr = memberUserIds.split(",");
            MemberIntegralChangeDto memberIntegralChangeDto;
            for(String str : memberUserIdArr) {
            for (String str : memberUserIdArr) {
                memberIntegralChangeDto = new MemberIntegralChangeDto();
                Member member = this.getByUserId(Long.valueOf(str));
                memberIntegralChangeDto.setUserId(Long.valueOf(str));
@@ -785,13 +1035,14 @@
    }
    /**
     * 会员积分变动
     *
     * @param memberIntegralChangeDto
     */
    @Override
    public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto){
    public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto) {
        log.info("会员积分变动---"+memberIntegralChangeDto.toString());
        MemberTotal memberTotal = memberTotalService.getById(memberIntegralChangeDto.getMemberId());
        Integer recordType = memberIntegralChangeDto.getRecordType();
        Integer changeType = memberIntegralChangeDto.getChangeType();
@@ -800,15 +1051,15 @@
        Integer usedIntegral = memberTotal.getUsedIntegral();
        Integer useableIntegral = memberTotal.getUseableIntegral();
        //变动统计
        if(changeType==1){
        if (changeType == 1) {
            totalIntegral = totalIntegral + integer;
            useableIntegral = useableIntegral + integer;
            memberTotal.setTotalIntegral(totalIntegral);
            memberTotal.setUseableIntegral(useableIntegral);
        }else if(changeType==2){
        } else if (changeType == 2) {
            usedIntegral = usedIntegral + integer;
            useableIntegral = useableIntegral - integer;
            if(useableIntegral<0){
            if (useableIntegral < 0) {
                throw new ServiceException(AppErrorConstant.INTEGRAL_USE_FAILED);
            }
            memberTotal.setTotalIntegral(totalIntegral);
@@ -821,16 +1072,16 @@
        integralRecord.setDelFlag(0);
        integralRecord.setUserId(memberIntegralChangeDto.getUserId());
        integralRecord.setChangeType(recordType);
        if(changeType==1){
        if (changeType == 1) {
            integralRecord.setChangeIntegral(integer);
        }else if(changeType==2){
            integralRecord.setChangeIntegral( 0-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){
        switch (recordType) {
            case 1:
                integralRecord.setChangeReason("购物赠送");
                break;
@@ -848,16 +1099,17 @@
    /**
     * 平台获取会员信息
     *
     * @param userId
     * @return
     */
    @Override
    public MgtMemberGetVo getMgtMemberInfo(Long userId){
    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()){
        List<MemberArchiveVo> memberArchiveVoList = memberArchiveService.listMgtVoByUserId(member.getUserId());
        if (memberArchiveVoList != null && !memberArchiveVoList.isEmpty()) {
            //去掉未完善信息
            memberArchiveVoList.removeIf(o -> Objects.isNull(o.getFieldValue()));
        }
@@ -866,14 +1118,25 @@
        mgtMemberGetVo.setMemberNo(member.getMemberNo());
        mgtMemberGetVo.setRealName(member.getRealName());
        mgtMemberGetVo.setNickName(member.getNickName());
        mgtMemberGetVo.setAvatar(member.getAvatar());
        mgtMemberGetVo.setMobile(member.getMobile());
        mgtMemberGetVo.setGender(member.getGender()==0 ? "男" : member.getGender()==1 ? "女" : null);
        if(member.getGender()!=null){
            if (member.getGender() == 0) {
                mgtMemberGetVo.setGender("男");
            } else if (member.getGender() == 1) {
                mgtMemberGetVo.setGender("女");
            }
        }else {
            mgtMemberGetVo.setGender("未知");
        }
        mgtMemberGetVo.setBirthday(member.getBirthday());
        mgtMemberGetVo.setBelongDistrict(member.getBelongDistrict());
        mgtMemberGetVo.setCreateTime(member.getCreateTime());
        mgtMemberGetVo.setLastPayTime(memberTotal.getLastPayTime());
        mgtMemberGetVo.setGoodsType(member.getGoodsType());
        mgtMemberGetVo.setRelationShopName(member.getRelationShopName());
        if(member.getBindingFlag()==1){
            mgtMemberGetVo.setRelationShopName(member.getRelationShopName());
        }
        mgtMemberGetVo.setIntegral(memberTotal.getTotalIntegral());
        mgtMemberGetVo.setMemberFrom(member.getCustomerSource());
        mgtMemberGetVo.setTotalActivityCount(memberTotal.getTotalActivityCount());
@@ -885,54 +1148,54 @@
    }
    /**
     * @description  删除标签
     * @author  jqs
     * @date    2023/6/8 15:18
     * @param memberTag
     * @return  void
     * @return void
     * @description 删除标签
     * @author jqs
     * @date 2023/6/8 15:18
     */
    @Override
    public void deleteMemberTag(String memberTag){
    public void deleteMemberTag(String memberTag) {
        memberMapper.deleteMemberTag(memberTag);
    }
    /**
     * @description  通过发送类型获取userId
     * @author  jqs
     * @date    2023/6/13 17:53
     * @param sendType
     * @return  List<Long>
     * @return List<Long>
     * @description 通过发送类型获取userId
     * @author jqs
     * @date 2023/6/13 17:53
     */
    @Override
    public List<Long> listIdBySendType(Integer sendType){
    public List<Long> listIdBySendType(Integer sendType,Long shopId) {
        //1.手动领取2.全部用户3.会员用户4非会员用户5自定义
        return memberMapper.listIdBySendType(sendType);
        return memberMapper.listIdBySendType(sendType,shopId);
    }
    /**
     * @description  通过ids获取用户简易返回
     * @author  jqs
     * @date    2023/6/16 11:06
     * @param userIds
     * @return  List<MgtSimpleMemberVo>
     * @return List<MgtSimpleMemberVo>
     * @description 通过ids获取用户简易返回
     * @author jqs
     * @date 2023/6/16 11:06
     */
    @Override
    public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds){
    public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds) {
        return memberMapper.listSimpleVoByIds(userIds);
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/6/16 12:41
     * @param mgtUserIdByKeywordDto
     * @return  MgtUserIdByKeywordVo
     * @return MgtUserIdByKeywordVo
     * @description
     * @author jqs
     * @date 2023/6/16 12:41
     */
    @Override
    public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto){
    public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto) {
        MgtUserIdByKeywordVo mgtUserIdByKeywordVo = new MgtUserIdByKeywordVo();
        List<Long> userIdList = memberMapper.getUserIdByKeyword(mgtUserIdByKeywordDto);
        if(userIdList!=null&&!userIdList.isEmpty()){
        if (userIdList != null && !userIdList.isEmpty()) {
            String userIdStr = userIdList.stream()
                    .map(Object::toString)
                    .collect(Collectors.joining(","));
@@ -942,14 +1205,14 @@
    }
    /**
     * @description boardMemberTotal
     * @param
     * @return MgtBulletinBoardVo
     * @description boardMemberTotal
     * @author jqs34
     * @date 2023/6/18 16:45
     */
    @Override
    public MgtBulletinBoardVo boardMemberTotal(){
    public MgtBulletinBoardVo boardMemberTotal() {
        MgtBulletinBoardVo mgtBulletinBoardVo = new MgtBulletinBoardVo();
        mgtBulletinBoardVo.setMemberTotal(memberMapper.memberTotal());
        mgtBulletinBoardVo.setMemberToday(memberMapper.memberToday());
@@ -957,35 +1220,81 @@
    }
    /**
     * @description  会员人数统计
     * @author  jqs
     * @date    2023/6/19 15:26
     * @param
     * @return  MgtTotalMemberTotalVo
     * @return MgtTotalMemberTotalVo
     * @description 会员人数统计
     * @author jqs
     * @date 2023/6/19 15:26
     */
    @Override
    public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto){
    public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto) {
        Date nowDay = DateUtils.getNowDate();
        // 获取店铺ID
        Long shopId = mgtBaseShopDto.getShopId();
        // 获取总会员数和不同年龄段的会员数
        MgtTotalMemberTotalVo mgtTotalMemberTotalVo = memberMapper.getTotalMemberTotal(mgtBaseShopDto);
        MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getTotalMemberTotalAge(mgtBaseShopDto);
        Integer manTotal = mgtAgeTotalVo.getManTotal();
        Integer womenTotal = mgtAgeTotalVo.getWomenTotal();
        mgtTotalMemberTotalVo.setManTotal(manTotal);
        mgtTotalMemberTotalVo.setWomenTotal(womenTotal);
        Integer personTotal = manTotal + womenTotal;
        BigDecimal manTotalBig = new BigDecimal(manTotal);
        BigDecimal personTotalBig = new BigDecimal(personTotal);
        BigDecimal bigTen = new BigDecimal("100.00");
        BigDecimal menPercent = new BigDecimal("100.00");
        BigDecimal womenPercent = new BigDecimal("100.00");
        if(personTotal==0){
            personTotalBig = bigTen;
        }
        if(manTotal==0&&womenTotal==0){
            menPercent = new BigDecimal("50.00");
            womenPercent = new BigDecimal("50.00");
        }else if(manTotal==0&&womenTotal>0){
            menPercent = new BigDecimal("0.00");
            womenPercent = new BigDecimal("100.00");
        }else if(manTotal>0&&womenTotal==0){
            menPercent = new BigDecimal("100.00");
            womenPercent = new BigDecimal("0.00");
        }else{
            menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
            womenPercent = bigTen.subtract(menPercent);
        }
        mgtTotalMemberTotalVo.setManPercent(menPercent);
        mgtTotalMemberTotalVo.setWomenPercent(womenPercent);
        // 年龄段数组
        String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
        // 不同年龄段的会员数数组
        Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
        BigDecimal[] agePercentValue = new BigDecimal[5];
        Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge();
        BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString());
        BigDecimal hundredBig = new BigDecimal("100");
        if(totalPerson==0){
            totalPersonBig = hundredBig;
        }
        agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        // 设置年龄段数组和不同年龄段的会员数数组
        mgtTotalMemberTotalVo.setAgeKey(ageKey);
        mgtTotalMemberTotalVo.setAgeValue(ageValue);
        // 获取不同护理类型的会员数
        List<MgtMapTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
        List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
        if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
            nurseTotalVos = listRemoveNull(nurseTotalVos);
            mgtTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos);
        }
        //获取不同等级的会员数
        List<MgtMapIntTotalVo> memberLevelTotalVos = memberMapper.getTotalMemberTotalLevel(mgtBaseShopDto);
        if (memberLevelTotalVos != null && memberLevelTotalVos.size() > 0) {
            memberLevelTotalVos = listRemoveNull(memberLevelTotalVos);
            mgtTotalMemberTotalVo.setMemberLevelTotalVos(memberLevelTotalVos);
        }
        // 获取不同商品类型的会员数
        List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto);
        List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto);
        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
            goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos);
            mgtTotalMemberTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
@@ -997,29 +1306,29 @@
            String actStartDate;
            String actEndDate;
            Integer count;
            List<MgtMapTotalVo> mgtMapTotalVoList = new ArrayList<>();
            MgtMapTotalVo mgtMapTotalVo;
            List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>();
            MgtMapIntTotalVo MgtMapIntTotalVo;
            // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
            for (int i = 0; i < activenessList.size(); i++) {
                activeness = activenessList.get(i);
                actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay()));
                actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay()));
                actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay()));
                actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay()));
                count = memberMapper.getTotalMemberTotalActiveness(shopId, actStartDate, actEndDate);
                mgtMapTotalVo = new MgtMapTotalVo();
                mgtMapTotalVo.setMapKey(activeness.getActivenessName());
                mgtMapTotalVo.setMapValue(count);
                mgtMapTotalVoList.add(mgtMapTotalVo);
                MgtMapIntTotalVo = new MgtMapIntTotalVo();
                MgtMapIntTotalVo.setMapKey(activeness.getActivenessName());
                MgtMapIntTotalVo.setMapValue(count);
                MgtMapIntTotalVoList.add(MgtMapIntTotalVo);
            }
            mgtTotalMemberTotalVo.setActivenessList(mgtMapTotalVoList);
            mgtTotalMemberTotalVo.setActivenessList(MgtMapIntTotalVoList);
        }
        //获取会员消费排名
        List<MgtMapTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
        List<MgtMapIntTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
        if (memberPayList != null && memberPayList.size() > 0) {
            memberPayList = listRemoveNull(memberPayList);
            //memberPayList = listRemoveNull(memberPayList);
            mgtTotalMemberTotalVo.setMemberPayList(memberPayList);
        }
        //获取来源渠道排名
        List<MgtMapTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto);
        List<MgtMapIntTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto);
        if (customerSourceList != null && customerSourceList.size() > 0) {
            customerSourceList = listRemoveNull(customerSourceList);
            mgtTotalMemberTotalVo.setCustomerSourceList(customerSourceList);
@@ -1030,68 +1339,110 @@
    /**
     * @description
     * @author  jqs
     * @date    2023/6/20 11:42
     * @param mgtActivityAgeDto
     * @return  List<Long>
     * @return List<Long>
     * @description
     * @author jqs
     * @date 2023/6/20 11:42
     */
    @Override
    public List<Long> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto){
    public List<Long> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto) {
        List<Long> userIdList = memberMapper.listUserIdByAge(mgtActivityAgeDto);
        return userIdList;
    }
    /**
     * @description  会员人数统计
     * @author  jqs
     * @date    2023/6/21 10:59
     * @param mgtBasePlatformDto
     * @return  MgtPlTotalMemberTotalVo
     * @return MgtPlTotalMemberTotalVo
     * @description 会员人数统计
     * @author jqs
     * @date 2023/6/21 10:59
     */
    @Override
    public MgtPlTotalMemberTotalVo getPlTotalMemberTotal(MgtBasePlatformDto mgtBasePlatformDto){
    public MgtPlTotalMemberTotalVo getPlTotalMemberTotal(MgtBasePlatformDto mgtBasePlatformDto) {
        Date nowDay = DateUtils.getNowDate();
        //如果区域代码不为null获取对应的商户id
        if(StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode())||StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode())||StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())){
        if (StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())) {
            MgtShopIdByCodeDto mgtShopIdByCodeDto = new MgtShopIdByCodeDto();
            mgtShopIdByCodeDto.setShopProvinceCode(mgtBasePlatformDto.getShopProvinceCode());
            mgtShopIdByCodeDto.setShopCityCode(mgtBasePlatformDto.getShopCityCode());
            mgtShopIdByCodeDto.setShopAreaCode(mgtBasePlatformDto.getShopAreaCode());
            MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData();
            if(StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())){
                List<Long> list = Arrays.stream(mgtShopIdByCodeVo.getShopIds().split(","))
            List<Long> list = new ArrayList<>();
            if (StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())) {
                list = Arrays.stream(mgtShopIdByCodeVo.getShopIds().split(","))
                        .map(Long::valueOf)
                        .collect(Collectors.toList());
                mgtBasePlatformDto.setShopIdList(list);
            }
            mgtBasePlatformDto.setShopIdList(list);
        }
        //获取基础统计
        MgtPlTotalMemberTotalVo plTotalMemberTotalVo = memberMapper.getPlTotalMemberTotal(mgtBasePlatformDto);
        MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getPlTotalMemberTotalAge(mgtBasePlatformDto);
        if(mgtAgeTotalVo!=null){
            plTotalMemberTotalVo.setManTotal(mgtAgeTotalVo.getManTotal());
            plTotalMemberTotalVo.setWomenTotal(mgtAgeTotalVo.getWomenTotal());
        }else{
            plTotalMemberTotalVo.setManTotal(0);
            plTotalMemberTotalVo.setWomenTotal(0);
        if (mgtAgeTotalVo != null) {
            Integer manTotal = mgtAgeTotalVo.getManTotal();
            Integer womenTotal = mgtAgeTotalVo.getWomenTotal();
            Integer personTotal = manTotal + womenTotal;
            BigDecimal manTotalBig = new BigDecimal(manTotal);
            BigDecimal personTotalBig = new BigDecimal(personTotal);
            BigDecimal bigTen = new BigDecimal("100.00");
            BigDecimal menPercent = new BigDecimal("100.00");
            BigDecimal womenPercent = new BigDecimal("100.00");
            if(personTotal==0){
                personTotalBig = bigTen;
            }
            if(manTotal==0&&womenTotal==0){
                menPercent = new BigDecimal("50.00");
                womenPercent = new BigDecimal("50.00");
            }else if(manTotal==0&&womenTotal>0){
                menPercent = new BigDecimal("0.00");
                womenPercent = new BigDecimal("100.00");
            }else if(manTotal>0&&womenTotal==0){
                menPercent = new BigDecimal("100.00");
                womenPercent = new BigDecimal("0.00");
            }else{
                menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
                womenPercent = bigTen.subtract(menPercent);
            }
            plTotalMemberTotalVo.setManTotal(manTotal);
            plTotalMemberTotalVo.setWomenTotal(womenTotal);
            plTotalMemberTotalVo.setManPercent(menPercent);
            plTotalMemberTotalVo.setWomenPercent(womenPercent);
        }
        // 年龄段数组
        String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
        // 不同年龄段的会员数数组
        Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
        BigDecimal[] agePercentValue = new BigDecimal[5];
        Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge();
        BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString());
        BigDecimal hundredBig = new BigDecimal("100");
        if(totalPerson==0){
            totalPersonBig = hundredBig;
        }
        agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        // 设置年龄段数组和不同年龄段的会员数数组
        plTotalMemberTotalVo.setAgeKey(ageKey);
        plTotalMemberTotalVo.setAgeValue(ageValue);
        plTotalMemberTotalVo.setAgePercent(agePercentValue);
        // 获取不同调理类型的会员数
        List<MgtMapTotalVo> nurseTotalVos = memberMapper.getPlTotalMemberTotalNurse(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getPlTotalMemberTotalNurse(mgtBasePlatformDto);
        if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
            nurseTotalVos = listRemoveNull(nurseTotalVos);
            plTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos);
        }
        //获取不同等级的会员数
        List<MgtMapIntTotalVo> memberLevelTotalVos = memberMapper.getPlTotalMemberTotalLevel(mgtBasePlatformDto);
        if (memberLevelTotalVos != null && memberLevelTotalVos.size() > 0) {
            memberLevelTotalVos = listRemoveNull(memberLevelTotalVos);
            plTotalMemberTotalVo.setMemberLevelTotalVos(memberLevelTotalVos);
        }
        // 获取不同商品类型的会员数
        List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getPlTotalMemberTotalGoodsType(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getPlTotalMemberTotalGoodsType(mgtBasePlatformDto);
        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
            goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos);
            plTotalMemberTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
@@ -1104,42 +1455,42 @@
            String actStartDate;
            String actEndDate;
            Integer count;
            List<MgtMapTotalVo> mgtMapTotalVoList = new ArrayList<>();
            MgtMapTotalVo mgtMapTotalVo;
            List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>();
            MgtMapIntTotalVo MgtMapIntTotalVo;
            // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
            for (int i = 0; i < activenessList.size(); i++) {
                activeness = activenessList.get(i);
                actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay()));
                actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay()));
                actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay()));
                actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay()));
                count = memberMapper.getPlTotalMemberTotalActiveness(shopIdList, actStartDate, actEndDate);
                if(StringUtils.isNotBlank(activeness.getActivenessName())){
                    mgtMapTotalVo = new MgtMapTotalVo();
                    mgtMapTotalVo.setMapKey(activeness.getActivenessName());
                    mgtMapTotalVo.setMapValue(count);
                    mgtMapTotalVoList.add(mgtMapTotalVo);
                if (StringUtils.isNotBlank(activeness.getActivenessName())) {
                    MgtMapIntTotalVo = new MgtMapIntTotalVo();
                    MgtMapIntTotalVo.setMapKey(activeness.getActivenessName());
                    MgtMapIntTotalVo.setMapValue(count);
                    MgtMapIntTotalVoList.add(MgtMapIntTotalVo);
                }
            }
            plTotalMemberTotalVo.setActivenessList(mgtMapTotalVoList);
            plTotalMemberTotalVo.setActivenessList(MgtMapIntTotalVoList);
        }
        //获取会员消费排名
        List<MgtMapTotalVo> memberPayList = memberMapper.getPlTotalMemberRankPay(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> memberPayList = memberMapper.getPlTotalMemberRankPay(mgtBasePlatformDto);
        if (memberPayList != null && memberPayList.size() > 0) {
            memberPayList = listRemoveNull(memberPayList);
            plTotalMemberTotalVo.setMemberPayList(memberPayList);
        }
        //获取来源渠道排名
        List<MgtMapTotalVo> customerSourceList = memberMapper.getPlTotalMemberRankCustomerSource(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> customerSourceList = memberMapper.getPlTotalMemberRankCustomerSource(mgtBasePlatformDto);
        if (customerSourceList != null && customerSourceList.size() > 0) {
            customerSourceList = listRemoveNull(customerSourceList);
            plTotalMemberTotalVo.setCustomerSourceList(customerSourceList);
        }
        //获取商铺会员排名
        List<MgtMapTotalVo> shopMemberRankList = memberMapper.getPlTotalMemberRank(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> shopMemberRankList = memberMapper.getPlTotalMemberRank(mgtBasePlatformDto);
        if (shopMemberRankList != null && shopMemberRankList.size() > 0) {
            shopMemberRankList = listRemoveNull(shopMemberRankList);
            plTotalMemberTotalVo.setShopMemberRankList(shopMemberRankList);
        }
        List<MgtMapTotalVo> memberGoodsRankList = remoteOrderService.listMemberGoodsRank(mgtBasePlatformDto).getData();
        List<MgtMapIntTotalVo> memberGoodsRankList = remoteOrderService.listMemberGoodsRank(mgtBasePlatformDto).getData();
        if (memberGoodsRankList != null && memberGoodsRankList.size() > 0) {
            memberGoodsRankList = listRemoveNull(memberGoodsRankList);
            plTotalMemberTotalVo.setMemberGoodsRankList(memberGoodsRankList);
@@ -1148,42 +1499,42 @@
    }
    /**
     * @description  去除空字符串
     * @author  jqs
     * @date    2023/6/27 17:35
     * @param mgtMapTotalVos
     * @return  List<MgtMapTotalVo>
     * @param MgtMapIntTotalVos
     * @return List<MgtMapIntTotalVo>
     * @description 去除空字符串
     * @author jqs
     * @date 2023/6/27 17:35
     */
    private List<MgtMapTotalVo> listRemoveNull(List<MgtMapTotalVo> mgtMapTotalVos){
        for (int i = 0; i < mgtMapTotalVos.size(); i++) {
            if(StringUtils.isBlank(mgtMapTotalVos.get(i).getMapKey())){
                mgtMapTotalVos.remove(i);
    private List<MgtMapIntTotalVo> listRemoveNull(List<MgtMapIntTotalVo> MgtMapIntTotalVos) {
        for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
            if (StringUtils.isBlank(MgtMapIntTotalVos.get(i).getMapKey())) {
                MgtMapIntTotalVos.remove(i);
            }
        }
        return mgtMapTotalVos;
        return MgtMapIntTotalVos;
    }
    /**
     * @description  通过shopId获取userId
     * @author  jqs
     * @date    2023/6/21 17:11
     * @param shopIdList
     * @return  List<Long>
     * @return List<Long>
     * @description 通过shopId获取userId
     * @author jqs
     * @date 2023/6/21 17:11
     */
    @Override
    public List<Long> listUserIdByShopId(List<Long> shopIdList){
    public List<Long> listUserIdByShopId(List<Long> shopIdList) {
        return memberMapper.listUserIdByShopId(shopIdList);
    }
    /**
     * @description  通过shopId获取user统计
     * @author  jqs
     * @date    2023/6/21 17:19
     * @param shopIdList
     * @return  MgtShopTotalMemberVo
     * @return MgtShopTotalMemberVo
     * @description 通过shopId获取user统计
     * @author jqs
     * @date 2023/6/21 17:19
     */
    @Override
    public MgtShopTotalMemberVo getUserTotalByShopId(List<Long> shopIdList){
    public MgtShopTotalMemberVo getUserTotalByShopId(List<Long> shopIdList) {
        MgtShopTotalMemberVo mgtShopTotalMemberVo = new MgtShopTotalMemberVo();
        MgtBasePlatformDto mgtBasePlatformDto = new MgtBasePlatformDto();
        mgtBasePlatformDto.setShopIdList(shopIdList);
@@ -1194,9 +1545,578 @@
        String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
        // 不同年龄段的会员数数组
        Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
        BigDecimal[] agePercentValue = new BigDecimal[5];
        Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge();
        BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString());
        BigDecimal hundredBig = new BigDecimal("100");
        if(totalPerson==0){
            totalPersonBig = hundredBig;
        }
        agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        // 设置年龄段数组和不同年龄段的会员数数组
        mgtShopTotalMemberVo.setAgeKey(ageKey);
        mgtShopTotalMemberVo.setAgeValue(ageValue);
        return mgtShopTotalMemberVo;
    }
    /**
     * @param memberTotalChangeDto
     * @return void
     * @description 会员统计变动
     * @author jqs
     * @date 2023/6/28 14:34
     */
    @Override
    public void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto) {
        log.info("会员统计变动---"+memberTotalChangeDto.toString());
        Member member = this.getByUserId(memberTotalChangeDto.getUserId());
        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
        //积分变动
        if (memberTotalChangeDto.getChangeIntegral() != null) {
            if (memberTotalChangeDto.getTypeIntegral() == 2) {
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() - memberTotalChangeDto.getChangeIntegral());
                memberTotal.setUsedIntegral(memberTotal.getUsedIntegral() + memberTotalChangeDto.getChangeIntegral());
            } else {
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() + memberTotalChangeDto.getChangeIntegral());
                memberTotal.setTotalIntegral(memberTotal.getTotalIntegral() + memberTotalChangeDto.getChangeIntegral());
                IntegralRecord integralRecord = new IntegralRecord();
                integralRecord.setDelFlag(0);
                integralRecord.setUserId(memberTotalChangeDto.getUserId());
                integralRecord.setChangeType(5);
                integralRecord.setCreateTime(new Date());
                integralRecord.setChangeIntegral(memberTotalChangeDto.getChangeIntegral());
                integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+memberTotalChangeDto.getChangeIntegral());
                integralRecord.setChangeReason("订单【"+memberTotalChangeDto.getOrderNo()+"】获得积分");
                integralRecord.setOrderId(memberTotalChangeDto.getOrderId());
                integralRecord.setOrderNo(memberTotalChangeDto.getOrderNo());
                integralRecordService.saveOrUpdate(integralRecord);
            }
        }
        //消费变动
        if (memberTotalChangeDto.getPayMoney() != null) {
            if(memberTotalChangeDto.getPayMoney().compareTo(BigDecimal.ZERO)>=0){
                memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney()));
                memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() + 1);
                memberTotal.setLastPayMoney(memberTotalChangeDto.getPayMoney());
                memberTotal.setLastPayTime(memberTotalChangeDto.getPayTime());
            }else{
                memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney()));
                memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() - 1);
            }
        }
        //服务次数变动
        if (memberTotalChangeDto.getServiceCount() != null) {
            if (memberTotalChangeDto.getTypeService() == 2) {
                memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount() - memberTotalChangeDto.getServiceCount());
                memberTotal.setUsedServiceCount(memberTotal.getUsedServiceCount() + memberTotalChangeDto.getServiceCount());
                memberTotal.setLastServiceTime(new Date());
            } else {
                memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount() + memberTotalChangeDto.getServiceCount());
                memberTotal.setTotalServiceCount(memberTotal.getTotalServiceCount() + memberTotalChangeDto.getServiceCount());
            }
        }
        //跟进时间
        if (memberTotalChangeDto.getNextTaskTime() != null) {
            memberTotal.setNextTaskTime(memberTotalChangeDto.getNextTaskTime());
        }
        //活动次数变动
        if (memberTotalChangeDto.getActivityTime() != null) {
            memberTotal.setTotalActivityCount(memberTotal.getTotalActivityCount() + 1);
            memberTotal.setLastActivityTime(memberTotalChangeDto.getActivityTime());
        }
        //订单数量变动
        if (memberTotalChangeDto.getCycleOrderChange() != null) {
            memberTotal.setTotalCycleOrder(memberTotal.getTotalCycleOrder() + memberTotalChangeDto.getCycleOrderChange());
        }
        if (memberTotalChangeDto.getExperienceOrderChange() != null) {
            memberTotal.setTotalExperienceOrder(memberTotal.getTotalExperienceOrder() + memberTotalChangeDto.getExperienceOrderChange());
        }
        if (memberTotalChangeDto.getServiceOrderChange() != null) {
            memberTotal.setTotalServiceOrder(memberTotal.getTotalServiceOrder() + memberTotalChangeDto.getServiceOrderChange());
        }
        if (memberTotalChangeDto.getGoodsOrderChange() != null) {
            memberTotal.setTotalGoodsOrder(memberTotal.getTotalGoodsOrder() + memberTotalChangeDto.getGoodsOrderChange());
        }
        //消费记录
        if(memberTotalChangeDto.getConsumeTime()!=null){
            memberTotal.setTotalConsumeCount(memberTotal.getTotalConsumeCount()+1);
            memberTotal.setLastConsumeTime(memberTotalChangeDto.getConsumeTime());
        }
        memberTotalService.saveOrUpdate(memberTotal);
    }
    /**
     * @description  商户获取会员统计
     * @author  jqs
     * @date    2023/7/3 17:16
     * @param merTotalDto
     * @return  MerMemberTotalVo
     */
    @Override
    public MerMemberTotalVo getMerMemberTotal(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        MerMemberTotalVo merMemberTotalVo = memberMapper.getMerMemberTotal(merTotalDto);
        return merMemberTotalVo;
    }
    /**
     * @description  商户获取会员固定统计
     * @author  jqs
     * @date    2023/7/3 18:34
     * @param merTotalDto
     * @return  MerMemberFixedTotalVo
     */
    @Override
    public MerMemberFixedTotalVo getMerMemberFixedTotal(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        MerMemberFixedTotalVo memberFixedTotalVo = new MerMemberFixedTotalVo();
        Date nowDay = DateUtils.getNowDate();
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getMerMemberTotalAge(merTotalDto);
        Integer manTotal = mgtAgeTotalVo.getManTotal();
        Integer womenTotal = mgtAgeTotalVo.getWomenTotal();
        memberFixedTotalVo.setManTotal(manTotal);
        memberFixedTotalVo.setWomenTotal(womenTotal);
        Integer personTotal = manTotal + womenTotal;
        BigDecimal manTotalBig = new BigDecimal(manTotal);
        BigDecimal personTotalBig = new BigDecimal(personTotal);
        BigDecimal bigTen = new BigDecimal("100.00");
        BigDecimal menPercent = new BigDecimal("100.00");
        BigDecimal womenPercent = new BigDecimal("100.00");
        if(personTotal==0){
            personTotalBig = bigTen;
        }
        if(manTotal==0&&womenTotal==0){
            menPercent = new BigDecimal("50.00");
            womenPercent = new BigDecimal("50.00");
        }else if(manTotal==0&&womenTotal>0){
            menPercent = new BigDecimal("0.00");
            womenPercent = new BigDecimal("100.00");
        }else if(manTotal>0&&womenTotal==0){
            menPercent = new BigDecimal("100.00");
            womenPercent = new BigDecimal("0.00");
        }else{
            menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
            womenPercent = bigTen.subtract(menPercent);
        }
        memberFixedTotalVo.setManPercent(menPercent);
        memberFixedTotalVo.setWomenPercent(womenPercent);
        // 年龄段数组
        String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
        // 不同年龄段的会员数数组
        Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
        BigDecimal[] agePercentValue = new BigDecimal[5];
        Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge();
        BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString());
        BigDecimal hundredBig = new BigDecimal("100");
        if(totalPerson==0){
            totalPersonBig = hundredBig;
        }
        agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
        // 设置年龄段数组和不同年龄段的会员数数组
        memberFixedTotalVo.setAgeKey(ageKey);
        memberFixedTotalVo.setAgeValue(ageValue);
        memberFixedTotalVo.setAgePercentValue(agePercentValue);
        // 获取不同护理类型的会员数
        List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getMerMemberTotalNurse(merTotalDto);
        if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
            nurseTotalVos = listRemoveNull(nurseTotalVos);
            memberFixedTotalVo.setNurseTotalVos(nurseTotalVos);
        }
        //获取不同等级的会员数
        List<MgtMapIntTotalVo> memberLevelTotalVos = memberMapper.getMerMemberTotalLevel(merTotalDto);
        if (memberLevelTotalVos != null && memberLevelTotalVos.size() > 0) {
            memberLevelTotalVos = listRemoveNull(memberLevelTotalVos);
            memberFixedTotalVo.setMemberLevelTotalVos(memberLevelTotalVos);
        }
        // 获取不同商品类型的会员数
        List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getMerMemberTotalGoodsType(merTotalDto);
        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
            goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos);
            memberFixedTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
        }
        //获取会员消费排名
        List<MgtMapIntTotalVo> memberPayList = memberMapper.getMerMemberPayRank(merTotalDto);
        if (memberPayList != null && memberPayList.size() > 0) {
            memberPayList = listRemoveNull(memberPayList);
            memberFixedTotalVo.setMemberPayList(memberPayList);
        }
        // 获取不同活跃度的会员数
        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
        if (activenessList != null && !activenessList.isEmpty()) {
            Activeness activeness;
            String actStartDate;
            String actEndDate;
            Integer count;
            List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>();
            MgtMapIntTotalVo MgtMapIntTotalVo;
            // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
            for (int i = 0; i < activenessList.size(); i++) {
                activeness = activenessList.get(i);
                actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay()));
                actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay()));
                merTotalDto.setStartDate(actStartDate);
                merTotalDto.setEndDate(actEndDate);
                count = memberMapper.getMerMemberTotalActiveness(merTotalDto);
                MgtMapIntTotalVo = new MgtMapIntTotalVo();
                MgtMapIntTotalVo.setMapKey(activeness.getActivenessName());
                MgtMapIntTotalVo.setMapValue(count);
                MgtMapIntTotalVoList.add(MgtMapIntTotalVo);
            }
            memberFixedTotalVo.setActivenessList(MgtMapIntTotalVoList);
        }
        return memberFixedTotalVo;
    }
    /**
     * @description  商会获取会员来源统计
     * @author  jqs
     * @date    2023/7/3 19:09
     * @param merTotalDto
     * @return  MerMemberSourceTotalVo
     */
    @Override
    public MerMemberSourceTotalVo getMerMemberSourceTotal(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        MerMemberSourceTotalVo memberSourceTotalVo = new MerMemberSourceTotalVo();
        //获取来源渠道排名
        List<MgtMapIntTotalVo> customerSourceList = memberMapper.getMerMemberCustomerSourceRank(merTotalDto);
        if (customerSourceList != null && customerSourceList.size() > 0) {
            customerSourceList = listRemoveNull(customerSourceList);
            memberSourceTotalVo.setCustomerSourceList(customerSourceList);
        }
        return memberSourceTotalVo;
    }
    /**
     * @description  商会获取会员推荐排名
     * @author  jqs
     * @date    2023/7/3 19:14
     * @param merTotalDto
     * @return  MerMemberRecommendTotalVo
     */
    @Override
    public MerMemberRecommendTotalVo getMerMemberRecommendTotal(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        MerMemberRecommendTotalVo memberRecommendTotalVo = new MerMemberRecommendTotalVo();
        //获取会员推荐排名
        /*List<MgtMapIntTotalVo> recommendList = memberMapper.getMerMemberRecommendRank(merTotalDto);
        if (recommendList != null && recommendList.size() > 0) {
            recommendList = listRemoveNull(recommendList);
            memberRecommendTotalVo.setRecommendList(recommendList);
        }*/
        List<MgtMapIntTotalVo> recommendList = new ArrayList<>();
        memberRecommendTotalVo.setRecommendList(recommendList);
        return memberRecommendTotalVo;
    }
    /**
     * @description  获取各年龄层用户
     * @author  jqs
     * @date    2023/7/4 9:50
     * @param merTotalDto
     * @return  MerOrderAgeUserVo
     */
    @Override
    public List<MerOrderAgeUserVo> listOrderAgeUser(MerTotalDto merTotalDto){
        List<MerOrderAgeUserVo> orderAgeUserVoList = new ArrayList<>();
        MerOrderAgeUserVo merOrderAgeUserVo = new MerOrderAgeUserVo();
        merTotalDto.setAgeType(1);
        List<Long> userIdList = memberMapper.listOrderAgeUser(merTotalDto);
        merOrderAgeUserVo.setAgeType(1);
        merOrderAgeUserVo.setUserIdList(userIdList);
        orderAgeUserVoList.add(merOrderAgeUserVo);
        merOrderAgeUserVo = new MerOrderAgeUserVo();
        merTotalDto.setAgeType(2);
        userIdList = memberMapper.listOrderAgeUser(merTotalDto);
        merOrderAgeUserVo.setAgeType(2);
        merOrderAgeUserVo.setUserIdList(userIdList);
        orderAgeUserVoList.add(merOrderAgeUserVo);
        merOrderAgeUserVo = new MerOrderAgeUserVo();
        merTotalDto.setAgeType(3);
        userIdList = memberMapper.listOrderAgeUser(merTotalDto);
        merOrderAgeUserVo.setAgeType(3);
        merOrderAgeUserVo.setUserIdList(userIdList);
        orderAgeUserVoList.add(merOrderAgeUserVo);
        merOrderAgeUserVo = new MerOrderAgeUserVo();
        merTotalDto.setAgeType(4);
        userIdList = memberMapper.listOrderAgeUser(merTotalDto);
        merOrderAgeUserVo.setAgeType(4);
        merOrderAgeUserVo.setUserIdList(userIdList);
        orderAgeUserVoList.add(merOrderAgeUserVo);
        merOrderAgeUserVo = new MerOrderAgeUserVo();
        merTotalDto.setAgeType(5);
        userIdList = memberMapper.listOrderAgeUser(merTotalDto);
        merOrderAgeUserVo.setAgeType(4);
        merOrderAgeUserVo.setUserIdList(userIdList);
        orderAgeUserVoList.add(merOrderAgeUserVo);
        return orderAgeUserVoList;
    }
    /**
     * @description  通过年龄层获取用户id列表
     * @author  jqs
     * @date    2023/8/23 18:59
     * @param ageType
     * @return  List<Long>
     */
    @Override
    public List<Long> listUserIdByAgeType(Integer ageType){
        MerTotalDto merTotalDto = new MerTotalDto();
        merTotalDto.setAgeType(ageType);
        List<Long> userIdList = memberMapper.listOrderAgeUser(merTotalDto);
        return userIdList;
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/7/5 21:18
     * @param mgtFrozenMemberDto
     * @return  void
     */
    @Override
    public void mgtFrozenMember(MgtFrozenMemberDto mgtFrozenMemberDto){
        Long userId = mgtFrozenMemberDto.getId();
        Member member = this.getByUserId(userId);
        member.setFrozenFlag(mgtFrozenMemberDto.getFrozenFlag());
        this.saveOrUpdate(member);
        sysUserService.frozenUser(mgtFrozenMemberDto);
    }
    /**
     * @description  获取用户任务列表
     * @author  jqs
     * @date    2023/7/12 15:07
     * @param userId
     * @return  List<AppIntegralTaskListVo>
     */
    @Override
    public List<AppIntegralTaskListVo> listAppMemberIntegralTask(Long userId){
        // 获取指定用户的会员信息
        Member member = this.getByUserId(userId);
        // 获取会员的总积分信息
        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
        // 获取其他配置信息
        AppOtherConfigGetVo appOtherConfigGetVo = remoteConfigService.getAppOtherConfigGetVo().getData();
        // 创建一个空的积分任务列表
        List<AppIntegralTaskListVo> appIntegralTaskListVoList = new ArrayList<>();
        // 创建分享小程序任务
        AppIntegralTaskListVo shareTask = new AppIntegralTaskListVo();
        shareTask.setTaskContent("分享小程序给微信好友");
        shareTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getShareIntegral() + "积分");
        shareTask.setRecommendFlag(1);
        shareTask.setCompleteFlag(memberTotal.getShareFlag());
        appIntegralTaskListVoList.add(shareTask);
        // 创建提交平台建议任务
        AppIntegralTaskListVo plSuggestTask = new AppIntegralTaskListVo();
        plSuggestTask.setTaskContent("提交平台建议");
        plSuggestTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getSuggestPlatformIntegral() + "积分");
        plSuggestTask.setRecommendFlag(1);
        plSuggestTask.setCompleteFlag(memberTotal.getPlSuggestFlag());
        appIntegralTaskListVoList.add(plSuggestTask);
        // 创建提交门店建议任务
        AppIntegralTaskListVo shopSuggestTask = new AppIntegralTaskListVo();
        shopSuggestTask.setTaskContent("提交门店建议");
        shopSuggestTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getSuggestShopIntegral() + "积分");
        shopSuggestTask.setRecommendFlag(1);
        shopSuggestTask.setCompleteFlag(memberTotal.getShopSuggestFlag());
        appIntegralTaskListVoList.add(shopSuggestTask);
        // 创建每日签到任务
        AppIntegralTaskListVo signTask = new AppIntegralTaskListVo();
        signTask.setTaskContent("每日签到");
        signTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getSignInIntegral() + "积分");
        signTask.setRecommendFlag(1);
        signTask.setCompleteFlag(memberTotal.getSignFlag());
        appIntegralTaskListVoList.add(signTask);
        // 创建消费得积分任务
        AppIntegralTaskListVo buyTask = new AppIntegralTaskListVo();
        buyTask.setTaskContent("消费得积分");
        buyTask.setTaskDesc("每消费1元+" + appOtherConfigGetVo.getPayMoneyIntegral() + "积分");
        buyTask.setRecommendFlag(1);
        buyTask.setCompleteFlag(memberTotal.getBuyFlag());
        appIntegralTaskListVoList.add(buyTask);
        // 返回积分任务列表
        return appIntegralTaskListVoList;
    }
    /**
     * @description  积分变动
     * @author  jqs
     * @date    2023/7/12 15:59
     * @param integralChangeDto
     * @return  void
     */
    @Override
    public Boolean changeIntegral(IntegralChangeDto integralChangeDto){
        log.info("会员积分变动---"+integralChangeDto.toString());
        Member member = this.getByUserId(integralChangeDto.getUserId());
        Integer integralType = integralChangeDto.getIntegralType();
        Integer changeIntegral = integralChangeDto.getChangeIntegral();
        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
        Boolean completeFlag = false;
        switch(integralType){
            case 1:
                if(memberTotal.getShareFlag()==1){
                    completeFlag = true;
                }
                break;
            case 2:
                if(memberTotal.getPlSuggestFlag()==1){
                    completeFlag = true;
                }
                break;
            case 3:
                if(memberTotal.getShopSuggestFlag()==1){
                    completeFlag = true;
                }
                break;
            case 4:
                if(memberTotal.getSignFlag()==1){
                    completeFlag = true;
                }
                break;
            default:
                break;
        }
        if(completeFlag){
            return completeFlag;
        }
        AppOtherConfigGetVo appOtherConfigGetVo = remoteConfigService.getAppOtherConfigGetVo().getData();
        IntegralRecord integralRecord = new IntegralRecord();
        integralRecord.setDelFlag(0);
        integralRecord.setUserId(integralChangeDto.getUserId());
        integralRecord.setChangeType(integralType);
        integralRecord.setCreateTime(new Date());
        //1分享获取2平台建议获取3门店建议获取4每日签到5消费得积分
        switch(integralType){
            case 1:
                changeIntegral = appOtherConfigGetVo.getShareIntegral();
                integralRecord.setChangeIntegral(changeIntegral);
                integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                integralRecord.setChangeReason("每日任务【分享小程序】获得积分");
                memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                memberTotal.setShareFlag(1);
                break;
            case 2:
                changeIntegral = appOtherConfigGetVo.getSuggestPlatformIntegral();
                integralRecord.setChangeIntegral(changeIntegral);
                integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                integralRecord.setChangeReason("每日任务【提交平台建议】获得积分");
                memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                memberTotal.setPlSuggestFlag(1);
                break;
            case 3:
                changeIntegral = appOtherConfigGetVo.getSuggestShopIntegral();
                integralRecord.setChangeIntegral(changeIntegral);
                integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                integralRecord.setChangeReason("每日任务【提交门店建议】获得积分");
                memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                memberTotal.setShopSuggestFlag(1);
                break;
            case 4:
                changeIntegral = appOtherConfigGetVo.getSignInIntegral();
                integralRecord.setChangeIntegral(changeIntegral);
                integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                integralRecord.setChangeReason("每日任务【签到】获得积分");
                memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                memberTotal.setSignFlag(1);
                break;
            case 5:
                integralRecord.setChangeIntegral(changeIntegral);
                integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                integralRecord.setChangeReason("订单【"+integralChangeDto.getOrderNo()+"】获得积分");
                integralRecord.setOrderId(integralChangeDto.getOrderId());
                integralRecord.setOrderNo(integralChangeDto.getOrderNo());
                memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
                memberTotal.setBuyFlag(1);
                break;
            default:
                break;
        }
        memberTotalService.saveOrUpdate(memberTotal);
        integralRecordService.saveOrUpdate(integralRecord);
        return completeFlag;
    }
    /**
     * @description  统计商户今日新增会员
     * @author  jqs
     * @date    2023/7/14 19:54
     * @param shopIdList
     * @return  Integer
     */
    @Override
    public Integer getAreaNewMember(List<Long> shopIdList){
        return memberMapper.getAreaNewMember(shopIdList);
    }
    /**
     * @description  更新会员绑定商户名
     * @author  jqs
     * @date    2023/7/26 17:08
     * @param mgtMemberShopNameDto
     * @return  void
     */
    @Override
    public void updateMemberShopName(MgtMemberShopNameDto mgtMemberShopNameDto){
        LambdaUpdateWrapper<Member> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(Member::getRelationShopId,mgtMemberShopNameDto.getShopId());
        updateWrapper.set(Member::getRelationShopName,mgtMemberShopNameDto.getShopName());
        this.update(updateWrapper);
    }
    /**
     * @description  发送生日祝福
     * @author  jqs
     * @date    2023/8/7 15:40
     * @param
     * @return  void
     */
    @Override
    public void sendBirthdayBless(){
        List<String> mobileList = memberMapper.listTodayBirthday();
        if(mobileList!=null&&!mobileList.isEmpty()){
            log.info("生日祝福发送短信---"+mobileList.toString());
            for(String mobile : mobileList){
                try {
                    MsgUtils.sendMsg(mobile,null,null);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}