| | |
| | | package com.ruoyi.member.service.impl.member; |
| | | import com.google.common.collect.Lists; |
| | | import java.util.Date; |
| | | |
| | | 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.Wrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.bean.BeanUtils; |
| | | import com.ruoyi.common.core.utils.uuid.IdUtils; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.common.security.utils.CodeFactoryUtil; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.member.domain.dto.*; |
| | | import com.ruoyi.member.domain.pojo.member.IntegralRecord; |
| | |
| | | import com.ruoyi.member.domain.vo.*; |
| | | import com.ruoyi.member.mapper.member.MemberMapper; |
| | | import com.ruoyi.member.service.member.*; |
| | | import com.ruoyi.member.util.CodeFactoryUtil; |
| | | import com.ruoyi.member.util.HttpUtils; |
| | | import com.ruoyi.system.api.domain.dto.AppMiniRegisterDto; |
| | | import com.ruoyi.system.api.domain.poji.config.Activeness; |
| | | import com.ruoyi.system.api.domain.vo.AppMiniRegisterVo; |
| | | import com.ruoyi.system.api.service.RemoteConfigService; |
| | | import com.ruoyi.system.api.service.RemoteOrderService; |
| | | import com.ruoyi.system.api.service.RemoteShopService; |
| | | import com.ruoyi.system.api.service.RemoteUserService; |
| | | import com.ruoyi.system.api.constant.AppErrorConstant; |
| | | import com.ruoyi.system.api.constant.SecurityConstant; |
| | | import com.ruoyi.system.api.domain.dto.AppEditUserDto; |
| | | import com.ruoyi.system.api.domain.dto.AppMemberBindingDto; |
| | | import com.ruoyi.system.api.domain.dto.AppMemberGoodsTypeDto; |
| | | import com.ruoyi.system.api.domain.dto.*; |
| | | import com.ruoyi.system.api.domain.poji.config.Activeness; |
| | | import com.ruoyi.system.api.domain.poji.config.SysTag; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.domain.poji.shop.Shop; |
| | | import com.ruoyi.system.api.domain.poji.sys.SysUser; |
| | | import com.ruoyi.system.api.domain.vo.AppOrderTotalVo; |
| | | import com.ruoyi.system.api.domain.vo.*; |
| | | import com.ruoyi.system.api.model.AppMiniLoginDto; |
| | | import com.ruoyi.system.api.model.AppMiniLoginVo; |
| | | import io.swagger.models.auth.In; |
| | | import com.ruoyi.system.api.service.RemoteConfigService; |
| | | import com.ruoyi.system.api.service.RemoteOrderService; |
| | | import com.ruoyi.system.api.service.RemoteShopService; |
| | | import com.ruoyi.system.api.service.RemoteUserService; |
| | | import lombok.extern.log4j.Log4j2; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import org.apache.commons.lang3.ArrayUtils; |
| | | import org.apache.http.HttpResponse; |
| | | import org.apache.http.util.EntityUtils; |
| | | import org.springframework.data.redis.core.StringRedisTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | @Resource |
| | | private MemberArchiveService memberArchiveService; |
| | | |
| | | @Resource |
| | | private RemoteShopService remoteShopService; |
| | | |
| | | @Resource |
| | | private RemoteOrderService remoteOrderService; |
| | | |
| | | /** |
| | | * @description: TODO |
| | |
| | | @Override |
| | | public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto){ |
| | | Member member = this.getByUserId(appMemberBindingDto.getUserId()); |
| | | if(member.getBindingFlag()==0){ |
| | | member.setBindingTime(new Date()); |
| | | } |
| | | member.setBindingFlag(appMemberBindingDto.getBindingFlag()); |
| | | member.setRelationShopId(appMemberBindingDto.getShopId()); |
| | | member.setRelationShopName(appMemberBindingDto.getShopName()); |
| | |
| | | member.setWxUnionid(null); |
| | | member.setMiniOpenid(null); |
| | | member.setBindingFlag(1); |
| | | member.setRelationShopId(merMemberAddDto.getShopId()); |
| | | member.setBindingTime(new Date()); |
| | | Shop shop = remoteShopService.getShop(merMemberAddDto.getShopId()).getData(); |
| | | member.setRelationShopName(shop.getShopName()); |
| | | member.setCustomerSource("商户添加"); |
| | | member.setCreateTime(new Date()); |
| | | log.info("member-----------------"+member.toString()); |
| | |
| | | * @return |
| | | */ |
| | | private String createMemberNo(){ |
| | | int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>().eq(Member::getDelFlag, 0)); |
| | | int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>()); |
| | | String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal+1)); |
| | | return memberNo; |
| | | } |
| | |
| | | @Override |
| | | public List<MgtMemberPageVo> pageMgtMember(Page page,MgtMemberPageDto merMemberPageDto){ |
| | | List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); |
| | | Date nowDay = DateUtils.getNowDate(); |
| | | //处理活跃度筛选 |
| | | if(activenessList!=null&&!activenessList.isEmpty()){ |
| | | for(Activeness activeness : activenessList){ |
| | | if(activeness.getActivenessId().equals(merMemberPageDto.getActivenessId())){ |
| | | merMemberPageDto.setActStartDate(DateUtils.addDays(nowDay,activeness.getEndDay())); |
| | | merMemberPageDto.setActEndDate(DateUtils.addDays(nowDay,activeness.getStartDay())); |
| | | } |
| | | } |
| | | Date nowDay = new Date(); |
| | | if(merMemberPageDto.getActivenessId()!=null){ |
| | | //处理活跃度筛选 |
| | | activenessList.stream() |
| | | .filter(activeness -> activeness.getActivenessId().equals(merMemberPageDto.getActivenessId())) |
| | | .findFirst() |
| | | .ifPresent(activeness -> { |
| | | merMemberPageDto.setActStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getEndDay()))); |
| | | merMemberPageDto.setActEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getStartDay()))); |
| | | }); |
| | | } |
| | | //处理标签为正则表达 |
| | | if(StringUtils.isNotBlank(merMemberPageDto.getMemberTags())){ |
| | | merMemberPageDto.setMemberTags(merMemberPageDto.getMemberTags().replace(",","|")); |
| | | } |
| | | //查询获取结果列表 |
| | | List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto); |
| | |
| | | */ |
| | | @Override |
| | | public void editMemberRelationShop(MgtMemberRelEditDto mgtMemberRelEditDto){ |
| | | Member member = this.getByUserId(mgtMemberRelEditDto.getMemberUserId()); |
| | | Shop shop = shopService.getShop(mgtMemberRelEditDto.getShopId()).getData(); |
| | | member.setRelationShopId(shop.getShopId()); |
| | | member.setRelationShopName(shop.getShopName()); |
| | | member.setBindingFlag(1); |
| | | member.setUpdateTime(new Date()); |
| | | member.setUpdateUserId(mgtMemberRelEditDto.getUserId()); |
| | | this.saveOrUpdate(member); |
| | | if(StringUtils.isNotBlank(mgtMemberRelEditDto.getMemberUserIds())){ |
| | | Shop shop = shopService.getShop(mgtMemberRelEditDto.getShopId()).getData(); |
| | | String memberUserIds = mgtMemberRelEditDto.getMemberUserIds(); |
| | | String[] memberUserIdArr = memberUserIds.split(","); |
| | | for(String str : memberUserIdArr){ |
| | | Member member = this.getByUserId(Long.valueOf(str)); |
| | | member.setRelationShopId(shop.getShopId()); |
| | | member.setRelationShopName(shop.getShopName()); |
| | | member.setBindingFlag(1); |
| | | member.setBindingTime(new Date()); |
| | | member.setUpdateTime(new Date()); |
| | | member.setUpdateUserId(mgtMemberRelEditDto.getUserId()); |
| | | this.saveOrUpdate(member); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public void deleteMemberRelationShop(MgtMemberRelDelDto mgtMemberRelDelDto){ |
| | | Member member = this.getById(mgtMemberRelDelDto.getMemberUserId()); |
| | | member.setBindingFlag(0); |
| | | member.setUpdateTime(new Date()); |
| | | member.setUpdateUserId(mgtMemberRelDelDto.getUserId()); |
| | | this.saveOrUpdate(member); |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto){ |
| | | MemberIntegralChangeDto memberIntegralChangeDto = new MemberIntegralChangeDto(); |
| | | Member member = this.getByUserId(mgtMemberIntEditDto.getMemberUserId()); |
| | | memberIntegralChangeDto.setMemberId(member.getMemberId()); |
| | | memberIntegralChangeDto.setChangeType(1); |
| | | memberIntegralChangeDto.setRecordType(3); |
| | | memberIntegralChangeDto.setIntegral(mgtMemberIntEditDto.getIntegral()); |
| | | //调用积分变动 |
| | | memberIntegralChange(memberIntegralChangeDto); |
| | | if(StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) { |
| | | String memberUserIds = mgtMemberIntEditDto.getMemberUserIds(); |
| | | String[] memberUserIdArr = memberUserIds.split(","); |
| | | MemberIntegralChangeDto memberIntegralChangeDto; |
| | | for(String str : memberUserIdArr) { |
| | | memberIntegralChangeDto = new MemberIntegralChangeDto(); |
| | | Member member = this.getByUserId(Long.valueOf(str)); |
| | | memberIntegralChangeDto.setUserId(Long.valueOf(str)); |
| | | memberIntegralChangeDto.setMemberId(member.getMemberId()); |
| | | memberIntegralChangeDto.setChangeType(1); |
| | | memberIntegralChangeDto.setRecordType(3); |
| | | memberIntegralChangeDto.setIntegral(mgtMemberIntEditDto.getIntegral()); |
| | | //调用积分变动 |
| | | memberIntegralChange(memberIntegralChangeDto); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | //记录变动 |
| | | IntegralRecord integralRecord = new IntegralRecord(); |
| | | integralRecord.setDelFlag(0); |
| | | integralRecord.setUserId(memberIntegralChangeDto.getUserId()); |
| | | integralRecord.setChangeType(recordType); |
| | | if(changeType==1){ |
| | | integralRecord.setChangeIntegral(integer); |
| | |
| | | mgtMemberGetVo.setMemberTags(member.getUserTags()); |
| | | return mgtMemberGetVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 删除标签 |
| | | * @author jqs |
| | | * @date 2023/6/8 15:18 |
| | | * @param memberTag |
| | | * @return void |
| | | */ |
| | | @Override |
| | | public void deleteMemberTag(String memberTag){ |
| | | memberMapper.deleteMemberTag(memberTag); |
| | | } |
| | | |
| | | /** |
| | | * @description 通过发送类型获取userId |
| | | * @author jqs |
| | | * @date 2023/6/13 17:53 |
| | | * @param sendType |
| | | * @return List<Long> |
| | | */ |
| | | @Override |
| | | public List<Long> listIdBySendType(Integer sendType){ |
| | | //1.手动领取2.全部用户3.会员用户4非会员用户5自定义 |
| | | return memberMapper.listIdBySendType(sendType); |
| | | } |
| | | |
| | | /** |
| | | * @description 通过ids获取用户简易返回 |
| | | * @author jqs |
| | | * @date 2023/6/16 11:06 |
| | | * @param userIds |
| | | * @return List<MgtSimpleMemberVo> |
| | | */ |
| | | @Override |
| | | public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds){ |
| | | return memberMapper.listSimpleVoByIds(userIds); |
| | | } |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/6/16 12:41 |
| | | * @param mgtUserIdByKeywordDto |
| | | * @return MgtUserIdByKeywordVo |
| | | */ |
| | | @Override |
| | | public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto){ |
| | | MgtUserIdByKeywordVo mgtUserIdByKeywordVo = new MgtUserIdByKeywordVo(); |
| | | List<Long> userIdList = memberMapper.getUserIdByKeyword(mgtUserIdByKeywordDto); |
| | | if(userIdList!=null&&!userIdList.isEmpty()){ |
| | | String userIdStr = userIdList.stream() |
| | | .map(Object::toString) |
| | | .collect(Collectors.joining(",")); |
| | | mgtUserIdByKeywordVo.setUserIds(userIdStr); |
| | | } |
| | | return mgtUserIdByKeywordVo; |
| | | } |
| | | |
| | | /** |
| | | * @description boardMemberTotal |
| | | * @param |
| | | * @return MgtBulletinBoardVo |
| | | * @author jqs34 |
| | | * @date 2023/6/18 16:45 |
| | | */ |
| | | @Override |
| | | public MgtBulletinBoardVo boardMemberTotal(){ |
| | | MgtBulletinBoardVo mgtBulletinBoardVo = new MgtBulletinBoardVo(); |
| | | mgtBulletinBoardVo.setMemberTotal(memberMapper.memberTotal()); |
| | | mgtBulletinBoardVo.setMemberToday(memberMapper.memberToday()); |
| | | return mgtBulletinBoardVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 会员人数统计 |
| | | * @author jqs |
| | | * @date 2023/6/19 15:26 |
| | | * @param |
| | | * @return MgtTotalMemberTotalVo |
| | | */ |
| | | @Override |
| | | public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto){ |
| | | Date nowDay = DateUtils.getNowDate(); |
| | | // 获取店铺ID |
| | | Long shopId = mgtBaseShopDto.getShopId(); |
| | | // 获取总会员数和不同年龄段的会员数 |
| | | MgtTotalMemberTotalVo mgtTotalMemberTotalVo = memberMapper.getTotalMemberTotal(mgtBaseShopDto); |
| | | MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getTotalMemberTotalAge(mgtBaseShopDto); |
| | | // 年龄段数组 |
| | | String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; |
| | | // 不同年龄段的会员数数组 |
| | | Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; |
| | | // 设置年龄段数组和不同年龄段的会员数数组 |
| | | mgtTotalMemberTotalVo.setAgeKey(ageKey); |
| | | mgtTotalMemberTotalVo.setAgeValue(ageValue); |
| | | // 获取不同护理类型的会员数 |
| | | List<MgtMapTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto); |
| | | if (nurseTotalVos != null && nurseTotalVos.size() > 0) { |
| | | nurseTotalVos = listRemoveNull(nurseTotalVos); |
| | | mgtTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos); |
| | | } |
| | | // 获取不同商品类型的会员数 |
| | | List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto); |
| | | if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) { |
| | | goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos); |
| | | mgtTotalMemberTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos); |
| | | } |
| | | // 获取不同活跃度的会员数 |
| | | List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); |
| | | if (activenessList != null && !activenessList.isEmpty()) { |
| | | Activeness activeness; |
| | | String actStartDate; |
| | | String actEndDate; |
| | | Integer count; |
| | | List<MgtMapTotalVo> mgtMapTotalVoList = new ArrayList<>(); |
| | | MgtMapTotalVo mgtMapTotalVo; |
| | | // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组 |
| | | for (int i = 0; i < activenessList.size(); i++) { |
| | | activeness = activenessList.get(i); |
| | | actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay())); |
| | | actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay())); |
| | | count = memberMapper.getTotalMemberTotalActiveness(shopId, actStartDate, actEndDate); |
| | | mgtMapTotalVo = new MgtMapTotalVo(); |
| | | mgtMapTotalVo.setMapKey(activeness.getActivenessName()); |
| | | mgtMapTotalVo.setMapValue(count); |
| | | mgtMapTotalVoList.add(mgtMapTotalVo); |
| | | } |
| | | mgtTotalMemberTotalVo.setActivenessList(mgtMapTotalVoList); |
| | | } |
| | | //获取会员消费排名 |
| | | List<MgtMapTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto); |
| | | if (memberPayList != null && memberPayList.size() > 0) { |
| | | memberPayList = listRemoveNull(memberPayList); |
| | | mgtTotalMemberTotalVo.setMemberPayList(memberPayList); |
| | | } |
| | | //获取来源渠道排名 |
| | | List<MgtMapTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto); |
| | | if (customerSourceList != null && customerSourceList.size() > 0) { |
| | | customerSourceList = listRemoveNull(customerSourceList); |
| | | mgtTotalMemberTotalVo.setCustomerSourceList(customerSourceList); |
| | | } |
| | | // 返回总会员数和不同类型会员数的统计结果 |
| | | return mgtTotalMemberTotalVo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/6/20 11:42 |
| | | * @param mgtActivityAgeDto |
| | | * @return List<Long> |
| | | */ |
| | | @Override |
| | | public List<Long> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto){ |
| | | List<Long> userIdList = memberMapper.listUserIdByAge(mgtActivityAgeDto); |
| | | return userIdList; |
| | | } |
| | | |
| | | /** |
| | | * @description 会员人数统计 |
| | | * @author jqs |
| | | * @date 2023/6/21 10:59 |
| | | * @param mgtBasePlatformDto |
| | | * @return MgtPlTotalMemberTotalVo |
| | | */ |
| | | @Override |
| | | public MgtPlTotalMemberTotalVo getPlTotalMemberTotal(MgtBasePlatformDto mgtBasePlatformDto){ |
| | | Date nowDay = DateUtils.getNowDate(); |
| | | //如果区域代码不为null获取对应的商户id |
| | | if(StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode())||StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode())||StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())){ |
| | | MgtShopIdByCodeDto mgtShopIdByCodeDto = new MgtShopIdByCodeDto(); |
| | | mgtShopIdByCodeDto.setShopProvinceCode(mgtBasePlatformDto.getShopProvinceCode()); |
| | | mgtShopIdByCodeDto.setShopCityCode(mgtBasePlatformDto.getShopCityCode()); |
| | | mgtShopIdByCodeDto.setShopAreaCode(mgtBasePlatformDto.getShopAreaCode()); |
| | | MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData(); |
| | | if(StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())){ |
| | | List<Long> list = Arrays.stream(mgtShopIdByCodeVo.getShopIds().split(",")) |
| | | .map(Long::valueOf) |
| | | .collect(Collectors.toList()); |
| | | mgtBasePlatformDto.setShopIdList(list); |
| | | } |
| | | } |
| | | //获取基础统计 |
| | | MgtPlTotalMemberTotalVo plTotalMemberTotalVo = memberMapper.getPlTotalMemberTotal(mgtBasePlatformDto); |
| | | MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getPlTotalMemberTotalAge(mgtBasePlatformDto); |
| | | if(mgtAgeTotalVo!=null){ |
| | | plTotalMemberTotalVo.setManTotal(mgtAgeTotalVo.getManTotal()); |
| | | plTotalMemberTotalVo.setWomenTotal(mgtAgeTotalVo.getWomenTotal()); |
| | | }else{ |
| | | plTotalMemberTotalVo.setManTotal(0); |
| | | plTotalMemberTotalVo.setWomenTotal(0); |
| | | } |
| | | |
| | | // 年龄段数组 |
| | | String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; |
| | | // 不同年龄段的会员数数组 |
| | | Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; |
| | | // 设置年龄段数组和不同年龄段的会员数数组 |
| | | plTotalMemberTotalVo.setAgeKey(ageKey); |
| | | plTotalMemberTotalVo.setAgeValue(ageValue); |
| | | // 获取不同调理类型的会员数 |
| | | List<MgtMapTotalVo> nurseTotalVos = memberMapper.getPlTotalMemberTotalNurse(mgtBasePlatformDto); |
| | | if (nurseTotalVos != null && nurseTotalVos.size() > 0) { |
| | | nurseTotalVos = listRemoveNull(nurseTotalVos); |
| | | plTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos); |
| | | } |
| | | // 获取不同商品类型的会员数 |
| | | List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getPlTotalMemberTotalGoodsType(mgtBasePlatformDto); |
| | | if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) { |
| | | goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos); |
| | | plTotalMemberTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos); |
| | | } |
| | | // 获取不同活跃度的会员数 |
| | | List<Long> shopIdList = mgtBasePlatformDto.getShopIdList(); |
| | | List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); |
| | | if (activenessList != null && !activenessList.isEmpty()) { |
| | | Activeness activeness; |
| | | String actStartDate; |
| | | String actEndDate; |
| | | Integer count; |
| | | List<MgtMapTotalVo> mgtMapTotalVoList = new ArrayList<>(); |
| | | MgtMapTotalVo mgtMapTotalVo; |
| | | // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组 |
| | | for (int i = 0; i < activenessList.size(); i++) { |
| | | activeness = activenessList.get(i); |
| | | actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay())); |
| | | actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay())); |
| | | count = memberMapper.getPlTotalMemberTotalActiveness(shopIdList, actStartDate, actEndDate); |
| | | if(StringUtils.isNotBlank(activeness.getActivenessName())){ |
| | | mgtMapTotalVo = new MgtMapTotalVo(); |
| | | mgtMapTotalVo.setMapKey(activeness.getActivenessName()); |
| | | mgtMapTotalVo.setMapValue(count); |
| | | mgtMapTotalVoList.add(mgtMapTotalVo); |
| | | } |
| | | } |
| | | plTotalMemberTotalVo.setActivenessList(mgtMapTotalVoList); |
| | | } |
| | | //获取会员消费排名 |
| | | List<MgtMapTotalVo> memberPayList = memberMapper.getPlTotalMemberRankPay(mgtBasePlatformDto); |
| | | if (memberPayList != null && memberPayList.size() > 0) { |
| | | memberPayList = listRemoveNull(memberPayList); |
| | | plTotalMemberTotalVo.setMemberPayList(memberPayList); |
| | | } |
| | | //获取来源渠道排名 |
| | | List<MgtMapTotalVo> customerSourceList = memberMapper.getPlTotalMemberRankCustomerSource(mgtBasePlatformDto); |
| | | if (customerSourceList != null && customerSourceList.size() > 0) { |
| | | customerSourceList = listRemoveNull(customerSourceList); |
| | | plTotalMemberTotalVo.setCustomerSourceList(customerSourceList); |
| | | } |
| | | //获取商铺会员排名 |
| | | List<MgtMapTotalVo> shopMemberRankList = memberMapper.getPlTotalMemberRank(mgtBasePlatformDto); |
| | | if (shopMemberRankList != null && shopMemberRankList.size() > 0) { |
| | | shopMemberRankList = listRemoveNull(shopMemberRankList); |
| | | plTotalMemberTotalVo.setShopMemberRankList(shopMemberRankList); |
| | | } |
| | | List<MgtMapTotalVo> memberGoodsRankList = remoteOrderService.listMemberGoodsRank(mgtBasePlatformDto).getData(); |
| | | if (memberGoodsRankList != null && memberGoodsRankList.size() > 0) { |
| | | memberGoodsRankList = listRemoveNull(memberGoodsRankList); |
| | | plTotalMemberTotalVo.setMemberGoodsRankList(memberGoodsRankList); |
| | | } |
| | | return plTotalMemberTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 去除空字符串 |
| | | * @author jqs |
| | | * @date 2023/6/27 17:35 |
| | | * @param mgtMapTotalVos |
| | | * @return List<MgtMapTotalVo> |
| | | */ |
| | | private List<MgtMapTotalVo> listRemoveNull(List<MgtMapTotalVo> mgtMapTotalVos){ |
| | | for (int i = 0; i < mgtMapTotalVos.size(); i++) { |
| | | if(StringUtils.isBlank(mgtMapTotalVos.get(i).getMapKey())){ |
| | | mgtMapTotalVos.remove(i); |
| | | } |
| | | } |
| | | return mgtMapTotalVos; |
| | | } |
| | | |
| | | /** |
| | | * @description 通过shopId获取userId |
| | | * @author jqs |
| | | * @date 2023/6/21 17:11 |
| | | * @param shopIdList |
| | | * @return List<Long> |
| | | */ |
| | | @Override |
| | | public List<Long> listUserIdByShopId(List<Long> shopIdList){ |
| | | return memberMapper.listUserIdByShopId(shopIdList); |
| | | } |
| | | |
| | | /** |
| | | * @description 通过shopId获取user统计 |
| | | * @author jqs |
| | | * @date 2023/6/21 17:19 |
| | | * @param shopIdList |
| | | * @return MgtShopTotalMemberVo |
| | | */ |
| | | @Override |
| | | public MgtShopTotalMemberVo getUserTotalByShopId(List<Long> shopIdList){ |
| | | MgtShopTotalMemberVo mgtShopTotalMemberVo = new MgtShopTotalMemberVo(); |
| | | MgtBasePlatformDto mgtBasePlatformDto = new MgtBasePlatformDto(); |
| | | mgtBasePlatformDto.setShopIdList(shopIdList); |
| | | MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getPlTotalMemberTotalAge(mgtBasePlatformDto); |
| | | mgtShopTotalMemberVo.setManTotal(mgtAgeTotalVo.getManTotal()); |
| | | mgtShopTotalMemberVo.setWomenTotal(mgtAgeTotalVo.getWomenTotal()); |
| | | // 年龄段数组 |
| | | String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; |
| | | // 不同年龄段的会员数数组 |
| | | Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; |
| | | // 设置年龄段数组和不同年龄段的会员数数组 |
| | | mgtShopTotalMemberVo.setAgeKey(ageKey); |
| | | mgtShopTotalMemberVo.setAgeValue(ageValue); |
| | | return mgtShopTotalMemberVo; |
| | | } |
| | | } |