From ea1a62ba6484d6c6cb1ca67dcea938a95ba18fc6 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 26 五月 2025 18:26:26 +0800 Subject: [PATCH] 新增加用户端接口 --- ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java | 655 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 542 insertions(+), 113 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 f6a8349..1161275 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 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.google.common.collect.Lists; +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; @@ -21,8 +23,12 @@ import com.ruoyi.member.domain.pojo.member.MemberTotal; import com.ruoyi.member.domain.vo.*; import com.ruoyi.member.mapper.member.MemberMapper; -import com.ruoyi.member.service.member.*; +import com.ruoyi.member.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 +52,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; @@ -105,6 +113,12 @@ @Resource private RemoteOrderService remoteOrderService; + + @Resource + private RemoteUserService remoteUserService; + + + /** * @description: TODO @@ -194,7 +208,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); @@ -230,6 +263,7 @@ member.setMemberNo(memberNo); member.setUserId(sysUser.getUserId()); member.setDelFlag(0); + member.setFrozenFlag(0); member.setNickName("鸿瑞堂用户"); member.setRealName("鸿瑞堂用户"); member.setCustomerSource("小程序"); @@ -264,7 +298,6 @@ } public static String getMobileByWX(String accessToken, String code) throws Exception { - String method = "POST"; Map<String, String> headers = new HashMap<>(16); headers.put("Content-Type", "application/json"); headers.put("Accept", "application/json"); @@ -293,6 +326,7 @@ appUserInfoVo.setNickName(member.getNickName()); appUserInfoVo.setRealName(member.getRealName()); appUserInfoVo.setPhonenumber(member.getMobile()); + //绑定会员显示绑定店铺 if (member.getRelationShopId() != null && member.getBindingFlag() == 1) { appUserInfoVo.setRelationShopId(member.getRelationShopId()); Shop shop = shopService.getShop(member.getRelationShopId()).getData(); @@ -302,9 +336,11 @@ 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; @@ -332,7 +368,13 @@ member.setGender(Integer.valueOf(editValue)); break; case 4: + if(editValue.compareTo(DateUtils.getDate())>0){ + throw new ServiceException(AppErrorConstant.BIRTHDAY_BEYOND); + } member.setBirthday(editValue); + break; + case 5: + member.setRealName(editValue); break; default: break; @@ -351,19 +393,33 @@ */ @Override public List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto) { + //处理活跃度 List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); if (StringUtils.isNotBlank(merMemberPageDto.getMemberActiveness())) { if(!activenessList.isEmpty()){ for(Activeness activeness : activenessList){ if(activeness.getActivenessName().equals(merMemberPageDto.getMemberActiveness())){ Date nowDay = DateUtils.getNowDate(); - String actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay())); - String actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay())); + 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); @@ -375,13 +431,15 @@ MgtActivenessJudgeVo mgtActivenessJudgeVo; for (Activeness activeness : activenessList) { mgtActivenessJudgeVo = new MgtActivenessJudgeVo(); - mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(), activeness.getEndDay())); - mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(), activeness.getStartDay() - 1)); + mgtActivenessJudgeVo.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) { @@ -417,7 +475,7 @@ 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()); @@ -427,16 +485,16 @@ MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); // 设置MerMemberInfoVo对象的属性值 merMemberInfoVo.setSurpNumber(memberTotal.getUseableServiceCount()); - merMemberInfoVo.setUserNumber(memberTotal.getUsedServiceCount()); - merMemberInfoVo.setPayMoney(memberTotal.getTotalPayMoney()); // 创建MerBaseDto对象 MerBaseDto merBaseDto = new MerBaseDto(); // 设置MerBaseDto对象的属性值 merBaseDto.setShopId(merBaseGetDto.getShopId()); merBaseDto.setUserId(userId); // 获取未支付订单金额 - BigDecimal unpaidMoney = remoteOrderService.getMemberUnpaidOrder(merBaseDto).getData(); - merMemberInfoVo.setUnpaidMoney(unpaidMoney); + 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) { @@ -445,7 +503,7 @@ } // 设置MerMemberInfoVo对象的属性值 merMemberInfoVo.setNextTaskTime(memberTotal.getNextTaskTime()); - merMemberInfoVo.setLastPayTime(memberTotal.getLastPayTime()); + merMemberInfoVo.setLastPayTime(memberTotal.getLastConsumeTime()); // 返回MerMemberInfoVo对象 return merMemberInfoVo; } @@ -478,6 +536,7 @@ member.setBindingFlag(appMemberBindingDto.getBindingFlag()); member.setRelationShopId(appMemberBindingDto.getShopId()); member.setRelationShopName(appMemberBindingDto.getShopName()); + member.setBindingType(appMemberBindingDto.getBindingType()); this.saveOrUpdate(member); } @@ -492,7 +551,7 @@ 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); @@ -567,22 +626,30 @@ * @param merMemberAddDto */ @Override - public void addMerMember(MerMemberAddDto merMemberAddDto) { + public Long addMerMember(MerMemberAddDto merMemberAddDto) { String phoneNumber = merMemberAddDto.getPhonenumber(); Member oldMember = this.getByMobile(phoneNumber); // Check if the member already exists - if (oldMember != null) { + if (oldMember != null && oldMember.getBindingFlag() == 1) { throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE); + } + if (oldMember != null && oldMember.getBindingFlag() == 0) { + oldMember.setRelationShopId(merMemberAddDto.getShopId()); + oldMember.setBindingFlag(1); + oldMember.setBindingType(8); + this.updateById(oldMember); + return oldMember.getUserId(); } // Get the sysUser by mobile number SysUser sysUser = sysUserService.getSysUserByMobile(phoneNumber).getData(); // If sysUser does not exist, create a new one - if (sysUser == null) { + 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)); @@ -595,9 +662,11 @@ 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.setLevel(merMemberAddDto.getLevel()); member.setMobile(phoneNumber); member.setReferrer(merMemberAddDto.getReferrer()); member.setBirthday(merMemberAddDto.getBirthday()); @@ -607,11 +676,18 @@ member.setMiniOpenid(null); member.setBindingFlag(1); member.setBindingTime(new Date()); + member.setBindingType(6); // Get shop information and set it to the member Shop shop = remoteShopService.getShop(merMemberAddDto.getShopId()).getData(); member.setRelationShopName(shop.getShopName()); - member.setCustomerSource("商户添加"); + member.setCustomerSource(merMemberAddDto.getCustomerSource()); member.setCreateTime(new Date()); + //调理问题 + List<String> memberNurse = merMemberAddDto.getMemberNurse(); + if(memberNurse!=null&&!memberNurse.isEmpty()){ + String memberNurseString = String.join(",", memberNurse); + member.setMemberNurse(memberNurseString); + } // Save the member and initialize member total this.saveOrUpdate(member); initMemberTotal(memberId); @@ -629,7 +705,10 @@ ).collect(Collectors.toList()); memberArchiveService.saveBatch(memberArchiveList); } + }else{ + throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE); } + return sysUser.getUserId(); } /** @@ -639,49 +718,54 @@ */ @Override public void editMerMember(MerMemberEditDto merMemberEditDto) { - // 获取用户信息 - Member member = this.getByUserId(merMemberEditDto.getEditUserId()); - // 检查手机号是否已经存在 - if (!member.getMobile().equals(merMemberEditDto.getPhonenumber())) { - Member memberOld = getByMobile(merMemberEditDto.getPhonenumber()); - if (memberOld != null) { - throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE); + // 获取用户信息 + Member member = this.getByUserId(merMemberEditDto.getEditUserId()); + // 检查手机号是否已经存在 + if (!member.getMobile().equals(merMemberEditDto.getPhonenumber())) { + Member memberOld = getByMobile(merMemberEditDto.getPhonenumber()); + if (memberOld != null) { + throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE); + } + } + // 更新用户信息 + member.setRealName(merMemberEditDto.getRealName()); + member.setMobile(merMemberEditDto.getPhonenumber()); + member.setGender(merMemberEditDto.getGender()); + member.setReferrer(merMemberEditDto.getReferrer()); + member.setCustomerSource(merMemberEditDto.getCustomerSource()); + member.setLevel(merMemberEditDto.getLevel()); + member.setBirthday(merMemberEditDto.getBirthday()); + member.setUpdateUserId(merMemberEditDto.getUserId()); + member.setUpdateTime(new Date()); + List<String> memberNurse = merMemberEditDto.getMemberNurse(); + if(memberNurse!=null&&!memberNurse.isEmpty()){ + String memberNurseString = String.join(",", memberNurse); + member.setMemberNurse(memberNurseString); + } + this.saveOrUpdate(member); + // 更新用户手机号 + SysUser sysUser = new SysUser(); + sysUser.setUserId(merMemberEditDto.getEditUserId()); + sysUser.setPhonenumber(merMemberEditDto.getPhonenumber()); + sysUserService.updateUserMobile(sysUser); + // 删除用户的档案信息 + memberArchiveService.deleteByUserId(sysUser.getUserId()); + // 添加用户的档案信息 + List<MemberArchiveVo> achiveList = merMemberEditDto.getAchiveList(); + if (achiveList != null && !achiveList.isEmpty()) { + // 构造用户档案列表 + List<MemberArchive> memberArchiveList = achiveList.stream().map(memberArchiveVo -> { + MemberArchive memberArchive = new MemberArchive(); + memberArchive.setDelFlag(0); + memberArchive.setUserId(sysUser.getUserId()); + memberArchive.setFieldId(memberArchiveVo.getFieldId()); + memberArchive.setFieldValue(memberArchiveVo.getFieldValue()); + return memberArchive; + }).collect(Collectors.toList()); + // 批量保存用户档案信息 + memberArchiveService.saveBatch(memberArchiveList); } } - // 更新用户信息 - member.setRealName(merMemberEditDto.getNickName()); - member.setMobile(merMemberEditDto.getPhonenumber()); - member.setGender(merMemberEditDto.getGender()); - member.setReferrer(merMemberEditDto.getReferrer()); - member.setCustomerSource(merMemberEditDto.getCustomerSource()); - member.setLevel(merMemberEditDto.getLevel()); - member.setBirthday(merMemberEditDto.getBirthday()); - member.setUpdateUserId(merMemberEditDto.getUserId()); - member.setUpdateTime(new Date()); - 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 @@ -763,8 +847,8 @@ 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); @@ -800,6 +884,7 @@ memberTotal.setShopSuggestFlag(0); memberTotal.setSignFlag(0); memberTotal.setBuyFlag(0); + memberTotal.setTotalConsumeCount(0); memberTotalService.saveOrUpdate(memberTotal); } @@ -824,6 +909,7 @@ */ @Override public List<MgtMemberPageVo> pageMgtMember(Page page, MgtMemberPageDto merMemberPageDto) { + List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); Date nowDay = new Date(); if (merMemberPageDto.getActivenessId() != null) { @@ -832,16 +918,67 @@ .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(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()) { @@ -850,13 +987,22 @@ MgtActivenessJudgeVo mgtActivenessJudgeVo; for (Activeness activeness : activenessList) { mgtActivenessJudgeVo = new MgtActivenessJudgeVo(); - mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(), activeness.getEndDay())); - mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(), activeness.getStartDay() - 1)); + mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(), -activeness.getEndDay())); + mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(), -activeness.getStartDay())); mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName()); } //活跃度赋值 Date lastPayTime; for (MgtMemberPageVo mgtMemberPageVo : memberPageVoList) { + if(null != mgtMemberPageVo.getRelationShopId() && 1 == mgtMemberPageVo.getBindingFlag()){ + R<Shop> shop_r = remoteShopService.getShop(mgtMemberPageVo.getRelationShopId()); + if(shop_r.getCode() == 200){ + Shop data = shop_r.getData(); + if(null != data){ + mgtMemberPageVo.setRelationShopName(data.getShopName()); + } + } + } lastPayTime = mgtMemberPageVo.getLastPayTime(); StringJoiner sj = new StringJoiner(","); if (lastPayTime != null) { @@ -892,10 +1038,12 @@ 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); } } } @@ -912,11 +1060,14 @@ 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); + 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); } } } @@ -954,6 +1105,7 @@ */ @Override public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto) { + log.info("会员积分变动---"+memberIntegralChangeDto.toString()); MemberTotal memberTotal = memberTotalService.getById(memberIntegralChangeDto.getMemberId()); Integer recordType = memberIntegralChangeDto.getRecordType(); Integer changeType = memberIntegralChangeDto.getChangeType(); @@ -1031,13 +1183,29 @@ 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()); @@ -1072,6 +1240,13 @@ //1.手动领取2.全部用户3.会员用户4非会员用户5自定义 return memberMapper.listIdBySendType(sendType,shopId); } + + + public List<Long> listIdBySendType2(Long shopId) { + //1.手动领取2.全部用户3.会员用户4非会员用户5自定义 + return memberMapper.listIdBySendType2(shopId); + } + /** * @param userIds @@ -1113,10 +1288,10 @@ * @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; } @@ -1130,10 +1305,36 @@ @Override public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto) { Date nowDay = DateUtils.getNowDate(); + MgtTotalMemberTotalVo mgtTotalMemberTotalVo = new MgtTotalMemberTotalVo(); + mgtTotalMemberTotalVo.setMemberTotal(0); + mgtTotalMemberTotalVo.setOnlineTotal(0); + mgtTotalMemberTotalVo.setOfflineTotal(0); + mgtTotalMemberTotalVo.setIntroduceTotal(0); + mgtTotalMemberTotalVo.setCycleTotal(0); + mgtTotalMemberTotalVo.setExperienceTotal(0); + mgtTotalMemberTotalVo.setServiceTotal(0); + mgtTotalMemberTotalVo.setManTotal(0); + mgtTotalMemberTotalVo.setManPercent(new BigDecimal("0")); + mgtTotalMemberTotalVo.setWomenTotal(0); + mgtTotalMemberTotalVo.setWomenPercent(new BigDecimal("0")); + mgtTotalMemberTotalVo.setAgeKey(new String[0]); + mgtTotalMemberTotalVo.setAgeValue(new Integer[0]); + mgtTotalMemberTotalVo.setNurseTotalVos(Lists.newArrayList()); + mgtTotalMemberTotalVo.setMemberLevelTotalVos(Lists.newArrayList()); + mgtTotalMemberTotalVo.setGoodsTypeTotalVos(Lists.newArrayList()); + mgtTotalMemberTotalVo.setActivenessList(Lists.newArrayList()); + mgtTotalMemberTotalVo.setCustomerSourceList(Lists.newArrayList()); + mgtTotalMemberTotalVo.setMemberPayList(Lists.newArrayList()); // 获取店铺ID Long shopId = mgtBaseShopDto.getShopId(); // 获取总会员数和不同年龄段的会员数 - MgtTotalMemberTotalVo 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(); @@ -1145,6 +1346,9 @@ 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"); @@ -1155,7 +1359,7 @@ menPercent = new BigDecimal("100.00"); womenPercent = new BigDecimal("0.00"); }else{ - menPercent = manTotalBig.divide(personTotalBig).setScale(0,BigDecimal.ROUND_HALF_UP); + menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")); womenPercent = bigTen.subtract(menPercent); } mgtTotalMemberTotalVo.setManPercent(menPercent); @@ -1164,6 +1368,18 @@ 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); @@ -1197,8 +1413,8 @@ // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组 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); MgtMapIntTotalVo = new MgtMapIntTotalVo(); MgtMapIntTotalVo.setMapKey(activeness.getActivenessName()); @@ -1210,7 +1426,7 @@ //获取会员消费排名 List<MgtMapIntTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto); if (memberPayList != null && memberPayList.size() > 0) { - memberPayList = listRemoveNull(memberPayList); + //memberPayList = listRemoveNull(memberPayList); mgtTotalMemberTotalVo.setMemberPayList(memberPayList); } //获取来源渠道排名 @@ -1246,39 +1462,109 @@ */ @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<Long> list = Arrays.stream(mgtShopIdByCodeVo.getShopIds().split(",")) + list = Arrays.stream(mgtShopIdByCodeVo.getShopIds().split(",")) .map(Long::valueOf) .collect(Collectors.toList()); - mgtBasePlatformDto.setShopIdList(list); + }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 plTotalMemberTotalVo = memberMapper.getPlTotalMemberTotal(mgtBasePlatformDto); + 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) { - plTotalMemberTotalVo.setManTotal(mgtAgeTotalVo.getManTotal()); - plTotalMemberTotalVo.setWomenTotal(mgtAgeTotalVo.getWomenTotal()); - } else { - plTotalMemberTotalVo.setManTotal(0); - plTotalMemberTotalVo.setWomenTotal(0); + 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) { @@ -1310,8 +1596,8 @@ // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组 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.getPlTotalMemberTotalActiveness(shopIdList, actStartDate, actEndDate); if (StringUtils.isNotBlank(activeness.getActivenessName())) { MgtMapIntTotalVo = new MgtMapIntTotalVo(); @@ -1395,6 +1681,18 @@ 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); @@ -1410,6 +1708,7 @@ */ @Override public void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto) { + log.info("会员统计变动---"+memberTotalChangeDto.toString()); Member member = this.getByUserId(memberTotalChangeDto.getUserId()); MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); //积分变动 @@ -1420,6 +1719,17 @@ } 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); } } //消费变动 @@ -1439,8 +1749,9 @@ if (memberTotalChangeDto.getTypeService() == 2) { memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount() - memberTotalChangeDto.getServiceCount()); memberTotal.setUsedServiceCount(memberTotal.getUsedServiceCount() + memberTotalChangeDto.getServiceCount()); + memberTotal.setLastServiceTime(new Date()); } else { - memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() + memberTotalChangeDto.getServiceCount()); + memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount() + memberTotalChangeDto.getServiceCount()); memberTotal.setTotalServiceCount(memberTotal.getTotalServiceCount() + memberTotalChangeDto.getServiceCount()); } } @@ -1465,6 +1776,11 @@ } 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); } @@ -1503,11 +1819,6 @@ } MerMemberFixedTotalVo memberFixedTotalVo = new MerMemberFixedTotalVo(); Date nowDay = DateUtils.getNowDate(); - if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ - List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); - merTotalDto.setShopIdList(shopIdList); - merTotalDto.setShopId(null); - } MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getMerMemberTotalAge(merTotalDto); Integer manTotal = mgtAgeTotalVo.getManTotal(); Integer womenTotal = mgtAgeTotalVo.getWomenTotal(); @@ -1519,6 +1830,9 @@ 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"); @@ -1529,7 +1843,7 @@ menPercent = new BigDecimal("100.00"); womenPercent = new BigDecimal("0.00"); }else{ - menPercent = manTotalBig.divide(personTotalBig).setScale(0,BigDecimal.ROUND_HALF_UP); + menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")); womenPercent = bigTen.subtract(menPercent); } memberFixedTotalVo.setManPercent(menPercent); @@ -1538,13 +1852,29 @@ 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); } //获取不同等级的会员数 @@ -1552,17 +1882,26 @@ 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); } // 获取不同活跃度的会员数 @@ -1572,22 +1911,25 @@ String actStartDate; String actEndDate; Integer count; - List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>(); + 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())); merTotalDto.setStartDate(actStartDate); merTotalDto.setEndDate(actEndDate); count = memberMapper.getMerMemberTotalActiveness(merTotalDto); MgtMapIntTotalVo = new MgtMapIntTotalVo(); MgtMapIntTotalVo.setMapKey(activeness.getActivenessName()); MgtMapIntTotalVo.setMapValue(count); - MgtMapIntTotalVoList.add(MgtMapIntTotalVo); + mgtMapIntTotalVoList.add(MgtMapIntTotalVo); } - memberFixedTotalVo.setActivenessList(MgtMapIntTotalVoList); + memberFixedTotalVo.setActivenessList(mgtMapIntTotalVoList); + }else{ + List<MgtMapIntTotalVo> mgtMapIntTotalVoList = new ArrayList<>(); + memberFixedTotalVo.setActivenessList(mgtMapIntTotalVoList); } return memberFixedTotalVo; } @@ -1633,11 +1975,13 @@ } MerMemberRecommendTotalVo memberRecommendTotalVo = new MerMemberRecommendTotalVo(); //获取会员推荐排名 - List<MgtMapIntTotalVo> recommendList = memberMapper.getMerMemberRecommendRank(merTotalDto); + /*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; } @@ -1683,17 +2027,34 @@ 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 mgtBaseGetDto + * @param mgtFrozenMemberDto * @return void */ @Override - public void mgtFrozenMember(MgtBaseGetDto mgtBaseGetDto){ - sysUserService.frozenUser(Long.valueOf(mgtBaseGetDto.getId())); + public void mgtFrozenMember(MgtFrozenMemberDto mgtFrozenMemberDto){ + Long userId = mgtFrozenMemberDto.getId(); + Member member = this.getByUserId(userId); + member.setFrozenFlag(mgtFrozenMemberDto.getFrozenFlag()); + this.saveOrUpdate(member); + sysUserService.frozenUser(mgtFrozenMemberDto); } /** @@ -1761,6 +2122,7 @@ */ @Override public Boolean changeIntegral(IntegralChangeDto integralChangeDto){ + log.info("会员积分变动---"+integralChangeDto.toString()); Member member = this.getByUserId(integralChangeDto.getUserId()); Integer integralType = integralChangeDto.getIntegralType(); Integer changeIntegral = integralChangeDto.getChangeIntegral(); @@ -1866,4 +2228,71 @@ 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); + } + } + } + } + + + /** + * 手动添加用户积分 + * + * @param integral + * @param userId + * @return + */ + @Override + public R addIntegralRecord(Integer integral, Long userId, String orderId) { + Member member = this.getByUserId(userId); + MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); + IntegralRecord integralRecord = new IntegralRecord(); + integralRecord.setDelFlag(0); + integralRecord.setUserId(userId); + integralRecord.setChangeType(6); + integralRecord.setChangeIntegral(integral); + integralRecord.setSurpIntegral(memberTotal.getUseableIntegral() + integral); + integralRecord.setCreateTime(new Date()); + integralRecord.setOrderId(orderId); + integralRecord.setChangeReason("抽奖活动获得"); + integralRecordService.save(integralRecord); + memberTotal.setTotalIntegral(memberTotal.getTotalIntegral() + integral); + memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() + integral); + memberTotal.setPlSuggestFlag(1); + memberTotalService.saveOrUpdate(memberTotal); + return R.ok(); + } } -- Gitblit v1.7.1