From b4882b114f082e010d4cc3359d78d18095ef3b83 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期一, 26 六月 2023 19:49:38 +0800
Subject: [PATCH] 商户端和管理台联调bug

---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java | 1199 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 1,139 insertions(+), 60 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 587c7f7..87aab84 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
@@ -2,28 +2,53 @@
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
-import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.bean.BeanUtils;
+import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.utils.CodeFactoryUtil;
 import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.member.domain.dto.AppUserAuthorizeDto;
-import com.ruoyi.member.domain.vo.AppUserAuthorizeVo;
+import com.ruoyi.member.domain.dto.*;
+import com.ruoyi.member.domain.pojo.member.IntegralRecord;
+import com.ruoyi.member.domain.pojo.member.MemberNurse;
+import com.ruoyi.member.domain.pojo.member.MemberTotal;
+import com.ruoyi.member.domain.vo.*;
 import com.ruoyi.member.mapper.member.MemberMapper;
-import com.ruoyi.member.service.member.MemberService;
-import com.ruoyi.system.api.RemoteUserService;
+import com.ruoyi.member.service.member.*;
+import com.ruoyi.member.util.HttpUtils;
 import com.ruoyi.system.api.constant.AppErrorConstant;
 import com.ruoyi.system.api.constant.SecurityConstant;
+import com.ruoyi.system.api.domain.dto.*;
+import com.ruoyi.system.api.domain.poji.config.Activeness;
+import com.ruoyi.system.api.domain.poji.config.SysTag;
 import com.ruoyi.system.api.domain.poji.member.Member;
+import com.ruoyi.system.api.domain.poji.shop.Shop;
 import com.ruoyi.system.api.domain.poji.sys.SysUser;
+import com.ruoyi.system.api.domain.vo.*;
 import com.ruoyi.system.api.model.AppMiniLoginDto;
 import com.ruoyi.system.api.model.AppMiniLoginVo;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.data.redis.core.StringRedisTemplate;
+import com.ruoyi.system.api.service.RemoteConfigService;
+import com.ruoyi.system.api.service.RemoteOrderService;
+import com.ruoyi.system.api.service.RemoteShopService;
+import com.ruoyi.system.api.service.RemoteUserService;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.util.EntityUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.UUID;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -34,7 +59,15 @@
  * @since 2023-04-25
  */
 @Service
+@Log4j2
 public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {
+
+    private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token";
+
+    private static final String WX_APPID = "wxb7f0ea286fc4e535";
+
+    private static final String WX_SECRET = "852a2512a6ab559cafc68bae5d4160ac";
+
 
     @Resource
     private RemoteUserService sysUserService;
@@ -46,7 +79,34 @@
     private MemberMapper memberMapper;
 
     @Resource
-    private StringRedisTemplate stringRedisTemplate;
+    private RemoteShopService shopService;
+
+    @Resource
+    private RemoteOrderService orderService;
+
+    @Resource
+    private MemberNurseService memberNurseService;
+
+    @Resource
+    private RemoteConfigService remoteConfigService;
+
+    @Resource
+    private RedisService redisService;
+
+    @Resource
+    private MemberTotalService memberTotalService;
+
+    @Resource
+    private IntegralRecordService integralRecordService;
+
+    @Resource
+    private MemberArchiveService memberArchiveService;
+
+    @Resource
+    private RemoteShopService remoteShopService;
+
+    @Resource
+    private RemoteOrderService remoteOrderService;
 
     /**
      * @description: TODO
@@ -86,82 +146,1101 @@
             sessionKey = session.getSessionKey();
             //获取用户
             Member member = memberMapper.getOneByMiniOpenid(openid);
-            SysUser sysUser;
-            if(member==null){
-                //创建新用户
-                String memberId = UUID.randomUUID().toString();
-                sysUser = new SysUser();
-                sysUser.setUserName(memberId);
-                sysUser.setNickName("微信用户");
-                String password = "hongruitang";
-                sysUser.setPassword(SecurityUtils.encryptPassword(password));
-                sysUserService.registerUser(sysUser);
-                member = new Member();
-                member.setUserId(sysUser.getUserId());
-                member.setDelFlag(0);
-                member.setMemberId(memberId);
-                member.setWxUnionid(unionid);
-                member.setMiniOpenid(openid);
-                member.setCreateTime(new Date());
-                this.save(member);
-            }else{
+            SysUser sysUser = null;
+            if(member!=null){
                 sysUser = sysUserService.getSysUser(member.getUserId()).getData();
             }
             appMiniLoginVo.setMiniOpenid(openid);
             appMiniLoginVo.setWxUnionid(unionid);
             appMiniLoginVo.setSysUser(sysUser);
             appMiniLoginVo.setSessionKey(sessionKey);
-            //sessionKey
-            stringRedisTemplate.opsForValue().set(SecurityConstant.SESSION_KEY+openid,sessionKey);
-        }else{
-            return null;
+            redisService.setCacheObject(SecurityConstant.SESSION_KEY+openid,sessionKey,1L,TimeUnit.DAYS);
         }
+        log.info("appMiniLoginVo"+appMiniLoginVo.toString());
         return appMiniLoginVo;
     }
 
     /**
-     * 获取授权信息
-     * @param appUserAuthorizeDto
+     * 小程序注册
+     * @param appUserRegisterDto
      * @return
      */
     @Override
-    public AppUserAuthorizeVo getAppUserAuthorize(AppUserAuthorizeDto appUserAuthorizeDto){
-        Member member = this.getById(appUserAuthorizeDto.getUserId());
-        AppUserAuthorizeVo appUserAuthorizeVo = new AppUserAuthorizeVo();
+    public AppMiniRegisterVo miniRegister(AppMiniRegisterDto appUserRegisterDto){
+        AppMiniRegisterVo appUserRegisterVo = new AppMiniRegisterVo();
+        String mobile = null;
         //获取code接口在redis里存放的sessionkey用于解密
-        String sessionkey = stringRedisTemplate.opsForValue().get(SecurityConstant.SESSION_KEY+ member.getMiniOpenid());
+        String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY+ appUserRegisterDto.getMiniOpenid());
         if(StringUtils.isBlank(sessionkey)){
             throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN);
         }
-        String mobile = null;
         try {
-            //解密微信加密用户信息和手机号
-            WxMaPhoneNumberInfo wxPhoneInfo;
-            if(StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneEncryptedData())&&StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneIv())){
-                wxPhoneInfo = wxMaService.getUserService().getPhoneNoInfo(sessionkey, appUserAuthorizeDto.getPhoneEncryptedData(), appUserAuthorizeDto.getPhoneIv());
-            }else{
-                throw new ServiceException(AppErrorConstant.AUTHORIZE_MISS);
+            //获取微信token用于解密手机
+            String accessToken = redisService.getCacheObject(SecurityConstant.WX_TOKEN);
+            if (StringUtils.isBlank(accessToken)) {
+                String responseAccessToken = getAccessTokenByWX();
+                JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken);
+                accessToken = jsonAccessToken.getString("access_token");
+                String 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);
+                }
             }
