From dbff53150cdc807faa56c0d1a947d24b69f372b9 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期四, 31 八月 2023 18:43:20 +0800
Subject: [PATCH] bug

---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java | 1410 ++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 1,165 insertions(+), 245 deletions(-)

diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
index 960f653..47fe560 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
+++ b/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);
@@ -640,73 +861,94 @@
         memberTotal.setUseableServiceCount(0);
         memberTotal.setTotalActivityCount(0);
         memberTotal.setTotalCycleOrder(0);
-        memberTotal.setToltaExperienceOrder(0);
+        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);
+                }
+            }
+        }
+    }
 }

--
Gitblit v1.7.1