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.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) {
|
if (StringUtils.isNotBlank(merMemberPageDto.getMemberActiveness())) {
|
Activeness activeness = remoteConfigService.getActivenessByName(merMemberPageDto.getMemberActiveness()).getData();
|
if (activeness != null) {
|
Date nowDay = DateUtils.getNowDate();
|
String actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay()));
|
String actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay()));
|
merMemberPageDto.setActStartDate(actStartDate);
|
merMemberPageDto.setActEndDate(actEndDate);
|
}
|
}
|
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(MerBaseGetDto merBaseGetDto) {
|
// 将id转换为Long类型
|
Long userId = Long.valueOf(merBaseGetDto.getId());
|
// 创建MerMemberInfoVo对象
|
MerMemberInfoVo merMemberInfoVo = new MerMemberInfoVo();
|
// 根据userId获取Member对象
|
Member member = this.getByUserId(userId);
|
// 设置MerMemberInfoVo对象的属性值
|
merMemberInfoVo.setUserId(userId);
|
merMemberInfoVo.setNickName(member.getNickName());
|
merMemberInfoVo.setPhonenumber(member.getMobile());
|
merMemberInfoVo.setAvatar(member.getAvatar());
|
merMemberInfoVo.setBirthday(member.getBirthday());
|
merMemberInfoVo.setUserTags(member.getUserTags());
|
merMemberInfoVo.setMemberType(member.getGoodsType());
|
// 根据memberId获取MemberTotal对象
|
MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
|
// 设置MerMemberInfoVo对象的属性值
|
merMemberInfoVo.setSurpNumber(memberTotal.getUseableServiceCount());
|
merMemberInfoVo.setUserNumber(memberTotal.getUsedServiceCount());
|
merMemberInfoVo.setPayMoney(memberTotal.getTotalPayMoney());
|
// 创建MerBaseDto对象
|
MerBaseDto merBaseDto = new MerBaseDto();
|
// 设置MerBaseDto对象的属性值
|
merBaseDto.setShopId(merBaseGetDto.getShopId());
|
merBaseDto.setUserId(userId);
|
// 获取未支付订单金额
|
BigDecimal unpaidMoney = remoteOrderService.getMemberUnpaidOrder(merBaseDto).getData();
|
merMemberInfoVo.setUnpaidMoney(unpaidMoney);
|
// 获取最近的会员任务
|
MemberTaskSimpleVo memberTaskSimpleVo = remoteShopService.getLastMemberTask(userId).getData();
|
if (memberTaskSimpleVo != null) {
|
merMemberInfoVo.setLastTaskContent(memberTaskSimpleVo.getTaskContent());
|
merMemberInfoVo.setLastTaskTime(memberTaskSimpleVo.getTaskDate());
|
}
|
// 设置MerMemberInfoVo对象的属性值
|
merMemberInfoVo.setNextTaskTime(memberTotal.getNextTaskTime());
|
merMemberInfoVo.setLastPayTime(memberTotal.getLastPayTime());
|
// 返回MerMemberInfoVo对象
|
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());*/
|
String memberNurse = member.getMemberNurse();
|
if(StringUtils.isNotBlank(memberNurse)){
|
List<String> valueList = Arrays.asList(memberNurse.split(","));
|
merMemberBasicFileVo.setMemberNurse(valueList);
|
}
|
List<MemberArchiveVo> achiveList = memberArchiveService.listMerVoByUserId(userId);
|
merMemberBasicFileVo.setAchiveList(achiveList);
|
return merMemberBasicFileVo;
|
}
|
|
/**
|
* 获取会员标签
|
*
|
* @param userId
|
* @return
|
*/
|
@Override
|
public List<MerMemberTagVo> getMerMemberTags(Long userId) {
|
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);
|
// Check if the member already exists
|
if (oldMember != null) {
|
throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE);
|
}
|
// Get the sysUser by mobile number
|
SysUser sysUser = sysUserService.getSysUserByMobile(phoneNumber).getData();
|
// If sysUser does not exist, create a new one
|
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();
|
// Create a new member
|
Member member = new Member();
|
String memberNo = createMemberNo();
|
member.setMemberNo(memberNo);
|
member.setMemberId(memberId);
|
member.setUserId(sysUser.getUserId());
|
member.setDelFlag(0);
|
member.setNickName(merMemberAddDto.getNickName());
|
member.setRealName(merMemberAddDto.getNickName());
|
member.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());
|
// Get shop information and set it to the member
|
Shop shop = remoteShopService.getShop(merMemberAddDto.getShopId()).getData();
|
member.setRelationShopName(shop.getShopName());
|
member.setCustomerSource("商户添加");
|
member.setCreateTime(new Date());
|
// Save the member and initialize member total
|
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.setTotalExperienceOrder(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.listMgtVoByUserId(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;
|
}
|
|
/**
|
* @param memberTag
|
* @return void
|
* @description 删除标签
|
* @author jqs
|
* @date 2023/6/8 15:18
|
*/
|
@Override
|
public void deleteMemberTag(String memberTag) {
|
memberMapper.deleteMemberTag(memberTag);
|
}
|
|
/**
|
* @param sendType
|
* @return List<Long>
|
* @description 通过发送类型获取userId
|
* @author jqs
|
* @date 2023/6/13 17:53
|
*/
|
@Override
|
public List<Long> listIdBySendType(Integer sendType) {
|
//1.手动领取2.全部用户3.会员用户4非会员用户5自定义
|
return memberMapper.listIdBySendType(sendType);
|
}
|
|
/**
|
* @param userIds
|
* @return List<MgtSimpleMemberVo>
|
* @description 通过ids获取用户简易返回
|
* @author jqs
|
* @date 2023/6/16 11:06
|
*/
|
@Override
|
public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds) {
|
return memberMapper.listSimpleVoByIds(userIds);
|
}
|
|
/**
|
* @param mgtUserIdByKeywordDto
|
* @return MgtUserIdByKeywordVo
|
* @description
|
* @author jqs
|
* @date 2023/6/16 12:41
|
*/
|
@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;
|
}
|
|
/**
|
* @param
|
* @return MgtBulletinBoardVo
|
* @description boardMemberTotal
|
* @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;
|
}
|
|
/**
|
* @param
|
* @return MgtTotalMemberTotalVo
|
* @description 会员人数统计
|
* @author jqs
|
* @date 2023/6/19 15:26
|
*/
|
@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<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
|
if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
|
nurseTotalVos = listRemoveNull(nurseTotalVos);
|
mgtTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos);
|
}
|
// 获取不同商品类型的会员数
|
List<MgtMapIntTotalVo> 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<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>();
|
MgtMapIntTotalVo MgtMapIntTotalVo;
|
// 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
|
for (int i = 0; i < activenessList.size(); i++) {
|
activeness = activenessList.get(i);
|
actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay()));
|
actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay()));
|
count = memberMapper.getTotalMemberTotalActiveness(shopId, actStartDate, actEndDate);
|
MgtMapIntTotalVo = new MgtMapIntTotalVo();
|
MgtMapIntTotalVo.setMapKey(activeness.getActivenessName());
|
MgtMapIntTotalVo.setMapValue(count);
|
MgtMapIntTotalVoList.add(MgtMapIntTotalVo);
|
}
|
mgtTotalMemberTotalVo.setActivenessList(MgtMapIntTotalVoList);
|
}
|
//获取会员消费排名
|
List<MgtMapIntTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
|
if (memberPayList != null && memberPayList.size() > 0) {
|
memberPayList = listRemoveNull(memberPayList);
|
mgtTotalMemberTotalVo.setMemberPayList(memberPayList);
|
}
|
//获取来源渠道排名
|
List<MgtMapIntTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto);
|
if (customerSourceList != null && customerSourceList.size() > 0) {
|
customerSourceList = listRemoveNull(customerSourceList);
|
mgtTotalMemberTotalVo.setCustomerSourceList(customerSourceList);
|
}
|
// 返回总会员数和不同类型会员数的统计结果
|
return mgtTotalMemberTotalVo;
|
}
|
|
|
/**
|
* @param mgtActivityAgeDto
|
* @return List<Long>
|
* @description
|
* @author jqs
|
* @date 2023/6/20 11:42
|
*/
|
@Override
|
public List<Long> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto) {
|
List<Long> userIdList = memberMapper.listUserIdByAge(mgtActivityAgeDto);
|
return userIdList;
|
}
|
|
/**
|
* @param mgtBasePlatformDto
|
* @return MgtPlTotalMemberTotalVo
|
* @description 会员人数统计
|
* @author jqs
|
* @date 2023/6/21 10:59
|
*/
|
@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<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getPlTotalMemberTotalNurse(mgtBasePlatformDto);
|
if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
|
nurseTotalVos = listRemoveNull(nurseTotalVos);
|
plTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos);
|
}
|
// 获取不同商品类型的会员数
|
List<MgtMapIntTotalVo> 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<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>();
|
MgtMapIntTotalVo MgtMapIntTotalVo;
|
// 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
|
for (int i = 0; i < activenessList.size(); i++) {
|
activeness = activenessList.get(i);
|
actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay()));
|
actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay()));
|
count = memberMapper.getPlTotalMemberTotalActiveness(shopIdList, actStartDate, actEndDate);
|
if (StringUtils.isNotBlank(activeness.getActivenessName())) {
|
MgtMapIntTotalVo = new MgtMapIntTotalVo();
|
MgtMapIntTotalVo.setMapKey(activeness.getActivenessName());
|
MgtMapIntTotalVo.setMapValue(count);
|
MgtMapIntTotalVoList.add(MgtMapIntTotalVo);
|
}
|
}
|
plTotalMemberTotalVo.setActivenessList(MgtMapIntTotalVoList);
|
}
|
//获取会员消费排名
|
List<MgtMapIntTotalVo> memberPayList = memberMapper.getPlTotalMemberRankPay(mgtBasePlatformDto);
|
if (memberPayList != null && memberPayList.size() > 0) {
|
memberPayList = listRemoveNull(memberPayList);
|
plTotalMemberTotalVo.setMemberPayList(memberPayList);
|
}
|
//获取来源渠道排名
|
List<MgtMapIntTotalVo> customerSourceList = memberMapper.getPlTotalMemberRankCustomerSource(mgtBasePlatformDto);
|
if (customerSourceList != null && customerSourceList.size() > 0) {
|
customerSourceList = listRemoveNull(customerSourceList);
|
plTotalMemberTotalVo.setCustomerSourceList(customerSourceList);
|
}
|
//获取商铺会员排名
|
List<MgtMapIntTotalVo> shopMemberRankList = memberMapper.getPlTotalMemberRank(mgtBasePlatformDto);
|
if (shopMemberRankList != null && shopMemberRankList.size() > 0) {
|
shopMemberRankList = listRemoveNull(shopMemberRankList);
|
plTotalMemberTotalVo.setShopMemberRankList(shopMemberRankList);
|
}
|
List<MgtMapIntTotalVo> memberGoodsRankList = remoteOrderService.listMemberGoodsRank(mgtBasePlatformDto).getData();
|
if (memberGoodsRankList != null && memberGoodsRankList.size() > 0) {
|
memberGoodsRankList = listRemoveNull(memberGoodsRankList);
|
plTotalMemberTotalVo.setMemberGoodsRankList(memberGoodsRankList);
|
}
|
return plTotalMemberTotalVo;
|
}
|
|
/**
|
* @param MgtMapIntTotalVos
|
* @return List<MgtMapIntTotalVo>
|
* @description 去除空字符串
|
* @author jqs
|
* @date 2023/6/27 17:35
|
*/
|
private List<MgtMapIntTotalVo> listRemoveNull(List<MgtMapIntTotalVo> MgtMapIntTotalVos) {
|
for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
|
if (StringUtils.isBlank(MgtMapIntTotalVos.get(i).getMapKey())) {
|
MgtMapIntTotalVos.remove(i);
|
}
|
}
|
return MgtMapIntTotalVos;
|
}
|
|
/**
|
* @param shopIdList
|
* @return List<Long>
|
* @description 通过shopId获取userId
|
* @author jqs
|
* @date 2023/6/21 17:11
|
*/
|
@Override
|
public List<Long> listUserIdByShopId(List<Long> shopIdList) {
|
return memberMapper.listUserIdByShopId(shopIdList);
|
}
|
|
/**
|
* @param shopIdList
|
* @return MgtShopTotalMemberVo
|
* @description 通过shopId获取user统计
|
* @author jqs
|
* @date 2023/6/21 17:19
|
*/
|
@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;
|
}
|
|
/**
|
* @param memberTotalChangeDto
|
* @return void
|
* @description 会员统计变动
|
* @author jqs
|
* @date 2023/6/28 14:34
|
*/
|
@Override
|
public void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto) {
|
Member member = this.getByUserId(memberTotalChangeDto.getUserId());
|
MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
|
//积分变动
|
if (memberTotalChangeDto.getChangeIntegral() != null) {
|
if (memberTotalChangeDto.getTypeIntegral() == 2) {
|
memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() - memberTotalChangeDto.getChangeIntegral());
|
memberTotal.setUsedIntegral(memberTotal.getUsedIntegral() + memberTotalChangeDto.getChangeIntegral());
|
} else {
|
memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() + memberTotalChangeDto.getChangeIntegral());
|
memberTotal.setTotalIntegral(memberTotal.getTotalIntegral() + memberTotalChangeDto.getChangeIntegral());
|
}
|
}
|
//消费变动
|
if (memberTotalChangeDto.getPayMoney() != null) {
|
memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney()));
|
memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() + 1);
|
memberTotal.setLastPayMoney(memberTotalChangeDto.getPayMoney());
|
memberTotal.setLastPayTime(memberTotalChangeDto.getPayTime());
|
}
|
//服务次数变动
|
if (memberTotalChangeDto.getServiceCount() != null) {
|
if (memberTotalChangeDto.getTypeService() == 2) {
|
memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount() - memberTotalChangeDto.getServiceCount());
|
memberTotal.setUsedServiceCount(memberTotal.getUsedServiceCount() + memberTotalChangeDto.getServiceCount());
|
} else {
|
memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() + memberTotalChangeDto.getServiceCount());
|
memberTotal.setTotalServiceCount(memberTotal.getTotalServiceCount() + memberTotalChangeDto.getServiceCount());
|
}
|
}
|
//跟进时间
|
if (memberTotalChangeDto.getNextTaskTime() != null) {
|
memberTotal.setNextTaskTime(memberTotalChangeDto.getNextTaskTime());
|
}
|
//活动次数变动
|
if (memberTotalChangeDto.getActivityTime() != null) {
|
memberTotal.setTotalActivityCount(memberTotal.getTotalActivityCount() + 1);
|
memberTotal.setLastActivityTime(memberTotalChangeDto.getActivityTime());
|
}
|
//订单数量变动
|
if (memberTotalChangeDto.getCycleOrderChange() != null) {
|
memberTotal.setTotalCycleOrder(memberTotal.getTotalCycleOrder() + memberTotalChangeDto.getCycleOrderChange());
|
}
|
if (memberTotalChangeDto.getExperienceOrderChange() != null) {
|
memberTotal.setTotalExperienceOrder(memberTotal.getTotalExperienceOrder() + memberTotalChangeDto.getExperienceOrderChange());
|
}
|
if (memberTotalChangeDto.getServiceOrderChange() != null) {
|
memberTotal.setTotalServiceOrder(memberTotal.getTotalServiceOrder() + memberTotalChangeDto.getServiceOrderChange());
|
}
|
if (memberTotalChangeDto.getGoodsOrderChange() != null) {
|
memberTotal.setTotalGoodsOrder(memberTotal.getTotalGoodsOrder() + memberTotalChangeDto.getGoodsOrderChange());
|
}
|
memberTotalService.saveOrUpdate(memberTotal);
|
}
|
}
|