-            if(StringUtils.isBlank(wxPhoneInfo.getPhoneNumber())){
-                throw new ServiceException(AppErrorConstant.AUTHORIZE_FAILED);
+            //解密手机
+            String responseUserPhoneNumber = getMobileByWX(accessToken, appUserRegisterDto.getMobileCode());
+            JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber);
+            String errcode = jsonUserPhoneNumber.getString("errcode");
+            String errmsg = jsonUserPhoneNumber.getString("errmsg");
+            if (!"0".equals(errcode)) {
+                throw new ServiceException(errmsg);
             }
-            mobile = wxPhoneInfo.getPhoneNumber();
+            String phoneInfo = jsonUserPhoneNumber.getString("phone_info");
+            JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo);
+            mobile = jsonUserPhoneInfo.getString("purePhoneNumber");
         } catch (Exception e) {
             e.printStackTrace();
         }
-        //更新用户手机信息
-        SysUser sysUser = new SysUser();
-        sysUser.setUserId(appUserAuthorizeDto.getUserId());
-        sysUser.setPhonenumber(mobile);
-        sysUserService.updateUserMobile(sysUser);
-        member.setMobile(mobile);
+        if(StringUtils.isBlank(mobile)){
+            return null;
+        }
+        //判断openid是否被其他手机号占用
+        Member checkMember = memberMapper.getOneByMiniOpenid(appUserRegisterDto.getMiniOpenid());
+        if(checkMember!=null&&!checkMember.getMobile().equals(mobile)){
+            throw new ServiceException("微信号换绑手机需联系客服");
+        }
+        Member member = memberMapper.selectMemberByMobile(mobile);
+        SysUser sysUser;
+        //获取用户为空则新建
+        if(member == null){
+            //创建新用户
+            String memberId = IdUtils.simpleUUID();
+            sysUser = new SysUser();
+            sysUser.setUserName(memberId);
+            sysUser.setUserType("03");
+            sysUser.setNickName("鸿瑞堂用户");
+            sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
+            String password = "hongruitang";
+            sysUser.setPassword(SecurityUtils.encryptPassword(password));
+            sysUser = sysUserService.registerUser(sysUser).getData();
+            member = new Member();
+            String memberNo = createMemberNo();
+            member.setMemberNo(memberNo);
+            member.setUserId(sysUser.getUserId());
+            member.setDelFlag(0);
+            member.setNickName("鸿瑞堂用户");
+            member.setRealName("鸿瑞堂用户");
+            member.setCustomerSource("小程序");
+            member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
+            member.setMemberId(memberId);
+            member.setBindingFlag(0);
+            member.setCreateTime(new Date());
+            member.setMobile(mobile);
+            initMemberTotal(memberId);
+        }else{
+            sysUser = sysUserService.getSysUser(member.getUserId()).getData();
+        }
+        member.setWxUnionid(appUserRegisterDto.getWxUnionid());
+        member.setMiniOpenid(appUserRegisterDto.getMiniOpenid());
+        log.info("member-----------------"+member.toString());
         this.saveOrUpdate(member);
-        appUserAuthorizeVo.setMobile(mobile);
-        appUserAuthorizeVo.setNickName(sysUser.getNickName());
-        appUserAuthorizeVo.setOpenid(member.getMiniOpenid());
-        appUserAuthorizeVo.setUnionid(member.getWxUnionid());
-        return appUserAuthorizeVo;
+        appUserRegisterVo.setMobile(mobile);
+        appUserRegisterVo.setNickName(member.getNickName());
+        appUserRegisterVo.setOpenid(member.getMiniOpenid());
+        appUserRegisterVo.setUnionid(member.getWxUnionid());
+        appUserRegisterVo.setSysUser(sysUser);
+        return appUserRegisterVo;
+    }
+
+    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);
+        HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null);
+        return EntityUtils.toString(response.getEntity());
+    }
+
+    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 );
+        bodys.put("code", code);
+        String body = JSONObject.toJSONString(bodys);
+        String host = "https://api.weixin.qq.com/wxa/business/getuserphonenumber";
+        HttpResponse response = HttpUtils.doPost(host, "", "POST", headers, querys, body);
+        return EntityUtils.toString(response.getEntity());
+    }
+
+    /**
+     * 获取用户信息
+     * @param userId
+     * @return
+     */
+    @Override
+    public AppUserInfoVo getAppUserInfo(Long userId){
+        AppUserInfoVo appUserInfoVo = new AppUserInfoVo();
+        Member member = this.getByUserId(userId);
+        appUserInfoVo.setUserId(userId);
+        appUserInfoVo.setMemberNo(member.getMemberNo());
+        appUserInfoVo.setNickName(member.getNickName());
+        appUserInfoVo.setRealName(member.getRealName());
+        appUserInfoVo.setPhonenumber(member.getMobile());
+        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.setBirthday(member.getBirthday());
+        appUserInfoVo.setGender(member.getGender());
+        appUserInfoVo.setAvatar(member.getAvatar());
+        AppOrderTotalVo appOrderTotalVo = orderService.getAppOrderTotal(userId).getData();
+        appUserInfoVo.setNoPayCount(appOrderTotalVo.getNoPayCount());
+        appUserInfoVo.setNoUseCount(appOrderTotalVo.getNoUseCount());
+        return appUserInfoVo;
+    }
+
+    /**
+     * 修改用户信息
+     * @param appEditUserDto
+     */
+    @Override
+    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){
+            case 1:
+                member.setNickName(editValue);
+                member.setUpdateTime(new Date());
+                member.setUpdateUserId(appEditUserDto.getUserId());
+                this.saveOrUpdate(member);
+                break;
+            case 2:
+                break;
+            case 3:
+                member.setGender(Integer.valueOf(editValue));
+                member.setUpdateTime(new Date());
+                member.setUpdateUserId(appEditUserDto.getUserId());
+                this.saveOrUpdate(member);
+                break;
+            case 4:
+                member.setBirthday(editValue);
+                member.setUpdateTime(new Date());
+                member.setUpdateUserId(appEditUserDto.getUserId());
+                this.saveOrUpdate(member);
+                break;
+            default:
+                break;
+        }
+        sysUserService.editUserInfo(appEditUserDto);
+    }
+
+    /**
+     * 分页获取会员信息
+     * @param merMemberPageDto
+     * @return
+     */
+    @Override
+    public List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto){
+        List<MerMemberPageVo> merMemberPageVoList = memberMapper.pageMerMember(page,merMemberPageDto);
+        return merMemberPageVoList;
     }
 
 
