package com.ruoyi.member.service.impl.member;
|
import com.google.common.collect.Lists;
|
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.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.core.domain.R;
|
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.MemberArchive;
|
import com.ruoyi.member.domain.pojo.member.MemberTotal;
|
import com.ruoyi.member.domain.vo.MerMemberTotalVo;
|
import com.ruoyi.member.domain.vo.*;
|
import com.ruoyi.member.mapper.member.MemberMapper;
|
import com.ruoyi.member.service.member.IntegralRecordService;
|
import com.ruoyi.member.service.member.MemberArchiveService;
|
import com.ruoyi.member.service.member.MemberService;
|
import com.ruoyi.member.service.member.MemberTotalService;
|
import com.ruoyi.member.util.HttpUtils;
|
import com.ruoyi.member.util.MsgUtils;
|
import com.ruoyi.system.api.constant.AppErrorConstant;
|
import com.ruoyi.system.api.constant.SecurityConstant;
|
import com.ruoyi.system.api.domain.dto.*;
|
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.time.LocalDate;
|
import java.time.format.DateTimeFormatter;
|
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 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;
|
|
@Resource
|
private RemoteUserService remoteUserService;
|
|
|
|
|
/**
|
* @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)) {
|
//因为生产测试差异,临时更新token
|
redisService.deleteObject(SecurityConstant.WX_TOKEN);
|
String responseAccessToken = getAccessTokenByWX();
|
JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken);
|
accessToken = jsonAccessToken.getString("access_token");
|
errmsg = jsonAccessToken.getString("errmsg");
|
Long expiresIn = jsonAccessToken.getLong("expires_in");
|
if (StringUtils.isBlank(accessToken)) {
|
throw new ServiceException(errmsg);
|
} else {
|
expiresIn = expiresIn - 100;
|
redisService.setCacheObject(SecurityConstant.WX_TOKEN, accessToken, Long.valueOf(expiresIn), TimeUnit.SECONDS);
|
}
|
responseUserPhoneNumber = getMobileByWX(accessToken, appUserRegisterDto.getMobileCode());
|
jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber);
|
errcode = jsonUserPhoneNumber.getString("errcode");
|
errmsg = jsonUserPhoneNumber.getString("errmsg");
|
if (!"0".equals(errcode)) {
|
throw new ServiceException(errmsg);
|
}
|
}
|
String phoneInfo = jsonUserPhoneNumber.getString("phone_info");
|
JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo);
|
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.setPhonenumber(mobile);
|
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.setFrozenFlag(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);
|
log.info("sysUser01-----------------" + sysUser.toString());
|
} else {
|
sysUser = sysUserService.getSysUser(member.getUserId()).getData();
|
log.info("sysUser02-----------------" + sysUser.toString());
|
}
|
member.setWxUnionid(appUserRegisterDto.getWxUnionid());
|
member.setMiniOpenid(appUserRegisterDto.getMiniOpenid());
|
log.info("member02-----------------" + 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 {
|
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());
|
//积分
|
MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
|
appUserInfoVo.setIntegral(memberTotal.getUseableIntegral());
|
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);
|
break;
|
case 2:
|
member.setAvatar(editValue);
|
break;
|
case 3:
|
member.setGender(Integer.valueOf(editValue));
|
break;
|
case 4:
|
if(editValue.compareTo(DateUtils.getDate())>0){
|
throw new ServiceException(AppErrorConstant.BIRTHDAY_BEYOND);
|
}
|
member.setBirthday(editValue);
|
break;
|
case 5:
|
member.setRealName(editValue);
|
break;
|
default:
|
break;
|
}
|
member.setUpdateTime(new Date());
|
member.setUpdateUserId(appEditUserDto.getUserId());
|
this.saveOrUpdate(member);
|
sysUserService.editUserInfo(appEditUserDto);
|
}
|
|
/**
|
* 分页获取会员信息
|
*
|
* @param merMemberPageDto
|
* @return
|
*/
|
@Override
|
public List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto) {
|
//处理活跃度
|
List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
|
if (StringUtils.isNotBlank(merMemberPageDto.getMemberActiveness())) {
|
if(!activenessList.isEmpty()){
|
for(Activeness activeness : activenessList){
|
if(activeness.getActivenessName().equals(merMemberPageDto.getMemberActiveness())){
|
Date nowDay = DateUtils.getNowDate();
|
String actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay()));
|
String actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay()));
|
merMemberPageDto.setActStartDate(actStartDate);
|
merMemberPageDto.setActEndDate(actEndDate);
|
break;
|
}
|
}
|
}
|
}
|
//处理剩余次数
|
if(merMemberPageDto.getSurpNum()!=null){
|
if(merMemberPageDto.getSurpNum()==1){
|
merMemberPageDto.setSurpStartNum(0);
|
merMemberPageDto.setSurpEndNum(5);
|
}else if(merMemberPageDto.getSurpNum()==2){
|
merMemberPageDto.setSurpStartNum(5);
|
merMemberPageDto.setSurpEndNum(10);
|
}else if(merMemberPageDto.getSurpNum()==3){
|
merMemberPageDto.setSurpStartNum(10);
|
merMemberPageDto.setSurpEndNum(999999999);
|
}
|
}
|
List<MerMemberPageVo> merMemberPageVoList = memberMapper.pageMerMember(page, merMemberPageDto);
|
//处理活跃度返回
|
if (merMemberPageVoList != null && !merMemberPageVoList.isEmpty()) {
|
if (activenessList != null && !activenessList.isEmpty()) {
|
//生成活跃度时间段列表
|
List<MgtActivenessJudgeVo> mgtActivenessJudgeVoList = new ArrayList<>();
|
MgtActivenessJudgeVo mgtActivenessJudgeVo;
|
for (Activeness activeness : activenessList) {
|
mgtActivenessJudgeVo = new MgtActivenessJudgeVo();
|
mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(), -activeness.getEndDay()));
|
mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(), -activeness.getStartDay()));
|
mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName());
|
mgtActivenessJudgeVoList.add(mgtActivenessJudgeVo);
|
}
|
//活跃度赋值
|
Date lastPayTime;
|
for (MerMemberPageVo mgtMemberPageVo : merMemberPageVoList) {
|
//实际是最后服务时间
|
lastPayTime = mgtMemberPageVo.getLastPayTime();
|
StringJoiner sj = new StringJoiner(",");
|
if (lastPayTime != null) {
|
for (MgtActivenessJudgeVo entity : mgtActivenessJudgeVoList) {
|
if (lastPayTime.compareTo(entity.getStartDay()) >= 0 && lastPayTime.compareTo(entity.getEndDay()) <= 0) {
|
sj.add(entity.getActivenessName());
|
}
|
}
|
if (sj.length() > 0) {
|
mgtMemberPageVo.setMemberActiveness(sj.toString());
|
}
|
}
|
}
|
}
|
}
|
return merMemberPageVoList;
|
}
|
|
|
/**
|
* @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.setRealName(member.getRealName());
|
merMemberInfoVo.setPhonenumber(member.getMobile());
|
merMemberInfoVo.setAvatar(member.getAvatar());
|
merMemberInfoVo.setBirthday(member.getBirthday());
|
merMemberInfoVo.setUserTags(member.getUserTags());
|
merMemberInfoVo.setMemberType(member.getGoodsType());
|
// 根据memberId获取MemberTotal对象
|
MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
|
// 设置MerMemberInfoVo对象的属性值
|
merMemberInfoVo.setSurpNumber(memberTotal.getUseableServiceCount());
|
// 创建MerBaseDto对象
|
MerBaseDto merBaseDto = new MerBaseDto();
|
// 设置MerBaseDto对象的属性值
|
merBaseDto.setShopId(merBaseGetDto.getShopId());
|
merBaseDto.setUserId(userId);
|
// 获取未支付订单金额
|
MerMemberSimpleTotalVo memberSimpleTotalVo = remoteOrderService.getMerMemberSimpleTotalVo(merBaseDto).getData();
|
merMemberInfoVo.setUserNumber(memberSimpleTotalVo.getUserNumber());
|
merMemberInfoVo.setPayMoney(memberSimpleTotalVo.getPayMoney());
|
merMemberInfoVo.setUnpaidMoney(memberSimpleTotalVo.getUnpaidMoney());
|
// 获取最近的会员任务
|
MemberTaskSimpleVo memberTaskSimpleVo = remoteShopService.getLastMemberTask(userId).getData();
|
if (memberTaskSimpleVo != null) {
|
merMemberInfoVo.setLastTaskContent(memberTaskSimpleVo.getTaskContent());
|
merMemberInfoVo.setLastTaskTime(memberTaskSimpleVo.getTaskDate());
|
}
|
// 设置MerMemberInfoVo对象的属性值
|
merMemberInfoVo.setNextTaskTime(memberTotal.getNextTaskTime());
|
merMemberInfoVo.setLastPayTime(memberTotal.getLastConsumeTime());
|
// 返回MerMemberInfoVo对象
|
return merMemberInfoVo;
|
}
|
|
/**
|
* 分页获取收银用户列表
|
*
|
* @param page
|
* @param merCashMemberPageDto
|
* @return
|
*/
|
@Override
|
public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto) {
|
|
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());
|
member.setBindingType(appMemberBindingDto.getBindingType());
|
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.setRealName(member.getRealName());
|
merMemberBasicFileVo.setPhonenumber(member.getMobile());
|
merMemberBasicFileVo.setCreateTime(member.getCreateTime());
|
/*List<MemberNurse> memberNurseList = memberNurseService.listByUserId(userId);
|
List<String> valueList = memberNurseList.stream().map(k -> k.getNurse()).collect(Collectors.toList());*/
|
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 Long addMerMember(MerMemberAddDto merMemberAddDto) {
|
String phoneNumber = merMemberAddDto.getPhonenumber();
|
Member oldMember = this.getByMobile(phoneNumber);
|
// Check if the member already exists
|
if (oldMember != null && oldMember.getBindingFlag() == 1) {
|
throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE);
|
}
|
if (oldMember != null && oldMember.getBindingFlag() == 0) {
|
oldMember.setRelationShopId(merMemberAddDto.getShopId());
|
oldMember.setBindingFlag(1);
|
oldMember.setBindingType(8);
|
this.updateById(oldMember);
|
return oldMember.getUserId();
|
}
|
// Get the sysUser by mobile number
|
SysUser sysUser = sysUserService.getSysUserByMobile(phoneNumber).getData();
|
// If sysUser does not exist, create a new one
|
if (sysUser == null || !sysUser.getUserType().equals("03")) {
|
String memberId = IdUtils.simpleUUID();
|
sysUser = new SysUser();
|
sysUser.setUserName(memberId);
|
sysUser.setUserType("03");
|
sysUser.setNickName(merMemberAddDto.getRealName());
|
sysUser.setPhonenumber(merMemberAddDto.getPhonenumber());
|
sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
|
String password = "hongruitang";
|
sysUser.setPassword(SecurityUtils.encryptPassword(password));
|
log.debug("sysUser" + sysUser.toString());
|
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.setFrozenFlag(0);
|
member.setNickName(merMemberAddDto.getRealName());
|
member.setRealName(merMemberAddDto.getRealName());
|
member.setGender(merMemberAddDto.getGender());
|
member.setLevel(merMemberAddDto.getLevel());
|
member.setMobile(phoneNumber);
|
member.setReferrer(merMemberAddDto.getReferrer());
|
member.setBirthday(merMemberAddDto.getBirthday());
|
member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
|
member.setRelationShopId(merMemberAddDto.getShopId());
|
member.setWxUnionid(null);
|
member.setMiniOpenid(null);
|
member.setBindingFlag(1);
|
member.setBindingTime(new Date());
|
member.setBindingType(6);
|
// Get shop information and set it to the member
|
Shop shop = remoteShopService.getShop(merMemberAddDto.getShopId()).getData();
|
member.setRelationShopName(shop.getShopName());
|
member.setCustomerSource(merMemberAddDto.getCustomerSource());
|
member.setCreateTime(new Date());
|
//调理问题
|
List<String> memberNurse = merMemberAddDto.getMemberNurse();
|
if(memberNurse!=null&&!memberNurse.isEmpty()){
|
String memberNurseString = String.join(",", memberNurse);
|
member.setMemberNurse(memberNurseString);
|
}
|
// Save the member and initialize member total
|
this.saveOrUpdate(member);
|
initMemberTotal(memberId);
|
List<MemberArchiveVo> achiveList = merMemberAddDto.getAchiveList();
|
if(achiveList!=null&&!achiveList.isEmpty()){
|
SysUser finalSysUser = sysUser;
|
List<MemberArchive> memberArchiveList = achiveList.stream().map(memberArchiveVo -> {
|
MemberArchive memberArchive = new MemberArchive();
|
memberArchive.setDelFlag(0);
|
memberArchive.setUserId(finalSysUser.getUserId());
|
memberArchive.setFieldId(memberArchiveVo.getFieldId());
|
memberArchive.setFieldValue(memberArchiveVo.getFieldValue());
|
return memberArchive;
|
}
|
).collect(Collectors.toList());
|
memberArchiveService.saveBatch(memberArchiveList);
|
}
|
}else{
|
throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE);
|
}
|
return sysUser.getUserId();
|
}
|
|
/**
|
* 编辑会员
|
*
|
* @param merMemberEditDto
|
*/
|
@Override
|
public void editMerMember(MerMemberEditDto merMemberEditDto) {
|
// 获取用户信息
|
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.getRealName());
|
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());
|
List<String> memberNurse = merMemberEditDto.getMemberNurse();
|
if(memberNurse!=null&&!memberNurse.isEmpty()){
|
String memberNurseString = String.join(",", memberNurse);
|
member.setMemberNurse(memberNurseString);
|
}
|
this.saveOrUpdate(member);
|
// 更新用户手机号
|
SysUser sysUser = new SysUser();
|
sysUser.setUserId(merMemberEditDto.getEditUserId());
|
sysUser.setPhonenumber(merMemberEditDto.getPhonenumber());
|
sysUserService.updateUserMobile(sysUser);
|
// 删除用户的档案信息
|
memberArchiveService.deleteByUserId(sysUser.getUserId());
|
// 添加用户的档案信息
|
List<MemberArchiveVo> achiveList = merMemberEditDto.getAchiveList();
|
if (achiveList != null && !achiveList.isEmpty()) {
|
// 构造用户档案列表
|
List<MemberArchive> memberArchiveList = achiveList.stream().map(memberArchiveVo -> {
|
MemberArchive memberArchive = new MemberArchive();
|
memberArchive.setDelFlag(0);
|
memberArchive.setUserId(sysUser.getUserId());
|
memberArchive.setFieldId(memberArchiveVo.getFieldId());
|
memberArchive.setFieldValue(memberArchiveVo.getFieldValue());
|
return memberArchive;
|
}).collect(Collectors.toList());
|
// 批量保存用户档案信息
|
memberArchiveService.saveBatch(memberArchiveList);
|
}
|
}
|
|
/**
|
* @param mobile
|
* @return
|
*/
|
@Override
|
public Member getByMobile(String mobile) {
|
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) {
|
// 根据用户ID获取会员信息
|
Member member = this.getByUserId(appMemberGoodsTypeDto.getUserId());
|
// 获取商品类型集合和商品护理集合
|
HashSet<String> goodsTypeSet = appMemberGoodsTypeDto.getGoodsTypeSet();
|
HashSet<String> goodsNurseSet = appMemberGoodsTypeDto.getGoodsNurseSet();
|
// 如果会员存在
|
if (member != null) {
|
// 标识是否有变化
|
Boolean change = false;
|
// 更新商品类型
|
if (goodsTypeSet != null && goodsTypeSet.size() > 0) {
|
String goodsType = member.getGoodsType();
|
HashSet<String> goodsTypeOldSet = new HashSet<>();
|
// 如果商品类型不为空
|
if (StringUtils.isNotBlank(goodsType)) {
|
goodsTypeOldSet = new HashSet<>(Arrays.asList(goodsType.split(",")));
|
// 如果商品类型集合相等
|
if (!goodsTypeSet.equals(goodsTypeOldSet)) {
|
change = true;
|
}
|
} else {
|
change = true;
|
}
|
goodsTypeOldSet.addAll(goodsTypeSet);
|
member.setGoodsType(String.join(",", goodsTypeOldSet));
|
}
|
// 更新商品护理
|
if (goodsNurseSet != null && goodsNurseSet.size() > 0) {
|
String memberNurse = member.getMemberNurse();
|
HashSet<String> memberNurseOldSet = new HashSet<>();
|
// 如果会员护理不为空
|
if (StringUtils.isNotBlank(memberNurse)) {
|
memberNurseOldSet = new HashSet<>(Arrays.asList(memberNurse.split(",")));
|
// 如果商品护理集合相等
|
if (!goodsNurseSet.equals(memberNurseOldSet)) {
|
change = true;
|
}
|
} else {
|
change = true;
|
}
|
memberNurseOldSet.addAll(goodsNurseSet);
|
member.setMemberNurse(String.join(",", memberNurseOldSet));
|
}
|
// 如果有变化,则保存或更新会员信息
|
if (change) {
|
this.saveOrUpdate(member);
|
}
|
}
|
}
|
|
|
/**
|
* 订单创建新用户
|
*
|
* @param member
|
*/
|
@Override
|
public void createNewMember(Member member) {
|
String memberNo = createMemberNo();
|
member.setMemberNo(memberNo);
|
member.setDelFlag(0);
|
member.setFrozenFlag(0);
|
member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
|
member.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);
|
memberTotal.setShareFlag(0);
|
memberTotal.setPlSuggestFlag(0);
|
memberTotal.setShopSuggestFlag(0);
|
memberTotal.setSignFlag(0);
|
memberTotal.setBuyFlag(0);
|
memberTotal.setTotalConsumeCount(0);
|
memberTotalService.saveOrUpdate(memberTotal);
|
}
|
|
/**
|
* 生成会员编号
|
*
|
* @return
|
*/
|
private String createMemberNo() {
|
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(",", "|"));
|
}
|
//处理生日
|
if(merMemberPageDto.getStartAge()!=null){
|
LocalDate currentDate = LocalDate.now();
|
LocalDate endBirthday = currentDate.minusYears(merMemberPageDto.getStartAge());
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
merMemberPageDto.setEndBirthday(endBirthday.format(formatter));
|
}
|
if(merMemberPageDto.getEndAge()!=null){
|
LocalDate currentDate = LocalDate.now();
|
LocalDate startBirthday = currentDate.minusYears(merMemberPageDto.getEndAge()+1);
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
merMemberPageDto.setStartBirthday(startBirthday.format(formatter));
|
}
|
// 获取当前登陆人的可视权限
|
SysUser sysUser = SecurityUtils.getSysUser();
|
// 店铺ids
|
List<Long> scope = new ArrayList<>();
|
if (sysUser!=null){
|
String dataScope = sysUser.getDataScope();
|
if (!sysUser.getUserName().equals("admin")){
|
if (org.springframework.util.StringUtils.hasLength(dataScope)){
|
switch (dataScope){
|
case "3":
|
// 本部门数据 查询当前登陆人属于哪个部门 查询这个部门下所有员工关联的所有店铺
|
// 根据用户id 查询同部门下所有员工id
|
List<Long> userIds = sysUserService.getUserIdsByDept(sysUser.getUserId()).getData();
|
// 获取店铺ids
|
List<Long> data = shopService.getShopIdsByUserIds(userIds).getData();
|
if (data.size()==0){
|
scope.add(0L);
|
}else{
|
scope.addAll(data);
|
}
|
break;
|
case "5":
|
// 仅个人数据 查询当前登陆人关联店铺下的用户
|
List<Long> longs = new ArrayList<>();
|
longs.add(sysUser.getUserId());
|
// 获取店铺ids
|
List<Long> data1 = shopService.getShopIdsByUserIds(longs).getData();
|
if (data1.size()==0){
|
scope.add(0L);
|
}else{
|
scope.addAll(data1);
|
}
|
|
break;
|
}
|
}
|
}
|
}
|
//查询获取结果列表
|
List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto,scope);
|
//处理活跃度返回
|
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()));
|
mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName());
|
}
|
//活跃度赋值
|
Date lastPayTime;
|
for (MgtMemberPageVo mgtMemberPageVo : memberPageVoList) {
|
if(null != mgtMemberPageVo.getRelationShopId() && 1 == mgtMemberPageVo.getBindingFlag()){
|
R<Shop> shop_r = remoteShopService.getShop(mgtMemberPageVo.getRelationShopId());
|
if(shop_r.getCode() == 200){
|
Shop data = shop_r.getData();
|
if(null != data){
|
mgtMemberPageVo.setRelationShopName(data.getShopName());
|
}
|
}
|
}
|
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.setBindingType(7);
|
member.setBindingTime(new Date());
|
member.setUpdateTime(new Date());
|
member.setUpdateUserId(mgtMemberRelEditDto.getUserId());
|
this.saveOrUpdate(member);
|
memberMapper.updateById(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) {
|
LambdaUpdateWrapper<Member> updateWrapper = Wrappers.lambdaUpdate();
|
updateWrapper.eq(Member::getUserId, str)
|
.set(Member::getBindingFlag, 0)
|
.set(Member::getRelationShopId,null)
|
.set(Member::getRelationShopName,null)
|
.set(Member::getUpdateUserId,mgtMemberRelDelDto.getUserId())
|
.set(Member::getUpdateTime,new Date());
|
this.update(updateWrapper);
|
}
|
}
|
}
|
|
/**
|
* 修改会员积分
|
*
|
* @param mgtMemberIntEditDto
|
*/
|
@Override
|
public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto) {
|
if (StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) {
|
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) {
|
log.info("会员积分变动---"+memberIntegralChangeDto.toString());
|
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.setAvatar(member.getAvatar());
|
mgtMemberGetVo.setMobile(member.getMobile());
|
if(member.getGender()!=null){
|
if (member.getGender() == 0) {
|
mgtMemberGetVo.setGender("男");
|
} else if (member.getGender() == 1) {
|
mgtMemberGetVo.setGender("女");
|
}
|
}else {
|
mgtMemberGetVo.setGender("未知");
|
}
|
mgtMemberGetVo.setBirthday(member.getBirthday());
|
mgtMemberGetVo.setBelongDistrict(member.getBelongDistrict());
|
mgtMemberGetVo.setCreateTime(member.getCreateTime());
|
mgtMemberGetVo.setLastPayTime(memberTotal.getLastPayTime());
|
mgtMemberGetVo.setGoodsType(member.getGoodsType());
|
if(member.getBindingFlag()==1){
|
R<Shop> shop = remoteShopService.getShop(member.getRelationShopId());
|
if(shop.getCode() == 200){
|
Shop data = shop.getData();
|
if(null != data){
|
mgtMemberGetVo.setRelationShopName(data.getShopName());
|
}
|
}
|
}
|
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,Long shopId) {
|
//1.手动领取2.全部用户3.会员用户4非会员用户5自定义
|
return memberMapper.listIdBySendType(sendType,shopId);
|
}
|
|
|
public List<Long> listIdBySendType2(Long shopId) {
|
//1.手动领取2.全部用户3.会员用户4非会员用户5自定义
|
return memberMapper.listIdBySendType2(shopId);
|
}
|
|
|
/**
|
* @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(List<Long> shopIds) {
|
MgtBulletinBoardVo mgtBulletinBoardVo = new MgtBulletinBoardVo();
|
mgtBulletinBoardVo.setMemberTotal(memberMapper.memberTotal(shopIds));
|
mgtBulletinBoardVo.setMemberToday(memberMapper.memberToday(shopIds));
|
return mgtBulletinBoardVo;
|
}
|
|
/**
|
* @param
|
* @return MgtTotalMemberTotalVo
|
* @description 会员人数统计
|
* @author jqs
|
* @date 2023/6/19 15:26
|
*/
|
@Override
|
public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto) {
|
Date nowDay = DateUtils.getNowDate();
|
MgtTotalMemberTotalVo mgtTotalMemberTotalVo = new MgtTotalMemberTotalVo();
|
mgtTotalMemberTotalVo.setMemberTotal(0);
|
mgtTotalMemberTotalVo.setOnlineTotal(0);
|
mgtTotalMemberTotalVo.setOfflineTotal(0);
|
mgtTotalMemberTotalVo.setIntroduceTotal(0);
|
mgtTotalMemberTotalVo.setCycleTotal(0);
|
mgtTotalMemberTotalVo.setExperienceTotal(0);
|
mgtTotalMemberTotalVo.setServiceTotal(0);
|
mgtTotalMemberTotalVo.setManTotal(0);
|
mgtTotalMemberTotalVo.setManPercent(new BigDecimal("0"));
|
mgtTotalMemberTotalVo.setWomenTotal(0);
|
mgtTotalMemberTotalVo.setWomenPercent(new BigDecimal("0"));
|
mgtTotalMemberTotalVo.setAgeKey(new String[0]);
|
mgtTotalMemberTotalVo.setAgeValue(new Integer[0]);
|
mgtTotalMemberTotalVo.setNurseTotalVos(Lists.newArrayList());
|
mgtTotalMemberTotalVo.setMemberLevelTotalVos(Lists.newArrayList());
|
mgtTotalMemberTotalVo.setGoodsTypeTotalVos(Lists.newArrayList());
|
mgtTotalMemberTotalVo.setActivenessList(Lists.newArrayList());
|
mgtTotalMemberTotalVo.setCustomerSourceList(Lists.newArrayList());
|
mgtTotalMemberTotalVo.setMemberPayList(Lists.newArrayList());
|
// 获取店铺ID
|
Long shopId = mgtBaseShopDto.getShopId();
|
// 获取总会员数和不同年龄段的会员数
|
MgtTotalMemberTotalVo totalMemberTotalVo = memberMapper.getTotalMemberTotal(mgtBaseShopDto);
|
mgtTotalMemberTotalVo.setMemberTotal(totalMemberTotalVo.getMemberTotal());
|
mgtTotalMemberTotalVo.setOnlineTotal(totalMemberTotalVo.getOnlineTotal());
|
mgtTotalMemberTotalVo.setOfflineTotal(totalMemberTotalVo.getOfflineTotal());
|
mgtTotalMemberTotalVo.setCycleTotal(totalMemberTotalVo.getCycleTotal());
|
mgtTotalMemberTotalVo.setExperienceTotal(totalMemberTotalVo.getExperienceTotal());
|
mgtTotalMemberTotalVo.setServiceTotal(totalMemberTotalVo.getServiceTotal());
|
MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getTotalMemberTotalAge(mgtBaseShopDto);
|
Integer manTotal = mgtAgeTotalVo.getManTotal();
|
Integer womenTotal = mgtAgeTotalVo.getWomenTotal();
|
mgtTotalMemberTotalVo.setManTotal(manTotal);
|
mgtTotalMemberTotalVo.setWomenTotal(womenTotal);
|
Integer personTotal = manTotal + womenTotal;
|
BigDecimal manTotalBig = new BigDecimal(manTotal);
|
BigDecimal personTotalBig = new BigDecimal(personTotal);
|
BigDecimal bigTen = new BigDecimal("100.00");
|
BigDecimal menPercent = new BigDecimal("100.00");
|
BigDecimal womenPercent = new BigDecimal("100.00");
|
if(personTotal==0){
|
personTotalBig = bigTen;
|
}
|
if(manTotal==0&&womenTotal==0){
|
menPercent = new BigDecimal("50.00");
|
womenPercent = new BigDecimal("50.00");
|
}else if(manTotal==0&&womenTotal>0){
|
menPercent = new BigDecimal("0.00");
|
womenPercent = new BigDecimal("100.00");
|
}else if(manTotal>0&&womenTotal==0){
|
menPercent = new BigDecimal("100.00");
|
womenPercent = new BigDecimal("0.00");
|
}else{
|
menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
|
womenPercent = bigTen.subtract(menPercent);
|
}
|
mgtTotalMemberTotalVo.setManPercent(menPercent);
|
mgtTotalMemberTotalVo.setWomenPercent(womenPercent);
|
// 年龄段数组
|
String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
|
// 不同年龄段的会员数数组
|
Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
|
BigDecimal[] agePercentValue = new BigDecimal[5];
|
Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge();
|
BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString());
|
BigDecimal hundredBig = new BigDecimal("100");
|
if(totalPerson==0){
|
totalPersonBig = hundredBig;
|
}
|
agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
// 设置年龄段数组和不同年龄段的会员数数组
|
mgtTotalMemberTotalVo.setAgeKey(ageKey);
|
mgtTotalMemberTotalVo.setAgeValue(ageValue);
|
// 获取不同护理类型的会员数
|
List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
|
if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
|
nurseTotalVos = listRemoveNull(nurseTotalVos);
|
mgtTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos);
|
}
|
//获取不同等级的会员数
|
List<MgtMapIntTotalVo> memberLevelTotalVos = memberMapper.getTotalMemberTotalLevel(mgtBaseShopDto);
|
if (memberLevelTotalVos != null && memberLevelTotalVos.size() > 0) {
|
memberLevelTotalVos = listRemoveNull(memberLevelTotalVos);
|
mgtTotalMemberTotalVo.setMemberLevelTotalVos(memberLevelTotalVos);
|
}
|
// 获取不同商品类型的会员数
|
List<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) {
|
MgtPlTotalMemberTotalVo plTotalMemberTotalVo = new MgtPlTotalMemberTotalVo();
|
plTotalMemberTotalVo.setMemberTotal(0);
|
plTotalMemberTotalVo.setMemberYesterday(0);
|
plTotalMemberTotalVo.setMemberSeven(0);
|
plTotalMemberTotalVo.setManTotal(0);
|
plTotalMemberTotalVo.setManPercent(new BigDecimal("0"));
|
plTotalMemberTotalVo.setWomenTotal(0);
|
plTotalMemberTotalVo.setWomenPercent(new BigDecimal("0"));
|
plTotalMemberTotalVo.setAgeKey(new String[0]);
|
plTotalMemberTotalVo.setAgeValue(new Integer[0]);
|
plTotalMemberTotalVo.setAgePercent(new BigDecimal[0]);
|
plTotalMemberTotalVo.setNurseTotalVos(Lists.newArrayList());
|
plTotalMemberTotalVo.setMemberLevelTotalVos(Lists.newArrayList());
|
plTotalMemberTotalVo.setGoodsTypeTotalVos(Lists.newArrayList());
|
plTotalMemberTotalVo.setActivenessList(Lists.newArrayList());
|
plTotalMemberTotalVo.setCustomerSourceList(Lists.newArrayList());
|
plTotalMemberTotalVo.setMemberPayList(Lists.newArrayList());
|
plTotalMemberTotalVo.setMemberGoodsRankList(Lists.newArrayList());
|
plTotalMemberTotalVo.setShopMemberRankList(Lists.newArrayList());
|
Date nowDay = DateUtils.getNowDate();
|
//如果区域代码不为null获取对应的商户id
|
List<Long> list = new ArrayList<>();
|
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 = Arrays.stream(mgtShopIdByCodeVo.getShopIds().split(","))
|
.map(Long::valueOf)
|
.collect(Collectors.toList());
|
}else{
|
return plTotalMemberTotalVo;
|
}
|
}
|
//数据权限
|
List<Long> userId = remoteUserService.getScopeOfAuthorityUserId();
|
BoardMemberTotalDto boardMemberTotalDto = new BoardMemberTotalDto();
|
boardMemberTotalDto.setUserIds(userId);
|
List<Shop> shops = remoteShopService.getShopBySysUserIds(boardMemberTotalDto);
|
List<Long> collect = shops.stream().map(Shop::getShopId).collect(Collectors.toList());
|
list.addAll(collect);
|
mgtBasePlatformDto.setShopIdList(list);
|
|
|
//获取基础统计
|
MgtPlTotalMemberTotalVo plTotalMemberTotalByDayVo = memberMapper.getPlTotalMemberTotal(mgtBasePlatformDto);
|
plTotalMemberTotalVo.setMemberTotal(plTotalMemberTotalByDayVo.getMemberTotal());
|
plTotalMemberTotalVo.setMemberYesterday(plTotalMemberTotalByDayVo.getMemberYesterday());
|
plTotalMemberTotalVo.setMemberSeven(plTotalMemberTotalByDayVo.getMemberSeven());
|
MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getPlTotalMemberTotalAge(mgtBasePlatformDto);
|
if (mgtAgeTotalVo != null) {
|
Integer manTotal = mgtAgeTotalVo.getManTotal();
|
Integer womenTotal = mgtAgeTotalVo.getWomenTotal();
|
Integer personTotal = manTotal + womenTotal;
|
BigDecimal manTotalBig = new BigDecimal(manTotal);
|
BigDecimal personTotalBig = new BigDecimal(personTotal);
|
BigDecimal bigTen = new BigDecimal("100.00");
|
BigDecimal menPercent = new BigDecimal("100.00");
|
BigDecimal womenPercent = new BigDecimal("100.00");
|
if(personTotal==0){
|
personTotalBig = bigTen;
|
}
|
if(manTotal==0&&womenTotal==0){
|
menPercent = new BigDecimal("50.00");
|
womenPercent = new BigDecimal("50.00");
|
}else if(manTotal==0&&womenTotal>0){
|
menPercent = new BigDecimal("0.00");
|
womenPercent = new BigDecimal("100.00");
|
}else if(manTotal>0&&womenTotal==0){
|
menPercent = new BigDecimal("100.00");
|
womenPercent = new BigDecimal("0.00");
|
}else{
|
menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
|
womenPercent = bigTen.subtract(menPercent);
|
}
|
plTotalMemberTotalVo.setManTotal(manTotal);
|
plTotalMemberTotalVo.setWomenTotal(womenTotal);
|
plTotalMemberTotalVo.setManPercent(menPercent);
|
plTotalMemberTotalVo.setWomenPercent(womenPercent);
|
}
|
// 年龄段数组
|
String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
|
// 不同年龄段的会员数数组
|
Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
|
BigDecimal[] agePercentValue = new BigDecimal[5];
|
Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge();
|
BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString());
|
BigDecimal hundredBig = new BigDecimal("100");
|
if(totalPerson==0){
|
totalPersonBig = hundredBig;
|
}
|
agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
// 设置年龄段数组和不同年龄段的会员数数组
|
plTotalMemberTotalVo.setAgeKey(ageKey);
|
plTotalMemberTotalVo.setAgeValue(ageValue);
|
plTotalMemberTotalVo.setAgePercent(agePercentValue);
|
// 获取不同调理类型的会员数
|
List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getPlTotalMemberTotalNurse(mgtBasePlatformDto);
|
if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
|
nurseTotalVos = listRemoveNull(nurseTotalVos);
|
plTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos);
|
}
|
//获取不同等级的会员数
|
List<MgtMapIntTotalVo> memberLevelTotalVos = memberMapper.getPlTotalMemberTotalLevel(mgtBasePlatformDto);
|
if (memberLevelTotalVos != null && memberLevelTotalVos.size() > 0) {
|
memberLevelTotalVos = listRemoveNull(memberLevelTotalVos);
|
plTotalMemberTotalVo.setMemberLevelTotalVos(memberLevelTotalVos);
|
}
|
// 获取不同商品类型的会员数
|
List<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()};
|
BigDecimal[] agePercentValue = new BigDecimal[5];
|
Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge();
|
BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString());
|
BigDecimal hundredBig = new BigDecimal("100");
|
if(totalPerson==0){
|
totalPersonBig = hundredBig;
|
}
|
agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
// 设置年龄段数组和不同年龄段的会员数数组
|
mgtShopTotalMemberVo.setAgeKey(ageKey);
|
mgtShopTotalMemberVo.setAgeValue(ageValue);
|
return mgtShopTotalMemberVo;
|
}
|
|
/**
|
* @param memberTotalChangeDto
|
* @return void
|
* @description 会员统计变动
|
* @author jqs
|
* @date 2023/6/28 14:34
|
*/
|
@Override
|
public void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto) {
|
log.info("会员统计变动---"+memberTotalChangeDto.toString());
|
Member member = this.getByUserId(memberTotalChangeDto.getUserId());
|
MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
|
//积分变动
|
if (memberTotalChangeDto.getChangeIntegral() != null) {
|
if (memberTotalChangeDto.getTypeIntegral() == 2) {
|
memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() - memberTotalChangeDto.getChangeIntegral());
|
memberTotal.setUsedIntegral(memberTotal.getUsedIntegral() + memberTotalChangeDto.getChangeIntegral());
|
} else {
|
memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() + memberTotalChangeDto.getChangeIntegral());
|
memberTotal.setTotalIntegral(memberTotal.getTotalIntegral() + memberTotalChangeDto.getChangeIntegral());
|
IntegralRecord integralRecord = new IntegralRecord();
|
integralRecord.setDelFlag(0);
|
integralRecord.setUserId(memberTotalChangeDto.getUserId());
|
integralRecord.setChangeType(5);
|
integralRecord.setCreateTime(new Date());
|
integralRecord.setChangeIntegral(memberTotalChangeDto.getChangeIntegral());
|
integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+memberTotalChangeDto.getChangeIntegral());
|
integralRecord.setChangeReason("订单【"+memberTotalChangeDto.getOrderNo()+"】获得积分");
|
integralRecord.setOrderId(memberTotalChangeDto.getOrderId());
|
integralRecord.setOrderNo(memberTotalChangeDto.getOrderNo());
|
integralRecordService.saveOrUpdate(integralRecord);
|
}
|
}
|
//消费变动
|
if (memberTotalChangeDto.getPayMoney() != null) {
|
if(memberTotalChangeDto.getPayMoney().compareTo(BigDecimal.ZERO)>=0){
|
memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney()));
|
memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() + 1);
|
memberTotal.setLastPayMoney(memberTotalChangeDto.getPayMoney());
|
memberTotal.setLastPayTime(memberTotalChangeDto.getPayTime());
|
}else{
|
memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney()));
|
memberTotal.setTotalPayCount(memberTotal.getTotalPayCount() - 1);
|
}
|
}
|
//服务次数变动
|
if (memberTotalChangeDto.getServiceCount() != null) {
|
if (memberTotalChangeDto.getTypeService() == 2) {
|
memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount() - memberTotalChangeDto.getServiceCount());
|
memberTotal.setUsedServiceCount(memberTotal.getUsedServiceCount() + memberTotalChangeDto.getServiceCount());
|
memberTotal.setLastServiceTime(new Date());
|
} else {
|
memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount() + memberTotalChangeDto.getServiceCount());
|
memberTotal.setTotalServiceCount(memberTotal.getTotalServiceCount() + memberTotalChangeDto.getServiceCount());
|
}
|
}
|
//跟进时间
|
if (memberTotalChangeDto.getNextTaskTime() != null) {
|
memberTotal.setNextTaskTime(memberTotalChangeDto.getNextTaskTime());
|
}
|
//活动次数变动
|
if (memberTotalChangeDto.getActivityTime() != null) {
|
memberTotal.setTotalActivityCount(memberTotal.getTotalActivityCount() + 1);
|
memberTotal.setLastActivityTime(memberTotalChangeDto.getActivityTime());
|
}
|
//订单数量变动
|
if (memberTotalChangeDto.getCycleOrderChange() != null) {
|
memberTotal.setTotalCycleOrder(memberTotal.getTotalCycleOrder() + memberTotalChangeDto.getCycleOrderChange());
|
}
|
if (memberTotalChangeDto.getExperienceOrderChange() != null) {
|
memberTotal.setTotalExperienceOrder(memberTotal.getTotalExperienceOrder() + memberTotalChangeDto.getExperienceOrderChange());
|
}
|
if (memberTotalChangeDto.getServiceOrderChange() != null) {
|
memberTotal.setTotalServiceOrder(memberTotal.getTotalServiceOrder() + memberTotalChangeDto.getServiceOrderChange());
|
}
|
if (memberTotalChangeDto.getGoodsOrderChange() != null) {
|
memberTotal.setTotalGoodsOrder(memberTotal.getTotalGoodsOrder() + memberTotalChangeDto.getGoodsOrderChange());
|
}
|
//消费记录
|
if(memberTotalChangeDto.getConsumeTime()!=null){
|
memberTotal.setTotalConsumeCount(memberTotal.getTotalConsumeCount()+1);
|
memberTotal.setLastConsumeTime(memberTotalChangeDto.getConsumeTime());
|
}
|
memberTotalService.saveOrUpdate(memberTotal);
|
}
|
|
/**
|
* @description 商户获取会员统计
|
* @author jqs
|
* @date 2023/7/3 17:16
|
* @param merTotalDto
|
* @return MerMemberTotalVo
|
*/
|
@Override
|
public MerMemberTotalVo getMerMemberTotal(MerTotalDto merTotalDto){
|
if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
|
List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
|
merTotalDto.setShopIdList(shopIdList);
|
merTotalDto.setShopId(null);
|
}
|
MerMemberTotalVo merMemberTotalVo = memberMapper.getMerMemberTotal(merTotalDto);
|
return merMemberTotalVo;
|
}
|
|
/**
|
* @description 商户获取会员固定统计
|
* @author jqs
|
* @date 2023/7/3 18:34
|
* @param merTotalDto
|
* @return MerMemberFixedTotalVo
|
*/
|
@Override
|
public MerMemberFixedTotalVo getMerMemberFixedTotal(MerTotalDto merTotalDto){
|
if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
|
List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
|
merTotalDto.setShopIdList(shopIdList);
|
merTotalDto.setShopId(null);
|
}
|
MerMemberFixedTotalVo memberFixedTotalVo = new MerMemberFixedTotalVo();
|
Date nowDay = DateUtils.getNowDate();
|
MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getMerMemberTotalAge(merTotalDto);
|
Integer manTotal = mgtAgeTotalVo.getManTotal();
|
Integer womenTotal = mgtAgeTotalVo.getWomenTotal();
|
memberFixedTotalVo.setManTotal(manTotal);
|
memberFixedTotalVo.setWomenTotal(womenTotal);
|
Integer personTotal = manTotal + womenTotal;
|
BigDecimal manTotalBig = new BigDecimal(manTotal);
|
BigDecimal personTotalBig = new BigDecimal(personTotal);
|
BigDecimal bigTen = new BigDecimal("100.00");
|
BigDecimal menPercent = new BigDecimal("100.00");
|
BigDecimal womenPercent = new BigDecimal("100.00");
|
if(personTotal==0){
|
personTotalBig = bigTen;
|
}
|
if(manTotal==0&&womenTotal==0){
|
menPercent = new BigDecimal("50.00");
|
womenPercent = new BigDecimal("50.00");
|
}else if(manTotal==0&&womenTotal>0){
|
menPercent = new BigDecimal("0.00");
|
womenPercent = new BigDecimal("100.00");
|
}else if(manTotal>0&&womenTotal==0){
|
menPercent = new BigDecimal("100.00");
|
womenPercent = new BigDecimal("0.00");
|
}else{
|
menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
|
womenPercent = bigTen.subtract(menPercent);
|
}
|
memberFixedTotalVo.setManPercent(menPercent);
|
memberFixedTotalVo.setWomenPercent(womenPercent);
|
// 年龄段数组
|
String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
|
// 不同年龄段的会员数数组
|
Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()};
|
BigDecimal[] agePercentValue = new BigDecimal[5];
|
Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge();
|
BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString());
|
BigDecimal hundredBig = new BigDecimal("100");
|
if(totalPerson==0){
|
totalPersonBig = hundredBig;
|
}
|
agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig);
|
// 设置年龄段数组和不同年龄段的会员数数组
|
memberFixedTotalVo.setAgeKey(ageKey);
|
memberFixedTotalVo.setAgeValue(ageValue);
|
memberFixedTotalVo.setAgePercentValue(agePercentValue);
|
// 获取不同护理类型的会员数
|
List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getMerMemberTotalNurse(merTotalDto);
|
if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
|
nurseTotalVos = listRemoveNull(nurseTotalVos);
|
memberFixedTotalVo.setNurseTotalVos(nurseTotalVos);
|
}else{
|
nurseTotalVos = new ArrayList<>();
|
memberFixedTotalVo.setNurseTotalVos(nurseTotalVos);
|
}
|
//获取不同等级的会员数
|
List<MgtMapIntTotalVo> memberLevelTotalVos = memberMapper.getMerMemberTotalLevel(merTotalDto);
|
if (memberLevelTotalVos != null && memberLevelTotalVos.size() > 0) {
|
memberLevelTotalVos = listRemoveNull(memberLevelTotalVos);
|
memberFixedTotalVo.setMemberLevelTotalVos(memberLevelTotalVos);
|
}else{
|
memberLevelTotalVos = new ArrayList<>();
|
memberFixedTotalVo.setMemberLevelTotalVos(memberLevelTotalVos);
|
}
|
// 获取不同商品类型的会员数
|
List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getMerMemberTotalGoodsType(merTotalDto);
|
if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
|
goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos);
|
memberFixedTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
|
}else{
|
goodsTypeTotalVos = new ArrayList<>();
|
memberFixedTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
|
}
|
//获取会员消费排名
|
List<MgtMapIntTotalVo> memberPayList = memberMapper.getMerMemberPayRank(merTotalDto);
|
if (memberPayList != null && memberPayList.size() > 0) {
|
memberPayList = listRemoveNull(memberPayList);
|
memberFixedTotalVo.setMemberPayList(memberPayList);
|
}else{
|
memberPayList = new ArrayList<>();
|
memberFixedTotalVo.setMemberPayList(memberPayList);
|
}
|
// 获取不同活跃度的会员数
|
List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
|
if (activenessList != null && !activenessList.isEmpty()) {
|
Activeness activeness;
|
String actStartDate;
|
String actEndDate;
|
Integer count;
|
List<MgtMapIntTotalVo> mgtMapIntTotalVoList = new ArrayList<>();
|
MgtMapIntTotalVo MgtMapIntTotalVo;
|
// 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
|
for (int i = 0; i < activenessList.size(); i++) {
|
activeness = activenessList.get(i);
|
actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay()));
|
actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay()));
|
merTotalDto.setStartDate(actStartDate);
|
merTotalDto.setEndDate(actEndDate);
|
count = memberMapper.getMerMemberTotalActiveness(merTotalDto);
|
MgtMapIntTotalVo = new MgtMapIntTotalVo();
|
MgtMapIntTotalVo.setMapKey(activeness.getActivenessName());
|
MgtMapIntTotalVo.setMapValue(count);
|
mgtMapIntTotalVoList.add(MgtMapIntTotalVo);
|
}
|
memberFixedTotalVo.setActivenessList(mgtMapIntTotalVoList);
|
}else{
|
List<MgtMapIntTotalVo> mgtMapIntTotalVoList = new ArrayList<>();
|
memberFixedTotalVo.setActivenessList(mgtMapIntTotalVoList);
|
}
|
return memberFixedTotalVo;
|
}
|
|
/**
|
* @description 商会获取会员来源统计
|
* @author jqs
|
* @date 2023/7/3 19:09
|
* @param merTotalDto
|
* @return MerMemberSourceTotalVo
|
*/
|
@Override
|
public MerMemberSourceTotalVo getMerMemberSourceTotal(MerTotalDto merTotalDto){
|
if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
|
List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
|
merTotalDto.setShopIdList(shopIdList);
|
merTotalDto.setShopId(null);
|
}
|
MerMemberSourceTotalVo memberSourceTotalVo = new MerMemberSourceTotalVo();
|
//获取来源渠道排名
|
List<MgtMapIntTotalVo> customerSourceList = memberMapper.getMerMemberCustomerSourceRank(merTotalDto);
|
if (customerSourceList != null && customerSourceList.size() > 0) {
|
customerSourceList = listRemoveNull(customerSourceList);
|
memberSourceTotalVo.setCustomerSourceList(customerSourceList);
|
}
|
|
return memberSourceTotalVo;
|
}
|
|
/**
|
* @description 商会获取会员推荐排名
|
* @author jqs
|
* @date 2023/7/3 19:14
|
* @param merTotalDto
|
* @return MerMemberRecommendTotalVo
|
*/
|
@Override
|
public MerMemberRecommendTotalVo getMerMemberRecommendTotal(MerTotalDto merTotalDto){
|
if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
|
List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
|
merTotalDto.setShopIdList(shopIdList);
|
merTotalDto.setShopId(null);
|
}
|
MerMemberRecommendTotalVo memberRecommendTotalVo = new MerMemberRecommendTotalVo();
|
//获取会员推荐排名
|
/*List<MgtMapIntTotalVo> recommendList = memberMapper.getMerMemberRecommendRank(merTotalDto);
|
if (recommendList != null && recommendList.size() > 0) {
|
recommendList = listRemoveNull(recommendList);
|
memberRecommendTotalVo.setRecommendList(recommendList);
|
}*/
|
List<MgtMapIntTotalVo> recommendList = new ArrayList<>();
|
memberRecommendTotalVo.setRecommendList(recommendList);
|
return memberRecommendTotalVo;
|
}
|
|
/**
|
* @description 获取各年龄层用户
|
* @author jqs
|
* @date 2023/7/4 9:50
|
* @param merTotalDto
|
* @return MerOrderAgeUserVo
|
*/
|
@Override
|
public List<MerOrderAgeUserVo> listOrderAgeUser(MerTotalDto merTotalDto){
|
List<MerOrderAgeUserVo> orderAgeUserVoList = new ArrayList<>();
|
MerOrderAgeUserVo merOrderAgeUserVo = new MerOrderAgeUserVo();
|
merTotalDto.setAgeType(1);
|
List<Long> userIdList = memberMapper.listOrderAgeUser(merTotalDto);
|
merOrderAgeUserVo.setAgeType(1);
|
merOrderAgeUserVo.setUserIdList(userIdList);
|
orderAgeUserVoList.add(merOrderAgeUserVo);
|
merOrderAgeUserVo = new MerOrderAgeUserVo();
|
merTotalDto.setAgeType(2);
|
userIdList = memberMapper.listOrderAgeUser(merTotalDto);
|
merOrderAgeUserVo.setAgeType(2);
|
merOrderAgeUserVo.setUserIdList(userIdList);
|
orderAgeUserVoList.add(merOrderAgeUserVo);
|
merOrderAgeUserVo = new MerOrderAgeUserVo();
|
merTotalDto.setAgeType(3);
|
userIdList = memberMapper.listOrderAgeUser(merTotalDto);
|
merOrderAgeUserVo.setAgeType(3);
|
merOrderAgeUserVo.setUserIdList(userIdList);
|
orderAgeUserVoList.add(merOrderAgeUserVo);
|
merOrderAgeUserVo = new MerOrderAgeUserVo();
|
merTotalDto.setAgeType(4);
|
userIdList = memberMapper.listOrderAgeUser(merTotalDto);
|
merOrderAgeUserVo.setAgeType(4);
|
merOrderAgeUserVo.setUserIdList(userIdList);
|
orderAgeUserVoList.add(merOrderAgeUserVo);
|
merOrderAgeUserVo = new MerOrderAgeUserVo();
|
merTotalDto.setAgeType(5);
|
userIdList = memberMapper.listOrderAgeUser(merTotalDto);
|
merOrderAgeUserVo.setAgeType(4);
|
merOrderAgeUserVo.setUserIdList(userIdList);
|
orderAgeUserVoList.add(merOrderAgeUserVo);
|
return orderAgeUserVoList;
|
}
|
/**
|
* @description 通过年龄层获取用户id列表
|
* @author jqs
|
* @date 2023/8/23 18:59
|
* @param ageType
|
* @return List<Long>
|
*/
|
@Override
|
public List<Long> listUserIdByAgeType(Integer ageType){
|
MerTotalDto merTotalDto = new MerTotalDto();
|
merTotalDto.setAgeType(ageType);
|
List<Long> userIdList = memberMapper.listOrderAgeUser(merTotalDto);
|
return userIdList;
|
}
|
/**
|
* @description
|
* @author jqs
|
* @date 2023/7/5 21:18
|
* @param mgtFrozenMemberDto
|
* @return void
|
*/
|
@Override
|
public void mgtFrozenMember(MgtFrozenMemberDto mgtFrozenMemberDto){
|
Long userId = mgtFrozenMemberDto.getId();
|
Member member = this.getByUserId(userId);
|
member.setFrozenFlag(mgtFrozenMemberDto.getFrozenFlag());
|
this.saveOrUpdate(member);
|
sysUserService.frozenUser(mgtFrozenMemberDto);
|
}
|
|
/**
|
* @description 获取用户任务列表
|
* @author jqs
|
* @date 2023/7/12 15:07
|
* @param userId
|
* @return List<AppIntegralTaskListVo>
|
*/
|
@Override
|
public List<AppIntegralTaskListVo> listAppMemberIntegralTask(Long userId){
|
// 获取指定用户的会员信息
|
Member member = this.getByUserId(userId);
|
// 获取会员的总积分信息
|
MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
|
// 获取其他配置信息
|
AppOtherConfigGetVo appOtherConfigGetVo = remoteConfigService.getAppOtherConfigGetVo().getData();
|
// 创建一个空的积分任务列表
|
List<AppIntegralTaskListVo> appIntegralTaskListVoList = new ArrayList<>();
|
// 创建分享小程序任务
|
AppIntegralTaskListVo shareTask = new AppIntegralTaskListVo();
|
shareTask.setTaskContent("分享小程序给微信好友");
|
shareTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getShareIntegral() + "积分");
|
shareTask.setRecommendFlag(1);
|
shareTask.setCompleteFlag(memberTotal.getShareFlag());
|
appIntegralTaskListVoList.add(shareTask);
|
// 创建提交平台建议任务
|
AppIntegralTaskListVo plSuggestTask = new AppIntegralTaskListVo();
|
plSuggestTask.setTaskContent("提交平台建议");
|
plSuggestTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getSuggestPlatformIntegral() + "积分");
|
plSuggestTask.setRecommendFlag(1);
|
plSuggestTask.setCompleteFlag(memberTotal.getPlSuggestFlag());
|
appIntegralTaskListVoList.add(plSuggestTask);
|
// 创建提交门店建议任务
|
AppIntegralTaskListVo shopSuggestTask = new AppIntegralTaskListVo();
|
shopSuggestTask.setTaskContent("提交门店建议");
|
shopSuggestTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getSuggestShopIntegral() + "积分");
|
shopSuggestTask.setRecommendFlag(1);
|
shopSuggestTask.setCompleteFlag(memberTotal.getShopSuggestFlag());
|
appIntegralTaskListVoList.add(shopSuggestTask);
|
// 创建每日签到任务
|
AppIntegralTaskListVo signTask = new AppIntegralTaskListVo();
|
signTask.setTaskContent("每日签到");
|
signTask.setTaskDesc("完成任务+" + appOtherConfigGetVo.getSignInIntegral() + "积分");
|
signTask.setRecommendFlag(1);
|
signTask.setCompleteFlag(memberTotal.getSignFlag());
|
appIntegralTaskListVoList.add(signTask);
|
// 创建消费得积分任务
|
AppIntegralTaskListVo buyTask = new AppIntegralTaskListVo();
|
buyTask.setTaskContent("消费得积分");
|
buyTask.setTaskDesc("每消费1元+" + appOtherConfigGetVo.getPayMoneyIntegral() + "积分");
|
buyTask.setRecommendFlag(1);
|
buyTask.setCompleteFlag(memberTotal.getBuyFlag());
|
appIntegralTaskListVoList.add(buyTask);
|
// 返回积分任务列表
|
return appIntegralTaskListVoList;
|
}
|
|
/**
|
* @description 积分变动
|
* @author jqs
|
* @date 2023/7/12 15:59
|
* @param integralChangeDto
|
* @return void
|
*/
|
@Override
|
public Boolean changeIntegral(IntegralChangeDto integralChangeDto){
|
log.info("会员积分变动---"+integralChangeDto.toString());
|
Member member = this.getByUserId(integralChangeDto.getUserId());
|
Integer integralType = integralChangeDto.getIntegralType();
|
Integer changeIntegral = integralChangeDto.getChangeIntegral();
|
MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
|
Boolean completeFlag = false;
|
switch(integralType){
|
case 1:
|
if(memberTotal.getShareFlag()==1){
|
completeFlag = true;
|
}
|
break;
|
case 2:
|
if(memberTotal.getPlSuggestFlag()==1){
|
completeFlag = true;
|
}
|
break;
|
case 3:
|
if(memberTotal.getShopSuggestFlag()==1){
|
completeFlag = true;
|
}
|
break;
|
case 4:
|
if(memberTotal.getSignFlag()==1){
|
completeFlag = true;
|
}
|
break;
|
default:
|
break;
|
}
|
if(completeFlag){
|
return completeFlag;
|
}
|
AppOtherConfigGetVo appOtherConfigGetVo = remoteConfigService.getAppOtherConfigGetVo().getData();
|
IntegralRecord integralRecord = new IntegralRecord();
|
integralRecord.setDelFlag(0);
|
integralRecord.setUserId(integralChangeDto.getUserId());
|
integralRecord.setChangeType(integralType);
|
integralRecord.setCreateTime(new Date());
|
//1分享获取2平台建议获取3门店建议获取4每日签到5消费得积分
|
switch(integralType){
|
case 1:
|
changeIntegral = appOtherConfigGetVo.getShareIntegral();
|
integralRecord.setChangeIntegral(changeIntegral);
|
integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
|
integralRecord.setChangeReason("每日任务【分享小程序】获得积分");
|
memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
|
memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
|
memberTotal.setShareFlag(1);
|
break;
|
case 2:
|
changeIntegral = appOtherConfigGetVo.getSuggestPlatformIntegral();
|
integralRecord.setChangeIntegral(changeIntegral);
|
integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
|
integralRecord.setChangeReason("每日任务【提交平台建议】获得积分");
|
memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
|
memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
|
memberTotal.setPlSuggestFlag(1);
|
break;
|
case 3:
|
changeIntegral = appOtherConfigGetVo.getSuggestShopIntegral();
|
integralRecord.setChangeIntegral(changeIntegral);
|
integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
|
integralRecord.setChangeReason("每日任务【提交门店建议】获得积分");
|
memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
|
memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
|
memberTotal.setShopSuggestFlag(1);
|
break;
|
case 4:
|
changeIntegral = appOtherConfigGetVo.getSignInIntegral();
|
integralRecord.setChangeIntegral(changeIntegral);
|
integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
|
integralRecord.setChangeReason("每日任务【签到】获得积分");
|
memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
|
memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
|
memberTotal.setSignFlag(1);
|
break;
|
case 5:
|
integralRecord.setChangeIntegral(changeIntegral);
|
integralRecord.setSurpIntegral(memberTotal.getUseableIntegral()+changeIntegral);
|
integralRecord.setChangeReason("订单【"+integralChangeDto.getOrderNo()+"】获得积分");
|
integralRecord.setOrderId(integralChangeDto.getOrderId());
|
integralRecord.setOrderNo(integralChangeDto.getOrderNo());
|
memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+changeIntegral);
|
memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+changeIntegral);
|
memberTotal.setBuyFlag(1);
|
break;
|
default:
|
break;
|
}
|
memberTotalService.saveOrUpdate(memberTotal);
|
integralRecordService.saveOrUpdate(integralRecord);
|
return completeFlag;
|
}
|
|
/**
|
* @description 统计商户今日新增会员
|
* @author jqs
|
* @date 2023/7/14 19:54
|
* @param shopIdList
|
* @return Integer
|
*/
|
@Override
|
public Integer getAreaNewMember(List<Long> shopIdList){
|
return memberMapper.getAreaNewMember(shopIdList);
|
}
|
|
/**
|
* @description 更新会员绑定商户名
|
* @author jqs
|
* @date 2023/7/26 17:08
|
* @param mgtMemberShopNameDto
|
* @return void
|
*/
|
@Override
|
public void updateMemberShopName(MgtMemberShopNameDto mgtMemberShopNameDto){
|
LambdaUpdateWrapper<Member> updateWrapper = new LambdaUpdateWrapper<>();
|
updateWrapper.eq(Member::getRelationShopId,mgtMemberShopNameDto.getShopId());
|
updateWrapper.set(Member::getRelationShopName,mgtMemberShopNameDto.getShopName());
|
this.update(updateWrapper);
|
}
|
|
/**
|
* @description 发送生日祝福
|
* @author jqs
|
* @date 2023/8/7 15:40
|
* @param
|
* @return void
|
*/
|
@Override
|
public void sendBirthdayBless(){
|
List<Member> mobileList = memberMapper.listTodayBirthday();
|
if(mobileList!=null&&!mobileList.isEmpty()){
|
log.info("生日祝福发送短信---"+mobileList.toString());
|
for(Member member : mobileList){
|
try {
|
String msg = "{\"name\":\"" + (StringUtils.isEmpty(member.getRealName()) ? member.getNickName() : member.getRealName()) + "\"}";
|
MsgUtils.sendMsg(member.getMobile(),null, msg);
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
}
|
}
|
}
|