package com.ruoyi.member.service.impl.member;
|
|
import cn.binarywang.wx.miniapp.api.WxMaService;
|
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.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.*;
|
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.*;
|
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 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.math.BigDecimal;
|
import java.util.*;
|
import java.util.concurrent.TimeUnit;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 小程序用户 服务实现类
|
* </p>
|
*
|
* @author jqs
|
* @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;
|
|
@Resource
|
private WxMaService wxMaService;
|
|
@Resource
|
private MemberMapper memberMapper;
|
|
@Resource
|
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
|
* @author jqs34
|
* @date 2023/4/30 12:40
|
* @version 1.0
|
*/
|
@Override
|
public Member getByUserId(Long userId){
|
Member member = memberMapper.selectMemberByUserId(userId);
|
return member;
|
}
|
|
/**
|
*
|
* @param appMiniLoginDto
|
* @return
|
*/
|
@Override
|
public AppMiniLoginVo getMemberByCode(AppMiniLoginDto appMiniLoginDto){
|
|
AppMiniLoginVo appMiniLoginVo = new AppMiniLoginVo();
|
WxMaJscode2SessionResult session = null;
|
String unionid;
|
String openid;
|
String sessionKey = null;
|
//获取session
|
try {
|
session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode());
|
} catch (Exception e) {
|
e.printStackTrace();
|
return null;
|
}
|
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){
|
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);
|
}
|
log.info("appMiniLoginVo"+appMiniLoginVo.toString());
|
return appMiniLoginVo;
|
}
|
|
/**
|
* 小程序注册
|
* @param appUserRegisterDto
|
* @return
|
*/
|
@Override
|
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)){
|
throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN);
|
}
|
try {
|
//获取微信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);
|
}
|
}
|
//解密手机
|
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);
|
}
|
String phoneInfo = jsonUserPhoneNumber.getString("phone_info");
|
JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo);
|
mobile = jsonUserPhoneInfo.getString("purePhoneNumber");
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
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);
|
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) {
|
nurseTotalVos = listRemoveNull(nurseTotalVos);
|
mgtTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos);
|
}
|
// 获取不同商品类型的会员数
|
List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto);
|
if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
|
goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos);
|
mgtTotalMemberTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
|
}
|
// 获取不同活跃度的会员数
|
List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
|
if (activenessList != null && !activenessList.isEmpty()) {
|
Activeness activeness;
|
String actStartDate;
|
String actEndDate;
|
Integer count;
|
List<MgtMapTotalVo> mgtMapTotalVoList = new ArrayList<>();
|
MgtMapTotalVo mgtMapTotalVo;
|
// 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
|
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);
|
mgtMapTotalVo = new MgtMapTotalVo();
|
mgtMapTotalVo.setMapKey(activeness.getActivenessName());
|
mgtMapTotalVo.setMapValue(count);
|
mgtMapTotalVoList.add(mgtMapTotalVo);
|
}
|
mgtTotalMemberTotalVo.setActivenessList(mgtMapTotalVoList);
|
}
|
//获取会员消费排名
|
List<MgtMapTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
|
if (memberPayList != null && memberPayList.size() > 0) {
|
memberPayList = listRemoveNull(memberPayList);
|
mgtTotalMemberTotalVo.setMemberPayList(memberPayList);
|
}
|
//获取来源渠道排名
|
List<MgtMapTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto);
|
if (customerSourceList != null && customerSourceList.size() > 0) {
|
customerSourceList = listRemoveNull(customerSourceList);
|
mgtTotalMemberTotalVo.setCustomerSourceList(customerSourceList);
|
}
|
// 返回总会员数和不同类型会员数的统计结果
|
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);
|
if(mgtAgeTotalVo!=null){
|
plTotalMemberTotalVo.setManTotal(mgtAgeTotalVo.getManTotal());
|
plTotalMemberTotalVo.setWomenTotal(mgtAgeTotalVo.getWomenTotal());
|
}else{
|
plTotalMemberTotalVo.setManTotal(0);
|
plTotalMemberTotalVo.setWomenTotal(0);
|
}
|
|
// 年龄段数组
|
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) {
|
nurseTotalVos = listRemoveNull(nurseTotalVos);
|
plTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos);
|
}
|
// 获取不同商品类型的会员数
|
List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getPlTotalMemberTotalGoodsType(mgtBasePlatformDto);
|
if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
|
goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos);
|
plTotalMemberTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
|
}
|
// 获取不同活跃度的会员数
|
List<Long> shopIdList = mgtBasePlatformDto.getShopIdList();
|
List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
|
if (activenessList != null && !activenessList.isEmpty()) {
|
Activeness activeness;
|
String actStartDate;
|
String actEndDate;
|
Integer count;
|
List<MgtMapTotalVo> mgtMapTotalVoList = new ArrayList<>();
|
MgtMapTotalVo mgtMapTotalVo;
|
// 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
|
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);
|
if(StringUtils.isNotBlank(activeness.getActivenessName())){
|
mgtMapTotalVo = new MgtMapTotalVo();
|
mgtMapTotalVo.setMapKey(activeness.getActivenessName());
|
mgtMapTotalVo.setMapValue(count);
|
mgtMapTotalVoList.add(mgtMapTotalVo);
|
}
|
}
|
plTotalMemberTotalVo.setActivenessList(mgtMapTotalVoList);
|
}
|
//获取会员消费排名
|
List<MgtMapTotalVo> memberPayList = memberMapper.getPlTotalMemberRankPay(mgtBasePlatformDto);
|
if (memberPayList != null && memberPayList.size() > 0) {
|
memberPayList = listRemoveNull(memberPayList);
|
plTotalMemberTotalVo.setMemberPayList(memberPayList);
|
}
|
//获取来源渠道排名
|
List<MgtMapTotalVo> customerSourceList = memberMapper.getPlTotalMemberRankCustomerSource(mgtBasePlatformDto);
|
if (customerSourceList != null && customerSourceList.size() > 0) {
|
customerSourceList = listRemoveNull(customerSourceList);
|
plTotalMemberTotalVo.setCustomerSourceList(customerSourceList);
|
}
|
//获取商铺会员排名
|
List<MgtMapTotalVo> shopMemberRankList = memberMapper.getPlTotalMemberRank(mgtBasePlatformDto);
|
if (shopMemberRankList != null && shopMemberRankList.size() > 0) {
|
shopMemberRankList = listRemoveNull(shopMemberRankList);
|
plTotalMemberTotalVo.setShopMemberRankList(shopMemberRankList);
|
}
|
List<MgtMapTotalVo> memberGoodsRankList = remoteOrderService.listMemberGoodsRank(mgtBasePlatformDto).getData();
|
if (memberGoodsRankList != null && memberGoodsRankList.size() > 0) {
|
memberGoodsRankList = listRemoveNull(memberGoodsRankList);
|
plTotalMemberTotalVo.setMemberGoodsRankList(memberGoodsRankList);
|
}
|
return plTotalMemberTotalVo;
|
}
|
|
/**
|
* @description 去除空字符串
|
* @author jqs
|
* @date 2023/6/27 17:35
|
* @param mgtMapTotalVos
|
* @return List<MgtMapTotalVo>
|
*/
|
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);
|
}
|
}
|
return mgtMapTotalVos;
|
}
|
|
/**
|
* @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;
|
}
|
}
|