+    /**
+     * @description: 商户获取会员信息
+     * @author jqs34
+     * @date 2023/5/4 22:50
+     * @version 1.0
+     */
+    @Override
+    public MerMemberInfoVo getMerMemberInfo(Long userId){
+        MerMemberInfoVo merMemberInfoVo = new MerMemberInfoVo();
+        Member member = this.getByUserId(userId);
+        merMemberInfoVo.setUserId(userId);
+        merMemberInfoVo.setNickName(member.getNickName());
+        merMemberInfoVo.setPhonenumber(member.getMobile());
+        merMemberInfoVo.setAvatar(member.getAvatar());
+        merMemberInfoVo.setBirthday(member.getBirthday());
+        merMemberInfoVo.setUserTags(member.getUserTags());
+        //未完成
+
+        return merMemberInfoVo;
+    }
+
+    /**
+     * 分页获取收银用户列表
+     * @param page
+     * @param merCashMemberPageDto
+     * @return
+     */
+    @Override
+    public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto){
+
+        List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page,merCashMemberPageDto);
+        return merCashMemberPageVos;
+    }
+
+    /**
+     * 更新会员绑定商户
+     * @param appMemberBindingDto
+     */
+    @Override
+    public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto){
+        Member member = this.getByUserId(appMemberBindingDto.getUserId());
+        if(member.getBindingFlag()==0){
+            member.setBindingTime(new Date());
+        }
+        member.setBindingFlag(appMemberBindingDto.getBindingFlag());
+        member.setRelationShopId(appMemberBindingDto.getShopId());
+        member.setRelationShopName(appMemberBindingDto.getShopName());
+        this.saveOrUpdate(member);
+    }
+
+    /**
+     * 获取会员基础档案
+     * @param userId
+     * @return
+     */
+    @Override
+    public MerMemberBasicFileVo getMerMemberBasicFile(Long userId){
+        MerMemberBasicFileVo merMemberBasicFileVo = new MerMemberBasicFileVo();
+        Member member = this.getByUserId(userId);
+        BeanUtils.copyProperties(member, merMemberBasicFileVo);
+        merMemberBasicFileVo.setNickName(member.getNickName());
+        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);
+        return merMemberBasicFileVo;
+    }
+
+    /**
+     * 获取会员标签
+     * @param userId
+     * @return
+     */
+    @Override
+    public List<MerMemberTagVo> getMerMemberTags(Long userId){
+        Member member = this.getByUserId(userId);
+        String userTags = member.getUserTags();
+        String[] userTagsArr = null;
+        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){
+                merMemberTagVo = new MerMemberTagVo();
+                tagName = sysTag.getTagName();
+                merMemberTagVo.setTagName(tagName);
+                if(userTagsArr!=null &&  ArrayUtils.contains(userTagsArr, tagName)){
+                    merMemberTagVo.setSelectFlag(1);
+                }else{
+                    merMemberTagVo.setSelectFlag(0);
+                }
+                merMemberTagVoList.add(merMemberTagVo);
+            }
+        }
+        return merMemberTagVoList;
+    }
+
+    /**
+     * 编辑会员标签
+     * @param merMemberTagEditDto
+     */
+    @Override
+    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){
+                sj.add(str);
+            }
+        }
+        member.setUserTags(sj.toString());
+        this.saveOrUpdate(member);
+    }
+
+
+    /**
+     * 添加会员
+     * @param merMemberAddDto
+     */
+    @Override
+    public void addMerMember(MerMemberAddDto merMemberAddDto){
+        String phonenumber = merMemberAddDto.getPhonenumber();
+        Member oldMember = this.getByMobile(phonenumber);
+        if(oldMember!=null){
+            throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE);
+        }
+        SysUser sysUser = sysUserService.getSysUserByMobile(phonenumber).getData();
+        if(sysUser==null){
+            String memberId = IdUtils.simpleUUID();
+            sysUser = new SysUser();
+            sysUser.setUserName(memberId);
+            sysUser.setUserType("03");
+            sysUser.setNickName(merMemberAddDto.getNickName());
+            sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
+            String password = "hongruitang";
+            sysUser.setPassword(SecurityUtils.encryptPassword(password));
+            log.debug("sysUser"+sysUser.toString());
+            sysUser = sysUserService.registerUser(sysUser).getData();
+            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.setGender(merMemberAddDto.getGender());
+            member.setMobile(phonenumber);
+            member.setReferrer(merMemberAddDto.getReferrer());
+            member.setBirthday(merMemberAddDto.getBirthday());
+            member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
+            member.setRelationShopId(merMemberAddDto.getShopId());
+            member.setWxUnionid(null);
+            member.setMiniOpenid(null);
+            member.setBindingFlag(1);
+            member.setBindingTime(new Date());
+            Shop shop = remoteShopService.getShop(merMemberAddDto.getShopId()).getData();
+            member.setRelationShopName(shop.getShopName());
+            member.setCustomerSource("商户添加");
+            member.setCreateTime(new Date());
+            log.info("member-----------------"+member.toString());
+            this.saveOrUpdate(member);
+            initMemberTotal(memberId);
+        }
+
+
+    }
+
+    /**
+     * 编辑会员
+     * @param merMemberEditDto
+     */
+    @Override
+    public void editMerMember(MerMemberEditDto merMemberEditDto){
+
+        Member member = this.getByUserId(merMemberEditDto.getEditUserId());
+        if(!member.getMobile().equals(merMemberEditDto.getPhonenumber())){
+            Member memberOld = getByMobile(merMemberEditDto.getPhonenumber());
+            if(memberOld!=null){
+                throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE);
+            }
+        }
+        member.setRealName(merMemberEditDto.getNickName());
+        member.setMobile(merMemberEditDto.getPhonenumber());
+        member.setGender(merMemberEditDto.getGender());
+        member.setReferrer(merMemberEditDto.getReferrer());
+        member.setCustomerSource(merMemberEditDto.getCustomerSource());
+        member.setLevel(merMemberEditDto.getLevel());
+        member.setBirthday(merMemberEditDto.getBirthday());
+        member.setUpdateUserId(merMemberEditDto.getUserId());
+        member.setUpdateTime(new Date());
+        log.info("member-----------------"+member.toString());
+        this.saveOrUpdate(member);
+        SysUser sysUser = new SysUser();
+        sysUser.setUserId(merMemberEditDto.getEditUserId());
+        sysUser.setPhonenumber(merMemberEditDto.getPhonenumber());
+        sysUserService.updateUserMobile(sysUser);
+    }
+
+    /**
+     *
+     * @param mobile
+     * @return
+     */
+    @Override
+    public Member getByMobile(String mobile){
+        LambdaQueryWrapper<Member> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(Member::getDelFlag, 0).eq(Member::getMobile, mobile);
+        Member member = this.getOne(queryWrapper);
+        return member;
+    }
+
+    /**
+     * 更新用户商品类型
+     * @param appMemberGoodsTypeDto
+     */
+    @Override
+    public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto){
+        Member member = this.getByUserId(appMemberGoodsTypeDto.getUserId());
+        HashSet<String> goodsTypeSet = appMemberGoodsTypeDto.getGoodsTypeSet();
+        if(member!=null){
+            String goodsType = member.getGoodsType();
+            Boolean change = false;
+            for(String str : goodsTypeSet){
+                if(goodsType != null){
+                    if(!goodsType.contains(str)){
+                        goodsType = goodsType + "," + str;
+                        change = true;
+                    }
+                }else{
+                    goodsType = str;
+                    change = true;
+                }
+            }
+            if(change){
+                member.setGoodsType(goodsType);
+                this.saveOrUpdate(member);
+            }
+        }
+    }
+
+
+    /**
+     * 订单创建新用户
+     * @param member
+     */
+    @Override
+    public void createNewMember(Member member){
+        String memberNo = createMemberNo();
+        member.setMemberNo(memberNo);
+        member.setDelFlag(0);
+        member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
+        member.setBindingFlag(0);
+        member.setCreateTime(new Date());
+        member.setCustomerSource("商户订单添加");
+        this.saveOrUpdate(member);
+        initMemberTotal(member.getMemberId());
+    }
+
+    /**
+     * 生成会员统计
+     * @param memberId
+     * @return
+     */
+    private void initMemberTotal(String memberId){
+        MemberTotal memberTotal = new MemberTotal();
+        memberTotal.setMemberId(memberId);
+        memberTotal.setDelFlag(0);
+        memberTotal.setTotalIntegral(0);
+        memberTotal.setUsedIntegral(0);
+        memberTotal.setUseableIntegral(0);
+        memberTotal.setTotalPayMoney(new BigDecimal("0.00"));
+        memberTotal.setTotalPayCount(0);
+        memberTotal.setLastPayMoney(new BigDecimal("0.00"));
+        memberTotal.setTotalServiceCount(0);
+        memberTotal.setUsedServiceCount(0);
+        memberTotal.setUseableServiceCount(0);
+        memberTotal.setTotalActivityCount(0);
+        memberTotal.setTotalCycleOrder(0);
+        memberTotal.setToltaExperienceOrder(0);
+        memberTotal.setTotalServiceOrder(0);
+        memberTotal.setTotalGoodsOrder(0);
+        memberTotalService.saveOrUpdate(memberTotal);
+    }
+
+    /**
+     * 生成会员编号
+     * @return
+     */
+    private String createMemberNo(){
+        int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>());
+        String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal+1));
+        return memberNo;
+    }
+
+
+    /**
+     * 平台分页获取会员列表
+     * @param page
+     * @param merMemberPageDto
+     * @return
+     */
+    @Override
+    public List<MgtMemberPageVo> pageMgtMember(Page page,MgtMemberPageDto merMemberPageDto){
+        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
+        Date nowDay = new Date();
+        if(merMemberPageDto.getActivenessId()!=null){
+            //处理活跃度筛选
+            activenessList.stream()
+                    .filter(activeness -> activeness.getActivenessId().equals(merMemberPageDto.getActivenessId()))
+                    .findFirst()
+                    .ifPresent(activeness -> {
+                        merMemberPageDto.setActStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getEndDay())));
+                        merMemberPageDto.setActEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getStartDay())));
+                    });
+        }
+        //处理标签为正则表达
+        if(StringUtils.isNotBlank(merMemberPageDto.getMemberTags())){
+            merMemberPageDto.setMemberTags(merMemberPageDto.getMemberTags().replace(",","|"));
+        }
+        //查询获取结果列表
+        List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto);
+        //处理活跃度返回
+        if(memberPageVoList!=null&&!memberPageVoList.isEmpty()){
+            if(activenessList!=null&&!activenessList.isEmpty()){
+                //生成活跃度时间段列表
+                List<MgtActivenessJudgeVo> mgtActivenessJudgeVoList = new ArrayList<>();
+                MgtActivenessJudgeVo mgtActivenessJudgeVo;
+                for(Activeness activeness : activenessList){
+                    mgtActivenessJudgeVo = new MgtActivenessJudgeVo();
+                    mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(),activeness.getEndDay()));
+                    mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(),activeness.getStartDay()-1));
+                    mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName());
+                }
+                //活跃度赋值
+                Date lastPayTime;
+                for(MgtMemberPageVo mgtMemberPageVo : memberPageVoList){
+                    lastPayTime = mgtMemberPageVo.getLastPayTime();
+                    StringJoiner sj = new StringJoiner(",");
+                    if(lastPayTime!=null){
+                        for(MgtActivenessJudgeVo entity: mgtActivenessJudgeVoList){
+                            if(lastPayTime.compareTo(entity.getStartDay())>=0&&lastPayTime.compareTo(entity.getEndDay())<=0){
+                                sj.add(entity.getActivenessName());
+                            }
+                        }
+                        if(sj.length()>0){
+                            mgtMemberPageVo.setActiveness(sj.toString());
+                        }
+                    }
+                }
+            }
+        }
+        return memberPageVoList;
+    }
+
+
+    /**
+     * 修改会员关联商户
+     * @param mgtMemberRelEditDto
+     */
+    @Override
+    public void editMemberRelationShop(MgtMemberRelEditDto mgtMemberRelEditDto){
+        if(StringUtils.isNotBlank(mgtMemberRelEditDto.getMemberUserIds())){
+            Shop shop = shopService.getShop(mgtMemberRelEditDto.getShopId()).getData();
+            String memberUserIds = mgtMemberRelEditDto.getMemberUserIds();
+            String[] memberUserIdArr = memberUserIds.split(",");
+            for(String str : memberUserIdArr){
+                Member member = this.getByUserId(Long.valueOf(str));
+                member.setRelationShopId(shop.getShopId());
+                member.setRelationShopName(shop.getShopName());
+                member.setBindingFlag(1);
+                member.setBindingTime(new Date());
+                member.setUpdateTime(new Date());
+                member.setUpdateUserId(mgtMemberRelEditDto.getUserId());
+                this.saveOrUpdate(member);
+            }
+        }
+    }
+
+
+    /**
+     * 删除会员关联商户
+     * @param mgtMemberRelDelDto
+     */
+    @Override
+    public void deleteMemberRelationShop(MgtMemberRelDelDto mgtMemberRelDelDto){
+        if(StringUtils.isNotBlank(mgtMemberRelDelDto.getMemberUserIds())) {
+            String memberUserIds = mgtMemberRelDelDto.getMemberUserIds();
+            String[] memberUserIdArr = memberUserIds.split(",");
+            for(String str : memberUserIdArr) {
+                Member member = this.getByUserId(Long.valueOf(str));
+                member.setBindingFlag(0);
+                member.setUpdateTime(new Date());
+                member.setUpdateUserId(mgtMemberRelDelDto.getUserId());
+                this.saveOrUpdate(member);
+            }
+        }
+    }
+
+    /**
+     * 修改会员积分
+     * @param mgtMemberIntEditDto
+     */
+    @Override
+    public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto){
+        if(StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) {
+            String memberUserIds = mgtMemberIntEditDto.getMemberUserIds();
+            String[] memberUserIdArr = memberUserIds.split(",");
+            MemberIntegralChangeDto memberIntegralChangeDto;
+            for(String str : memberUserIdArr) {
+                memberIntegralChangeDto = new MemberIntegralChangeDto();
+                Member member = this.getByUserId(Long.valueOf(str));
+                memberIntegralChangeDto.setUserId(Long.valueOf(str));
+                memberIntegralChangeDto.setMemberId(member.getMemberId());
+                memberIntegralChangeDto.setChangeType(1);
+                memberIntegralChangeDto.setRecordType(3);
+                memberIntegralChangeDto.setIntegral(mgtMemberIntEditDto.getIntegral());
+                //调用积分变动
+                memberIntegralChange(memberIntegralChangeDto);
+            }
+        }
+    }
+
+
+
+    /**
+     * 会员积分变动
+     * @param memberIntegralChangeDto
+     */
+    @Override
+    public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto){
+        MemberTotal memberTotal = memberTotalService.getById(memberIntegralChangeDto.getMemberId());
+        Integer recordType = memberIntegralChangeDto.getRecordType();
+        Integer changeType = memberIntegralChangeDto.getChangeType();
+        Integer integer = memberIntegralChangeDto.getIntegral();
+        Integer totalIntegral = memberTotal.getTotalIntegral();
+        Integer usedIntegral = memberTotal.getUsedIntegral();
+        Integer useableIntegral = memberTotal.getUseableIntegral();
+        //变动统计
+        if(changeType==1){
+            totalIntegral = totalIntegral + integer;
+            useableIntegral = useableIntegral + integer;
+            memberTotal.setTotalIntegral(totalIntegral);
+            memberTotal.setUseableIntegral(useableIntegral);
+        }else if(changeType==2){
+            usedIntegral = usedIntegral + integer;
+            useableIntegral = useableIntegral - integer;
+            if(useableIntegral<0){
+                throw new ServiceException(AppErrorConstant.INTEGRAL_USE_FAILED);
+            }
+            memberTotal.setTotalIntegral(totalIntegral);
+            memberTotal.setUseableIntegral(useableIntegral);
+            memberTotal.setUsedIntegral(usedIntegral);
+        }
+        memberTotalService.saveOrUpdate(memberTotal);
+        //记录变动
+        IntegralRecord integralRecord = new IntegralRecord();
+        integralRecord.setDelFlag(0);
+        integralRecord.setUserId(memberIntegralChangeDto.getUserId());
+        integralRecord.setChangeType(recordType);
+        if(changeType==1){
+            integralRecord.setChangeIntegral(integer);
+        }else if(changeType==2){
+            integralRecord.setChangeIntegral( 0-integer);
+        }
+        integralRecord.setSurpIntegral(useableIntegral);
+        integralRecord.setCreateTime(new Date());
+        integralRecord.setOrderId(memberIntegralChangeDto.getOrderId());
+        integralRecord.setOrderNo(memberIntegralChangeDto.getOrderNo());
+        switch (recordType){
+            case 1:
+                integralRecord.setChangeReason("购物赠送");
+                break;
+            case 2:
+                integralRecord.setChangeReason("活动赠送");
+                break;
+            case 3:
+                integralRecord.setChangeReason("平台赠送");
+                break;
+            default:
+                break;
+        }
+        integralRecordService.saveOrUpdate(integralRecord);
+    }
+
+    /**
+     * 平台获取会员信息
+     * @param userId
+     * @return
+     */
+    @Override
+    public MgtMemberGetVo getMgtMemberInfo(Long userId){
+        MgtMemberGetVo mgtMemberGetVo = new MgtMemberGetVo();
+        Member member = this.getByUserId(userId);
+        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
+        List<MemberArchiveVo> memberArchiveVoList = memberArchiveService.listVoByUserId(member.getUserId());
+        if(memberArchiveVoList!=null&&!memberArchiveVoList.isEmpty()){
+            //去掉未完善信息
+            memberArchiveVoList.removeIf(o -> Objects.isNull(o.getFieldValue()));
+        }
+        mgtMemberGetVo.setMemberId(member.getMemberId());
+        mgtMemberGetVo.setUserId(member.getUserId());
+        mgtMemberGetVo.setMemberNo(member.getMemberNo());
+        mgtMemberGetVo.setRealName(member.getRealName());
+        mgtMemberGetVo.setNickName(member.getNickName());
+        mgtMemberGetVo.setMobile(member.getMobile());
+        mgtMemberGetVo.setGender(member.getGender()==0 ? "男" : member.getGender()==1 ? "女" : null);
+        mgtMemberGetVo.setBirthday(member.getBirthday());
+        mgtMemberGetVo.setBelongDistrict(member.getBelongDistrict());
+        mgtMemberGetVo.setCreateTime(member.getCreateTime());
+        mgtMemberGetVo.setLastPayTime(memberTotal.getLastPayTime());
+        mgtMemberGetVo.setGoodsType(member.getGoodsType());
+        mgtMemberGetVo.setRelationShopName(member.getRelationShopName());
+        mgtMemberGetVo.setIntegral(memberTotal.getTotalIntegral());
+        mgtMemberGetVo.setMemberFrom(member.getCustomerSource());
+        mgtMemberGetVo.setTotalActivityCount(memberTotal.getTotalActivityCount());
+        mgtMemberGetVo.setTotalPayMoney(memberTotal.getTotalPayMoney());
+        mgtMemberGetVo.setMemberRemark(null);
+        mgtMemberGetVo.setMemberArchiveVoList(memberArchiveVoList);
+        mgtMemberGetVo.setMemberTags(member.getUserTags());
+        return mgtMemberGetVo;
+    }
+
+    /**
+     * @description  删除标签
+     * @author  jqs
+     * @date    2023/6/8 15:18
+     * @param memberTag
+     * @return  void
+     */
+    @Override
+    public void deleteMemberTag(String memberTag){
+        memberMapper.deleteMemberTag(memberTag);
+    }
+
+    /**
+     * @description  通过发送类型获取userId
+     * @author  jqs
+     * @date    2023/6/13 17:53
+     * @param sendType
+     * @return  List<Long>
+     */
+    @Override
+    public List<Long> listIdBySendType(Integer sendType){
+        //1.手动领取2.全部用户3.会员用户4非会员用户5自定义
+        return memberMapper.listIdBySendType(sendType);
+    }
+
+    /**
+     * @description  通过ids获取用户简易返回
+     * @author  jqs
+     * @date    2023/6/16 11:06
+     * @param userIds
+     * @return  List<MgtSimpleMemberVo>
+     */
+    @Override
+    public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds){
+        return memberMapper.listSimpleVoByIds(userIds);
+    }
+
+    /**
+     * @description
+     * @author  jqs
+     * @date    2023/6/16 12:41
+     * @param mgtUserIdByKeywordDto
+     * @return  MgtUserIdByKeywordVo
+     */
+    @Override
+    public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto){
+        MgtUserIdByKeywordVo mgtUserIdByKeywordVo = new MgtUserIdByKeywordVo();
+        List<Long> userIdList = memberMapper.getUserIdByKeyword(mgtUserIdByKeywordDto);
+        if(userIdList!=null&&!userIdList.isEmpty()){
+            String userIdStr = userIdList.stream()
+                    .map(Object::toString)
+                    .collect(Collectors.joining(","));
+            mgtUserIdByKeywordVo.setUserIds(userIdStr);
+        }
+        return mgtUserIdByKeywordVo;
+    }
+
+    /**
+     * @description boardMemberTotal
+     * @param
+     * @return MgtBulletinBoardVo
+     * @author jqs34
+     * @date 2023/6/18 16:45
+     */
+    @Override
+    public MgtBulletinBoardVo boardMemberTotal(){
+        MgtBulletinBoardVo mgtBulletinBoardVo = new MgtBulletinBoardVo();
+        mgtBulletinBoardVo.setMemberTotal(memberMapper.memberTotal());
+        mgtBulletinBoardVo.setMemberToday(memberMapper.memberToday());
+        return mgtBulletinBoardVo;
+    }
+
+    /**
+     * @description  会员人数统计
+     * @author  jqs
+     * @date    2023/6/19 15:26
+     * @param
+     * @return  MgtTotalMemberTotalVo
+     */
+    @Override
+    public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto){
+        Date nowDay = DateUtils.getNowDate();
+        // 获取店铺ID
+        Long shopId = mgtBaseShopDto.getShopId();
+        // 获取总会员数和不同年龄段的会员数
+        MgtTotalMemberTotalVo mgtTotalMemberTotalVo = memberMapper.getTotalMemberTotal(mgtBaseShopDto);
+        MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getTotalMemberTotalAge(mgtBaseShopDto);
+        // 年龄段数组
+        String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
+        // 不同年龄段的会员数数组
+        Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
+        // 设置年龄段数组和不同年龄段的会员数数组
+        mgtTotalMemberTotalVo.setAgeKey(ageKey);
+        mgtTotalMemberTotalVo.setAgeValue(ageValue);
+        // 获取不同护理类型的会员数
+        List<MgtMapTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
+        if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
+            String[] nurseKey = new String[nurseTotalVos.size()];
+            Integer[] nurseValue = new Integer[nurseTotalVos.size()];
+            // 遍历不同护理类型的会员数列表,设置护理类型数组和对应的会员数数组
+            for (int i = 0; i < nurseTotalVos.size(); i++) {
+                nurseKey[i] = nurseTotalVos.get(i).getMapKey();
+                nurseValue[i] = nurseTotalVos.get(i).getMapValue();
+            }
+            mgtTotalMemberTotalVo.setNurseKey(nurseKey);
+            mgtTotalMemberTotalVo.setNurseValue(nurseValue);
+        }
+        // 获取不同商品类型的会员数
+        List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto);
+        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
+            String[] goodsTypeKey = new String[goodsTypeTotalVos.size()];
+            Integer[] goodsTypeValue = new Integer[goodsTypeTotalVos.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < goodsTypeTotalVos.size(); i++) {
+                goodsTypeKey[i] = goodsTypeTotalVos.get(i).getMapKey();
+                goodsTypeValue[i] = goodsTypeTotalVos.get(i).getMapValue();
+            }
+            mgtTotalMemberTotalVo.setGoodsTypeKey(goodsTypeKey);
+            mgtTotalMemberTotalVo.setGoodsTypeValue(goodsTypeValue);
+        }
+        // 获取不同活跃度的会员数
+        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
+        if (activenessList != null && !activenessList.isEmpty()) {
+            String[] activenessKey = new String[activenessList.size()];
+            Integer[] activenessValue = new Integer[activenessList.size()];
+            Activeness activeness;
+            String actStartDate;
+            String actEndDate;
+            Integer count;
+            // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
+            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()));
+                count = memberMapper.getTotalMemberTotalActiveness(shopId, actStartDate, actEndDate);
+                activenessKey[i] = activeness.getActivenessName();
+                activenessValue[i] = count;
+            }
+            mgtTotalMemberTotalVo.setActivenessKey(activenessKey);
+            mgtTotalMemberTotalVo.setActivenessValue(activenessValue);
+        }
+        //获取会员消费排名
+        List<MgtMapTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
+        if (memberPayList != null && memberPayList.size() > 0) {
+            String[] memberPayKey = new String[memberPayList.size()];
+            Integer[] memberPayValue = new Integer[memberPayList.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < memberPayList.size(); i++) {
+                memberPayKey[i] = memberPayList.get(i).getMapKey();
+                memberPayValue[i] = memberPayList.get(i).getMapValue();
+            }
+            mgtTotalMemberTotalVo.setOrderRankKey(memberPayKey);
+            mgtTotalMemberTotalVo.setOrderRankValue(memberPayValue);
+        }
+        //获取来源渠道排名
+        List<MgtMapTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto);
+        if (customerSourceList != null && customerSourceList.size() > 0) {
+            String[] customerSourceKey = new String[customerSourceList.size()];
+            Integer[] customerSourceValue = new Integer[customerSourceList.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < customerSourceList.size(); i++) {
+                customerSourceKey[i] = customerSourceList.get(i).getMapKey();
+                customerSourceValue[i] = customerSourceList.get(i).getMapValue();
+            }
+            mgtTotalMemberTotalVo.setCustomerSourceKey(customerSourceKey);
+            mgtTotalMemberTotalVo.setCustomerSourceValue(customerSourceValue);
+        }
+        // 返回总会员数和不同类型会员数的统计结果
+        return mgtTotalMemberTotalVo;
+    }
+
+
+    /**
+     * @description
+     * @author  jqs
+     * @date    2023/6/20 11:42
+     * @param mgtActivityAgeDto
+     * @return  List<Long>
+     */
+    @Override
+    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
+     */
+    @Override
+    public MgtPlTotalMemberTotalVo getPlTotalMemberTotal(MgtBasePlatformDto mgtBasePlatformDto){
+        Date nowDay = DateUtils.getNowDate();
+        //如果区域代码不为null获取对应的商户id
+        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(","))
+                        .map(Long::valueOf)
+                        .collect(Collectors.toList());
+                mgtBasePlatformDto.setShopIdList(list);
+            }
+        }
+        //获取基础统计
+        MgtPlTotalMemberTotalVo plTotalMemberTotalVo = memberMapper.getPlTotalMemberTotal(mgtBasePlatformDto);
+        MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getPlTotalMemberTotalAge(mgtBasePlatformDto);
+        plTotalMemberTotalVo.setManTotal(mgtAgeTotalVo.getManTotal());
+        plTotalMemberTotalVo.setWomenTotal(mgtAgeTotalVo.getWomenTotal());
+        // 年龄段数组
+        String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
+        // 不同年龄段的会员数数组
+        Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
+        // 设置年龄段数组和不同年龄段的会员数数组
+        plTotalMemberTotalVo.setAgeKey(ageKey);
+        plTotalMemberTotalVo.setAgeValue(ageValue);
+        // 获取不同护理类型的会员数
+        List<MgtMapTotalVo> nurseTotalVos = memberMapper.getPlTotalMemberTotalNurse(mgtBasePlatformDto);
+        if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
+            String[] nurseKey = new String[nurseTotalVos.size()];
+            Integer[] nurseValue = new Integer[nurseTotalVos.size()];
+            // 遍历不同护理类型的会员数列表,设置护理类型数组和对应的会员数数组
+            for (int i = 0; i < nurseTotalVos.size(); i++) {
+                nurseKey[i] = nurseTotalVos.get(i).getMapKey();
+                nurseValue[i] = nurseTotalVos.get(i).getMapValue();
+            }
+            plTotalMemberTotalVo.setNurseKey(nurseKey);
+            plTotalMemberTotalVo.setNurseValue(nurseValue);
+        }
+        // 获取不同商品类型的会员数
+        List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getPlTotalMemberTotalGoodsType(mgtBasePlatformDto);
+        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
+            String[] goodsTypeKey = new String[goodsTypeTotalVos.size()];
+            Integer[] goodsTypeValue = new Integer[goodsTypeTotalVos.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < goodsTypeTotalVos.size(); i++) {
+                goodsTypeKey[i] = goodsTypeTotalVos.get(i).getMapKey();
+                goodsTypeValue[i] = goodsTypeTotalVos.get(i).getMapValue();
+            }
+            plTotalMemberTotalVo.setGoodsTypeKey(goodsTypeKey);
+            plTotalMemberTotalVo.setGoodsTypeValue(goodsTypeValue);
+        }
+        // 获取不同活跃度的会员数
+        List<Long> shopIdList = mgtBasePlatformDto.getShopIdList();
+        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
+        if (activenessList != null && !activenessList.isEmpty()) {
+            String[] activenessKey = new String[activenessList.size()];
+            Integer[] activenessValue = new Integer[activenessList.size()];
+            Activeness activeness;
+            String actStartDate;
+            String actEndDate;
+            Integer count;
+            // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
+            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()));
+                count = memberMapper.getPlTotalMemberTotalActiveness(shopIdList, actStartDate, actEndDate);
+                activenessKey[i] = activeness.getActivenessName();
+                activenessValue[i] = count;
+            }
+            plTotalMemberTotalVo.setActivenessKey(activenessKey);
+            plTotalMemberTotalVo.setActivenessValue(activenessValue);
+        }
+        //获取会员消费排名
+        List<MgtMapTotalVo> memberPayList = memberMapper.getPlTotalMemberRankPay(mgtBasePlatformDto);
+        if (memberPayList != null && memberPayList.size() > 0) {
+            String[] memberPayKey = new String[memberPayList.size()];
+            Integer[] memberPayValue = new Integer[memberPayList.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < memberPayList.size(); i++) {
+                memberPayKey[i] = memberPayList.get(i).getMapKey();
+                memberPayValue[i] = memberPayList.get(i).getMapValue();
+            }
+            plTotalMemberTotalVo.setOrderRankKey(memberPayKey);
+            plTotalMemberTotalVo.setOrderRankValue(memberPayValue);
+        }
+        //获取来源渠道排名
+        List<MgtMapTotalVo> customerSourceList = memberMapper.getPlTotalMemberRankCustomerSource(mgtBasePlatformDto);
+        if (customerSourceList != null && customerSourceList.size() > 0) {
+            String[] customerSourceKey = new String[customerSourceList.size()];
+            Integer[] customerSourceValue = new Integer[customerSourceList.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < customerSourceList.size(); i++) {
+                customerSourceKey[i] = customerSourceList.get(i).getMapKey();
+                customerSourceValue[i] = customerSourceList.get(i).getMapValue();
+            }
+            plTotalMemberTotalVo.setCustomerSourceKey(customerSourceKey);
+            plTotalMemberTotalVo.setCustomerSourceValue(customerSourceValue);
+        }
+        //获取商铺会员排名
+        List<MgtMapTotalVo> shopMemberRankList = memberMapper.getPlTotalMemberRank(mgtBasePlatformDto);
+        if (shopMemberRankList != null && shopMemberRankList.size() > 0) {
+            String[] shopMemberRankKey = new String[shopMemberRankList.size()];
+            Integer[] shopMemberRankValue = new Integer[shopMemberRankList.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < shopMemberRankList.size(); i++) {
+                shopMemberRankKey[i] = shopMemberRankList.get(i).getMapKey();
+                shopMemberRankValue[i] = shopMemberRankList.get(i).getMapValue();
+            }
+            plTotalMemberTotalVo.setMemberRankKey(shopMemberRankKey);
+            plTotalMemberTotalVo.setMemberRankValue(shopMemberRankValue);
+        }
+        List<MgtMapTotalVo> memberGoodsRankList = remoteOrderService.listMemberGoodsRank(mgtBasePlatformDto).getData();
+        if (memberGoodsRankList != null && memberGoodsRankList.size() > 0) {
+            String[] shopMemberRankKey = new String[memberGoodsRankList.size()];
+            Integer[] shopMemberRankValue = new Integer[memberGoodsRankList.size()];
+            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
+            for (int i = 0; i < memberGoodsRankList.size(); i++) {
+                shopMemberRankKey[i] = memberGoodsRankList.get(i).getMapKey();
+                shopMemberRankValue[i] = memberGoodsRankList.get(i).getMapValue();
+            }
+            plTotalMemberTotalVo.setGoodsRankKey(shopMemberRankKey);
+            plTotalMemberTotalVo.setGoodsRankValue(shopMemberRankValue);
+        }
+        return plTotalMemberTotalVo;
+    }
+
+    /**
+     * @description  通过shopId获取userId
+     * @author  jqs
+     * @date    2023/6/21 17:11
+     * @param shopIdList
+     * @return  List<Long>
+     */
+    @Override
+    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
+     */
+    @Override
+    public MgtShopTotalMemberVo getUserTotalByShopId(List<Long> shopIdList){
+        MgtShopTotalMemberVo mgtShopTotalMemberVo = new MgtShopTotalMemberVo();
+        MgtBasePlatformDto mgtBasePlatformDto = new MgtBasePlatformDto();
+        mgtBasePlatformDto.setShopIdList(shopIdList);
+        MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getPlTotalMemberTotalAge(mgtBasePlatformDto);
+        mgtShopTotalMemberVo.setManTotal(mgtAgeTotalVo.getManTotal());
+        mgtShopTotalMemberVo.setWomenTotal(mgtAgeTotalVo.getWomenTotal());
+        // 年龄段数组
+        String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
+        // 不同年龄段的会员数数组
+        Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
+        // 设置年龄段数组和不同年龄段的会员数数组
+        mgtShopTotalMemberVo.setAgeKey(ageKey);
+        mgtShopTotalMemberVo.setAgeValue(ageValue);
+        return mgtShopTotalMemberVo;
+    }
 }

--
Gitblit v1.7.1