jiangqs
2023-06-26 b4882b114f082e010d4cc3359d78d18095ef3b83
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -102,6 +102,11 @@
    @Resource
    private MemberArchiveService memberArchiveService;
    @Resource
    private RemoteShopService remoteShopService;
    @Resource
    private RemoteOrderService remoteOrderService;
    /**
     * @description: TODO
@@ -391,6 +396,9 @@
    @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());
@@ -508,7 +516,9 @@
            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());
@@ -722,6 +732,7 @@
                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);
@@ -740,7 +751,7 @@
            String memberUserIds = mgtMemberRelDelDto.getMemberUserIds();
            String[] memberUserIdArr = memberUserIds.split(",");
            for(String str : memberUserIdArr) {
                Member member = this.getById(Long.valueOf(str));
                Member member = this.getByUserId(Long.valueOf(str));
                member.setBindingFlag(0);
                member.setUpdateTime(new Date());
                member.setUpdateUserId(mgtMemberRelDelDto.getUserId());
@@ -944,4 +955,292 @@
        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) {
            String[] nurseKey = new String[nurseTotalVos.size()];
            Integer[] nurseValue = new Integer[nurseTotalVos.size()];
            // 遍历不同护理类型的会员数列表,设置护理类型数组和对应的会员数数组
            for (int i = 0; i < nurseTotalVos.size(); i++) {
                nurseKey[i] = nurseTotalVos.get(i).getMapKey();
                nurseValue[i] = nurseTotalVos.get(i).getMapValue();
            }
            mgtTotalMemberTotalVo.setNurseKey(nurseKey);
            mgtTotalMemberTotalVo.setNurseValue(nurseValue);
        }
        // 获取不同商品类型的会员数
        List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto);
        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
            String[] goodsTypeKey = new String[goodsTypeTotalVos.size()];
            Integer[] goodsTypeValue = new Integer[goodsTypeTotalVos.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < goodsTypeTotalVos.size(); i++) {
                goodsTypeKey[i] = goodsTypeTotalVos.get(i).getMapKey();
                goodsTypeValue[i] = goodsTypeTotalVos.get(i).getMapValue();
            }
            mgtTotalMemberTotalVo.setGoodsTypeKey(goodsTypeKey);
            mgtTotalMemberTotalVo.setGoodsTypeValue(goodsTypeValue);
        }
        // 获取不同活跃度的会员数
        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
        if (activenessList != null && !activenessList.isEmpty()) {
            String[] activenessKey = new String[activenessList.size()];
            Integer[] activenessValue = new Integer[activenessList.size()];
            Activeness activeness;
            String actStartDate;
            String actEndDate;
            Integer count;
            // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
            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);
                activenessKey[i] = activeness.getActivenessName();
                activenessValue[i] = count;
            }
            mgtTotalMemberTotalVo.setActivenessKey(activenessKey);
            mgtTotalMemberTotalVo.setActivenessValue(activenessValue);
        }
        //获取会员消费排名
        List<MgtMapTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
        if (memberPayList != null && memberPayList.size() > 0) {
            String[] memberPayKey = new String[memberPayList.size()];
            Integer[] memberPayValue = new Integer[memberPayList.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < memberPayList.size(); i++) {
                memberPayKey[i] = memberPayList.get(i).getMapKey();
                memberPayValue[i] = memberPayList.get(i).getMapValue();
            }
            mgtTotalMemberTotalVo.setOrderRankKey(memberPayKey);
            mgtTotalMemberTotalVo.setOrderRankValue(memberPayValue);
        }
        //获取来源渠道排名
        List<MgtMapTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto);
        if (customerSourceList != null && customerSourceList.size() > 0) {
            String[] customerSourceKey = new String[customerSourceList.size()];
            Integer[] customerSourceValue = new Integer[customerSourceList.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < customerSourceList.size(); i++) {
                customerSourceKey[i] = customerSourceList.get(i).getMapKey();
                customerSourceValue[i] = customerSourceList.get(i).getMapValue();
            }
            mgtTotalMemberTotalVo.setCustomerSourceKey(customerSourceKey);
            mgtTotalMemberTotalVo.setCustomerSourceValue(customerSourceValue);
        }
        // 返回总会员数和不同类型会员数的统计结果
        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);
        plTotalMemberTotalVo.setManTotal(mgtAgeTotalVo.getManTotal());
        plTotalMemberTotalVo.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()};
        // 设置年龄段数组和不同年龄段的会员数数组
        plTotalMemberTotalVo.setAgeKey(ageKey);
        plTotalMemberTotalVo.setAgeValue(ageValue);
        // 获取不同护理类型的会员数
        List<MgtMapTotalVo> nurseTotalVos = memberMapper.getPlTotalMemberTotalNurse(mgtBasePlatformDto);
        if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
            String[] nurseKey = new String[nurseTotalVos.size()];
            Integer[] nurseValue = new Integer[nurseTotalVos.size()];
            // 遍历不同护理类型的会员数列表,设置护理类型数组和对应的会员数数组
            for (int i = 0; i < nurseTotalVos.size(); i++) {
                nurseKey[i] = nurseTotalVos.get(i).getMapKey();
                nurseValue[i] = nurseTotalVos.get(i).getMapValue();
            }
            plTotalMemberTotalVo.setNurseKey(nurseKey);
            plTotalMemberTotalVo.setNurseValue(nurseValue);
        }
        // 获取不同商品类型的会员数
        List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getPlTotalMemberTotalGoodsType(mgtBasePlatformDto);
        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
            String[] goodsTypeKey = new String[goodsTypeTotalVos.size()];
            Integer[] goodsTypeValue = new Integer[goodsTypeTotalVos.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < goodsTypeTotalVos.size(); i++) {
                goodsTypeKey[i] = goodsTypeTotalVos.get(i).getMapKey();
                goodsTypeValue[i] = goodsTypeTotalVos.get(i).getMapValue();
            }
            plTotalMemberTotalVo.setGoodsTypeKey(goodsTypeKey);
            plTotalMemberTotalVo.setGoodsTypeValue(goodsTypeValue);
        }
        // 获取不同活跃度的会员数
        List<Long> shopIdList = mgtBasePlatformDto.getShopIdList();
        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
        if (activenessList != null && !activenessList.isEmpty()) {
            String[] activenessKey = new String[activenessList.size()];
            Integer[] activenessValue = new Integer[activenessList.size()];
            Activeness activeness;
            String actStartDate;
            String actEndDate;
            Integer count;
            // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
            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);
                activenessKey[i] = activeness.getActivenessName();
                activenessValue[i] = count;
            }
            plTotalMemberTotalVo.setActivenessKey(activenessKey);
            plTotalMemberTotalVo.setActivenessValue(activenessValue);
        }
        //获取会员消费排名
        List<MgtMapTotalVo> memberPayList = memberMapper.getPlTotalMemberRankPay(mgtBasePlatformDto);
        if (memberPayList != null && memberPayList.size() > 0) {
            String[] memberPayKey = new String[memberPayList.size()];
            Integer[] memberPayValue = new Integer[memberPayList.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < memberPayList.size(); i++) {
                memberPayKey[i] = memberPayList.get(i).getMapKey();
                memberPayValue[i] = memberPayList.get(i).getMapValue();
            }
            plTotalMemberTotalVo.setOrderRankKey(memberPayKey);
            plTotalMemberTotalVo.setOrderRankValue(memberPayValue);
        }
        //获取来源渠道排名
        List<MgtMapTotalVo> customerSourceList = memberMapper.getPlTotalMemberRankCustomerSource(mgtBasePlatformDto);
        if (customerSourceList != null && customerSourceList.size() > 0) {
            String[] customerSourceKey = new String[customerSourceList.size()];
            Integer[] customerSourceValue = new Integer[customerSourceList.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < customerSourceList.size(); i++) {
                customerSourceKey[i] = customerSourceList.get(i).getMapKey();
                customerSourceValue[i] = customerSourceList.get(i).getMapValue();
            }
            plTotalMemberTotalVo.setCustomerSourceKey(customerSourceKey);
            plTotalMemberTotalVo.setCustomerSourceValue(customerSourceValue);
        }
        //获取商铺会员排名
        List<MgtMapTotalVo> shopMemberRankList = memberMapper.getPlTotalMemberRank(mgtBasePlatformDto);
        if (shopMemberRankList != null && shopMemberRankList.size() > 0) {
            String[] shopMemberRankKey = new String[shopMemberRankList.size()];
            Integer[] shopMemberRankValue = new Integer[shopMemberRankList.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < shopMemberRankList.size(); i++) {
                shopMemberRankKey[i] = shopMemberRankList.get(i).getMapKey();
                shopMemberRankValue[i] = shopMemberRankList.get(i).getMapValue();
            }
            plTotalMemberTotalVo.setMemberRankKey(shopMemberRankKey);
            plTotalMemberTotalVo.setMemberRankValue(shopMemberRankValue);
        }
        List<MgtMapTotalVo> memberGoodsRankList = remoteOrderService.listMemberGoodsRank(mgtBasePlatformDto).getData();
        if (memberGoodsRankList != null && memberGoodsRankList.size() > 0) {
            String[] shopMemberRankKey = new String[memberGoodsRankList.size()];
            Integer[] shopMemberRankValue = new Integer[memberGoodsRankList.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < memberGoodsRankList.size(); i++) {
                shopMemberRankKey[i] = memberGoodsRankList.get(i).getMapKey();
                shopMemberRankValue[i] = memberGoodsRankList.get(i).getMapValue();
            }
            plTotalMemberTotalVo.setGoodsRankKey(shopMemberRankKey);
            plTotalMemberTotalVo.setGoodsRankValue(shopMemberRankValue);
        }
        return plTotalMemberTotalVo;
    }
    /**
     * @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;
    }
}