bug
jiangqs
2023-08-31 dbff53150cdc807faa56c0d1a947d24b69f372b9
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -20,6 +20,7 @@
import com.ruoyi.member.domain.pojo.member.IntegralRecord;
import com.ruoyi.member.domain.pojo.member.MemberArchive;
import com.ruoyi.member.domain.pojo.member.MemberTotal;
import com.ruoyi.member.domain.vo.MerMemberTotalVo;
import com.ruoyi.member.domain.vo.*;
import com.ruoyi.member.mapper.member.MemberMapper;
import com.ruoyi.member.service.member.IntegralRecordService;
@@ -27,6 +28,7 @@
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.*;
@@ -358,7 +360,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;
@@ -384,8 +392,8 @@
                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;
@@ -415,13 +423,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) {
@@ -457,7 +467,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());
@@ -467,16 +477,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) {
@@ -485,7 +495,7 @@
        }
        // 设置MerMemberInfoVo对象的属性值
        merMemberInfoVo.setNextTaskTime(memberTotal.getNextTaskTime());
        merMemberInfoVo.setLastPayTime(memberTotal.getLastPayTime());
        merMemberInfoVo.setLastPayTime(memberTotal.getLastConsumeTime());
        // 返回MerMemberInfoVo对象
        return merMemberInfoVo;
    }
@@ -518,6 +528,7 @@
        member.setBindingFlag(appMemberBindingDto.getBindingFlag());
        member.setRelationShopId(appMemberBindingDto.getShopId());
        member.setRelationShopName(appMemberBindingDto.getShopName());
        member.setBindingType(appMemberBindingDto.getBindingType());
        this.saveOrUpdate(member);
    }
@@ -532,7 +543,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);
@@ -607,7 +618,7 @@
     * @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
@@ -617,12 +628,13 @@
        // 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));
@@ -636,9 +648,10 @@
            member.setUserId(sysUser.getUserId());
            member.setDelFlag(0);
            member.setFrozenFlag(0);
            member.setNickName(merMemberAddDto.getNickName());
            member.setRealName(merMemberAddDto.getNickName());
            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());
@@ -648,11 +661,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(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);
@@ -670,7 +690,10 @@
                ).collect(Collectors.toList());
                memberArchiveService.saveBatch(memberArchiveList);
            }
        }else{
            throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE);
        }
        return sysUser.getUserId();
    }
    /**
@@ -680,54 +703,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());
    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
@@ -846,6 +869,7 @@
        memberTotal.setShopSuggestFlag(0);
        memberTotal.setSignFlag(0);
        memberTotal.setBuyFlag(0);
        memberTotal.setTotalConsumeCount(0);
        memberTotalService.saveOrUpdate(memberTotal);
    }
@@ -878,8 +902,8 @@
                    .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())));
                    });
        }
        //处理标签为正则表达
@@ -909,8 +933,8 @@
                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());
                }
                //活跃度赋值
@@ -951,6 +975,7 @@
                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());
@@ -972,11 +997,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);
            }
        }
    }
@@ -1014,6 +1042,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();
@@ -1105,7 +1134,9 @@
        mgtMemberGetVo.setCreateTime(member.getCreateTime());
        mgtMemberGetVo.setLastPayTime(memberTotal.getLastPayTime());
        mgtMemberGetVo.setGoodsType(member.getGoodsType());
        mgtMemberGetVo.setRelationShopName(member.getRelationShopName());
        if(member.getBindingFlag()==1){
            mgtMemberGetVo.setRelationShopName(member.getRelationShopName());
        }
        mgtMemberGetVo.setIntegral(memberTotal.getTotalIntegral());
        mgtMemberGetVo.setMemberFrom(member.getCustomerSource());
        mgtMemberGetVo.setTotalActivityCount(memberTotal.getTotalActivityCount());
@@ -1213,6 +1244,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");
@@ -1223,7 +1257,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);
@@ -1232,6 +1266,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);
@@ -1265,8 +1311,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());
@@ -1278,7 +1324,7 @@
        //获取会员消费排名
        List<MgtMapIntTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
        if (memberPayList != null && memberPayList.size() > 0) {
            memberPayList = listRemoveNull(memberPayList);
            //memberPayList = listRemoveNull(memberPayList);
            mgtTotalMemberTotalVo.setMemberPayList(memberPayList);
        }
        //获取来源渠道排名
@@ -1322,31 +1368,67 @@
            mgtShopIdByCodeDto.setShopCityCode(mgtBasePlatformDto.getShopCityCode());
            mgtShopIdByCodeDto.setShopAreaCode(mgtBasePlatformDto.getShopAreaCode());
            MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData();
            List<Long> list = new ArrayList<>();
            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);
            }
            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);
            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) {
@@ -1378,8 +1460,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();
@@ -1463,6 +1545,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);
@@ -1478,6 +1572,7 @@
     */
    @Override
    public void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto) {
        log.info("会员统计变动---"+memberTotalChangeDto.toString());
        Member member = this.getByUserId(memberTotalChangeDto.getUserId());
        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
        //积分变动
@@ -1488,6 +1583,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);
            }
        }
        //消费变动
@@ -1507,8 +1613,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());
            }
        }
@@ -1533,6 +1640,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);
    }
@@ -1587,6 +1699,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");
@@ -1597,7 +1712,7 @@
            menPercent = new BigDecimal("100.00");
            womenPercent = new BigDecimal("0.00");
        }else{
            menPercent = manTotalBig.divide(personTotalBig,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);
@@ -1606,9 +1721,22 @@
        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) {
@@ -1645,8 +1773,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()));
                merTotalDto.setStartDate(actStartDate);
                merTotalDto.setEndDate(actEndDate);
                count = memberMapper.getMerMemberTotalActiveness(merTotalDto);
@@ -1701,11 +1829,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;
    }
@@ -1751,7 +1881,20 @@
        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
@@ -1833,6 +1976,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();
@@ -1953,4 +2097,26 @@
        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<String> mobileList = memberMapper.listTodayBirthday();
        if(mobileList!=null&&!mobileList.isEmpty()){
            log.info("生日祝福发送短信---"+mobileList.toString());
            for(String mobile : mobileList){
                try {
                    MsgUtils.sendMsg(mobile,null,null);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}