From b8a735497135f549691f3bcc8f409620ce93b55c Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 19 六月 2025 09:09:45 +0800
Subject: [PATCH] 修改直播列表
---
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java | 1675 +++++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 1,441 insertions(+), 234 deletions(-)
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
index 61f407c..bd779ac 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1,12 +1,14 @@
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;
@@ -17,12 +19,17 @@
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.member.domain.dto.*;
import com.ruoyi.member.domain.pojo.member.IntegralRecord;
-import com.ruoyi.member.domain.pojo.member.MemberNurse;
+import com.ruoyi.member.domain.pojo.member.MemberArchive;
import com.ruoyi.member.domain.pojo.member.MemberTotal;
+import com.ruoyi.member.domain.vo.MerMemberTotalVo;
import com.ruoyi.member.domain.vo.*;
import com.ruoyi.member.mapper.member.MemberMapper;
-import com.ruoyi.member.service.member.*;
+import com.ruoyi.member.service.member.IntegralRecordService;
+import com.ruoyi.member.service.member.MemberArchiveService;
+import com.ruoyi.member.service.member.MemberService;
+import com.ruoyi.member.service.member.MemberTotalService;
import com.ruoyi.member.util.HttpUtils;
+import com.ruoyi.member.util.MsgUtils;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.constant.SecurityConstant;
import com.ruoyi.system.api.domain.dto.*;
@@ -46,6 +53,8 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -84,8 +93,6 @@
@Resource
private RemoteOrderService orderService;
- @Resource
- private MemberNurseService memberNurseService;
@Resource
private RemoteConfigService remoteConfigService;
@@ -102,7 +109,17 @@
@Resource
private MemberArchiveService memberArchiveService;
-
+ @Resource
+ private RemoteShopService remoteShopService;
+
+ @Resource
+ private RemoteOrderService remoteOrderService;
+
+ @Resource
+ private RemoteUserService remoteUserService;
+
+
+
/**
* @description: TODO
@@ -111,18 +128,17 @@
* @version 1.0
*/
@Override
- public Member getByUserId(Long userId){
+ public Member getByUserId(Long userId) {
Member member = memberMapper.selectMemberByUserId(userId);
return member;
}
/**
- *
* @param appMiniLoginDto
* @return
*/
@Override
- public AppMiniLoginVo getMemberByCode(AppMiniLoginDto appMiniLoginDto){
+ public AppMiniLoginVo getMemberByCode(AppMiniLoginDto appMiniLoginDto) {
AppMiniLoginVo appMiniLoginVo = new AppMiniLoginVo();
WxMaJscode2SessionResult session = null;
@@ -136,38 +152,39 @@
e.printStackTrace();
return null;
}
- if(session!=null&& StringUtils.isNotBlank(session.getOpenid())){
+ if (session != null && StringUtils.isNotBlank(session.getOpenid())) {
unionid = session.getUnionid();
openid = session.getOpenid();
sessionKey = session.getSessionKey();
//获取用户
Member member = memberMapper.getOneByMiniOpenid(openid);
SysUser sysUser = null;
- if(member!=null){
+ if (member != null) {
sysUser = sysUserService.getSysUser(member.getUserId()).getData();
}
appMiniLoginVo.setMiniOpenid(openid);
appMiniLoginVo.setWxUnionid(unionid);
appMiniLoginVo.setSysUser(sysUser);
appMiniLoginVo.setSessionKey(sessionKey);
- redisService.setCacheObject(SecurityConstant.SESSION_KEY+openid,sessionKey,1L,TimeUnit.DAYS);
+ redisService.setCacheObject(SecurityConstant.SESSION_KEY + openid, sessionKey, 1L, TimeUnit.DAYS);
}
- log.info("appMiniLoginVo"+appMiniLoginVo.toString());
+ log.info("appMiniLoginVo" + appMiniLoginVo.toString());
return appMiniLoginVo;
}
/**
* 小程序注册
+ *
* @param appUserRegisterDto
* @return
*/
@Override
- public AppMiniRegisterVo miniRegister(AppMiniRegisterDto appUserRegisterDto){
+ public AppMiniRegisterVo miniRegister(AppMiniRegisterDto appUserRegisterDto) {
AppMiniRegisterVo appUserRegisterVo = new AppMiniRegisterVo();
String mobile = null;
//获取code接口在redis里存放的sessionkey用于解密
- String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY+ appUserRegisterDto.getMiniOpenid());
- if(StringUtils.isBlank(sessionkey)){
+ String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY + appUserRegisterDto.getMiniOpenid());
+ if (StringUtils.isBlank(sessionkey)) {
throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN);
}
try {
@@ -192,7 +209,26 @@
String errcode = jsonUserPhoneNumber.getString("errcode");
String errmsg = jsonUserPhoneNumber.getString("errmsg");
if (!"0".equals(errcode)) {
- throw new ServiceException(errmsg);
+ //因为生产测试差异,临时更新token
+ redisService.deleteObject(SecurityConstant.WX_TOKEN);
+ String responseAccessToken = getAccessTokenByWX();
+ JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken);
+ accessToken = jsonAccessToken.getString("access_token");
+ errmsg = jsonAccessToken.getString("errmsg");
+ Long expiresIn = jsonAccessToken.getLong("expires_in");
+ if (StringUtils.isBlank(accessToken)) {
+ throw new ServiceException(errmsg);
+ } else {
+ expiresIn = expiresIn - 100;
+ redisService.setCacheObject(SecurityConstant.WX_TOKEN, accessToken, Long.valueOf(expiresIn), TimeUnit.SECONDS);
+ }
+ responseUserPhoneNumber = getMobileByWX(accessToken, appUserRegisterDto.getMobileCode());
+ jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber);
+ errcode = jsonUserPhoneNumber.getString("errcode");
+ errmsg = jsonUserPhoneNumber.getString("errmsg");
+ if (!"0".equals(errcode)) {
+ throw new ServiceException(errmsg);
+ }
}
String phoneInfo = jsonUserPhoneNumber.getString("phone_info");
JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo);
@@ -200,24 +236,25 @@
} catch (Exception e) {
e.printStackTrace();
}
- if(StringUtils.isBlank(mobile)){
+ if (StringUtils.isBlank(mobile)) {
return null;
}
//判断openid是否被其他手机号占用
Member checkMember = memberMapper.getOneByMiniOpenid(appUserRegisterDto.getMiniOpenid());
- if(checkMember!=null&&!checkMember.getMobile().equals(mobile)){
+ if (checkMember != null && !checkMember.getMobile().equals(mobile)) {
throw new ServiceException("微信号换绑手机需联系客服");
}
Member member = memberMapper.selectMemberByMobile(mobile);
SysUser sysUser;
//获取用户为空则新建
- if(member == null){
+ if (member == null) {
//创建新用户
String memberId = IdUtils.simpleUUID();
sysUser = new SysUser();
sysUser.setUserName(memberId);
sysUser.setUserType("03");
sysUser.setNickName("鸿瑞堂用户");
+ sysUser.setPhonenumber(mobile);
sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
String password = "hongruitang";
sysUser.setPassword(SecurityUtils.encryptPassword(password));
@@ -227,6 +264,7 @@
member.setMemberNo(memberNo);
member.setUserId(sysUser.getUserId());
member.setDelFlag(0);
+ member.setFrozenFlag(0);
member.setNickName("鸿瑞堂用户");
member.setRealName("鸿瑞堂用户");
member.setCustomerSource("小程序");
@@ -236,12 +274,14 @@
member.setCreateTime(new Date());
member.setMobile(mobile);
initMemberTotal(memberId);
- }else{
+ log.info("sysUser01-----------------" + sysUser.toString());
+ } else {
sysUser = sysUserService.getSysUser(member.getUserId()).getData();
+ log.info("sysUser02-----------------" + sysUser.toString());
}
member.setWxUnionid(appUserRegisterDto.getWxUnionid());
member.setMiniOpenid(appUserRegisterDto.getMiniOpenid());
- log.info("member-----------------"+member.toString());
+ log.info("member02-----------------" + member.toString());
this.saveOrUpdate(member);
appUserRegisterVo.setMobile(mobile);
appUserRegisterVo.setNickName(member.getNickName());
@@ -253,19 +293,18 @@
public static String getAccessTokenByWX() throws Exception {
String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential";
- Map<String, String> headers = new HashMap<>(8);
+ Map<String, String> headers = new HashMap<>(8);
HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null);
return EntityUtils.toString(response.getEntity());
}
- public static String getMobileByWX(String accessToken, String code) throws Exception {
- String method = "POST";
+ 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 );
+ querys.put("access_token", accessToken);
bodys.put("code", code);
String body = JSONObject.toJSONString(bodys);
String host = "https://api.weixin.qq.com/wxa/business/getuserphonenumber";
@@ -275,11 +314,12 @@
/**
* 获取用户信息
+ *
* @param userId
* @return
*/
@Override
- public AppUserInfoVo getAppUserInfo(Long userId){
+ public AppUserInfoVo getAppUserInfo(Long userId) {
AppUserInfoVo appUserInfoVo = new AppUserInfoVo();
Member member = this.getByUserId(userId);
appUserInfoVo.setUserId(userId);
@@ -287,66 +327,135 @@
appUserInfoVo.setNickName(member.getNickName());
appUserInfoVo.setRealName(member.getRealName());
appUserInfoVo.setPhonenumber(member.getMobile());
- if(member.getRelationShopId()!=null&&member.getBindingFlag()==1){
+ //绑定会员显示绑定店铺
+ if (member.getRelationShopId() != null && member.getBindingFlag() == 1) {
appUserInfoVo.setRelationShopId(member.getRelationShopId());
Shop shop = shopService.getShop(member.getRelationShopId()).getData();
appUserInfoVo.setShopName(shop.getShopName());
- appUserInfoVo.setShopAddress(shop.getShopAreaName()+shop.getShopAddress());
+ appUserInfoVo.setShopAddress(shop.getShopAreaName() + shop.getShopAddress());
}
appUserInfoVo.setBirthday(member.getBirthday());
appUserInfoVo.setGender(member.getGender());
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){
+ public void editAppUserInfo(AppEditUserDto appEditUserDto) {
//修改类型1.昵称2.头像3.性别4.生日
Integer editType = appEditUserDto.getEditType();
String editValue = appEditUserDto.getEditValue();
Member member = this.getByUserId(appEditUserDto.getUserId());
- switch (editType){
+ switch (editType) {
case 1:
member.setNickName(editValue);
- member.setUpdateTime(new Date());
- member.setUpdateUserId(appEditUserDto.getUserId());
- this.saveOrUpdate(member);
break;
case 2:
+ member.setAvatar(editValue);
break;
case 3:
member.setGender(Integer.valueOf(editValue));
- member.setUpdateTime(new Date());
- member.setUpdateUserId(appEditUserDto.getUserId());
- this.saveOrUpdate(member);
break;
case 4:
+ if(editValue.compareTo(DateUtils.getDate())>0){
+ throw new ServiceException(AppErrorConstant.BIRTHDAY_BEYOND);
+ }
member.setBirthday(editValue);
- member.setUpdateTime(new Date());
- member.setUpdateUserId(appEditUserDto.getUserId());
- this.saveOrUpdate(member);
+ break;
+ case 5:
+ member.setRealName(editValue);
break;
default:
break;
}
+ member.setUpdateTime(new Date());
+ member.setUpdateUserId(appEditUserDto.getUserId());
+ this.saveOrUpdate(member);
sysUserService.editUserInfo(appEditUserDto);
}
/**
* 分页获取会员信息
+ *
* @param merMemberPageDto
* @return
*/
@Override
- public List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto){
- List<MerMemberPageVo> merMemberPageVoList = memberMapper.pageMerMember(page,merMemberPageDto);
+ public List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto) {
+ //处理活跃度
+ List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
+ if (StringUtils.isNotBlank(merMemberPageDto.getMemberActiveness())) {
+ if(!activenessList.isEmpty()){
+ for(Activeness activeness : activenessList){
+ if(activeness.getActivenessName().equals(merMemberPageDto.getMemberActiveness())){
+ Date nowDay = DateUtils.getNowDate();
+ String actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay()));
+ String actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay()));
+ merMemberPageDto.setActStartDate(actStartDate);
+ merMemberPageDto.setActEndDate(actEndDate);
+ break;
+ }
+ }
+ }
+ }
+ //处理剩余次数
+ if(merMemberPageDto.getSurpNum()!=null){
+ if(merMemberPageDto.getSurpNum()==1){
+ merMemberPageDto.setSurpStartNum(0);
+ merMemberPageDto.setSurpEndNum(5);
+ }else if(merMemberPageDto.getSurpNum()==2){
+ merMemberPageDto.setSurpStartNum(5);
+ merMemberPageDto.setSurpEndNum(10);
+ }else if(merMemberPageDto.getSurpNum()==3){
+ merMemberPageDto.setSurpStartNum(10);
+ merMemberPageDto.setSurpEndNum(999999999);
+ }
+ }
+ List<MerMemberPageVo> merMemberPageVoList = memberMapper.pageMerMember(page, merMemberPageDto);
+ //处理活跃度返回
+ if (merMemberPageVoList != null && !merMemberPageVoList.isEmpty()) {
+ if (activenessList != null && !activenessList.isEmpty()) {
+ //生成活跃度时间段列表
+ List<MgtActivenessJudgeVo> mgtActivenessJudgeVoList = new ArrayList<>();
+ MgtActivenessJudgeVo mgtActivenessJudgeVo;
+ for (Activeness activeness : activenessList) {
+ mgtActivenessJudgeVo = new MgtActivenessJudgeVo();
+ mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(), -activeness.getEndDay()));
+ mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(), -activeness.getStartDay()));
+ mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName());
+ mgtActivenessJudgeVoList.add(mgtActivenessJudgeVo);
+ }
+ //活跃度赋值
+ Date lastPayTime;
+ for (MerMemberPageVo mgtMemberPageVo : merMemberPageVoList) {
+ //实际是最后服务时间
+ lastPayTime = mgtMemberPageVo.getLastPayTime();
+ StringJoiner sj = new StringJoiner(",");
+ if (lastPayTime != null) {
+ for (MgtActivenessJudgeVo entity : mgtActivenessJudgeVoList) {
+ if (lastPayTime.compareTo(entity.getStartDay()) >= 0 && lastPayTime.compareTo(entity.getEndDay()) <= 0) {
+ sj.add(entity.getActivenessName());
+ }
+ }
+ if (sj.length() > 0) {
+ mgtMemberPageVo.setMemberActiveness(sj.toString());
+ }
+ }
+ }
+ }
+ }
return merMemberPageVoList;
}
@@ -358,90 +467,132 @@
* @version 1.0
*/
@Override
- public MerMemberInfoVo getMerMemberInfo(Long userId){
+ public MerMemberInfoVo getMerMemberInfo(MerBaseGetDto merBaseGetDto) {
+ // 将id转换为Long类型
+ Long userId = Long.valueOf(merBaseGetDto.getId());
+ // 创建MerMemberInfoVo对象
MerMemberInfoVo merMemberInfoVo = new MerMemberInfoVo();
+ // 根据userId获取Member对象
Member member = this.getByUserId(userId);
+ // 设置MerMemberInfoVo对象的属性值
merMemberInfoVo.setUserId(userId);
- merMemberInfoVo.setNickName(member.getNickName());
+ merMemberInfoVo.setRealName(member.getRealName());
merMemberInfoVo.setPhonenumber(member.getMobile());
merMemberInfoVo.setAvatar(member.getAvatar());
merMemberInfoVo.setBirthday(member.getBirthday());
merMemberInfoVo.setUserTags(member.getUserTags());
- //未完成
-
+ merMemberInfoVo.setMemberType(member.getGoodsType());
+ // 根据memberId获取MemberTotal对象
+ MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
+ // 设置MerMemberInfoVo对象的属性值
+ merMemberInfoVo.setSurpNumber(memberTotal.getUseableServiceCount());
+ // 创建MerBaseDto对象
+ MerBaseDto merBaseDto = new MerBaseDto();
+ // 设置MerBaseDto对象的属性值
+ merBaseDto.setShopId(merBaseGetDto.getShopId());
+ merBaseDto.setUserId(userId);
+ // 获取未支付订单金额
+ MerMemberSimpleTotalVo memberSimpleTotalVo = remoteOrderService.getMerMemberSimpleTotalVo(merBaseDto).getData();
+ merMemberInfoVo.setUserNumber(memberSimpleTotalVo.getUserNumber());
+ merMemberInfoVo.setPayMoney(memberSimpleTotalVo.getPayMoney());
+ merMemberInfoVo.setUnpaidMoney(memberSimpleTotalVo.getUnpaidMoney());
+ // 获取最近的会员任务
+ MemberTaskSimpleVo memberTaskSimpleVo = remoteShopService.getLastMemberTask(userId).getData();
+ if (memberTaskSimpleVo != null) {
+ merMemberInfoVo.setLastTaskContent(memberTaskSimpleVo.getTaskContent());
+ merMemberInfoVo.setLastTaskTime(memberTaskSimpleVo.getTaskDate());
+ }
+ // 设置MerMemberInfoVo对象的属性值
+ merMemberInfoVo.setNextTaskTime(memberTotal.getNextTaskTime());
+ merMemberInfoVo.setLastPayTime(memberTotal.getLastConsumeTime());
+ // 返回MerMemberInfoVo对象
return merMemberInfoVo;
}
/**
* 分页获取收银用户列表
+ *
* @param page
* @param merCashMemberPageDto
* @return
*/
@Override
- public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto){
+ public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto) {
- List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page,merCashMemberPageDto);
+ List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page, merCashMemberPageDto);
return merCashMemberPageVos;
}
/**
* 更新会员绑定商户
+ *
* @param appMemberBindingDto
*/
@Override
- public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto){
+ public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto) {
Member member = this.getByUserId(appMemberBindingDto.getUserId());
+ if (member.getBindingFlag() == 0) {
+ member.setBindingTime(new Date());
+ }
member.setBindingFlag(appMemberBindingDto.getBindingFlag());
member.setRelationShopId(appMemberBindingDto.getShopId());
member.setRelationShopName(appMemberBindingDto.getShopName());
+ member.setBindingType(appMemberBindingDto.getBindingType());
this.saveOrUpdate(member);
}
/**
* 获取会员基础档案
+ *
* @param userId
* @return
*/
@Override
- public MerMemberBasicFileVo getMerMemberBasicFile(Long userId){
+ public MerMemberBasicFileVo getMerMemberBasicFile(Long userId) {
MerMemberBasicFileVo merMemberBasicFileVo = new MerMemberBasicFileVo();
Member member = this.getByUserId(userId);
BeanUtils.copyProperties(member, merMemberBasicFileVo);
- merMemberBasicFileVo.setNickName(member.getNickName());
+ merMemberBasicFileVo.setRealName(member.getRealName());
merMemberBasicFileVo.setPhonenumber(member.getMobile());
merMemberBasicFileVo.setCreateTime(member.getCreateTime());
- List<MemberNurse> memberNurseList = memberNurseService.listByUserId(userId);
- List<String> valueList = memberNurseList.stream().map(k->k.getNurse()).collect(Collectors.toList());
- merMemberBasicFileVo.setMemberNurse(valueList);
+ /*List<MemberNurse> memberNurseList = memberNurseService.listByUserId(userId);
+ List<String> valueList = memberNurseList.stream().map(k -> k.getNurse()).collect(Collectors.toList());*/
+ String memberNurse = member.getMemberNurse();
+ if(StringUtils.isNotBlank(memberNurse)){
+ List<String> valueList = Arrays.asList(memberNurse.split(","));
+ merMemberBasicFileVo.setMemberNurse(valueList);
+ }
+ List<MemberArchiveVo> achiveList = memberArchiveService.listMerVoByUserId(userId);
+ merMemberBasicFileVo.setAchiveList(achiveList);
return merMemberBasicFileVo;
}
/**
* 获取会员标签
+ *
* @param userId
* @return
*/
@Override
- public List<MerMemberTagVo> getMerMemberTags(Long userId){
+ public List<MerMemberTagVo> getMerMemberTags(Long userId) {
Member member = this.getByUserId(userId);
String userTags = member.getUserTags();
String[] userTagsArr = null;
- if(StringUtils.isNotBlank(userTags)){
+ if (StringUtils.isNotBlank(userTags)) {
userTagsArr = userTags.split(",");
}
List<SysTag> sysTagsList = remoteConfigService.listSysTag(1).getData();
List<MerMemberTagVo> merMemberTagVoList = new ArrayList<>();
MerMemberTagVo merMemberTagVo;
String tagName;
- if(sysTagsList!=null&&!sysTagsList.isEmpty()){
- for(SysTag sysTag : sysTagsList){
+ if (sysTagsList != null && !sysTagsList.isEmpty()) {
+ for (SysTag sysTag : sysTagsList) {
merMemberTagVo = new MerMemberTagVo();
tagName = sysTag.getTagName();
merMemberTagVo.setTagName(tagName);
- if(userTagsArr!=null && ArrayUtils.contains(userTagsArr, tagName)){
+ if (userTagsArr != null && ArrayUtils.contains(userTagsArr, tagName)) {
merMemberTagVo.setSelectFlag(1);
- }else{
+ } else {
merMemberTagVo.setSelectFlag(0);
}
merMemberTagVoList.add(merMemberTagVo);
@@ -452,15 +603,16 @@
/**
* 编辑会员标签
+ *
* @param merMemberTagEditDto
*/
@Override
- public void editMerMemberTags(MerMemberTagEditDto merMemberTagEditDto){
+ public void editMerMemberTags(MerMemberTagEditDto merMemberTagEditDto) {
Member member = this.getByUserId(merMemberTagEditDto.getMemberUserId());
List<String> userTags = merMemberTagEditDto.getUserTags();
StringJoiner sj = new StringJoiner(",");
- if(userTags!=null&&!userTags.isEmpty()){
- for(String str : userTags){
+ if (userTags != null && !userTags.isEmpty()) {
+ for (String str : userTags) {
sj.add(str);
}
}
@@ -471,37 +623,52 @@
/**
* 添加会员
+ *
* @param merMemberAddDto
*/
@Override
- public void addMerMember(MerMemberAddDto merMemberAddDto){
- String phonenumber = merMemberAddDto.getPhonenumber();
- Member oldMember = this.getByMobile(phonenumber);
- if(oldMember!=null){
+ public Long addMerMember(MerMemberAddDto merMemberAddDto) {
+ String phoneNumber = merMemberAddDto.getPhonenumber();
+ Member oldMember = this.getByMobile(phoneNumber);
+ // Check if the member already exists
+ if (oldMember != null && oldMember.getBindingFlag() == 1) {
throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE);
}
- SysUser sysUser = sysUserService.getSysUserByMobile(phonenumber).getData();
- if(sysUser==null){
+ 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.getNickName());
+ sysUser.setNickName(merMemberAddDto.getRealName());
+ sysUser.setPhonenumber(merMemberAddDto.getPhonenumber());
sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
String password = "hongruitang";
sysUser.setPassword(SecurityUtils.encryptPassword(password));
- log.debug("sysUser"+sysUser.toString());
+ log.debug("sysUser" + sysUser.toString());
sysUser = sysUserService.registerUser(sysUser).getData();
+ // Create a new member
Member member = new Member();
String memberNo = createMemberNo();
member.setMemberNo(memberNo);
member.setMemberId(memberId);
member.setUserId(sysUser.getUserId());
member.setDelFlag(0);
- member.setNickName(merMemberAddDto.getNickName());
- member.setRealName(merMemberAddDto.getNickName());
+ member.setFrozenFlag(0);
+ member.setNickName(merMemberAddDto.getRealName());
+ member.setRealName(merMemberAddDto.getRealName());
member.setGender(merMemberAddDto.getGender());
- member.setMobile(phonenumber);
+ member.setLevel(merMemberAddDto.getLevel());
+ member.setMobile(phoneNumber);
member.setReferrer(merMemberAddDto.getReferrer());
member.setBirthday(merMemberAddDto.getBirthday());
member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
@@ -509,32 +676,60 @@
member.setWxUnionid(null);
member.setMiniOpenid(null);
member.setBindingFlag(1);
- member.setRelationShopId(merMemberAddDto.getShopId());
- member.setCustomerSource("商户添加");
+ 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());
- log.info("member-----------------"+member.toString());
+ //调理问题
+ List<String> memberNurse = merMemberAddDto.getMemberNurse();
+ if(memberNurse!=null&&!memberNurse.isEmpty()){
+ String memberNurseString = String.join(",", memberNurse);
+ member.setMemberNurse(memberNurseString);
+ }
+ // Save the member and initialize member total
this.saveOrUpdate(member);
initMemberTotal(memberId);
+ List<MemberArchiveVo> achiveList = merMemberAddDto.getAchiveList();
+ if(achiveList!=null&&!achiveList.isEmpty()){
+ SysUser finalSysUser = sysUser;
+ List<MemberArchive> memberArchiveList = achiveList.stream().map(memberArchiveVo -> {
+ MemberArchive memberArchive = new MemberArchive();
+ memberArchive.setDelFlag(0);
+ memberArchive.setUserId(finalSysUser.getUserId());
+ memberArchive.setFieldId(memberArchiveVo.getFieldId());
+ memberArchive.setFieldValue(memberArchiveVo.getFieldValue());
+ return memberArchive;
+ }
+ ).collect(Collectors.toList());
+ memberArchiveService.saveBatch(memberArchiveList);
+ }
+ }else{
+ throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE);
}
-
-
+ return sysUser.getUserId();
}
/**
* 编辑会员
+ *
* @param merMemberEditDto
*/
@Override
- public void editMerMember(MerMemberEditDto merMemberEditDto){
-
+ public void editMerMember(MerMemberEditDto merMemberEditDto) {
+ // 获取用户信息
Member member = this.getByUserId(merMemberEditDto.getEditUserId());
- if(!member.getMobile().equals(merMemberEditDto.getPhonenumber())){
+ // 检查手机号是否已经存在
+ if (!member.getMobile().equals(merMemberEditDto.getPhonenumber())) {
Member memberOld = getByMobile(merMemberEditDto.getPhonenumber());
- if(memberOld!=null){
+ if (memberOld != null) {
throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE);
}
}
- member.setRealName(merMemberEditDto.getNickName());
+ // 更新用户信息
+ member.setRealName(merMemberEditDto.getRealName());
member.setMobile(merMemberEditDto.getPhonenumber());
member.setGender(merMemberEditDto.getGender());
member.setReferrer(merMemberEditDto.getReferrer());
@@ -543,21 +738,42 @@
member.setBirthday(merMemberEditDto.getBirthday());
member.setUpdateUserId(merMemberEditDto.getUserId());
member.setUpdateTime(new Date());
- log.info("member-----------------"+member.toString());
+ List<String> memberNurse = merMemberEditDto.getMemberNurse();
+ if(memberNurse!=null&&!memberNurse.isEmpty()){
+ String memberNurseString = String.join(",", memberNurse);
+ member.setMemberNurse(memberNurseString);
+ }
this.saveOrUpdate(member);
+ // 更新用户手机号
SysUser sysUser = new SysUser();
sysUser.setUserId(merMemberEditDto.getEditUserId());
sysUser.setPhonenumber(merMemberEditDto.getPhonenumber());
sysUserService.updateUserMobile(sysUser);
+ // 删除用户的档案信息
+ memberArchiveService.deleteByUserId(sysUser.getUserId());
+ // 添加用户的档案信息
+ List<MemberArchiveVo> achiveList = merMemberEditDto.getAchiveList();
+ if (achiveList != null && !achiveList.isEmpty()) {
+ // 构造用户档案列表
+ List<MemberArchive> memberArchiveList = achiveList.stream().map(memberArchiveVo -> {
+ MemberArchive memberArchive = new MemberArchive();
+ memberArchive.setDelFlag(0);
+ memberArchive.setUserId(sysUser.getUserId());
+ memberArchive.setFieldId(memberArchiveVo.getFieldId());
+ memberArchive.setFieldValue(memberArchiveVo.getFieldValue());
+ return memberArchive;
+ }).collect(Collectors.toList());
+ // 批量保存用户档案信息
+ memberArchiveService.saveBatch(memberArchiveList);
+ }
}
/**
- *
* @param mobile
* @return
*/
@Override
- public Member getByMobile(String mobile){
+ public Member getByMobile(String mobile) {
LambdaQueryWrapper<Member> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(Member::getDelFlag, 0).eq(Member::getMobile, mobile);
Member member = this.getOne(queryWrapper);
@@ -566,28 +782,56 @@
/**
* 更新用户商品类型
+ *
* @param appMemberGoodsTypeDto
*/
@Override
- public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto){
+ public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto) {
+ // 根据用户ID获取会员信息
Member member = this.getByUserId(appMemberGoodsTypeDto.getUserId());
+ // 获取商品类型集合和商品护理集合
HashSet<String> goodsTypeSet = appMemberGoodsTypeDto.getGoodsTypeSet();
- if(member!=null){
- String goodsType = member.getGoodsType();
+ HashSet<String> goodsNurseSet = appMemberGoodsTypeDto.getGoodsNurseSet();
+ // 如果会员存在
+ if (member != null) {
+ // 标识是否有变化
Boolean change = false;
- for(String str : goodsTypeSet){
- if(goodsType != null){
- if(!goodsType.contains(str)){
- goodsType = goodsType + "," + str;
+ // 更新商品类型
+ if (goodsTypeSet != null && goodsTypeSet.size() > 0) {
+ String goodsType = member.getGoodsType();
+ HashSet<String> goodsTypeOldSet = new HashSet<>();
+ // 如果商品类型不为空
+ if (StringUtils.isNotBlank(goodsType)) {
+ goodsTypeOldSet = new HashSet<>(Arrays.asList(goodsType.split(",")));
+ // 如果商品类型集合相等
+ if (!goodsTypeSet.equals(goodsTypeOldSet)) {
change = true;
}
- }else{
- goodsType = str;
+ } else {
change = true;
}
+ goodsTypeOldSet.addAll(goodsTypeSet);
+ member.setGoodsType(String.join(",", goodsTypeOldSet));
}
- if(change){
- member.setGoodsType(goodsType);
+ // 更新商品护理
+ if (goodsNurseSet != null && goodsNurseSet.size() > 0) {
+ String memberNurse = member.getMemberNurse();
+ HashSet<String> memberNurseOldSet = new HashSet<>();
+ // 如果会员护理不为空
+ if (StringUtils.isNotBlank(memberNurse)) {
+ memberNurseOldSet = new HashSet<>(Arrays.asList(memberNurse.split(",")));
+ // 如果商品护理集合相等
+ if (!goodsNurseSet.equals(memberNurseOldSet)) {
+ change = true;
+ }
+ } else {
+ change = true;
+ }
+ memberNurseOldSet.addAll(goodsNurseSet);
+ member.setMemberNurse(String.join(",", memberNurseOldSet));
+ }
+ // 如果有变化,则保存或更新会员信息
+ if (change) {
this.saveOrUpdate(member);
}
}
@@ -596,15 +840,16 @@
/**
* 订单创建新用户
+ *
* @param member
*/
@Override
- public void createNewMember(Member member){
+ public void createNewMember(Member member) {
String memberNo = createMemberNo();
member.setMemberNo(memberNo);
member.setDelFlag(0);
+ member.setFrozenFlag(0);
member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
- member.setBindingFlag(0);
member.setCreateTime(new Date());
member.setCustomerSource("商户订单添加");
this.saveOrUpdate(member);
@@ -613,10 +858,11 @@
/**
* 生成会员统计
+ *
* @param memberId
* @return
*/
- private void initMemberTotal(String memberId){
+ private void initMemberTotal(String memberId) {
MemberTotal memberTotal = new MemberTotal();
memberTotal.setMemberId(memberId);
memberTotal.setDelFlag(0);
@@ -631,73 +877,142 @@
memberTotal.setUseableServiceCount(0);
memberTotal.setTotalActivityCount(0);
memberTotal.setTotalCycleOrder(0);
- memberTotal.setToltaExperienceOrder(0);
+ memberTotal.setTotalExperienceOrder(0);
memberTotal.setTotalServiceOrder(0);
memberTotal.setTotalGoodsOrder(0);
+ memberTotal.setShareFlag(0);
+ memberTotal.setPlSuggestFlag(0);
+ memberTotal.setShopSuggestFlag(0);
+ memberTotal.setSignFlag(0);
+ memberTotal.setBuyFlag(0);
+ memberTotal.setTotalConsumeCount(0);
memberTotalService.saveOrUpdate(memberTotal);
}
/**
* 生成会员编号
+ *
* @return
*/
- private String createMemberNo(){
+ private String createMemberNo() {
int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>());
- String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal+1));
+ String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal + 1));
return memberNo;
}
/**
* 平台分页获取会员列表
+ *
* @param page
* @param merMemberPageDto
* @return
*/
@Override
- public List<MgtMemberPageVo> pageMgtMember(Page page,MgtMemberPageDto merMemberPageDto){
+ public List<MgtMemberPageVo> pageMgtMember(Page page, MgtMemberPageDto merMemberPageDto) {
+
List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
Date nowDay = new Date();
- if(merMemberPageDto.getActivenessId()!=null){
+ if (merMemberPageDto.getActivenessId() != null) {
//处理活跃度筛选
activenessList.stream()
.filter(activeness -> activeness.getActivenessId().equals(merMemberPageDto.getActivenessId()))
.findFirst()
.ifPresent(activeness -> {
- merMemberPageDto.setActStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getEndDay())));
- merMemberPageDto.setActEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getStartDay())));
+ merMemberPageDto.setActStartDate(DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay())));
+ merMemberPageDto.setActEndDate(DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay())));
});
}
//处理标签为正则表达
- if(StringUtils.isNotBlank(merMemberPageDto.getMemberTags())){
- merMemberPageDto.setMemberTags(merMemberPageDto.getMemberTags().replace(",","|"));
+ if (StringUtils.isNotBlank(merMemberPageDto.getMemberTags())) {
+ merMemberPageDto.setMemberTags(merMemberPageDto.getMemberTags().replace(",", "|"));
+ }
+ //处理生日
+ if(merMemberPageDto.getStartAge()!=null){
+ LocalDate currentDate = LocalDate.now();
+ LocalDate endBirthday = currentDate.minusYears(merMemberPageDto.getStartAge());
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ merMemberPageDto.setEndBirthday(endBirthday.format(formatter));
+ }
+ if(merMemberPageDto.getEndAge()!=null){
+ LocalDate currentDate = LocalDate.now();
+ LocalDate startBirthday = currentDate.minusYears(merMemberPageDto.getEndAge()+1);
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ merMemberPageDto.setStartBirthday(startBirthday.format(formatter));
+ }
+ // 获取当前登陆人的可视权限
+ 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);
+ List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto,scope);
//处理活跃度返回
- if(memberPageVoList!=null&&!memberPageVoList.isEmpty()){
- if(activenessList!=null&&!activenessList.isEmpty()){
+ if (memberPageVoList != null && !memberPageVoList.isEmpty()) {
+ if (activenessList != null && !activenessList.isEmpty()) {
//生成活跃度时间段列表
List<MgtActivenessJudgeVo> mgtActivenessJudgeVoList = new ArrayList<>();
MgtActivenessJudgeVo mgtActivenessJudgeVo;
- for(Activeness activeness : activenessList){
+ for (Activeness activeness : activenessList) {
mgtActivenessJudgeVo = new MgtActivenessJudgeVo();
- mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(),activeness.getEndDay()));
- mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(),activeness.getStartDay()-1));
+ mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(), -activeness.getEndDay()));
+ mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(), -activeness.getStartDay()));
mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName());
}
//活跃度赋值
Date lastPayTime;
- for(MgtMemberPageVo mgtMemberPageVo : memberPageVoList){
+ for (MgtMemberPageVo mgtMemberPageVo : memberPageVoList) {
+ 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){
+ if (lastPayTime != null) {
+ for (MgtActivenessJudgeVo entity : mgtActivenessJudgeVoList) {
+ if (lastPayTime.compareTo(entity.getStartDay()) >= 0 && lastPayTime.compareTo(entity.getEndDay()) <= 0) {
sj.add(entity.getActivenessName());
}
}
- if(sj.length()>0){
+ if (sj.length() > 0) {
mgtMemberPageVo.setActiveness(sj.toString());
}
}
@@ -710,22 +1025,26 @@
/**
* 修改会员关联商户
+ *
* @param mgtMemberRelEditDto
*/
@Override
- public void editMemberRelationShop(MgtMemberRelEditDto mgtMemberRelEditDto){
- if(StringUtils.isNotBlank(mgtMemberRelEditDto.getMemberUserIds())){
+ public void editMemberRelationShop(MgtMemberRelEditDto mgtMemberRelEditDto) {
+ if (StringUtils.isNotBlank(mgtMemberRelEditDto.getMemberUserIds())) {
Shop shop = shopService.getShop(mgtMemberRelEditDto.getShopId()).getData();
String memberUserIds = mgtMemberRelEditDto.getMemberUserIds();
String[] memberUserIdArr = memberUserIds.split(",");
- for(String str : memberUserIdArr){
+ for (String str : memberUserIdArr) {
Member member = this.getByUserId(Long.valueOf(str));
member.setRelationShopId(shop.getShopId());
member.setRelationShopName(shop.getShopName());
member.setBindingFlag(1);
+ member.setBindingType(7);
+ member.setBindingTime(new Date());
member.setUpdateTime(new Date());
member.setUpdateUserId(mgtMemberRelEditDto.getUserId());
this.saveOrUpdate(member);
+ memberMapper.updateById(member);
}
}
}
@@ -733,34 +1052,39 @@
/**
* 删除会员关联商户
+ *
* @param mgtMemberRelDelDto
*/
@Override
- public void deleteMemberRelationShop(MgtMemberRelDelDto mgtMemberRelDelDto){
- if(StringUtils.isNotBlank(mgtMemberRelDelDto.getMemberUserIds())) {
+ public void deleteMemberRelationShop(MgtMemberRelDelDto mgtMemberRelDelDto) {
+ if (StringUtils.isNotBlank(mgtMemberRelDelDto.getMemberUserIds())) {
String memberUserIds = mgtMemberRelDelDto.getMemberUserIds();
String[] memberUserIdArr = memberUserIds.split(",");
- for(String str : memberUserIdArr) {
- Member member = this.getByUserId(Long.valueOf(str));
- member.setBindingFlag(0);
- member.setUpdateTime(new Date());
- member.setUpdateUserId(mgtMemberRelDelDto.getUserId());
- this.saveOrUpdate(member);
+ for (String str : memberUserIdArr) {
+ LambdaUpdateWrapper<Member> updateWrapper = Wrappers.lambdaUpdate();
+ updateWrapper.eq(Member::getUserId, str)
+ .set(Member::getBindingFlag, 0)
+ .set(Member::getRelationShopId,null)
+ .set(Member::getRelationShopName,null)
+ .set(Member::getUpdateUserId,mgtMemberRelDelDto.getUserId())
+ .set(Member::getUpdateTime,new Date());
+ this.update(updateWrapper);
}
}
}
/**
* 修改会员积分
+ *
* @param mgtMemberIntEditDto
*/
@Override
- public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto){
- if(StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) {
+ public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto) {
+ if (StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) {
String memberUserIds = mgtMemberIntEditDto.getMemberUserIds();
String[] memberUserIdArr = memberUserIds.split(",");
MemberIntegralChangeDto memberIntegralChangeDto;
- for(String str : memberUserIdArr) {
+ for (String str : memberUserIdArr) {
memberIntegralChangeDto = new MemberIntegralChangeDto();
Member member = this.getByUserId(Long.valueOf(str));
memberIntegralChangeDto.setUserId(Long.valueOf(str));
@@ -775,13 +1099,14 @@
}
-
/**
* 会员积分变动
+ *
* @param memberIntegralChangeDto
*/
@Override
- public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto){
+ public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto) {
+ log.info("会员积分变动---"+memberIntegralChangeDto.toString());
MemberTotal memberTotal = memberTotalService.getById(memberIntegralChangeDto.getMemberId());
Integer recordType = memberIntegralChangeDto.getRecordType();
Integer changeType = memberIntegralChangeDto.getChangeType();
@@ -790,15 +1115,15 @@
Integer usedIntegral = memberTotal.getUsedIntegral();
Integer useableIntegral = memberTotal.getUseableIntegral();
//变动统计
- if(changeType==1){
+ if (changeType == 1) {
totalIntegral = totalIntegral + integer;
useableIntegral = useableIntegral + integer;
memberTotal.setTotalIntegral(totalIntegral);
memberTotal.setUseableIntegral(useableIntegral);
- }else if(changeType==2){
+ } else if (changeType == 2) {
usedIntegral = usedIntegral + integer;
useableIntegral = useableIntegral - integer;
- if(useableIntegral<0){
+ if (useableIntegral < 0) {
throw new ServiceException(AppErrorConstant.INTEGRAL_USE_FAILED);
}
memberTotal.setTotalIntegral(totalIntegral);
@@ -811,16 +1136,16 @@
integralRecord.setDelFlag(0);
integralRecord.setUserId(memberIntegralChangeDto.getUserId());
integralRecord.setChangeType(recordType);
- if(changeType==1){
+ if (changeType == 1) {
integralRecord.setChangeIntegral(integer);
- }else if(changeType==2){
- integralRecord.setChangeIntegral( 0-integer);
+ } else if (changeType == 2) {
+ integralRecord.setChangeIntegral(0 - integer);
}
integralRecord.setSurpIntegral(useableIntegral);
integralRecord.setCreateTime(new Date());
integralRecord.setOrderId(memberIntegralChangeDto.getOrderId());
integralRecord.setOrderNo(memberIntegralChangeDto.getOrderNo());
- switch (recordType){
+ switch (recordType) {
case 1:
integralRecord.setChangeReason("购物赠送");
break;
@@ -838,16 +1163,17 @@
/**
* 平台获取会员信息
+ *
* @param userId
* @return
*/
@Override
- public MgtMemberGetVo getMgtMemberInfo(Long userId){
+ public MgtMemberGetVo getMgtMemberInfo(Long userId) {
MgtMemberGetVo mgtMemberGetVo = new MgtMemberGetVo();
Member member = this.getByUserId(userId);
MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
- List<MemberArchiveVo> memberArchiveVoList = memberArchiveService.listVoByUserId(member.getUserId());
- if(memberArchiveVoList!=null&&!memberArchiveVoList.isEmpty()){
+ List<MemberArchiveVo> memberArchiveVoList = memberArchiveService.listMgtVoByUserId(member.getUserId());
+ if (memberArchiveVoList != null && !memberArchiveVoList.isEmpty()) {
//去掉未完善信息
memberArchiveVoList.removeIf(o -> Objects.isNull(o.getFieldValue()));
}
@@ -856,14 +1182,31 @@
mgtMemberGetVo.setMemberNo(member.getMemberNo());
mgtMemberGetVo.setRealName(member.getRealName());
mgtMemberGetVo.setNickName(member.getNickName());
+ mgtMemberGetVo.setAvatar(member.getAvatar());
mgtMemberGetVo.setMobile(member.getMobile());
- mgtMemberGetVo.setGender(member.getGender()==0 ? "男" : member.getGender()==1 ? "女" : null);
+ if(member.getGender()!=null){
+ if (member.getGender() == 0) {
+ mgtMemberGetVo.setGender("男");
+ } else if (member.getGender() == 1) {
+ mgtMemberGetVo.setGender("女");
+ }
+ }else {
+ mgtMemberGetVo.setGender("未知");
+ }
mgtMemberGetVo.setBirthday(member.getBirthday());
mgtMemberGetVo.setBelongDistrict(member.getBelongDistrict());
mgtMemberGetVo.setCreateTime(member.getCreateTime());
mgtMemberGetVo.setLastPayTime(memberTotal.getLastPayTime());
mgtMemberGetVo.setGoodsType(member.getGoodsType());
- mgtMemberGetVo.setRelationShopName(member.getRelationShopName());
+ if(member.getBindingFlag()==1){
+ 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());
@@ -875,54 +1218,61 @@
}
/**
- * @description 删除标签
- * @author jqs
- * @date 2023/6/8 15:18
* @param memberTag
- * @return void
+ * @return void
+ * @description 删除标签
+ * @author jqs
+ * @date 2023/6/8 15:18
*/
@Override
- public void deleteMemberTag(String memberTag){
+ public void deleteMemberTag(String memberTag) {
memberMapper.deleteMemberTag(memberTag);
}
/**
- * @description 通过发送类型获取userId
- * @author jqs
- * @date 2023/6/13 17:53
* @param sendType
- * @return List<Long>
+ * @return List<Long>
+ * @description 通过发送类型获取userId
+ * @author jqs
+ * @date 2023/6/13 17:53
*/
@Override
- public List<Long> listIdBySendType(Integer sendType){
+ public List<Long> listIdBySendType(Integer sendType,Long shopId) {
//1.手动领取2.全部用户3.会员用户4非会员用户5自定义
- return memberMapper.listIdBySendType(sendType);
+ return memberMapper.listIdBySendType(sendType,shopId);
}
+
+ public List<Long> listIdBySendType2(Long shopId) {
+ //1.手动领取2.全部用户3.会员用户4非会员用户5自定义
+ return memberMapper.listIdBySendType2(shopId);
+ }
+
+
/**
- * @description 通过ids获取用户简易返回
- * @author jqs
- * @date 2023/6/16 11:06
* @param userIds
- * @return List<MgtSimpleMemberVo>
+ * @return List<MgtSimpleMemberVo>
+ * @description 通过ids获取用户简易返回
+ * @author jqs
+ * @date 2023/6/16 11:06
*/
@Override
- public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds){
+ public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds) {
return memberMapper.listSimpleVoByIds(userIds);
}
/**
- * @description
- * @author jqs
- * @date 2023/6/16 12:41
* @param mgtUserIdByKeywordDto
- * @return MgtUserIdByKeywordVo
+ * @return MgtUserIdByKeywordVo
+ * @description
+ * @author jqs
+ * @date 2023/6/16 12:41
*/
@Override
- public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto){
+ public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto) {
MgtUserIdByKeywordVo mgtUserIdByKeywordVo = new MgtUserIdByKeywordVo();
List<Long> userIdList = memberMapper.getUserIdByKeyword(mgtUserIdByKeywordDto);
- if(userIdList!=null&&!userIdList.isEmpty()){
+ if (userIdList != null && !userIdList.isEmpty()) {
String userIdStr = userIdList.stream()
.map(Object::toString)
.collect(Collectors.joining(","));
@@ -932,114 +1282,159 @@
}
/**
- * @description boardMemberTotal
* @param
* @return MgtBulletinBoardVo
+ * @description boardMemberTotal
* @author jqs34
* @date 2023/6/18 16:45
*/
@Override
- public MgtBulletinBoardVo boardMemberTotal(){
+ public MgtBulletinBoardVo boardMemberTotal(List<Long> shopIds) {
MgtBulletinBoardVo mgtBulletinBoardVo = new MgtBulletinBoardVo();
- mgtBulletinBoardVo.setMemberTotal(memberMapper.memberTotal());
- mgtBulletinBoardVo.setMemberToday(memberMapper.memberToday());
+ mgtBulletinBoardVo.setMemberTotal(memberMapper.memberTotal(shopIds));
+ mgtBulletinBoardVo.setMemberToday(memberMapper.memberToday(shopIds));
return mgtBulletinBoardVo;
}
/**
- * @description 会员人数统计
- * @author jqs
- * @date 2023/6/19 15:26
* @param
- * @return MgtTotalMemberTotalVo
+ * @return MgtTotalMemberTotalVo
+ * @description 会员人数统计
+ * @author jqs
+ * @date 2023/6/19 15:26
*/
@Override
- public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto){
+ public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto) {
Date nowDay = DateUtils.getNowDate();
+ 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 mgtTotalMemberTotalVo = memberMapper.getTotalMemberTotal(mgtBaseShopDto);
+ 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<MgtMapTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
+ List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
- String[] nurseKey = new String[nurseTotalVos.size()];
- Integer[] nurseValue = new Integer[nurseTotalVos.size()];
- // 遍历不同护理类型的会员数列表,设置护理类型数组和对应的会员数数组
- for (int i = 0; i < nurseTotalVos.size(); i++) {
- nurseKey[i] = nurseTotalVos.get(i).getMapKey();
- nurseValue[i] = nurseTotalVos.get(i).getMapValue();
- }
- mgtTotalMemberTotalVo.setNurseKey(nurseKey);
- mgtTotalMemberTotalVo.setNurseValue(nurseValue);
+ nurseTotalVos = listRemoveNull(nurseTotalVos);
+ mgtTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos);
+ }
+ //获取不同等级的会员数
+ List<MgtMapIntTotalVo> memberLevelTotalVos = memberMapper.getTotalMemberTotalLevel(mgtBaseShopDto);
+ if (memberLevelTotalVos != null && memberLevelTotalVos.size() > 0) {
+ memberLevelTotalVos = listRemoveNull(memberLevelTotalVos);
+ mgtTotalMemberTotalVo.setMemberLevelTotalVos(memberLevelTotalVos);
}
// 获取不同商品类型的会员数
- List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto);
+ List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto);
if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
- String[] goodsTypeKey = new String[goodsTypeTotalVos.size()];
- Integer[] goodsTypeValue = new Integer[goodsTypeTotalVos.size()];
- // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
- for (int i = 0; i < goodsTypeTotalVos.size(); i++) {
- goodsTypeKey[i] = goodsTypeTotalVos.get(i).getMapKey();
- goodsTypeValue[i] = goodsTypeTotalVos.get(i).getMapValue();
- }
- mgtTotalMemberTotalVo.setGoodsTypeKey(goodsTypeKey);
- mgtTotalMemberTotalVo.setGoodsTypeValue(goodsTypeValue);
+ goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos);
+ mgtTotalMemberTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
}
// 获取不同活跃度的会员数
List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
if (activenessList != null && !activenessList.isEmpty()) {
- String[] activenessKey = new String[activenessList.size()];
- Integer[] activenessValue = new Integer[activenessList.size()];
Activeness activeness;
String actStartDate;
String actEndDate;
Integer count;
+ List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>();
+ MgtMapIntTotalVo MgtMapIntTotalVo;
// 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
for (int i = 0; i < activenessList.size(); i++) {
activeness = activenessList.get(i);
- actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay()));
- actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay()));
+ actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getEndDay()));
+ actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, -activeness.getStartDay()));
count = memberMapper.getTotalMemberTotalActiveness(shopId, actStartDate, actEndDate);
- activenessKey[i] = activeness.getActivenessName();
- activenessValue[i] = count;
+ MgtMapIntTotalVo = new MgtMapIntTotalVo();
+ MgtMapIntTotalVo.setMapKey(activeness.getActivenessName());
+ MgtMapIntTotalVo.setMapValue(count);
+ MgtMapIntTotalVoList.add(MgtMapIntTotalVo);
}
- mgtTotalMemberTotalVo.setActivenessKey(activenessKey);
- mgtTotalMemberTotalVo.setActivenessValue(activenessValue);
+ mgtTotalMemberTotalVo.setActivenessList(MgtMapIntTotalVoList);
}
//获取会员消费排名
- List<MgtMapTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
+ List<MgtMapIntTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
if (memberPayList != null && memberPayList.size() > 0) {
- String[] memberPayKey = new String[memberPayList.size()];
- Integer[] memberPayValue = new Integer[memberPayList.size()];
- // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
- for (int i = 0; i < memberPayList.size(); i++) {
- memberPayKey[i] = memberPayList.get(i).getMapKey();
- memberPayValue[i] = memberPayList.get(i).getMapValue();
- }
- mgtTotalMemberTotalVo.setOrderRankKey(memberPayKey);
- mgtTotalMemberTotalVo.setOrderRankValue(memberPayValue);
+ //memberPayList = listRemoveNull(memberPayList);
+ mgtTotalMemberTotalVo.setMemberPayList(memberPayList);
}
//获取来源渠道排名
- List<MgtMapTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto);
+ List<MgtMapIntTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto);
if (customerSourceList != null && customerSourceList.size() > 0) {
- String[] customerSourceKey = new String[customerSourceList.size()];
- Integer[] customerSourceValue = new Integer[customerSourceList.size()];
- // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
- for (int i = 0; i < customerSourceList.size(); i++) {
- customerSourceKey[i] = customerSourceList.get(i).getMapKey();
- customerSourceValue[i] = customerSourceList.get(i).getMapValue();
- }
- mgtTotalMemberTotalVo.setCustomerSourceKey(customerSourceKey);
- mgtTotalMemberTotalVo.setCustomerSourceValue(customerSourceValue);
+ customerSourceList = listRemoveNull(customerSourceList);
+ mgtTotalMemberTotalVo.setCustomerSourceList(customerSourceList);
}
// 返回总会员数和不同类型会员数的统计结果
return mgtTotalMemberTotalVo;
@@ -1047,17 +1442,829 @@
/**
- * @description
- * @author jqs
- * @date 2023/6/20 11:42
* @param mgtActivityAgeDto
- * @return List<Long>
+ * @return List<Long>
+ * @description
+ * @author jqs
+ * @date 2023/6/20 11:42
*/
@Override
- public List<Long> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto){
+ public List<Long> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto) {
List<Long> userIdList = memberMapper.listUserIdByAge(mgtActivityAgeDto);
return userIdList;
}
+ /**
+ * @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);
+ }
+ }
+ }
+ }
}
--
Gitblit v1.7.1